#define EXTERN extern #include "mpd.h" void #ifdef HAVE_PROTOTYPES dospecial ( void ) #else dospecial ( ) #endif { getxnext () ; scanexpression () ; if ( curtype != 4 ) { disperr ( 0 , 1148 ) ; { helpptr = 1 ; helpline [0 ]= 1149 ; } putgeterror () ; } else { mem [lastpending ].hhfield .v.RH = stashcurexp () ; lastpending = mem [lastpending ].hhfield .v.RH ; mem [lastpending ].hhfield .v.RH = 0 ; } } void #ifdef HAVE_PROTOTYPES dostatement ( void ) #else dostatement ( ) #endif { curtype = 1 ; getxnext () ; if ( curcmd > 45 ) { if ( curcmd < 82 ) { { if ( interaction == 3 ) ; printnl ( 262 ) ; print ( 917 ) ; } printcmdmod ( curcmd , curmod ) ; printchar ( 39 ) ; { helpptr = 5 ; helpline [4 ]= 918 ; helpline [3 ]= 919 ; helpline [2 ]= 920 ; helpline [1 ]= 921 ; helpline [0 ]= 922 ; } backerror () ; getxnext () ; } } else if ( curcmd > 32 ) { varflag = 76 ; scanexpression () ; if ( curcmd < 83 ) { if ( curcmd == 53 ) doequation () ; else if ( curcmd == 76 ) doassignment () ; else if ( curtype == 4 ) { if ( internal [1 ]> 0 ) { printnl ( 284 ) ; print ( curexp ) ; fflush ( stdout ) ; } } else if ( curtype != 1 ) { disperr ( 0 , 927 ) ; { helpptr = 3 ; helpline [2 ]= 928 ; helpline [1 ]= 929 ; helpline [0 ]= 930 ; } putgeterror () ; } flushcurexp ( 0 ) ; curtype = 1 ; } } else { if ( internal [6 ]> 0 ) showcmdmod ( curcmd , curmod ) ; switch ( curcmd ) {case 32 : dotypedeclaration () ; break ; case 18 : if ( curmod > 2 ) makeopdef () ; else if ( curmod > 0 ) scandef () ; break ; case 26 : dorandomseed () ; break ; case 25 : { println () ; interaction = curmod ; if ( interaction == 0 ) kpsemaketexdiscarderrors = 1 ; else kpsemaketexdiscarderrors = 0 ; if ( interaction == 0 ) selector = 7 ; else selector = 8 ; if ( logopened ) selector = selector + 2 ; getxnext () ; } break ; case 23 : doprotection () ; break ; case 29 : defdelims () ; break ; case 14 : do { getsymbol () ; savevariable ( cursym ) ; getxnext () ; } while ( ! ( curcmd != 81 ) ) ; break ; case 15 : dointerim () ; break ; case 16 : dolet () ; break ; case 17 : donewinternal () ; break ; case 24 : doshowwhatever () ; break ; case 20 : doaddto () ; break ; case 21 : dobounds () ; break ; case 19 : doshipout () ; break ; case 28 : { getsymbol () ; startsym = cursym ; getxnext () ; } break ; case 27 : domessage () ; break ; case 31 : dowrite () ; break ; case 22 : dotfmcommand () ; break ; case 30 : dospecial () ; break ; } curtype = 1 ; } if ( curcmd < 82 ) { { if ( interaction == 3 ) ; printnl ( 262 ) ; print ( 923 ) ; } { helpptr = 6 ; helpline [5 ]= 924 ; helpline [4 ]= 925 ; helpline [3 ]= 926 ; helpline [2 ]= 920 ; helpline [1 ]= 921 ; helpline [0 ]= 922 ; } backerror () ; scannerstatus = 2 ; do { { getnext () ; if ( curcmd <= 3 ) tnext () ; } if ( curcmd == 41 ) { if ( strref [curmod ]< 127 ) if ( strref [curmod ]> 1 ) decr ( strref [curmod ]) ; else flushstring ( curmod ) ; } } while ( ! ( curcmd > 81 ) ) ; scannerstatus = 0 ; } errorcount = 0 ; } void #ifdef HAVE_PROTOTYPES maincontrol ( void ) #else maincontrol ( ) #endif { do { dostatement () ; if ( curcmd == 83 ) { { if ( interaction == 3 ) ; printnl ( 262 ) ; print ( 958 ) ; } { helpptr = 2 ; helpline [1 ]= 959 ; helpline [0 ]= 730 ; } flusherror ( 0 ) ; } } while ( ! ( curcmd == 84 ) ) ; } halfword #ifdef HAVE_PROTOTYPES zsortin ( scaled v ) #else zsortin ( v ) scaled v ; #endif { /* 40 */ register halfword Result; halfword p, q, r ; p = memtop - 1 ; while ( true ) { q = mem [p ].hhfield .v.RH ; if ( v <= mem [q + 1 ].cint ) goto lab40 ; p = q ; } lab40: if ( v < mem [q + 1 ].cint ) { r = getnode ( 2 ) ; mem [r + 1 ].cint = v ; mem [r ].hhfield .v.RH = q ; mem [p ].hhfield .v.RH = r ; } Result = mem [p ].hhfield .v.RH ; return Result ; } integer #ifdef HAVE_PROTOTYPES zmincover ( scaled d ) #else zmincover ( d ) scaled d ; #endif { register integer Result; halfword p ; scaled l ; integer m ; m = 0 ; p = mem [memtop - 1 ].hhfield .v.RH ; perturbation = 2147483647L ; while ( p != 11 ) { incr ( m ) ; l = mem [p + 1 ].cint ; do { p = mem [p ].hhfield .v.RH ; } while ( ! ( mem [p + 1 ].cint > l + d ) ) ; if ( mem [p + 1 ].cint - l < perturbation ) perturbation = mem [p + 1 ].cint - l ; } Result = m ; return Result ; } scaled #ifdef HAVE_PROTOTYPES zcomputethreshold ( integer m ) #else zcomputethreshold ( m ) integer m ; #endif { register scaled Result; scaled d ; excess = mincover ( 0 ) - m ; if ( excess <= 0 ) Result = 0 ; else { do { d = perturbation ; } while ( ! ( mincover ( d + d ) <= m ) ) ; while ( mincover ( d ) > m ) d = perturbation ; Result = d ; } return Result ; } integer #ifdef HAVE_PROTOTYPES zskimp ( integer m ) #else zskimp ( m ) integer m ; #endif { register integer Result; scaled d ; halfword p, q, r ; scaled l ; scaled v ; d = computethreshold ( m ) ; perturbation = 0 ; q = memtop - 1 ; m = 0 ; p = mem [memtop - 1 ].hhfield .v.RH ; while ( p != 11 ) { incr ( m ) ; l = mem [p + 1 ].cint ; mem [p ].hhfield .lhfield = m ; if ( mem [mem [p ].hhfield .v.RH + 1 ].cint <= l + d ) { do { p = mem [p ].hhfield .v.RH ; mem [p ].hhfield .lhfield = m ; decr ( excess ) ; if ( excess == 0 ) d = 0 ; } while ( ! ( mem [mem [p ].hhfield .v.RH + 1 ].cint > l + d ) ) ; v = l + halfp ( mem [p + 1 ].cint - l ) ; if ( mem [p + 1 ].cint - v > perturbation ) perturbation = mem [p + 1 ].cint - v ; r = q ; do { r = mem [r ].hhfield .v.RH ; mem [r + 1 ].cint = v ; } while ( ! ( r == p ) ) ; mem [q ].hhfield .v.RH = p ; } q = p ; p = mem [p ].hhfield .v.RH ; } Result = m ; return Result ; } void #ifdef HAVE_PROTOTYPES ztfmwarning ( smallnumber m ) #else ztfmwarning ( m ) smallnumber m ; #endif { printnl ( 1088 ) ; print ( intname [m ]) ; print ( 1089 ) ; printscaled ( perturbation ) ; print ( 1090 ) ; } void #ifdef HAVE_PROTOTYPES fixdesignsize ( void ) #else fixdesignsize ( ) #endif { scaled d ; d = internal [23 ]; if ( ( d < 65536L ) || ( d >= 134217728L ) ) { if ( d != 0 ) printnl ( 1091 ) ; d = 8388608L ; internal [23 ]= d ; } if ( headerbyte [5 ]< 0 ) if ( headerbyte [6 ]< 0 ) if ( headerbyte [7 ]< 0 ) if ( headerbyte [8 ]< 0 ) { headerbyte [5 ]= d / 1048576L ; headerbyte [6 ]= ( d / 4096 ) % 256 ; headerbyte [7 ]= ( d / 16 ) % 256 ; headerbyte [8 ]= ( d % 16 ) * 16 ; } maxtfmdimen = 16 * internal [23 ]- internal [23 ]/ 2097152L ; if ( maxtfmdimen >= 134217728L ) maxtfmdimen = 134217727L ; } integer #ifdef HAVE_PROTOTYPES zdimenout ( scaled x ) #else zdimenout ( x ) scaled x ; #endif { register integer Result; if ( abs ( x ) > maxtfmdimen ) { incr ( tfmchanged ) ; if ( x > 0 ) x = 16777215L ; else x = -16777215L ; } else x = makescaled ( x * 16 , internal [23 ]) ; Result = x ; return Result ; } void #ifdef HAVE_PROTOTYPES fixchecksum ( void ) #else fixchecksum ( ) #endif { /* 10 */ eightbits k ; eightbits lb1, lb2, lb3, b4 ; integer x ; if ( headerbyte [1 ]< 0 ) if ( headerbyte [2 ]< 0 ) if ( headerbyte [3 ]< 0 ) if ( headerbyte [4 ]< 0 ) { lb1 = bc ; lb2 = ec ; lb3 = bc ; b4 = ec ; tfmchanged = 0 ; {register integer for_end; k = bc ;for_end = ec ; if ( k <= for_end) do if ( charexists [k ]) { x = dimenout ( mem [tfmwidth [k ]+ 1 ].cint ) + ( k + 4 ) * 4194304L ; lb1 = ( lb1 + lb1 + x ) % 255 ; lb2 = ( lb2 + lb2 + x ) % 253 ; lb3 = ( lb3 + lb3 + x ) % 251 ; b4 = ( b4 + b4 + x ) % 247 ; } while ( k++ < for_end ) ;} headerbyte [1 ]= lb1 ; headerbyte [2 ]= lb2 ; headerbyte [3 ]= lb3 ; headerbyte [4 ]= b4 ; goto lab10 ; } {register integer for_end; k = 1 ;for_end = 4 ; if ( k <= for_end) do if ( headerbyte [k ]< 0 ) headerbyte [k ]= 0 ; while ( k++ < for_end ) ;} lab10: ; } void #ifdef HAVE_PROTOTYPES ztfmqqqq ( fourquarters x ) #else ztfmqqqq ( x ) fourquarters x ; #endif { putbyte ( x .b0 , tfmfile ) ; putbyte ( x .b1 , tfmfile ) ; putbyte ( x .b2 , tfmfile ) ; putbyte ( x .b3 , tfmfile ) ; } boolean #ifdef HAVE_PROTOTYPES openmemfile ( void ) #else openmemfile ( ) #endif { /* 40 10 */ register boolean Result; integer j ; j = curinput .locfield ; if ( buffer [curinput .locfield ]== 38 ) { incr ( curinput .locfield ) ; j = curinput .locfield ; buffer [last ]= 32 ; while ( buffer [j ]!= 32 ) incr ( j ) ; packbufferedname ( 0 , curinput .locfield , j - 1 ) ; if ( wopenin ( memfile ) ) goto lab40 ; Fputs( stdout , "Sorry, I can't find the mem file `" ) ; fputs ( (char*) nameoffile + 1 , stdout ) ; Fputs( stdout , "'; will try `" ) ; fputs ( MPmemdefault + 1 , stdout ) ; fprintf( stdout , "%s\n", "'." ) ; fflush ( stdout ) ; } packbufferedname ( memdefaultlength - 4 , 1 , 0 ) ; if ( ! wopenin ( memfile ) ) { ; Fputs( stdout , "I can't find the mem file `" ) ; fputs ( MPmemdefault + 1 , stdout ) ; fprintf( stdout , "%s\n", "'!" ) ; Result = false ; goto lab10 ; } lab40: curinput .locfield = j ; Result = true ; lab10: ; return Result ; } void #ifdef HAVE_PROTOTYPES scanprimary ( void ) #else scanprimary ( ) #endif { /* 20 30 31 32 */ halfword p, q, r ; quarterword c ; char myvarflag ; halfword ldelim, rdelim ; integer groupline ; scaled num, denom ; halfword prehead, posthead, tail ; smallnumber tt ; halfword t ; halfword macroref ; myvarflag = varflag ; varflag = 0 ; lab20: { if ( aritherror ) cleararith () ; } ; #ifdef TEXMF_DEBUG if ( panicking ) checkmem ( false ) ; #endif /* TEXMF_DEBUG */ if ( interrupt != 0 ) if ( OKtointerrupt ) { backinput () ; { if ( interrupt != 0 ) pauseforinstructions () ; } getxnext () ; } switch ( curcmd ) {case 33 : { ldelim = cursym ; rdelim = curmod ; getxnext () ; scanexpression () ; if ( ( curcmd == 81 ) && ( curtype >= 16 ) ) { p = stashcurexp () ; getxnext () ; scanexpression () ; if ( curtype < 16 ) { disperr ( 0 , 824 ) ; { helpptr = 4 ; helpline [3 ]= 825 ; helpline [2 ]= 826 ; helpline [1 ]= 827 ; helpline [0 ]= 828 ; } putgetflusherror ( 0 ) ; } q = getnode ( 2 ) ; mem [q ].hhfield .b1 = 14 ; if ( curcmd == 81 ) mem [q ].hhfield .b0 = 13 ; else mem [q ].hhfield .b0 = 14 ; initbignode ( q ) ; r = mem [q + 1 ].cint ; stashin ( r + 2 ) ; unstashcurexp ( p ) ; stashin ( r ) ; if ( curcmd == 81 ) { getxnext () ; scanexpression () ; if ( curtype < 16 ) { disperr ( 0 , 829 ) ; { helpptr = 3 ; helpline [2 ]= 830 ; helpline [1 ]= 827 ; helpline [0 ]= 828 ; } putgetflusherror ( 0 ) ; } stashin ( r + 4 ) ; } checkdelimiter ( ldelim , rdelim ) ; curtype = mem [q ].hhfield .b0 ; curexp = q ; } else checkdelimiter ( ldelim , rdelim ) ; } break ; case 34 : { groupline = trueline () ; if ( internal [6 ]> 0 ) showcmdmod ( curcmd , curmod ) ; { p = getavail () ; mem [p ].hhfield .lhfield = 0 ; mem [p ].hhfield .v.RH = saveptr ; saveptr = p ; } do { dostatement () ; } while ( ! ( curcmd != 82 ) ) ; if ( curcmd != 83 ) { { if ( interaction == 3 ) ; printnl ( 262 ) ; print ( 831 ) ; } printint ( groupline ) ; print ( 832 ) ; { helpptr = 2 ; helpline [1 ]= 833 ; helpline [0 ]= 834 ; } backerror () ; curcmd = 83 ; } unsave () ; if ( internal [6 ]> 0 ) showcmdmod ( curcmd , curmod ) ; } break ; case 41 : { curtype = 4 ; curexp = curmod ; } break ; case 44 : { curexp = curmod ; curtype = 16 ; getxnext () ; if ( curcmd != 56 ) { num = 0 ; denom = 0 ; } else { getxnext () ; if ( curcmd != 44 ) { backinput () ; curcmd = 56 ; curmod = 92 ; cursym = 9761 ; goto lab30 ; } num = curexp ; denom = curmod ; if ( denom == 0 ) { { if ( interaction == 3 ) ; printnl ( 262 ) ; print ( 835 ) ; } { helpptr = 1 ; helpline [0 ]= 836 ; } error () ; } else curexp = makescaled ( num , denom ) ; { if ( aritherror ) cleararith () ; } getxnext () ; } if ( curcmd >= 32 ) if ( curcmd < 44 ) { p = stashcurexp () ; scanprimary () ; if ( ( abs ( num ) >= abs ( denom ) ) || ( curtype < 13 ) ) dobinary ( p , 91 ) ; else { fracmult ( num , denom ) ; freenode ( p , 2 ) ; } } goto lab30 ; } break ; case 35 : donullary ( curmod ) ; break ; case 36 : case 32 : case 38 : case 45 : { c = curmod ; getxnext () ; scanprimary () ; dounary ( c ) ; goto lab30 ; } break ; case 39 : { c = curmod ; getxnext () ; scanexpression () ; if ( curcmd != 70 ) { missingerr ( 489 ) ; print ( 756 ) ; printcmdmod ( 39 , c ) ; { helpptr = 1 ; helpline [0 ]= 757 ; } backerror () ; } p = stashcurexp () ; getxnext () ; scanprimary () ; dobinary ( p , c ) ; goto lab30 ; } break ; case 37 : { getxnext () ; scansuffix () ; oldsetting = selector ; selector = 4 ; showtokenlist ( curexp , 0 , 100000L , 0 ) ; flushtokenlist ( curexp ) ; curexp = makestring () ; selector = oldsetting ; curtype = 4 ; goto lab30 ; } break ; case 42 : { q = curmod ; if ( myvarflag == 76 ) { getxnext () ; if ( curcmd == 76 ) { curexp = getavail () ; mem [curexp ].hhfield .lhfield = q + 9771 ; curtype = 20 ; goto lab30 ; } backinput () ; } curtype = 16 ; curexp = internal [q ]; } break ; case 40 : makeexpcopy ( curmod ) ; break ; case 43 : { { prehead = avail ; if ( prehead == 0 ) prehead = getavail () ; else { avail = mem [prehead ].hhfield .v.RH ; mem [prehead ].hhfield .v.RH = 0 ; ; #ifdef STAT incr ( dynused ) ; #endif /* STAT */ } } tail = prehead ; posthead = 0 ; tt = 1 ; while ( true ) { t = curtok () ; mem [tail ].hhfield .v.RH = t ; if ( tt != 0 ) { { p = mem [prehead ].hhfield .v.RH ; q = mem [p ].hhfield .lhfield ; tt = 0 ; if ( eqtb [q ].lhfield % 85 == 43 ) { q = eqtb [q ].v.RH ; if ( q == 0 ) goto lab32 ; while ( true ) { p = mem [p ].hhfield .v.RH ; if ( p == 0 ) { tt = mem [q ].hhfield .b0 ; goto lab32 ; } if ( mem [q ].hhfield .b0 != 21 ) goto lab32 ; q = mem [mem [q + 1 ].hhfield .lhfield ].hhfield .v.RH ; if ( p >= himemmin ) { do { q = mem [q ].hhfield .v.RH ; } while ( ! ( mem [q + 2 ].hhfield .lhfield >= mem [p ] .hhfield .lhfield ) ) ; if ( mem [q + 2 ].hhfield .lhfield > mem [p ].hhfield .lhfield ) goto lab32 ; } } } lab32: ; } if ( tt >= 22 ) { mem [tail ].hhfield .v.RH = 0 ; if ( tt > 22 ) { posthead = getavail () ; tail = posthead ; mem [tail ].hhfield .v.RH = t ; tt = 0 ; macroref = mem [q + 1 ].cint ; incr ( mem [macroref ].hhfield .lhfield ) ; } else { p = getavail () ; mem [prehead ].hhfield .lhfield = mem [prehead ].hhfield .v.RH ; mem [prehead ].hhfield .v.RH = p ; mem [p ].hhfield .lhfield = t ; macrocall ( mem [q + 1 ].cint , prehead , 0 ) ; getxnext () ; goto lab20 ; } } } getxnext () ; tail = t ; if ( curcmd == 65 ) { getxnext () ; scanexpression () ; if ( curcmd != 66 ) { backinput () ; backexpr () ; curcmd = 65 ; curmod = 0 ; cursym = 9760 ; } else { if ( curtype != 16 ) badsubscript () ; curcmd = 44 ; curmod = curexp ; cursym = 0 ; } } if ( curcmd > 44 ) goto lab31 ; if ( curcmd < 42 ) goto lab31 ; } lab31: if ( posthead != 0 ) { backinput () ; p = getavail () ; q = mem [posthead ].hhfield .v.RH ; mem [prehead ].hhfield .lhfield = mem [prehead ].hhfield .v.RH ; mem [prehead ].hhfield .v.RH = posthead ; mem [posthead ].hhfield .lhfield = q ; mem [posthead ].hhfield .v.RH = p ; mem [p ].hhfield .lhfield = mem [q ].hhfield .v.RH ; mem [q ].hhfield .v.RH = 0 ; macrocall ( macroref , prehead , 0 ) ; decr ( mem [macroref ].hhfield .lhfield ) ; getxnext () ; goto lab20 ; } q = mem [prehead ].hhfield .v.RH ; { mem [prehead ].hhfield .v.RH = avail ; avail = prehead ; ; #ifdef STAT decr ( dynused ) ; #endif /* STAT */ } if ( curcmd == myvarflag ) { curtype = 20 ; curexp = q ; goto lab30 ; } p = findvariable ( q ) ; if ( p != 0 ) makeexpcopy ( p ) ; else { obliterated ( q ) ; helpline [2 ]= 848 ; helpline [1 ]= 849 ; helpline [0 ]= 850 ; putgetflusherror ( 0 ) ; } flushnodelist ( q ) ; goto lab30 ; } break ; default: { badexp ( 818 ) ; goto lab20 ; } break ; } getxnext () ; lab30: if ( curcmd == 65 ) if ( curtype >= 16 ) { p = stashcurexp () ; getxnext () ; scanexpression () ; if ( curcmd != 81 ) { { backinput () ; backexpr () ; curcmd = 65 ; curmod = 0 ; cursym = 9760 ; } unstashcurexp ( p ) ; } else { q = stashcurexp () ; getxnext () ; scanexpression () ; if ( curcmd != 66 ) { missingerr ( 93 ) ; { helpptr = 3 ; helpline [2 ]= 852 ; helpline [1 ]= 853 ; helpline [0 ]= 738 ; } backerror () ; } r = stashcurexp () ; makeexpcopy ( q ) ; dobinary ( r , 90 ) ; dobinary ( p , 91 ) ; dobinary ( q , 89 ) ; getxnext () ; } } } void #ifdef HAVE_PROTOTYPES scansuffix ( void ) #else scansuffix ( ) #endif { /* 30 */ halfword h, t ; halfword p ; h = getavail () ; t = h ; while ( true ) { if ( curcmd == 65 ) { getxnext () ; scanexpression () ; if ( curtype != 16 ) badsubscript () ; if ( curcmd != 66 ) { missingerr ( 93 ) ; { helpptr = 3 ; helpline [2 ]= 854 ; helpline [1 ]= 853 ; helpline [0 ]= 738 ; } backerror () ; } curcmd = 44 ; curmod = curexp ; } if ( curcmd == 44 ) p = newnumtok ( curmod ) ; else if ( ( curcmd == 43 ) || ( curcmd == 42 ) ) { p = getavail () ; mem [p ].hhfield .lhfield = cursym ; } else goto lab30 ; mem [t ].hhfield .v.RH = p ; t = p ; getxnext () ; } lab30: curexp = mem [h ].hhfield .v.RH ; { mem [h ].hhfield .v.RH = avail ; avail = h ; ; #ifdef STAT decr ( dynused ) ; #endif /* STAT */ } curtype = 20 ; } void #ifdef HAVE_PROTOTYPES scansecondary ( void ) #else scansecondary ( ) #endif { /* 20 22 */ halfword p ; halfword c, d ; halfword macname ; lab20: if ( ( curcmd < 32 ) || ( curcmd > 45 ) ) badexp ( 855 ) ; scanprimary () ; lab22: if ( curcmd <= 57 ) if ( curcmd >= 54 ) { p = stashcurexp () ; c = curmod ; d = curcmd ; if ( d == 55 ) { macname = cursym ; incr ( mem [c ].hhfield .lhfield ) ; } getxnext () ; scanprimary () ; if ( d != 55 ) dobinary ( p , c ) ; else { backinput () ; binarymac ( p , c , macname ) ; decr ( mem [c ].hhfield .lhfield ) ; getxnext () ; goto lab20 ; } goto lab22 ; } } void #ifdef HAVE_PROTOTYPES scantertiary ( void ) #else scantertiary ( ) #endif { /* 20 22 */ halfword p ; halfword c, d ; halfword macname ; lab20: if ( ( curcmd < 32 ) || ( curcmd > 45 ) ) badexp ( 856 ) ; scansecondary () ; lab22: if ( curcmd <= 47 ) if ( curcmd >= 45 ) { p = stashcurexp () ; c = curmod ; d = curcmd ; if ( d == 46 ) { macname = cursym ; incr ( mem [c ].hhfield .lhfield ) ; } getxnext () ; scansecondary () ; if ( d != 46 ) dobinary ( p , c ) ; else { backinput () ; binarymac ( p , c , macname ) ; decr ( mem [c ].hhfield .lhfield ) ; getxnext () ; goto lab20 ; } goto lab22 ; } } void #ifdef HAVE_PROTOTYPES scanexpression ( void ) #else scanexpression ( ) #endif { /* 20 30 22 25 26 10 */ halfword p, q, r, pp, qq ; halfword c, d ; char myvarflag ; halfword macname ; boolean cyclehit ; scaled x, y ; char t ; myvarflag = varflag ; lab20: if ( ( curcmd < 32 ) || ( curcmd > 45 ) ) badexp ( 857 ) ; scantertiary () ; lab22: if ( curcmd <= 53 ) if ( curcmd >= 48 ) if ( ( curcmd != 53 ) || ( myvarflag != 76 ) ) { p = stashcurexp () ; c = curmod ; d = curcmd ; if ( d == 51 ) { macname = cursym ; incr ( mem [c ].hhfield .lhfield ) ; } if ( ( d < 50 ) || ( ( d == 50 ) && ( ( mem [p ].hhfield .b0 == 14 ) || ( mem [p ].hhfield .b0 == 8 ) ) ) ) { cyclehit = false ; { unstashcurexp ( p ) ; if ( curtype == 14 ) p = newknot () ; else if ( curtype == 8 ) p = curexp ; else goto lab10 ; q = p ; while ( mem [q ].hhfield .v.RH != p ) q = mem [q ].hhfield .v.RH ; if ( mem [p ].hhfield .b0 != 0 ) { r = copyknot ( p ) ; mem [q ].hhfield .v.RH = r ; q = r ; } mem [p ].hhfield .b0 = 4 ; mem [q ].hhfield .b1 = 4 ; } lab25: if ( curcmd == 48 ) { t = scandirection () ; if ( t != 4 ) { mem [q ].hhfield .b1 = t ; mem [q + 5 ].cint = curexp ; if ( mem [q ].hhfield .b0 == 4 ) { mem [q ].hhfield .b0 = t ; mem [q + 3 ].cint = curexp ; } } } d = curcmd ; if ( d == 49 ) { getxnext () ; if ( curcmd == 60 ) { getxnext () ; y = curcmd ; if ( curcmd == 61 ) getxnext () ; scanprimary () ; if ( ( curtype != 16 ) || ( curexp < 49152L ) ) { disperr ( 0 , 875 ) ; { helpptr = 1 ; helpline [0 ]= 876 ; } putgetflusherror ( 65536L ) ; } if ( y == 61 ) curexp = - (integer) curexp ; mem [q + 6 ].cint = curexp ; if ( curcmd == 54 ) { getxnext () ; y = curcmd ; if ( curcmd == 61 ) getxnext () ; scanprimary () ; if ( ( curtype != 16 ) || ( curexp < 49152L ) ) { disperr ( 0 , 875 ) ; { helpptr = 1 ; helpline [0 ]= 876 ; } putgetflusherror ( 65536L ) ; } if ( y == 61 ) curexp = - (integer) curexp ; } y = curexp ; } else if ( curcmd == 59 ) { mem [q ].hhfield .b1 = 1 ; t = 1 ; getxnext () ; scanprimary () ; knownpair () ; mem [q + 5 ].cint = curx ; mem [q + 6 ].cint = cury ; if ( curcmd != 54 ) { x = mem [q + 5 ].cint ; y = mem [q + 6 ].cint ; } else { getxnext () ; scanprimary () ; knownpair () ; x = curx ; y = cury ; } } else { mem [q + 6 ].cint = 65536L ; y = 65536L ; backinput () ; goto lab30 ; } if ( curcmd != 49 ) { missingerr ( 321 ) ; { helpptr = 1 ; helpline [0 ]= 874 ; } backerror () ; } lab30: ; } else if ( d != 50 ) goto lab26 ; getxnext () ; if ( curcmd == 48 ) { t = scandirection () ; if ( mem [q ].hhfield .b1 != 1 ) x = curexp ; else t = 1 ; } else if ( mem [q ].hhfield .b1 != 1 ) { t = 4 ; x = 0 ; } if ( curcmd == 38 ) { cyclehit = true ; getxnext () ; pp = p ; qq = p ; if ( d == 50 ) if ( p == q ) { d = 49 ; mem [q + 6 ].cint = 65536L ; y = 65536L ; } } else { scantertiary () ; { if ( curtype != 8 ) pp = newknot () ; else pp = curexp ; qq = pp ; while ( mem [qq ].hhfield .v.RH != pp ) qq = mem [qq ].hhfield .v.RH ; if ( mem [pp ].hhfield .b0 != 0 ) { r = copyknot ( pp ) ; mem [qq ].hhfield .v.RH = r ; qq = r ; } mem [pp ].hhfield .b0 = 4 ; mem [qq ].hhfield .b1 = 4 ; } } { if ( d == 50 ) if ( ( mem [q + 1 ].cint != mem [pp + 1 ].cint ) || ( mem [q + 2 ].cint != mem [pp + 2 ].cint ) ) { { if ( interaction == 3 ) ; printnl ( 262 ) ; print ( 877 ) ; } { helpptr = 3 ; helpline [2 ]= 878 ; helpline [1 ]= 879 ; helpline [0 ]= 880 ; } putgeterror () ; d = 49 ; mem [q + 6 ].cint = 65536L ; y = 65536L ; } if ( mem [pp ].hhfield .b1 == 4 ) if ( ( t == 3 ) || ( t == 2 ) ) { mem [pp ].hhfield .b1 = t ; mem [pp + 5 ].cint = x ; } if ( d == 50 ) { if ( mem [q ].hhfield .b0 == 4 ) if ( mem [q ].hhfield .b1 == 4 ) { mem [q ].hhfield .b0 = 3 ; mem [q + 3 ].cint = 65536L ; } if ( mem [pp ].hhfield .b1 == 4 ) if ( t == 4 ) { mem [pp ].hhfield .b1 = 3 ; mem [pp + 5 ].cint = 65536L ; } mem [q ].hhfield .b1 = mem [pp ].hhfield .b1 ; mem [q ].hhfield .v.RH = mem [pp ].hhfield .v.RH ; mem [q + 5 ].cint = mem [pp + 5 ].cint ; mem [q + 6 ].cint = mem [pp + 6 ].cint ; freenode ( pp , 7 ) ; if ( qq == pp ) qq = q ; } else { if ( mem [q ].hhfield .b1 == 4 ) if ( ( mem [q ].hhfield .b0 == 3 ) || ( mem [q ].hhfield .b0 == 2 ) ) { mem [q ].hhfield .b1 = mem [q ].hhfield .b0 ; mem [q + 5 ].cint = mem [q + 3 ].cint ; } mem [q ].hhfield .v.RH = pp ; mem [pp + 4 ].cint = y ; if ( t != 4 ) { mem [pp + 3 ].cint = x ; mem [pp ].hhfield .b0 = t ; } } q = qq ; } if ( curcmd >= 48 ) if ( curcmd <= 50 ) if ( ! cyclehit ) goto lab25 ; lab26: if ( cyclehit ) { if ( d == 50 ) p = q ; } else { mem [p ].hhfield .b0 = 0 ; if ( mem [p ].hhfield .b1 == 4 ) { mem [p ].hhfield .b1 = 3 ; mem [p + 5 ].cint = 65536L ; } mem [q ].hhfield .b1 = 0 ; if ( mem [q ].hhfield .b0 == 4 ) { mem [q ].hhfield .b0 = 3 ; mem [q + 3 ].cint = 65536L ; } mem [q ].hhfield .v.RH = p ; } makechoices ( p ) ; curtype = 8 ; curexp = p ; } else { getxnext () ; scantertiary () ; if ( d != 51 ) dobinary ( p , c ) ; else { backinput () ; binarymac ( p , c , macname ) ; decr ( mem [c ].hhfield .lhfield ) ; getxnext () ; goto lab20 ; } } goto lab22 ; } lab10: ; } void #ifdef HAVE_PROTOTYPES getboolean ( void ) #else getboolean ( ) #endif { getxnext () ; scanexpression () ; if ( curtype != 2 ) { disperr ( 0 , 881 ) ; { helpptr = 2 ; helpline [1 ]= 882 ; helpline [0 ]= 883 ; } putgetflusherror ( 31 ) ; curtype = 2 ; } } void #ifdef HAVE_PROTOTYPES printcapsule ( void ) #else printcapsule ( ) #endif { printchar ( 40 ) ; printexp ( gpointer , 0 ) ; printchar ( 41 ) ; } void #ifdef HAVE_PROTOTYPES tokenrecycle ( void ) #else tokenrecycle ( ) #endif { recyclevalue ( gpointer ) ; } void #ifdef HAVE_PROTOTYPES closefilesandterminate ( void ) #else closefilesandterminate ( ) #endif { integer k ; integer lh ; short lkoffset ; halfword p ; {register integer for_end; k = 0 ;for_end = readfiles - 1 ; if ( k <= for_end) do if ( rdfname [k ]!= 0 ) aclose ( rdfile [k ]) ; while ( k++ < for_end ) ;} {register integer for_end; k = 0 ;for_end = writefiles - 1 ; if ( k <= for_end) do if ( wrfname [k ]!= 0 ) aclose ( wrfile [k ]) ; while ( k++ < for_end ) ;} ; #ifdef STAT if ( internal [10 ]> 0 ) if ( logopened ) { fprintf( logfile , "%c\n", ' ' ) ; fprintf( logfile , "%s%s\n", "Here is how much of MetaPost's memory" , " you used:" ) ; fprintf( logfile , "%c%ld%s", ' ' , (long)maxstrsused - initstruse , " string" ) ; if ( maxstrsused != initstruse + 1 ) putc ( 's' , logfile ); fprintf( logfile , "%s%ld\n", " out of " , (long)maxstrings - 1 - initstruse ) ; fprintf( logfile , "%c%ld%s%ld\n", ' ' , (long)maxplused - initpoolptr , " string characters out of " , (long)poolsize - initpoolptr ) ; fprintf( logfile , "%c%ld%s%ld\n", ' ' , (long)lomemmax + 0 + memend - himemmin + 2 , " words of memory out of " , (long)memend + 1 ) ; fprintf( logfile , "%c%ld%s%ld\n", ' ' , (long)stcount , " symbolic tokens out of " , (long)9500 ) ; fprintf( logfile , "%c%ld%s%ld%s%ld%s%ld%s%ld%s%ld%s%ld%s%ld%c\n", ' ' , (long)maxinstack , "i," , (long)intptr , "n," , (long)maxparamstack , "p," , (long)maxbufstack + 1 , "b stack positions out of " , (long)stacksize , "i," , (long)maxinternal , "n," , (long)150 , "p," , (long)bufsize , 'b' ) ; fprintf( logfile , "%c%ld%s%ld%s%ld%s\n", ' ' , (long)pactcount , " string compactions (moved " , (long)pactchars , " characters, " , (long)pactstrs , " strings)" ) ; } #endif /* STAT */ if ( internal [26 ]> 0 ) { rover = 24 ; mem [rover ].hhfield .v.RH = 268435455L ; lomemmax = himemmin - 1 ; if ( lomemmax - rover > 268435455L ) lomemmax = 268435455L + rover ; mem [rover ].hhfield .lhfield = lomemmax - rover ; mem [rover + 1 ].hhfield .lhfield = rover ; mem [rover + 1 ].hhfield .v.RH = rover ; mem [lomemmax ].hhfield .v.RH = 0 ; mem [lomemmax ].hhfield .lhfield = 0 ; mem [memtop - 1 ].hhfield .v.RH = 11 ; {register integer for_end; k = bc ;for_end = ec ; if ( k <= for_end) do if ( charexists [k ]) tfmwidth [k ]= sortin ( tfmwidth [k ]) ; while ( k++ < for_end ) ;} nw = skimp ( 255 ) + 1 ; dimenhead [1 ]= mem [memtop - 1 ].hhfield .v.RH ; if ( perturbation >= 4096 ) tfmwarning ( 19 ) ; fixdesignsize () ; fixchecksum () ; mem [memtop - 1 ].hhfield .v.RH = 11 ; {register integer for_end; k = bc ;for_end = ec ; if ( k <= for_end) do if ( charexists [k ]) if ( tfmheight [k ]== 0 ) tfmheight [k ]= 7 ; else tfmheight [k ]= sortin ( tfmheight [k ]) ; while ( k++ < for_end ) ;} nh = skimp ( 15 ) + 1 ; dimenhead [2 ]= mem [memtop - 1 ].hhfield .v.RH ; if ( perturbation >= 4096 ) tfmwarning ( 20 ) ; mem [memtop - 1 ].hhfield .v.RH = 11 ; {register integer for_end; k = bc ;for_end = ec ; if ( k <= for_end) do if ( charexists [k ]) if ( tfmdepth [k ]== 0 ) tfmdepth [k ]= 7 ; else tfmdepth [k ]= sortin ( tfmdepth [k ]) ; while ( k++ < for_end ) ;} nd = skimp ( 15 ) + 1 ; dimenhead [3 ]= mem [memtop - 1 ].hhfield .v.RH ; if ( perturbation >= 4096 ) tfmwarning ( 21 ) ; mem [memtop - 1 ].hhfield .v.RH = 11 ; {register integer for_end; k = bc ;for_end = ec ; if ( k <= for_end) do if ( charexists [k ]) if ( tfmitalcorr [k ]== 0 ) tfmitalcorr [k ]= 7 ; else tfmitalcorr [k ]= sortin ( tfmitalcorr [k ]) ; while ( k++ < for_end ) ;} ni = skimp ( 63 ) + 1 ; dimenhead [4 ]= mem [memtop - 1 ].hhfield .v.RH ; if ( perturbation >= 4096 ) tfmwarning ( 22 ) ; internal [26 ]= 0 ; if ( jobname == 0 ) openlogfile () ; packjobname ( 1092 ) ; while ( ! bopenout ( tfmfile ) ) promptfilename ( 1093 , 1092 ) ; metricfilename = bmakenamestring ( tfmfile ) ; k = headersize ; while ( headerbyte [k ]< 0 ) decr ( k ) ; lh = ( k + 3 ) / 4 ; if ( bc > ec ) bc = 1 ; bchar = roundunscaled ( internal [31 ]) ; if ( ( bchar < 0 ) || ( bchar > 255 ) ) { bchar = -1 ; lkstarted = false ; lkoffset = 0 ; } else { lkstarted = true ; lkoffset = 1 ; } k = labelptr ; if ( labelloc [k ]+ lkoffset > 255 ) { lkoffset = 0 ; lkstarted = false ; do { charremainder [labelchar [k ]]= lkoffset ; while ( labelloc [k - 1 ]== labelloc [k ]) { decr ( k ) ; charremainder [labelchar [k ]]= lkoffset ; } incr ( lkoffset ) ; decr ( k ) ; } while ( ! ( lkoffset + labelloc [k ]< 256 ) ) ; } if ( lkoffset > 0 ) while ( k > 0 ) { charremainder [labelchar [k ]]= charremainder [labelchar [k ]]+ lkoffset ; decr ( k ) ; } if ( bchlabel < ligtablesize ) { ligkern [nl ].b0 = 255 ; ligkern [nl ].b1 = 0 ; ligkern [nl ].b2 = ( ( bchlabel + lkoffset ) / 256 ) ; ligkern [nl ].b3 = ( ( bchlabel + lkoffset ) % 256 ) ; incr ( nl ) ; } put2bytes ( tfmfile , 6 + lh + ( ec - bc + 1 ) + nw + nh + nd + ni + nl + lkoffset + nk + ne + np ) ; put2bytes ( tfmfile , lh ) ; put2bytes ( tfmfile , bc ) ; put2bytes ( tfmfile , ec ) ; put2bytes ( tfmfile , nw ) ; put2bytes ( tfmfile , nh ) ; put2bytes ( tfmfile , nd ) ; put2bytes ( tfmfile , ni ) ; put2bytes ( tfmfile , nl + lkoffset ) ; put2bytes ( tfmfile , nk ) ; put2bytes ( tfmfile , ne ) ; put2bytes ( tfmfile , np ) ; {register integer for_end; k = 1 ;for_end = 4 * lh ; if ( k <= for_end) do { if ( headerbyte [k ]< 0 ) headerbyte [k ]= 0 ; putbyte ( headerbyte [k ], tfmfile ) ; } while ( k++ < for_end ) ;} {register integer for_end; k = bc ;for_end = ec ; if ( k <= for_end) do if ( ! charexists [k ]) put4bytes ( tfmfile , 0 ) ; else { putbyte ( mem [tfmwidth [k ]].hhfield .lhfield , tfmfile ) ; putbyte ( ( mem [tfmheight [k ]].hhfield .lhfield ) * 16 + mem [ tfmdepth [k ]].hhfield .lhfield , tfmfile ) ; putbyte ( ( mem [tfmitalcorr [k ]].hhfield .lhfield ) * 4 + chartag [k ], tfmfile ) ; putbyte ( charremainder [k ], tfmfile ) ; } while ( k++ < for_end ) ;} tfmchanged = 0 ; {register integer for_end; k = 1 ;for_end = 4 ; if ( k <= for_end) do { put4bytes ( tfmfile , 0 ) ; p = dimenhead [k ]; while ( p != 11 ) { put4bytes ( tfmfile , dimenout ( mem [p + 1 ].cint ) ) ; p = mem [p ].hhfield .v.RH ; } } while ( k++ < for_end ) ;} {register integer for_end; k = 0 ;for_end = 255 ; if ( k <= for_end) do if ( skiptable [k ]< ligtablesize ) { printnl ( 1095 ) ; printint ( k ) ; print ( 1096 ) ; ll = skiptable [k ]; do { lll = ligkern [ll ].b0 ; ligkern [ll ].b0 = 128 ; ll = ll - lll ; } while ( ! ( lll == 0 ) ) ; } while ( k++ < for_end ) ;} if ( lkstarted ) { putbyte ( 255 , tfmfile ) ; putbyte ( bchar , tfmfile ) ; put2bytes ( tfmfile , 0 ) ; } else { register integer for_end; k = 1 ;for_end = lkoffset ; if ( k <= for_end) do { ll = labelloc [labelptr ]; if ( bchar < 0 ) { putbyte ( 254 , tfmfile ) ; putbyte ( 0 , tfmfile ) ; } else { putbyte ( 255 , tfmfile ) ; putbyte ( bchar , tfmfile ) ; } put2bytes ( tfmfile , ll + lkoffset ) ; do { decr ( labelptr ) ; } while ( ! ( labelloc [labelptr ]< ll ) ) ; } while ( k++ < for_end ) ;} {register integer for_end; k = 0 ;for_end = nl - 1 ; if ( k <= for_end) do tfmqqqq ( ligkern [k ]) ; while ( k++ < for_end ) ;} {register integer for_end; k = 0 ;for_end = nk - 1 ; if ( k <= for_end) do put4bytes ( tfmfile , dimenout ( kern [k ]) ) ; while ( k++ < for_end ) ;} {register integer for_end; k = 0 ;for_end = ne - 1 ; if ( k <= for_end) do tfmqqqq ( exten [k ]) ; while ( k++ < for_end ) ;} {register integer for_end; k = 1 ;for_end = np ; if ( k <= for_end) do if ( k == 1 ) if ( abs ( param [1 ]) < 134217728L ) put4bytes ( tfmfile , param [1 ]* 16 ) ; else { incr ( tfmchanged ) ; if ( param [1 ]> 0 ) put4bytes ( tfmfile , 2147483647L ) ; else put4bytes ( tfmfile , -2147483647L ) ; } else put4bytes ( tfmfile , dimenout ( param [k ]) ) ; while ( k++ < for_end ) ;} if ( tfmchanged > 0 ) { if ( tfmchanged == 1 ) printnl ( 1097 ) ; else { printnl ( 40 ) ; printint ( tfmchanged ) ; print ( 1098 ) ; } print ( 1099 ) ; } ; #ifdef STAT if ( internal [10 ]> 0 ) { fprintf( logfile , "%c\n", ' ' ) ; if ( bchlabel < ligtablesize ) decr ( nl ) ; fprintf( logfile , "%s%ld%s%ld%s%ld%s%ld%s%ld%s%ld%s%ld%s%ld%s\n", "(You used " , (long)nw , "w," , (long)nh , "h," , (long)nd , "d," , (long)ni , "i," , (long)nl , "l," , (long)nk , "k," , (long)ne , "e," , (long)np , "p metric file positions" ) ; fprintf( logfile , "%s%s%ld%s%ld%s%ld%s\n", " out of " , "256w,16h,16d,64i," , (long)ligtablesize , "l," , (long)maxkerns , "k,256e," , (long)maxfontdimen , "p)" ) ; } #endif /* STAT */ printnl ( 1094 ) ; print ( metricfilename ) ; printchar ( 46 ) ; bclose ( tfmfile ) ; } if ( totalshipped > 0 ) { printnl ( 284 ) ; printint ( totalshipped ) ; print ( 1116 ) ; if ( totalshipped > 1 ) printchar ( 115 ) ; print ( 1117 ) ; print ( firstfilename ) ; if ( totalshipped > 1 ) { if ( 31 + ( strstart [nextstr [firstfilename ]]- strstart [ firstfilename ]) + ( strstart [nextstr [lastfilename ]]- strstart [ lastfilename ]) > maxprintline ) println () ; print ( 548 ) ; print ( lastfilename ) ; } } if ( logopened ) { putc ('\n', logfile ); aclose ( logfile ) ; selector = selector - 2 ; if ( selector == 8 ) { printnl ( 1181 ) ; print ( texmflogname ) ; printchar ( 46 ) ; } } println () ; if ( ( editnamestart != 0 ) && ( interaction > 0 ) ) calledit ( strpool , editnamestart , editnamelength , editline ) ; } #ifdef TEXMF_DEBUG void #ifdef HAVE_PROTOTYPES debughelp ( void ) #else debughelp ( ) #endif { /* 888 10 */ integer k, l, m, n ; while ( true ) { ; printnl ( 1188 ) ; fflush ( stdout ) ; m = inputint ( stdin ) ; if ( m < 0 ) goto lab10 ; else if ( m == 0 ) { goto lab888 ; lab888: m = 0 ; } else { n = inputint ( stdin ) ; switch ( m ) {case 1 : printword ( mem [n ]) ; break ; case 2 : printint ( mem [n ].hhfield .lhfield ) ; break ; case 3 : printint ( mem [n ].hhfield .v.RH ) ; break ; case 4 : { printint ( eqtb [n ].lhfield ) ; printchar ( 58 ) ; printint ( eqtb [n ].v.RH ) ; } break ; case 5 : printvariablename ( n ) ; break ; case 6 : printint ( internal [n ]) ; break ; case 7 : doshowdependencies () ; break ; case 9 : showtokenlist ( n , 0 , 100000L , 0 ) ; break ; case 10 : print ( n ) ; break ; case 11 : checkmem ( n > 0 ) ; break ; case 12 : searchmem ( n ) ; break ; case 13 : { l = inputint ( stdin ) ; printcmdmod ( n , l ) ; } break ; case 14 : {register integer for_end; k = 0 ;for_end = n ; if ( k <= for_end) do print ( buffer [k ]) ; while ( k++ < for_end ) ;} break ; case 15 : panicking = ! panicking ; break ; default: print ( 63 ) ; break ; } } } lab10: ; } #endif /* TEXMF_DEBUG */