-- File: CmFile.mesa - last edit: -- Evans: March 13, 1980 10:23 AM -- Tom: Aug 29, 1979 10:38 AM -- Mark: Sep 4, 1980 8:16 PM -- Smokey: Dec 29, 1978 5:13 PM DIRECTORY Ascii USING [NUL], Compatibility USING [SHandle], String USING [SubString]; CmFile: DEFINITIONS = BEGIN -- Routines to process any Cm file Open: PROCEDURE [fileName: STRING]; Close: PROCEDURE [fileName: STRING]; Line: PROCEDURE [fileName, title, name: STRING] RETURNS [STRING]; NextItem: PROCEDURE RETURNS [name, args: STRING]; OpenSection: PROCEDURE [fileName, title: STRING] RETURNS [BOOLEAN]; -- Use "User.cm" as fileName in above UserDotCmOpen: PROCEDURE; UserDotCmClose: PROCEDURE; UserDotCmLine: PROCEDURE [title, name: STRING] RETURNS [STRING]; UserDotCmNextItem: PROCEDURE RETURNS [name, args: STRING]; UserDotCmOpenSection: PROCEDURE [title: STRING] RETURNS [BOOLEAN]; -- Utilities Lop: PROCEDURE [ss: String.SubString] RETURNS [c: CHARACTER] = INLINE BEGIN IF ss.length = 0 THEN c ← Ascii.NUL ELSE {c ← ss.base[ss.offset]; ss.offset ← ss.offset+1; ss.length ← ss.length-1}; END; GetNextToken: PROCEDURE [source: String.SubString, token: STRING] RETURNS [valid: BOOLEAN]; GetNextTokenAsABoolean: PROCEDURE [source: String.SubString] RETURNS [b: BOOLEAN]; GetNextTokenAsANumber: PROCEDURE [source: String.SubString] RETURNS [i: INTEGER]; ReadLineOrToken: PROCEDURE [ sh: Compatibility.SHandle, buffer: STRING, terminator: CHARACTER] RETURNS [CHARACTER]; TitleMatch: PROCEDURE [buffer, title: STRING] RETURNS [BOOLEAN]; -- SIGNALs (and their codes) that can be raised ErrorCode: TYPE = {multipleOpens, noneOpen, notOpen}; Error: SIGNAL [code: ErrorCode]; END. -- of CmFile