-- Copyright (C) 1983 by Xerox Corporation. All rights reserved. -- OscarAdm.mesa, HGM, 21-Dec-83 0:49:46 DIRECTORY Ascii USING [BS, CR], Inline USING [LowHalf], OthelloDefs USING [], OthelloForgot USING [], String USING [AppendLongNumber, AppendNumber], TTY USING [ BlinkDisplay, Create, Destroy, GetChar, Handle, nullHandle, PutChar, ResetUserAbort, UserAbort]; OscarAdm: MONITOR IMPORTS Inline, String, TTY EXPORTS OthelloDefs, OthelloForgot = BEGIN ttyHandle: TTY.Handle ← TTY.Create["Oscar"L]; -- Hack to see startup printout WaitForConnection: PUBLIC PROCEDURE = BEGIN temp: TTY.Handle ← GrabIt[]; GrabIt: ENTRY PROCEDURE RETURNS [it: TTY.Handle] = BEGIN it ← ttyHandle; ttyHandle ← TTY.nullHandle; END; IF temp # TTY.nullHandle THEN TTY.Destroy[temp]; ttyHandle ← TTY.Create["Oscar"L]; END; BlinkDisplay: PUBLIC PROC = { TTY.BlinkDisplay[ttyHandle]}; CheckUserAbort: PUBLIC PROC = { IF TTY.UserAbort[ttyHandle] THEN {ResetAbort[]; ERROR ABORTED}}; EraseTTYChar: PUBLIC PROC [c: CHARACTER] = { SELECT c FROM IN [' ..'~] => NULL; Ascii.CR => RETURN; ENDCASE => EraseTTYChar[' ]; WriteChar[Ascii.BS]; WriteChar[' ]; WriteChar[Ascii.BS]}; NewLine: PUBLIC PROC = {WriteChar[Ascii.CR]}; ReadChar: PUBLIC PROC RETURNS [c: CHARACTER] = {RETURN[TTY.GetChar[ttyHandle]]}; ResetAbort: PUBLIC PROC = BEGIN TTY.ResetUserAbort[ttyHandle]; END; WriteChar: PUBLIC ENTRY PROC [c: CHARACTER] = BEGIN IF ttyHandle = TTY.nullHandle THEN RETURN; TTY.PutChar[ttyHandle, c ! ABORTED => CONTINUE]; END; WriteFixedWidthNumber: PUBLIC PROCEDURE [ x: LONG CARDINAL, count: CARDINAL, base: CARDINAL ← 10] = { WFD: PROCEDURE [x: LONG CARDINAL, c: CARDINAL] = { IF c = count THEN RETURN; WFD[x/base, c + 1]; WriteChar[IF c = 0 OR x # 0 THEN Inline.LowHalf[x MOD base] + '0 ELSE ' ]}; WFD[x, 0]}; WriteLongNumber: PUBLIC PROCEDURE [num: LONG CARDINAL] = { s: STRING ← [40]; String.AppendLongNumber[s, num, 10]; WriteString[s]}; WriteLongOctal: PUBLIC PROCEDURE [num: LONG CARDINAL] = { s: STRING ← [40]; String.AppendLongNumber[s, num, 8]; WriteString[s]}; WriteOctal: PUBLIC PROCEDURE [num: CARDINAL] = { s: STRING ← [40]; String.AppendNumber[s, num, 8]; WriteString[s]}; WriteLine: PUBLIC PROC [s: LONG STRING] = {WriteString[s]; NewLine[]}; WriteString: PUBLIC PROC [s: LONG STRING] = BEGIN i: CARDINAL; IF s = NIL THEN RETURN; FOR i ← 0, i + 1 WHILE i < s.length DO IF s[i] = '\\ AND s[i + 1] = 'r THEN { NewLine[]; i ← i + 1} ELSE WriteChar[s[i]]; ENDLOOP; END; END..