module MyIO(getFilename,process) where import Numbers import Vectors import IO--1.3 import System(getArgs)--1.3 type InputCont = [String] -> IO () getFilename :: (String -> InputCont) -> InputCont getFilename success inp = getArgs >>= \ args -> case args of "help":_ -> usage [filename] -> success filename inp -- [] -> fromInp inp [] -> success "objects/four.plate" inp _ -> usage where test filename inp ('t':'r':_) = success filename inp test filename inp ('f':'r':_) = success filename inp test filename inp _ = hPutStr stderr ("Can not read: "++filename++"\n") >> hPutStr stderr "Give the filename of an object: " >> fromInp inp fromInp = error "fromInp" {-OLD: fromInp [] = return () fromInp (filename:rest) = statusFile filename >> test filename rest -} usage = hPutStr stderr "Usage: hiddenline [filename of object]\n" getDirection,getit :: (Vector -> InputCont) -> InputCont getDirection success inp = hPutStr stderr ("Give a view direction in the form of: x,y,z\n"++ "or 'quit' to stop\n") >> getit success inp getit success [] = return () getit success ("quit":ls) = return () getit success (l:ls) = case reads ("vec ["++l++"]") of [(v,_)] -> success v ls _ -> hPutStr stderr "again: " >> getit success ls process :: (Vector -> String -> String) -> String -> InputCont process f filename = getDirection (\ viewdir ls -> readFile filename >>= \ cs -> printFrom viewdir (process f filename) cs ls ) where printFrom viewdir cont cs ls = putStr (f viewdir cs) >> cont ls