-- 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