-- file: TexMathImpl.mesa -- Pascal-to-Mesa translator output, translated at September 27, 1985 10:21:38 am PDT DIRECTORY PascalBasic, TexTypes, TexInteraction, TexMemory, TexSymbols, TexScan, TexOps, TexParagraph, TexBuildPage, TexMath, TexSysdepInline; TexMathImpl: PROGRAM IMPORTS PascalBasic, TexInteraction, TexMemory, TexSymbols, TexScan, TexOps, TexParagraph, TexBuildPage, TexMath, TexSysdepInline EXPORTS TexMath = PUBLIC BEGIN OPEN PascalBasic, TexTypes, TexInteraction, TexMemory, TexSymbols, TexScan, TexOps, TexParagraph, TexBuildPage, TexMath, TexSysdepInline; --:718----720:-- MlistToHlist: PROCEDURE = BEGIN Mlist:Halfword;Penalties:PascalBoolean; Style:SmallNumber;SaveStyle:SmallNumber;Q:Halfword;R:Halfword; RType:SmallNumber;T:SmallNumber;P, X, Y, Z:Halfword;Pen:PascalInteger; S:SmallNumber;MaxH, MaxD:Scaled;Delta:Scaled; Mlist_CurMlist; Penalties_MlistPenalties;Style_CurStyle;Q_Mlist;R_0;RType_17; MaxH_0;MaxD_0;--703: BEGIN IF INT[CurStyle]<4 THEN CurSize_0 ELSE CurSize_16*( PascalDIVPower2[(CurStyle-2) ,1]); CurMu_XOverN[FontInfo^[6+ParamBase^[Eqtb^[4081+CurSize].Hh.Rh]].Int, 18]; END--:703--;WHILE Q#0 DO--727:--BEGIN--728:--DO {--Label21:--Delta_0; {{{SELECT Mem[Q]^.Hh.B0 FROM 18 =>SELECT RType FROM 18,17,19,20,22,30 =>BEGIN Mem[Q]^.Hh .B0_16; GOTO Label21; END; ENDCASE => NULL;19,21,22,31 =>BEGIN--729: IF RType=18 THEN Mem[R]^.Hh.B0_16--:729--; IF Mem[Q]^.Hh.B0=31 THEN GOTO Label80; END;--733:--30 => GOTO Label80; 25 =>BEGIN MakeFraction[Q]; GOTO Label82; END;17 =>BEGIN Delta_MakeOp[Q]; IF Mem[Q]^.Hh.B1=1 THEN GOTO Label82; END;16 =>MakeOrd[Q];20,23 => NULL; 24 =>MakeRadical[Q];27 =>MakeOver[Q];26 =>MakeUnder[Q]; 28 =>MakeMathAccent[Q];29 =>MakeVcenter[Q];--:733----730: 14 =>BEGIN CurStyle_Mem[Q]^.Hh.B1;--703: BEGIN IF INT[CurStyle]<4 THEN CurSize_0 ELSE CurSize_16*( PascalDIVPower2[(CurStyle-2) ,1]); CurMu_XOverN[FontInfo^[6+ParamBase^[Eqtb^[4081+CurSize].Hh.Rh]].Int, 18]; END--:703--; GOTO Label81; END;15 =>--731: BEGIN SELECT PascalDIVPower2[CurStyle ,1]FROM 0 =>BEGIN P_Mem[Q+1]^.Hh.Lh; Mem[Q+1]^.Hh.Lh_0; END;1 =>BEGIN P_Mem[Q+1]^.Hh.Rh;Mem[Q+1]^.Hh.Rh_0; END; 2 =>BEGIN P_Mem[Q+2]^.Hh.Lh;Mem[Q+2]^.Hh.Lh_0; END; 3 =>BEGIN P_Mem[Q+2]^.Hh.Rh;Mem[Q+2]^.Hh.Rh_0; END; ENDCASE; FlushNodeList[Mem[Q+1]^.Hh.Lh];FlushNodeList[Mem[Q+1]^.Hh.Rh]; FlushNodeList[Mem[Q+2]^.Hh.Lh];FlushNodeList[Mem[Q+2]^.Hh.Rh]; Mem[Q]^.Hh.B0_14;Mem[Q]^.Hh.B1_CurStyle;Mem[Q+1]^.Int_0; Mem[Q+2]^.Int_0;IF P#0 THEN BEGIN Z_Mem[Q]^.Hh.Rh;Mem[Q]^.Hh.Rh_P; WHILE Mem[P]^.Hh.Rh#0 DO P_Mem[P]^.Hh.Rh ENDLOOP ;Mem[P]^.Hh.Rh_Z; END; GOTO Label81; END--:731--;3,4,5,8,12,7 => GOTO Label81; 2 =>BEGIN IF Mem[Q+3]^.Int>MaxH THEN MaxH_Mem[Q+3]^.Int; IF Mem[Q+2]^.Int>MaxD THEN MaxD_Mem[Q+2]^.Int; GOTO Label81; END; 10 =>BEGIN--732:--IF Mem[Q]^.Hh.B1=99 THEN BEGIN X_Mem[Q+1]^.Hh.Lh; Y_MathGlue[X,CurMu];DeleteGlueRef[X];Mem[Q+1]^.Hh.Lh_Y; Mem[Q]^.Hh.B1_0; END ELSE IF(CurSize#0)AND (Mem[Q]^.Hh.B1=98) THEN BEGIN P_Mem[Q]^.Hh.Rh; IF P#0 THEN IF(Mem[P]^.Hh.B0=10)OR (Mem[P]^.Hh.B0=11) THEN BEGIN Mem[Q]^.Hh. Rh_Mem[P]^.Hh.Rh;Mem[P]^.Hh.Rh_0;FlushNodeList[P]; END; END--:732--; GOTO Label81; END;11 =>BEGIN MathKern[Q,CurMu]; GOTO Label81; END;--:730 ENDCASE =>Confusion[747];--754:--SELECT Mem[Q+1]^.Hh.Rh FROM 1,4 =>--755: BEGIN Fetch[Q+1]; IF( INT[CurI.B0]>0) THEN BEGIN Delta_FontInfo^[ ItalicBase^[CurF]+PascalDIVPower2[(CurI.B2) ,2]].Int;P_NewCharacter[CurF,CurC]; IF(Mem[Q+1]^.Hh.Rh=4)AND (FontInfo^[2+ParamBase^[CurF]].Int#0) THEN Delta _0; IF(Mem[Q+3]^.Hh.Rh=0)AND (Delta#0) THEN BEGIN Mem[P]^.Hh.Rh_NewKern[Delta ];Delta_0; END; END ELSE P_0; END--:755--;0 =>P_0;2 =>P_Mem[Q+1]^.Hh.Lh; 3 =>BEGIN CurMlist_Mem[Q+1]^.Hh.Lh;SaveStyle_CurStyle; MlistPenalties_FALSE;MlistToHlist[];CurStyle_SaveStyle;--703: BEGIN IF INT[CurStyle]<4 THEN CurSize_0 ELSE CurSize_16*( PascalDIVPower2[(CurStyle-2) ,1]); CurMu_XOverN[FontInfo^[6+ParamBase^[Eqtb^[4081+CurSize].Hh.Rh]].Int, 18]; END--:703--;P_Hpack[Mem[64997]^.Hh.Rh,0,1]; END; ENDCASE =>Confusion[748];Mem[Q+1]^.Int_P; IF(Mem[Q+3]^.Hh.Rh=0)AND (Mem[Q+2]^.Hh.Rh=0) THEN GOTO Label82; MakeScripts[Q,Delta]--:754----:728--;EXITS Label82 => NULL};Z_Hpack[Mem[Q+1]^.Int,0,1]; IF Mem[Z+3]^.Int>MaxH THEN MaxH_Mem[Z+3]^.Int; IF Mem[Z+2]^.Int>MaxD THEN MaxD_Mem[Z+2]^.Int;FreeNode[Z,7];EXITS Label80 => NULL};R_Q; RType_Mem[R]^.Hh.B0;EXITS Label81 => NULL};Q_Mem[Q]^.Hh.Rh;EXIT; EXITS Label21 => NULL} ENDLOOP; END--:727-- ENDLOOP ;--729: IF RType=18 THEN Mem[R]^.Hh.B0_16--:729--;--760:--P_64997;Mem[P]^.Hh.Rh_0; Q_Mlist;RType_0;CurStyle_Style;--703: BEGIN IF INT[CurStyle]<4 THEN CurSize_0 ELSE CurSize_16*( PascalDIVPower2[(CurStyle-2) ,1]); CurMu_XOverN[FontInfo^[6+ParamBase^[Eqtb^[4081+CurSize].Hh.Rh]].Int, 18]; END--:703--;WHILE Q#0 DO BEGIN--761:--T_16;S_4;Pen_10000; {{SELECT Mem[Q]^.Hh.B0 FROM 17,20,21,22,23 =>T_Mem[Q]^.Hh.B0;18 =>BEGIN T_18; Pen_Eqtb^[4776].Int; END;19 =>BEGIN T_19;Pen_Eqtb^[4777].Int; END; 16,29,27,26 => NULL;24 =>S_5;28 =>S_5;25 =>BEGIN T_23;S_6; END; 30,31 =>T_MakeLeftRight[Q,Style,MaxD,MaxH];14 =>--763: BEGIN CurStyle_Mem[Q]^.Hh.B1;S_3;--703: BEGIN IF INT[CurStyle]<4 THEN CurSize_0 ELSE CurSize_16*( PascalDIVPower2[(CurStyle-2) ,1]); CurMu_XOverN[FontInfo^[6+ParamBase^[Eqtb^[4081+CurSize].Hh.Rh]].Int, 18]; END--:703--; GOTO Label83; END--:763--; 8,12,2,7,5,3,4,10,11 =>BEGIN Mem[P]^.Hh.Rh_Q;P_Q;Q_Mem[Q]^.Hh.Rh; Mem[P]^.Hh.Rh_0; GOTO Label30; END; ENDCASE =>Confusion[749]--:761--;--766: IF INT[RType]>0 THEN BEGIN SELECT StrPool^[RType*8+T+MagicOffset]FROM 48 =>X_0; 49 =>IF INT[CurStyle]<4 THEN X_15 ELSE X_0;50 =>X_15; 51 =>IF INT[CurStyle]<4 THEN X_16 ELSE X_0; 52 =>IF INT[CurStyle]<4 THEN X_17 ELSE X_0; ENDCASE =>Confusion[751]; IF X#0 THEN BEGIN Y_MathGlue[Eqtb^[ INT[3026]+X].Hh.Rh,CurMu]; Z_NewGlue[Y];Mem[Y]^.Hh.Rh_0;Mem[P]^.Hh.Rh_Z;P_Z;Mem[Z]^.Hh.B1_X+1; END; END--:766--;--767: IF Mem[Q+1]^.Int#0 THEN BEGIN Mem[P]^.Hh.Rh_Mem[Q+1]^.Int; DO P_Mem[P]^.Hh.Rh; IF Mem[P]^.Hh.Rh=0 THEN EXIT; ENDLOOP; END; IF Penalties THEN IF Mem[Q]^.Hh.Rh#0 THEN IF Pen<10000 THEN BEGIN RType _Mem[Mem[Q]^.Hh.Rh]^.Hh.B0; IF RType#12 THEN IF RType#19 THEN BEGIN Z_NewPenalty[Pen]; Mem[P]^.Hh.Rh_Z;P_Z; END; END--:767--;RType_T;EXITS Label83 => NULL};R_Q;Q_Mem[Q]^.Hh.Rh; FreeNode[R,S];EXITS Label30 => NULL}; END--:760-- ENDLOOP ; END;--:726----772:-- PushMath: PROCEDURE[C: GroupCode] = BEGIN PushNest[];CurList.ModeField_-201;CurList.AuxField_0; NewSaveLevel[C]; END;--:1136----1138:-- InitMath: PROCEDURE = BEGIN W:Scaled;L:Scaled;S:Scaled;P:Halfword;Q:Halfword; F:InternalFontNumber;N:PascalInteger;V:Scaled;D:Scaled; GetToken[]; IF(CurCmd=3)AND ( INT[CurList.ModeField]>0) THEN--1145: BEGIN IF CurList.HeadField=CurList.TailField THEN BEGIN PopNest[]; W_-1073741823; END ELSE BEGIN LineBreak[Eqtb^[4774].Int];--1146: V_Mem[JustBox+4]^.Int+2*FontInfo^[6+ParamBase^[Eqtb^[4078].Hh.Rh]].Int; W_-1073741823;P_Mem[JustBox+5]^.Hh.Rh;{WHILE P#0 DO BEGIN--1147: DO {--Label21:--{{IF( INT[P]>=HiMemMin) THEN BEGIN F_Mem[P]^.Hh.B0; D_FontInfo^[WidthBase^[F]+FontInfo^[CharBase^[F]+Mem[P]^.Hh.B1].Qqqq.B0] .Int; GOTO Label40; END;SELECT Mem[P]^.Hh.B0 FROM 0,1,2 =>BEGIN D_Mem[P+1]^.Int; GOTO Label40; END;6 =>--652:--BEGIN Mem[64988]^_Mem[P+1]^; Mem[64988]^.Hh.Rh_Mem[P]^.Hh.Rh;P_64988; GOTO Label21; END--:652--; 11,9 =>D_Mem[P+1]^.Int;10 =>--1148:--BEGIN Q_Mem[P+1]^.Hh.Lh;D_Mem[Q+1]^.Int; IF Mem[JustBox+5]^.Hh.B0=1 THEN BEGIN IF(Mem[JustBox+5]^.Hh.B1=Mem[Q]^.Hh .B0)AND (Mem[Q+2]^.Int#0) THEN V_1073741823; END ELSE IF Mem[JustBox+5]^.Hh.B0=2 THEN BEGIN IF( Mem[JustBox+5]^.Hh.B1=Mem[Q]^.Hh.B1)AND (Mem[Q+3]^.Int#0) THEN V_1073741823; END; IF INT[Mem[P]^.Hh.B1]>=100 THEN GOTO Label40; END--:1148--;8 =>--1361:--D_0--:1361--; ENDCASE =>D_0 --:1147--;IF V<1073741823 THEN V_V+D; GOTO Label45; EXITS Label40 => NULL};IF V<1073741823 THEN BEGIN V_V+D;W_V; END ELSE BEGIN W_1073741823; GOTO Label30; END;EXITS Label45 => NULL};P_Mem[P]^.Hh.Rh;EXIT; EXITS Label21 => NULL} ENDLOOP; END ENDLOOP ;EXITS Label30 => NULL};--:1146-- END;--1149: IF Eqtb^[3556].Hh.Rh=0 THEN IF(Eqtb^[5218].Int#0)AND (((Eqtb^[4808].Int>=0) AND (CurList.PgField+2>Eqtb^[4808].Int))OR (CurList.PgField+1<-Eqtb^ [4808].Int)) THEN BEGIN L_Eqtb^[5204].Int-ABS[Eqtb^[5218].Int]; IF Eqtb^[5218].Int>0 THEN S_Eqtb^[5218].Int ELSE S_0; END ELSE BEGIN L_Eqtb^[5204].Int;S_0; END ELSE BEGIN N_Mem[Eqtb^[3556].Hh.Rh]^.Hh.Lh; IF CurList.PgField+2>=N THEN P_Eqtb^[3556].Hh.Rh+2*N ELSE P_Eqtb^[3556 ].Hh.Rh+2*(CurList.PgField+2);S_Mem[ INT[P]-1]^.Int;L_Mem[P]^.Int; END--:1149 ;PushMath[15];CurList.ModeField_201;EqWordDefine[4811,-1]; EqWordDefine[5214,W];EqWordDefine[5215,L];EqWordDefine[5216,S]; IF Eqtb^[3560].Hh.Rh#0 THEN BeginTokenList[Eqtb^[3560].Hh.Rh,9]; IF NestPtr=1 THEN BuildPage[]; END--:1145-- ELSE BEGIN BackInput[];--1139: BEGIN PushMath[15];EqWordDefine[4811,-1]; IF Eqtb^[3559].Hh.Rh#0 THEN BeginTokenList[Eqtb^[3559].Hh.Rh,8]; END--:1139--; END; END;--:1138----1142:-- END.