/* Usage:
dvinorm < input.dvi > output.dvi
The output is normalised so that bytwise comparison has 
some meaning. 
*/
#include <stdio.h>



#define get1 {ll=getc(iffi);}
#define get2 {ll=getc(iffi);ll<<=8;ll|=getc(iffi);}
#define get3 {ll=getc(iffi);ll<<=8;ll|=getc(iffi);ll<<=8;ll|=getc(iffi);}
#define get4 {ll=getc(iffi);ll<<=8;ll|=getc(iffi);\
		ll<<=8;ll|=getc(iffi);ll<<=8;ll|=getc(iffi);}
#define sget1 {ll=(char)getc(iffi);}
#define sget2 {ll=(char)getc(iffi);ll<<=8;ll|=getc(iffi);}
#define sget3 {ll=(char)getc(iffi);ll<<=8;ll|=getc(iffi);ll<<=8;ll|=getc(iffi);}
#define sget4 {ll=(char)getc(iffi);ll<<=8;ll|=getc(iffi);\
                ll<<=8;ll|=getc(iffi);ll<<=8;ll|=getc(iffi);}

#define copy_n(n) {int cc,kk; for(kk=0;kk<n;kk++) putc(getc(iffi),stdout);}
#define emmi(x,k) {putc((x>>k)&0xff,stdout);}
#define emit4(x) { emmi(x,24);emmi(x,16);emmi(x,8);emmi(x,0);}
#define oput(k,x) {putc(k,stdout);emit4(x);} break;


#define dvi_set {if ((ll<128)&&(ll>0)) {putc(ll,stdout);} \
		else { oput(131,ll);}; break; }
#define dvi_fnt_num {if((ll<64)&&(ll>0)) {putc(ll+171,stdout);} \
		else {oput(238,ll);}; break;}
#define dvi_special {putc(242,stdout); emit4(ll); copy_n(ll); break;}
#define dvi_font_def {int lkl; putc(246,stdout); emit4(ll); copy_n(12); \
			lkl=getc(iffi); putc(lkl,stdout); \
			ll=getc(iffi); putc(ll,stdout); \
			copy_n(lkl+ll); break; }
#define dvi_set_rule {putc(132,stdout); copy_n(8); break; }
#define dvi_put oput(136,ll)
#define dvi_put_rule {putc(137,stdout); copy_n(8); break; }

#define dvi_bop {top=0;sw=0;sx=0;sy=0;sz=0; ppp=ftell(stdout); \
		putc(139,stdout); \
		copy_n(40); sget4; emit4(pp); pp=ppp; break;}
#define dvi_eop {putc(140,stdout); break;}
#define dvi_post copy_post(iffi,pp)
		
#define dvi_right oput(146,ll)
#define dvi_w0 {oput(146,sw);}
#define dvi_w {sw=ll; oput(146,ll);}
#define dvi_x0 {oput(146,sx);}
#define dvi_x {sx=ll; oput(146,ll);}

#define dvi_down oput(160,ll)
#define dvi_y0 {oput(160,sy);}
#define dvi_y {sy=ll; oput(160,ll);}
#define dvi_z0 {oput(160,sz);}
#define dvi_z {sz=ll; oput(160,ll);}

#define sw stack[top].w
#define sx stack[top].x
#define sy stack[top].y
#define sz stack[top].z

struct dvi_stack {int h,v,w,x,y,z;} stack[1000];
#define dvi_push { stack[top+1]=stack[top]; top++; putc(141,stdout); break; }
#define dvi_pop { top--; putc(142,stdout); break;}

static void copy_post(FILE * iffi, long pp)
{
	long ppp=ftell(stdout);
	int ll,c;
	putc(248,stdout);
	emit4(pp);
	sget4;
	copy_n(24);
	while((c=getc(iffi))!=EOF) {
	    switch(c) { 
		    case 138: /* nop */
			break;
		/* fnt_def */
		    case 243: get1; dvi_font_def;
	      	    case 244: get2; dvi_font_def;
		    case 245: get3; dvi_font_def;
		    case 246: sget4; dvi_font_def;
		/* post_post */
		    case 249: putc(249,stdout);
			      emit4(ppp);
			      putc(2,stdout);
			      ppp=ftell(stdout);
			      ppp%=4;
			      ppp=8-ppp;
			      { int kk;
			      for(kk=0;kk<ppp;kk++) putc(223,stdout);
			      }
			      return;
	    }
	}
}

