-- file: TangleOutput.mesa -- Pascal-to-Mesa translator output, translated at September 23, 1986 11:39:50 am PDT DIRECTORY PascalBasic, PascalWizardFiles, TanglePrivate, TangleProcArray; TangleOutput: PROGRAM IMPORTS PascalBasic, PascalWizardFiles, TanglePrivate, TangleProcArray EXPORTS TanglePrivate = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, TanglePrivate, TangleProcArray; --74:----PROCEDURE PRINT_REPL(P:TEXT_POINTER);VAR K:0..MAX_TOKS; -- A:SIXTEEN_BITS;ZP:0..2; -- BEGIN IF P>=TEXT_PTR THEN WRITE(TERM_OUT,'BAD')ELSE BEGIN K:=TOK_START[P -- ];ZP:=P MOD 3;WHILE K=128 THEN[75:]BEGIN K:=K+1; -- IF A<168 THEN BEGIN A:=(A-128)*256+TOK_MEM[ZP,K];PRINT_ID(A); -- IF BYTE_MEM[A MOD 2,BYTE_START[A]]=34 THEN WRITE(TERM_OUT,'"')ELSE WRITE -- (TERM_OUT,' ');END ELSE IF A<208 THEN BEGIN WRITE(TERM_OUT,'@<'); -- PRINT_ID((A-168)*256+TOK_MEM[ZP,K]);WRITE(TERM_OUT,'@>'); -- END ELSE BEGIN A:=(A-208)*256+TOK_MEM[ZP,K]; -- WRITE(TERM_OUT,'@',XCHR[123],A:1,'@',XCHR[125]);END; -- END[:75]ELSE[76:]CASE A OF 9:WRITE(TERM_OUT,'@',XCHR[123]); -- 10:WRITE(TERM_OUT,'@',XCHR[125]);12:WRITE(TERM_OUT,'@'''); -- 13:WRITE(TERM_OUT,'@"');125:WRITE(TERM_OUT,'@$');0:WRITE(TERM_OUT,'#'); -- 64:WRITE(TERM_OUT,'@@');2:WRITE(TERM_OUT,'@=');3:WRITE(TERM_OUT,'@\'); -- OTHERS:WRITE(TERM_OUT,XCHR[A])END[:76];K:=K+1;END;END;END;----:74----84: PushLevel: PROCEDURE[P: NamePointer] = BEGIN IF StackPtr=StackSize THEN BEGIN PascalWriteLn[file: @TermOut]; {PascalWriteLongString[file: @TermOut, item: "! Sorry, "]; PascalWriteLongString[file: @TermOut, item: "stack"]; PascalWriteLongString[file: @TermOut, item: " capacity exceeded"]};Error[]; History_3;JumpOut[]; END ELSE BEGIN Stack^[StackPtr]_CurState; StackPtr_StackPtr+1;CurState.NameField_P; CurState.ReplField_Equiv^[P];Zo_ CurState.ReplField MOD 3; CurState.ByteField_TokStart^[CurState.ReplField]; CurState.EndField_TokStart^[CurState.ReplField+3]; CurState.ModField_0; END; END;--:84----85:-- PopLevel: PROCEDURE = BEGIN {IF TextLink^[CurState.ReplField]=0 THEN BEGIN IF Ilk^[CurState. NameField]=3 THEN--91:--BEGIN NamePtr_NamePtr-1;TextPtr_TextPtr-1; Z_ TextPtr MOD 3; --IF TOK_PTR[Z]>MAX_TOK_PTR[Z]THEN MAX_TOK_PTR[Z]:=TOK_PTR[Z]; TokPtr^[Z]_TokStart^[TextPtr]; --BYTE_PTR[NAME_PTR MOD 2]:=BYTE_PTR[NAME_PTR MOD 2]-1;-- END--:91--; END ELSE IF INT[TextLink^[CurState.ReplField]]0 THEN BEGIN CurState_Stack^[StackPtr]; Zo_ CurState.ReplField MOD 3; END;EXITS Label10 => NULL}; END;--:85----87: GetOutput: PROCEDURE RETURNS[GetOutputResult: SixteenBits] = BEGIN A:SixteenBits; B:EightBits;Bal:SixteenBits;K:PascalInteger[0..MaxBytes];W:PascalInteger[0..1]; DO {--Label20:--{IF StackPtr=0 THEN BEGIN A_0; GOTO Label31; END; IF CurState.ByteField=CurState.EndField THEN BEGIN CurVal_ -CurState.ModField;PopLevel[];IF CurVal=0 THEN GOTO Label20;A_129; GOTO Label31; END;A_TokMem[Zo, CurState.ByteField]^; CurState.ByteField_ INT[CurState.ByteField]+1; IF INT[A]<128 THEN IF A=0 THEN--92:--BEGIN PushLevel[NamePtr-1]; GOTO Label20; END--:92-- ELSE GOTO Label31;A_( INT[A]-128)*256+TokMem[Zo, CurState.ByteField]^; CurState.ByteField_ INT[CurState.ByteField]+1;IF INT[A]<10240 THEN--89: BEGIN SELECT Ilk^[A]FROM 0 =>BEGIN CurVal_A;A_130; END; 1 =>BEGIN CurVal_ INT[Equiv^[A]]-32768;A_128; END;2 =>BEGIN PushLevel[A]; GOTO Label20; END;3 =>BEGIN--90: WHILE(CurState.ByteField=CurState.EndField)AND ( INT[StackPtr]>0)DO PopLevel[] ENDLOOP ; IF(StackPtr=0)OR (TokMem[Zo, CurState.ByteField]^#40) THEN BEGIN BEGIN PascalWriteLn[file: @TermOut];PascalWriteLongString[file: @TermOut, item: "! No parameter given for "]; END; PrintId[A];Error[]; GOTO Label20; END;--93:--Bal_1; CurState.ByteField_ INT[CurState.ByteField]+1; {WHILE TRUE DO BEGIN B_TokMem[Zo, CurState.ByteField]^; CurState.ByteField_ INT[CurState.ByteField]+1; IF B=0 THEN StoreTwoBytes[NamePtr+32767] ELSE BEGIN IF INT[B]>=128 THEN 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;B_TokMem[Zo, CurState.ByteField]^; CurState.ByteField_ INT[CurState.ByteField]+1; END ELSE SELECT B FROM 40 =>Bal_ INT[Bal]+1;41 =>BEGIN Bal_ INT[Bal]-1; IF Bal=0 THEN GOTO Label30; END; 39 =>DO 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;B_TokMem[Zo, CurState.ByteField]^; CurState.ByteField_ INT[CurState.ByteField]+1; IF B=39 THEN EXIT; ENDLOOP; 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]]^_B; TokPtr^[Z]_TokPtr^[Z]+1; END; END; END ENDLOOP ;EXITS Label30 => NULL};--:93--Equiv^[NamePtr]_TextPtr; Ilk^[NamePtr]_2;W_ PascalMODPower2Mask[NamePtr ,1];K_BytePtr^[W]; --IF K=MAX_BYTES THEN BEGIN WRITELN(TERM_OUT); -- WRITE(TERM_OUT,'! Sorry, ','byte memory',' capacity exceeded');ERROR; -- HISTORY:=3;JUMP_OUT;END;BYTE_MEM[W,K]:=35;K:=K+1;BYTE_PTR[W]:=K; IF INT[NamePtr]>MaxNames-2 THEN BEGIN PascalWriteLn[file: @TermOut]; {PascalWriteLongString[file: @TermOut, item: "! Sorry, "]; PascalWriteLongString[file: @TermOut, item: "name"]; PascalWriteLongString[file: @TermOut, item: " capacity exceeded"]};Error[]; History_3;JumpOut[]; END;ByteStart^[NamePtr+2]_K;NamePtr_NamePtr+1; 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;TextLink^[TextPtr]_0; TokStart^[TextPtr+3]_TokPtr^[Z];TextPtr_TextPtr+1; Z_ TextPtr MOD 3--:90--;PushLevel[A]; GOTO Label20; END; ENDCASE =>BEGIN PascalWriteLn[file: @TermOut]; {PascalWriteLongString[file: @TermOut, item: "! This can't happen ("]; PascalWriteLongString[file: @TermOut, item: "output"]; PascalWriteLongString[file: @TermOut, item: ")"]};Error[];History_3; JumpOut[]; END ; GOTO Label31; END--:89--;IF INT[A]<20480 THEN--88:--BEGIN A_ INT[A]-10240; IF Equiv^[A]#0 THEN PushLevel[A] ELSE IF A#0 THEN BEGIN BEGIN PascalWriteLn[file: @TermOut];PascalWriteLongString[file: @TermOut, item: "! Not present: <"]; END;PrintId[A]; PascalWriteLongString[file: @TermOut, item: ">"];Error[]; END; GOTO Label20; END--:88--;CurVal_ INT[A]-20480;A_129; CurState.ModField_CurVal;EXITS Label31 => NULL};--IF TROUBLE_SHOOTING THEN DEBUG_HELP; GetOutputResult_A;EXIT; EXITS Label20 => NULL} ENDLOOP; END;--:87----97:-- END.