-- file: TexDvi2Impl.mesa
-- Pascal-to-Mesa translator output, translated at September 27, 1985 10:21:37 am PDT
DIRECTORY
PascalBasic,
TexTypes,
TexSysdep,
TexSysdepInline,
TexInteraction,
TexMemory,
TexSymbols,
TexDvi,
TexOps,
TexBuildPage,
TexExtensions;
TexDvi2Impl: PROGRAM IMPORTS PascalBasic, TexSysdep, TexSysdepInline, TexInteraction, TexMemory, TexSymbols, TexDvi, TexOps, TexBuildPage, TexExtensions EXPORTS TexDvi = PUBLIC
BEGIN OPEN PascalBasic, TexTypes, TexSysdep, TexSysdepInline, TexInteraction, TexMemory, TexSymbols, TexDvi, TexOps, TexBuildPage, TexExtensions;
HlistPressOut: PROCEDURE =
BEGIN BaseLine:Scaled;BaseInMica:Scaled;
LeftEdge:Scaled;SaveH, SaveV:Scaled;ThisBox:Halfword;
GOrder:GlueOrd;GSign:PascalInteger[0..2];P:Halfword;LeaderBox:Halfword;
LeaderWd:Scaled;Lx:Scaled;OuterDoingLeaders:PascalBoolean;Edge:Scaled;
ThisBox←TempPtr;GOrder←Mem[ThisBox+5]↑.Hh.B1;
GSign←Mem[ThisBox+5]↑.Hh.B0;P←Mem[ThisBox+5]↑.Hh.Rh;BaseLine←CurV;
LeftEdge←CurH;
BaseInMica←25400-XOverN[XnOverD[BaseLine,Eqtb↑[4784].Int,18647],
100];WHILE P#0 DO--1380:
DO {IF( INT[P]>=HiMemMin) THEN BEGIN PressSetY[BaseInMica];
F←Mem[P]↑.Hh.B0;IF F#DviF THEN--1381:
BEGIN IF NOT FontUsed↑[F] THEN BEGIN FontPypeCode↑[F]←GetPypeCode[F,
XnOverD[FontSize↑[F],Eqtb↑[4784].Int,18647]];FontUsed↑[F]←TRUE; END;
PressSetFont[FontPypeCode↑[F]];DviF←F; END--:1381--;
PressSetX[2540+XOverN[XnOverD[CurH,Eqtb↑[4784].Int,18647],100]];
DO C←Mem[P]↑.Hh.B1;PressShowChar[C];
CurH←CurH+FontInfo↑[WidthBase↑[F]+FontInfo↑[CharBase↑[F]+C].Qqqq.B0].
Int;P←Mem[P]↑.Hh.Rh; IF(NOT ( INT[P]>=HiMemMin))OR (Mem[P]↑.Hh.B0#DviF) THEN EXIT; ENDLOOP;
END ELSE--1382:--BEGIN {{{SELECT Mem[P]↑.Hh.B0 FROM 0,1 =>--1383:
IF Mem[P+5]↑.Hh.Rh=0 THEN CurH←CurH+Mem[P+1]↑.Int ELSE BEGIN CurV←
BaseLine+Mem[P+4]↑.Int;TempPtr←P;Edge←CurH;
IF Mem[P]↑.Hh.B0=1 THEN VlistPressOut [] ELSE HlistPressOut[];
CurH←Edge+Mem[P+1]↑.Int;CurV←BaseLine; END--:1383--;
2 =>BEGIN RuleHt←Mem[P+3]↑.Int;RuleDp←Mem[P+2]↑.Int;
RuleWd←Mem[P+1]↑.Int; GOTO Label14; END;8 =>--1397:--PressOutWhat[P]--:1397--;
10 =>--1385:--BEGIN G←Mem[P+1]↑.Hh.Lh;RuleWd←Mem[G+1]↑.Int;
IF GSign#0 THEN BEGIN IF GSign=1 THEN BEGIN IF Mem[G]↑.Hh.B0=GOrder
THEN RuleWd←RuleWd+PascalROUND[Mem[ThisBox+6]↑.Gr*PascalFLOAT[Mem[G+2]↑.Int]];
END ELSE BEGIN IF Mem[G]↑.Hh.B1=GOrder THEN RuleWd←RuleWd-PascalROUND[Mem[
ThisBox+6]↑.Gr*PascalFLOAT[Mem[G+3]↑.Int]]; END; END;IF INT[Mem[P]↑.Hh.B1]>=100 THEN--1386:
BEGIN LeaderBox←Mem[P+1]↑.Hh.Rh;
IF Mem[LeaderBox]↑.Hh.B0=2 THEN BEGIN RuleHt←Mem[LeaderBox+3]↑.Int;
RuleDp←Mem[LeaderBox+2]↑.Int; GOTO Label14; END;
LeaderWd←Mem[LeaderBox+1]↑.Int;
IF(LeaderWd>0)AND (RuleWd>0) THEN BEGIN Edge←CurH+RuleWd;Lx←0;--627:
IF Mem[P]↑.Hh.B1=100 THEN BEGIN SaveH←CurH;
CurH←LeftEdge+LeaderWd*( (CurH-LeftEdge)/LeaderWd);
IF CurH<SaveH THEN CurH←CurH+LeaderWd;
END ELSE BEGIN Lq← RuleWd /LeaderWd;Lr← RuleWd MOD LeaderWd;
IF Mem[P]↑.Hh.B1=101 THEN CurH←CurH+( PascalDIVPower2[Lr ,1]) ELSE BEGIN Lx←(2*Lr+Lq
+1)/(2*Lq+2);CurH←CurH+( PascalDIVPower2[(Lr-(Lq-1)*Lx),1]); END; END--:627--;
WHILE CurH+LeaderWd<=Edge DO--1387:
BEGIN CurV←BaseLine+Mem[LeaderBox+4]↑.Int;SaveV←CurV;
SaveH←CurH;TempPtr←LeaderBox;OuterDoingLeaders←DoingLeaders;
DoingLeaders←TRUE;
IF Mem[LeaderBox]↑.Hh.B0=1 THEN VlistPressOut [] ELSE HlistPressOut[];
DoingLeaders←OuterDoingLeaders;CurV←SaveV;
CurH←SaveH+LeaderWd+Lx; END--:1387-- ENDLOOP ;CurH←Edge; GOTO Label15; END; END--:1386
; GOTO Label13; END--:1385--;11,9 =>CurH←CurH+Mem[P+1]↑.Int;6 =>--652:
BEGIN Mem[64988]↑←Mem[P+1]↑;Mem[64988]↑.Hh.Rh←Mem[P]↑.Hh.Rh;P←64988;
GOTO Label21; END--:652--; ENDCASE => NULL; GOTO Label15;EXITS Label14 => NULL};--1384:
IF(RuleHt=-1073741824) THEN RuleHt←Mem[ThisBox+3]↑.Int;
IF(RuleDp=-1073741824) THEN RuleDp←Mem[ThisBox+2]↑.Int;
RuleHt←RuleHt+RuleDp;
IF(RuleHt>0)AND (RuleWd>0) THEN BEGIN PressShowRule[254000+XnOverD[
CurH,Eqtb↑[4784].Int,18647],2540000-XnOverD[BaseLine+RuleDp,Eqtb↑
[4784].Int,18647],XnOverD[RuleWd,Eqtb↑[4784].Int,18647],XnOverD[
RuleHt,Eqtb↑[4784].Int,18647]];CurV←BaseLine; END--:1384--;
EXITS Label13 => NULL};CurH←CurH+RuleWd;EXITS Label15 => NULL};P←Mem[P]↑.Hh.Rh; END--:1382----:1380--; EXIT; EXITS Label21 => NULL} ENDLOOP ENDLOOP ; END;--:1379
--1388:--
VlistPressOut: PROCEDURE =
BEGIN LeftEdge:Scaled;
TopEdge:Scaled;SaveH, SaveV:Scaled;ThisBox:Halfword;GOrder:GlueOrd;
GSign:PascalInteger[0..2];P:Halfword;LeaderBox:Halfword;LeaderHt:Scaled;Lx:Scaled;
OuterDoingLeaders:PascalBoolean;Edge:Scaled; ThisBox←TempPtr;
GOrder←Mem[ThisBox+5]↑.Hh.B1;GSign←Mem[ThisBox+5]↑.Hh.B0;
P←Mem[ThisBox+5]↑.Hh.Rh;LeftEdge←CurH;
CurV←CurV-Mem[ThisBox+3]↑.Int;TopEdge←CurV;WHILE P#0 DO--1389:
BEGIN {IF( INT[P]>=HiMemMin) THEN Confusion[685] ELSE--1390:
BEGIN {{SELECT Mem[P]↑.Hh.B0 FROM 0,1 =>--1391:
IF Mem[P+5]↑.Hh.Rh=0 THEN CurV←CurV+Mem[P+3]↑.Int+Mem[P+2]↑.Int ELSE
BEGIN CurV←CurV+Mem[P+3]↑.Int;SaveV←CurV;
CurH←LeftEdge+Mem[P+4]↑.Int;TempPtr←P;
IF Mem[P]↑.Hh.B0=1 THEN VlistPressOut [] ELSE HlistPressOut[];
CurV←SaveV+Mem[P+2]↑.Int;CurH←LeftEdge; END--:1391--;
2 =>BEGIN RuleHt←Mem[P+3]↑.Int;RuleDp←Mem[P+2]↑.Int;
RuleWd←Mem[P+1]↑.Int; GOTO Label14; END;8 =>--1398:--PressOutWhat[P]--:1398--;
10 =>--1393:--BEGIN G←Mem[P+1]↑.Hh.Lh;RuleHt←Mem[G+1]↑.Int;
IF GSign#0 THEN BEGIN IF GSign=1 THEN BEGIN IF Mem[G]↑.Hh.B0=GOrder
THEN RuleHt←RuleHt+PascalROUND[Mem[ThisBox+6]↑.Gr*PascalFLOAT[Mem[G+2]↑.Int]];
END ELSE BEGIN IF Mem[G]↑.Hh.B1=GOrder THEN RuleHt←RuleHt-PascalROUND[Mem[
ThisBox+6]↑.Gr*PascalFLOAT[Mem[G+3]↑.Int]]; END; END;IF INT[Mem[P]↑.Hh.B1]>=100 THEN--1394:
BEGIN LeaderBox←Mem[P+1]↑.Hh.Rh;
IF Mem[LeaderBox]↑.Hh.B0=2 THEN BEGIN RuleWd←Mem[LeaderBox+1]↑.Int;
RuleDp←0; GOTO Label14; END;
LeaderHt←Mem[LeaderBox+3]↑.Int+Mem[LeaderBox+2]↑.Int;
IF(LeaderHt>0)AND (RuleHt>0) THEN BEGIN Edge←CurV+RuleHt;Lx←0;--636:
IF Mem[P]↑.Hh.B1=100 THEN BEGIN SaveV←CurV;
CurV←TopEdge+LeaderHt*( (CurV-TopEdge)/LeaderHt);
IF CurV<SaveV THEN CurV←CurV+LeaderHt;
END ELSE BEGIN Lq← RuleHt /LeaderHt;Lr← RuleHt MOD LeaderHt;
IF Mem[P]↑.Hh.B1=101 THEN CurV←CurV+( PascalDIVPower2[Lr ,1]) ELSE BEGIN Lx←(2*Lr+Lq
+1)/(2*Lq+2);CurV←CurV+( PascalDIVPower2[(Lr-(Lq-1)*Lx),1]); END; END--:636--;
WHILE CurV+LeaderHt<=Edge DO--1395:
BEGIN CurH←LeftEdge+Mem[LeaderBox+4]↑.Int;SaveH←CurH;
CurV←CurV+Mem[LeaderBox+3]↑.Int;SaveV←CurV;TempPtr←LeaderBox;
OuterDoingLeaders←DoingLeaders;DoingLeaders←TRUE;
IF Mem[LeaderBox]↑.Hh.B0=1 THEN VlistPressOut [] ELSE HlistPressOut[];
DoingLeaders←OuterDoingLeaders;CurH←SaveH;
CurV←SaveV-Mem[LeaderBox+3]↑.Int+LeaderHt+Lx; END--:1395-- ENDLOOP ;CurV←Edge;
GOTO Label15; END; END--:1394--; GOTO Label13; END--:1393--;11 =>CurV←CurV+Mem[P+1]↑.Int;
ENDCASE => NULL; GOTO Label15;EXITS Label14 => NULL};--1392:
IF(RuleWd=-1073741824) THEN RuleWd←Mem[ThisBox+1]↑.Int;
RuleHt←RuleHt+RuleDp;CurV←CurV+RuleHt;
IF(RuleHt>0)AND (RuleWd>0) THEN BEGIN PressShowRule[254000+XnOverD[
CurH,Eqtb↑[4784].Int,18647],2540000-XnOverD[CurV,Eqtb↑[4784].Int,18647
],XnOverD[RuleWd,Eqtb↑[4784].Int,18647],XnOverD[RuleHt,Eqtb↑[4784].
Int,18647]]; END; GOTO Label15--:1392--;EXITS Label13 => NULL};CurV←CurV+RuleHt; END--:1390--;
EXITS Label15 => NULL};P←Mem[P]↑.Hh.Rh; END--:1389-- ENDLOOP ; END;--:1388----:1377
END.