static void mainloop(FILE * iffi)
{
  int c;
  int l=0;
  int ll;
  int top=0;
   int pp=-1, ppp;
  while((c=getc(iffi))!=EOF) {
    switch (c) {

      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: 
	/* Set char */
		ll=c;
		l+=1;
		dvi_set;
  case 128: 
	get1; 
	dvi_set;
  case 129: get2; dvi_set;
  case 130: get3; dvi_set;
  case 131: sget4; dvi_set;
    l = c - 126;
    break;
  /* set_rule */
  case 132:
    l = 9; dvi_set_rule;
    break;
  /* Put char */
  case 133: get1; dvi_put;
  case 134: get2; dvi_put;
  case 135: get3; dvi_put;
  case 136: sget4; dvi_put;  /* Put char */
    l += c - 131;
    break;

  case 137:   /* Put rule */
    l += 9; dvi_put_rule;
    break;
  /* Nop */
  case 138:
    break;

  case 139:   /* Bop*/
    l = 40; dvi_bop;
    break;

  case 140:   /* Eop*/
    l = 5; dvi_eop;
    break;
  case 141: dvi_push;
  case 142: dvi_pop;
  case 143: sget1; dvi_right;
  case 144: sget2; dvi_right;
  case 145: sget3; dvi_right;
  case 146: sget4; dvi_right;
  case 147: ll=sw; dvi_w0;
  case 148: sget1; dvi_w;
  case 149: sget2; dvi_w;
  case 150: sget3; dvi_w;
  case 151: sget4; dvi_w;
  case 152: ll=sx; dvi_x0;
  case 153: sget1; dvi_x;
  case 154: sget2; dvi_x;
  case 155: sget3; dvi_x;
  case 156: sget4; dvi_x;
  case 157: sget1; dvi_down;
  case 158: sget2; dvi_down;
  case 159: sget3; dvi_down;
  case 160: sget4; dvi_down;
  case 161: ll=sy; dvi_y0;
  case 162: sget1; dvi_y;
  case 163: sget2; dvi_y;
  case 164: sget3; dvi_y;
  case 165: sget4; dvi_y;
  case 166: ll=sz; dvi_z0;
  case 167: sget1; dvi_z;
  case 168: sget2; dvi_z;
  case 169: sget3; dvi_z;
  case 170: sget4; dvi_z;
 /*Fnt_num*/
  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: 
      ll=c-171; dvi_fnt_num;
   case 235: get1; dvi_fnt_num;
  case 236: get2; dvi_fnt_num;
  case 237: get3; dvi_fnt_num;
  case 238: sget4; dvi_fnt_num;
  case 239: /* special */
	    get1; dvi_special;
  case 240: get2; dvi_special;
  case 241: get3; dvi_special;
  case 242: get4; dvi_special;
  /* Font def */
  case 243: get1; dvi_font_def;
  case 244: get2; dvi_font_def;
  case 245: get3; dvi_font_def;
  case 246: sget4; dvi_font_def;
  /* Preambule */
  case 247:
	break;
  /* Beginning of postambule */
  case 248:
	dvi_post;
	return;
	break;
  /* End of postambule */
  case 249:
	return;
	break;
    }
  }



}


main(argc, argv)
int argc;
char *argv[];
{
  int k,j;
  /* skip preambule */
  for(j=0;j<14;j++) { 
	k=getc(stdin);
	putc(k,stdout);
  }
  k=getc(stdin);
  putc(1,stdout);
  putc('X',stdout);
  for(j=0;j<k;j++) getc(stdin);
  mainloop(stdin);
}





/* End. */
