/usr/lib/hugs/oldlib/AnsiInteract.hs is in hugs 98.200609.21-5.3ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | -----------------------------------------------------------------------------
-- Library of functions for writing interactive programs with screen-oriented
-- I/O (assumes Ansi screen).
--
-- Suitable for use with Hugs 98.
-----------------------------------------------------------------------------
module AnsiInteract(
module AnsiInteract,
module Interact,
module AnsiScreen
) where
import AnsiScreen
import Interact
-- Screen oriented input/output functions:
clearScreen :: Interact -> Interact
writeAt :: Pos -> String -> Interact -> Interact
moveTo :: Pos -> Interact -> Interact
readAt :: Pos -> -- Start coordinates
Int -> -- Maximum input length
(String -> Interact) -> -- How to use entered string
Interact
defReadAt :: Pos -> -- Start coordinates
Int -> -- Maximum input length
String -> -- Default string value
(String -> Interact) -> -- How to use entered string
Interact
promptReadAt :: Pos -> -- Start coordinates
Int -> -- Maximum input length
String -> -- Prompt
(String -> Interact) -> -- How to use entered string
Interact
defPromptReadAt :: Pos -> -- Start coordinates
Int -> -- Maximum input length
String -> -- Prompt
String -> -- Default string value
(String -> Interact) -> -- How to use entered string
Interact
clearScreen = writeStr cls
writeAt (x,y) s = writeStr (goto x y ++ s)
moveTo (x,y) = writeStr (goto x y)
readAt pt l use = writeAt pt (replicate l '_') (moveTo pt (loop 0 ""))
where loop n s = readChar (return s) (\c ->
case c of '\BS' -> delete n s
'\DEL' -> delete n s
'\n' -> return s
c | n < l -> writeChar c (loop (n+1) (c:s))
| otherwise -> ringBell (loop n s))
delete n s = if n>0 then writeStr "\BS_\BS" (loop (n-1) (tail s))
else ringBell (loop 0 "")
return s = use (reverse s)
defReadAt (x,y) l def use
= writeAt (x,y) (take l (def++repeat '_')) (
readChar (use def) (\c ->
if c=='\n' then use def
else unreadChar c (readAt (x,y) l use)))
promptReadAt (x,y) l prompt use
= writeAt (x,y) prompt (readAt (x+length prompt,y) l use)
defPromptReadAt (x,y) l prompt def use
= writeAt (x,y) prompt (
defReadAt (x+length prompt,y) l def use)
-----------------------------------------------------------------------------
|