-- File: Format.mesa last edit by Sandman on August 12, 1980 10:03 AM DIRECTORY String USING [SubString], Time USING [Packed]; Format: DEFINITIONS = BEGIN -- Format various types into strings and call procedure. -- Types StringProc: TYPE = PROCEDURE [s: STRING]; DateFormat: TYPE = {dateOnly, noSeconds, dateTime, full}; NumberFormat: TYPE = RECORD [ base: [2..36], zerofill, unsigned: BOOLEAN, columns: [0..255]]; LongSubStringDescriptor: TYPE = RECORD [ base: LONG STRING, offset, length: CARDINAL]; LongSubString: TYPE = POINTER TO LongSubStringDescriptor; -- Constants OctalFormat: NumberFormat = [ -- 0 columns means use as many as needed. base: 8, zerofill: FALSE, unsigned: TRUE, columns: 0]; DecimalFormat: NumberFormat = [base: 10, zerofill: FALSE, unsigned: FALSE, columns: 0]; -- Format procedures Char: PROCEDURE [c: CHARACTER, proc: StringProc]; Date: PROCEDURE [ pt: Time.Packed, format: DateFormat ← noSeconds, proc: StringProc]; Decimal: PROCEDURE [n: INTEGER, proc: StringProc] = INLINE BEGIN Number[n, DecimalFormat, proc] END; LongDecimal: PROCEDURE [n: LONG INTEGER, proc: StringProc] = INLINE BEGIN LongNumber[n, DecimalFormat, proc]; END; LongNumber: PROCEDURE [ n: LONG UNSPECIFIED, format: NumberFormat, proc: StringProc]; LongOctal: PROCEDURE [n: LONG UNSPECIFIED, proc: StringProc]; -- Adds 'B after number. LongString: PROCEDURE [s: LONG STRING, proc: StringProc]; LongSubStringItem: PROCEDURE [ss: LongSubString, proc: StringProc]; -- Repeatedly calls proc with strings filled from ss Number: PROCEDURE [n: UNSPECIFIED, format: NumberFormat, proc: StringProc]; Octal: PROCEDURE [n: UNSPECIFIED, proc: StringProc]; -- Adds 'B after number. SubString: PROCEDURE [ss: String.SubString, proc: StringProc]; -- Repeatedly calls proc with strings filled from ss END. -- Format.mesa