-- file: WeaveOutput.mesa -- Pascal-to-Mesa translator output, translated at September 15, 1985 4:11:16 pm PDT DIRECTORY PascalBasic, PascalWizardFiles, WeaveProcs, WeaveProcArray, WeaveVars; WeaveOutput: PROGRAM IMPORTS 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[ CurName MOD 2, 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← CurName MOD 2; KLimit←ByteStart↑[CurName+2];CurModName←CurName; WHILE INT[K]<KLimit DO BEGIN B←ByteMem[W, K]↑;K←K+1;IF B=64 THEN--216: BEGIN IF ByteMem[W, K]↑#64 THEN BEGIN BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "! Illegal control code in section name:"]; END; BEGIN PascalWriteLn[file: @TermOut];PascalWriteLongString[file: @TermOut, item: "<"]; END;PrintId[CurModName]; PascalWriteLongString[file: @TermOut, item: "> "];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.