-- last edited by Barth, December 6, 1981 5:35 PM
-- lasted edited by Chi Yung Fu, March 26, 1982 3:10 PM
-- lasted edited by Chi Yung Fu, April 30, 1982 2:37 PM
-- lasted edited by Chi Yung Fu, September 1, 1983 11:31 AM

DIRECTORY
vmD: FROM "VirtualMgrDefs";

MachineParseDefs: DEFINITIONS =
BEGIN

-- Types --

Nibble: TYPE = [0..15];

ParseHandle: TYPE = POINTER TO ParseData;

ParseData: TYPE = RECORD[
breakSet: STRING,
blankSet: STRING,
currentChar: vmD.CharIndex,
message: vmD.VirtualMessagePtr,
userData: POINTER];

ParseFault: ERROR [why:STRING, pfBegin:vmD.CharIndex, pfEnd:vmD.CharIndex];

FieldRec: TYPE = RECORD[
name: STRING,
parseProc: FieldParseProc,
found: BOOLEAN ← FALSE,
mustExist: BOOLEAN ← TRUE];

MaxFieldNameLength: CARDINAL = 50;

FieldParseProc: TYPE = PROCEDURE[ph:ParseHandle];

-- Exported by MachineParse

ParseMessage: PROCEDURE [ph:ParseHandle,
fields:DESCRIPTOR FOR ARRAY OF FieldRec];
IsBlank: PROCEDURE [ph:ParseHandle, c:CHARACTER] RETURNS [BOOLEAN];
IsBreak: PROCEDURE [ph:ParseHandle, c:CHARACTER] RETURNS [BOOLEAN];
CheckChar: PROCEDURE[ph:ParseHandle, c:CHARACTER];
ParseChar: PROCEDURE[ph:ParseHandle] RETURNS [c:CHARACTER];
ParseCharIfCharIs: PROCEDURE[ph:ParseHandle, c:CHARACTER] RETURNS [BOOLEAN];
ParseToEndOfField: PROCEDURE[ph:ParseHandle];
ParseToEndOfLine: PROCEDURE[ph:ParseHandle];
ParseToNonWhite: PROCEDURE[ph:ParseHandle];
ParseToLeadingChar: PROCEDURE[ph:ParseHandle] RETURNS[isThere: BOOLEAN];
ParseToLeadingCharOnLine: PROCEDURE[ph:ParseHandle] RETURNS[isThere: BOOLEAN];
ParseWord: PROCEDURE[ph:ParseHandle, s:STRING];
ParseDecimal: PROCEDURE [ph:ParseHandle, lBound:CARDINAL ← 0,
uBound:CARDINAL ← LAST[CARDINAL]] RETURNS [n:CARDINAL];
ParseScaledNumber: PROCEDURE[ph:ParseHandle, scale:INTEGER ← 0,
lBound:CARDINAL ← 0, uBound:CARDINAL ← LAST[CARDINAL]] RETURNS [n:CARDINAL
← 0, NumberOfDigitsAndDecimal: CARDINAL ← 0];
AppendScaleNumber: PROCEDURE[n: CARDINAL, scale: CARDINAL,

OutOfBoundString:STRING];
MissingValueCheck: PROCEDURE[ph:ParseHandle];
ParseNibble: PROCEDURE [ph:ParseHandle, lBound:CARDINAL, uBound:CARDINAL,
nullOK:BOOLEAN ← TRUE] RETURNS [n:Nibble];
ParseBinary: PROCEDURE[ph:ParseHandle] RETURNS[n:CARDINAL];
ParseTime: PROCEDURE[ph:ParseHandle] RETURNS[h,m,s:CARDINAL];

END.