#define DVITOMP
#include "cpascal.h"
/* 9999 30 */
#define maxfonts ( 100 )
#define maxfnums ( 300 )
#define maxwidths ( 10000 )
#define virtualspace ( 10000 )
#define linelength ( 79 )
#define stacksize ( 100 )
#define namesize ( 1000 )
#define namelength ( 50 )
typedef unsigned char ASCIIcode ;
typedef text /* of ASCIIcode */ textfile ;
typedef unsigned char eightbits ;
typedef text /* of eightbits */ bytefile ;
typedef unsigned char quarterword ;
char history ;
textfile mpxfile ;
ASCIIcode xchr[256] ;
bytefile dvifile ;
bytefile tfmfile ;
bytefile vffile ;
integer downthedrain ;
char * curname ;
eightbits b0, b1, b2, b3 ;
boolean vfreading ;
quarterword cmdbuf[virtualspace + 1] ;
integer bufptr ;
integer fontnum[maxfnums + 1] ;
integer internalnum[maxfnums + 1] ;
boolean localonly[maxfonts + 1] ;
integer fontname[maxfonts + 1] ;
ASCIIcode names[namesize + 1] ;
integer arealength[maxfonts + 1] ;
real fontscaledsize[maxfonts + 1] ;
real fontdesignsize[maxfonts + 1] ;
integer fontchecksum[maxfonts + 1] ;
integer fontbc[maxfonts + 1] ;
integer fontec[maxfonts + 1] ;
integer infobase[maxfonts + 1] ;
integer width[maxwidths + 1] ;
integer fbase[maxfonts + 1] ;
integer ftop[maxfonts + 1] ;
integer cmdptr[maxwidths + 1] ;
integer nf ;
integer vfptr ;
integer infoptr ;
integer ncmds ;
integer curfbase, curftop ;
real dviperfix ;
integer inwidth[256] ;
integer tfmchecksum ;
char state ;
integer printcol ;
integer h, v ;
real conv ;
real mag ;
boolean fontused[maxfonts + 1] ;
boolean fontsused ;
boolean rulesused ;
integer strh1, strv ;
integer strh2 ;
integer strf ;
real strscale ;
integer picdp, picht, picwd ;
integer w, x, y, z ;
integer hstack[stacksize + 1], vstack[stacksize + 1], wstack[stacksize + 1],
xstack[stacksize + 1], ystack[stacksize + 1], zstack[stacksize + 1] ;
integer stksiz ;
real dviscale ;
integer k, p ;
integer numerator, denominator ;
cstring dviname, mpxname ;
#include "dvitomp.h"
void
#ifdef HAVE_PROTOTYPES
parsearguments ( void )
#else
parsearguments ( )
#endif
{
#define noptions ( 2 )
getoptstruct longoptions[noptions + 1] ;
integer getoptreturnval ;
cinttype optionindex ;
integer currentoption ;
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 = 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 , "dvitomp" ) ;
}
else if ( ( strcmp ( longoptions [optionindex ].name , "help" ) == 0 ) )
{
usage ( 0 , DVITOMPHELP ) ;
}
else if ( ( strcmp ( longoptions [optionindex ].name , "version" ) == 0
) )
{
printversionandexit ( "This is DVItoMP, Version 0.64" ,
"AT&T Bell Laboraties" , "John Hobby" ) ;
}
} while ( ! ( getoptreturnval == -1 ) ) ;
if ( ( optind + 1 != argc ) && ( optind + 2 != argc ) )
{
fprintf( stderr , "%s\n", "dvitomp: Need one or two file arguments." ) ;
usage ( 1 , "dvitomp" ) ;
}
dviname = cmdline ( optind ) ;
if ( optind + 2 <= argc )
{
mpxname = cmdline ( optind + 1 ) ;
}
else {
mpxname = basenamechangesuffix ( dviname , ".dvi" , ".mpx" ) ;
}
}
void
#ifdef HAVE_PROTOTYPES
initialize ( void )
#else
initialize ( )
#endif
{
integer i ;
kpsesetprogname ( argv [0 ]) ;
parsearguments () ;
history = 0 ;
{register integer for_end; i = 0 ;for_end = 31 ; if ( i <= for_end) do
xchr [i ]= '?' ;
while ( i++ < for_end ) ;}
xchr [32 ]= ' ' ;
xchr [33 ]= '!' ;
xchr [34 ]= '"' ;
xchr [35 ]= '#' ;
xchr [36 ]= '$' ;
xchr [37 ]= '%' ;
xchr [38 ]= '&' ;
xchr [39 ]= '\'' ;
xchr [40 ]= '(' ;
xchr [41 ]= ')' ;
xchr [42 ]= '*' ;
xchr [43 ]= '+' ;
xchr [44 ]= ',' ;
xchr [45 ]= '-' ;
xchr [46 ]= '.' ;
xchr [47 ]= '/' ;
xchr [48 ]= '0' ;
xchr [49 ]= '1' ;
xchr [50 ]= '2' ;
xchr [51 ]= '3' ;
xchr [52 ]= '4' ;
xchr [53 ]= '5' ;
xchr [54 ]= '6' ;
xchr [55 ]= '7' ;
xchr [56 ]= '8' ;
xchr [57 ]= '9' ;
xchr [58 ]= ':' ;
xchr [59 ]= ';' ;
xchr [60 ]= '<' ;
xchr [61 ]= '=' ;
xchr [62 ]= '>' ;
xchr [63 ]= '?' ;
xchr [64 ]= '@' ;
xchr [65 ]= 'A' ;
xchr [66 ]= 'B' ;
xchr [67 ]= 'C' ;
xchr [68 ]= 'D' ;
xchr [69 ]= 'E' ;
xchr [70 ]= 'F' ;
xchr [71 ]= 'G' ;
xchr [72 ]= 'H' ;
xchr [73 ]= 'I' ;
xchr [74 ]= 'J' ;
xchr [75 ]= 'K' ;
xchr [76 ]= 'L' ;
xchr [77 ]= 'M' ;
xchr [78 ]= 'N' ;
xchr [79 ]= 'O' ;
xchr [80 ]= 'P' ;
xchr [81 ]= 'Q' ;
xchr [82 ]= 'R' ;
xchr [83 ]= 'S' ;
xchr [84 ]= 'T' ;
xchr [85 ]= 'U' ;
xchr [86 ]= 'V' ;
xchr [87 ]= 'W' ;
xchr [88 ]= 'X' ;
xchr [89 ]= 'Y' ;
xchr [90 ]= 'Z' ;
xchr [91 ]= '[' ;
xchr [92 ]= '\\' ;
xchr [93 ]= ']' ;
xchr [94 ]= '^' ;
xchr [95 ]= '_' ;
xchr [96 ]= '`' ;
xchr [97 ]= 'a' ;
xchr [98 ]= 'b' ;
xchr [99 ]= 'c' ;
xchr [100 ]= 'd' ;
xchr [101 ]= 'e' ;
xchr [102 ]= 'f' ;
xchr [103 ]= 'g' ;
xchr [104 ]= 'h' ;
xchr [105 ]= 'i' ;
xchr [106 ]= 'j' ;
xchr [107 ]= 'k' ;
xchr [108 ]= 'l' ;
xchr [109 ]= 'm' ;
xchr [110 ]= 'n' ;
xchr [111 ]= 'o' ;
xchr [112 ]= 'p' ;
xchr [113 ]= 'q' ;
xchr [114 ]= 'r' ;
xchr [115 ]= 's' ;
xchr [116 ]= 't' ;
xchr [117 ]= 'u' ;
xchr [118 ]= 'v' ;
xchr [119 ]= 'w' ;
xchr [120 ]= 'x' ;
xchr [121 ]= 'y' ;
xchr [122 ]= 'z' ;
xchr [123 ]= '{' ;
xchr [124 ]= '|' ;
xchr [125 ]= '}' ;
xchr [126 ]= '~' ;
{register integer for_end; i = 127 ;for_end = 255 ; if ( i <= for_end) do
xchr [i ]= '?' ;
while ( i++ < for_end ) ;}
vfreading = false ;
bufptr = virtualspace ;
nf = 0 ;
infoptr = 0 ;
fontname [0 ]= 0 ;
vfptr = maxfnums ;
curfbase = 0 ;
curftop = 0 ;
state = 2 ;
}
void
#ifdef HAVE_PROTOTYPES
openmpxfile ( void )
#else
openmpxfile ( )
#endif
{
curname = extendfilename ( mpxname , "mpx" ) ;
rewrite ( mpxfile , curname ) ;
}
void
#ifdef HAVE_PROTOTYPES
opendvifile ( void )
#else
opendvifile ( )
#endif
{
curname = extendfilename ( dviname , "dvi" ) ;
resetbin ( dvifile , curname ) ;
}
boolean
#ifdef HAVE_PROTOTYPES
opentfmfile ( void )
#else
opentfmfile ( )
#endif
{
register boolean Result; tfmfile = kpseopenfile ( curname , kpsetfmformat
) ;
free ( curname ) ;
Result = true ;
return Result ;
}
boolean
#ifdef HAVE_PROTOTYPES
openvffile ( void )
#else
openvffile ( )
#endif
{
register boolean Result; char * fullname ;
fullname = kpsefindvf ( curname ) ;
if ( fullname )
{
resetbin ( vffile , fullname ) ;
free ( curname ) ;
free ( fullname ) ;
Result = true ;
}
else Result = false ;
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
readtfmword ( void )
#else
readtfmword ( )
#endif
{
read ( tfmfile , b0 ) ;
read ( tfmfile , b1 ) ;
read ( tfmfile , b2 ) ;
read ( tfmfile , b3 ) ;
}
integer
#ifdef HAVE_PROTOTYPES
getbyte ( void )
#else
getbyte ( )
#endif
{
register integer Result; eightbits b ;
if ( vfreading )
read ( vffile , b ) ;
else if ( bufptr == virtualspace )
read ( dvifile , b ) ;
else {
b = cmdbuf [bufptr ];
bufptr = bufptr + 1 ;
}
Result = b ;
return Result ;
}
integer
#ifdef HAVE_PROTOTYPES
signedbyte ( void )
#else
signedbyte ( )
#endif
{
register integer Result; eightbits b ;
if ( vfreading )
read ( vffile , b ) ;
else if ( bufptr == virtualspace )
read ( dvifile , b ) ;
else {
b = cmdbuf [bufptr ];
bufptr = bufptr + 1 ;
}
if ( b < 128 )
Result = b ;
else Result = b - 256 ;
return Result ;
}
integer
#ifdef HAVE_PROTOTYPES
gettwobytes ( void )
#else
gettwobytes ( )
#endif
{
register integer Result; eightbits a, b ;
if ( vfreading )
{
read ( vffile , a ) ;
read ( vffile , b ) ;
}
else if ( bufptr == virtualspace )
{
read ( dvifile , a ) ;
read ( dvifile , b ) ;
}
else if ( bufptr + 2 > ncmds )
{
fprintf(stdout, "%s%s\n", "DVItoMP abort: " , "Error detected while interpreting a virtual font" ) ;
history = 3 ;
uexit ( history ) ;
}
else {
a = cmdbuf [bufptr ];
b = cmdbuf [bufptr + 1 ];
bufptr = bufptr + 2 ;
}
Result = a * toint ( 256 ) + b ;
return Result ;
}
integer
#ifdef HAVE_PROTOTYPES
signedpair ( void )
#else
signedpair ( )
#endif
{
register integer Result; eightbits a, b ;
if ( vfreading )
{
read ( vffile , a ) ;
read ( vffile , b ) ;
}
else if ( bufptr == virtualspace )
{
read ( dvifile , a ) ;
read ( dvifile , b ) ;
}
else if ( bufptr + 2 > ncmds )
{
fprintf(stdout, "%s%s\n", "DVItoMP abort: " , "Error detected while interpreting a virtual font" ) ;
history = 3 ;
uexit ( history ) ;
}
else {
a = cmdbuf [bufptr ];
b = cmdbuf [bufptr + 1 ];
bufptr = bufptr + 2 ;
}
if ( a < 128 )
Result = a * 256 + b ;
else Result = ( a - 256 ) * 256 + b ;
return Result ;
}
integer
#ifdef HAVE_PROTOTYPES
getthreebytes ( void )
#else
getthreebytes ( )
#endif
{
register integer Result; eightbits a, b, c ;
if ( vfreading )
{
read ( vffile , a ) ;
read ( vffile , b ) ;
read ( vffile , c ) ;
}
else if ( bufptr == virtualspace )
{
read ( dvifile , a ) ;
read ( dvifile , b ) ;
read ( dvifile , c ) ;
}
else if ( bufptr + 3 > ncmds )
{
fprintf(stdout, "%s%s\n", "DVItoMP abort: " , "Error detected while interpreting a virtual font" ) ;
history = 3 ;
uexit ( history ) ;
}
else {
a = cmdbuf [bufptr ];
b = cmdbuf [bufptr + 1 ];
c = cmdbuf [bufptr + 2 ];
bufptr = bufptr + 3 ;
}
Result = ( a * toint ( 256 ) + b ) * 256 + c ;
return Result ;
}
integer
#ifdef HAVE_PROTOTYPES
signedtrio ( void )
#else
signedtrio ( )
#endif
{
register integer Result; eightbits a, b, c ;
if ( vfreading )
{
read ( vffile , a ) ;
read ( vffile , b ) ;
read ( vffile , c ) ;
}
else if ( bufptr == virtualspace )
{
read ( dvifile , a ) ;
read ( dvifile , b ) ;
read ( dvifile , c ) ;
}
else if ( bufptr + 3 > ncmds )
{
fprintf(stdout, "%s%s\n", "DVItoMP abort: " , "Error detected while interpreting a virtual font" ) ;
history = 3 ;
uexit ( history ) ;
}
else {
a = cmdbuf [bufptr ];
b = cmdbuf [bufptr + 1 ];
c = cmdbuf [bufptr + 2 ];
bufptr = bufptr + 3 ;
}
if ( a < 128 )
Result = ( a * toint ( 256 ) + b ) * 256 + c ;
else Result = ( ( a - toint ( 256 ) ) * 256 + b ) * 256 + c ;
return Result ;
}
integer
#ifdef HAVE_PROTOTYPES
signedquad ( void )
#else
signedquad ( )
#endif
{
register integer Result; eightbits a, b, c, d ;
if ( vfreading )
{
read ( vffile , a ) ;
read ( vffile , b ) ;
read ( vffile , c ) ;
read ( vffile , d ) ;
}
else if ( bufptr == virtualspace )
{
read ( dvifile , a ) ;
read ( dvifile , b ) ;
read ( dvifile , c ) ;
read ( dvifile , d ) ;
}
else if ( bufptr + 4 > ncmds )
{
fprintf(stdout, "%s%s\n", "DVItoMP abort: " , "Error detected while interpreting a virtual font" ) ;
history = 3 ;
uexit ( history ) ;
}
else {
a = cmdbuf [bufptr ];
b = cmdbuf [bufptr + 1 ];
c = cmdbuf [bufptr + 2 ];
d = cmdbuf [bufptr + 3 ];
bufptr = bufptr + 4 ;
}
if ( a < 128 )
Result = ( ( a * toint ( 256 ) + b ) * 256 + c ) * 256 + d ;
else Result = ( ( ( a - 256 ) * toint ( 256 ) + b ) * 256 + c ) * 256 + d ;
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
zprintchar ( eightbits c )
#else
zprintchar ( c )
eightbits c ;
#endif
{
boolean printable ;
integer l ;
printable = ( c >= 32 ) && ( c <= 126 ) && ( c != 34 ) ;
if ( printable )
l = 1 ;
else if ( c < 10 )
l = 5 ;
else if ( c < 100 )
l = 6 ;
else l = 7 ;
if ( printcol + l > linelength - 2 )
{
if ( state == 1 )
{
putc ( '"' , mpxfile );
state = 0 ;
}
fprintf( mpxfile , "%c\n", ' ' ) ;
printcol = 0 ;
}
if ( state == 1 )
if ( printable )
putc ( xchr [c ], mpxfile );
else {
fprintf( mpxfile , "%s%ld", "\"&char" , (long)c ) ;
printcol = printcol + 2 ;
}
else {
if ( state == 0 )
{
putc ( '&' , mpxfile );
printcol = printcol + 1 ;
}
if ( printable )
{
fprintf( mpxfile , "%c%c", '"' , xchr [c ]) ;
printcol = printcol + 1 ;
}
else
fprintf( mpxfile , "%s%ld", "char" , (long)c ) ;
}
printcol = printcol + l ;
if ( printable )
state = 1 ;
else state = 0 ;
}
void
#ifdef HAVE_PROTOTYPES
zendcharstring ( integer l )
#else
zendcharstring ( l )
integer l ;
#endif
{
while ( state > 0 ) {
putc ( '"' , mpxfile );
printcol = printcol + 1 ;
state = state - 1 ;
}
if ( printcol + l > linelength )
{
fprintf( mpxfile , "%c\n", ' ' ) ;
printcol = 0 ;
}
state = 2 ;
}
void
#ifdef HAVE_PROTOTYPES
zprintfont ( integer f )
#else
zprintfont ( f )
integer f ;
#endif
{
integer k ;
if ( ( f < 0 ) || ( f >= nf ) )
{
fprintf(stdout, "%s%s%s%c\n", "DVItoMP abort: " , "Bad DVI file: " , "Undefined font" , '!' )
;
history = 3 ;
uexit ( history ) ;
}
else {
{register integer for_end; k = fontname [f ];for_end = fontname [f +
1 ]- 1 ; if ( k <= for_end) do
printchar ( names [k ]) ;
while ( k++ < for_end ) ;}
}
}
void
#ifdef HAVE_PROTOTYPES
zerrprintfont ( integer f )
#else
zerrprintfont ( f )
integer f ;
#endif
{
integer k ;
{register integer for_end; k = fontname [f ];for_end = fontname [f + 1
]- 1 ; if ( k <= for_end) do
putc (xchr [names [k ]], stdout);
while ( k++ < for_end ) ;}
fprintf(stdout, "%c\n", ' ' ) ;
}
integer
#ifdef HAVE_PROTOTYPES
zmatchfont ( integer ff , boolean exact )
#else
zmatchfont ( ff , exact )
integer ff ;
boolean exact ;
#endif
{
/* 30 99 */ register integer Result; integer f ;
integer ss, ll ;
integer k, s ;
ss = fontname [ff ];
ll = fontname [ff + 1 ]- ss ;
f = 0 ;
while ( f < nf ) {
if ( f != ff )
{
if ( ( arealength [f ]< arealength [ff ]) || ( ll != fontname [f +
1 ]- fontname [f ]) )
goto lab99 ;
s = fontname [f ];
k = ll ;
while ( k > 0 ) {
k = k - 1 ;
if ( names [s + k ]!= names [ss + k ])
goto lab99 ;
}
if ( exact )
{
if ( fabs ( fontscaledsize [f ]- fontscaledsize [ff ]) <= 0.00001
)
{
if ( ! vfreading )
if ( localonly [f ])
{
fontnum [f ]= fontnum [ff ];
localonly [f ]= false ;
}
else if ( fontnum [f ]!= fontnum [ff ])
goto lab99 ;
goto lab30 ;
}
}
else if ( infobase [f ]!= maxwidths )
goto lab30 ;
}
lab99: f = f + 1 ;
}
lab30: if ( f < nf )
if ( fabs ( fontdesignsize [f ]- fontdesignsize [ff ]) > 0.00001 )
{
fprintf(stdout, "%s%s", "DVItoMP warning: " , "Inconsistent design sizes given for " ) ;
errprintfont ( ff ) ;
history = 2 ;
}
else if ( fontchecksum [f ]!= fontchecksum [ff ])
{
fprintf(stdout, "%s%s", "DVItoMP warning: " , "Checksum mismatch for " ) ;
errprintfont ( ff ) ;
history = 2 ;
}
Result = f ;
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
zdefinefont ( integer e )
#else
zdefinefont ( e )
integer e ;
#endif
{
integer i ;
integer n ;
integer k ;
integer x ;
if ( nf == maxfonts )
{
fprintf(stdout, "%s%s%ld%s\n", "DVItoMP abort: " , "DVItoMP capacity exceeded (max fonts=" , (long)maxfonts , ")!" ) ;
history = 3 ;
uexit ( history ) ;
}
if ( vfptr == nf )
{
fprintf(stdout, "%s%s%ld%c\n", "DVItoMP abort: " , "DVItoMP capacity exceeded (max font numbers=" , (long)maxfnums , ')' ) ;
history = 3 ;
uexit ( history ) ;
}
if ( vfreading )
{
fontnum [nf ]= 0 ;
i = vfptr ;
vfptr = vfptr - 1 ;
}
else i = nf ;
fontnum [i ]= e ;
fontchecksum [nf ]= signedquad () ;
x = signedquad () ;
k = 1 ;
while ( x > 8388608L ) {
x = x / 2 ;
k = k + k ;
}
fontscaledsize [nf ]= x * k / ((double) 1048576.0 ) ;
if ( vfreading )
fontdesignsize [nf ]= signedquad () * dviperfix / ((double) 1048576.0 ) ;
else fontdesignsize [nf ]= signedquad () / ((double) 1048576.0 ) ;
n = getbyte () ;
arealength [nf ]= n ;
n = n + getbyte () ;
if ( fontname [nf ]+ n > namesize )
{
fprintf(stdout, "%s%s%ld%s\n", "DVItoMP abort: " , "DVItoMP capacity exceeded (name size=" , (long)namesize , ")!" ) ;
history = 3 ;
uexit ( history ) ;
}
fontname [nf + 1 ]= fontname [nf ]+ n ;
{register integer for_end; k = fontname [nf ];for_end = fontname [nf +
1 ]- 1 ; if ( k <= for_end) do
names [k ]= getbyte () ;
while ( k++ < for_end ) ;}
internalnum [i ]= matchfont ( nf , true ) ;
if ( internalnum [i ]== nf )
{
infobase [nf ]= maxwidths ;
localonly [nf ]= vfreading ;
nf = nf + 1 ;
}
}
void
#ifdef HAVE_PROTOTYPES
zinTFM ( integer f )
#else
zinTFM ( f )
integer f ;
#endif
{
/* 9997 9999 */ integer k ;
integer lh ;
integer nw ;
integer wp ;
readtfmword () ;
lh = b2 * toint ( 256 ) + b3 ;
readtfmword () ;
fontbc [f ]= b0 * toint ( 256 ) + b1 ;
fontec [f ]= b2 * toint ( 256 ) + b3 ;
if ( fontec [f ]< fontbc [f ])
fontbc [f ]= fontec [f ]+ 1 ;
if ( infoptr + fontec [f ]- fontbc [f ]+ 1 > maxwidths )
{
fprintf(stdout, "%s%s%ld%s\n", "DVItoMP abort: " , "DVItoMP capacity exceeded (width table size=" , (long)maxwidths , ")!" ) ;
history = 3 ;
uexit ( history ) ;
}
wp = infoptr + fontec [f ]- fontbc [f ]+ 1 ;
readtfmword () ;
nw = b0 * 256 + b1 ;
if ( ( nw == 0 ) || ( nw > 256 ) )
goto lab9997 ;
{register integer for_end; k = 1 ;for_end = 3 + lh ; if ( k <= for_end) do
{
if ( eof ( tfmfile ) )
goto lab9997 ;
readtfmword () ;
if ( k == 4 )
if ( b0 < 128 )
tfmchecksum = ( ( b0 * toint ( 256 ) + b1 ) * 256 + b2 ) * 256 + b3 ;
else tfmchecksum = ( ( ( b0 - 256 ) * toint ( 256 ) + b1 ) * 256 + b2 )
* 256 + b3 ;
}
while ( k++ < for_end ) ;}
if ( wp > 0 )
{register integer for_end; k = infoptr ;for_end = wp - 1 ; if ( k <=
for_end) do
{
readtfmword () ;
if ( b0 > nw )
goto lab9997 ;
width [k ]= b0 ;
}
while ( k++ < for_end ) ;}
{register integer for_end; k = 0 ;for_end = nw - 1 ; if ( k <= for_end) do
{
readtfmword () ;
if ( b0 > 127 )
b0 = b0 - 256 ;
inwidth [k ]= ( ( b0 * 256 + b1 ) * 256 + b2 ) * 256 + b3 ;
}
while ( k++ < for_end ) ;}
if ( inwidth [0 ]!= 0 )
goto lab9997 ;
infobase [f ]= infoptr - fontbc [f ];
if ( wp > 0 )
{register integer for_end; k = infoptr ;for_end = wp - 1 ; if ( k <=
for_end) do
width [k ]= inwidth [width [k ]];
while ( k++ < for_end ) ;}
fbase [f ]= 0 ;
ftop [f ]= 0 ;
infoptr = wp ;
goto lab9999 ;
lab9997: {
fprintf(stdout, "%s%s", "DVItoMP abort: " , "Bad TFM file for " ) ;
errprintfont ( f ) ;
history = 3 ;
uexit ( history ) ;
}
lab9999: ;
}
integer
#ifdef HAVE_PROTOTYPES
zfirstpar ( eightbits o )
#else
zfirstpar ( o )
eightbits o ;
#endif
{
register integer Result; switch ( o )
{case 0 :
case 1 :
case 2 :
case 3 :
case 4 :
case 5 :
case 6 :
case 7 :
case 8 :
case 9 :
case 10 :
case 11 :
case 12 :
case 13 :
case 14 :
case 15 :
case 16 :
case 17 :
case 18 :
case 19 :
case 20 :
case 21 :
case 22 :
case 23 :
case 24 :
case 25 :
case 26 :
case 27 :
case 28 :
case 29 :
case 30 :
case 31 :
case 32 :
case 33 :
case 34 :
case 35 :
case 36 :
case 37 :
case 38 :
case 39 :
case 40 :
case 41 :
case 42 :
case 43 :
case 44 :
case 45 :
case 46 :
case 47 :
case 48 :
case 49 :
case 50 :
case 51 :
case 52 :
case 53 :
case 54 :
case 55 :
case 56 :
case 57 :
case 58 :
case 59 :
case 60 :
case 61 :
case 62 :
case 63 :
case 64 :
case 65 :
case 66 :
case 67 :
case 68 :
case 69 :
case 70 :
case 71 :
case 72 :
case 73 :
case 74 :
case 75 :
case 76 :
case 77 :
case 78 :
case 79 :
case 80 :
case 81 :
case 82 :
case 83 :
case 84 :
case 85 :
case 86 :
case 87 :
case 88 :
case 89 :
case 90 :
case 91 :
case 92 :
case 93 :
case 94 :
case 95 :
case 96 :
case 97 :
case 98 :
case 99 :
case 100 :
case 101 :
case 102 :
case 103 :
case 104 :
case 105 :
case 106 :
case 107 :
case 108 :
case 109 :
case 110 :
case 111 :
case 112 :
case 113 :
case 114 :
case 115 :
case 116 :
case 117 :
case 118 :
case 119 :
case 120 :
case 121 :
case 122 :
case 123 :
case 124 :
case 125 :
case 126 :
case 127 :
Result = o - 0 ;
break ;
case 128 :
case 133 :
case 235 :
case 239 :
case 243 :
Result = getbyte () ;
break ;
case 129 :
case 134 :
case 236 :
case 240 :
case 244 :
Result = gettwobytes () ;
break ;
case 130 :
case 135 :
case 237 :
case 241 :
case 245 :
Result = getthreebytes () ;
break ;
case 143 :
case 148 :
case 153 :
case 157 :
case 162 :
case 167 :
Result = signedbyte () ;
break ;
case 144 :
case 149 :
case 154 :
case 158 :
case 163 :
case 168 :
Result = signedpair () ;
break ;
case 145 :
case 150 :
case 155 :
case 159 :
case 164 :
case 169 :
Result = signedtrio () ;
break ;
case 131 :
case 132 :
case 136 :
case 137 :
case 146 :
case 151 :
case 156 :
case 160 :
case 165 :
case 170 :
case 238 :
case 242 :
case 246 :
Result = signedquad () ;
break ;
case 138 :
case 139 :
case 140 :
case 141 :
case 142 :
case 247 :
case 248 :
case 249 :
case 250 :
case 251 :
case 252 :
case 253 :
case 254 :
case 255 :
Result = 0 ;
break ;
case 147 :
Result = w ;
break ;
case 152 :
Result = x ;
break ;
case 161 :
Result = y ;
break ;
case 166 :
Result = z ;
break ;
case 171 :
case 172 :
case 173 :
case 174 :
case 175 :
case 176 :
case 177 :
case 178 :
case 179 :
case 180 :
case 181 :
case 182 :
case 183 :
case 184 :
case 185 :
case 186 :
case 187 :
case 188 :
case 189 :
case 190 :
case 191 :
case 192 :
case 193 :
case 194 :
case 195 :
case 196 :
case 197 :
case 198 :
case 199 :
case 200 :
case 201 :
case 202 :
case 203 :
case 204 :
case 205 :
case 206 :
case 207 :
case 208 :
case 209 :
case 210 :
case 211 :
case 212 :
case 213 :
case 214 :
case 215 :
case 216 :
case 217 :
case 218 :
case 219 :
case 220 :
case 221 :
case 222 :
case 223 :
case 224 :
case 225 :
case 226 :
case 227 :
case 228 :
case 229 :
case 230 :
case 231 :
case 232 :
case 233 :
case 234 :
Result = o - 171 ;
break ;
}
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
zinVF ( integer f )
#else
zinVF ( f )
integer f ;
#endif
{
/* 9997 9999 */ integer p ;
boolean wasvfreading ;
integer c ;
integer limit ;
integer w ;
wasvfreading = vfreading ;
vfreading = true ;
p = getbyte () ;
if ( p != 247 )
goto lab9997 ;
p = getbyte () ;
if ( p != 202 )
goto lab9997 ;
p = getbyte () ;
while ( p > 0 ) {
p = p - 1 ;
downthedrain = getbyte () ;
}
tfmchecksum = signedquad () ;
downthedrain = signedquad () ;
ftop [f ]= vfptr ;
if ( vfptr == nf )
{
fprintf(stdout, "%s%s%ld%c\n", "DVItoMP abort: " , "DVItoMP capacity exceeded (max font numbers=" , (long)maxfnums , ')' ) ;
history = 3 ;
uexit ( history ) ;
}
vfptr = vfptr - 1 ;
infobase [f ]= infoptr ;
limit = maxwidths - infobase [f ];
fontbc [f ]= limit ;
fontec [f ]= 0 ;
p = getbyte () ;
while ( p >= 243 ) {
if ( p > 246 )
goto lab9997 ;
definefont ( firstpar ( p ) ) ;
p = getbyte () ;
}
while ( p <= 242 ) {
if ( eof ( vffile ) )
goto lab9997 ;
if ( p == 242 )
{
p = signedquad () ;
c = signedquad () ;
w = signedquad () ;
if ( c < 0 )
goto lab9997 ;
}
else {
c = getbyte () ;
w = getthreebytes () ;
}
if ( c >= limit )
{
fprintf(stdout, "%s%s%ld%s\n", "DVItoMP abort: " , "DVItoMP capacity exceeded (max widths=" , (long)maxwidths , ")!" ) ;
history = 3 ;
uexit ( history ) ;
}
if ( c < fontbc [f ])
fontbc [f ]= c ;
if ( c > fontec [f ])
fontec [f ]= c ;
width [infobase [f ]+ c ]= w ;
if ( ncmds + p >= virtualspace )
{
fprintf(stdout, "%s%s%ld%s\n", "DVItoMP abort: " , "DVItoMP capacity exceeded (virtual font space=" , (long)virtualspace , ")!" )
;
history = 3 ;
uexit ( history ) ;
}
cmdptr [infobase [f ]+ c ]= ncmds ;
while ( p > 0 ) {
cmdbuf [ncmds ]= getbyte () ;
ncmds = ncmds + 1 ;
p = p - 1 ;
}
cmdbuf [ncmds ]= 140 ;
ncmds = ncmds + 1 ;
p = getbyte () ;
}
if ( p == 248 )
{
fbase [f ]= vfptr + 1 ;
infoptr = infobase [f ]+ fontec [f ];
goto lab9999 ;
}
lab9997: {
fprintf(stdout, "%s%s", "DVItoMP abort: " , "Bad VF file for " ) ;
errprintfont ( f ) ;
history = 3 ;
uexit ( history ) ;
}
lab9999: vfreading = wasvfreading ;
}
integer
#ifdef HAVE_PROTOTYPES
zselectfont ( integer e )
#else
zselectfont ( e )
integer e ;
#endif
{
register integer Result; integer f ;
integer ff ;
integer k, l ;
if ( curftop <= nf )
curftop = nf ;
fontnum [curftop ]= e ;
k = curfbase ;
while ( ( fontnum [k ]!= e ) || localonly [k ]) k = k + 1 ;
if ( k == curftop )
{
fprintf(stdout, "%s%s\n", "DVItoMP abort: " , "Undefined font selected" ) ;
history = 3 ;
uexit ( history ) ;
}
f = internalnum [k ];
if ( infobase [f ]== maxwidths )
{
ff = matchfont ( f , false ) ;
if ( ff < nf )
{
fontbc [f ]= fontbc [ff ];
fontec [f ]= fontec [ff ];
infobase [f ]= infobase [ff ];
fbase [f ]= fbase [ff ];
ftop [f ]= ftop [ff ];
}
else {
curname = xmalloc ( ( fontname [f + 1 ]- fontname [f ]) + 1 ) ;
{register integer for_end; k = fontname [f ];for_end = fontname [f
+ 1 ]- 1 ; if ( k <= for_end) do
{
curname [k - fontname [f ]]= xchr [names [k ]];
}
while ( k++ < for_end ) ;}
curname [fontname [f + 1 ]- fontname [f ]]= 0 ;
if ( openvffile () )
inVF ( f ) ;
else {
;
if ( ! opentfmfile () )
{
fprintf(stdout, "%s%s", "DVItoMP abort: " , "No TFM file found for " ) ;
errprintfont ( f ) ;
history = 3 ;
uexit ( history ) ;
}
inTFM ( f ) ;
}
{
if ( ( fontchecksum [f ]!= 0 ) && ( tfmchecksum != 0 ) && (
fontchecksum [f ]!= tfmchecksum ) )
{
Fputs(stdout, "DVItoMP warning: Checksum mismatch for " ) ;
errprintfont ( f ) ;
if ( history == 0 )
history = 1 ;
}
}
}
fontused [f ]= false ;
}
Result = f ;
return Result ;
}
void
#ifdef HAVE_PROTOTYPES
finishlastchar ( void )
#else
finishlastchar ( )
#endif
{
real m, x, y ;
if ( strf >= 0 )
{
m = strscale * fontscaledsize [strf ]* mag / ((double) fontdesignsize [
strf ]) ;
x = conv * strh1 ;
y = conv * ( - (integer) strv ) ;
if ( ( fabs ( x ) >= 4096.0 ) || ( fabs ( y ) >= 4096.0 ) || ( m >= 4096.0
) || ( m < 0 ) )
{
{
fprintf(stdout, "%s%s\n", "DVItoMP warning: " , "text is out of range" ) ;
history = 2 ;
}
endcharstring ( 60 ) ;
}
else endcharstring ( 40 ) ;
fprintf( mpxfile , "%s%ld%c", ",_n" , (long)strf , ',' ) ;
fprintreal ( mpxfile , m , 1 , 5 ) ;
putc ( ',' , mpxfile );
fprintreal ( mpxfile , x , 1 , 4 ) ;
putc ( ',' , mpxfile );
fprintreal ( mpxfile , y , 1 , 4 ) ;
fprintf( mpxfile , "%s\n", ");" ) ;
strf = -1 ;
}
}
void
#ifdef HAVE_PROTOTYPES
zdosetchar ( integer f , integer c )
#else
zdosetchar ( f , c )
integer f ;
integer c ;
#endif
{
if ( ( c < fontbc [f ]) || ( c > fontec [f ]) )
{
fprintf(stdout, "%s%s%ld\n", "DVItoMP abort: " , "attempt to typeset invalid character " , (long)c ) ;
history = 3 ;
uexit ( history ) ;
}
if ( ( h != strh2 ) || ( v != strv ) || ( f != strf ) || ( dviscale !=
strscale ) )
{
if ( strf >= 0 )
finishlastchar () ;
else if ( ! fontsused )
{
k = 0 ;
while ( ( k < nf ) ) {
fontused [k ]= false ;
k = k + 1 ;
}
fontsused = true ;
fprintf( mpxfile , "%s\n", "string _n[];" ) ;
fprintf( mpxfile , "%s\n", "vardef _s(expr _t,_f,_m,_x,_y)=" ) ;
fprintf( mpxfile , "%s\n", " addto _p also _t infont _f scaled _m shifted (_x,_y); enddef;" ) ;
}
if ( ! fontused [f ])
{
fontused [f ]= true ;
fprintf( mpxfile , "%s%ld%c", "_n" , (long)f , '=' ) ;
printcol = 6 ;
printfont ( f ) ;
endcharstring ( 1 ) ;
fprintf( mpxfile , "%c\n", ';' ) ;
}
Fputs( mpxfile , "_s(" ) ;
printcol = 3 ;
strscale = dviscale ;
strf = f ;
strv = v ;
strh1 = h ;
}
printchar ( c ) ;
strh2 = h + round ( dviscale * fontscaledsize [f ]* width [infobase [f ]
+ c ]- 0.5 ) ;
}
void
#ifdef HAVE_PROTOTYPES
zdosetrule ( integer ht , integer wd )
#else
zdosetrule ( ht , wd )
integer ht ;
integer wd ;
#endif
{
real xx1, yy1, xx2, yy2, ww ;
if ( wd == 1 )
{
picwd = h ;
picdp = v ;
picht = ht - v ;
}
else if ( ( ht > 0 ) || ( wd > 0 ) )
{
if ( strf >= 0 )
finishlastchar () ;
if ( ! rulesused )
{
rulesused = true ;
fprintf( mpxfile , "%s\n", "interim linecap:=0;" ) ;
fprintf( mpxfile , "%s\n", "vardef _r(expr _a,_w) =" ) ;
fprintf( mpxfile , "%s\n", " addto _p doublepath _a withpen pencircle scaled _w enddef;" ) ;
}
xx1 = conv * h ;
yy1 = conv * ( - (integer) v ) ;
if ( wd > ht )
{
xx2 = xx1 + conv * wd ;
ww = conv * ht ;
yy1 = yy1 + 0.5 * ww ;
yy2 = yy1 ;
}
else {
yy2 = yy1 + conv * ht ;
ww = conv * wd ;
xx1 = xx1 + 0.5 * ww ;
xx2 = xx1 ;
}
if ( ( fabs ( xx1 ) >= 4096.0 ) || ( fabs ( yy1 ) >= 4096.0 ) || ( fabs (
xx2 ) >= 4096.0 ) || ( fabs ( yy2 ) >= 4096.0 ) || ( ww >= 4096.0 ) )
{
fprintf(stdout, "%s%s\n", "DVItoMP warning: " , "hrule or vrule is out of range" ) ;
history = 2 ;
}
Fputs( mpxfile , "_r((" ) ;
fprintreal ( mpxfile , xx1 , 1 , 4 ) ;
putc ( ',' , mpxfile );
fprintreal ( mpxfile , yy1 , 1 , 4 ) ;
Fputs( mpxfile , ")..(" ) ;
fprintreal ( mpxfile , xx2 , 1 , 4 ) ;
putc ( ',' , mpxfile );
fprintreal ( mpxfile , yy2 , 1 , 4 ) ;
Fputs( mpxfile , "), " ) ;
fprintreal ( mpxfile , ww , 1 , 4 ) ;
fprintf( mpxfile , "%s\n", ");" ) ;
}
}
void
#ifdef HAVE_PROTOTYPES
startpicture ( void )
#else
startpicture ( )
#endif
{
fontsused = false ;
rulesused = false ;
strf = -1 ;
strv = 0 ;
strh2 = 0 ;
strscale = 1.0 ;
fprintf( mpxfile , "%s\n", "begingroup save _p,_r,_s,_n; picture _p; _p=nullpicture;" ) ;
}
void
#ifdef HAVE_PROTOTYPES
stoppicture ( void )
#else
stoppicture ( )
#endif
{
real w, h, dd ;
if ( strf >= 0 )
finishlastchar () ;
dd = - (integer) picdp * conv ;
w = conv * picwd ;
h = conv * picht ;
Fputs( mpxfile , "setbounds _p to (0," ) ;
fprintreal ( mpxfile , dd , 1 , 4 ) ;
Fputs( mpxfile , ")--(" ) ;
fprintreal ( mpxfile , w , 1 , 4 ) ;
putc ( ',' , mpxfile );
fprintreal ( mpxfile , dd , 1 , 4 ) ;
fprintf( mpxfile , "%s\n", ")--" ) ;
Fputs( mpxfile , " (" ) ;
fprintreal ( mpxfile , w , 1 , 4 ) ;
putc ( ',' , mpxfile );
fprintreal ( mpxfile , h , 1 , 4 ) ;
Fputs( mpxfile , ")--(0," ) ;
fprintreal ( mpxfile , h , 1 , 4 ) ;
fprintf( mpxfile , "%s\n", ")--cycle;" ) ;
fprintf( mpxfile , "%s\n", "_p endgroup" ) ;
}
void
#ifdef HAVE_PROTOTYPES
dopush ( void )
#else
dopush ( )
#endif
{
if ( stksiz == stacksize )
{
fprintf(stdout, "%s%s%ld%c\n", "DVItoMP abort: " , "DVItoMP capacity exceeded (stack size=" , (long)stacksize , ')' ) ;
history = 3 ;
uexit ( history ) ;
}
hstack [stksiz ]= h ;
vstack [stksiz ]= v ;
wstack [stksiz ]= w ;
xstack [stksiz ]= x ;
ystack [stksiz ]= y ;
zstack [stksiz ]= z ;
stksiz = stksiz + 1 ;
}
void
#ifdef HAVE_PROTOTYPES
dopop ( void )
#else
dopop ( )
#endif
{
if ( stksiz == 0 )
{
fprintf(stdout, "%s%s%s%c\n", "DVItoMP abort: " , "Bad DVI file: " , "attempt to pop empty stack" , '!' ) ;
history = 3 ;
uexit ( history ) ;
}
else {
stksiz = stksiz - 1 ;
h = hstack [stksiz ];
v = vstack [stksiz ];
w = wstack [stksiz ];
x = xstack [stksiz ];
y = ystack [stksiz ];
z = zstack [stksiz ];
}
}
void
#ifdef HAVE_PROTOTYPES
zsetvirtualchar ( integer f , integer c )
#else
zsetvirtualchar ( f , c )
integer f ;
integer c ;
#endif
{
real oldscale ;
integer oldbufptr ;
integer oldfbase, oldftop ;
if ( fbase [f ]== 0 )
dosetchar ( f , c ) ;
else {
oldfbase = curfbase ;
oldftop = curftop ;
curfbase = fbase [f ];
curftop = ftop [f ];
oldscale = dviscale ;
dviscale = dviscale * fontscaledsize [f ];
oldbufptr = bufptr ;
bufptr = cmdptr [infobase [f ]+ c ];
dopush () ;
dodvicommands () ;
dopop () ;
bufptr = oldbufptr ;
dviscale = oldscale ;
curfbase = oldfbase ;
curftop = oldftop ;
}
}
void
#ifdef HAVE_PROTOTYPES
dodvicommands ( void )
#else
dodvicommands ( )
#endif
{
/* 9999 */ eightbits o ;
integer p, q ;
integer curfont ;
if ( ( curfbase < curftop ) && ( bufptr < virtualspace ) )
curfont = selectfont ( fontnum [curftop - 1 ]) ;
else curfont = maxfnums + 1 ;
w = 0 ;
x = 0 ;
y = 0 ;
z = 0 ;
while ( true ) {
o = getbyte () ;
p = firstpar ( o ) ;
if ( eof ( dvifile ) )
{
fprintf(stdout, "%s%s%s%c\n", "DVItoMP abort: " , "Bad DVI file: " , "the DVI file ended prematurely" , '!' ) ;
history = 3 ;
uexit ( history ) ;
}
if ( o < 132 )
{
if ( curfont > maxfnums )
if ( vfreading )
{
fprintf(stdout, "%s%s%ld%s\n", "DVItoMP abort: " , "no font selected for character " , (long)p , " in virtual font" ) ;
history = 3 ;
uexit ( history ) ;
}
else {
fprintf(stdout, "%s%s%s%ld%c\n", "DVItoMP abort: " , "Bad DVI file: " , "no font selected for character " , (long)p , '!' ) ;
history = 3 ;
uexit ( history ) ;
}
setvirtualchar ( curfont , p ) ;
h = h + round ( dviscale * fontscaledsize [curfont ]* width [infobase
[curfont ]+ p ]- 0.5 ) ;
}
else switch ( o )
{case 133 :
case 134 :
case 135 :
case 136 :
setvirtualchar ( curfont , p ) ;
break ;
case 132 :
{
q = trunc ( signedquad () * dviscale ) ;
dosetrule ( trunc ( p * dviscale ) , q ) ;
h = h + q ;
}
break ;
case 137 :
dosetrule ( trunc ( p * dviscale ) , trunc ( signedquad () * dviscale )
) ;
break ;
case 239 :
case 240 :
case 241 :
case 242 :
{register integer for_end; k = 1 ;for_end = p ; if ( k <= for_end) do
downthedrain = getbyte () ;
while ( k++ < for_end ) ;}
break ;
case 247 :
case 248 :
case 249 :
{
fprintf(stdout, "%s%s%s%c\n", "DVItoMP abort: " , "Bad DVI file: " , "preamble or postamble within a page!" , '!' ) ;
history = 3 ;
uexit ( history ) ;
}
break ;
case 138 :
;
break ;
case 139 :
{
fprintf(stdout, "%s%s%s%c\n", "DVItoMP abort: " , "Bad DVI file: " , "bop occurred before eop" , '!' ) ;
history = 3 ;
uexit ( history ) ;
}
break ;
case 140 :
goto lab9999 ;
break ;
case 141 :
dopush () ;
break ;
case 142 :
dopop () ;
break ;
case 143 :
case 144 :
case 145 :
case 146 :
h = h + trunc ( p * dviscale ) ;
break ;
case 147 :
case 148 :
case 149 :
case 150 :
case 151 :
{
w = trunc ( p * dviscale ) ;
h = h + w ;
}
break ;
case 152 :
case 153 :
case 154 :
case 155 :
case 156 :
{
x = trunc ( p * dviscale ) ;
h = h + x ;
}
break ;
case 157 :
case 158 :
case 159 :
case 160 :
v = v + trunc ( p * dviscale ) ;
break ;
case 161 :
case 162 :
case 163 :
case 164 :
case 165 :
{
y = trunc ( p * dviscale ) ;
v = v + y ;
}
break ;
case 166 :
case 167 :
case 168 :
case 169 :
case 170 :
{
z = trunc ( p * dviscale ) ;
v = v + z ;
}
break ;
case 171 :
case 172 :
case 173 :
case 174 :
case 175 :
case 176 :
case 177 :
case 178 :
case 179 :
case 180 :
case 181 :
case 182 :
case 183 :
case 184 :
case 185 :
case 186 :
case 187 :
case 188 :
case 189 :
case 190 :
case 191 :
case 192 :
case 193 :
case 194 :
case 195 :
case 196 :
case 197 :
case 198 :
case 199 :
case 200 :
case 201 :
case 202 :
case 203 :
case 204 :
case 205 :
case 206 :
case 207 :
case 208 :
case 209 :
case 210 :
case 211 :
case 212 :
case 213 :
case 214 :
case 215 :
case 216 :
case 217 :
case 218 :
case 219 :
case 220 :
case 221 :
case 222 :
case 223 :
case 224 :
case 225 :
case 226 :
case 227 :
case 228 :
case 229 :
case 230 :
case 231 :
case 232 :
case 233 :
case 234 :
case 235 :
case 236 :
case 237 :
case 238 :
curfont = selectfont ( p ) ;
break ;
case 243 :
case 244 :
case 245 :
case 246 :
definefont ( p ) ;
break ;
case 250 :
case 251 :
case 252 :
case 253 :
case 254 :
case 255 :
{
fprintf(stdout, "%s%s%s%ld%c\n", "DVItoMP abort: " , "Bad DVI file: " , "undefined command " , (long)o , '!' ) ;
history = 3 ;
uexit ( history ) ;
}
break ;
}
}
lab9999: ;
}
void mainbody() {
initialize () ;
opendvifile () ;
p = getbyte () ;
if ( p != 247 )
{
fprintf(stdout, "%s%s%s%c\n", "DVItoMP abort: " , "Bad DVI file: " , "First byte isn't start of preamble!" , '!' ) ;
history = 3 ;
uexit ( history ) ;
}
p = getbyte () ;
if ( p != 2 )
{
fprintf(stdout, "%s%s%ld%c\n", "DVItoMP warning: " , "identification in byte 1 should be " , (long)2 , '!' ) ;
history = 2 ;
}
numerator = signedquad () ;
denominator = signedquad () ;
if ( ( numerator <= 0 ) || ( denominator <= 0 ) )
{
fprintf(stdout, "%s%s%s%c\n", "DVItoMP abort: " , "Bad DVI file: " , "bad scale ratio in preamble" , '!' ) ;
history = 3 ;
uexit ( history ) ;
}
mag = signedquad () / ((double) 1000.0 ) ;
if ( mag <= 0.0 )
{
fprintf(stdout, "%s%s%s%c\n", "DVItoMP abort: " , "Bad DVI file: " , "magnification isn't positive" , '!' ) ;
history = 3 ;
uexit ( history ) ;
}
conv = ( numerator / ((double) 254000.0 ) ) * ( 72.0 / ((double) denominator
) ) * mag ;
dviperfix = ( 254000.0 / ((double) numerator ) ) * ( denominator / ((double)
72.27 ) ) / ((double) 1048576.0 ) ;
p = getbyte () ;
while ( p > 0 ) {
p = p - 1 ;
downthedrain = getbyte () ;
}
openmpxfile () ;
Fputs( mpxfile , "% Written by DVItoMP, Version 0.64" ) ;
fprintf( mpxfile , "%s\n", versionstring ) ;
{
while ( true ) {
do {
k = getbyte () ;
if ( ( k >= 243 ) && ( k < 247 ) )
{
p = firstpar ( k ) ;
definefont ( p ) ;
k = 138 ;
}
} while ( ! ( k != 138 ) ) ;
if ( k == 248 )
goto lab30 ;
if ( k != 139 )
{
fprintf(stdout, "%s%s%s%c\n", "DVItoMP abort: " , "Bad DVI file: " , "missing bop" , '!' )
;
history = 3 ;
uexit ( history ) ;
}
{register integer for_end; k = 0 ;for_end = 10 ; if ( k <= for_end) do
downthedrain = signedquad () ;
while ( k++ < for_end ) ;}
dviscale = 1.0 ;
stksiz = 0 ;
h = 0 ;
v = 0 ;
startpicture () ;
dodvicommands () ;
if ( stksiz != 0 )
{
fprintf(stdout, "%s%s%s%c\n", "DVItoMP abort: " , "Bad DVI file: " , "stack not empty at end of page" , '!' ) ;
history = 3 ;
uexit ( history ) ;
}
stoppicture () ;
fprintf( mpxfile , "%s\n", "mpxbreak" ) ;
}
lab30: ;
}
if ( history <= 1 )
uexit ( 0 ) ;
else uexit ( history ) ;
}
|