summaryrefslogtreecommitdiff
path: root/Build/source/texk/dvipsk/pprescan.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/dvipsk/pprescan.c')
-rw-r--r--Build/source/texk/dvipsk/pprescan.c37
1 files changed, 27 insertions, 10 deletions
diff --git a/Build/source/texk/dvipsk/pprescan.c b/Build/source/texk/dvipsk/pprescan.c
index b733365b3e9..f42af47abe5 100644
--- a/Build/source/texk/dvipsk/pprescan.c
+++ b/Build/source/texk/dvipsk/pprescan.c
@@ -57,9 +57,15 @@ pscanpage(void)
bopcolor(0);
while (1) {
switch (cmd=dvibyte()) {
-case 130: case 131: case 135: case 136: case 139:
-case 247: case 248: case 249: case 250: case 251: case 252: case 253:
-case 254: case 255: /* unimplemented or illegal commands */
+case 255: /* pTeX's dir or undefined */
+ if (!noptex) {
+ (void)dvibyte();
+ break;
+ }
+/* illegal commands */
+case 131: case 136: case 139: /* set4, put4, bop */
+case 247: case 248: case 249: /* pre, post, post_post */
+case 250: case 251: case 252: case 253: case 254: /* undefined */
(void)sprintf(errbuf,
"! DVI file contains unexpected command (%d)",cmd);
error(errbuf);
@@ -83,7 +89,16 @@ case 143: case 148: case 153: case 157: case 162: case 167:
case 147: case 152: case 161: case 166: /* w0, x0, y0, z0 */
case 138: case 141: case 142: /* nop, push, pop */
break;
-case 134: case 129: /* set2, put2 */
+case 130: case 135: /* set3, put3 */
+ if (noptex) {
+ (void)sprintf(errbuf,
+ "! DVI file contains unexpected pTeX command (%d)",cmd);
+ error(errbuf);
+ }
+ mychar = dvibyte(); mychar = (mychar << 8) + dvibyte();
+ mychar = (mychar << 8) + dvibyte();
+ goto dochar;
+case 129: case 134: /* set2, put2 */
if (noomega) {
(void)sprintf(errbuf,
"! DVI file contains unexpected Omega command (%d)",cmd);
@@ -91,9 +106,9 @@ case 134: case 129: /* set2, put2 */
}
mychar = dvibyte(); mychar = (mychar << 8) + dvibyte();
goto dochar;
-case 133: case 128: cmd = dvibyte(); /* set1, put1 commands drops through */
+case 128: case 133: cmd = dvibyte(); /* set1, put1 commands drops through */
default: /* these are commands 0 (setchar0) thru 127 (setchar 127) */
- mychar = cmd;
+ mychar = cmd;
dochar:
if (curfnt==NULL)
error("! Bad DVI file: no font selected");
@@ -109,8 +124,10 @@ dochar:
if (++frp == &frames[MAXFRAME] )
error("! virtual recursion stack overflow");
cd = curfnt->chardesc + mychar;
- if (cd->packptr == 0)
- error("! a non-existent virtual char is being used; check vf/tfm files");
+ if (cd->packptr == 0) {
+ fprintf(stderr, "Wrong char code: %04X\n", mychar);
+ error("! a non-existent virtual char is being used; check vf/tfm files");
+ }
curpos = cd->packptr + 2;
curlim = curpos + (256*(long)(*cd->packptr)+(*(cd->packptr+1)));
ffont = curfnt->localfonts;
@@ -199,8 +216,8 @@ pprescanpages(void)
if (ntfirst && mpagenum == firstpage && firstmatch == firstseq)
ntfirst = 0;
if (ntfirst ||
- ((evenpages && (pagenum & 1)) || (oddpages && (pagenum & 1)==0) ||
- (pagelist && !InPageList(pagenum)))) {
+ ((evenpages && (pagenum & 1)) || (oddpages && (pagenum & 1)==0) ||
+ (pagelist && !InPageList(pagenum)))) {
skipover(40);
skippage();
} else {