-- file: TexMath4Impl.mesa -- Pascal-to-Mesa translator output, translated at September 27, 1985 10:21:38 am PDT DIRECTORY PascalBasic, TexTypes, TexInteraction, TexMemory, TexSymbols, TexScan, TexOps, TexBuildPage, TexMath, TexRest, TexSysdepInline; TexMath4Impl: PROGRAM IMPORTS PascalBasic, TexTypes, TexInteraction, TexMemory, TexSymbols, TexScan, TexOps, TexBuildPage, TexMath, TexRest, TexSysdepInline EXPORTS TexMath = PUBLIC BEGIN OPEN PascalBasic, TexTypes, TexInteraction, TexMemory, TexSymbols, TexScan, TexOps, TexBuildPage, TexMath, TexRest, TexSysdepInline; StartEqNo: PROCEDURE = BEGIN SaveStack^[SavePtr+0].Int_CurChr;SavePtr_SavePtr+1;--1139: BEGIN PushMath[15];EqWordDefine[4811,-1]; IF Eqtb^[3559].Hh.Rh#0 THEN BeginTokenList[Eqtb^[3559].Hh.Rh,8]; END--:1139--; END;--:1142----1151:-- ScanMath: PROCEDURE[P: Halfword] = BEGIN C:PascalInteger; DO {--Label20:----404:--DO GetXToken[]; IF(CurCmd#10)AND (CurCmd#0)--:404-- THEN EXIT; ENDLOOP; DO {--Label21:--{SELECT CurCmd FROM 11,12,67 =>IF INT[CurChr]>=128 THEN C_CurChr ELSE BEGIN C _Eqtb^[ INT[4639]+CurChr].Hh.Rh;IF C=32768 THEN BEGIN--1152: BEGIN CurCs_CurChr+1;CurCmd_Eqtb^[CurCs].Hh.B0; CurChr_Eqtb^[CurCs].Hh.Rh;XToken[];BackInput[]; END--:1152--; GOTO Label20; END; END;16 =>BEGIN ScanCharNum[];CurChr_CurVal;CurCmd_67; GOTO Label21; END; 17 =>BEGIN ScanFifteenBitInt[];C_CurVal; END;68 =>C_CurChr; 15 =>BEGIN ScanTwentySevenBitInt[];C_ PascalDIVPower2[CurVal ,12]; END; ENDCASE =>--1153:--BEGIN BackInput[];ScanLeftBrace[]; SaveStack^[SavePtr+0].Int_P;SavePtr_SavePtr+1;PushMath[9]; GOTO Label10; END--:1153--;Mem[P]^.Hh.Rh_1;Mem[P]^.Hh.B1_ PascalMODPower2Mask[C ,255]; IF(C>=28672)AND ((Eqtb^[4811].Int>=0)AND (Eqtb^[4811].Int<16)) THEN Mem[P]^.Hh .B0_Eqtb^[4811].Int ELSE Mem[P]^.Hh.B0_ PascalMODPower2Mask[( PascalDIVPower2[C ,8]),15];EXITS Label10 => NULL};EXIT; EXITS Label21 => NULL} ENDLOOP;EXIT; EXITS Label20 => NULL} ENDLOOP; END;--:1151 --1155:-- SetMathChar: PROCEDURE[C: PascalInteger] = BEGIN P:Halfword; IF C>=32768 THEN--1152:--BEGIN CurCs_CurChr+1; CurCmd_Eqtb^[CurCs].Hh.B0;CurChr_Eqtb^[CurCs].Hh.Rh;XToken[]; BackInput[]; END--:1152-- ELSE BEGIN P_NewNoad[];Mem[P+1]^.Hh.Rh_1; Mem[P+1]^.Hh.B1_ PascalMODPower2Mask[C ,255];Mem[P+1]^.Hh.B0_ PascalMODPower2Mask[( PascalDIVPower2[C ,8]),15]; IF C>=28672 THEN BEGIN IF((Eqtb^[4811].Int>=0)AND (Eqtb^[4811].Int<16)) THEN Mem[P+1]^.Hh.B0_Eqtb^[4811].Int;Mem[P]^.Hh.B0_16; END ELSE Mem[P]^.Hh.B0_16+( PascalDIVPower2[C ,12]); Mem[CurList.TailField]^.Hh.Rh_P;CurList.TailField_P; END; END;--:1155 --1159:-- MathLimitSwitch: PROCEDURE = BEGIN {IF CurList.HeadField#CurList.TailField THEN IF Mem[CurList. TailField]^.Hh.B0=17 THEN BEGIN Mem[CurList.TailField]^.Hh.B1_CurChr; GOTO Label10; END;BEGIN IF Interaction=3 THEN NULL;PrintNl[134];Print[983]; END; BEGIN HelpPtr_1;HelpLine^[0]_984; END;Error[];EXITS Label10 => NULL}; END;--:1159----1160: ScanDelimiter: PROCEDURE[P: Halfword,R: PascalBoolean] = BEGIN IF R THEN ScanTwentySevenBitInt [] ELSE BEGIN--404: DO GetXToken[]; IF(CurCmd#10)AND (CurCmd#0)--:404-- THEN EXIT; ENDLOOP; SELECT CurCmd FROM 11,12 =>CurVal_Eqtb^[ INT[5073]+CurChr].Int; 15 =>ScanTwentySevenBitInt[]; ENDCASE =>CurVal_-1 ; END; IF CurVal<0 THEN--1161:--BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[134]; Print[985]; END;BEGIN HelpPtr_6;HelpLine^[5]_986;HelpLine^[4]_987; HelpLine^[3]_988;HelpLine^[2]_989;HelpLine^[1]_990;HelpLine^[0]_991; END;BackError[];CurVal_0; END--:1161--; Mem[P]^.Qqqq.B0_ PascalMODPower2Mask[( PascalDIVPower2[CurVal ,20]),15]; Mem[P]^.Qqqq.B1_ PascalMODPower2Mask[( PascalDIVPower2[CurVal ,12]),255]; Mem[P]^.Qqqq.B2_ PascalMODPower2Mask[( PascalDIVPower2[CurVal ,8]),15];Mem[P]^.Qqqq.B3_ PascalMODPower2Mask[CurVal ,255]; END;--:1160----1163:-- MathRadical: PROCEDURE = BEGIN BEGIN Mem[CurList.TailField]^.Hh.Rh_GetNode[5]; CurList.TailField_Mem[CurList.TailField]^.Hh.Rh; END; Mem[CurList.TailField]^.Hh.B0_24;Mem[CurList.TailField]^.Hh.B1_0; Mem[CurList.TailField+1]^.Hh_EmptyField; Mem[CurList.TailField+3]^.Hh_EmptyField; Mem[CurList.TailField+2]^.Hh_EmptyField; ScanDelimiter[CurList.TailField+4,TRUE]; ScanMath[CurList.TailField+1]; END;--:1163----1165:-- MathAc: PROCEDURE = BEGIN IF CurCmd=45 THEN--1166:--BEGIN BEGIN IF Interaction=3 THEN NULL; PrintNl[134];Print[992]; END;PrintEsc[385];Print[993]; BEGIN HelpPtr_2;HelpLine^[1]_994;HelpLine^[0]_995; END;Error[]; END--:1166--;BEGIN Mem[CurList.TailField]^.Hh.Rh_GetNode[5]; CurList.TailField_Mem[CurList.TailField]^.Hh.Rh; END; Mem[CurList.TailField]^.Hh.B0_28;Mem[CurList.TailField]^.Hh.B1_0; Mem[CurList.TailField+1]^.Hh_EmptyField; Mem[CurList.TailField+3]^.Hh_EmptyField; Mem[CurList.TailField+2]^.Hh_EmptyField; Mem[CurList.TailField+4]^.Hh.Rh_1;ScanFifteenBitInt[]; Mem[CurList.TailField+4]^.Hh.B1_ PascalMODPower2Mask[CurVal ,255]; IF(CurVal>=28672)AND ((Eqtb^[4811].Int>=0)AND (Eqtb^[4811].Int<16)) THEN Mem [CurList.TailField+4]^.Hh.B0_Eqtb^[4811].Int ELSE Mem[CurList. TailField+4]^.Hh.B0_ PascalMODPower2Mask[( PascalDIVPower2[CurVal ,8]),15]; ScanMath[CurList.TailField+1]; END;--:1165----1172: AppendChoices: PROCEDURE = BEGIN BEGIN Mem[CurList.TailField]^.Hh.Rh_NewChoice[]; CurList.TailField_Mem[CurList.TailField]^.Hh.Rh; END; SavePtr_SavePtr+1;SaveStack^[SavePtr-1].Int_0;ScanLeftBrace[]; PushMath[13]; END;--:1172----1174:----1184: FinMlist: PROCEDURE[P: Halfword] RETURNS[FinMlistResult: Halfword] = BEGIN Q:Halfword; IF CurList.AuxField#0 THEN--1185: BEGIN Mem[CurList.AuxField+3]^.Hh.Rh_3; Mem[CurList.AuxField+3]^.Hh.Lh_Mem[CurList.HeadField]^.Hh.Rh; IF P=0 THEN Q_CurList.AuxField ELSE BEGIN Q_Mem[CurList.AuxField+2 ]^.Hh.Lh;IF Mem[Q]^.Hh.B0#30 THEN Confusion[735]; Mem[CurList.AuxField+2]^.Hh.Lh_Mem[Q]^.Hh.Rh; Mem[Q]^.Hh.Rh_CurList.AuxField;Mem[CurList.AuxField]^.Hh.Rh_P; END; END--:1185-- ELSE BEGIN Mem[CurList.TailField]^.Hh.Rh_P; Q_Mem[CurList.HeadField]^.Hh.Rh; END;PopNest[];FinMlistResult_Q; END;--:1184 BuildChoices: PROCEDURE = BEGIN P:Halfword; Unsave[]; P_FinMlist[0]; {SELECT SaveStack^[SavePtr-1].Int FROM 0 =>Mem[CurList.TailField+1]^.Hh.Lh_P ;1 =>Mem[CurList.TailField+1]^.Hh.Rh_P; 2 =>Mem[CurList.TailField+2]^.Hh.Lh_P; 3 =>BEGIN Mem[CurList.TailField+2]^.Hh.Rh_P;SavePtr_SavePtr-1; GOTO Label10; END; ENDCASE; SaveStack^[SavePtr-1].Int_SaveStack^[SavePtr-1].Int+1; ScanLeftBrace[];PushMath[13];EXITS Label10 => NULL}; END;--:1174----1176:-- SubSup: PROCEDURE = BEGIN T:SmallNumber;P:Halfword; T_0;P_0; IF CurList.TailField#CurList.HeadField THEN IF( INT[Mem[CurList. TailField]^.Hh.B0]>=16)AND ( INT[Mem[CurList.TailField]^.Hh.B0]<30) THEN BEGIN P _ INT[CurList.TailField+2]+CurCmd-7;T_Mem[P]^.Hh.Rh; END; IF(P=0)OR (T#0) THEN--1177: BEGIN BEGIN Mem[CurList.TailField]^.Hh.Rh_NewNoad[]; CurList.TailField_Mem[CurList.TailField]^.Hh.Rh; END; P_ INT[CurList.TailField+2]+CurCmd-7; IF T#0 THEN BEGIN IF CurCmd=7 THEN BEGIN BEGIN IF Interaction=3 THEN NULL; PrintNl[134];Print[996]; END;BEGIN HelpPtr_1;HelpLine^[0]_997; END; END ELSE BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[134];Print[998]; END; BEGIN HelpPtr_1;HelpLine^[0]_999; END; END;Error[]; END; END--:1177--; ScanMath[P]; END;--:1176----1181:-- MathFraction: PROCEDURE = BEGIN C:SmallNumber; C_CurChr;IF CurList.AuxField#0 THEN--1183: BEGIN IF INT[C]>=3 THEN BEGIN ScanDelimiter[64988,FALSE]; ScanDelimiter[64988,FALSE]; END; IF C MOD 3=0 THEN ScanDimen[FALSE,FALSE,FALSE]; BEGIN IF Interaction=3 THEN NULL;PrintNl[134];Print[1006]; END; BEGIN HelpPtr_3;HelpLine^[2]_1007;HelpLine^[1]_1008; HelpLine^[0]_1009; END;Error[]; END--:1183 ELSE BEGIN CurList.AuxField_GetNode[6]; Mem[CurList.AuxField]^.Hh.B0_25;Mem[CurList.AuxField]^.Hh.B1_0; Mem[CurList.AuxField+2]^.Hh.Rh_3; Mem[CurList.AuxField+2]^.Hh.Lh_Mem[CurList.HeadField]^.Hh.Rh; Mem[CurList.AuxField+3]^.Hh_EmptyField; Mem[CurList.AuxField+4]^.Qqqq_NullDelimiter; Mem[CurList.AuxField+5]^.Qqqq_NullDelimiter; Mem[CurList.HeadField]^.Hh.Rh_0; CurList.TailField_CurList.HeadField;--1182: IF INT[C]>=3 THEN BEGIN ScanDelimiter[CurList.AuxField+4,FALSE]; ScanDelimiter[CurList.AuxField+5,FALSE]; END; SELECT C MOD 3 FROM 0 =>BEGIN ScanDimen[FALSE,FALSE,FALSE]; Mem[CurList.AuxField+1]^.Int_CurVal; END; 1 =>Mem[CurList.AuxField+1]^.Int_1073741824; 2 =>Mem[CurList.AuxField+1]^.Int_0; ENDCASE--:1182--; END; END;--:1181----1191: MathLeftRight: PROCEDURE = BEGIN T:SmallNumber;P:Halfword; T_CurChr;IF(T=31)AND (CurGroup#16) THEN--1192: BEGIN IF CurGroup=15 THEN BEGIN ScanDelimiter[64988,FALSE]; BEGIN IF Interaction=3 THEN NULL;PrintNl[134];Print[636]; END;PrintEsc[735]; BEGIN HelpPtr_1;HelpLine^[0]_1010; END;Error[]; END ELSE OffSave[]; END--:1192-- ELSE BEGIN P_NewNoad[];Mem[P]^.Hh.B0_T; ScanDelimiter[P+1,FALSE];IF T=30 THEN BEGIN PushMath[16]; Mem[CurList.HeadField]^.Hh.Rh_P;CurList.TailField_P; END ELSE BEGIN P_FinMlist[P];Unsave[]; BEGIN Mem[CurList.TailField]^.Hh.Rh_NewNoad[]; CurList.TailField_Mem[CurList.TailField]^.Hh.Rh; END; Mem[CurList.TailField]^.Hh.B0_23;Mem[CurList.TailField+1]^.Hh.Rh_3; Mem[CurList.TailField+1]^.Hh.Lh_P; END; END; END;--:1191----1194: AfterMath: PROCEDURE = BEGIN L:PascalBoolean;Danger:PascalBoolean;M:PascalInteger;P:Halfword; A:Halfword;--1198:--B:Halfword;W:Scaled;Z:Scaled;E:Scaled;Q:Scaled; D:Scaled;S:Scaled;G1, G2:SmallNumber;R:Halfword;T:Halfword;--:1198 Danger_FALSE;--1195: IF( INT[FontParams^[Eqtb^[4081].Hh.Rh]]<22)OR ( INT[FontParams^[Eqtb^[4097].Hh.Rh]]<22) OR ( INT[FontParams^[Eqtb^[4113].Hh.Rh]]<22) THEN BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[134];Print[1011]; END;BEGIN HelpPtr_3;HelpLine^[2]_1012; HelpLine^[1]_1013;HelpLine^[0]_1014; END;Error[];FlushMath[];Danger_TRUE; END ELSE IF( INT[FontParams^[Eqtb^[4082].Hh.Rh]]<13)OR ( INT[FontParams^[Eqtb^[4098]. Hh.Rh]]<13)OR ( INT[FontParams^[Eqtb^[4114].Hh.Rh]]<13) THEN BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[134];Print[1015]; END;BEGIN HelpPtr_3; HelpLine^[2]_1016;HelpLine^[1]_1017;HelpLine^[0]_1018; END;Error[]; FlushMath[];Danger_TRUE; END--:1195--;M_CurList.ModeField;L_FALSE; P_FinMlist[0];IF CurList.ModeField=-M THEN BEGIN CurMlist_P; CurStyle_2;MlistPenalties_FALSE;MlistToHlist[]; A_Hpack[Mem[64997]^.Hh.Rh,0,1];Unsave[];SavePtr_SavePtr-1; IF SaveStack^[SavePtr+0].Int=1 THEN L_TRUE;IF Danger THEN FlushMath[]; M_CurList.ModeField;P_FinMlist[0]; END ELSE A_0;IF M<0 THEN--1196: BEGIN BEGIN Mem[CurList.TailField]^.Hh.Rh_NewMath[Eqtb^[5202].Int,0]; CurList.TailField_Mem[CurList.TailField]^.Hh.Rh; END;CurMlist_P; CurStyle_2;MlistPenalties_( INT[CurList.ModeField]>0);MlistToHlist[]; Mem[CurList.TailField]^.Hh.Rh_Mem[64997]^.Hh.Rh; WHILE Mem[CurList.TailField]^.Hh.Rh#0 DO CurList.TailField_Mem[ CurList.TailField]^.Hh.Rh ENDLOOP ; BEGIN Mem[CurList.TailField]^.Hh.Rh_NewMath[Eqtb^[5202].Int,1]; CurList.TailField_Mem[CurList.TailField]^.Hh.Rh; END; CurList.AuxField_1000;Unsave[]; END--:1196-- ELSE BEGIN--1197: BEGIN GetXToken[];IF CurCmd#3 THEN BEGIN BEGIN IF Interaction=3 THEN NULL; PrintNl[134];Print[1019]; END;BEGIN HelpPtr_2;HelpLine^[1]_1020; HelpLine^[0]_1021; END;BackError[]; END; END--:1197--;--1199:--CurMlist_P; CurStyle_0;MlistPenalties_FALSE;MlistToHlist[];P_Mem[64997]^.Hh.Rh; AdjustTail_64995;B_Hpack[P,0,1];T_AdjustTail;AdjustTail_0; W_Mem[B+1]^.Int;Z_Eqtb^[5215].Int;S_Eqtb^[5216].Int; IF (A=0)OR Danger THEN BEGIN E_0;Q_0; END ELSE BEGIN E_Mem[A+1]^.Int; Q_E+FontInfo^[6+ParamBase^[Eqtb^[4081].Hh.Rh]].Int; END; IF W+Q>Z THEN--1201: BEGIN IF(E#0)AND ((W-TotalShrink^[0]+Q<=Z)OR (TotalShrink^[1]#0)OR ( TotalShrink^[2]#0)OR (TotalShrink^[3]#0)) THEN BEGIN FreeNode[B,7]; B_Hpack[P,Z-Q,0]; END ELSE BEGIN E_0;IF W>Z THEN BEGIN FreeNode[B,7]; B_Hpack[P,Z,0]; END; END;W_Mem[B+1]^.Int; END--:1201--;--1202:--D_Half[Z-W]; IF(E>0)AND (D<2*E) THEN BEGIN D_Half[Z-W-E]; IF P#0 THEN IF Mem[P]^.Hh.B0=10 THEN D_0; END--:1202--;--1203: BEGIN Mem[CurList.TailField]^.Hh.Rh_NewPenalty[Eqtb^[4778].Int]; CurList.TailField_Mem[CurList.TailField]^.Hh.Rh; END; IF (D+S<=Eqtb^[5214].Int)OR L THEN BEGIN G1_3;G2_4; END ELSE BEGIN G1_5; G2_6; END;IF L AND (E=0) THEN BEGIN Mem[A+4]^.Int_S;AppendToVlist[A]; BEGIN Mem[CurList.TailField]^.Hh.Rh_NewPenalty[10000]; CurList.TailField_Mem[CurList.TailField]^.Hh.Rh; END; END ELSE BEGIN Mem[CurList.TailField]^.Hh.Rh_NewParamGlue[G1]; CurList.TailField_Mem[CurList.TailField]^.Hh.Rh; END--:1203--;--1204: IF E#0 THEN BEGIN R_NewKern[Z-W-E-D];IF L THEN BEGIN Mem[A]^.Hh.Rh_R; Mem[R]^.Hh.Rh_B;B_A;D_0; END ELSE BEGIN Mem[B]^.Hh.Rh_R; Mem[R]^.Hh.Rh_A; END;B_Hpack[B,0,1]; END;Mem[B+4]^.Int_S+D; AppendToVlist[B]; IF T#64995 THEN BEGIN Mem[CurList.TailField]^.Hh.Rh_Mem[64995]^.Hh.Rh; CurList.TailField_T; END--:1204--;--1205: IF (A#0)AND (E=0)AND NOT L THEN BEGIN BEGIN Mem[CurList.TailField]^.Hh. Rh_NewPenalty[10000]; CurList.TailField_Mem[CurList.TailField]^.Hh.Rh; END; Mem[A+4]^.Int_S+Z-Mem[A+1]^.Int;AppendToVlist[A]; BEGIN Mem[CurList.TailField]^.Hh.Rh_NewPenalty[Eqtb^[4779].Int]; CurList.TailField_Mem[CurList.TailField]^.Hh.Rh; END; END ELSE BEGIN BEGIN Mem[CurList.TailField]^.Hh.Rh_NewPenalty[Eqtb^ [4779].Int];CurList.TailField_Mem[CurList.TailField]^.Hh.Rh; END; BEGIN Mem[CurList.TailField]^.Hh.Rh_NewParamGlue[G2]; CurList.TailField_Mem[CurList.TailField]^.Hh.Rh; END; END--:1205--; ResumeAfterDisplay--:1199--[]; END; END;--:1194----1200: END.