(* Renamed for readability. Semantics unchanged. Original identifiers: see docs/compiler/ + src/compiler/RENAME-MAP.md. *) DEFINITION MODULE SCANNER; FROM SYSTEM IMPORT ADDRESS, WORD; FROM Compiler IMPORT RecordPtr; (* to be sure Compiler is first dependency *) FROM Files IMPORT FILE; FROM SymTab IMPORT T1, StringPtr; (* NOTE: parameter names are single letters AND MUST MATCH the MOD exactly (Turbo v1.00 rejects DEF/MOD signature mismatches, proven on hardware). Texts/ComLine/Loader/Doubles/Errors intentionally NOT imported here: nothing in this interface uses them (verified), the IMPLEMENTATION module imports them itself, and every imported name counts against the compiler's fixed import/export name table (proven by overflow experiments). *) TYPE Ext = ARRAY [0..2] OF CHAR; T = POINTER TO ARRAY [0..6] OF WORD; Buf = ARRAY [0..128] OF CHAR; (* Identifier = ARRAY [0..14] OF CHAR; StringPtr = POINTER TO Identifier; *) List = POINTER TO ListDesc; ListDesc = RECORD first: T1; ident: StringPtr END; TypeOfChar = [0..255]; VAR scanOpt: BITSET; curCh: CHAR; codeFile: FILE; curSym: CARDINAL; isLit: BOOLEAN; cardVal: CARDINAL; curNode: RecordPtr; identKd: CARDINAL; follSet: BITSET; tokBuf: Buf; litType: RecordPtr; scopeCur: T1; realVal: REAL; srcFile: FILE; lrealVal: LONGREAL; codeBuf: ADDRESS; codeSize: CARDINAL; listing: BOOLEAN; charClas: POINTER TO ARRAY [0..255] OF TypeOfChar; tokPos: CARDINAL; tokCol: CARDINAL; keyHash: PROCEDURE(ADDRESS, BOOLEAN):CARDINAL; PROCEDURE GetSym; PROCEDURE NextCh; PROCEDURE PushWith; PROCEDURE AcceptSy(s: CARDINAL): BOOLEAN; PROCEDURE GetStack(VAR m: ADDRESS); PROCEDURE CheckStk(m: ADDRESS); PROCEDURE Allocate(VAR a:ADDRESS; n:CARDINAL); PROCEDURE ExpectSy(s: CARDINAL); PROCEDURE TestSet(s: BITSET); PROCEDURE TestR40(s: BITSET); PROCEDURE TestR13(s: BITSET); PROCEDURE NeedID; PROCEDURE ExpectKd(k: CARDINAL); PROCEDURE NewSized(k:CARDINAL):ADDRESS; PROCEDURE NewNode(k:CARDINAL):ADDRESS; PROCEDURE CopyStr(VAR d:ADDRESS; VAR s: ARRAY OF CHAR); PROCEDURE OpenScop(a:ADDRESS; b: ADDRESS); PROCEDURE MakeIden(k:CARDINAL):ADDRESS; PROCEDURE DeclIden(k:CARDINAL):ADDRESS; PROCEDURE InsertSy(n: T1); PROCEDURE ExpectSt(VAR p: ARRAY OF CHAR); PROCEDURE FindIden(l: List; i: ADDRESS; c: BOOLEAN):RecordPtr; PROCEDURE StrCmp(a,b: ADDRESS; c: BOOLEAN): BOOLEAN; (* v1.00: StringPtr params rejected (pointer-type mismatch); ADDRESS+overlay is codegen-identical *) PROCEDURE StrLen(VAR s: ARRAY OF CHAR): CARDINAL; PROCEDURE ChangeEx(VAR f: ARRAY OF CHAR; e: Ext; x: BOOLEAN); PROCEDURE ScanErr(c: CARDINAL); PROCEDURE EnterMod(m: ARRAY OF CHAR; k: CARDINAL): CARDINAL; PROCEDURE InitScan; PROCEDURE OpenSrc; PROCEDURE Compile; END SCANNER.