-- file: TangleScan.mesa -- Pascal-to-Mesa translator output, translated at September 23, 1986 11:39:50 am PDT DIRECTORY PascalBasic, PascalWizardFiles, TanglePrivate, TangleProcArray; TangleScan: PROGRAM IMPORTS PascalBasic, PascalWizardFiles, TanglePrivate, TangleProcArray EXPORTS TanglePrivate = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, TanglePrivate, TangleProcArray; --:145----157:-- ScanNumeric: PROCEDURE[P: NamePointer] = BEGIN Accumulator:PascalInteger;NextSign:PascalInteger[-1..1];Q:NamePointer;Val:PascalInteger; --158:-- Accumulator_0;NextSign_1; {WHILE TRUE DO BEGIN NextControl_GetNext[]; DO {--Label21:--SELECT NextControl FROM 48,49,50,51,52,53,54,55,56,57 =>BEGIN--160:--Val_0; DO Val_10*Val+NextControl-48;NextControl_GetNext[]; IF( INT[NextControl]>57)OR ( INT[NextControl]<48)--:160-- THEN EXIT; ENDLOOP; BEGIN Accumulator_Accumulator+NextSign*(Val);NextSign_1; END; GOTO Label21; END;12 =>BEGIN--161:--Val_0;NextControl_48; DO Val_8*Val+NextControl-48;NextControl_GetNext[]; IF( INT[NextControl]>55)OR ( INT[NextControl]<48)--:161-- THEN EXIT; ENDLOOP; BEGIN Accumulator_Accumulator+NextSign*(Val);NextSign_1; END; GOTO Label21; END;13 =>BEGIN--162:--Val_0;NextControl_48; DO IF INT[NextControl]>=65 THEN NextControl_NextControl-7; Val_16*Val+NextControl-48;NextControl_GetNext[]; IF( INT[NextControl]>70)OR ( INT[NextControl]<48)OR (( INT[NextControl]>57)AND ( INT[NextControl]<65))--:162-- THEN EXIT; ENDLOOP;BEGIN Accumulator_Accumulator+NextSign*(Val); NextSign_1; END; GOTO Label21; END;130 =>BEGIN Q_IdLookup[0]; IF Ilk^[Q]#1 THEN BEGIN NextControl_42; GOTO Label21; END; BEGIN Accumulator_Accumulator+NextSign*( INT[Equiv^[Q]]-32768);NextSign_1; END; END;43 => NULL;45 =>NextSign_-NextSign;132,133,135,134,136 => GOTO Label30; 59 =>BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "! Omit semicolon in numeric definition"];Error[]; END; ENDCASE =>--159:--BEGIN BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "! Improper numeric definition will be flushed"];Error[]; END;DO NextControl_SkipAhead []; IF( INT[NextControl]>=132) THEN EXIT; ENDLOOP; IF NextControl=135 THEN BEGIN Loc_Loc-2;NextControl_GetNext[]; END; Accumulator_0; GOTO Label30; END--:159--;EXIT; EXITS Label21 => NULL} ENDLOOP; END ENDLOOP ;EXITS Label30 => NULL};--:158--IF ABS[Accumulator]>=32768 THEN BEGIN BEGIN PascalWriteLn[file: @TermOut]; {PascalWriteLongString[file: @TermOut, item: "! Value too big: "]; PascalWriteInteger[file: @TermOut, item: Accumulator, fieldMinLength: 1]};Error[]; END; Accumulator_0; END;Equiv^[P]_Accumulator+32768; END;--:157----165: ScanRepl: PROCEDURE[T: EightBits] = BEGIN A:SixteenBits; B:AsciiCode;Bal:EightBits; Bal_0; {WHILE TRUE DO BEGIN DO {--Label22:--A_GetNext[];SELECT A FROM 40 =>Bal_Bal+1; 41 =>IF Bal=0 THEN BEGIN PascalWriteLn[file: @TermOut];PascalWriteLongString[file: @TermOut, item: "! Extra )"]; Error[]; END ELSE Bal_Bal-1;39 =>--168:--BEGIN B_39; {WHILE TRUE DO BEGIN BEGIN IF TokPtr^[Z]=MaxToks THEN BEGIN PascalWriteLn[file: @TermOut];{PascalWriteLongString[file: @TermOut, item: "! Sorry, "]; PascalWriteLongString[file: @TermOut, item: "token"]; PascalWriteLongString[file: @TermOut, item: " capacity exceeded"]}; Error[];History_3;JumpOut[]; END;TokMem[Z, TokPtr^[Z]]^_B; TokPtr^[Z]_TokPtr^[Z]+1; END; IF B=64 THEN IF Buffer^[Loc]=64 THEN Loc_Loc+1 ELSE BEGIN PascalWriteLn[file: @TermOut];PascalWriteLongString[file: @TermOut, item: "! You should double @ signs in strings"]; Error[]; END;IF Loc=Limit THEN BEGIN BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "! String didn't end"];Error[]; END;Buffer^[Loc]_39; Buffer^[Loc+1]_0; END;B_Buffer^[Loc];Loc_Loc+1; IF B=39 THEN BEGIN IF Buffer^[Loc]#39 THEN GOTO Label31 ELSE BEGIN Loc_Loc+1 ;BEGIN IF TokPtr^[Z]=MaxToks THEN BEGIN PascalWriteLn[file: @TermOut]; {PascalWriteLongString[file: @TermOut, item: "! Sorry, "]; PascalWriteLongString[file: @TermOut, item: "token"]; PascalWriteLongString[file: @TermOut, item: " capacity exceeded"]};Error[]; History_3;JumpOut[]; END;TokMem[Z, TokPtr^[Z]]^_39; TokPtr^[Z]_TokPtr^[Z]+1; END; END; END; END ENDLOOP ;EXITS Label31 => NULL}; END--:168--; 35 =>IF T=3 THEN A_0;--167:--130 =>BEGIN A_IdLookup[0]; BEGIN IF TokPtr^[Z]=MaxToks THEN BEGIN PascalWriteLn[file: @TermOut]; {PascalWriteLongString[file: @TermOut, item: "! Sorry, "]; PascalWriteLongString[file: @TermOut, item: "token"]; PascalWriteLongString[file: @TermOut, item: " capacity exceeded"]};Error[]; History_3;JumpOut[]; END;TokMem[Z, TokPtr^[Z]]^_( PascalDIVPower2[A ,8])+128; TokPtr^[Z]_TokPtr^[Z]+1; END;A_ PascalMODPower2Mask[A ,255]; END; 135 =>IF T#135 THEN GOTO Label30 ELSE BEGIN BEGIN IF TokPtr^[Z]=MaxToks THEN BEGIN PascalWriteLn[file: @TermOut]; {PascalWriteLongString[file: @TermOut, item: "! Sorry, "]; PascalWriteLongString[file: @TermOut, item: "token"]; PascalWriteLongString[file: @TermOut, item: " capacity exceeded"]};Error[]; History_3;JumpOut[]; END;TokMem[Z, TokPtr^[Z]]^_( PascalDIVPower2[CurModule ,8])+168; TokPtr^[Z]_TokPtr^[Z]+1; END;A_ PascalMODPower2Mask[CurModule ,255]; END;2 =>--169: BEGIN BEGIN IF TokPtr^[Z]=MaxToks THEN BEGIN PascalWriteLn[file: @TermOut]; {PascalWriteLongString[file: @TermOut, item: "! Sorry, "]; PascalWriteLongString[file: @TermOut, item: "token"]; PascalWriteLongString[file: @TermOut, item: " capacity exceeded"]};Error[]; History_3;JumpOut[]; END;TokMem[Z, TokPtr^[Z]]^_2; TokPtr^[Z]_TokPtr^[Z]+1; END;Buffer^[Limit+1]_64; WHILE Buffer^[Loc]#64 DO BEGIN BEGIN IF TokPtr^[Z]=MaxToks THEN BEGIN PascalWriteLn[file: @TermOut]; {PascalWriteLongString[file: @TermOut, item: "! Sorry, "]; PascalWriteLongString[file: @TermOut, item: "token"]; PascalWriteLongString[file: @TermOut, item: " capacity exceeded"]};Error[]; History_3;JumpOut[]; END;TokMem[Z, TokPtr^[Z]]^_Buffer^[Loc]; TokPtr^[Z]_TokPtr^[Z]+1; END;Loc_Loc+1; IF INT[Loc]=Limit THEN BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "! Verbatim string didn't end"];Error[]; END ELSE IF Buffer^[Loc+1]#62 THEN BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "! You should double @ signs in verbatim strings"];Error[]; END;Loc_Loc+2; END--:169--; 133,132,134 =>IF T#135 THEN GOTO Label30 ELSE BEGIN BEGIN PascalWriteLn[file: @TermOut]; {PascalWriteLongString[file: @TermOut, item: "! @"]; PascalWriteChar[file: @TermOut, item: Xchr^[Buffer^[Loc-1]]]; PascalWriteLongString[file: @TermOut, item: " is ignored in Pascal text"]}; Error[]; END; GOTO Label22; END;136 => GOTO Label30;--:167-- ENDCASE => NULL; BEGIN IF TokPtr^[Z]=MaxToks THEN BEGIN PascalWriteLn[file: @TermOut]; {PascalWriteLongString[file: @TermOut, item: "! Sorry, "]; PascalWriteLongString[file: @TermOut, item: "token"]; PascalWriteLongString[file: @TermOut, item: " capacity exceeded"]};Error[]; History_3;JumpOut[]; END;TokMem[Z, TokPtr^[Z]]^_A; TokPtr^[Z]_TokPtr^[Z]+1; END;EXIT; EXITS Label22 => NULL} ENDLOOP; END ENDLOOP ;EXITS Label30 => NULL};NextControl_A;--166: IF INT[Bal]>0 THEN BEGIN IF Bal=1 THEN BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "! Missing )"];Error[]; END ELSE BEGIN PascalWriteLn[file: @TermOut]; {PascalWriteLongString[file: @TermOut, item: "! Missing "]; PascalWriteInteger[file: @TermOut, item: Bal, fieldMinLength: 1]; PascalWriteLongString[file: @TermOut, item: " )'s"]};Error[]; END; WHILE INT[Bal]>0 DO BEGIN BEGIN IF TokPtr^[Z]=MaxToks THEN BEGIN PascalWriteLn[file: @TermOut];{PascalWriteLongString[file: @TermOut, item: "! Sorry, "]; PascalWriteLongString[file: @TermOut, item: "token"]; PascalWriteLongString[file: @TermOut, item: " capacity exceeded"]}; Error[];History_3;JumpOut[]; END;TokMem[Z, TokPtr^[Z]]^_41; TokPtr^[Z]_TokPtr^[Z]+1; END;Bal_Bal-1; END ENDLOOP ; END--:166--; IF INT[TextPtr]>MaxTexts-3 THEN BEGIN PascalWriteLn[file: @TermOut]; {PascalWriteLongString[file: @TermOut, item: "! Sorry, "]; PascalWriteLongString[file: @TermOut, item: "text"]; PascalWriteLongString[file: @TermOut, item: " capacity exceeded"]};Error[]; History_3;JumpOut[]; END;CurReplText_TextPtr; TokStart^[TextPtr+3]_TokPtr^[Z];TextPtr_TextPtr+1; IF Z=2 THEN Z_0 ELSE Z_Z+1; END;--:165----170: DefineMacro: PROCEDURE[T: EightBits] = BEGIN P:NamePointer; P_IdLookup[T];ScanRepl[T];Equiv^[P]_CurReplText; TextLink^[CurReplText]_0; END;--:170----172:-- ScanModule: PROCEDURE = BEGIN P:NamePointer; --175:-- --:175-- ModuleCount_ModuleCount+1; --173:--NextControl_0; {WHILE TRUE DO BEGIN DO {--Label22:--WHILE INT[NextControl]<=132 DO BEGIN NextControl_ SkipAhead[];IF NextControl=135 THEN BEGIN Loc_Loc-2; NextControl_GetNext[]; END; END ENDLOOP ;IF NextControl#133 THEN GOTO Label30; NextControl_GetNext[]; IF NextControl#130 THEN BEGIN BEGIN PascalWriteLn[file: @TermOut]; {PascalWriteLongString[file: @TermOut, item: "! Definition flushed, must start with "] ; PascalWriteLongString[file: @TermOut, item: "identifier of length > 1"]};Error[]; END; GOTO Label22; END; NextControl_GetNext[]; IF NextControl=61 THEN BEGIN ScanNumeric[IdLookup[1]]; GOTO Label22; END ELSE IF NextControl=30 THEN BEGIN DefineMacro[2]; GOTO Label22; END ELSE--174:--IF NextControl=40 THEN BEGIN NextControl_GetNext[]; IF NextControl=35 THEN BEGIN NextControl_GetNext[]; IF NextControl=41 THEN BEGIN NextControl_GetNext[]; IF NextControl=61 THEN BEGIN BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "! Use == for macros"];Error[]; END;NextControl_30; END; IF NextControl=30 THEN BEGIN DefineMacro[3]; GOTO Label22; END; END; END; END; --:174--BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "! Definition flushed since it starts badly"];Error[]; END; EXIT; EXITS Label22 => NULL} ENDLOOP; END ENDLOOP ;EXITS Label30 => NULL};--:173--{SELECT NextControl FROM 134 =>P_0; 135 =>BEGIN P_CurModule;--176:--DO NextControl_GetNext[]; IF NextControl#43 THEN EXIT; ENDLOOP; IF(NextControl#61)AND (NextControl#30) THEN BEGIN BEGIN PascalWriteLn[file: @TermOut];PascalWriteLongString[file: @TermOut, item: "! Pascal text flushed, = sign is missing"]; Error[]; END;DO NextControl_SkipAhead[]; IF NextControl=136 THEN EXIT; ENDLOOP; GOTO Label10; END--:176--; END; ENDCASE => GOTO Label10 ;--177: StoreTwoBytes[53248+ModuleCount];--:177--ScanRepl[135];--178: IF P=0 THEN BEGIN TextLink^[LastUnnamed]_CurReplText; LastUnnamed_CurReplText; END ELSE IF Equiv^[P]=0 THEN Equiv^[P]_CurReplText ELSE BEGIN P_Equiv^ [P];WHILE INT[TextLink^[P]] NULL}; END;--:172----181:----PROCEDURE DEBUG_HELP;LABEL 888,10; -- VAR K:INTEGER;BEGIN DEBUG_SKIPPED:=DEBUG_SKIPPED+1; -- IF DEBUG_SKIPPED