-- file: WeaveCode.mesa -- Pascal-to-Mesa translator output, translated at September 23, 1986 1:27:38 pm PDT DIRECTORY PascalBasic, PascalWizardFiles, WeaveProcs, WeaveVars; WeaveCode: PROGRAM IMPORTS PascalWizardFiles, WeaveProcs, WeaveVars EXPORTS WeaveProcs = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, WeaveProcs, WeaveVars; ControlCode: PROCEDURE[C: AsciiCode] RETURNS[ControlCodeResult: EightBits] = BEGIN SELECT C FROM 64 =>ControlCodeResult_64;39 =>ControlCodeResult_12; 34 =>ControlCodeResult_13;36 =>ControlCodeResult_135;32,9,42 =>ControlCodeResult_147; 61 =>ControlCodeResult_2;92 =>ControlCodeResult_3;68,100 =>ControlCodeResult_144; 70,102 =>ControlCodeResult_143;123 =>ControlCodeResult_9;125 =>ControlCodeResult_10; 80,112 =>ControlCodeResult_145;38 =>ControlCodeResult_136;60 =>ControlCodeResult_146; 62 =>BEGIN BEGIN IF NOT PhaseOne THEN BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "! Extra @>"];Error[]; END; END;ControlCodeResult_0; END; 84,116 =>ControlCodeResult_134;33 =>ControlCodeResult_126;63 =>ControlCodeResult_125; 94 =>ControlCodeResult_131;58 =>ControlCodeResult_132;46 =>ControlCodeResult_133; 44 =>ControlCodeResult_137;124 =>ControlCodeResult_138;47 =>ControlCodeResult_139; 35 =>ControlCodeResult_140;43 =>ControlCodeResult_141;59 =>ControlCodeResult_142;--89: --48,49,50:BEGIN TRACING:=C-48;CONTROL_CODE:=0;END;----:89 ENDCASE =>BEGIN BEGIN IF NOT PhaseOne THEN BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "! Unknown control code"];Error[]; END; END;ControlCodeResult_0; END ; END;--:88----90:-- SkipLimbo: PROCEDURE = BEGIN C:AsciiCode; {WHILE TRUE DO IF INT[Loc]>Limit THEN BEGIN GetLine[]; IF InputHasEnded THEN GOTO Label10; END ELSE BEGIN Buffer^[Limit+1]_64; WHILE Buffer^[Loc]#64 DO Loc_Loc+1 ENDLOOP ;IF INT[Loc]<=Limit THEN BEGIN Loc_Loc+2; C_Buffer^[Loc-1];IF(C=32)OR (C=9)OR (C=42) THEN GOTO Label10; END; END ENDLOOP ;EXITS Label10 => NULL}; END; --:90----91:-- SkipTex: PROCEDURE RETURNS[SkipTexResult: EightBits] = BEGIN C:EightBits; {WHILE TRUE DO BEGIN IF INT[Loc]>Limit THEN BEGIN GetLine[]; IF InputHasEnded THEN BEGIN C_147; GOTO Label30; END; END; Buffer^[Limit+1]_64;DO C_Buffer^[Loc];Loc_Loc+1; IF C=124 THEN GOTO Label30; IF C=64 THEN EXIT; ENDLOOP; IF INT[Loc]<=Limit THEN BEGIN C_ControlCode[Buffer^[Loc]];Loc_Loc+1; GOTO Label30; END; END ENDLOOP ;EXITS Label30 => NULL};SkipTexResult_C; END;--:91----92: SkipComment: PROCEDURE[Bal: EightBits] RETURNS[SkipCommentResult: EightBits] = BEGIN C:AsciiCode; {WHILE TRUE DO BEGIN IF INT[Loc]>Limit THEN BEGIN GetLine[]; IF InputHasEnded THEN BEGIN Bal_0; GOTO Label30; END; END;C_Buffer^[Loc]; Loc_Loc+1;IF C=124 THEN GOTO Label30;--93:--IF C=64 THEN BEGIN C_Buffer^[Loc]; IF(C#32)AND (C#9)AND (C#42) THEN Loc_Loc+1 ELSE BEGIN Loc_Loc-1; Bal_0; GOTO Label30; END ; END ELSE IF(C=92)AND (Buffer^[Loc]#64) THEN Loc_Loc+1 ELSE IF C=123 THEN Bal_Bal+1 ELSE IF C=125 THEN BEGIN Bal_Bal-1; IF Bal=0 THEN GOTO Label30; END--:93--; END ENDLOOP ;EXITS Label30 => NULL};SkipCommentResult_Bal; END;--:92----96: GetNext: PROCEDURE RETURNS[GetNextResult: EightBits] = BEGIN C:EightBits; D:EightBits;J, K:PascalInteger[0..LongestName]; DO {--Label20:--{IF INT[Loc]>Limit THEN BEGIN GetLine[]; IF InputHasEnded THEN BEGIN C_147; GOTO Label31; END; END;C_Buffer^[Loc]; Loc_Loc+1;IF ScanningHex THEN--97: IF(( INT[C]>=48)AND ( INT[C]<=57))OR (( INT[C]>=65)AND ( INT[C]<=70)) THEN GOTO Label31 ELSE ScanningHex _FALSE--:97--; SELECT C FROM 65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85 ,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111 ,112,113,114,115,116,117,118,119,120,121,122 =>--99: BEGIN IF((C=69)OR (C=101))AND ( INT[Loc]>1) THEN IF( INT[Buffer^[Loc-2]]<=57)AND ( INT[Buffer^ [Loc-2]]>=48) THEN C_128;IF C#128 THEN BEGIN Loc_Loc-1;IdFirst_Loc; DO Loc_Loc+1;D_Buffer^[Loc]; IF(( INT[D]<48)OR (( INT[D]>57)AND ( INT[D]<65))OR (( INT[D]>90)AND ( INT[D]<97))OR ( INT[D]>122))AND (D#95) THEN EXIT; ENDLOOP; C_130;IdLoc_Loc; END; END--:99--;39,34 =>--100:--BEGIN IdFirst_Loc-1; DO D_Buffer^[Loc];Loc_Loc+1; IF INT[Loc]>Limit THEN BEGIN BEGIN IF NOT PhaseOne THEN BEGIN PascalWriteLn[file: @TermOut];PascalWriteLongString[file: @TermOut, item: "! String constant didn't end"];Error[]; END; END; Loc_Limit;D_C; END; IF D=C THEN EXIT; ENDLOOP;IdLoc_Loc;C_129; END--:100--;64 =>--101: BEGIN C_ControlCode[Buffer^[Loc]];Loc_Loc+1; IF C=126 THEN BEGIN XrefSwitch_10240; GOTO Label20; END ELSE IF C=125 THEN BEGIN XrefSwitch_0; GOTO Label20; END ELSE IF( INT[C]<=134)AND ( INT[C]>=131) THEN--107:--BEGIN IdFirst_Loc; Buffer^[Limit+1]_64;WHILE Buffer^[Loc]#64 DO Loc_Loc+1 ENDLOOP ;IdLoc_Loc; IF INT[Loc]>Limit THEN BEGIN BEGIN IF NOT PhaseOne THEN BEGIN PascalWriteLn[file: @TermOut];PascalWriteLongString[file: @TermOut, item: "! Control text didn't end"];Error[]; END; END; Loc_Limit; END ELSE BEGIN Loc_Loc+2; IF Buffer^[Loc-1]#62 THEN BEGIN IF NOT PhaseOne THEN BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "! Control codes are forbidden in control text"];Error[]; END; END; END; END--:107 ELSE IF C=13 THEN ScanningHex_TRUE ELSE IF C=146 THEN--102:--BEGIN--104: K_0;{WHILE TRUE DO BEGIN IF INT[Loc]>Limit THEN BEGIN GetLine[]; IF InputHasEnded THEN BEGIN BEGIN IF NOT PhaseOne THEN BEGIN PascalWriteLn[file: @TermOut];PascalWriteLongString[file: @TermOut, item: "! Input ended in section name"];Error[]; END; END; Loc_1; GOTO Label30; END; END;D_Buffer^[Loc];--105: IF D=64 THEN BEGIN D_Buffer^[Loc+1];IF D=62 THEN BEGIN Loc_Loc+2; GOTO Label30; END; IF(D=32)OR (D=9)OR (D=42) THEN BEGIN BEGIN IF NOT PhaseOne THEN BEGIN PascalWriteLn[file: @TermOut];PascalWriteLongString[file: @TermOut, item: "! Section name didn't end"];Error[]; END; END; GOTO Label30; END;K_K+1;ModText^[K]_64;Loc_Loc+1; END--:105--; Loc_Loc+1;IF INT[K] NULL};--106: IF INT[K]>=LongestName-2 THEN BEGIN BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "! Section name too long: "]; END; FOR i:INT IN [ INT[1 ].. INT[25 ]] DO J _ i; PascalWriteChar[file: @TermOut, item: Xchr^[ModText^[J]]] ENDLOOP; PascalWriteLongString[file: @TermOut, item: "..."];IF History=0 THEN History_1; END--:106--; IF(ModText^[K]=32)AND ( INT[K]>0) THEN K_K-1--:104--; IF INT[K]>3 THEN BEGIN IF(ModText^[K]=46)AND (ModText^[K-1]=46)AND (ModText^[K -2]=46) THEN CurModule_PrefixLookup[K-3] ELSE CurModule_ModLookup[K] ; END ELSE CurModule_ModLookup[K];XrefSwitch_0; END--:102 ELSE IF C=2 THEN--108:--BEGIN IdFirst_Loc;Loc_Loc+1; Buffer^[Limit+1]_64;Buffer^[Limit+2]_62; WHILE(Buffer^[Loc]#64)OR (Buffer^[Loc+1]#62)DO Loc_Loc+1 ENDLOOP ; IF INT[Loc]>=Limit THEN BEGIN IF NOT PhaseOne THEN BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "! Verbatim string didn't end"];Error[]; END; END; IdLoc_Loc;Loc_Loc+2; END--:108--; END--:101--;--98: 46 =>IF Buffer^[Loc]=46 THEN BEGIN IF INT[Loc]<=Limit THEN BEGIN C_32; Loc_Loc+1; END; END ELSE IF Buffer^[Loc]=41 THEN BEGIN IF INT[Loc]<=Limit THEN BEGIN C_93; Loc_Loc+1; END; END; 58 =>IF Buffer^[Loc]=61 THEN BEGIN IF INT[Loc]<=Limit THEN BEGIN C_24; Loc_Loc+1; END; END; 61 =>IF Buffer^[Loc]=61 THEN BEGIN IF INT[Loc]<=Limit THEN BEGIN C_30; Loc_Loc+1; END; END; 62 =>IF Buffer^[Loc]=61 THEN BEGIN IF INT[Loc]<=Limit THEN BEGIN C_29; Loc_Loc+1; END; END; 60 =>IF Buffer^[Loc]=61 THEN BEGIN IF INT[Loc]<=Limit THEN BEGIN C_28; Loc_Loc+1; END; END ELSE IF Buffer^[Loc]=62 THEN BEGIN IF INT[Loc]<=Limit THEN BEGIN C_26; Loc_Loc+1; END; END; 40 =>IF Buffer^[Loc]=42 THEN BEGIN IF INT[Loc]<=Limit THEN BEGIN C_9; Loc_Loc+1; END; END ELSE IF Buffer^[Loc]=46 THEN BEGIN IF INT[Loc]<=Limit THEN BEGIN C_91; Loc_Loc+1; END; END; 42 =>IF Buffer^[Loc]=41 THEN BEGIN IF INT[Loc]<=Limit THEN BEGIN C_10; Loc_Loc+1; END; END;--:98--32,9 => GOTO Label20; ENDCASE => NULL; EXITS Label31 => NULL};--IF TROUBLE_SHOOTING THEN DEBUG_HELP;--GetNextResult_C;EXIT; EXITS Label20 => NULL} ENDLOOP; END;--:96----112: CopyLimbo: PROCEDURE = BEGIN C:AsciiCode; {WHILE TRUE DO IF INT[Loc]>Limit THEN BEGIN FinishLine[];GetLine[]; IF InputHasEnded THEN GOTO Label10; END ELSE BEGIN Buffer^[Limit+1]_64; --134:--WHILE Buffer^[Loc]#64 DO BEGIN BEGIN IF OutPtr=LineLength THEN BreakOut[];OutPtr_OutPtr+1;OutBuf^[OutPtr]_Buffer^[Loc]; END; Loc_Loc+1; END ENDLOOP ;IF INT[Loc]<=Limit THEN BEGIN Loc_Loc+2;C_Buffer^[Loc-1]; IF(C=32)OR (C=9)OR (C=42) THEN GOTO Label10; IF(C#122)AND (C#90) THEN BEGIN BEGIN IF OutPtr=LineLength THEN BreakOut[];OutPtr_OutPtr+1;OutBuf^[OutPtr]_64; END; IF C#64 THEN BEGIN IF NOT PhaseOne THEN BEGIN PascalWriteLn[file: @TermOut]; PascalWriteLongString[file: @TermOut, item: "! Double @ required outside of sections"];Error[]; END; END; END; END--:134--; END ENDLOOP ;EXITS Label10 => NULL}; END;--:133----135:-- CopyTex: PROCEDURE RETURNS[CopyTexResult: EightBits] = BEGIN C:EightBits; {WHILE TRUE DO BEGIN IF INT[Loc]>Limit THEN BEGIN FinishLine[];GetLine[]; IF InputHasEnded THEN BEGIN C_147; GOTO Label30; END; END; Buffer^[Limit+1]_64;--136:--DO C_Buffer^[Loc];Loc_Loc+1; IF C=124 THEN GOTO Label30; IF C#64 THEN BEGIN BEGIN IF OutPtr=LineLength THEN BreakOut[]; OutPtr_OutPtr+1;OutBuf^[OutPtr]_C; END; IF(OutPtr=1)AND ((C=32)OR (C=9)) THEN OutPtr_OutPtr-1; END; IF C=64 THEN EXIT; ENDLOOP; IF INT[Loc]<=Limit THEN BEGIN C_ControlCode[Buffer^[Loc]];Loc_Loc+1; GOTO Label30; END--:136--; END ENDLOOP ;EXITS Label30 => NULL};CopyTexResult_C; END;--:135----137: CopyComment: PROCEDURE[Bal: EightBits] RETURNS[CopyCommentResult: EightBits] = BEGIN C:AsciiCode; {WHILE TRUE DO BEGIN IF INT[Loc]>Limit THEN BEGIN GetLine[]; IF InputHasEnded THEN BEGIN BEGIN IF NOT PhaseOne THEN BEGIN PascalWriteLn[file: @TermOut];PascalWriteLongString[file: @TermOut, item: "! Input ended in mid-comment"];Error[]; END; END; Loc_1;--139:--BEGIN IF INT[TokPtr+2]>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^[TokPtr]_32;TokPtr_TokPtr+1; END; DO BEGIN IF INT[TokPtr+2]>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^[TokPtr]_125;TokPtr_TokPtr+1; END; Bal_Bal-1; IF Bal=0 THEN EXIT; ENDLOOP; GOTO Label30;--:139-- END; END;C_Buffer^[Loc];Loc_Loc+1; IF C=124 THEN GOTO Label30; BEGIN IF INT[TokPtr+2]>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^[TokPtr]_C;TokPtr_TokPtr+1; END; --138:--IF C=64 THEN BEGIN Loc_Loc+1; IF Buffer^[Loc-1]#64 THEN BEGIN BEGIN IF NOT PhaseOne THEN BEGIN PascalWriteLn[file: @TermOut];PascalWriteLongString[file: @TermOut, item: "! Illegal use of @ in comment"];Error[]; END; END;Loc_Loc-2;TokPtr_TokPtr-1;--139: BEGIN IF INT[TokPtr+2]>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^[TokPtr]_32;TokPtr_TokPtr+1; END; DO BEGIN IF INT[TokPtr+2]>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^[TokPtr]_125;TokPtr_TokPtr+1; END; Bal_Bal-1; IF Bal=0 THEN EXIT; ENDLOOP; GOTO Label30;--:139-- END; END ELSE IF(C=92)AND (Buffer^[Loc]#64) THEN BEGIN BEGIN IF INT[TokPtr+2]>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^[TokPtr]_Buffer^[Loc]; TokPtr_TokPtr+1; END;Loc_Loc+1; END ELSE IF C=123 THEN Bal_Bal+1 ELSE IF C=125 THEN BEGIN Bal_Bal-1; IF Bal=0 THEN GOTO Label30; END--:138--; END ENDLOOP ;EXITS Label30 => NULL};CopyCommentResult_Bal; END;--:137 END.