-- file: MFOpsImpl1.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, MFPaths, MFEdges, MFOctants, MFEnvelopes, MFInput, MFFileNames, MFParsing, MFOps, MFTFM; MFOpsImpl1: PROGRAM IMPORTS PascalBasic, MFProcArray, MFInteraction, MFMath, MFMemory, MFSymbols, MFPaths, MFEdges, MFOctants, MFEnvelopes, MFInput, MFFileNames, MFParsing, MFTFM EXPORTS MFOps = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, MFTypes, MFProcArray, MFInteraction, MFMath, MFMemory, MFSymbols, MFPaths, MFEdges, MFOctants, MFEnvelopes, MFInput, MFFileNames, MFParsing, MFOps, MFTFM; --:820 --953:-- Txx: Scaled; Txy: Scaled; Tyx: Scaled; Tyy: Scaled; Tx: Scaled; Ty: Scaled; --:953----1076:-- StartSym: Halfword; --:1076----1083:-- LongHelpSeen: PascalBoolean; DoNullary: PROCEDURE[C: Quarterword] = BEGIN K:PascalInteger; BEGIN IF ArithError THEN ClearArith[]; END; IF Internal^[7]>131072 THEN ShowCmdMod[33,C]; SELECT C FROM 30,31 =>BEGIN CurType_2;CurExp_C; END;32 =>BEGIN CurType_11; CurExp_GetNode[6];InitEdges[CurExp]; END;33 =>BEGIN CurType_6; CurExp_3; END;37 =>BEGIN CurType_16;CurExp_NormRand[]; END;36 =>--895: BEGIN CurType_8;CurExp_GetNode[7];Mem[CurExp]^.Hh.B0_4; Mem[CurExp]^.Hh.B1_4;Mem[CurExp]^.Hh.Rh_CurExp;Mem[CurExp+1]^.Int_0; Mem[CurExp+2]^.Int_0;Mem[CurExp+3]^.Int_65536;Mem[CurExp+4]^.Int_0; Mem[CurExp+5]^.Int_0;Mem[CurExp+6]^.Int_65536; END--:895--; 34 =>BEGIN IF JobName=0 THEN OpenLogFile[];CurType_4;CurExp_JobName; END;35 =>--896:--BEGIN IF INT[Interaction]<=1 THEN FatalError[700]; BeginFileReading[];CurInput.NameField_1;BEGIN Print[157];TermInput[]; END; BEGIN IF INT[PoolPtr+Last]-CurInput.StartField>MaxPoolPtr THEN BEGIN IF INT[PoolPtr+Last]-CurInput.StartField>PoolSize THEN Overflow[129, PoolSize-InitPoolPtr]; MaxPoolPtr_ INT[PoolPtr+Last]-CurInput.StartField; END; END; FOR i:INT IN [ INT[CurInput.StartField ].. INT[Last-1 ]] DO K _ i; StrPool^[PoolPtr]_ Buffer^[K];PoolPtr_PoolPtr+1; ENDLOOP;EndFileReading[];CurType_4; CurExp_MakeString[]; END--:896--; ENDCASE; BEGIN IF ArithError THEN ClearArith[]; END; END;--:894----897:----898: NicePair: PROCEDURE[P: PascalInteger,T: Quarterword] RETURNS[NicePairResult: PascalBoolean] = BEGIN {IF T=14 THEN BEGIN P_Mem[P+1]^.Int; IF Mem[P]^.Hh.B0=16 THEN IF Mem[P+2]^.Hh.B0=16 THEN BEGIN NicePairResult_TRUE; GOTO Label10; END; END;NicePairResult_FALSE;EXITS Label10 => NULL}; END;--:898----899: PrintKnownOrUnknownType: PROCEDURE[T: SmallNumber,V: PascalInteger] = BEGIN PrintChar[40]; IF INT[T]<17 THEN IF T#14 THEN PrintType[T] ELSE IF NicePair[V,14] THEN Print[209] ELSE Print[701] ELSE Print[702];PrintChar[41]; END;--:899----900: BadUnary: PROCEDURE[C: Quarterword] = BEGIN DispErr[0,703];PrintOp[C]; PrintKnownOrUnknownType[CurType,CurExp];BEGIN HelpPtr_3; HelpLine^[2]_704;HelpLine^[1]_705;HelpLine^[0]_706; END;PutGetError[]; END;--:900----903:-- NegateDepList: PROCEDURE[P: Halfword] = BEGIN {WHILE TRUE DO BEGIN Mem[ INT[P]+1]^.Int_-Mem[ INT[P]+1]^.Int; IF Mem[P]^.Hh.Lh=0 THEN GOTO Label10;P_Mem[P]^.Hh.Rh; END ENDLOOP ;EXITS Label10 => NULL}; END;--:903----907: PairToPath: PROCEDURE = BEGIN CurExp_NewKnot[];CurType_9; END;--:907 --909:-- TakePart: PROCEDURE[C: Quarterword] = BEGIN P:Halfword; P_Mem[CurExp+1]^.Int;Mem[18]^.Int_P;Mem[17]^.Hh.B0_CurType; Mem[P]^.Hh.Rh_17;FreeNode[CurExp,2];MakeExpCopy[ INT[P]+2*(C-53)]; RecycleValue[17]; END;--:909----912:-- StrToNum: PROCEDURE[C: Quarterword] = BEGIN N:PascalInteger;M:AsciiCode;K:PoolPointer;B:PascalInteger[8..16];BadChar:PascalBoolean; IF C=49 THEN IF(StrStart^[CurExp+1]-StrStart^[CurExp])=0 THEN N _-1 ELSE N_StrPool^[StrStart^[CurExp]] ELSE BEGIN IF C=47 THEN B_8 ELSE B_16;N_0;BadChar_FALSE; FOR i:INT IN [ INT[StrStart^[CurExp]].. INT[StrStart^[CurExp+1]-1 ]] DO K _ i; M_StrPool^ [K];IF( INT[M]>=48)AND ( INT[M]<=57) THEN M_M-48 ELSE IF( INT[M]>=65)AND ( INT[M]<=70) THEN M_M-55 ELSE IF( INT[M]>=97)AND ( INT[M]<=102) THEN M_M-87 ELSE BEGIN BadChar_TRUE;M_0; END;IF INT[M]>=B THEN BEGIN BadChar_TRUE;M_0; END; IF N<32768 /B THEN N_N*B+M ELSE N_32767; ENDLOOP;--913: IF BadChar THEN BEGIN DispErr[0,708];IF C=47 THEN BEGIN HelpPtr_1; HelpLine^[0]_709; END ELSE BEGIN HelpPtr_1;HelpLine^[0]_710; END; PutGetError[]; END;IF N>4095 THEN BEGIN BEGIN IF Interaction=3 THEN NULL; PrintNl[133];Print[711]; END;PrintInt[N];PrintChar[41]; BEGIN HelpPtr_1;HelpLine^[0]_712; END;PutGetError[]; END--:913--; END; FlushCurExp[N*65536]; END;--:912----915:-- PathLength: PROCEDURE RETURNS[PathLengthResult: Scaled] = BEGIN N:Scaled;P:Halfword; 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;PathLengthResult_N; END;--:915----918: TestKnown: PROCEDURE[C: Quarterword] = BEGIN B:PascalInteger[30..31];P, Q:Halfword; B_31;SELECT CurType FROM 1,2,4,6,8,9,11,16 =>B_30; 13,14 =>BEGIN P_Mem[CurExp+1]^.Int;Q_ INT[P]+BigNodeSize^[CurType]; {DO Q_ INT[Q]-2;IF Mem[Q]^.Hh.B0#16 THEN GOTO Label30; IF Q=P THEN EXIT; ENDLOOP;B_30;EXITS Label30 => NULL}; END; ENDCASE => NULL;IF C=39 THEN FlushCurExp[B] ELSE FlushCurExp[61-B]; CurType_2; END;--:918-- DoUnary: PROCEDURE[C: Quarterword] = BEGIN P, Q:Halfword;X:PascalInteger; BEGIN IF ArithError THEN ClearArith[]; END;IF Internal^[7]>131072 THEN--901:--BEGIN BeginDiagnostic[]; PrintNl[123];PrintOp[C];PrintChar[40];PrintExp[0,0];Print[707]; EndDiagnostic[FALSE]; END--:901--; SELECT C FROM 69 =>IF INT[CurType]<14 THEN IF CurType#11 THEN BadUnary[69]; 70 =>--902:--SELECT CurType FROM 14,19 =>BEGIN Q_CurExp;MakeExpCopy[Q]; IF CurType=17 THEN NegateDepList[Mem[CurExp+1]^.Hh.Rh] ELSE IF CurType=14 THEN BEGIN P_Mem[CurExp+1]^.Int; IF Mem[P]^.Hh.B0=16 THEN Mem[ INT[P]+1]^.Int_-Mem[ INT[P]+1]^.Int ELSE NegateDepList [Mem[ INT[P]+1]^.Hh.Rh]; IF Mem[ INT[P]+2]^.Hh.B0=16 THEN Mem[ INT[P]+3]^.Int_-Mem[ INT[P]+3]^.Int ELSE NegateDepList[Mem[ INT[P]+3]^.Hh.Rh]; END;RecycleValue[Q];FreeNode[Q,2]; END; 17,18 =>NegateDepList[Mem[CurExp+1]^.Hh.Rh];16 =>CurExp_-CurExp; 11 =>NegateEdges[CurExp]; ENDCASE =>BadUnary[70]--:902--;--904: 41 =>IF CurType#2 THEN BadUnary[41] ELSE CurExp_61-CurExp;--:904 --905: 59,60,61,62,63,64,65,38,66 =>IF CurType#16 THEN BadUnary[C] ELSE SELECT C FROM 59 =>CurExp_SquareRt[CurExp];60 =>CurExp_MExp[CurExp]; 61 =>CurExp_MLog[CurExp]; 62,63 =>BEGIN NSinCos[( CurExp MOD 23592960)*16]; IF C=62 THEN CurExp_RoundFraction[NSin] ELSE CurExp_RoundFraction[ NCos]; END;64 =>CurExp_FloorScaled[CurExp]; 65 =>CurExp_UnifRand[CurExp]; 38 =>BEGIN IF PascalODD[RoundUnscaled[CurExp]] THEN CurExp_30 ELSE CurExp_ 31;CurType_2; END;66 =>--1180: BEGIN CurExp_ PascalMODPower2Mask[RoundUnscaled[CurExp],255]; IF CurExp<0 THEN CurExp_CurExp+256; IF CharExists^[CurExp] THEN CurExp_30 ELSE CurExp_31;CurType_2; END--:1180--; ENDCASE;--:905----906: 67 =>IF NicePair[CurExp,CurType] THEN BEGIN P_Mem[CurExp+1]^.Int; X_NArg[Mem[ INT[P]+1]^.Int,Mem[ INT[P]+3]^.Int]; IF X>=0 THEN FlushCurExp[ PascalDIVPower2[(X+8),4]] ELSE FlushCurExp[-( PascalDIVPower2[(-X+8),4])]; END ELSE BadUnary[67];--:906----908: 53,54 =>IF( INT[CurType]<=14)AND ( INT[CurType]>=13) THEN TakePart[C] ELSE BadUnary[C ];55,56,57,58 =>IF CurType=13 THEN TakePart[C] ELSE BadUnary[C];--:908 --911: 50 =>IF CurType#16 THEN BadUnary[50] ELSE BEGIN CurExp_ PascalMODPower2Mask[RoundUnscaled[ CurExp],127];CurType_4;IF CurExp<0 THEN CurExp_CurExp+128; IF(StrStart^[CurExp+1]-StrStart^[CurExp])#1 THEN BEGIN BEGIN IF INT[PoolPtr+1]>MaxPoolPtr THEN BEGIN IF INT[PoolPtr+1]>PoolSize THEN Overflow [129,PoolSize-InitPoolPtr];MaxPoolPtr_PoolPtr+1; END; END; BEGIN StrPool^[PoolPtr]_CurExp;PoolPtr_PoolPtr+1; END; CurExp_MakeString[]; END; END; 42 =>IF CurType#16 THEN BadUnary[42] ELSE BEGIN OldSetting_Selector; Selector_5;PrintScaled[CurExp];CurExp_MakeString[]; Selector_OldSetting;CurType_4; END; 47,48,49 =>IF CurType#4 THEN BadUnary[C] ELSE StrToNum[C];--:911----914: 51 =>IF CurType=4 THEN FlushCurExp[(StrStart^[CurExp+1]-StrStart^ [CurExp])*65536] ELSE IF CurType=9 THEN FlushCurExp[PathLength[]] ELSE IF CurType=16 THEN CurExp_ABS[CurExp] ELSE IF NicePair[CurExp, CurType] THEN FlushCurExp[PythAdd[Mem[Mem[CurExp+1]^.Int+1]^.Int,Mem[ Mem[CurExp+1]^.Int+3]^.Int]] ELSE BadUnary[C];--:914----916: 52 =>IF CurType=14 THEN FlushCurExp[0] ELSE IF CurType#9 THEN BadUnary[52] ELSE IF Mem[CurExp]^.Hh.B0=0 THEN FlushCurExp[0] ELSE BEGIN CurPen_3;CurPathType_1; CurExp_MakeSpec[CurExp,-1879080960,0]; FlushCurExp[TurningNumber*65536]; END;--:916----917: 2 =>BEGIN IF( INT[CurType]>=2)AND ( INT[CurType]<=3) THEN FlushCurExp[30] ELSE FlushCurExp[31];CurType_2; END; 4 =>BEGIN IF( INT[CurType]>=4)AND ( INT[CurType]<=5) THEN FlushCurExp[30] ELSE FlushCurExp[31];CurType_2; END; 6 =>BEGIN IF( INT[CurType]>=6)AND ( INT[CurType]<=8) THEN FlushCurExp[30] ELSE FlushCurExp[31];CurType_2; END; 9 =>BEGIN IF( INT[CurType]>=9)AND ( INT[CurType]<=10) THEN FlushCurExp[30] ELSE FlushCurExp[31];CurType_2; END; 11 =>BEGIN IF( INT[CurType]>=11)AND ( INT[CurType]<=12) THEN FlushCurExp[30] ELSE FlushCurExp[31];CurType_2; END; 13,14 =>BEGIN IF CurType=C THEN FlushCurExp[30] ELSE FlushCurExp[31]; CurType_2; END; 15 =>BEGIN IF( INT[CurType]>=16)AND ( INT[CurType]<=19) THEN FlushCurExp[30] ELSE FlushCurExp[31];CurType_2; END;39,40 =>TestKnown[C];--:917----919: 68 =>BEGIN IF CurType#9 THEN FlushCurExp[31] ELSE IF Mem[CurExp]^.Hh.B0 #0 THEN FlushCurExp[30] ELSE FlushCurExp[31];CurType_2; END;--:919 --920:--45 =>BEGIN IF CurType=14 THEN PairToPath[]; IF CurType=9 THEN CurType_8 ELSE BadUnary[45]; END; 44 =>BEGIN IF CurType=8 THEN MaterializePen[]; IF CurType#6 THEN BadUnary[44] ELSE BEGIN FlushCurExp[MakePath[ CurExp]];CurType_9; END; END; 46 =>IF CurType#11 THEN BadUnary[46] ELSE FlushCurExp[TotalWeight[ CurExp]];43 =>IF CurType=9 THEN BEGIN P_HtapYpoc[CurExp]; IF Mem[P]^.Hh.B1=0 THEN P_Mem[P]^.Hh.Rh;TossKnotList[CurExp]; CurExp_P; END ELSE IF CurType=14 THEN PairToPath [] ELSE BadUnary[43]; --:920-- ENDCASE;BEGIN IF ArithError THEN ClearArith[]; END; END;--:897----921: END.