-- LML original: Sandra Foubister, 1990 -- Haskell translation: Colin Runciman, May 1991 module Psfuns(pos8head, introline, lf, tile4, concrep) where import Geomfuns import Auxprogfuns concrep :: Int -> [a] -> [a] concrep x y = concat (take x (repeat y)) --CR headN, fN, ff and f replaced by newf - still needs cleaning up! pos8head :: [[Int]] -> [Char] pos8head coords = header ++ pamcat (map newf [1 .. 8]) coords where header = "%!PS-Adobe-1.0\n0.75 setlinewidth\n" ++ "/print0\n{\n} def\n" topos [x1,y1,x2,y2] = show x1++" "++show y1++" moveto\n"++ show x2++" "++show y2++" lineto\n" pamcat (f:fs) a = f a ++ pamcat fs a pamcat [] a = [] fpat h f coords = h ++ (concat . map topos . f) coords ++ "stroke} def\n" newf n = fpat ("/print" ++ show n ++ "\n{") (orient psmax n) introline, rowline, ss :: [Char] introline = "400 400 translate" rowline = "\n-288 36 translate" ss = "\n36 0 translate\nprint" sq :: Int -> [Char] sq num = ss ++ show num lf :: [Int] -> [Char] lf list = rowline ++ concat (map sq list) --CR this shouldn't be here :-) tile4 :: [Int] -> [Char] tile4 [n1,n2,n3,n4] = introline ++ concrep 4 (posrow n1 n2 ++ posrow n3 n4) ++ "\nshowpage\n" where posrow i j = rowline ++ concrep 4 (sq i ++ sq j) -- 36 is the size of the postscript square psmax :: Int psmax = 36