-- DOutModule.mesa Edited by -- Bruce on May 14, 1980 3:19 PM -- Mark on April 16, 1980 7:06 PM DIRECTORY Ascii: FROM "Ascii" USING [CR, NUL, SP], CharIO: FROM "chario", DebugFormat: FROM "DebugFormat" USING [LongSubString, NumberFormat], DebugOps: FROM "debugOps", DebugUsefulDefs: FROM "DebugUsefulDefs", DOutput: FROM "DOutput", Format: FROM "Format", Init: FROM "init" USING [myPlace], InlineDefs: FROM "inlinedefs" USING [LowHalf], IODefs: FROM "iodefs", NubOps: FROM "nubops", StreamDefs: FROM "StreamDefs" USING [StreamHandle], StringDefs: FROM "StringDefs" USING [ SubString, SubStringDescriptor], TextSW: FROM "TextSW" USING [InsertChar, InsertString, InsertSubString], UserInput: FROM "userinput" USING [userAbort]; DOutModule: PROGRAM IMPORTS DebugOps, Format, Init, InlineDefs, TextSW, UserInput EXPORTS CharIO, DebugOps, DebugUsefulDefs, DOutput, IODefs, NubOps = PUBLIC BEGIN OPEN DebugFormat; UserAborted: PUBLIC SIGNAL = CODE; WhereAmI: PROC RETURNS [NubOps.Place] = {RETURN[Init.myPlace]}; -- CharIO PutString: PROC [d: StreamDefs.StreamHandle, s: STRING] = {Text[s]}; PutSubString: PROC [d: StreamDefs.StreamHandle, s: StringDefs.SubString] = {SubString[s]}; PutDecimal: PROC [d: StreamDefs.StreamHandle, n: INTEGER] = {Decimal[n]}; PutOctal: PROC [d: StreamDefs.StreamHandle, n: UNSPECIFIED] = {Octal[n]}; -- DOutput newLine: BOOLEAN ← TRUE; OutChar: PROC [c: CHARACTER] = BEGIN TextSW.InsertChar[DebugOps.fileSW,c] END; NewLine: PROCEDURE RETURNS [BOOLEAN] = BEGIN RETURN[newLine] END; EOL: PROCEDURE = BEGIN IF ~newLine THEN OutChar[Ascii.CR]; newLine ← TRUE; END; Blanks: PROCEDURE [n: CARDINAL] = BEGIN THROUGH [0..n) DO OutChar[Ascii.SP] ENDLOOP; IF n # 0 THEN newLine ← FALSE; END; WriteChar, Char: PROCEDURE [c: CHARACTER] = BEGIN IF c # Ascii.NUL THEN OutChar[c]; newLine ← c = Ascii.CR; END; WriteString, Text: PROCEDURE [s: STRING] = BEGIN IF UserInput.userAbort THEN SIGNAL UserAborted; TextSW.InsertString[DebugOps.fileSW,s]; IF s.length # 0 THEN newLine ← s[s.length-1] = Ascii.CR; RETURN END; SubString: PROCEDURE [s: StringDefs.SubString] = BEGIN IF UserInput.userAbort THEN SIGNAL UserAborted; TextSW.InsertSubString[DebugOps.fileSW,s]; IF s.length # 0 THEN newLine ← s.base[s.length-1] = Ascii.CR; END; LongSubString: PROCEDURE [s: DebugFormat.LongSubString] = BEGIN ss: StringDefs.SubStringDescriptor ← [base: InlineDefs.LowHalf[s.base], offset: s.offset, length: s.length]; SubString[@ss] END; WriteLine, Line: PROCEDURE [s: STRING] = BEGIN Text[s]; Char[Ascii.CR] END; WriteNumber, Number: PROCEDURE [n: UNSPECIFIED, f: NumberFormat] = BEGIN Format.Number[n,f,Text] END; LongNumber: PROCEDURE [n: LONG CARDINAL, f: NumberFormat] = BEGIN Format.LongNumber[n, f, Text]; END; WriteDecimal, Decimal: PROCEDURE [n: INTEGER] = {Format.Decimal[n,Text]}; WriteOctal, Octal: PROCEDURE [n: UNSPECIFIED] = {Format.Octal[n, Text]}; LongDecimal: PROCEDURE [n: LONG INTEGER] = {Format.LongDecimal[n, Text]}; LongOctal: PROCEDURE [n: LONG CARDINAL] = {Format.LongOctal[n, Text]}; Put: PROC [s: StreamDefs.StreamHandle, c: UNSPECIFIED] = {Char[c]}; END.