-- file: WeaveOutput.mesa -- Pascal-to-Mesa translator output, translated at September 23, 1986 1:27:38 pm PDT DIRECTORY PascalBasic, PascalWizardFiles, WeaveProcs, WeaveProcArray, WeaveVars; WeaveOutput: PROGRAM IMPORTS PascalBasic, PascalWizardFiles, WeaveProcs, WeaveProcArray, WeaveVars EXPORTS WeaveProcs = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, WeaveProcs, WeaveProcArray, WeaveVars; --205:-- PushLevel: PROCEDURE[P: TextPointer] = 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 IF INT[StackPtr]>0 THEN Stack^[StackPtr]_CurState; StackPtr_StackPtr+1; --IF STACK_PTR>MAX_STACK_PTR THEN MAX_STACK_PTR:=STACK_PTR; CurState.TokField_TokStart^[P];CurState.EndField_TokStart^[P+1]; END; END;--:205----207:-- GetOutput: PROCEDURE RETURNS[GetOutputResult: EightBits] = BEGIN A:SixteenBits; DO {--Label20:--WHILE CurState.TokField=CurState.EndField DO BEGIN StackPtr_StackPtr-1;CurState_Stack^[StackPtr]; END ENDLOOP ; A_TokMem^[CurState.TokField]; CurState.TokField_ INT[CurState.TokField]+1; IF INT[A]>=256 THEN BEGIN CurName_ A MOD 10240;SELECT A /10240 FROM 2 =>A_129; 3 =>A_128;4 =>BEGIN PushLevel[CurName]; GOTO Label20; END; 5 =>BEGIN PushLevel[CurName];CurState.ModeField_0; GOTO Label20; END; ENDCASE =>A_130 ; END;--IF TROUBLE_SHOOTING THEN DEBUG_HELP; GetOutputResult_A;EXIT; EXITS Label20 => NULL} ENDLOOP; END;--:207----208:-- OutputPascal: PROCEDURE = BEGIN SaveTokPtr, SaveTextPtr, SaveNextControl:SixteenBits; P:TextPointer; SaveTokPtr_TokPtr;SaveTextPtr_TextPtr; SaveNextControl_NextControl;NextControl_124;P_PascalTranslate[]; TokMem^[TokPtr]_P+51200;TokPtr_TokPtr+1;MakeOutput[]; --IF TEXT_PTR>MAX_TXT_PTR THEN MAX_TXT_PTR:=TEXT_PTR; -- IF TOK_PTR>MAX_TOK_PTR THEN MAX_TOK_PTR:=TOK_PTR; TextPtr_SaveTextPtr;TokPtr_SaveTokPtr; NextControl_SaveNextControl; END;--:208----209:-- MakeOutput: PROCEDURE = BEGIN A:EightBits;B:EightBits;K, KLimit:PascalInteger[0..MaxBytes]; W:PascalInteger[0..1];J:PascalInteger[0..LongBufSize];StringDelimiter:AsciiCode; SaveLoc, SaveLimit:PascalInteger[0..LongBufSize];CurModName:NamePointer; SaveMode:Mode; TokMem^[TokPtr]_143;TokPtr_TokPtr+1; TextPtr_TextPtr+1;TokStart^[TextPtr]_TokPtr; PushLevel[TextPtr-1];{WHILE TRUE DO BEGIN A_GetOutput[]; DO {--Label21:--SELECT A FROM 143 => GOTO Label10;130,129 =>--210: BEGIN BEGIN IF OutPtr=LineLength THEN BreakOut[];OutPtr_OutPtr+1; OutBuf^[OutPtr]_92; END; IF A=130 THEN IF INT[ByteStart^[CurName+2]]-ByteStart^[CurName]=1 THEN BEGIN IF OutPtr=LineLength THEN BreakOut[];OutPtr_OutPtr+1; OutBuf^[OutPtr]_124; END ELSE BEGIN IF OutPtr=LineLength THEN BreakOut[];OutPtr_OutPtr+1; OutBuf^[OutPtr]_92; END ELSE BEGIN IF OutPtr=LineLength THEN BreakOut[];OutPtr_OutPtr+1; OutBuf^[OutPtr]_38; END; IF INT[ByteStart^[CurName+2]]-ByteStart^[CurName]=1 THEN BEGIN IF OutPtr=LineLength THEN BreakOut[];OutPtr_OutPtr+1; OutBuf^[OutPtr]_ByteMem[ PascalMODPower2Mask[CurName ,1], ByteStart^[CurName]]^; END ELSE OutName[CurName]; END--:210--;128 =>--214: BEGIN BEGIN IF OutPtr=LineLength THEN BreakOut[];OutPtr_OutPtr+1; OutBuf^[OutPtr]_92;IF OutPtr=LineLength THEN BreakOut[]; OutPtr_OutPtr+1;OutBuf^[OutPtr]_88; END;CurXref_Xref^[CurName]; IF INT[Xmem^[CurXref].NumField]>=10240 THEN BEGIN OutMod[ INT[Xmem^[CurXref]. NumField]-10240]; IF PhaseThree THEN BEGIN CurXref_Xmem^[CurXref].XlinkField; WHILE INT[Xmem^[CurXref].NumField]>=10240 DO BEGIN BEGIN IF OutPtr=LineLength THEN BreakOut[];OutPtr_OutPtr+1;OutBuf^[OutPtr]_44; IF OutPtr=LineLength THEN BreakOut[];OutPtr_OutPtr+1; OutBuf^[OutPtr]_32; END;OutMod[ INT[Xmem^[CurXref].NumField]-10240]; CurXref_Xmem^[CurXref].XlinkField; END ENDLOOP ; END; END ELSE BEGIN IF OutPtr=LineLength THEN BreakOut[];OutPtr_OutPtr+1; OutBuf^[OutPtr]_48; END;BEGIN IF OutPtr=LineLength THEN BreakOut[]; OutPtr_OutPtr+1;OutBuf^[OutPtr]_58; END;--215: K_ByteStart^[CurName];W_ PascalMODPower2Mask[CurName ,1]; KLimit_ByteStart^[CurName+2];CurModName_CurName; WHILE INT[K] "];History_2; END;K_K+1; END--:216--; IF B#124 THEN BEGIN IF OutPtr=LineLength THEN BreakOut[]; OutPtr_OutPtr+1;OutBuf^[OutPtr]_B; END ELSE BEGIN--217:-- J_Limit+1; Buffer^[J]_124;StringDelimiter_0; {WHILE TRUE DO BEGIN IF INT[K]>=KLimit THEN BEGIN BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "! Pascal text in section name didn't end:"]; END; BEGIN PascalWriteLn[file: @TermOut];PascalWriteLongString[file: @TermOut, item: "<"]; END;PrintId[CurModName]; PascalWriteLongString[file: @TermOut, item: "> "];History_2; GOTO Label31; END;B_ByteMem[W, K]^;K_K+1; IF B=64 THEN--218: BEGIN IF INT[J]>LongBufSize-4 THEN BEGIN PascalWriteLn[file: @TermOut]; {PascalWriteLongString[file: @TermOut, item: "! Sorry, "]; PascalWriteLongString[file: @TermOut, item: "buffer"]; PascalWriteLongString[file: @TermOut, item: " capacity exceeded"]};Error[]; History_3;JumpOut[]; END;Buffer^[J+1]_64;Buffer^[J+2]_ByteMem[W, K]^; J_J+2;K_K+1; END--:218 ELSE BEGIN IF(B=34)OR (B=39) THEN IF StringDelimiter=0 THEN StringDelimiter_B ELSE IF StringDelimiter=B THEN StringDelimiter_0; IF(B#124)OR (StringDelimiter#0) THEN BEGIN IF INT[J]>LongBufSize-3 THEN BEGIN PascalWriteLn[file: @TermOut]; {PascalWriteLongString[file: @TermOut, item: "! Sorry, "]; PascalWriteLongString[file: @TermOut, item: "buffer"]; PascalWriteLongString[file: @TermOut, item: " capacity exceeded"]};Error[]; History_3;JumpOut[]; END;J_J+1;Buffer^[J]_B; END ELSE GOTO Label31; END; END ENDLOOP ; EXITS Label31 => NULL};--:217--SaveLoc_Loc;SaveLimit_Limit;Loc_Limit+2;Limit_J+1; Buffer^[Limit]_124;OutputPascal[];Loc_SaveLoc;Limit_SaveLimit; END; END--:215-- ENDLOOP ;BEGIN IF OutPtr=LineLength THEN BreakOut[]; OutPtr_OutPtr+1;OutBuf^[OutPtr]_92; IF OutPtr=LineLength THEN BreakOut[];OutPtr_OutPtr+1; OutBuf^[OutPtr]_88; END; END--:214--;131,133,132 =>--211: BEGIN BEGIN IF OutPtr=LineLength THEN BreakOut[];OutPtr_OutPtr+1; OutBuf^[OutPtr]_92;IF OutPtr=LineLength THEN BreakOut[]; OutPtr_OutPtr+1;OutBuf^[OutPtr]_109; IF OutPtr=LineLength THEN BreakOut[];OutPtr_OutPtr+1; OutBuf^[OutPtr]_97;IF OutPtr=LineLength THEN BreakOut[]; OutPtr_OutPtr+1;OutBuf^[OutPtr]_116; IF OutPtr=LineLength THEN BreakOut[];OutPtr_OutPtr+1; OutBuf^[OutPtr]_104; END; IF A=131 THEN BEGIN IF OutPtr=LineLength THEN BreakOut[]; OutPtr_OutPtr+1;OutBuf^[OutPtr]_98; IF OutPtr=LineLength THEN BreakOut[];OutPtr_OutPtr+1; OutBuf^[OutPtr]_105;IF OutPtr=LineLength THEN BreakOut[]; OutPtr_OutPtr+1;OutBuf^[OutPtr]_110; END ELSE IF A=132 THEN BEGIN IF OutPtr=LineLength THEN BreakOut[]; OutPtr_OutPtr+1;OutBuf^[OutPtr]_114; IF OutPtr=LineLength THEN BreakOut[];OutPtr_OutPtr+1; OutBuf^[OutPtr]_101;IF OutPtr=LineLength THEN BreakOut[]; OutPtr_OutPtr+1;OutBuf^[OutPtr]_108; END ELSE BEGIN IF OutPtr=LineLength THEN BreakOut[];OutPtr_OutPtr+1; OutBuf^[OutPtr]_111;IF OutPtr=LineLength THEN BreakOut[]; OutPtr_OutPtr+1;OutBuf^[OutPtr]_112; END; BEGIN IF OutPtr=LineLength THEN BreakOut[];OutPtr_OutPtr+1; OutBuf^[OutPtr]_123; END; END--:211--;135 =>BEGIN DO A_GetOutput[]; IF( INT[A]<139)OR ( INT[A]>142) THEN EXIT; ENDLOOP; GOTO Label21; END;134 =>BEGIN DO A_GetOutput[]; IF(( INT[A]<139)AND (A#32))OR ( INT[A]>142) THEN EXIT; ENDLOOP; GOTO Label21; END; 136,137,138,139,140,141,142 =>--212: IF INT[A]<140 THEN BEGIN IF CurState.ModeField=1 THEN BEGIN BEGIN IF OutPtr=LineLength THEN BreakOut[];OutPtr_OutPtr+1; OutBuf^[OutPtr]_92;IF OutPtr=LineLength THEN BreakOut[]; OutPtr_OutPtr+1;OutBuf^[OutPtr]_A-87; END; IF A=138 THEN BEGIN IF OutPtr=LineLength THEN BreakOut[]; OutPtr_OutPtr+1;OutBuf^[OutPtr]_GetOutput[]; END ; END ELSE IF A=138 THEN B_GetOutput []; END ELSE--213:--BEGIN B_A; SaveMode_CurState.ModeField;WHILE TRUE DO BEGIN A_GetOutput[]; IF(A=135)OR (A=134) THEN GOTO Label21; IF((A#32)AND ( INT[A]<140))OR ( INT[A]>142) THEN BEGIN IF SaveMode=1 THEN BEGIN IF INT[OutPtr]>3 THEN IF(OutBuf^[OutPtr]=80)AND (OutBuf^[OutPtr-1]=92)AND ( OutBuf^[OutPtr-2]=89)AND (OutBuf^[OutPtr-3]=92) THEN GOTO Label21; BEGIN IF OutPtr=LineLength THEN BreakOut[];OutPtr_OutPtr+1; OutBuf^[OutPtr]_92;IF OutPtr=LineLength THEN BreakOut[]; OutPtr_OutPtr+1;OutBuf^[OutPtr]_B-87; END; IF A#143 THEN FinishLine[]; END ELSE IF(A#143)AND (CurState.ModeField=0) THEN BEGIN IF OutPtr=LineLength THEN BreakOut[];OutPtr_OutPtr+1;OutBuf^[OutPtr]_32; END; GOTO Label21; END;IF INT[A]>B THEN B_A; END ENDLOOP ; END--:213----:212--; ENDCASE =>BEGIN IF OutPtr=LineLength THEN BreakOut[];OutPtr_OutPtr+1; OutBuf^[OutPtr]_A; END ;EXIT; EXITS Label21 => NULL} ENDLOOP; END ENDLOOP ;EXITS Label10 => NULL}; END;--:209----227: END.