-- LML original: Sandra Foubister, 1990
-- Haskell translation: Colin Runciman, May 1991

module Mgrfuns(
       aligntext, bitcopy, circle, clear, clearevent,
       clearmode, destroywin, dragcircle, dragline,
       dragrect, font, func, go, highlight,
       line, mapevent, newwin, rcircle,
       selectwin, setevent, setmode, shapewindow, standend,
       stringto, standout, textregion, textreset) where

import Diff

--CR should try to generalise this to cope with more (all?) commands
escom :: [Char] -> [Int] -> [Char]
escom str ns = '\ESC' : foldr f "" ns
               where
               f n "" = show n ++ str
               f n s = show n ++ "," ++ s

aligntext = '\ESC' : "l"

bitcopy = escom "b"  -- xd yd w h xs ys

circle = escom "o"   -- x y r

clear = "\FF"

clearevent event = escom "e" [mapevent event]

clearmode mode = escom "s" [mode]

destroywin n = escom ",OZ" [n]

dragcircle [x1,y1,x2,y2] =
	circle [x1,y1,r]
        where
	r = bcroot (square (diff x1 x2) + square (diff y1 y2))

dragline = "%l\n"

dragrect = "%r\n"

font x = escom "F" [x]

func mode = escom "b" [mode]

go = escom "g" -- x y

highlight = escom "H" -- x y w h

line = escom "l"      -- x0 y0 x1 y1

--CR explanation or abstraction needed for numeric literals here
mapevent event = if event == 3 || event == 4 then 2-event else event

newwin = escom "Z"    -- x y w h

rcircle r = escom "o" [r]

selectwin n = escom "Z" [n]

setevent event str = escom ("e"++str) [mapevent event, length str]

setmode mode = escom "S" [mode]

shapewindow = escom "W" -- x y w h

standend = '\ESC':",n"

standout = '\ESC':"i" -- OK

stringto win x y str = escom ("."++str) [win,x,y,length str]

textregion = escom "t" -- x y wide high

textreset = '\ESC':"t"  -- OK



