-- file: TangleImpl.mesa -- Pascal-to-Mesa translator output, translated at September 23, 1986 11:39:50 am PDT DIRECTORY PascalBasic, PascalWizardFiles, TanglePrivate; TangleImpl: PROGRAM IMPORTS PascalBasic, PascalWizardFiles, TanglePrivate EXPORTS TanglePrivate = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, TanglePrivate; --2:----4:----$C-,A+,D- ----[$C+,D+]----:4 --:78----9:-- History: PascalInteger[0..3]; --:9----13:--Xord: LONG POINTER TO ARRAY PascalChar OF AsciiCode _ PascalStaticZone.NEW[ARRAY PascalChar OF AsciiCode]; Xchr: LONG POINTER TO ARRAY AsciiCode OF PascalChar _ PascalStaticZone.NEW[ARRAY AsciiCode OF PascalChar]; --:13----20:-- TermOut: TextFile; --:20----23: WebFile: TextFile; ChangeFile: TextFile; --:23----25: PascalFile: TextFile; Pool: TextFile; --:25----27: Buffer: LONG POINTER TO ARRAY PascalInteger[0..5000] OF AsciiCode _ PascalStaticZone.NEW[ARRAY PascalInteger[0..5000] OF AsciiCode]; --:27----29:-- PhaseOne: PascalBoolean; ByteStart: LONG POINTER TO ARRAY PascalInteger[0..4000] OF SixteenBits _ PascalStaticZone.NEW[ARRAY PascalInteger[0..4000] OF SixteenBits]; TokStart: LONG POINTER TO ARRAY PascalInteger[0..2000] OF SixteenBits _ PascalStaticZone.NEW[ARRAY PascalInteger[0..2000] OF SixteenBits]; Link: LONG POINTER TO ARRAY PascalInteger[0..4000] OF SixteenBits _ PascalStaticZone.NEW[ARRAY PascalInteger[0..4000] OF SixteenBits]; Ilk: LONG POINTER TO ARRAY PascalInteger[0..4000] OF SixteenBits _ PascalStaticZone.NEW[ARRAY PascalInteger[0..4000] OF SixteenBits]; Equiv: LONG POINTER TO ARRAY PascalInteger[0..4000] OF SixteenBits _ PascalStaticZone.NEW[ARRAY PascalInteger[0..4000] OF SixteenBits]; TextLink: LONG POINTER TO ARRAY PascalInteger[0..2000] OF SixteenBits _ PascalStaticZone.NEW[ARRAY PascalInteger[0..2000] OF SixteenBits]; --:38----40: NamePtr: NamePointer; StringPtr: NamePointer; BytePtr: LONG POINTER TO ARRAY PascalInteger[0..1] OF PascalInteger[0..45000] _ PascalStaticZone.NEW[ARRAY PascalInteger[0..1] OF PascalInteger[0..45000]]; PoolCheckSum: PascalInteger; --:40----44: TextPtr: TextPointer; TokPtr: LONG POINTER TO ARRAY PascalInteger[0..2] OF PascalInteger[0..50000] _ PascalStaticZone.NEW[ARRAY PascalInteger[0..2] OF PascalInteger[0..50000]]; Z: PascalInteger[0..2]; --MAX_TOK_PTR:ARRAY[0..2]OF 0..MAX_TOKS;----:44----50:-- IdFirst: PascalInteger[0..BufSize]; IdLoc: PascalInteger[0..BufSize]; DoubleChars: PascalInteger[0..BufSize]; Hash: LONG POINTER TO ARRAY PascalInteger[0..353] OF SixteenBits _ PascalStaticZone.NEW[ARRAY PascalInteger[0..353] OF SixteenBits]; ChopHash: LONG POINTER TO ARRAY PascalInteger[0..353] OF SixteenBits _ PascalStaticZone.NEW[ARRAY PascalInteger[0..353] OF SixteenBits]; ChoppedId: LONG POINTER TO ARRAY PascalInteger[0..12] OF AsciiCode _ PascalStaticZone.NEW[ARRAY PascalInteger[0..12] OF AsciiCode]; --:50----65: ModText: LONG POINTER TO ARRAY PascalInteger[0..400] OF AsciiCode _ PascalStaticZone.NEW[ARRAY PascalInteger[0..400] OF AsciiCode]; --:65----70: LastUnnamed: TextPointer; --:70----79:-- CurState: OutputState; Stack: LONG POINTER TO ARRAY PascalInteger[1..50] OF OutputState _ PascalStaticZone.NEW[ARRAY PascalInteger[1..50] OF OutputState]; StackPtr: PascalInteger[0..StackSize]; --:79 --80:-- Zo: PascalInteger[0..2]; --:80----82:-- BraceLevel: EightBits; --:82----86:-- CurVal: PascalInteger; --:86----94:--OutBuf: LONG POINTER TO ARRAY PascalInteger[0..144] OF AsciiCode _ PascalStaticZone.NEW[ARRAY PascalInteger[0..144] OF AsciiCode]; OutPtr: PascalInteger[0..OutBufSize]; BreakPtr: PascalInteger[0..OutBufSize]; SemiPtr: PascalInteger[0..OutBufSize]; --:94----95:-- OutState: EightBits; OutVal: PascalInteger; OutApp: PascalInteger; OutSign: AsciiCode; LastSign: PascalInteger[-1..1]; --:95----100: OutContrib: LONG POINTER TO ARRAY PascalInteger[1..72] OF AsciiCode _ PascalStaticZone.NEW[ARRAY PascalInteger[1..72] OF AsciiCode]; --:100----124:-- Line: PascalInteger; OtherLine: PascalInteger; TempLine: PascalInteger; Limit: PascalInteger[0..BufSize]; Loc: PascalInteger[0..BufSize]; InputHasEnded: PascalBoolean; Changing: PascalBoolean; --:124----126: ChangeBuffer: LONG POINTER TO ARRAY PascalInteger[0..5000] OF AsciiCode _ PascalStaticZone.NEW[ARRAY PascalInteger[0..5000] OF AsciiCode]; ChangeLimit: PascalInteger[0..BufSize]; --:126----143:-- CurModule: NamePointer; ScanningHex: PascalBoolean; --:143----156: NextControl: EightBits; --:156----164:-- CurReplText: TextPointer; --:164 --171:-- ModuleCount: PascalInteger[0..12287]; Error9999: ERROR = CODE; TangleRun: UnsafeCommandProc = BEGIN --FOR ZO:=0 TO 2 DO MAX_TOK_PTR[ZO]:=TOK_PTR[ZO]; -- ----112:-- {ENABLE Error9999 => GOTO Label9999;Initialize[];--134:--OpenInput[];Line_0;OtherLine_0;Changing_TRUE; PrimeTheChangeBuffer[];Changing_ NOT Changing;TempLine_OtherLine; OtherLine_Line;Line_TempLine;Limit_0;Loc_1;Buffer^[0]_32; InputHasEnded_FALSE;--:134--{PascalWriteLongString[file: @TermOut, item: "This is Tangle 2.7 for Cedar 6.0"]; PascalWriteLn[file: @TermOut]};--183: PhaseOne_TRUE;ModuleCount_0;DO NextControl_SkipAhead[]; IF NextControl=136 THEN EXIT; ENDLOOP;WHILE NOT InputHasEnded DO ScanModule[] ENDLOOP ;--138: IF ChangeLimit#0 THEN BEGIN FOR i:INT IN [ INT[0 ].. INT[ChangeLimit ]] DO Loc _ i; Buffer^[Loc] _ChangeBuffer^[Loc] ENDLOOP;Limit_ChangeLimit;Changing_TRUE; Line_OtherLine;Loc_ChangeLimit;BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "! Change file entry did not match"];Error[]; END; END--:138--; PhaseOne_FALSE;--:183--IF TextLink^[0]=0 THEN BEGIN BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "! No output was specified."]; END; IF History=0 THEN History_1; END ELSE BEGIN --96:-- BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "Writing the output file"]; END;PascalTextBREAK[file: @TermOut];--83: StackPtr_1;BraceLevel_0;CurState.NameField_0; CurState.ReplField_TextLink^[0];Zo_ CurState.ReplField MOD 3; CurState.ByteField_TokStart^[CurState.ReplField]; CurState.EndField_TokStart^[CurState.ReplField+3]; CurState.ModField_0;--:83--OutState_0;OutPtr_0;BreakPtr_0; SemiPtr_0;OutBuf^[0]_0;Line_1;--:96--SendTheOutput[];--98: BreakPtr_OutPtr;SemiPtr_0;FlushBuffer[]; IF BraceLevel#0 THEN BEGIN PascalWriteLn[file: @TermOut]; {PascalWriteLongString[file: @TermOut, item: "! Program ended at brace level "]; PascalWriteInteger[file: @TermOut, item: BraceLevel, fieldMinLength: 1]};Error[]; END;--:98--BEGIN PascalWriteLn[file: @TermOut];PascalWriteLongString[file: @TermOut, item: "Done."]; END; END--:112--; EXITS Label9999 => NULL};IF INT[StringPtr]>128 THEN--184:--BEGIN BEGIN PascalWriteLn[file: @TermOut]; {PascalWriteInteger[file: @TermOut, item: StringPtr-128, fieldMinLength: 1]; PascalWriteLongString[file: @TermOut, item: " strings written to string pool file."] }; END;PascalWriteLongString[file: @Pool, item: "*"]; FOR i:INT IN [ INT[1 ].. INT[9 ]] DO StringPtr _ i; OutBuf^[StringPtr]_ PoolCheckSum MOD 10;PoolCheckSum_ PoolCheckSum /10; ENDLOOP; FOR i:INT DECREASING IN [ INT[1 ].. INT[9 ]] DO StringPtr _ i; PascalWriteChar[file: @Pool, item: Xchr^[48+OutBuf^[StringPtr]]] ENDLOOP; PascalWriteLn[file: @Pool]; END--:184--;--[186:]BEGIN WRITELN(TERM_OUT); -- WRITE(TERM_OUT,'Memory usage statistics:');END;BEGIN WRITELN(TERM_OUT); -- WRITE(TERM_OUT,NAME_PTR:1,' names, ',TEXT_PTR:1,' replacement texts;'); -- END;BEGIN WRITELN(TERM_OUT);WRITE(TERM_OUT,BYTE_PTR[0]:1);END; -- FOR WO:=1 TO 1 DO WRITE(TERM_OUT,'+',BYTE_PTR[WO]:1); -- WRITE(TERM_OUT,' bytes, ',MAX_TOK_PTR[0]:1); -- FOR ZO:=1 TO 2 DO WRITE(TERM_OUT,'+',MAX_TOK_PTR[ZO]:1); -- WRITE(TERM_OUT,' tokens.');[:186];--FileClose[@WebFile]; FileClose[@ChangeFile];FileClose[@PascalFile];FileClose[@Pool];--187: SELECT History FROM 0 =>BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "(No errors were found.)"]; END;1 =>BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "(Did you see the warning message above?)"]; END; 2 =>BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "(Pardon me, but I think I spotted something wrong.)"]; END;3 =>BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "(That was a fatal error, my friend.)"]; END; ENDCASE--:187--; PascalWriteLn[file: @TermOut];--:182 END; PascalRegister["Tangle", TangleRun]; END.