<> <> <> <> <> DIRECTORY Ascii USING [ControlC], Basics USING [BITAND], NSString USING [Character, String], <> <> <> NSTTY USING [], <> <> TTY USING [CharStatus, -- EchoClass, -- GetChar, GetEditedString, Handle, -- LineOverflow, -- PutChar, PutLine, PutString, RemoveCharacter, Rubout], TTYExtras USING [ --accents, bs, controlW, controlX, -- cr, -- DEL, ff, -- GetByte, -- Handle, lf, lowerAlpha, -- Object, -- numbers, -- PutByte, space--, star, upperAlpha --]; <> NSTTYBImpl: MONITOR LOCKS h USING h: Handle IMPORTS Basics, TTY, TTYExtras EXPORTS TTY, NSTTY, TTYExtras = BEGIN <> Handle: PUBLIC TYPE = REF Object; Object: PUBLIC TYPE = TTYExtras.Object; ESCAPE: BYTE = 377B; NSGetChar: PUBLIC SAFE PROCEDURE [h: Handle] RETURNS [c: NSString.Character] = TRUSTED BEGIN c _ [0, LOOPHOLE[TTY.GetChar[h]]]; <> <> <> <> < {entry _ @h.dataFile.inputTable[Get7BitByte[h]]; Convert[]};>> < {>> <> <> <> < {>> <> <> <> <> <> < {>> <> < {h.inputState _ idle; c _ h.inputChar; found _ TRUE};>> <> <> END; NSGetString: PUBLIC SAFE PROCEDURE [h: Handle, s: NSString.String, t: PROCEDURE [c: NSString.Character] RETURNS [status: TTY.CharStatus]] = TRUSTED { <> myT: SAFE PROC [char: CHAR] RETURNS [status: TTY.CharStatus] = TRUSTED { RETURN[t[[0, LOOPHOLE[char]]]]}; TTY.PutChar[h, TTY.GetEditedString[h, s, myT]]}; NSGetEditedString: PUBLIC SAFE PROCEDURE [h: Handle, s: NSString.String, t: PROCEDURE [c: NSString.Character] RETURNS [status: TTY.CharStatus]] RETURNS [c: NSString.Character] = TRUSTED BEGIN myT: SAFE PROC [char: CHAR] RETURNS [status: TTY.CharStatus] = TRUSTED { RETURN[t[[0, LOOPHOLE[c]]]]}; RETURN[[0, LOOPHOLE[TTY.GetEditedString[h, s, myT]]]]; <> <> <> <> <> < {>> <> <> <> < {>> <> <> < {>> <> <> <> < EchoPutChar[byte];>> < NULL};>> <> <> <> <> <> <> < {DeletePutChar[]; s.length _ s.length - 1};>> < {DeletePutChar[]; s.length _ s.length - 2};>> < {DeletePutChar[]; s.length _ s.length - 2};>> < {DeletePutChar[]; s.length _ s.length - 2};>> < NULL>> <> <> <> <> <> <> <> <<(SELECT s.bytes[s.length - 1] FROM>> <> < TRUE,>> < FALSE) DO DeleteChar[] ENDLOOP;>> <> <> <> < 0 THEN>> <> < SIGNAL TTY.Rubout;>> < DeleteChar[];>> < DeleteWord[];>> < DeleteInput[];>> <>> <> < {>> <> <> <> < {>> <> < {>> <> <> <> < PutISOChar[h, byte];>> < NULL;>> <> END; <> < {h.outputState _ idle; h.inputState _ idle};>> <> <> <> <