-- file: TexScan4Impl.mesa -- Pascal-to-Mesa translator output, translated at September 27, 1985 10:21:37 am PDT DIRECTORY PascalBasic, PascalWizardFiles, TexSysdep, TexTypes, TexInteraction, TexMemory, TexSymbols, TexScan, TexOps, TexRest; TexScan4Impl: PROGRAM IMPORTS PascalBasic, PascalWizardFiles, TexSysdep, TexTypes, TexInteraction, TexSymbols, TexScan, TexOps EXPORTS TexScan = PUBLIC BEGIN OPEN PascalBasic, PascalWizardFiles, TexSysdep, TexTypes, TexInteraction, TexMemory, TexSymbols, TexScan, TexOps, TexRest; --560:-- ReadFontInfo: PROCEDURE[U: Halfword,Nom,Aire: StrNumber, S: Scaled] RETURNS[ReadFontInfoResult: InternalFontNumber] = BEGIN K:PascalInteger[0..FontMemSize]; FileOpened:PascalBoolean;Lf, Lh, Bc, Ec, Nw, Nh, Nd, Ni, Nl, Nk, Ne, Np:Halfword; I, FamLen:Halfword;F:InternalFontNumber;G:InternalFontNumber; A, B, C, D:EightBits;Qw:FourQuarters;Sw:Scaled;Z:Scaled;Alpha:PascalInteger; Beta:PascalInteger[1..16]; ReadTheTfmHeader: PROCEDURE--568: = BEGIN IF INT[Lh]<18 THEN ERROR Error11;BEGIN PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];A_TfmFile.element;Qw.B0_A; PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];B_TfmFile.element;Qw.B1_B;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];C_TfmFile.element;Qw.B2_C; PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];D_TfmFile.element;Qw.B3_D;FontCheck^[F]_Qw; END;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element]; BEGIN Z_TfmFile.element;IF Z>127 THEN ERROR Error11;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element]; Z_Z*256+TfmFile.element; END;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];Z_Z*256+TfmFile.element;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element]; Z_(Z*16)+( PascalDIVPower2[TfmFile.element,4]);IF Z<65536 THEN ERROR Error11; FOR i:INT IN [ INT[1 ].. INT[10 ]] DO I _ i; PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element]; PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element]; ENDLOOP;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];FamLen_TfmFile.element; BEGIN IF INT[PoolPtr]+FamLen>PoolSize THEN Overflow[129, PoolSize-InitPoolPtr]; END;FOR i:INT IN [ INT[1 ].. INT[FamLen ]] DO I _ i; PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element]; BEGIN StrPool^[PoolPtr]_TfmFile.element;PoolPtr_PoolPtr+1; END ; ENDLOOP; FOR i:INT IN [ INT[FamLen+1 ].. INT[19 ]] DO I _ i; PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element] ENDLOOP;FontFamily^[F]_MakeString[]; PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element]; FontFace^[F]_TfmFile.element;WHILE INT[Lh]>18 DO BEGIN PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element]; PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];Lh_ INT[Lh]-1; END ENDLOOP ;FontDsize^[F]_Z; IF S#-1000 THEN IF S>=0 THEN Z_S ELSE Z_XnOverD[Z,-S,1000]; FontSize^[F]_Z;--:568-- END;Error11: ERROR = CODE; {{ENABLE Error11 => GOTO Label11;G_0;--562:----563:--FileOpened_FALSE; IF Aire=210 THEN PackFileName[Nom,TexFontArea,668] ELSE PackFileName[Nom,Aire,668];IF NOT BOpenIn[@TfmFile] THEN GOTO Label11; FileOpened_TRUE--:563--;--565:--BEGIN BEGIN Lf_TfmFile.element; IF INT[Lf]>127 THEN GOTO Label11;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];Lf_ INT[Lf]*256+TfmFile.element; END; PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];BEGIN Lh_TfmFile.element;IF INT[Lh]>127 THEN GOTO Label11;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element]; Lh_ INT[Lh]*256+TfmFile.element; END;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];BEGIN Bc_TfmFile.element; IF INT[Bc]>127 THEN GOTO Label11;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];Bc_ INT[Bc]*256+TfmFile.element; END; PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];BEGIN Ec_TfmFile.element;IF INT[Ec]>127 THEN GOTO Label11;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element]; Ec_ INT[Ec]*256+TfmFile.element; END;IF( INT[Bc]>Ec+1)OR ( INT[Ec]>255) THEN GOTO Label11; PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];BEGIN Nw_TfmFile.element;IF INT[Nw]>127 THEN GOTO Label11;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element]; Nw_ INT[Nw]*256+TfmFile.element; END;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];BEGIN Nh_TfmFile.element; IF INT[Nh]>127 THEN GOTO Label11;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];Nh_ INT[Nh]*256+TfmFile.element; END; PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];BEGIN Nd_TfmFile.element;IF INT[Nd]>127 THEN GOTO Label11;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element]; Nd_ INT[Nd]*256+TfmFile.element; END;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];BEGIN Ni_TfmFile.element; IF INT[Ni]>127 THEN GOTO Label11;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];Ni_ INT[Ni]*256+TfmFile.element; END; PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];BEGIN Nl_TfmFile.element;IF INT[Nl]>127 THEN GOTO Label11;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element]; Nl_ INT[Nl]*256+TfmFile.element; END;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];BEGIN Nk_TfmFile.element; IF INT[Nk]>127 THEN GOTO Label11;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];Nk_ INT[Nk]*256+TfmFile.element; END; PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];BEGIN Ne_TfmFile.element;IF INT[Ne]>127 THEN GOTO Label11;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element]; Ne_ INT[Ne]*256+TfmFile.element; END;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];BEGIN Np_TfmFile.element; IF INT[Np]>127 THEN GOTO Label11;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];Np_ INT[Np]*256+TfmFile.element; END; IF Lf#6+Lh+( INT[Ec]-Bc+1)+Nw+Nh+Nd+Ni+Nl+Nk+Ne+Np THEN GOTO Label11; END--:565--; --566:--Lf_ INT[Lf]-6-Lh;IF INT[Np]<7 THEN Lf_ INT[Lf+7]-Np; IF(FontPtr=FontMax)OR ( INT[FmemPtr]+Lf>FontMemSize) THEN--567: BEGIN BEGIN IF Interaction=3 THEN NULL;PrintNl[134];Print[659]; END; SprintCs[U];PrintChar[61];PrintFileName[Nom,Aire,210]; IF S>=0 THEN BEGIN Print[601];PrintScaled[S];Print[265]; END ELSE IF S#-1000 THEN BEGIN Print[660];PrintInt[-S]; END;Print[669]; BEGIN HelpPtr_4;HelpLine^[3]_670;HelpLine^[2]_671;HelpLine^[1]_672; HelpLine^[0]_673; END;Error[]; GOTO Label30; END--:567--;F_FontPtr+1; CharBase^[F]_ INT[FmemPtr]-Bc;WidthBase^[F]_CharBase^[F]+Ec+1; HeightBase^[F]_WidthBase^[F]+Nw;DepthBase^[F]_HeightBase^[F]+Nh; ItalicBase^[F]_DepthBase^[F]+Nd;LigKernBase^[F]_ItalicBase^[F]+Ni; KernBase^[F]_LigKernBase^[F]+Nl;ExtenBase^[F]_KernBase^[F]+Nk; ParamBase^[F]_ExtenBase^[F]+Ne--:566--;ReadTheTfmHeader[];--569: FOR i:INT IN [ INT[FmemPtr ].. INT[WidthBase^[F]-1 ]] DO K _ i; BEGIN PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element]; A_TfmFile.element;Qw.B0_A;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];B_TfmFile.element;Qw.B1_B;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element]; C_TfmFile.element;Qw.B2_C;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];D_TfmFile.element;Qw.B3_D; FontInfo^[K].Qqqq_Qw; END; IF( INT[A]>=Nw)OR ( PascalDIVPower2[B ,4]>=Nh)OR ( PascalMODPower2Mask[B ,15]>=Nd)OR ( PascalDIVPower2[C ,2]>=Ni) THEN GOTO Label11; SELECT PascalMODPower2Mask[C ,3]FROM 1 =>IF INT[D]>=Nl THEN GOTO Label11;3 =>IF INT[D]>=Ne THEN GOTO Label11;2 =>--570: BEGIN BEGIN IF( INT[D]Ec) THEN GOTO Label11 ; END; {WHILE D< INT[K]+Bc-FmemPtr DO BEGIN Qw_FontInfo^[CharBase^[F]+D].Qqqq; IF( PascalMODPower2Mask[(Qw.B2),3])#2 THEN GOTO Label45;D_Qw.B3; END ENDLOOP ; IF D= INT[K]+Bc-FmemPtr THEN GOTO Label11;EXITS Label45 => NULL}; END--:570--; ENDCASE => NULL;--:569-- ENDLOOP;--571: BEGIN--572:--BEGIN Alpha_16*Z;Beta_16; WHILE Z>=8388608 DO BEGIN Z_ PascalDIVPower2[Z ,1];Beta_ PascalDIVPower2[Beta ,1]; END ENDLOOP ; END--:572--; FOR i:INT IN [ INT[WidthBase^[F]].. INT[LigKernBase^[F]-1 ]] DO K _ i; PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element]; A_TfmFile.element;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];B_TfmFile.element;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];C_TfmFile.element; PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];D_TfmFile.element; Sw_ (( PascalDIVPower2[(( PascalDIVPower2[(D*Z),8])+(C*Z)),8])+(B*Z))/Beta; IF A=0 THEN FontInfo^[K].Int_Sw ELSE IF A=255 THEN FontInfo^[K].Int_Sw -Alpha ELSE GOTO Label11; ENDLOOP;IF FontInfo^[WidthBase^[F]].Int#0 THEN GOTO Label11; IF FontInfo^[HeightBase^[F]].Int#0 THEN GOTO Label11; IF FontInfo^[DepthBase^[F]].Int#0 THEN GOTO Label11; IF FontInfo^[ItalicBase^[F]].Int#0 THEN GOTO Label11; END--:571--;--573: BEGIN FOR i:INT IN [ INT[LigKernBase^[F]].. INT[KernBase^[F]-1 ]] DO K _ i; BEGIN PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];A_TfmFile.element;Qw.B0_A;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];B_TfmFile.element;Qw.B1_B; PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];C_TfmFile.element;Qw.B2_C;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];D_TfmFile.element;Qw.B3_D; FontInfo^[K].Qqqq_Qw; END;BEGIN IF( INT[B]Ec) THEN GOTO Label11 ; END; IF INT[C]<128 THEN BEGIN IF( INT[D]Ec) THEN GOTO Label11 ; END ELSE IF INT[D]>=Nk THEN GOTO Label11; ENDLOOP;IF( INT[Nl]>0)AND ( INT[A]<128) THEN GOTO Label11; FOR i:INT IN [ INT[KernBase^[F]].. INT[ExtenBase^[F]-1 ]] DO K _ i; PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element]; A_TfmFile.element;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];B_TfmFile.element;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];C_TfmFile.element; PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];D_TfmFile.element; Sw_ (( PascalDIVPower2[(( PascalDIVPower2[(D*Z),8])+(C*Z)),8])+(B*Z))/Beta; IF A=0 THEN FontInfo^[K].Int_Sw ELSE IF A=255 THEN FontInfo^[K].Int_Sw -Alpha ELSE GOTO Label11; ENDLOOP; END--:573--;--574: FOR i:INT IN [ INT[ExtenBase^[F]].. INT[ParamBase^[F]-1 ]] DO K _ i; BEGIN PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element]; A_TfmFile.element;Qw.B0_A;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];B_TfmFile.element;Qw.B1_B;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element]; C_TfmFile.element;Qw.B2_C;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];D_TfmFile.element;Qw.B3_D; FontInfo^[K].Qqqq_Qw; END; IF A#0 THEN BEGIN IF( INT[A]Ec) THEN GOTO Label11 ; END; IF B#0 THEN BEGIN IF( INT[B]Ec) THEN GOTO Label11 ; END; IF C#0 THEN BEGIN IF( INT[C]Ec) THEN GOTO Label11 ; END; BEGIN IF( INT[D]Ec) THEN GOTO Label11 ; END;--:574-- ENDLOOP;--575: BEGIN FOR i:INT IN [ INT[1 ].. INT[Np ]] DO K _ i; IF K=1 THEN BEGIN PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];Sw_TfmFile.element; IF Sw>127 THEN Sw_Sw-256;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];Sw_Sw*256+TfmFile.element; PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];Sw_Sw*256+TfmFile.element;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element]; FontInfo^[ParamBase^[F]].Int_(Sw*16)+( PascalDIVPower2[TfmFile.element,4]); END ELSE BEGIN PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];A_TfmFile.element;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];B_TfmFile.element; PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];C_TfmFile.element;PascalGET[file: @TfmFile.baseFile, length: SIZE[EightBits, 2], element: @TfmFile.element];D_TfmFile.element; Sw_ (( PascalDIVPower2[(( PascalDIVPower2[(D*Z),8])+(C*Z)),8])+(B*Z))/Beta; IF A=0 THEN FontInfo^[ParamBase^[F]+K-1].Int_Sw ELSE IF A=255 THEN FontInfo^[ParamBase^[F]+K-1].Int_Sw-Alpha ELSE GOTO Label11; END ENDLOOP; IF PascalEOF[file: @TfmFile.baseFile] THEN GOTO Label11; FOR i:INT IN [ INT[Np+1 ].. INT[7 ]] DO K _ i; FontInfo^[ParamBase^[F]+K-1].Int_0 ENDLOOP; END--:575--;--576: IF INT[Np]>=7 THEN FontParams^[F]_Np ELSE FontParams^[F]_7; HyphenChar^[F]_Eqtb^[4813].Int;SkewChar^[F]_Eqtb^[4814].Int; FontName^[F]_Nom;FontArea^[F]_Aire;FontBc^[F]_Bc;FontEc^[F]_Ec; FontGlue^[F]_0;CharBase^[F]_CharBase^[F];WidthBase^[F]_WidthBase^[F]; LigKernBase^[F]_LigKernBase^[F];KernBase^[F]_KernBase^[F]; ExtenBase^[F]_ExtenBase^[F];ParamBase^[F]_ParamBase^[F]-1; FmemPtr_ INT[FmemPtr]+Lf;FontPtr_F;G_F; GOTO Label30--:576----:562--;EXITS Label11 => NULL};--561: BEGIN IF Interaction=3 THEN NULL;PrintNl[134];Print[659]; END;SprintCs[U]; PrintChar[61];PrintFileName[Nom,Aire,210]; IF S>=0 THEN BEGIN Print[601];PrintScaled[S];Print[265]; END ELSE IF S#-1000 THEN BEGIN Print[660];PrintInt[-S]; END; IF FileOpened THEN Print[661] ELSE Print[662];BEGIN HelpPtr_5; HelpLine^[4]_663;HelpLine^[3]_664;HelpLine^[2]_665;HelpLine^[1]_666; HelpLine^[0]_667; END;Error--:561--[];EXITS Label30 => NULL};BClose[@TfmFile]; ReadFontInfoResult_G; END;--:560----581: END.