#define VPTOVF #include "cpascal.h" #define bufsize ( 3000 ) #define maxheaderbytes ( 100 ) #define vfsize ( 50000L ) #define maxstack ( 100 ) #define maxparamwords ( 30 ) #define maxligsteps ( 32000 ) #define maxkerns ( 15000 ) #define hashsize ( 15077 ) typedef unsigned char byte ; typedef char ASCIIcode ; typedef struct { byte b0 ; byte b1 ; byte b2 ; byte b3 ; } fourbytes ; typedef integer fixword ; typedef integer headerindex ; typedef short indx ; typedef short pointer ; text vplfile ; text /* of unsigned char */ vffile ; text /* of unsigned char */ tfmfile ; ASCIIcode xord[256] ; integer line ; integer goodindent ; integer indent ; integer level ; boolean leftln, rightln ; integer limit ; integer loc ; char buffer[bufsize + 1] ; boolean inputhasended ; char charsonline ; ASCIIcode curchar ; short start[101] ; ASCIIcode dictionary[667] ; char startptr ; short dictptr ; ASCIIcode curname[21] ; char namelength ; char nameptr ; char nhash[141] ; unsigned char curhash ; byte equiv[101] ; byte curcode ; fourbytes curbytes ; fourbytes zerobytes ; integer fractiondigits[8] ; byte headerbytes[maxheaderbytes + 1] ; headerindex headerptr ; fixword designsize ; fixword designunits ; boolean frozendu ; boolean sevenbitsafeflag ; fourbytes ligkern[maxligsteps + 1] ; short nl ; short minnl ; fixword kern[maxkerns + 1] ; integer nk ; fourbytes exten[256] ; short ne ; fixword param[maxparamwords + 1] ; integer np ; boolean checksumspecified ; short bchar ; byte vf[vfsize + 1] ; integer vfptr ; integer vtitlestart ; byte vtitlelength ; integer packetstart[256] ; integer packetlength[256] ; short fontptr ; short curfont ; integer fnamestart[256] ; byte fnamelength[256] ; integer fareastart[256] ; byte farealength[256] ; fourbytes fontchecksum[256] ; fourbytes fontnumber[257] ; fixword fontat[256] ; fixword fontdsize[256] ; fixword memory[1033] ; pointer memptr ; pointer link[1033] ; pointer charwd[256] ; pointer charht[256] ; pointer chardp[256] ; pointer charic[256] ; char chartag[256] ; unsigned short charremainder[257] ; fixword nextd ; byte indexvar[1033] ; byte excess ; byte c ; fixword x ; integer k ; boolean lkstepended ; integer krnptr ; char hstack[maxstack + 1] ; char vstack[maxstack + 1] ; fixword wstack[maxstack + 1], xstack[maxstack + 1], ystack[maxstack + 1], zstack[maxstack + 1] ; integer stackptr ; boolean sevenunsafe ; fixword delta ; integer ligptr ; integer hash[hashsize + 1] ; char classvar[hashsize + 1] ; short ligz[hashsize + 1] ; integer hashptr ; integer hashlist[hashsize + 1] ; integer h, hh ; indx tt ; short xligcycle, yligcycle ; byte bc ; byte ec ; byte lh ; short lf ; boolean notfound ; fixword tempwidth ; integer j ; pointer p ; char q ; integer parptr ; struct { short rr ; byte cc ; } labeltable[257] ; short labelptr ; short sortptr ; short lkoffset ; short t ; boolean extralocneeded ; integer vcount ; cinttype verbose ; cstring vplname, tfmname, vfname ; #include "vptovf.h" void #ifdef HAVE_PROTOTYPES parsearguments ( void ) #else parsearguments ( ) #endif { #define noptions ( 3 ) getoptstruct longoptions[noptions + 1] ; integer getoptreturnval ; cinttype optionindex ; integer currentoption ; verbose = false ; currentoption = 0 ; longoptions [currentoption ].name = "help" ; longoptions [currentoption ].hasarg = 0 ; longoptions [currentoption ].flag = 0 ; longoptions [currentoption ].val = 0 ; currentoption = currentoption + 1 ; longoptions [currentoption ].name = "version" ; longoptions [currentoption ].hasarg = 0 ; longoptions [currentoption ].flag = 0 ; longoptions [currentoption ].val = 0 ; currentoption = currentoption + 1 ; longoptions [currentoption ].name = "verbose" ; longoptions [currentoption ].hasarg = 0 ; longoptions [currentoption ].flag = addressof ( verbose ) ; longoptions [currentoption ].val = 1 ; currentoption = currentoption + 1 ; longoptions [currentoption ].name = 0 ; longoptions [currentoption ].hasarg = 0 ; longoptions [currentoption ].flag = 0 ; longoptions [currentoption ].val = 0 ; do { getoptreturnval = getoptlongonly ( argc , argv , "" , longoptions , addressof ( optionindex ) ) ; if ( getoptreturnval == -1 ) { ; } else if ( getoptreturnval == 63 ) { usage ( 1 , "vptovf" ) ; } else if ( ( strcmp ( longoptions [optionindex ].name , "help" ) == 0 ) ) { usage ( 0 , VPTOVFHELP ) ; } else if ( ( strcmp ( longoptions [optionindex ].name , "version" ) == 0 ) ) { printversionandexit ( "This is VPtoVF, Version 1.4" , nil , "D.E. Knuth" ) ; } } while ( ! ( getoptreturnval == -1 ) ) ; if ( ( optind + 1 != argc ) && ( optind + 2 != argc ) && ( optind + 3 != argc ) ) { fprintf( stderr , "%s\n", "vptovf: Need one to three file arguments." ) ; usage ( 1 , "vptovf" ) ; } vplname = extendfilename ( cmdline ( optind ) , "vpl" ) ; if ( optind + 2 <= argc ) { vfname = extendfilename ( cmdline ( optind + 1 ) , "vf" ) ; if ( optind + 3 <= argc ) { tfmname = extendfilename ( cmdline ( optind + 2 ) , "tfm" ) ; } else { tfmname = extendfilename ( cmdline ( optind + 1 ) , "tfm" ) ; } } else { vfname = basenamechangesuffix ( vplname , ".vpl" , ".vf" ) ; tfmname = basenamechangesuffix ( vplname , ".vpl" , ".tfm" ) ; } } void #ifdef HAVE_PROTOTYPES initialize ( void ) #else initialize ( ) #endif { integer k ; unsigned char h ; headerindex d ; byte c ; kpsesetprogname ( argv [0 ]) ; parsearguments () ; reset ( vplfile , vplname ) ; if ( verbose ) { Fputs(stdout, "This is VPtoVF, Version 1.4" ) ; fprintf(stdout, "%s\n", versionstring ) ; } rewritebin ( vffile , vfname ) ; rewritebin ( tfmfile , tfmname ) ; {register integer for_end; k = 0 ;for_end = 127 ; if ( k <= for_end) do xord [chr ( k ) ]= 127 ; while ( k++ < for_end ) ;} xord [' ' ]= 32 ; xord ['!' ]= 33 ; xord ['"' ]= 34 ; xord ['#' ]= 35 ; xord ['$' ]= 36 ; xord ['%' ]= 37 ; xord ['&' ]= 38 ; xord ['\'' ]= 39 ; xord ['(' ]= 40 ; xord [')' ]= 41 ; xord ['*' ]= 42 ; xord ['+' ]= 43 ; xord [',' ]= 44 ; xord ['-' ]= 45 ; xord ['.' ]= 46 ; xord ['/' ]= 47 ; xord ['0' ]= 48 ; xord ['1' ]= 49 ; xord ['2' ]= 50 ; xord ['3' ]= 51 ; xord ['4' ]= 52 ; xord ['5' ]= 53 ; xord ['6' ]= 54 ; xord ['7' ]= 55 ; xord ['8' ]= 56 ; xord ['9' ]= 57 ; xord [':' ]= 58 ; xord [';' ]= 59 ; xord ['<' ]= 60 ; xord ['=' ]= 61 ; xord ['>' ]= 62 ; xord ['?' ]= 63 ; xord ['@' ]= 64 ; xord ['A' ]= 65 ; xord ['B' ]= 66 ; xord ['C' ]= 67 ; xord ['D' ]= 68 ; xord ['E' ]= 69 ; xord ['F' ]= 70 ; xord ['G' ]= 71 ; xord ['H' ]= 72 ; xord ['I' ]= 73 ; xord ['J' ]= 74 ; xord ['K' ]= 75 ; xord ['L' ]= 76 ; xord ['M' ]= 77 ; xord ['N' ]= 78 ; xord ['O' ]= 79 ; xord ['P' ]= 80 ; xord ['Q' ]= 81 ; xord ['R' ]= 82 ; xord ['S' ]= 83 ; xord ['T' ]= 84 ; xord ['U' ]= 85 ; xord ['V' ]= 86 ; xord ['W' ]= 87 ; xord ['X' ]= 88 ; xord ['Y' ]= 89 ; xord ['Z' ]= 90 ; xord ['[' ]= 91 ; xord ['\\' ]= 92 ; xord [']' ]= 93 ; xord ['^' ]= 94 ; xord ['_' ]= 95 ; xord ['`' ]= 96 ; xord ['a' ]= 97 ; xord ['b' ]= 98 ; xord ['c' ]= 99 ; xord ['d' ]= 100 ; xord ['e' ]= 101 ; xord ['f' ]= 102 ; xord ['g' ]= 103 ; xord ['h' ]= 104 ; xord ['i' ]= 105 ; xord ['j' ]= 106 ; xord ['k' ]= 107 ; xord ['l' ]= 108 ; xord ['m' ]= 109 ; xord ['n' ]= 110 ; xord ['o' ]= 111 ; xord ['p' ]= 112 ; xord ['q' ]= 113 ; xord ['r' ]= 114 ; xord ['s' ]= 115 ; xord ['t' ]= 116 ; xord ['u' ]= 117 ; xord ['v' ]= 118 ; xord ['w' ]= 119 ; xord ['x' ]= 120 ; xord ['y' ]= 121 ; xord ['z' ]= 122 ; xord ['{' ]= 123 ; xord ['|' ]= 124 ; xord ['}' ]= 125 ; xord ['~' ]= 126 ; line = 0 ; goodindent = 0 ; indent = 0 ; level = 0 ; limit = 0 ; loc = 0 ; leftln = true ; rightln = true ; inputhasended = false ; charsonline = 0 ; startptr = 1 ; start [1 ]= 0 ; dictptr = 0 ; {register integer for_end; h = 0 ;for_end = 140 ; if ( h <= for_end) do nhash [h ]= 0 ; while ( h++ < for_end ) ;} zerobytes .b0 = 0 ; zerobytes .b1 = 0 ; zerobytes .b2 = 0 ; zerobytes .b3 = 0 ; {register integer for_end; d = 0 ;for_end = 18 * 4 - 1 ; if ( d <= for_end) do headerbytes [d ]= 0 ; while ( d++ < for_end ) ;} headerbytes [8 ]= 11 ; headerbytes [9 ]= 85 ; headerbytes [10 ]= 78 ; headerbytes [11 ]= 83 ; headerbytes [12 ]= 80 ; headerbytes [13 ]= 69 ; headerbytes [14 ]= 67 ; headerbytes [15 ]= 73 ; headerbytes [16 ]= 70 ; headerbytes [17 ]= 73 ; headerbytes [18 ]= 69 ; headerbytes [19 ]= 68 ; {register integer for_end; d = 48 ;for_end = 59 ; if ( d <= for_end) do headerbytes [d ]= headerbytes [d - 40 ]; while ( d++ < for_end ) ;} designsize = 10 * 1048576L ; designunits = 1048576L ; frozendu = false ; sevenbitsafeflag = false ; headerptr = 18 * 4 ; nl = 0 ; minnl = 0 ; nk = 0 ; ne = 0 ; np = 0 ; checksumspecified = false ; bchar = 256 ; vfptr = 0 ; vtitlestart = 0 ; vtitlelength = 0 ; fontptr = 0 ; {register integer for_end; k = 0 ;for_end = 255 ; if ( k <= for_end) do packetstart [k ]= vfsize ; while ( k++ < for_end ) ;} {register integer for_end; k = 0 ;for_end = 127 ; if ( k <= for_end) do packetlength [k ]= 1 ; while ( k++ < for_end ) ;} {register integer for_end; k = 128 ;for_end = 255 ; if ( k <= for_end) do packetlength [k ]= 2 ; while ( k++ < for_end ) ;} charremainder [256 ]= 32767 ; {register integer for_end; c = 0 ;for_end = 255 ; if ( c <= for_end) do { charwd [c ]= 0 ; charht [c ]= 0 ; chardp [c ]= 0 ; charic [c ]= 0 ; chartag [c ]= 0 ; charremainder [c ]= 0 ; } while ( c++ < for_end ) ;} memory [0 ]= 2147483647L ; memory [1 ]= 0 ; link [1 ]= 0 ; memory [2 ]= 0 ; link [2 ]= 0 ; memory [3 ]= 0 ; link [3 ]= 0 ; memory [4 ]= 0 ; link [4 ]= 0 ; memptr = 4 ; hashptr = 0 ; yligcycle = 256 ; {register integer for_end; k = 0 ;for_end = hashsize ; if ( k <= for_end) do hash [k ]= 0 ; while ( k++ < for_end ) ;} } void #ifdef HAVE_PROTOTYPES showerrorcontext ( void ) #else showerrorcontext ( ) #endif { integer k ; fprintf(stdout, "%s%ld%s\n", " (line " , (long)line , ")." ) ; if ( ! leftln ) Fputs(stdout, "..." ) ; {register integer for_end; k = 1 ;for_end = loc ; if ( k <= for_end) do putc (buffer [k ], stdout); while ( k++ < for_end ) ;} fprintf(stdout, "%c\n", ' ' ) ; if ( ! leftln ) Fputs(stdout, " " ) ; {register integer for_end; k = 1 ;for_end = loc ; if ( k <= for_end) do putc (' ' , stdout); while ( k++ < for_end ) ;} {register integer for_end; k = loc + 1 ;for_end = limit ; if ( k <= for_end) do putc (buffer [k ], stdout); while ( k++ < for_end ) ;} if ( rightln ) fprintf(stdout, "%c\n", ' ' ) ; else fprintf(stdout, "%s\n", "..." ) ; charsonline = 0 ; } void #ifdef HAVE_PROTOTYPES fillbuffer ( void ) #else fillbuffer ( ) #endif { leftln = rightln ; limit = 0 ; loc = 0 ; if ( leftln ) { if ( line > 0 ) readln ( vplfile ) ; line = line + 1 ; } if ( eof ( vplfile ) ) { limit = 1 ; buffer [1 ]= ')' ; rightln = false ; inputhasended = true ; } else { while ( ( limit < bufsize - 1 ) && ( ! eoln ( vplfile ) ) ) { limit = limit + 1 ; read ( vplfile , buffer [limit ]) ; } buffer [limit + 1 ]= ' ' ; rightln = eoln ( vplfile ) ; if ( leftln ) { while ( ( loc < limit ) && ( buffer [loc + 1 ]== ' ' ) ) loc = loc + 1 ; if ( loc < limit ) { if ( level == 0 ) if ( loc == 0 ) goodindent = goodindent + 1 ; else { if ( goodindent >= 10 ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "Warning: Indented line occurred at level zero" ) ; showerrorcontext () ; } goodindent = 0 ; indent = 0 ; } else if ( indent == 0 ) if ( loc % level == 0 ) { indent = loc / level ; goodindent = 1 ; } else goodindent = 0 ; else if ( indent * level == loc ) goodindent = goodindent + 1 ; else { if ( goodindent >= 10 ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; fprintf(stdout, "%s%s%ld", "Warning: Inconsistent indentation; " , "you are at parenthesis level " , (long)level ) ; showerrorcontext () ; } goodindent = 0 ; indent = 0 ; } } } } } void #ifdef HAVE_PROTOTYPES getkeywordchar ( void ) #else getkeywordchar ( ) #endif { while ( ( loc == limit ) && ( ! rightln ) ) fillbuffer () ; if ( loc == limit ) curchar = 32 ; else { curchar = xord [buffer [loc + 1 ]]; if ( curchar >= 97 ) curchar = curchar - 32 ; if ( ( ( curchar >= 48 ) && ( curchar <= 57 ) ) ) loc = loc + 1 ; else if ( ( ( curchar >= 65 ) && ( curchar <= 90 ) ) ) loc = loc + 1 ; else if ( curchar == 47 ) loc = loc + 1 ; else if ( curchar == 62 ) loc = loc + 1 ; else curchar = 32 ; } } void #ifdef HAVE_PROTOTYPES getnext ( void ) #else getnext ( ) #endif { while ( loc == limit ) fillbuffer () ; loc = loc + 1 ; curchar = xord [buffer [loc ]]; if ( curchar >= 97 ) if ( curchar <= 122 ) curchar = curchar - 32 ; else { if ( curchar == 127 ) { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "Illegal character in the file" ) ; showerrorcontext () ; } curchar = 63 ; } } else if ( ( curchar <= 41 ) && ( curchar >= 40 ) ) loc = loc - 1 ; } byte #ifdef HAVE_PROTOTYPES gethex ( void ) #else gethex ( ) #endif { register byte Result; integer a ; do { getnext () ; } while ( ! ( curchar != 32 ) ) ; a = curchar - 41 ; if ( a > 0 ) { a = curchar - 48 ; if ( curchar > 57 ) if ( curchar < 65 ) a = -1 ; else a = curchar - 55 ; } if ( ( a < 0 ) || ( a > 15 ) ) { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "Illegal hexadecimal digit" ) ; showerrorcontext () ; } Result = 0 ; } else Result = a ; return Result ; } void #ifdef HAVE_PROTOTYPES skiptoendofitem ( void ) #else skiptoendofitem ( ) #endif { integer l ; l = level ; while ( level >= l ) { while ( loc == limit ) fillbuffer () ; loc = loc + 1 ; if ( buffer [loc ]== ')' ) level = level - 1 ; else if ( buffer [loc ]== '(' ) level = level + 1 ; } if ( inputhasended ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "File ended unexpectedly: No closing \")\"" ) ; showerrorcontext () ; } curchar = 32 ; } void #ifdef HAVE_PROTOTYPES copytoendofitem ( void ) #else copytoendofitem ( ) #endif { /* 30 */ integer l ; boolean nonblankfound ; l = level ; nonblankfound = false ; while ( true ) { while ( loc == limit ) fillbuffer () ; if ( buffer [loc + 1 ]== ')' ) if ( level == l ) goto lab30 ; else level = level - 1 ; loc = loc + 1 ; if ( buffer [loc ]== '(' ) level = level + 1 ; if ( buffer [loc ]!= ' ' ) nonblankfound = true ; if ( nonblankfound ) if ( xord [buffer [loc ]]== 127 ) { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "Illegal character in the file" ) ; showerrorcontext () ; } { vf [vfptr ]= 63 ; if ( vfptr == vfsize ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "I'm out of memory---increase my vfsize!" ) ; showerrorcontext () ; } else vfptr = vfptr + 1 ; } } else { vf [vfptr ]= xord [buffer [loc ]]; if ( vfptr == vfsize ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "I'm out of memory---increase my vfsize!" ) ; showerrorcontext () ; } else vfptr = vfptr + 1 ; } } lab30: ; } void #ifdef HAVE_PROTOTYPES finishtheproperty ( void ) #else finishtheproperty ( ) #endif { while ( curchar == 32 ) getnext () ; if ( curchar != 41 ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "Junk after property value will be ignored" ) ; showerrorcontext () ; } skiptoendofitem () ; } void #ifdef HAVE_PROTOTYPES lookup ( void ) #else lookup ( ) #endif { char k ; short j ; boolean notfound ; curhash = curname [1 ]; {register integer for_end; k = 2 ;for_end = namelength ; if ( k <= for_end) do curhash = ( curhash + curhash + curname [k ]) % 141 ; while ( k++ < for_end ) ;} notfound = true ; while ( notfound ) { if ( curhash == 0 ) curhash = 140 ; else curhash = curhash - 1 ; if ( nhash [curhash ]== 0 ) notfound = false ; else { j = start [nhash [curhash ]]; if ( start [nhash [curhash ]+ 1 ]== j + namelength ) { notfound = false ; {register integer for_end; k = 1 ;for_end = namelength ; if ( k <= for_end) do if ( dictionary [j + k - 1 ]!= curname [k ]) notfound = true ; while ( k++ < for_end ) ;} } } } nameptr = nhash [curhash ]; } void #ifdef HAVE_PROTOTYPES zentername ( byte v ) #else zentername ( v ) byte v ; #endif { char k ; {register integer for_end; k = 1 ;for_end = namelength ; if ( k <= for_end) do curname [k ]= curname [k + 20 - namelength ]; while ( k++ < for_end ) ;} lookup () ; nhash [curhash ]= startptr ; equiv [startptr ]= v ; {register integer for_end; k = 1 ;for_end = namelength ; if ( k <= for_end) do { dictionary [dictptr ]= curname [k ]; dictptr = dictptr + 1 ; } while ( k++ < for_end ) ;} startptr = startptr + 1 ; start [startptr ]= dictptr ; } void #ifdef HAVE_PROTOTYPES getname ( void ) #else getname ( ) #endif { loc = loc + 1 ; level = level + 1 ; curchar = 32 ; while ( curchar == 32 ) getnext () ; if ( ( curchar > 41 ) || ( curchar < 40 ) ) loc = loc - 1 ; namelength = 0 ; getkeywordchar () ; while ( curchar != 32 ) { if ( namelength == 20 ) curname [1 ]= 88 ; else namelength = namelength + 1 ; curname [namelength ]= curchar ; getkeywordchar () ; } lookup () ; if ( nameptr == 0 ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "Sorry, I don't know that property name" ) ; showerrorcontext () ; } curcode = equiv [nameptr ]; } byte #ifdef HAVE_PROTOTYPES getbyte ( void ) #else getbyte ( ) #endif { register byte Result; integer acc ; ASCIIcode t ; do { getnext () ; } while ( ! ( curchar != 32 ) ) ; t = curchar ; acc = 0 ; do { getnext () ; } while ( ! ( curchar != 32 ) ) ; if ( t == 67 ) if ( ( curchar >= 33 ) && ( curchar <= 126 ) && ( ( curchar < 40 ) || ( curchar > 41 ) ) ) acc = xord [buffer [loc ]]; else { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "\"C\" value must be standard ASCII and not a paren" ) ; showerrorcontext () ; } do { getnext () ; } while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ; } else if ( t == 68 ) { while ( ( curchar >= 48 ) && ( curchar <= 57 ) ) { acc = acc * 10 + curchar - 48 ; if ( acc > 255 ) { { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "This value shouldn't exceed 255" ) ; showerrorcontext () ; } do { getnext () ; } while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ; } acc = 0 ; curchar = 32 ; } else getnext () ; } { if ( ( curchar > 41 ) || ( curchar < 40 ) ) loc = loc - 1 ; } } else if ( t == 79 ) { while ( ( curchar >= 48 ) && ( curchar <= 55 ) ) { acc = acc * 8 + curchar - 48 ; if ( acc > 255 ) { { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "This value shouldn't exceed '377" ) ; showerrorcontext () ; } do { getnext () ; } while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ; } acc = 0 ; curchar = 32 ; } else getnext () ; } { if ( ( curchar > 41 ) || ( curchar < 40 ) ) loc = loc - 1 ; } } else if ( t == 72 ) { while ( ( ( curchar >= 48 ) && ( curchar <= 57 ) ) || ( ( curchar >= 65 ) && ( curchar <= 70 ) ) ) { if ( curchar >= 65 ) curchar = curchar - 7 ; acc = acc * 16 + curchar - 48 ; if ( acc > 255 ) { { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "This value shouldn't exceed \"FF" ) ; showerrorcontext () ; } do { getnext () ; } while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ; } acc = 0 ; curchar = 32 ; } else getnext () ; } { if ( ( curchar > 41 ) || ( curchar < 40 ) ) loc = loc - 1 ; } } else if ( t == 70 ) { if ( curchar == 66 ) acc = 2 ; else if ( curchar == 76 ) acc = 4 ; else if ( curchar != 77 ) acc = 18 ; getnext () ; if ( curchar == 73 ) acc = acc + 1 ; else if ( curchar != 82 ) acc = 18 ; getnext () ; if ( curchar == 67 ) acc = acc + 6 ; else if ( curchar == 69 ) acc = acc + 12 ; else if ( curchar != 82 ) acc = 18 ; if ( acc >= 18 ) { { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "Illegal face code, I changed it to MRR" ) ; showerrorcontext () ; } do { getnext () ; } while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ; } acc = 0 ; } } else { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "You need \"C\" or \"D\" or \"O\" or \"H\" or \"F\" here" ) ; showerrorcontext () ; } do { getnext () ; } while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ; } curchar = 32 ; Result = acc ; return Result ; } void #ifdef HAVE_PROTOTYPES getfourbytes ( void ) #else getfourbytes ( ) #endif { integer c ; integer r ; do { getnext () ; } while ( ! ( curchar != 32 ) ) ; r = 0 ; curbytes = zerobytes ; if ( curchar == 72 ) r = 16 ; else if ( curchar == 79 ) r = 8 ; else if ( curchar == 68 ) r = 10 ; else { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "Decimal (\"D\"), octal (\"O\"), or hex (\"H\") value needed here" ) ; showerrorcontext () ; } do { getnext () ; } while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ; } if ( r > 0 ) { do { getnext () ; } while ( ! ( curchar != 32 ) ) ; while ( ( ( curchar >= 48 ) && ( curchar <= 57 ) ) || ( ( curchar >= 65 ) && ( curchar <= 70 ) ) ) { if ( curchar >= 65 ) curchar = curchar - 7 ; if ( curchar >= 48 + r ) { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "Illegal digit" ) ; showerrorcontext () ; } do { getnext () ; } while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ; } else { c = curbytes .b3 * r + curchar - 48 ; curbytes .b3 = c % 256 ; c = curbytes .b2 * r + c / 256 ; curbytes .b2 = c % 256 ; c = curbytes .b1 * r + c / 256 ; curbytes .b1 = c % 256 ; c = curbytes .b0 * r + c / 256 ; if ( c < 256 ) curbytes .b0 = c ; else { curbytes = zerobytes ; if ( r == 8 ) { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "Sorry, the maximum octal value is O 37777777777" ) ; showerrorcontext () ; } do { getnext () ; } while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ; } else if ( r == 10 ) { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "Sorry, the maximum decimal value is D 4294967295" ) ; showerrorcontext () ; } do { getnext () ; } while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ; } else { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "Sorry, the maximum hex value is H FFFFFFFF" ) ; showerrorcontext () ; } do { getnext () ; } while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ; } } getnext () ; } } } } fixword #ifdef HAVE_PROTOTYPES getfix ( void ) #else getfix ( ) #endif { register fixword Result; boolean negative ; integer acc ; integer intpart ; char j ; do { getnext () ; } while ( ! ( curchar != 32 ) ) ; negative = false ; acc = 0 ; if ( ( curchar != 82 ) && ( curchar != 68 ) ) { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "An \"R\" or \"D\" value is needed here" ) ; showerrorcontext () ; } do { getnext () ; } while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ; } else { do { getnext () ; if ( curchar == 45 ) { curchar = 32 ; negative = true ; } else if ( curchar == 43 ) curchar = 32 ; } while ( ! ( curchar != 32 ) ) ; while ( ( curchar >= 48 ) && ( curchar <= 57 ) ) { acc = acc * 10 + curchar - 48 ; if ( acc >= 2048 ) { { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "Real constants must be less than 2048" ) ; showerrorcontext () ; } do { getnext () ; } while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ; } acc = 0 ; curchar = 32 ; } else getnext () ; } intpart = acc ; acc = 0 ; if ( curchar == 46 ) { j = 0 ; getnext () ; while ( ( curchar >= 48 ) && ( curchar <= 57 ) ) { if ( j < 7 ) { j = j + 1 ; fractiondigits [j ]= 2097152L * ( curchar - 48 ) ; } getnext () ; } acc = 0 ; while ( j > 0 ) { acc = fractiondigits [j ]+ ( acc / 10 ) ; j = j - 1 ; } acc = ( acc + 10 ) / 20 ; } if ( ( acc >= 1048576L ) && ( intpart == 2047 ) ) { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "Real constants must be less than 2048" ) ; showerrorcontext () ; } do { getnext () ; } while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ; } else acc = intpart * 1048576L + acc ; } if ( negative ) Result = - (integer) acc ; else Result = acc ; return Result ; } pointer #ifdef HAVE_PROTOTYPES zsortin ( pointer h , fixword d ) #else zsortin ( h , d ) pointer h ; fixword d ; #endif { register pointer Result; pointer p ; if ( ( d == 0 ) && ( h != 1 ) ) Result = 0 ; else { p = h ; while ( d >= memory [link [p ]]) p = link [p ]; if ( ( d == memory [p ]) && ( p != h ) ) Result = p ; else if ( memptr == 1032 ) { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "Memory overflow: more than 1028 widths, etc" ) ; showerrorcontext () ; } fprintf(stdout, "%s\n", "Congratulations! It's hard to make this error." ) ; Result = p ; } else { memptr = memptr + 1 ; memory [memptr ]= d ; link [memptr ]= link [p ]; link [p ]= memptr ; memory [h ]= memory [h ]+ 1 ; Result = memptr ; } } return Result ; } integer #ifdef HAVE_PROTOTYPES zmincover ( pointer h , fixword d ) #else zmincover ( h , d ) pointer h ; fixword d ; #endif { register integer Result; pointer p ; fixword l ; integer m ; m = 0 ; p = link [h ]; nextd = memory [0 ]; while ( p != 0 ) { m = m + 1 ; l = memory [p ]; while ( memory [link [p ]]<= l + d ) p = link [p ]; p = link [p ]; if ( memory [p ]- l < nextd ) nextd = memory [p ]- l ; } Result = m ; return Result ; } fixword #ifdef HAVE_PROTOTYPES zshorten ( pointer h , integer m ) #else zshorten ( h , m ) pointer h ; integer m ; #endif { register fixword Result; fixword d ; integer k ; if ( memory [h ]> m ) { excess = memory [h ]- m ; k = mincover ( h , 0 ) ; d = nextd ; do { d = d + d ; k = mincover ( h , d ) ; } while ( ! ( k <= m ) ) ; d = d / 2 ; k = mincover ( h , d ) ; while ( k > m ) { d = nextd ; k = mincover ( h , d ) ; } Result = d ; } else Result = 0 ; return Result ; } void #ifdef HAVE_PROTOTYPES zsetindices ( pointer h , fixword d ) #else zsetindices ( h , d ) pointer h ; fixword d ; #endif { pointer p ; pointer q ; byte m ; fixword l ; q = h ; p = link [q ]; m = 0 ; while ( p != 0 ) { m = m + 1 ; l = memory [p ]; indexvar [p ]= m ; while ( memory [link [p ]]<= l + d ) { p = link [p ]; indexvar [p ]= m ; excess = excess - 1 ; if ( excess == 0 ) d = 0 ; } link [q ]= p ; memory [p ]= l + ( memory [p ]- l ) / 2 ; q = p ; p = link [p ]; } memory [h ]= m ; } void #ifdef HAVE_PROTOTYPES junkerror ( void ) #else junkerror ( ) #endif { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "There's junk here that is not in parentheses" ) ; showerrorcontext () ; } do { getnext () ; } while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ; } void #ifdef HAVE_PROTOTYPES zreadfourbytes ( headerindex l ) #else zreadfourbytes ( l ) headerindex l ; #endif { getfourbytes () ; headerbytes [l ]= curbytes .b0 ; headerbytes [l + 1 ]= curbytes .b1 ; headerbytes [l + 2 ]= curbytes .b2 ; headerbytes [l + 3 ]= curbytes .b3 ; } void #ifdef HAVE_PROTOTYPES zreadBCPL ( headerindex l , byte n ) #else zreadBCPL ( l , n ) headerindex l ; byte n ; #endif { headerindex k ; k = l ; while ( curchar == 32 ) getnext () ; while ( ( curchar != 40 ) && ( curchar != 41 ) ) { if ( k < l + n ) k = k + 1 ; if ( k < l + n ) headerbytes [k ]= curchar ; getnext () ; } if ( k == l + n ) { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; fprintf(stdout, "%s%ld%s", "String is too long; its first " , (long)n - 1 , " characters will be kept" ) ; showerrorcontext () ; } k = k - 1 ; } headerbytes [l ]= k - l ; while ( k < l + n - 1 ) { k = k + 1 ; headerbytes [k ]= 0 ; } } void #ifdef HAVE_PROTOTYPES zchecktag ( byte c ) #else zchecktag ( c ) byte c ; #endif { switch ( chartag [c ]) {case 0 : ; break ; case 1 : { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "This character already appeared in a LIGTABLE LABEL" ) ; showerrorcontext () ; } break ; case 2 : { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "This character already has a NEXTLARGER spec" ) ; showerrorcontext () ; } break ; case 3 : { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "This character already has a VARCHAR spec" ) ; showerrorcontext () ; } break ; } } void #ifdef HAVE_PROTOTYPES zvffix ( byte opcode , fixword x ) #else zvffix ( opcode , x ) byte opcode ; fixword x ; #endif { boolean negative ; char k ; integer t ; frozendu = true ; if ( designunits != 1048576L ) x = round ( ( x / ((double) designunits ) ) * 1048576.0 ) ; if ( x > 0 ) negative = false ; else { negative = true ; x = -1 - x ; } if ( opcode == 0 ) { k = 4 ; t = 16777216L ; } else { t = 127 ; k = 1 ; while ( x > t ) { t = 256 * t + 255 ; k = k + 1 ; } { vf [vfptr ]= opcode + k - 1 ; if ( vfptr == vfsize ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "I'm out of memory---increase my vfsize!" ) ; showerrorcontext () ; } else vfptr = vfptr + 1 ; } t = t / 128 + 1 ; } do { if ( negative ) { { vf [vfptr ]= 255 - ( x / t ) ; if ( vfptr == vfsize ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "I'm out of memory---increase my vfsize!" ) ; showerrorcontext () ; } else vfptr = vfptr + 1 ; } negative = false ; x = ( x / t ) * t + t - 1 - x ; } else { vf [vfptr ]= ( x / t ) % 256 ; if ( vfptr == vfsize ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "I'm out of memory---increase my vfsize!" ) ; showerrorcontext () ; } else vfptr = vfptr + 1 ; } k = k - 1 ; t = t / 256 ; } while ( ! ( k == 0 ) ) ; } void #ifdef HAVE_PROTOTYPES zreadpacket ( byte c ) #else zreadpacket ( c ) byte c ; #endif { byte cc ; fixword x ; char h, v ; integer specialstart ; integer k ; packetstart [c ]= vfptr ; stackptr = 0 ; h = 0 ; v = 0 ; curfont = 0 ; while ( level == 2 ) { while ( curchar == 32 ) getnext () ; if ( curchar == 40 ) { getname () ; if ( curcode == 0 ) skiptoendofitem () ; else if ( ( curcode < 80 ) || ( curcode > 90 ) ) { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "This property name doesn't belong in a MAP list" ) ; showerrorcontext () ; } skiptoendofitem () ; } else { switch ( curcode ) {case 80 : { getfourbytes () ; fontnumber [fontptr ]= curbytes ; curfont = 0 ; while ( ( fontnumber [curfont ].b3 != fontnumber [fontptr ].b3 ) || ( fontnumber [curfont ].b2 != fontnumber [fontptr ].b2 ) || ( fontnumber [curfont ].b1 != fontnumber [fontptr ].b1 ) || ( fontnumber [curfont ].b0 != fontnumber [fontptr ].b0 ) ) curfont = curfont + 1 ; if ( curfont == fontptr ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "Undefined MAPFONT cannot be selected" ) ; showerrorcontext () ; } else if ( curfont < 64 ) { vf [vfptr ]= 171 + curfont ; if ( vfptr == vfsize ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "I'm out of memory---increase my vfsize!" ) ; showerrorcontext () ; } else vfptr = vfptr + 1 ; } else { { vf [vfptr ]= 235 ; if ( vfptr == vfsize ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "I'm out of memory---increase my vfsize!" ) ; showerrorcontext () ; } else vfptr = vfptr + 1 ; } { vf [vfptr ]= curfont ; if ( vfptr == vfsize ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "I'm out of memory---increase my vfsize!" ) ; showerrorcontext () ; } else vfptr = vfptr + 1 ; } } } break ; case 81 : if ( curfont == fontptr ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "Character cannot be typeset in undefined font" ) ; showerrorcontext () ; } else { cc = getbyte () ; if ( cc >= 128 ) { vf [vfptr ]= 128 ; if ( vfptr == vfsize ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "I'm out of memory---increase my vfsize!" ) ; showerrorcontext () ; } else vfptr = vfptr + 1 ; } { vf [vfptr ]= cc ; if ( vfptr == vfsize ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "I'm out of memory---increase my vfsize!" ) ; showerrorcontext () ; } else vfptr = vfptr + 1 ; } } break ; case 82 : { { vf [vfptr ]= 132 ; if ( vfptr == vfsize ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "I'm out of memory---increase my vfsize!" ) ; showerrorcontext () ; } else vfptr = vfptr + 1 ; } vffix ( 0 , getfix () ) ; vffix ( 0 , getfix () ) ; } break ; case 83 : case 84 : { if ( curcode == 83 ) x = getfix () ; else x = - (integer) getfix () ; if ( h == 0 ) { wstack [stackptr ]= x ; h = 1 ; vffix ( 148 , x ) ; } else if ( x == wstack [stackptr ]) { vf [vfptr ]= 147 ; if ( vfptr == vfsize ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "I'm out of memory---increase my vfsize!" ) ; showerrorcontext () ; } else vfptr = vfptr + 1 ; } else if ( h == 1 ) { xstack [stackptr ]= x ; h = 2 ; vffix ( 153 , x ) ; } else if ( x == xstack [stackptr ]) { vf [vfptr ]= 152 ; if ( vfptr == vfsize ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "I'm out of memory---increase my vfsize!" ) ; showerrorcontext () ; } else vfptr = vfptr + 1 ; } else vffix ( 143 , x ) ; } break ; case 85 : case 86 : { if ( curcode == 85 ) x = getfix () ; else x = - (integer) getfix () ; if ( v == 0 ) { ystack [stackptr ]= x ; v = 1 ; vffix ( 162 , x ) ; } else if ( x == ystack [stackptr ]) { vf [vfptr ]= 161 ; if ( vfptr == vfsize ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "I'm out of memory---increase my vfsize!" ) ; showerrorcontext () ; } else vfptr = vfptr + 1 ; } else if ( v == 1 ) { zstack [stackptr ]= x ; v = 2 ; vffix ( 167 , x ) ; } else if ( x == zstack [stackptr ]) { vf [vfptr ]= 166 ; if ( vfptr == vfsize ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "I'm out of memory---increase my vfsize!" ) ; showerrorcontext () ; } else vfptr = vfptr + 1 ; } else vffix ( 157 , x ) ; } break ; case 87 : if ( stackptr == maxstack ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "Don't push so much---stack is full!" ) ; showerrorcontext () ; } else { { vf [vfptr ]= 141 ; if ( vfptr == vfsize ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "I'm out of memory---increase my vfsize!" ) ; showerrorcontext () ; } else vfptr = vfptr + 1 ; } hstack [stackptr ]= h ; vstack [stackptr ]= v ; stackptr = stackptr + 1 ; h = 0 ; v = 0 ; } break ; case 88 : if ( stackptr == 0 ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "Empty stack cannot be popped" ) ; showerrorcontext () ; } else { { vf [vfptr ]= 142 ; if ( vfptr == vfsize ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "I'm out of memory---increase my vfsize!" ) ; showerrorcontext () ; } else vfptr = vfptr + 1 ; } stackptr = stackptr - 1 ; h = hstack [stackptr ]; v = vstack [stackptr ]; } break ; case 89 : case 90 : { { vf [vfptr ]= 239 ; if ( vfptr == vfsize ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "I'm out of memory---increase my vfsize!" ) ; showerrorcontext () ; } else vfptr = vfptr + 1 ; } { vf [vfptr ]= 0 ; if ( vfptr == vfsize ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "I'm out of memory---increase my vfsize!" ) ; showerrorcontext () ; } else vfptr = vfptr + 1 ; } specialstart = vfptr ; if ( curcode == 89 ) copytoendofitem () ; else { do { x = gethex () ; if ( curchar > 41 ) { vf [vfptr ]= x * 16 + gethex () ; if ( vfptr == vfsize ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "I'm out of memory---increase my vfsize!" ) ; showerrorcontext () ; } else vfptr = vfptr + 1 ; } } while ( ! ( curchar <= 41 ) ) ; } if ( vfptr - specialstart > 255 ) if ( vfptr + 3 > vfsize ) { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "Special command being clipped---no room left!" ) ; showerrorcontext () ; } vfptr = specialstart + 255 ; vf [specialstart - 1 ]= 255 ; } else { {register integer for_end; k = vfptr ;for_end = specialstart ; if ( k >= for_end) do vf [k + 3 ]= vf [k ]; while ( k-- > for_end ) ;} x = vfptr - specialstart ; vfptr = vfptr + 3 ; vf [specialstart - 2 ]= 242 ; vf [specialstart - 1 ]= x / 16777216L ; vf [specialstart ]= ( x / 65536L ) % 256 ; vf [specialstart + 1 ]= ( x / 256 ) % 256 ; vf [specialstart + 2 ]= x % 256 ; } else vf [specialstart - 1 ]= vfptr - specialstart ; } break ; } finishtheproperty () ; } } else if ( curchar == 41 ) skiptoendofitem () ; else junkerror () ; } while ( stackptr > 0 ) { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "Missing POP supplied" ) ; showerrorcontext () ; } { vf [vfptr ]= 142 ; if ( vfptr == vfsize ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "I'm out of memory---increase my vfsize!" ) ; showerrorcontext () ; } else vfptr = vfptr + 1 ; } stackptr = stackptr - 1 ; } packetlength [c ]= vfptr - packetstart [c ]; { loc = loc - 1 ; level = level + 1 ; curchar = 41 ; } } void #ifdef HAVE_PROTOTYPES zprintoctal ( byte c ) #else zprintoctal ( c ) byte c ; #endif { fprintf(stdout, "%c%ld%ld%ld", '\'' , (long)( c / 64 ) , (long)( ( c / 8 ) % 8 ) , (long)( c % 8 ) ) ; } boolean #ifdef HAVE_PROTOTYPES zhashinput ( indx p , indx c ) #else zhashinput ( p , c ) indx p ; indx c ; #endif { /* 30 */ register boolean Result; char cc ; unsigned char zz ; unsigned char y ; integer key ; integer t ; if ( hashptr == hashsize ) { Result = false ; goto lab30 ; } y = ligkern [p ].b1 ; t = ligkern [p ].b2 ; cc = 0 ; zz = ligkern [p ].b3 ; if ( t >= 128 ) zz = y ; else { switch ( t ) {case 0 : case 6 : ; break ; case 5 : case 11 : zz = y ; break ; case 1 : case 7 : cc = 1 ; break ; case 2 : cc = 2 ; break ; case 3 : cc = 3 ; break ; } } key = 256 * c + y + 1 ; h = ( 1009 * key ) % hashsize ; while ( hash [h ]> 0 ) { if ( hash [h ]<= key ) { if ( hash [h ]== key ) { Result = false ; goto lab30 ; } t = hash [h ]; hash [h ]= key ; key = t ; t = classvar [h ]; classvar [h ]= cc ; cc = t ; t = ligz [h ]; ligz [h ]= zz ; zz = t ; } if ( h > 0 ) h = h - 1 ; else h = hashsize ; } hash [h ]= key ; classvar [h ]= cc ; ligz [h ]= zz ; hashptr = hashptr + 1 ; hashlist [hashptr ]= h ; Result = true ; lab30: ; return Result ; } #ifdef notdef indx #ifdef HAVE_PROTOTYPES zf ( indx h , indx x , indx y ) #else zf ( h , x , y ) indx h ; indx x ; indx y ; #endif { register indx Result; ; return Result ; } #endif /* notdef */ indx #ifdef HAVE_PROTOTYPES zeval ( indx x , indx y ) #else zeval ( x , y ) indx x ; indx y ; #endif { register indx Result; integer key ; key = 256 * x + y + 1 ; h = ( 1009 * key ) % hashsize ; while ( hash [h ]> key ) if ( h > 0 ) h = h - 1 ; else h = hashsize ; if ( hash [h ]< key ) Result = y ; else Result = f ( h , x , y ) ; return Result ; } indx #ifdef HAVE_PROTOTYPES zf ( indx h , indx x , indx y ) #else zf ( h , x , y ) indx h ; indx x ; indx y ; #endif { register indx Result; switch ( classvar [h ]) {case 0 : ; break ; case 1 : { classvar [h ]= 4 ; ligz [h ]= eval ( ligz [h ], y ) ; classvar [h ]= 0 ; } break ; case 2 : { classvar [h ]= 4 ; ligz [h ]= eval ( x , ligz [h ]) ; classvar [h ]= 0 ; } break ; case 3 : { classvar [h ]= 4 ; ligz [h ]= eval ( eval ( x , ligz [h ]) , y ) ; classvar [h ]= 0 ; } break ; case 4 : { xligcycle = x ; yligcycle = y ; ligz [h ]= 257 ; classvar [h ]= 0 ; } break ; } Result = ligz [h ]; return Result ; } void #ifdef HAVE_PROTOTYPES zoutscaled ( fixword x ) #else zoutscaled ( x ) fixword x ; #endif { byte n ; unsigned short m ; if ( fabs ( x / ((double) designunits ) ) >= 16.0 ) { Fputs(stdout, "The relative dimension " ) ; printreal ( x / ((double) 1048576L ) , 1 , 3 ) ; fprintf(stdout, "%s\n", " is too large." ) ; Fputs(stdout, " (Must be less than 16*designsize" ) ; if ( designunits != 1048576L ) { Fputs(stdout, " =" ) ; printreal ( designunits / ((double) 65536L ) , 1 , 3 ) ; Fputs(stdout, " designunits" ) ; } fprintf(stdout, "%c\n", ')' ) ; x = 0 ; } if ( designunits != 1048576L ) x = round ( ( x / ((double) designunits ) ) * 1048576.0 ) ; if ( x < 0 ) { putbyte ( 255 , tfmfile ) ; x = x + 16777216L ; if ( x <= 0 ) x = 1 ; } else { putbyte ( 0 , tfmfile ) ; if ( x >= 16777216L ) x = 16777215L ; } n = x / 65536L ; m = x % 65536L ; putbyte ( n , tfmfile ) ; putbyte ( m / 256 , tfmfile ) ; putbyte ( m % 256 , tfmfile ) ; } void #ifdef HAVE_PROTOTYPES zvoutint ( integer x ) #else zvoutint ( x ) integer x ; #endif { if ( x >= 0 ) putbyte ( x / 16777216L , vffile ) ; else { putbyte ( 255 , vffile ) ; x = x + 16777216L ; } putbyte ( ( x / 65536L ) % 256 , vffile ) ; putbyte ( ( x / 256 ) % 256 , vffile ) ; putbyte ( x % 256 , vffile ) ; } void #ifdef HAVE_PROTOTYPES paramenter ( void ) #else paramenter ( ) #endif { namelength = 5 ; curname [16 ]= 83 ; curname [17 ]= 76 ; curname [18 ]= 65 ; curname [19 ]= 78 ; curname [20 ]= 84 ; entername ( 31 ) ; namelength = 5 ; curname [16 ]= 83 ; curname [17 ]= 80 ; curname [18 ]= 65 ; curname [19 ]= 67 ; curname [20 ]= 69 ; entername ( 32 ) ; namelength = 7 ; curname [14 ]= 83 ; curname [15 ]= 84 ; curname [16 ]= 82 ; curname [17 ]= 69 ; curname [18 ]= 84 ; curname [19 ]= 67 ; curname [20 ]= 72 ; entername ( 33 ) ; namelength = 6 ; curname [15 ]= 83 ; curname [16 ]= 72 ; curname [17 ]= 82 ; curname [18 ]= 73 ; curname [19 ]= 78 ; curname [20 ]= 75 ; entername ( 34 ) ; namelength = 7 ; curname [14 ]= 88 ; curname [15 ]= 72 ; curname [16 ]= 69 ; curname [17 ]= 73 ; curname [18 ]= 71 ; curname [19 ]= 72 ; curname [20 ]= 84 ; entername ( 35 ) ; namelength = 4 ; curname [17 ]= 81 ; curname [18 ]= 85 ; curname [19 ]= 65 ; curname [20 ]= 68 ; entername ( 36 ) ; namelength = 10 ; curname [11 ]= 69 ; curname [12 ]= 88 ; curname [13 ]= 84 ; curname [14 ]= 82 ; curname [15 ]= 65 ; curname [16 ]= 83 ; curname [17 ]= 80 ; curname [18 ]= 65 ; curname [19 ]= 67 ; curname [20 ]= 69 ; entername ( 37 ) ; namelength = 4 ; curname [17 ]= 78 ; curname [18 ]= 85 ; curname [19 ]= 77 ; curname [20 ]= 49 ; entername ( 38 ) ; namelength = 4 ; curname [17 ]= 78 ; curname [18 ]= 85 ; curname [19 ]= 77 ; curname [20 ]= 50 ; entername ( 39 ) ; namelength = 4 ; curname [17 ]= 78 ; curname [18 ]= 85 ; curname [19 ]= 77 ; curname [20 ]= 51 ; entername ( 40 ) ; namelength = 6 ; curname [15 ]= 68 ; curname [16 ]= 69 ; curname [17 ]= 78 ; curname [18 ]= 79 ; curname [19 ]= 77 ; curname [20 ]= 49 ; entername ( 41 ) ; namelength = 6 ; curname [15 ]= 68 ; curname [16 ]= 69 ; curname [17 ]= 78 ; curname [18 ]= 79 ; curname [19 ]= 77 ; curname [20 ]= 50 ; entername ( 42 ) ; namelength = 4 ; curname [17 ]= 83 ; curname [18 ]= 85 ; curname [19 ]= 80 ; curname [20 ]= 49 ; entername ( 43 ) ; namelength = 4 ; curname [17 ]= 83 ; curname [18 ]= 85 ; curname [19 ]= 80 ; curname [20 ]= 50 ; entername ( 44 ) ; namelength = 4 ; curname [17 ]= 83 ; curname [18 ]= 85 ; curname [19 ]= 80 ; curname [20 ]= 51 ; entername ( 45 ) ; namelength = 4 ; curname [17 ]= 83 ; curname [18 ]= 85 ; curname [19 ]= 66 ; curname [20 ]= 49 ; entername ( 46 ) ; namelength = 4 ; curname [17 ]= 83 ; curname [18 ]= 85 ; curname [19 ]= 66 ; curname [20 ]= 50 ; entername ( 47 ) ; namelength = 7 ; curname [14 ]= 83 ; curname [15 ]= 85 ; curname [16 ]= 80 ; curname [17 ]= 68 ; curname [18 ]= 82 ; curname [19 ]= 79 ; curname [20 ]= 80 ; entername ( 48 ) ; namelength = 7 ; curname [14 ]= 83 ; curname [15 ]= 85 ; curname [16 ]= 66 ; curname [17 ]= 68 ; curname [18 ]= 82 ; curname [19 ]= 79 ; curname [20 ]= 80 ; entername ( 49 ) ; namelength = 6 ; curname [15 ]= 68 ; curname [16 ]= 69 ; curname [17 ]= 76 ; curname [18 ]= 73 ; curname [19 ]= 77 ; curname [20 ]= 49 ; entername ( 50 ) ; namelength = 6 ; curname [15 ]= 68 ; curname [16 ]= 69 ; curname [17 ]= 76 ; curname [18 ]= 73 ; curname [19 ]= 77 ; curname [20 ]= 50 ; entername ( 51 ) ; namelength = 10 ; curname [11 ]= 65 ; curname [12 ]= 88 ; curname [13 ]= 73 ; curname [14 ]= 83 ; curname [15 ]= 72 ; curname [16 ]= 69 ; curname [17 ]= 73 ; curname [18 ]= 71 ; curname [19 ]= 72 ; curname [20 ]= 84 ; entername ( 52 ) ; namelength = 20 ; curname [1 ]= 68 ; curname [2 ]= 69 ; curname [3 ]= 70 ; curname [4 ]= 65 ; curname [5 ]= 85 ; curname [6 ]= 76 ; curname [7 ]= 84 ; curname [8 ]= 82 ; curname [9 ]= 85 ; curname [10 ]= 76 ; curname [11 ]= 69 ; curname [12 ]= 84 ; curname [13 ]= 72 ; curname [14 ]= 73 ; curname [15 ]= 67 ; curname [16 ]= 75 ; curname [17 ]= 78 ; curname [18 ]= 69 ; curname [19 ]= 83 ; curname [20 ]= 83 ; entername ( 38 ) ; namelength = 13 ; curname [8 ]= 66 ; curname [9 ]= 73 ; curname [10 ]= 71 ; curname [11 ]= 79 ; curname [12 ]= 80 ; curname [13 ]= 83 ; curname [14 ]= 80 ; curname [15 ]= 65 ; curname [16 ]= 67 ; curname [17 ]= 73 ; curname [18 ]= 78 ; curname [19 ]= 71 ; curname [20 ]= 49 ; entername ( 39 ) ; namelength = 13 ; curname [8 ]= 66 ; curname [9 ]= 73 ; curname [10 ]= 71 ; curname [11 ]= 79 ; curname [12 ]= 80 ; curname [13 ]= 83 ; curname [14 ]= 80 ; curname [15 ]= 65 ; curname [16 ]= 67 ; curname [17 ]= 73 ; curname [18 ]= 78 ; curname [19 ]= 71 ; curname [20 ]= 50 ; entername ( 40 ) ; namelength = 13 ; curname [8 ]= 66 ; curname [9 ]= 73 ; curname [10 ]= 71 ; curname [11 ]= 79 ; curname [12 ]= 80 ; curname [13 ]= 83 ; curname [14 ]= 80 ; curname [15 ]= 65 ; curname [16 ]= 67 ; curname [17 ]= 73 ; curname [18 ]= 78 ; curname [19 ]= 71 ; curname [20 ]= 51 ; entername ( 41 ) ; namelength = 13 ; curname [8 ]= 66 ; curname [9 ]= 73 ; curname [10 ]= 71 ; curname [11 ]= 79 ; curname [12 ]= 80 ; curname [13 ]= 83 ; curname [14 ]= 80 ; curname [15 ]= 65 ; curname [16 ]= 67 ; curname [17 ]= 73 ; curname [18 ]= 78 ; curname [19 ]= 71 ; curname [20 ]= 52 ; entername ( 42 ) ; namelength = 13 ; curname [8 ]= 66 ; curname [9 ]= 73 ; curname [10 ]= 71 ; curname [11 ]= 79 ; curname [12 ]= 80 ; curname [13 ]= 83 ; curname [14 ]= 80 ; curname [15 ]= 65 ; curname [16 ]= 67 ; curname [17 ]= 73 ; curname [18 ]= 78 ; curname [19 ]= 71 ; curname [20 ]= 53 ; entername ( 43 ) ; } void #ifdef HAVE_PROTOTYPES vplenter ( void ) #else vplenter ( ) #endif { namelength = 6 ; curname [15 ]= 86 ; curname [16 ]= 84 ; curname [17 ]= 73 ; curname [18 ]= 84 ; curname [19 ]= 76 ; curname [20 ]= 69 ; entername ( 12 ) ; namelength = 7 ; curname [14 ]= 77 ; curname [15 ]= 65 ; curname [16 ]= 80 ; curname [17 ]= 70 ; curname [18 ]= 79 ; curname [19 ]= 78 ; curname [20 ]= 84 ; entername ( 13 ) ; namelength = 3 ; curname [18 ]= 77 ; curname [19 ]= 65 ; curname [20 ]= 80 ; entername ( 66 ) ; namelength = 8 ; curname [13 ]= 70 ; curname [14 ]= 79 ; curname [15 ]= 78 ; curname [16 ]= 84 ; curname [17 ]= 78 ; curname [18 ]= 65 ; curname [19 ]= 77 ; curname [20 ]= 69 ; entername ( 20 ) ; namelength = 8 ; curname [13 ]= 70 ; curname [14 ]= 79 ; curname [15 ]= 78 ; curname [16 ]= 84 ; curname [17 ]= 65 ; curname [18 ]= 82 ; curname [19 ]= 69 ; curname [20 ]= 65 ; entername ( 21 ) ; namelength = 12 ; curname [9 ]= 70 ; curname [10 ]= 79 ; curname [11 ]= 78 ; curname [12 ]= 84 ; curname [13 ]= 67 ; curname [14 ]= 72 ; curname [15 ]= 69 ; curname [16 ]= 67 ; curname [17 ]= 75 ; curname [18 ]= 83 ; curname [19 ]= 85 ; curname [20 ]= 77 ; entername ( 22 ) ; namelength = 6 ; curname [15 ]= 70 ; curname [16 ]= 79 ; curname [17 ]= 78 ; curname [18 ]= 84 ; curname [19 ]= 65 ; curname [20 ]= 84 ; entername ( 23 ) ; namelength = 9 ; curname [12 ]= 70 ; curname [13 ]= 79 ; curname [14 ]= 78 ; curname [15 ]= 84 ; curname [16 ]= 68 ; curname [17 ]= 83 ; curname [18 ]= 73 ; curname [19 ]= 90 ; curname [20 ]= 69 ; entername ( 24 ) ; namelength = 10 ; curname [11 ]= 83 ; curname [12 ]= 69 ; curname [13 ]= 76 ; curname [14 ]= 69 ; curname [15 ]= 67 ; curname [16 ]= 84 ; curname [17 ]= 70 ; curname [18 ]= 79 ; curname [19 ]= 78 ; curname [20 ]= 84 ; entername ( 80 ) ; namelength = 7 ; curname [14 ]= 83 ; curname [15 ]= 69 ; curname [16 ]= 84 ; curname [17 ]= 67 ; curname [18 ]= 72 ; curname [19 ]= 65 ; curname [20 ]= 82 ; entername ( 81 ) ; namelength = 7 ; curname [14 ]= 83 ; curname [15 ]= 69 ; curname [16 ]= 84 ; curname [17 ]= 82 ; curname [18 ]= 85 ; curname [19 ]= 76 ; curname [20 ]= 69 ; entername ( 82 ) ; namelength = 9 ; curname [12 ]= 77 ; curname [13 ]= 79 ; curname [14 ]= 86 ; curname [15 ]= 69 ; curname [16 ]= 82 ; curname [17 ]= 73 ; curname [18 ]= 71 ; curname [19 ]= 72 ; curname [20 ]= 84 ; entername ( 83 ) ; namelength = 8 ; curname [13 ]= 77 ; curname [14 ]= 79 ; curname [15 ]= 86 ; curname [16 ]= 69 ; curname [17 ]= 76 ; curname [18 ]= 69 ; curname [19 ]= 70 ; curname [20 ]= 84 ; entername ( 84 ) ; namelength = 8 ; curname [13 ]= 77 ; curname [14 ]= 79 ; curname [15 ]= 86 ; curname [16 ]= 69 ; curname [17 ]= 68 ; curname [18 ]= 79 ; curname [19 ]= 87 ; curname [20 ]= 78 ; entername ( 85 ) ; namelength = 6 ; curname [15 ]= 77 ; curname [16 ]= 79 ; curname [17 ]= 86 ; curname [18 ]= 69 ; curname [19 ]= 85 ; curname [20 ]= 80 ; entername ( 86 ) ; namelength = 4 ; curname [17 ]= 80 ; curname [18 ]= 85 ; curname [19 ]= 83 ; curname [20 ]= 72 ; entername ( 87 ) ; namelength = 3 ; curname [18 ]= 80 ; curname [19 ]= 79 ; curname [20 ]= 80 ; entername ( 88 ) ; namelength = 7 ; curname [14 ]= 83 ; curname [15 ]= 80 ; curname [16 ]= 69 ; curname [17 ]= 67 ; curname [18 ]= 73 ; curname [19 ]= 65 ; curname [20 ]= 76 ; entername ( 89 ) ; namelength = 10 ; curname [11 ]= 83 ; curname [12 ]= 80 ; curname [13 ]= 69 ; curname [14 ]= 67 ; curname [15 ]= 73 ; curname [16 ]= 65 ; curname [17 ]= 76 ; curname [18 ]= 72 ; curname [19 ]= 69 ; curname [20 ]= 88 ; entername ( 90 ) ; } void #ifdef HAVE_PROTOTYPES nameenter ( void ) #else nameenter ( ) #endif { equiv [0 ]= 0 ; namelength = 8 ; curname [13 ]= 67 ; curname [14 ]= 72 ; curname [15 ]= 69 ; curname [16 ]= 67 ; curname [17 ]= 75 ; curname [18 ]= 83 ; curname [19 ]= 85 ; curname [20 ]= 77 ; entername ( 1 ) ; namelength = 10 ; curname [11 ]= 68 ; curname [12 ]= 69 ; curname [13 ]= 83 ; curname [14 ]= 73 ; curname [15 ]= 71 ; curname [16 ]= 78 ; curname [17 ]= 83 ; curname [18 ]= 73 ; curname [19 ]= 90 ; curname [20 ]= 69 ; entername ( 2 ) ; namelength = 11 ; curname [10 ]= 68 ; curname [11 ]= 69 ; curname [12 ]= 83 ; curname [13 ]= 73 ; curname [14 ]= 71 ; curname [15 ]= 78 ; curname [16 ]= 85 ; curname [17 ]= 78 ; curname [18 ]= 73 ; curname [19 ]= 84 ; curname [20 ]= 83 ; entername ( 3 ) ; namelength = 12 ; curname [9 ]= 67 ; curname [10 ]= 79 ; curname [11 ]= 68 ; curname [12 ]= 73 ; curname [13 ]= 78 ; curname [14 ]= 71 ; curname [15 ]= 83 ; curname [16 ]= 67 ; curname [17 ]= 72 ; curname [18 ]= 69 ; curname [19 ]= 77 ; curname [20 ]= 69 ; entername ( 4 ) ; namelength = 6 ; curname [15 ]= 70 ; curname [16 ]= 65 ; curname [17 ]= 77 ; curname [18 ]= 73 ; curname [19 ]= 76 ; curname [20 ]= 89 ; entername ( 5 ) ; namelength = 4 ; curname [17 ]= 70 ; curname [18 ]= 65 ; curname [19 ]= 67 ; curname [20 ]= 69 ; entername ( 6 ) ; namelength = 16 ; curname [5 ]= 83 ; curname [6 ]= 69 ; curname [7 ]= 86 ; curname [8 ]= 69 ; curname [9 ]= 78 ; curname [10 ]= 66 ; curname [11 ]= 73 ; curname [12 ]= 84 ; curname [13 ]= 83 ; curname [14 ]= 65 ; curname [15 ]= 70 ; curname [16 ]= 69 ; curname [17 ]= 70 ; curname [18 ]= 76 ; curname [19 ]= 65 ; curname [20 ]= 71 ; entername ( 7 ) ; namelength = 6 ; curname [15 ]= 72 ; curname [16 ]= 69 ; curname [17 ]= 65 ; curname [18 ]= 68 ; curname [19 ]= 69 ; curname [20 ]= 82 ; entername ( 8 ) ; namelength = 9 ; curname [12 ]= 70 ; curname [13 ]= 79 ; curname [14 ]= 78 ; curname [15 ]= 84 ; curname [16 ]= 68 ; curname [17 ]= 73 ; curname [18 ]= 77 ; curname [19 ]= 69 ; curname [20 ]= 78 ; entername ( 9 ) ; namelength = 8 ; curname [13 ]= 76 ; curname [14 ]= 73 ; curname [15 ]= 71 ; curname [16 ]= 84 ; curname [17 ]= 65 ; curname [18 ]= 66 ; curname [19 ]= 76 ; curname [20 ]= 69 ; entername ( 10 ) ; namelength = 12 ; curname [9 ]= 66 ; curname [10 ]= 79 ; curname [11 ]= 85 ; curname [12 ]= 78 ; curname [13 ]= 68 ; curname [14 ]= 65 ; curname [15 ]= 82 ; curname [16 ]= 89 ; curname [17 ]= 67 ; curname [18 ]= 72 ; curname [19 ]= 65 ; curname [20 ]= 82 ; entername ( 11 ) ; namelength = 9 ; curname [12 ]= 67 ; curname [13 ]= 72 ; curname [14 ]= 65 ; curname [15 ]= 82 ; curname [16 ]= 65 ; curname [17 ]= 67 ; curname [18 ]= 84 ; curname [19 ]= 69 ; curname [20 ]= 82 ; entername ( 14 ) ; namelength = 9 ; curname [12 ]= 80 ; curname [13 ]= 65 ; curname [14 ]= 82 ; curname [15 ]= 65 ; curname [16 ]= 77 ; curname [17 ]= 69 ; curname [18 ]= 84 ; curname [19 ]= 69 ; curname [20 ]= 82 ; entername ( 30 ) ; namelength = 6 ; curname [15 ]= 67 ; curname [16 ]= 72 ; curname [17 ]= 65 ; curname [18 ]= 82 ; curname [19 ]= 87 ; curname [20 ]= 68 ; entername ( 61 ) ; namelength = 6 ; curname [15 ]= 67 ; curname [16 ]= 72 ; curname [17 ]= 65 ; curname [18 ]= 82 ; curname [19 ]= 72 ; curname [20 ]= 84 ; entername ( 62 ) ; namelength = 6 ; curname [15 ]= 67 ; curname [16 ]= 72 ; curname [17 ]= 65 ; curname [18 ]= 82 ; curname [19 ]= 68 ; curname [20 ]= 80 ; entername ( 63 ) ; namelength = 6 ; curname [15 ]= 67 ; curname [16 ]= 72 ; curname [17 ]= 65 ; curname [18 ]= 82 ; curname [19 ]= 73 ; curname [20 ]= 67 ; entername ( 64 ) ; namelength = 10 ; curname [11 ]= 78 ; curname [12 ]= 69 ; curname [13 ]= 88 ; curname [14 ]= 84 ; curname [15 ]= 76 ; curname [16 ]= 65 ; curname [17 ]= 82 ; curname [18 ]= 71 ; curname [19 ]= 69 ; curname [20 ]= 82 ; entername ( 65 ) ; namelength = 7 ; curname [14 ]= 86 ; curname [15 ]= 65 ; curname [16 ]= 82 ; curname [17 ]= 67 ; curname [18 ]= 72 ; curname [19 ]= 65 ; curname [20 ]= 82 ; entername ( 67 ) ; namelength = 3 ; curname [18 ]= 84 ; curname [19 ]= 79 ; curname [20 ]= 80 ; entername ( 68 ) ; namelength = 3 ; curname [18 ]= 77 ; curname [19 ]= 73 ; curname [20 ]= 68 ; entername ( 69 ) ; namelength = 3 ; curname [18 ]= 66 ; curname [19 ]= 79 ; curname [20 ]= 84 ; entername ( 70 ) ; namelength = 3 ; curname [18 ]= 82 ; curname [19 ]= 69 ; curname [20 ]= 80 ; entername ( 71 ) ; namelength = 3 ; curname [18 ]= 69 ; curname [19 ]= 88 ; curname [20 ]= 84 ; entername ( 71 ) ; namelength = 7 ; curname [14 ]= 67 ; curname [15 ]= 79 ; curname [16 ]= 77 ; curname [17 ]= 77 ; curname [18 ]= 69 ; curname [19 ]= 78 ; curname [20 ]= 84 ; entername ( 0 ) ; namelength = 5 ; curname [16 ]= 76 ; curname [17 ]= 65 ; curname [18 ]= 66 ; curname [19 ]= 69 ; curname [20 ]= 76 ; entername ( 100 ) ; namelength = 4 ; curname [17 ]= 83 ; curname [18 ]= 84 ; curname [19 ]= 79 ; curname [20 ]= 80 ; entername ( 101 ) ; namelength = 4 ; curname [17 ]= 83 ; curname [18 ]= 75 ; curname [19 ]= 73 ; curname [20 ]= 80 ; entername ( 102 ) ; namelength = 3 ; curname [18 ]= 75 ; curname [19 ]= 82 ; curname [20 ]= 78 ; entername ( 103 ) ; namelength = 3 ; curname [18 ]= 76 ; curname [19 ]= 73 ; curname [20 ]= 71 ; entername ( 104 ) ; namelength = 4 ; curname [17 ]= 47 ; curname [18 ]= 76 ; curname [19 ]= 73 ; curname [20 ]= 71 ; entername ( 106 ) ; namelength = 5 ; curname [16 ]= 47 ; curname [17 ]= 76 ; curname [18 ]= 73 ; curname [19 ]= 71 ; curname [20 ]= 62 ; entername ( 110 ) ; namelength = 4 ; curname [17 ]= 76 ; curname [18 ]= 73 ; curname [19 ]= 71 ; curname [20 ]= 47 ; entername ( 105 ) ; namelength = 5 ; curname [16 ]= 76 ; curname [17 ]= 73 ; curname [18 ]= 71 ; curname [19 ]= 47 ; curname [20 ]= 62 ; entername ( 109 ) ; namelength = 5 ; curname [16 ]= 47 ; curname [17 ]= 76 ; curname [18 ]= 73 ; curname [19 ]= 71 ; curname [20 ]= 47 ; entername ( 107 ) ; namelength = 6 ; curname [15 ]= 47 ; curname [16 ]= 76 ; curname [17 ]= 73 ; curname [18 ]= 71 ; curname [19 ]= 47 ; curname [20 ]= 62 ; entername ( 111 ) ; namelength = 7 ; curname [14 ]= 47 ; curname [15 ]= 76 ; curname [16 ]= 73 ; curname [17 ]= 71 ; curname [18 ]= 47 ; curname [19 ]= 62 ; curname [20 ]= 62 ; entername ( 115 ) ; vplenter () ; paramenter () ; } void #ifdef HAVE_PROTOTYPES readligkern ( void ) #else readligkern ( ) #endif { integer krnptr ; byte c ; { lkstepended = false ; while ( level == 1 ) { while ( curchar == 32 ) getnext () ; if ( curchar == 40 ) { getname () ; if ( curcode == 0 ) skiptoendofitem () ; else if ( curcode < 100 ) { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "This property name doesn't belong in a LIGTABLE list" ) ; showerrorcontext () ; } skiptoendofitem () ; } else { switch ( curcode ) {case 100 : { while ( curchar == 32 ) getnext () ; if ( curchar == 66 ) { charremainder [256 ]= nl ; do { getnext () ; } while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ; } else { { if ( ( curchar > 41 ) || ( curchar < 40 ) ) loc = loc - 1 ; } c = getbyte () ; checktag ( c ) ; chartag [c ]= 1 ; charremainder [c ]= nl ; } if ( minnl <= nl ) minnl = nl + 1 ; lkstepended = false ; } break ; case 101 : if ( ! lkstepended ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "STOP must follow LIG or KRN" ) ; showerrorcontext () ; } else { ligkern [nl - 1 ].b0 = 128 ; lkstepended = false ; } break ; case 102 : if ( ! lkstepended ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "SKIP must follow LIG or KRN" ) ; showerrorcontext () ; } else { c = getbyte () ; if ( c >= 128 ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "Maximum SKIP amount is 127" ) ; showerrorcontext () ; } else if ( nl + c >= maxligsteps ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "Sorry, LIGTABLE too long for me to handle" ) ; showerrorcontext () ; } else { ligkern [nl - 1 ].b0 = c ; if ( minnl <= nl + c ) minnl = nl + c + 1 ; } lkstepended = false ; } break ; case 103 : { ligkern [nl ].b0 = 0 ; ligkern [nl ].b1 = getbyte () ; kern [nk ]= getfix () ; krnptr = 0 ; while ( kern [krnptr ]!= kern [nk ]) krnptr = krnptr + 1 ; if ( krnptr == nk ) { if ( nk < maxkerns ) nk = nk + 1 ; else { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "Sorry, too many different kerns for me to handle" ) ; showerrorcontext () ; } krnptr = krnptr - 1 ; } } ligkern [nl ].b2 = 128 + ( krnptr / 256 ) ; ligkern [nl ].b3 = krnptr % 256 ; if ( nl >= maxligsteps - 1 ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "Sorry, LIGTABLE too long for me to handle" ) ; showerrorcontext () ; } else nl = nl + 1 ; lkstepended = true ; } break ; case 104 : case 105 : case 106 : case 107 : case 109 : case 110 : case 111 : case 115 : { ligkern [nl ].b0 = 0 ; ligkern [nl ].b2 = curcode - 104 ; ligkern [nl ].b1 = getbyte () ; ligkern [nl ].b3 = getbyte () ; if ( nl >= maxligsteps - 1 ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "Sorry, LIGTABLE too long for me to handle" ) ; showerrorcontext () ; } else nl = nl + 1 ; lkstepended = true ; } break ; } finishtheproperty () ; } } else if ( curchar == 41 ) skiptoendofitem () ; else junkerror () ; } { loc = loc - 1 ; level = level + 1 ; curchar = 41 ; } } } void #ifdef HAVE_PROTOTYPES readcharinfo ( void ) #else readcharinfo ( ) #endif { byte c ; { c = getbyte () ; if ( verbose ) { if ( charsonline == 8 ) { fprintf(stdout, "%c\n", ' ' ) ; charsonline = 1 ; } else { if ( charsonline > 0 ) putc (' ' , stdout); charsonline = charsonline + 1 ; } printoctal ( c ) ; } while ( level == 1 ) { while ( curchar == 32 ) getnext () ; if ( curchar == 40 ) { getname () ; if ( curcode == 0 ) skiptoendofitem () ; else if ( ( curcode < 61 ) || ( curcode > 67 ) ) { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "This property name doesn't belong in a CHARACTER list" ) ; showerrorcontext () ; } skiptoendofitem () ; } else { switch ( curcode ) {case 61 : charwd [c ]= sortin ( 1 , getfix () ) ; break ; case 62 : charht [c ]= sortin ( 2 , getfix () ) ; break ; case 63 : chardp [c ]= sortin ( 3 , getfix () ) ; break ; case 64 : charic [c ]= sortin ( 4 , getfix () ) ; break ; case 65 : { checktag ( c ) ; chartag [c ]= 2 ; charremainder [c ]= getbyte () ; } break ; case 66 : readpacket ( c ) ; break ; case 67 : { if ( ne == 256 ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "At most 256 VARCHAR specs are allowed" ) ; showerrorcontext () ; } else { checktag ( c ) ; chartag [c ]= 3 ; charremainder [c ]= ne ; exten [ne ]= zerobytes ; while ( level == 2 ) { while ( curchar == 32 ) getnext () ; if ( curchar == 40 ) { getname () ; if ( curcode == 0 ) skiptoendofitem () ; else if ( ( curcode < 68 ) || ( curcode > 71 ) ) { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "This property name doesn't belong in a VARCHAR list" ) ; showerrorcontext () ; } skiptoendofitem () ; } else { switch ( curcode - ( 68 ) ) {case 0 : exten [ne ].b0 = getbyte () ; break ; case 1 : exten [ne ].b1 = getbyte () ; break ; case 2 : exten [ne ].b2 = getbyte () ; break ; case 3 : exten [ne ].b3 = getbyte () ; break ; } finishtheproperty () ; } } else if ( curchar == 41 ) skiptoendofitem () ; else junkerror () ; } ne = ne + 1 ; { loc = loc - 1 ; level = level + 1 ; curchar = 41 ; } } } break ; } finishtheproperty () ; } } else if ( curchar == 41 ) skiptoendofitem () ; else junkerror () ; } if ( charwd [c ]== 0 ) charwd [c ]= sortin ( 1 , 0 ) ; { loc = loc - 1 ; level = level + 1 ; curchar = 41 ; } } } void #ifdef HAVE_PROTOTYPES readinput ( void ) #else readinput ( ) #endif { byte c ; curchar = 32 ; do { while ( curchar == 32 ) getnext () ; if ( curchar == 40 ) { getname () ; if ( curcode == 0 ) skiptoendofitem () ; else if ( curcode > 14 ) { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "This property name doesn't belong on the outer level" ) ; showerrorcontext () ; } skiptoendofitem () ; } else { switch ( curcode ) {case 1 : { checksumspecified = true ; readfourbytes ( 0 ) ; } break ; case 2 : { nextd = getfix () ; if ( nextd < 1048576L ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "The design size must be at least 1" ) ; showerrorcontext () ; } else designsize = nextd ; } break ; case 3 : { nextd = getfix () ; if ( nextd <= 0 ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "The number of units per design size must be positive" ) ; showerrorcontext () ; } else if ( frozendu ) { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "Sorry, it's too late to change the design units" ) ; showerrorcontext () ; } else designunits = nextd ; } break ; case 4 : readBCPL ( 8 , 40 ) ; break ; case 5 : readBCPL ( 48 , 20 ) ; break ; case 6 : headerbytes [71 ]= getbyte () ; break ; case 7 : { while ( curchar == 32 ) getnext () ; if ( curchar == 84 ) sevenbitsafeflag = true ; else if ( curchar == 70 ) sevenbitsafeflag = false ; else { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "The flag value should be \"TRUE\" or \"FALSE\"" ) ; showerrorcontext () ; } do { getnext () ; } while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ; } break ; case 8 : { c = getbyte () ; if ( c < 18 ) { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "HEADER indices should be 18 or more" ) ; showerrorcontext () ; } do { getnext () ; } while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ; } else if ( 4 * c + 4 > maxheaderbytes ) { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "This HEADER index is too big for my present table size" ) ; showerrorcontext () ; } do { getnext () ; } while ( ! ( ( curchar == 40 ) || ( curchar == 41 ) ) ) ; } else { while ( headerptr < 4 * c + 4 ) { headerbytes [headerptr ]= 0 ; headerptr = headerptr + 1 ; } readfourbytes ( 4 * c ) ; } } break ; case 9 : { while ( level == 1 ) { while ( curchar == 32 ) getnext () ; if ( curchar == 40 ) { getname () ; if ( curcode == 0 ) skiptoendofitem () ; else if ( ( curcode < 30 ) || ( curcode >= 61 ) ) { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "This property name doesn't belong in a FONTDIMEN list" ) ; showerrorcontext () ; } skiptoendofitem () ; } else { if ( curcode == 30 ) c = getbyte () ; else c = curcode - 30 ; if ( c == 0 ) { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "PARAMETER index must not be zero" ) ; showerrorcontext () ; } skiptoendofitem () ; } else if ( c > maxparamwords ) { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "This PARAMETER index is too big for my present table size" ) ; showerrorcontext () ; } skiptoendofitem () ; } else { while ( np < c ) { np = np + 1 ; param [np ]= 0 ; } param [c ]= getfix () ; finishtheproperty () ; } } } else if ( curchar == 41 ) skiptoendofitem () ; else junkerror () ; } { loc = loc - 1 ; level = level + 1 ; curchar = 41 ; } } break ; case 10 : readligkern () ; break ; case 11 : bchar = getbyte () ; break ; case 12 : { vtitlestart = vfptr ; copytoendofitem () ; if ( vfptr > vtitlestart + 255 ) { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "VTITLE clipped to 255 characters" ) ; showerrorcontext () ; } vtitlelength = 255 ; } else vtitlelength = vfptr - vtitlestart ; } break ; case 13 : { getfourbytes () ; fontnumber [fontptr ]= curbytes ; curfont = 0 ; while ( ( fontnumber [curfont ].b3 != fontnumber [fontptr ].b3 ) || ( fontnumber [curfont ].b2 != fontnumber [fontptr ].b2 ) || ( fontnumber [curfont ].b1 != fontnumber [fontptr ].b1 ) || ( fontnumber [curfont ].b0 != fontnumber [fontptr ].b0 ) ) curfont = curfont + 1 ; if ( curfont == fontptr ) if ( fontptr < 256 ) { fontptr = fontptr + 1 ; fnamestart [curfont ]= vfsize ; fnamelength [curfont ]= 4 ; fareastart [curfont ]= vfsize ; farealength [curfont ]= 0 ; fontchecksum [curfont ]= zerobytes ; fontat [curfont ]= 1048576L ; fontdsize [curfont ]= 10485760L ; } else { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "I can handle only 256 different mapfonts" ) ; showerrorcontext () ; } if ( curfont == fontptr ) skiptoendofitem () ; else while ( level == 1 ) { while ( curchar == 32 ) getnext () ; if ( curchar == 40 ) { getname () ; if ( curcode == 0 ) skiptoendofitem () ; else if ( ( curcode < 20 ) || ( curcode > 24 ) ) { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "This property name doesn't belong in a MAPFONT list" ) ; showerrorcontext () ; } skiptoendofitem () ; } else { switch ( curcode ) {case 20 : { fnamestart [curfont ]= vfptr ; copytoendofitem () ; if ( vfptr > fnamestart [curfont ]+ 255 ) { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "FONTNAME clipped to 255 characters" ) ; showerrorcontext () ; } fnamelength [curfont ]= 255 ; } else fnamelength [curfont ]= vfptr - fnamestart [ curfont ]; } break ; case 21 : { fareastart [curfont ]= vfptr ; copytoendofitem () ; if ( vfptr > fareastart [curfont ]+ 255 ) { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "FONTAREA clipped to 255 characters" ) ; showerrorcontext () ; } farealength [curfont ]= 255 ; } else farealength [curfont ]= vfptr - fareastart [ curfont ]; } break ; case 22 : { getfourbytes () ; fontchecksum [curfont ]= curbytes ; } break ; case 23 : { frozendu = true ; if ( designunits == 1048576L ) fontat [curfont ]= getfix () ; else fontat [curfont ]= round ( ( getfix () / ((double) designunits ) ) * 1048576.0 ) ; } break ; case 24 : fontdsize [curfont ]= getfix () ; break ; } finishtheproperty () ; } } else if ( curchar == 41 ) skiptoendofitem () ; else junkerror () ; } { loc = loc - 1 ; level = level + 1 ; curchar = 41 ; } } break ; case 14 : readcharinfo () ; break ; } finishtheproperty () ; } } else if ( ( curchar == 41 ) && ! inputhasended ) { { if ( charsonline > 0 ) fprintf(stdout, "%c\n", ' ' ) ; Fputs(stdout, "Extra right parenthesis" ) ; showerrorcontext () ; } loc = loc + 1 ; curchar = 32 ; } else if ( ! inputhasended ) junkerror () ; } while ( ! ( inputhasended ) ) ; } void #ifdef HAVE_PROTOTYPES corrandcheck ( void ) #else corrandcheck ( ) #endif { short c ; integer hh ; integer ligptr ; byte g ; if ( nl > 0 ) { if ( charremainder [256 ]< 32767 ) { ligkern [nl ].b0 = 255 ; ligkern [nl ].b1 = 0 ; ligkern [nl ].b2 = 0 ; ligkern [nl ].b3 = 0 ; nl = nl + 1 ; } while ( minnl > nl ) { ligkern [nl ].b0 = 255 ; ligkern [nl ].b1 = 0 ; ligkern [nl ].b2 = 0 ; ligkern [nl ].b3 = 0 ; nl = nl + 1 ; } if ( ligkern [nl - 1 ].b0 == 0 ) ligkern [nl - 1 ].b0 = 128 ; } sevenunsafe = false ; {register integer for_end; c = 0 ;for_end = 255 ; if ( c <= for_end) do if ( charwd [c ]!= 0 ) switch ( chartag [c ]) {case 0 : ; break ; case 1 : { ligptr = charremainder [c ]; do { if ( hashinput ( ligptr , c ) ) { if ( ligkern [ligptr ].b2 < 128 ) { if ( ligkern [ligptr ].b1 != bchar ) { g = ligkern [ligptr ].b1 ; if ( charwd [g ]== 0 ) { charwd [g ]= sortin ( 1 , 0 ) ; fprintf(stdout, "%s%c", "LIG character examined by" , ' ' ) ; printoctal ( c ) ; fprintf(stdout, "%s\n", " had no CHARACTER spec." ) ; } } { g = ligkern [ligptr ].b3 ; if ( charwd [g ]== 0 ) { charwd [g ]= sortin ( 1 , 0 ) ; fprintf(stdout, "%s%c", "LIG character generated by" , ' ' ) ; printoctal ( c ) ; fprintf(stdout, "%s\n", " had no CHARACTER spec." ) ; } } if ( ligkern [ligptr ].b3 >= 128 ) if ( ( c < 128 ) || ( c == 256 ) ) if ( ( ligkern [ligptr ].b1 < 128 ) || ( ligkern [ligptr ] .b1 == bchar ) ) sevenunsafe = true ; } else if ( ligkern [ligptr ].b1 != bchar ) { g = ligkern [ligptr ].b1 ; if ( charwd [g ]== 0 ) { charwd [g ]= sortin ( 1 , 0 ) ; fprintf(stdout, "%s%c", "KRN character examined by" , ' ' ) ; printoctal ( c ) ; fprintf(stdout, "%s\n", " had no CHARACTER spec." ) ; } } } if ( ligkern [ligptr ].b0 >= 128 ) ligptr = nl ; else ligptr = ligptr + 1 + ligkern [ligptr ].b0 ; } while ( ! ( ligptr >= nl ) ) ; } break ; case 2 : { g = charremainder [c ]; if ( ( g >= 128 ) && ( c < 128 ) ) sevenunsafe = true ; if ( charwd [g ]== 0 ) { charwd [g ]= sortin ( 1 , 0 ) ; fprintf(stdout, "%s%c", "The character NEXTLARGER than" , ' ' ) ; printoctal ( c ) ; fprintf(stdout, "%s\n", " had no CHARACTER spec." ) ; } } break ; case 3 : { if ( exten [charremainder [c ]].b0 > 0 ) { g = exten [charremainder [c ]].b0 ; if ( ( g >= 128 ) && ( c < 128 ) ) sevenunsafe = true ; if ( charwd [g ]== 0 ) { charwd [g ]= sortin ( 1 , 0 ) ; fprintf(stdout, "%s%c", "TOP piece of character" , ' ' ) ; printoctal ( c ) ; fprintf(stdout, "%s\n", " had no CHARACTER spec." ) ; } } if ( exten [charremainder [c ]].b1 > 0 ) { g = exten [charremainder [c ]].b1 ; if ( ( g >= 128 ) && ( c < 128 ) ) sevenunsafe = true ; if ( charwd [g ]== 0 ) { charwd [g ]= sortin ( 1 , 0 ) ; fprintf(stdout, "%s%c", "MID piece of character" , ' ' ) ; printoctal ( c ) ; fprintf(stdout, "%s\n", " had no CHARACTER spec." ) ; } } if ( exten [charremainder [c ]].b2 > 0 ) { g = exten [charremainder [c ]].b2 ; if ( ( g >= 128 ) && ( c < 128 ) ) sevenunsafe = true ; if ( charwd [g ]== 0 ) { charwd [g ]= sortin ( 1 , 0 ) ; fprintf(stdout, "%s%c", "BOT piece of character" , ' ' ) ; printoctal ( c ) ; fprintf(stdout, "%s\n", " had no CHARACTER spec." ) ; } } { g = exten [charremainder [c ]].b3 ; if ( ( g >= 128 ) && ( c < 128 ) ) sevenunsafe = true ; if ( charwd [g ]== 0 ) { charwd [g ]= sortin ( 1 , 0 ) ; fprintf(stdout, "%s%c", "REP piece of character" , ' ' ) ; printoctal ( c ) ; fprintf(stdout, "%s\n", " had no CHARACTER spec." ) ; } } } break ; } while ( c++ < for_end ) ;} if ( charremainder [256 ]< 32767 ) { c = 256 ; { ligptr = charremainder [c ]; do { if ( hashinput ( ligptr , c ) ) { if ( ligkern [ligptr ].b2 < 128 ) { if ( ligkern [ligptr ].b1 != bchar ) { g = ligkern [ligptr ].b1 ; if ( charwd [g ]== 0 ) { charwd [g ]= sortin ( 1 , 0 ) ; fprintf(stdout, "%s%c", "LIG character examined by" , ' ' ) ; printoctal ( c ) ; fprintf(stdout, "%s\n", " had no CHARACTER spec." ) ; } } { g = ligkern [ligptr ].b3 ; if ( charwd [g ]== 0 ) { charwd [g ]= sortin ( 1 , 0 ) ; fprintf(stdout, "%s%c", "LIG character generated by" , ' ' ) ; printoctal ( c ) ; fprintf(stdout, "%s\n", " had no CHARACTER spec." ) ; } } if ( ligkern [ligptr ].b3 >= 128 ) if ( ( c < 128 ) || ( c == 256 ) ) if ( ( ligkern [ligptr ].b1 < 128 ) || ( ligkern [ligptr ].b1 == bchar ) ) sevenunsafe = true ; } else if ( ligkern [ligptr ].b1 != bchar ) { g = ligkern [ligptr ].b1 ; if ( charwd [g ]== 0 ) { charwd [g ]= sortin ( 1 , 0 ) ; fprintf(stdout, "%s%c", "KRN character examined by" , ' ' ) ; printoctal ( c ) ; fprintf(stdout, "%s\n", " had no CHARACTER spec." ) ; } } } if ( ligkern [ligptr ].b0 >= 128 ) ligptr = nl ; else ligptr = ligptr + 1 + ligkern [ligptr ].b0 ; } while ( ! ( ligptr >= nl ) ) ; } } if ( sevenbitsafeflag && sevenunsafe ) fprintf(stdout, "%s\n", "The font is not really seven-bit-safe!" ) ; if ( hashptr < hashsize ) {register integer for_end; hh = 1 ;for_end = hashptr ; if ( hh <= for_end) do { tt = hashlist [hh ]; if ( classvar [tt ]> 0 ) tt = f ( tt , ( hash [tt ]- 1 ) / 256 , ( hash [tt ]- 1 ) % 256 ) ; } while ( hh++ < for_end ) ;} if ( ( hashptr == hashsize ) || ( yligcycle < 256 ) ) { if ( hashptr < hashsize ) { Fputs(stdout, "Infinite ligature loop starting with " ) ; if ( xligcycle == 256 ) Fputs(stdout, "boundary" ) ; else printoctal ( xligcycle ) ; Fputs(stdout, " and " ) ; printoctal ( yligcycle ) ; fprintf(stdout, "%c\n", '!' ) ; } else fprintf(stdout, "%s\n", "Sorry, I haven't room for so many ligature/kern pairs!" ) ; fprintf(stdout, "%s\n", "All ligatures will be cleared." ) ; {register integer for_end; c = 0 ;for_end = 255 ; if ( c <= for_end) do if ( chartag [c ]== 1 ) { chartag [c ]= 0 ; charremainder [c ]= 0 ; } while ( c++ < for_end ) ;} nl = 0 ; bchar = 256 ; charremainder [256 ]= 32767 ; } if ( nl > 0 ) {register integer for_end; ligptr = 0 ;for_end = nl - 1 ; if ( ligptr <= for_end) do if ( ligkern [ligptr ].b2 < 128 ) { if ( ligkern [ligptr ].b0 < 255 ) { { c = ligkern [ligptr ].b1 ; if ( charwd [c ]== 0 ) if ( c != bchar ) { ligkern [ligptr ].b1 = 0 ; if ( charwd [0 ]== 0 ) charwd [0 ]= sortin ( 1 , 0 ) ; fprintf(stdout, "%s%s%s", "Unused " , "LIG step" , " refers to nonexistent character " ) ; printoctal ( c ) ; fprintf(stdout, "%c\n", '!' ) ; } } { c = ligkern [ligptr ].b3 ; if ( charwd [c ]== 0 ) if ( c != bchar ) { ligkern [ligptr ].b3 = 0 ; if ( charwd [0 ]== 0 ) charwd [0 ]= sortin ( 1 , 0 ) ; fprintf(stdout, "%s%s%s", "Unused " , "LIG step" , " refers to nonexistent character " ) ; printoctal ( c ) ; fprintf(stdout, "%c\n", '!' ) ; } } } } else { c = ligkern [ligptr ].b1 ; if ( charwd [c ]== 0 ) if ( c != bchar ) { ligkern [ligptr ].b1 = 0 ; if ( charwd [0 ]== 0 ) charwd [0 ]= sortin ( 1 , 0 ) ; fprintf(stdout, "%s%s%s", "Unused " , "KRN step" , " refers to nonexistent character " ) ; printoctal ( c ) ; fprintf(stdout, "%c\n", '!' ) ; } } while ( ligptr++ < for_end ) ;} if ( ne > 0 ) {register integer for_end; g = 0 ;for_end = ne - 1 ; if ( g <= for_end) do { { c = exten [g ].b0 ; if ( c > 0 ) if ( charwd [c ]== 0 ) { exten [g ].b0 = 0 ; if ( charwd [0 ]== 0 ) charwd [0 ]= sortin ( 1 , 0 ) ; fprintf(stdout, "%s%s%s", "Unused " , "VARCHAR TOP" , " refers to nonexistent character " ) ; printoctal ( c ) ; fprintf(stdout, "%c\n", '!' ) ; } } { c = exten [g ].b1 ; if ( c > 0 ) if ( charwd [c ]== 0 ) { exten [g ].b1 = 0 ; if ( charwd [0 ]== 0 ) charwd [0 ]= sortin ( 1 , 0 ) ; fprintf(stdout, "%s%s%s", "Unused " , "VARCHAR MID" , " refers to nonexistent character " ) ; printoctal ( c ) ; fprintf(stdout, "%c\n", '!' ) ; } } { c = exten [g ].b2 ; if ( c > 0 ) if ( charwd [c ]== 0 ) { exten [g ].b2 = 0 ; if ( charwd [0 ]== 0 ) charwd [0 ]= sortin ( 1 , 0 ) ; fprintf(stdout, "%s%s%s", "Unused " , "VARCHAR BOT" , " refers to nonexistent character " ) ; printoctal ( c ) ; fprintf(stdout, "%c\n", '!' ) ; } } { c = exten [g ].b3 ; if ( charwd [c ]== 0 ) { exten [g ].b3 = 0 ; if ( charwd [0 ]== 0 ) charwd [0 ]= sortin ( 1 , 0 ) ; fprintf(stdout, "%s%s%s", "Unused " , "VARCHAR REP" , " refers to nonexistent character " ) ; printoctal ( c ) ; fprintf(stdout, "%c\n", '!' ) ; } } } while ( g++ < for_end ) ;} {register integer for_end; c = 0 ;for_end = 255 ; if ( c <= for_end) do if ( chartag [c ]== 2 ) { g = charremainder [c ]; while ( ( g < c ) && ( chartag [g ]== 2 ) ) g = charremainder [g ]; if ( g == c ) { chartag [c ]= 0 ; Fputs(stdout, "A cycle of NEXTLARGER characters has been broken at " ) ; printoctal ( c ) ; fprintf(stdout, "%c\n", '.' ) ; } } while ( c++ < for_end ) ;} delta = shorten ( 1 , 255 ) ; setindices ( 1 , delta ) ; if ( delta > 0 ) { fprintf(stdout, "%s%s%s", "I had to round some " , "width" , "s by " ) ; printreal ( ( ( ( delta + 1 ) / 2 ) / ((double) 1048576L ) ) , 1 , 7 ) ; fprintf(stdout, "%s\n", " units." ) ; } delta = shorten ( 2 , 15 ) ; setindices ( 2 , delta ) ; if ( delta > 0 ) { fprintf(stdout, "%s%s%s", "I had to round some " , "height" , "s by " ) ; printreal ( ( ( ( delta + 1 ) / 2 ) / ((double) 1048576L ) ) , 1 , 7 ) ; fprintf(stdout, "%s\n", " units." ) ; } delta = shorten ( 3 , 15 ) ; setindices ( 3 , delta ) ; if ( delta > 0 ) { fprintf(stdout, "%s%s%s", "I had to round some " , "depth" , "s by " ) ; printreal ( ( ( ( delta + 1 ) / 2 ) / ((double) 1048576L ) ) , 1 , 7 ) ; fprintf(stdout, "%s\n", " units." ) ; } delta = shorten ( 4 , 63 ) ; setindices ( 4 , delta ) ; if ( delta > 0 ) { fprintf(stdout, "%s%s%s", "I had to round some " , "italic correction" , "s by " ) ; printreal ( ( ( ( delta + 1 ) / 2 ) / ((double) 1048576L ) ) , 1 , 7 ) ; fprintf(stdout, "%s\n", " units." ) ; } } void #ifdef HAVE_PROTOTYPES vfoutput ( void ) #else vfoutput ( ) #endif { byte c ; short curfont ; integer k ; putbyte ( 247 , vffile ) ; putbyte ( 202 , vffile ) ; putbyte ( vtitlelength , vffile ) ; {register integer for_end; k = 0 ;for_end = vtitlelength - 1 ; if ( k <= for_end) do putbyte ( vf [vtitlestart + k ], vffile ) ; while ( k++ < for_end ) ;} {register integer for_end; k = 0 ;for_end = 7 ; if ( k <= for_end) do putbyte ( headerbytes [k ], vffile ) ; while ( k++ < for_end ) ;} vcount = vtitlelength + 11 ; {register integer for_end; curfont = 0 ;for_end = fontptr - 1 ; if ( curfont <= for_end) do { putbyte ( 243 , vffile ) ; putbyte ( curfont , vffile ) ; putbyte ( fontchecksum [curfont ].b0 , vffile ) ; putbyte ( fontchecksum [curfont ].b1 , vffile ) ; putbyte ( fontchecksum [curfont ].b2 , vffile ) ; putbyte ( fontchecksum [curfont ].b3 , vffile ) ; voutint ( fontat [curfont ]) ; voutint ( fontdsize [curfont ]) ; putbyte ( farealength [curfont ], vffile ) ; putbyte ( fnamelength [curfont ], vffile ) ; {register integer for_end; k = 0 ;for_end = farealength [curfont ]- 1 ; if ( k <= for_end) do putbyte ( vf [fareastart [curfont ]+ k ], vffile ) ; while ( k++ < for_end ) ;} if ( fnamestart [curfont ]== vfsize ) { putbyte ( 78 , vffile ) ; putbyte ( 85 , vffile ) ; putbyte ( 76 , vffile ) ; putbyte ( 76 , vffile ) ; } else { register integer for_end; k = 0 ;for_end = fnamelength [curfont ]- 1 ; if ( k <= for_end) do putbyte ( vf [fnamestart [curfont ]+ k ], vffile ) ; while ( k++ < for_end ) ;} vcount = vcount + 12 + farealength [curfont ]+ fnamelength [curfont ] ; } while ( curfont++ < for_end ) ;} {register integer for_end; c = bc ;for_end = ec ; if ( c <= for_end) do if ( charwd [c ]> 0 ) { x = memory [charwd [c ]]; if ( designunits != 1048576L ) x = round ( ( x / ((double) designunits ) ) * 1048576.0 ) ; if ( ( packetlength [c ]> 241 ) || ( x < 0 ) || ( x >= 16777216L ) ) { putbyte ( 242 , vffile ) ; voutint ( packetlength [c ]) ; voutint ( c ) ; voutint ( x ) ; vcount = vcount + 13 + packetlength [c ]; } else { putbyte ( packetlength [c ], vffile ) ; putbyte ( c , vffile ) ; putbyte ( x / 65536L , vffile ) ; putbyte ( ( x / 256 ) % 256 , vffile ) ; putbyte ( x % 256 , vffile ) ; vcount = vcount + 5 + packetlength [c ]; } if ( packetstart [c ]== vfsize ) { if ( c >= 128 ) putbyte ( 128 , vffile ) ; putbyte ( c , vffile ) ; } else { register integer for_end; k = 0 ;for_end = packetlength [c ]- 1 ; if ( k <= for_end) do putbyte ( vf [packetstart [c ]+ k ], vffile ) ; while ( k++ < for_end ) ;} } while ( c++ < for_end ) ;} do { putbyte ( 248 , vffile ) ; vcount = vcount + 1 ; } while ( ! ( vcount % 4 == 0 ) ) ; } void mainbody() { initialize () ; nameenter () ; readinput () ; if ( verbose ) fprintf(stdout, "%c\n", '.' ) ; corrandcheck () ; lh = headerptr / 4 ; notfound = true ; bc = 0 ; while ( notfound ) if ( ( charwd [bc ]> 0 ) || ( bc == 255 ) ) notfound = false ; else bc = bc + 1 ; notfound = true ; ec = 255 ; while ( notfound ) if ( ( charwd [ec ]> 0 ) || ( ec == 0 ) ) notfound = false ; else ec = ec - 1 ; if ( bc > ec ) bc = 1 ; memory [1 ]= memory [1 ]+ 1 ; memory [2 ]= memory [2 ]+ 1 ; memory [3 ]= memory [3 ]+ 1 ; memory [4 ]= memory [4 ]+ 1 ; labelptr = 0 ; labeltable [0 ].rr = -1 ; {register integer for_end; c = bc ;for_end = ec ; if ( c <= for_end) do if ( chartag [c ]== 1 ) { sortptr = labelptr ; while ( labeltable [sortptr ].rr > toint ( charremainder [c ]) ) { labeltable [sortptr + 1 ]= labeltable [sortptr ]; sortptr = sortptr - 1 ; } labeltable [sortptr + 1 ].cc = c ; labeltable [sortptr + 1 ].rr = charremainder [c ]; labelptr = labelptr + 1 ; } while ( c++ < for_end ) ;} if ( bchar < 256 ) { extralocneeded = true ; lkoffset = 1 ; } else { extralocneeded = false ; lkoffset = 0 ; } { sortptr = labelptr ; if ( labeltable [sortptr ].rr + lkoffset > 255 ) { lkoffset = 0 ; extralocneeded = false ; do { charremainder [labeltable [sortptr ].cc ]= lkoffset ; while ( labeltable [sortptr - 1 ].rr == labeltable [sortptr ].rr ) { sortptr = sortptr - 1 ; charremainder [labeltable [sortptr ].cc ]= lkoffset ; } lkoffset = lkoffset + 1 ; sortptr = sortptr - 1 ; } while ( ! ( lkoffset + labeltable [sortptr ].rr < 256 ) ) ; } if ( lkoffset > 0 ) while ( sortptr > 0 ) { charremainder [labeltable [sortptr ].cc ]= charremainder [ labeltable [sortptr ].cc ]+ lkoffset ; sortptr = sortptr - 1 ; } } if ( charremainder [256 ]< 32767 ) { ligkern [nl - 1 ].b2 = ( charremainder [256 ]+ lkoffset ) / 256 ; ligkern [nl - 1 ].b3 = ( charremainder [256 ]+ lkoffset ) % 256 ; } lf = 6 + lh + ( ec - bc + 1 ) + memory [1 ]+ memory [2 ]+ memory [3 ]+ memory [4 ]+ nl + lkoffset + nk + ne + np ; putbyte ( ( lf ) / 256 , tfmfile ) ; putbyte ( ( lf ) % 256 , tfmfile ) ; putbyte ( ( lh ) / 256 , tfmfile ) ; putbyte ( ( lh ) % 256 , tfmfile ) ; putbyte ( ( bc ) / 256 , tfmfile ) ; putbyte ( ( bc ) % 256 , tfmfile ) ; putbyte ( ( ec ) / 256 , tfmfile ) ; putbyte ( ( ec ) % 256 , tfmfile ) ; putbyte ( ( memory [1 ]) / 256 , tfmfile ) ; putbyte ( ( memory [1 ]) % 256 , tfmfile ) ; putbyte ( ( memory [2 ]) / 256 , tfmfile ) ; putbyte ( ( memory [2 ]) % 256 , tfmfile ) ; putbyte ( ( memory [3 ]) / 256 , tfmfile ) ; putbyte ( ( memory [3 ]) % 256 , tfmfile ) ; putbyte ( ( memory [4 ]) / 256 , tfmfile ) ; putbyte ( ( memory [4 ]) % 256 , tfmfile ) ; putbyte ( ( nl + lkoffset ) / 256 , tfmfile ) ; putbyte ( ( nl + lkoffset ) % 256 , tfmfile ) ; putbyte ( ( nk ) / 256 , tfmfile ) ; putbyte ( ( nk ) % 256 , tfmfile ) ; putbyte ( ( ne ) / 256 , tfmfile ) ; putbyte ( ( ne ) % 256 , tfmfile ) ; putbyte ( ( np ) / 256 , tfmfile ) ; putbyte ( ( np ) % 256 , tfmfile ) ; if ( ! checksumspecified ) { curbytes .b0 = bc ; curbytes .b1 = ec ; curbytes .b2 = bc ; curbytes .b3 = ec ; {register integer for_end; c = bc ;for_end = ec ; if ( c <= for_end) do if ( charwd [c ]> 0 ) { tempwidth = memory [charwd [c ]]; if ( designunits != 1048576L ) tempwidth = round ( ( tempwidth / ((double) designunits ) ) * 1048576.0 ) ; tempwidth = tempwidth + ( c + 4 ) * 4194304L ; curbytes .b0 = ( curbytes .b0 + curbytes .b0 + tempwidth ) % 255 ; curbytes .b1 = ( curbytes .b1 + curbytes .b1 + tempwidth ) % 253 ; curbytes .b2 = ( curbytes .b2 + curbytes .b2 + tempwidth ) % 251 ; curbytes .b3 = ( curbytes .b3 + curbytes .b3 + tempwidth ) % 247 ; } while ( c++ < for_end ) ;} headerbytes [0 ]= curbytes .b0 ; headerbytes [1 ]= curbytes .b1 ; headerbytes [2 ]= curbytes .b2 ; headerbytes [3 ]= curbytes .b3 ; } headerbytes [4 ]= designsize / 16777216L ; headerbytes [5 ]= ( designsize / 65536L ) % 256 ; headerbytes [6 ]= ( designsize / 256 ) % 256 ; headerbytes [7 ]= designsize % 256 ; if ( ! sevenunsafe ) headerbytes [68 ]= 128 ; {register integer for_end; j = 0 ;for_end = headerptr - 1 ; if ( j <= for_end) do putbyte ( headerbytes [j ], tfmfile ) ; while ( j++ < for_end ) ;} indexvar [0 ]= 0 ; {register integer for_end; c = bc ;for_end = ec ; if ( c <= for_end) do { putbyte ( indexvar [charwd [c ]], tfmfile ) ; putbyte ( indexvar [charht [c ]]* 16 + indexvar [chardp [c ]], tfmfile ) ; putbyte ( indexvar [charic [c ]]* 4 + chartag [c ], tfmfile ) ; putbyte ( charremainder [c ], tfmfile ) ; } while ( c++ < for_end ) ;} {register integer for_end; q = 1 ;for_end = 4 ; if ( q <= for_end) do { putbyte ( 0 , tfmfile ) ; putbyte ( 0 , tfmfile ) ; putbyte ( 0 , tfmfile ) ; putbyte ( 0 , tfmfile ) ; p = link [q ]; while ( p > 0 ) { outscaled ( memory [p ]) ; p = link [p ]; } } while ( q++ < for_end ) ;} if ( extralocneeded ) { putbyte ( 255 , tfmfile ) ; putbyte ( bchar , tfmfile ) ; putbyte ( 0 , tfmfile ) ; putbyte ( 0 , tfmfile ) ; } else { register integer for_end; sortptr = 1 ;for_end = lkoffset ; if ( sortptr <= for_end) do { t = labeltable [labelptr ].rr ; if ( bchar < 256 ) { putbyte ( 255 , tfmfile ) ; putbyte ( bchar , tfmfile ) ; } else { putbyte ( 254 , tfmfile ) ; putbyte ( 0 , tfmfile ) ; } putbyte ( ( t + lkoffset ) / 256 , tfmfile ) ; putbyte ( ( t + lkoffset ) % 256 , tfmfile ) ; do { labelptr = labelptr - 1 ; } while ( ! ( labeltable [labelptr ].rr < t ) ) ; } while ( sortptr++ < for_end ) ;} if ( nl > 0 ) {register integer for_end; ligptr = 0 ;for_end = nl - 1 ; if ( ligptr <= for_end) do { putbyte ( ligkern [ligptr ].b0 , tfmfile ) ; putbyte ( ligkern [ligptr ].b1 , tfmfile ) ; putbyte ( ligkern [ligptr ].b2 , tfmfile ) ; putbyte ( ligkern [ligptr ].b3 , tfmfile ) ; } while ( ligptr++ < for_end ) ;} if ( nk > 0 ) {register integer for_end; krnptr = 0 ;for_end = nk - 1 ; if ( krnptr <= for_end) do outscaled ( kern [krnptr ]) ; while ( krnptr++ < for_end ) ;} if ( ne > 0 ) {register integer for_end; c = 0 ;for_end = ne - 1 ; if ( c <= for_end) do { putbyte ( exten [c ].b0 , tfmfile ) ; putbyte ( exten [c ].b1 , tfmfile ) ; putbyte ( exten [c ].b2 , tfmfile ) ; putbyte ( exten [c ].b3 , tfmfile ) ; } while ( c++ < for_end ) ;} {register integer for_end; parptr = 1 ;for_end = np ; if ( parptr <= for_end) do { if ( parptr == 1 ) { if ( param [1 ]< 0 ) { param [1 ]= param [1 ]+ 1073741824L ; putbyte ( ( param [1 ]/ 16777216L ) + 192 , tfmfile ) ; } else putbyte ( param [1 ]/ 16777216L , tfmfile ) ; putbyte ( ( param [1 ]/ 65536L ) % 256 , tfmfile ) ; putbyte ( ( param [1 ]/ 256 ) % 256 , tfmfile ) ; putbyte ( param [1 ]% 256 , tfmfile ) ; } else outscaled ( param [parptr ]) ; } while ( parptr++ < for_end ) ;} vfoutput () ; }