/* $Log: skippages.c,v $ * Revision 0.8 92/11/23 19:47:00 19:47:00 bt (Bo Thide') * Fixed resolution bug. Portable downloading. Added/changed options. PJXL color support * * Revision 0.7 92/11/13 02:41:44 02:41:44 bt (Bo Thide') * More bug fixes and improvements. Support for PaintJet XL * * Revision 0.6 92/11/10 21:48:41 21:48:41 bt (Bo Thide') * Bug fixes. Added -R option. Better font handling. * * Revision 0.5 92/11/09 16:25:48 16:25:48 bt (Bo Thide') * Rewrite of dospecial.c. Extended \special support * * Revision 0.4 92/11/08 02:46:04 02:46:04 bt (Bo Thide') * Changed to portable bit manipulations. Replaced strrstr for non-POSIX compliant C. Fixed numerous bugs. Added support for more \special's. * * Revision 0.3 92/08/24 12:45:54 12:45:54 bt (Bo Thide') * Fixed 8 bit (dc font) support. * * Revision 0.2 92/08/23 17:29:01 17:29:01 bt (Bo Thide') * Source cleaned up. Changed certain function calls. Removed globals. * * Revision 0.1 92/08/22 23:58:48 23:58:48 bt (Bo Thide') * First Release. * */ /* * This routine is used to pass over pages that are not being translated. It * is assumed to begin just after the preamble has been read, or just after a * DVI_BOP has been processed. It continues until either finding a DVI_BOP that * matches the desired starting page specification, or until running into the * postamble. */ #include #include "dvi.h" #include "globals.h" #include "macros.h" static char rcsid[] = "$Header: skippages.c,v 0.8 92/11/23 19:47:00 bt Exp $"; long skippages(bitfile, dvifile, pcllevel, resolution) FILE *bitfile; FILE *dvifile; short pcllevel; short resolution; { int i, k, q; bool badchar; bool match; long p; long hh=0L; /* Pixel analog of DVI unit h */ long vv=0L; /* Pixel analog of DVI unit v */ long startloc=0; while (TRUE) { if((k = (int)getubyte(dvifile)) >= DVI_SET1) { p = firstpar(dvifile, k); switch(k) { case DVI_BOP: scanbop(dvifile); match = TRUE; for(i = 0 ; i <= startvals ; i++) if(startthere[i] && (startcount[i] != count[i])) match = FALSE; if(match) { startloc = lastpage - 1; goto end; } break; case DVI_SET_RULE: case DVI_PUT_RULE: getsquad(dvifile); break; case DVI_FNT_DEF1: case DVI_FNT_DEF2: case DVI_FNT_DEF3: case DVI_FNT_DEF4: definefont(dvifile, p); break; case DVI_XXX1: case DVI_XXX2: case DVI_XXX3: case DVI_XXX4: badchar = FALSE; if(p + nextnamesfree - names > NAMESIZE) prerror("Out of string space during special\n"); for (k=0; k<(int)p; k++) { q = (int)getubyte(dvifile); if((q < ' ') || (q > '~')) badchar = TRUE; *(nextnamesfree + k) = q; } *(nextnamesfree + p) = 0; if(badchar) fprintf(stderr,"Non-ASCII character in DVI_XX command\n"); dospecial(bitfile, PRESCAN_ON, pcllevel, hh, vv, resolution); break; case DVI_POST: inpostamble = TRUE; goto end; break; default: break; } } } end: return(startloc); }