packages feed

cakyrespa-0.0.22: src/cakyrespa.hs

module Main where

import Minde(minde)
import Jimpe(jimpe)
import Tcidu(parse)
import Klesi(Text(ParseError), Minde(REJGAUSETAIJBO, TCIDUSETAIJBO))

import Graphics.UI.GLUT(mainLoop)
import Graphics.UI.GLUT.Turtle(
	initialize, openField, prompt, oninputtext,
	newTurtle, notundo, shape, shapesize)	
import Data.IORef(newIORef, readIORef)
import Data.IORef.Tools(atomicModifyIORef_)


--------------------------------------------------------------------------------

main :: IO ()
main = do
	_args <- initialize
	f <- openField "cakyrespa" 640 480
	t <- newTurtle f
	env <- newIORef []
	cmds <- newIORef []
	prompt f ".i "
	shape t "turtle"
	shapesize t 3 3
	notundo t
	oninputtext f $ \cmd -> do
		let	p = parse cmd
			j = jimpe p
		case (p, j) of
			(_, REJGAUSETAIJBO fp) ->
				writeFile fp . unlines . reverse =<< readIORef cmds
			(_, TCIDUSETAIJBO fp) ->
				readFile fp >>= minde f t env . jimpe . parse
					>> return ()
			(ParseError _, _) -> return ()
			_ -> atomicModifyIORef_ cmds ((".i" ++ cmd) :)
		minde f t env j
	mainLoop