-- file: MFOpsImpl4.mesa -- Pascal-to-Mesa translator output, translated at October 31, 1985 4:28:02 pm PST DIRECTORY PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFInteraction, MFMath, MFMemory, MFSymbols, MFEdges, MFOctants, MFTime, MFEquations, MFInput, MFFileNames, MFParsing, MFOps, MFGF; MFOpsImpl4: PROGRAM IMPORTS PascalBasic, PascalWizardFiles, MFProcArray, MFInteraction, MFMath, MFMemory, MFSymbols, MFEdges, MFOctants, MFTime, MFEquations, MFInput, MFFileNames, MFParsing, MFOps, MFGF EXPORTS MFOps = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFInteraction, MFMath, MFMemory, MFSymbols, MFEdges, MFOctants, MFTime, MFEquations, MFInput, MFFileNames, MFParsing, MFOps, MFGF; FindPoint: PROCEDURE[V: Scaled,C: Quarterword] = BEGIN P:Halfword;N:Scaled;Vv:Scaled;Q:Halfword; Vv←V;P←CurExp; IF Mem[P]↑.Hh.B0=0 THEN N←-65536 ELSE N←0;DO P←Mem[P]↑.Hh.Rh; N←N+65536; IF P=CurExp THEN EXIT; ENDLOOP; IF N=0 THEN V←0 ELSE IF V<0 THEN IF Mem[P]↑.Hh.B0=0 THEN V←0 ELSE V←N -1-( (-V-1)MOD N) ELSE IF V>N THEN IF Mem[P]↑.Hh.B0=0 THEN V←N ELSE V← V MOD N;P←CurExp;WHILE V>=65536 DO BEGIN P←Mem[P]↑.Hh.Rh;V←V-65536; END ENDLOOP ; IF V#0 THEN--985:--BEGIN Q←Mem[P]↑.Hh.Rh; SplitCubic[P,V*4096,Mem[ INT[Q]+1]↑.Int,Mem[ INT[Q]+2]↑.Int];P←Mem[P]↑.Hh.Rh; END--:985--;--986:--SELECT C FROM 97 =>PairValue[Mem[ INT[P]+1]↑.Int,Mem[ INT[P]+2]↑.Int]; 98 =>IF Mem[P]↑.Hh.B0=0 THEN PairValue[Mem[ INT[P]+1]↑.Int,Mem[ INT[P]+2]↑.Int] ELSE PairValue[Mem[ INT[P]+3]↑.Int,Mem[ INT[P]+4]↑.Int]; 99 =>IF Mem[P]↑.Hh.B1=0 THEN PairValue[Mem[ INT[P]+1]↑.Int,Mem[ INT[P]+2]↑.Int] ELSE PairValue[Mem[ INT[P]+5]↑.Int,Mem[ INT[P]+6]↑.Int]; ENDCASE--:986--; END;--:984 DoBinary: PROCEDURE[P: Halfword,C: Quarterword] = BEGIN Q, R, Rr:Halfword;OldP, OldExp:Halfword;V:PascalInteger; BEGIN IF ArithError THEN ClearArith[]; END; IF Internal↑[7]>131072 THEN--923:--BEGIN BeginDiagnostic[];PrintNl[715]; PrintExp[P,0];PrintChar[41];PrintOp[C];PrintChar[40];PrintExp[0,0]; Print[707];EndDiagnostic[FALSE]; END--:923--;--925: SELECT Mem[P]↑.Hh.B0 FROM 13,14 =>OldP←Tarnished[P];19 =>OldP←1; ENDCASE =>OldP←0 ;IF OldP#0 THEN BEGIN Q←StashCurExp[];OldP←P; MakeExpCopy[OldP];P←StashCurExp[];UnstashCurExp[Q]; END; SELECT CurType FROM 13,14 =>OldExp←Tarnished[CurExp];19 =>OldExp←1; ENDCASE =>OldExp←0 ;IF OldExp#0 THEN BEGIN OldExp←CurExp; MakeExpCopy[OldExp]; END--:925--;{SELECT C FROM 69,70 =>--928: IF( INT[CurType]<14)OR ( INT[Mem[P]↑.Hh.B0]<14) THEN IF(CurType=11)AND ( Mem[P]↑.Hh.B0=11) THEN BEGIN IF C=70 THEN NegateEdges[CurExp];CurEdges←CurExp; MergeEdges[Mem[ INT[P]+1]↑.Int]; END ELSE BadBinary[P,C] ELSE IF CurType=14 THEN IF Mem[P]↑.Hh.B0#14 THEN BadBinary[P,C] ELSE BEGIN Q←Mem[ INT[P]+1]↑.Int;R←Mem[CurExp+1]↑.Int; AddOrSubtract[Q,R,C];AddOrSubtract[ INT[Q]+2, INT[R]+2,C]; END ELSE IF Mem[P]↑.Hh.B0=14 THEN BadBinary[P,C] ELSE AddOrSubtract[P,0 ,C]--:928--;--935: 77,78,79,80,81,82 =>BEGIN {IF( INT[CurType]>14)AND ( INT[Mem[P]↑.Hh.B0]>14) THEN AddOrSubtract[P,0,70] ELSE IF CurType#Mem[P]↑.Hh.B0 THEN BEGIN BadBinary[P,C]; GOTO Label30; END ELSE IF CurType=4 THEN FlushCurExp[StrVsStr[Mem[ INT[P]+1]↑.Int, CurExp]] ELSE IF(CurType=5)OR (CurType=3) THEN--937: BEGIN Q←Mem[CurExp+1]↑.Int; WHILE(Q#CurExp)AND (Q#P)DO Q←Mem[ INT[Q]+1]↑.Int ENDLOOP ; IF Q=P THEN FlushCurExp[0]; END--:937 ELSE IF(CurType=14)OR (CurType=13) THEN--938:--BEGIN Q←Mem[ INT[P]+1]↑.Int; R←Mem[CurExp+1]↑.Int;Rr← INT[R]+BigNodeSize↑[CurType]-2; {WHILE TRUE DO BEGIN AddOrSubtract[Q,R,70]; IF Mem[R]↑.Hh.B0#16 THEN GOTO Label31;IF Mem[ INT[R]+1]↑.Int#0 THEN GOTO Label31; IF R=Rr THEN GOTO Label31;Q← INT[Q]+2;R← INT[R]+2; END ENDLOOP ; EXITS Label31 => NULL};TakePart[ 53+PascalDIVPower2[(R-Mem[CurExp+1]↑.Int),1]]; END--:938 ELSE IF CurType=2 THEN FlushCurExp[CurExp-Mem[ INT[P]+1]↑.Int] ELSE BEGIN BadBinary[P,C]; GOTO Label30; END;--936: IF CurType#16 THEN BEGIN IF INT[CurType]<16 THEN BEGIN DispErr[P,157]; BEGIN HelpPtr←1;HelpLine↑[0]←716; END ; END ELSE BEGIN HelpPtr←2; HelpLine↑[1]←717;HelpLine↑[0]←718; END;DispErr[0,719]; PutGetFlushError[31]; END ELSE SELECT C FROM 77 =>IF CurExp<0 THEN CurExp←30 ELSE CurExp←31; 78 =>IF CurExp<=0 THEN CurExp←30 ELSE CurExp←31; 79 =>IF CurExp>0 THEN CurExp←30 ELSE CurExp←31; 80 =>IF CurExp>=0 THEN CurExp←30 ELSE CurExp←31; 81 =>IF CurExp=0 THEN CurExp←30 ELSE CurExp←31; 82 =>IF CurExp#0 THEN CurExp←30 ELSE CurExp←31; ENDCASE;CurType←2--:936 ;EXITS Label30 => NULL}; END;--:935----939: 76,75 =>IF(Mem[P]↑.Hh.B0#2)OR (CurType#2) THEN BadBinary[P,C] ELSE IF Mem[ INT[P]+1]↑.Int=C-45 THEN CurExp←Mem[ INT[P]+1]↑.Int;--:939----940: 71 =>IF( INT[CurType]<14)OR ( INT[Mem[P]↑.Hh.B0]<14) THEN BadBinary[P,71] ELSE IF( CurType=16)OR (Mem[P]↑.Hh.B0=16) THEN--941: BEGIN IF Mem[P]↑.Hh.B0=16 THEN BEGIN V←Mem[ INT[P]+1]↑.Int;FreeNode[P,2]; END ELSE BEGIN V←CurExp;UnstashCurExp[P]; END; IF CurType=16 THEN CurExp←TakeScaled[CurExp,V] ELSE IF CurType=14 THEN BEGIN P←Mem[CurExp+1]↑.Int;DepMult[P,V,TRUE]; DepMult[ INT[P]+2,V,TRUE]; END ELSE DepMult[0,V,TRUE]; GOTO Label10; END--:941 ELSE IF(NicePair[P,Mem[P]↑.Hh.B0]AND ( INT[CurType]>14))OR (NicePair[CurExp, CurType]AND ( INT[Mem[P]↑.Hh.B0]>14)) THEN BEGIN HardTimes[P]; GOTO Label10; END ELSE BadBinary[P,71];--:940----947: 72 =>IF(CurType#16)OR ( INT[Mem[P]↑.Hh.B0]<14) THEN BadBinary[P,72] ELSE BEGIN V ←CurExp;UnstashCurExp[P];IF V=0 THEN--949:--BEGIN DispErr[0,649]; BEGIN HelpPtr←2;HelpLine↑[1]←721;HelpLine↑[0]←722; END;PutGetError[]; END--:949 ELSE BEGIN IF CurType=16 THEN CurExp←MakeScaled[CurExp,V] ELSE IF CurType=14 THEN BEGIN P←Mem[CurExp+1]↑.Int;DepDiv[P,V]; DepDiv[ INT[P]+2,V]; END ELSE DepDiv[0,V]; END; GOTO Label10; END;--:947----950: 73,74 =>IF(CurType=16)AND (Mem[P]↑.Hh.B0=16) THEN IF C=73 THEN CurExp← PythAdd[Mem[ INT[P]+1]↑.Int,CurExp] ELSE CurExp←PythSub[Mem[ INT[P]+1]↑.Int, CurExp] ELSE BadBinary[P,C];--:950----951: 84,85,86,87,88,89,90,91 =>IF(Mem[P]↑.Hh.B0=9)OR (Mem[P]↑.Hh.B0=8)OR (Mem[P]↑.Hh .B0=6) THEN BEGIN PathTrans[P,C]; GOTO Label10; END ELSE IF(Mem[P]↑.Hh.B0=14)OR (Mem[P]↑.Hh.B0=13) THEN BigTrans[P,C] ELSE IF Mem[P]↑.Hh.B0=11 THEN BEGIN EdgesTrans[P,C]; GOTO Label10; END ELSE BadBinary[P,C];--:951----974: 83 =>IF(CurType=4)AND (Mem[P]↑.Hh.B0=4) THEN Cat[P] ELSE BadBinary[P,83]; 94 =>IF NicePair[P,Mem[P]↑.Hh.B0]AND (CurType=4) THEN ChopString[Mem[ INT[P]+1]↑. Int] ELSE BadBinary[P,94];95 =>BEGIN IF CurType=14 THEN PairToPath[]; IF NicePair[P,Mem[P]↑.Hh.B0]AND (CurType=9) THEN ChopPath[Mem[ INT[P]+1]↑.Int] ELSE BadBinary[P,95]; END;--:974----982: 97,98,99 =>BEGIN IF CurType=14 THEN PairToPath[]; IF(CurType=9)AND (Mem[P]↑.Hh.B0=16) THEN FindPoint[Mem[ INT[P]+1]↑.Int,C] ELSE BadBinary[P,C]; END;100 =>BEGIN IF CurType=8 THEN MaterializePen[]; IF (CurType=6)AND NicePair[P,Mem[P]↑.Hh.B0] THEN SetUpOffset[Mem[ INT[P]+1]↑. Int] ELSE BadBinary[P,100]; END; 96 =>BEGIN IF CurType=14 THEN PairToPath[]; IF (CurType=9)AND NicePair[P,Mem[P]↑.Hh.B0] THEN SetUpDirectionTime[ Mem[ INT[P]+1]↑.Int] ELSE BadBinary[P,96]; END;--:982----987: 92 =>BEGIN IF Mem[P]↑.Hh.B0=14 THEN BEGIN Q←StashCurExp[]; UnstashCurExp[P];PairToPath[];P←StashCurExp[];UnstashCurExp[Q]; END; IF CurType=14 THEN PairToPath[]; IF(CurType=9)AND (Mem[P]↑.Hh.B0=9) THEN BEGIN PathIntersection[Mem[ INT[P]+1]↑. Int,CurExp];PairValue[CurT,CurTt]; END ELSE BadBinary[P,92]; END; --:987-- ENDCASE;RecycleValue[P];FreeNode[P,2]; EXITS Label10 => NULL};BEGIN IF ArithError THEN ClearArith[]; END;--924: IF OldP#0 THEN BEGIN RecycleValue[OldP];FreeNode[OldP,2]; END; IF OldExp#0 THEN BEGIN RecycleValue[OldExp];FreeNode[OldExp,2]; END--:924--; END;--:921----943:-- FracMult: PROCEDURE[N,D: Scaled] = BEGIN P:Halfword;OldExp:Halfword;V:Fraction; IF Internal↑[7]>131072 THEN--944:--BEGIN BeginDiagnostic[]; PrintNl[715];PrintScaled[N];PrintChar[47];PrintScaled[D];Print[720]; PrintExp[0,0];Print[707];EndDiagnostic[FALSE]; END--:944--; SELECT CurType FROM 13,14 =>OldExp←Tarnished[CurExp];19 =>OldExp←1; ENDCASE =>OldExp←0 ;IF OldExp#0 THEN BEGIN OldExp←CurExp; MakeExpCopy[OldExp]; END;V←MakeFraction[N,D]; IF CurType=16 THEN CurExp←TakeFraction[CurExp,V] ELSE IF CurType=14 THEN BEGIN P←Mem[CurExp+1]↑.Int;DepMult[P,V,FALSE]; DepMult[ INT[P]+2,V,FALSE]; END ELSE DepMult[0,V,FALSE]; IF OldExp#0 THEN BEGIN RecycleValue[OldExp];FreeNode[OldExp,2]; END ; END;--:943----988:----1153:-- ShipOut: PROCEDURE[C: EightBits] = BEGIN F:PascalInteger; PrevM, M, Mm:PascalInteger;PrevN, N:PascalInteger;P, Q:Halfword;PrevW, W, Ww:PascalInteger; D:PascalInteger;Delta:PascalInteger;CurMinM:PascalInteger;XOff, YOff:PascalInteger; IF OutputFileName=0 THEN InitGf[]; F←RoundUnscaled[Internal↑[19]];XOff←RoundUnscaled[Internal↑[29]]; YOff←RoundUnscaled[Internal↑[30]]; IF INT[TermOffset]>MaxPrintLine-9 THEN PrintLn [] ELSE IF( INT[TermOffset]>0)OR ( INT[FileOffset]>0) THEN PrintChar[32];PrintChar[91];PrintInt[C]; IF F#0 THEN BEGIN PrintChar[46];PrintInt[F]; END;PascalTextBREAK[file: @TermOut]; BocC←256*F+C;BocP←CharPtr↑[C];CharPtr↑[C]←GfPrevPtr; IF Internal↑[34]>0 THEN--1165: BEGIN IF XOff#0 THEN BEGIN GfString[310,0];BEGIN GfBuf↑[GfPtr]←243; GfPtr←GfPtr+1;IF GfPtr=GfLimit THEN GfSwap[]; END; GfFour[XOff*65536]; END;IF YOff#0 THEN BEGIN GfString[311,0]; BEGIN GfBuf↑[GfPtr]←243;GfPtr←GfPtr+1; IF GfPtr=GfLimit THEN GfSwap[]; END;GfFour[YOff*65536]; END; END--:1165--; --1166:--PrevN←4096;P←Mem[CurEdges]↑.Hh.Lh; N← INT[Mem[ INT[CurEdges]+1]↑.Hh.Rh]-4096;WHILE P#CurEdges DO BEGIN--1168: IF INT[Mem[ INT[P]+1]↑.Hh.Lh]>1 THEN SortEdges[P];Q←Mem[ INT[P]+1]↑.Hh.Rh;W←0; PrevM←-268435456;Ww←0;PrevW←0;M←PrevM; DO IF Q=50000 THEN Mm←268435456 ELSE BEGIN D←Mem[Q]↑.Hh.Lh; Mm← PascalDIVPower2[D ,3];Ww←Ww+( PascalMODPower2Mask[D ,7])-4; END; IF Mm#M THEN BEGIN IF PrevW<=0 THEN BEGIN IF W>0 THEN--1169: BEGIN IF PrevM=-268435456 THEN--1171: BEGIN {IF PrevN=4096 THEN BEGIN GfBoc[Mem[ INT[CurEdges]+2]↑.Hh.Lh+XOff-4096 ,Mem[ INT[CurEdges]+2]↑.Hh.Rh+XOff-4096,Mem[ INT[CurEdges]+1]↑.Hh.Lh+YOff-4096, N+YOff];CurMinM← INT[Mem[ INT[CurEdges]+2]↑.Hh.Lh]-4096+Mem[ INT[CurEdges]+3]↑.Hh.Lh; END ELSE IF PrevN>N+1 THEN--1173:--BEGIN Delta←PrevN-N-1; IF Delta<256 THEN IF Delta=0 THEN BEGIN GfBuf↑[GfPtr]←70; GfPtr←GfPtr+1;IF GfPtr=GfLimit THEN GfSwap[]; END ELSE BEGIN BEGIN GfBuf↑[GfPtr]←71;GfPtr←GfPtr+1; IF GfPtr=GfLimit THEN GfSwap[]; END;BEGIN GfBuf↑[GfPtr]←Delta; GfPtr←GfPtr+1;IF GfPtr=GfLimit THEN GfSwap[]; END; END ELSE BEGIN BEGIN GfBuf↑[GfPtr]←72;GfPtr←GfPtr+1; IF GfPtr=GfLimit THEN GfSwap[]; END;GfTwo[Delta]; END; END--:1173 ELSE--1172:--BEGIN Delta←M-CurMinM; IF Delta>164 THEN BEGIN GfBuf↑[GfPtr]←70;GfPtr←GfPtr+1; IF GfPtr=GfLimit THEN GfSwap[]; END ELSE BEGIN BEGIN GfBuf↑[GfPtr]←74+Delta;GfPtr←GfPtr+1; IF GfPtr=GfLimit THEN GfSwap[]; END; GOTO Label30; END; END--:1172--; GfPaint[M-CurMinM];EXITS Label30 => NULL};PrevN←N; END--:1171-- ELSE GfPaint[M-PrevM]; PrevM←M;PrevW←W; END--:1169--; END ELSE IF W<=0 THEN--1170: BEGIN GfPaint[M-PrevM];PrevM←M;PrevW←W; END--:1170--;M←Mm; END;W←Ww; Q←Mem[Q]↑.Hh.Rh; IF Mm=268435456 THEN EXIT; ENDLOOP;IF W#0 THEN PrintNl[912]; IF PrevM-Mem[ INT[CurEdges]+3]↑.Hh.Lh+XOff>GfMaxM THEN GfMaxM← PrevM-Mem[ INT[CurEdges]+3]↑.Hh.Lh+XOff--:1168--;P←Mem[P]↑.Hh.Lh;N←N-1; END ENDLOOP ; IF PrevN=4096 THEN--1167:--BEGIN GfBoc[0,0,0,0]; IF GfMaxM<0 THEN GfMaxM←0;IF GfMinN>0 THEN GfMinN←0; END--:1167 ELSE IF PrevN+YOff<GfMinN THEN GfMinN←PrevN+YOff--:1166--; BEGIN GfBuf↑[GfPtr]←69;GfPtr←GfPtr+1; IF GfPtr=GfLimit THEN GfSwap[]; END;GfPrevPtr←GfOffset+GfPtr; TotalChars←TotalChars+1;PrintChar[93];PascalTextBREAK[file: @TermOut]; IF Internal↑[11]>0 THEN PrintEdges[911,TRUE,XOff,YOff]; END;--:1164 --994:----1005:-- TryEq: PROCEDURE[L,R: Halfword] = BEGIN P:Halfword; T:PascalInteger[16..19];Q:Halfword;Pp:Halfword;Tt:PascalInteger[17..19];Copied:PascalBoolean;--1006: T←Mem[L]↑.Hh.B0;IF T=16 THEN BEGIN T←17; P←ConstDependency[-Mem[ INT[L]+1]↑.Int];Q←P; END ELSE IF T=19 THEN BEGIN T←17;P←SingleDependency[L]; Mem[ INT[P]+1]↑.Int←-Mem[ INT[P]+1]↑.Int;Q←DepFinal; END ELSE BEGIN P←Mem[ INT[L]+1]↑.Hh.Rh;Q←P; {WHILE TRUE DO BEGIN Mem[ INT[Q]+1]↑.Int←-Mem[ INT[Q]+1]↑.Int; IF Mem[Q]↑.Hh.Lh=0 THEN GOTO Label30;Q←Mem[Q]↑.Hh.Rh; END ENDLOOP ; EXITS Label30 => NULL};Mem[Mem[ INT[L]+1]↑.Hh.Lh]↑.Hh.Rh←Mem[Q]↑.Hh.Rh; Mem[ INT[Mem[Q]↑.Hh.Rh]+1]↑.Hh.Lh←Mem[ INT[L]+1]↑.Hh.Lh;Mem[L]↑.Hh.B0←16; END--:1006--; --1008: {IF R=0 THEN IF CurType=16 THEN BEGIN Mem[ INT[Q]+1]↑.Int←Mem[ INT[Q]+1]↑.Int+CurExp ; GOTO Label31; END ELSE BEGIN Tt←CurType; IF Tt=19 THEN Pp←SingleDependency[CurExp] ELSE Pp←Mem[CurExp+1]↑.Hh. Rh; END ELSE IF Mem[R]↑.Hh.B0=16 THEN BEGIN Mem[ INT[Q]+1]↑.Int←Mem[ INT[Q]+1]↑.Int+Mem[ INT[R ]+1]↑.Int; GOTO Label31; END ELSE BEGIN Tt←Mem[R]↑.Hh.B0; IF Tt=19 THEN Pp←SingleDependency[R] ELSE Pp←Mem[ INT[R]+1]↑.Hh.Rh; END; IF Tt#19 THEN Copied←FALSE ELSE BEGIN Copied←TRUE;Tt←17; END;--1009: WatchCoefs←FALSE; IF T=Tt THEN P←PPlusQ[P,Pp,T] ELSE IF T=18 THEN P←PPlusFq[P,65536, Pp,18,17] ELSE BEGIN Q←P; WHILE Mem[Q]↑.Hh.Lh#0 DO BEGIN Mem[ INT[Q]+1]↑.Int←RoundFraction[Mem[ INT[Q]+1]↑.Int ];Q←Mem[Q]↑.Hh.Rh; END ENDLOOP ;T←18;P←PPlusQ[P,Pp,T]; END;WatchCoefs←TRUE; --:1009--IF Copied THEN FlushNodeList[Pp];EXITS Label31 => NULL};--:1008--IF Mem[P]↑.Hh.Lh=0 THEN--1007: BEGIN IF ABS[Mem[ INT[P]+1]↑.Int]>64 THEN BEGIN BEGIN IF Interaction=3 THEN NULL; PrintNl[133];Print[762]; END;Print[764];PrintScaled[Mem[ INT[P]+1]↑.Int]; PrintChar[41];BEGIN HelpPtr←2;HelpLine↑[1]←763;HelpLine↑[0]←761; END;PutGetError[]; END ELSE IF R=0 THEN--622: BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[133];Print[466]; END; BEGIN HelpPtr←2;HelpLine↑[1]←467;HelpLine↑[0]←468; END;PutGetError[]; END--:622--;FreeNode[P,2]; END--:1007-- ELSE BEGIN LinearEq[P,T]; IF R=0 THEN IF CurType#16 THEN IF Mem[CurExp]↑.Hh.B0=16 THEN BEGIN Pp ←CurExp;CurExp←Mem[CurExp+1]↑.Int;CurType←16;FreeNode[Pp,2]; END; END; END;--:1005----1000:-- MakeEq: PROCEDURE[Lhs: Halfword] = BEGIN T:SmallNumber;V:PascalInteger;P, Q:Halfword; DO {--Label20:--T←Mem[Lhs]↑.Hh.B0; IF INT[T]<=14 THEN V←Mem[ INT[Lhs]+1]↑.Int;{SELECT T FROM--1002: 2,4,6,9,11 =>IF CurType=T+1 THEN BEGIN NonlinearEq[V,CurExp,FALSE]; GOTO Label30; END ELSE IF CurType=T THEN--1003: BEGIN {IF INT[CurType]<=4 THEN BEGIN IF CurType=4 THEN BEGIN IF StrVsStr[V ,CurExp]#0 THEN GOTO Label45; END ELSE IF V#CurExp THEN GOTO Label45;--622: BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[133];Print[466]; END; BEGIN HelpPtr←2;HelpLine↑[1]←467;HelpLine↑[0]←468; END;PutGetError[]; END--:622--; GOTO Label30; END;BEGIN IF Interaction=3 THEN NULL;PrintNl[133]; Print[759]; END;BEGIN HelpPtr←2;HelpLine↑[1]←760;HelpLine↑[0]←761; END;PutGetError[]; GOTO Label30;EXITS Label45 => NULL};BEGIN IF Interaction=3 THEN NULL;PrintNl[133]; Print[762]; END;BEGIN HelpPtr←2;HelpLine↑[1]←763;HelpLine↑[0]←761; END;PutGetError[]; GOTO Label30; END--:1003--; 3,5,7,12,10 =>IF CurType=T-1 THEN BEGIN NonlinearEq[CurExp,Lhs,TRUE]; GOTO Label30; END ELSE IF CurType=T THEN BEGIN RingMerge[Lhs,CurExp]; GOTO Label30; END ELSE IF CurType=14 THEN IF T=10 THEN BEGIN PairToPath[]; GOTO Label20; END;13,14 =>IF CurType=T THEN--1004:--BEGIN P←V+BigNodeSize↑[T]; Q←Mem[CurExp+1]↑.Int+BigNodeSize↑[T];DO P← INT[P]-2;Q← INT[Q]-2;TryEq[P,Q]; IF P=V THEN EXIT; ENDLOOP; GOTO Label30; END--:1004--; 16,17,18,19 =>IF INT[CurType]>=16 THEN BEGIN TryEq[Lhs,0]; GOTO Label30; END;1 => NULL; --:1002-- ENDCASE;--1001:--DispErr[Lhs,157];DispErr[0,756]; IF INT[Mem[Lhs]↑.Hh.B0]<=14 THEN PrintType[Mem[Lhs]↑.Hh.B0] ELSE Print[213]; PrintChar[61];IF INT[CurType]<=14 THEN PrintType[CurType] ELSE Print[213]; PrintChar[41];BEGIN HelpPtr←2;HelpLine↑[1]←757;HelpLine↑[0]←758; END;PutGetError--:1001--[];EXITS Label30 => NULL};BEGIN IF ArithError THEN ClearArith[]; END; RecycleValue[Lhs];FreeNode[Lhs,2];EXIT; EXITS Label20 => NULL} ENDLOOP; END;--:1000-- DoEquation: PROCEDURE = BEGIN Lhs:Halfword;P:Halfword; Lhs←StashCurExp[];GetXNext[];VarFlag←77;ScanExpression[]; IF CurCmd=51 THEN DoEquation [] ELSE IF CurCmd=77 THEN DoAssignment[]; IF Internal↑[7]>131072 THEN--996:--BEGIN BeginDiagnostic[];PrintNl[715]; PrintExp[Lhs,0];Print[751];PrintExp[0,0];Print[707]; EndDiagnostic[FALSE]; END--:996--; IF CurType=10 THEN IF Mem[Lhs]↑.Hh.B0=14 THEN BEGIN P←StashCurExp[]; UnstashCurExp[Lhs];Lhs←P; END;MakeEq[Lhs]; END;--:994----995: END.