> module MGRlib Module that acts as interface to MGR window manager. Window manager functions by picking up escaped command from standard output. > (setTextRegion, textReset, clear, clearEvent, func, > line, setCursor, setEvent, setMode, shapeWindow, > stringTo, printOver, movePrintTo,writeVert) > where Function generalises command formats > command :: String -> [Int] -> String > command str ns = ('\ESC':foldr f "" ns) > where f n "" = show n ++ str > f n s = show n ++ "," ++ s setTextRegion : define a text Region by its origin height and width > setTextRegion :: [Int] -> String > setTextRegion = command "t" textReset : clear textRegion > textReset :: String > textReset = ('\ESC':"t") clear : clears the current text Region > clear :: String > clear = "\^L" clearEvent : clears the string corresponding to events given. > clearEvent event = command "e" [mapEvent event] mapEvent : used to stop the up and down of the button registering 2 events > mapEvent event = if ((event == 3) || (event == 4)) then (2-event) else event func : sets up the drawing mode for graphics and bit_blt operations. func 4 = invertMode func 0 = deleteMode func 15 = insertMode > func :: Int -> String > func mode = command "b" [mode] line : draw a line from (x0,y0) to (x1,y1) > line :: [Int] -> String > line = command "l" -- x0 y0 x1 y1 setCursor : sets the cursor style setcursor 0 = Normal setcursor 7 = Off > setCursor n = command "h" [n] setEvent : Associate a string with an event. When the event is triggered the string is placed on the standard input > setEvent event str = command ("e"++str) [mapEvent event, length str] setMode : set up various window modes setMode 1 = Standard screen colour orientation setMode 2 = White on black setMode 7 = overwrite etc.. > setMode mode = command "S" [mode] shapeWindow : Place the window at (x,y) with width w and height h > shapeWindow :: [Int] -> String > shapeWindow = command "W" -- x y w h stringTo : Places text at x y on window win. Merges with anything there > stringTo :: Int -> Int -> Int -> String -> String > stringTo win x y str = command ("."++str) [win,x,y,length str] printOver : Prints over existing character > printOver :: Int -> Int -> String -> String > printOver w h str = concat [func 0, stringTo 0 w h (take (length str) spaces),func 4,stringTo 0 w h str,func 15] > where > spaces = ' ':spaces movePrintTo : Puts print in a text Region > movePrintTo :: Int -> Int -> String -> String > movePrintTo w h str = concat [func 4, stringTo 0 w h str, func 15] writeVert: Print a String vertically downwards. > writeVert :: (Int,Int) -> [String] -> String > writeVert (x,y) [] = [] > writeVert (x,y) (a:l) = printOver x y a ++ writeVert (x,(y+11)) l