// cc -o vaxcode vaxcode.c -I/home/gtoal/src/compilers101/new-parser/imps /home/gtoal/src/compilers101/new-parser/imps/perms.c -lm

// Note that this program does not currently decode vax .obj files
// so needs to be worked on.

#include <perms.h>
#undef Newline
#undef Addr
static void DPrintch(int C) {
  static int count = 0;
  fprintf(stderr, "%02x ", C);
  count += 1;
  if ((count&15) == 0) fprintf(stderr, "\n");
}

int _imp_mainep(int _imp_argc, char **_imp_argv) {
  static int Records = 0;
  static int Ca = 0;
  int Len;
  int Thisline;
  int Stp = 0;
  int Stack[1+ 63 /*1:63*/];
  static int Stream = 0;
  void Newline(void) {
    static int Left = 60;
    Left--;
    if (Left <= 0) {
      Left = 60;
      Printsymbol(12);
    }
    Printsymbol(Nl);
  }
  void Select(int N) {
    Stream = N;
    Selectinput(N);
  }
  static const _imp_string Opcode[256 /*0:255*/] = {
      _imp_str_literal("halt  "), _imp_str_literal("nop   "),
      _imp_str_literal("rei   "), _imp_str_literal("bpt   "),
      _imp_str_literal("ret   "), _imp_str_literal("rsb   "),
      _imp_str_literal("ldpctx"), _imp_str_literal("svpctx"),
      _imp_str_literal("cvtps "), _imp_str_literal("cvtsp "),
      _imp_str_literal("index "), _imp_str_literal("crc   "),
      _imp_str_literal("prober"), _imp_str_literal("probew"),
      _imp_str_literal("insque"), _imp_str_literal("remque"),
      _imp_str_literal("bsbb  "), _imp_str_literal("brb   "),
      _imp_str_literal("bneq  "), _imp_str_literal("beql  "),
      _imp_str_literal("bgtr  "), _imp_str_literal("bleq  "),
      _imp_str_literal("jsb   "), _imp_str_literal("jmp   "),
      _imp_str_literal("bgeq  "), _imp_str_literal("blss  "),
      _imp_str_literal("bgtru "), _imp_str_literal("blequ "),
      _imp_str_literal("bvc   "), _imp_str_literal("bvs   "),
      _imp_str_literal("bgequ "), _imp_str_literal("blssu "),
      _imp_str_literal("addp4 "), _imp_str_literal("addp6 "),
      _imp_str_literal("subp4 "), _imp_str_literal("subp6 "),
      _imp_str_literal("cvtpt "), _imp_str_literal("mulp  "),
      _imp_str_literal("cvttp "), _imp_str_literal("divp  "),
      _imp_str_literal("movc3 "), _imp_str_literal("cmpc3 "),
      _imp_str_literal("scanc "), _imp_str_literal("spanc "),
      _imp_str_literal("movc5 "), _imp_str_literal("cmpc5 "),
      _imp_str_literal("movtc "), _imp_str_literal("movtuc"),
      _imp_str_literal("bsbw  "), _imp_str_literal("brw   "),
      _imp_str_literal("cvtwl "), _imp_str_literal("cvtwb "),
      _imp_str_literal("movp  "), _imp_str_literal("comp3 "),
      _imp_str_literal("cvtpl "), _imp_str_literal("cmpp4 "),
      _imp_str_literal("editpc"), _imp_str_literal("matchc"),
      _imp_str_literal("locc  "), _imp_str_literal("skpc  "),
      _imp_str_literal("movzwl"), _imp_str_literal("acbw  "),
      _imp_str_literal("movaw "), _imp_str_literal("pushaw"),
      _imp_str_literal("addf2 "), _imp_str_literal("addf3 "),
      _imp_str_literal("subf2 "), _imp_str_literal("subf3 "),
      _imp_str_literal("mulf2 "), _imp_str_literal("mulf3 "),
      _imp_str_literal("divf2 "), _imp_str_literal("divf3 "),
      _imp_str_literal("cvtfb "), _imp_str_literal("cvtfw "),
      _imp_str_literal("cvtfl "), _imp_str_literal("cvtrfl"),
      _imp_str_literal("cvtbf "), _imp_str_literal("      "),
      _imp_str_literal("cvtlf "), _imp_str_literal("acbf  "),
      _imp_str_literal("movf  "), _imp_str_literal("cmpf  "),
      _imp_str_literal("mnegf "), _imp_str_literal("tstf  "),
      _imp_str_literal("emodf "), _imp_str_literal("polyf "),
      _imp_str_literal("cvtfd "), _imp_str_literal("      "),
      _imp_str_literal("adawi "), _imp_str_literal("      "),
      _imp_str_literal("      "), _imp_str_literal("      "),
      _imp_str_literal("      "), _imp_str_literal("      "),
      _imp_str_literal("      "), _imp_str_literal("      "),
      _imp_str_literal("addd2 "), _imp_str_literal("addd3 "),
      _imp_str_literal("subd2 "), _imp_str_literal("subd3 "),
      _imp_str_literal("muld2 "), _imp_str_literal("muld3 "),
      _imp_str_literal("divd2 "), _imp_str_literal("divd3 "),
      _imp_str_literal("cvtdb "), _imp_str_literal("cvtdw "),
      _imp_str_literal("cvtdl "), _imp_str_literal("cvtrdl"),
      _imp_str_literal("cvtbd "), _imp_str_literal("cvtwd "),
      _imp_str_literal("cvtld "), _imp_str_literal("acbd  "),
      _imp_str_literal("movd  "), _imp_str_literal("cmpd  "),
      _imp_str_literal("mnegd "), _imp_str_literal("tstd  "),
      _imp_str_literal("emodd "), _imp_str_literal("polyd "),
      _imp_str_literal("cvtdf "), _imp_str_literal("      "),
      _imp_str_literal("ashl  "), _imp_str_literal("ashq  "),
      _imp_str_literal("emul  "), _imp_str_literal("ediv  "),
      _imp_str_literal("clrq  "), _imp_str_literal("movq  "),
      _imp_str_literal("movaq "), _imp_str_literal("pushaq"),
      _imp_str_literal("addb2 "), _imp_str_literal("addb3 "),
      _imp_str_literal("subb2 "), _imp_str_literal("subb3 "),
      _imp_str_literal("mulb2 "), _imp_str_literal("mulb3 "),
      _imp_str_literal("devb2 "), _imp_str_literal("divb3 "),
      _imp_str_literal("bisb2 "), _imp_str_literal("bisb3 "),
      _imp_str_literal("bicb2 "), _imp_str_literal("bicb3 "),
      _imp_str_literal("xorb2 "), _imp_str_literal("xorb3 "),
      _imp_str_literal("mnegb "), _imp_str_literal("caseb "),
      _imp_str_literal("movb  "), _imp_str_literal("cmpb  "),
      _imp_str_literal("mcomb "), _imp_str_literal("bitb  "),
      _imp_str_literal("clrb  "), _imp_str_literal("tstb  "),
      _imp_str_literal("incb  "), _imp_str_literal("decb  "),
      _imp_str_literal("cvtbl "), _imp_str_literal("cvtbw "),
      _imp_str_literal("movzbl"), _imp_str_literal("movzbw"),
      _imp_str_literal("rotl  "), _imp_str_literal("acbb  "),
      _imp_str_literal("movab "), _imp_str_literal("pushab"),
      _imp_str_literal("addw2 "), _imp_str_literal("addw3 "),
      _imp_str_literal("subw2 "), _imp_str_literal("subw3 "),
      _imp_str_literal("mulw2 "), _imp_str_literal("mulw3 "),
      _imp_str_literal("divw2 "), _imp_str_literal("divw3 "),
      _imp_str_literal("bisw2 "), _imp_str_literal("bisw3 "),
      _imp_str_literal("bicw2 "), _imp_str_literal("bicw3 "),
      _imp_str_literal("xorw2 "), _imp_str_literal("xorw3 "),
      _imp_str_literal("mnegw "), _imp_str_literal("casew "),
      _imp_str_literal("movw  "), _imp_str_literal("cmpw  "),
      _imp_str_literal("mcomw "), _imp_str_literal("bitw  "),
      _imp_str_literal("clrw  "), _imp_str_literal("tstw  "),
      _imp_str_literal("incw  "), _imp_str_literal("decw  "),
      _imp_str_literal("bispsw"), _imp_str_literal("bicpsw"),
      _imp_str_literal("popr  "), _imp_str_literal("pushr "),
      _imp_str_literal("chmk  "), _imp_str_literal("chme  "),
      _imp_str_literal("chms  "), _imp_str_literal("chmu  "),
      _imp_str_literal("addl2 "), _imp_str_literal("addl3 "),
      _imp_str_literal("subl2 "), _imp_str_literal("subl3 "),
      _imp_str_literal("mull2 "), _imp_str_literal("mull3 "),
      _imp_str_literal("divl2 "), _imp_str_literal("divl3 "),
      _imp_str_literal("bisl2 "), _imp_str_literal("bisl3 "),
      _imp_str_literal("bicl2 "), _imp_str_literal("bicl3 "),
      _imp_str_literal("xorl2 "), _imp_str_literal("xorl3 "),
      _imp_str_literal("mnegl "), _imp_str_literal("casel "),
      _imp_str_literal("movl  "), _imp_str_literal("cmpl  "),
      _imp_str_literal("mcoml "), _imp_str_literal("bitl  "),
      _imp_str_literal("clrl  "), _imp_str_literal("tstl  "),
      _imp_str_literal("incl  "), _imp_str_literal("decl  "),
      _imp_str_literal("adwc  "), _imp_str_literal("sbwc  "),
      _imp_str_literal("mtpr  "), _imp_str_literal("mfpr  "),
      _imp_str_literal("movpsl"), _imp_str_literal("pushl "),
      _imp_str_literal("moval "), _imp_str_literal("pushal"),
      _imp_str_literal("bbs   "), _imp_str_literal("bbc   "),
      _imp_str_literal("bbss  "), _imp_str_literal("bbcs  "),
      _imp_str_literal("bbsc  "), _imp_str_literal("bbcc  "),
      _imp_str_literal("bbssi "), _imp_str_literal("bbcci "),
      _imp_str_literal("blbs  "), _imp_str_literal("blbc  "),
      _imp_str_literal("ffs   "), _imp_str_literal("ffc   "),
      _imp_str_literal("cmpv  "), _imp_str_literal("cmpzv "),
      _imp_str_literal("extv  "), _imp_str_literal("extzv "),
      _imp_str_literal("insv  "), _imp_str_literal("acbl  "),
      _imp_str_literal("aoblss"), _imp_str_literal("aobleq"),
      _imp_str_literal("sobgeq"), _imp_str_literal("sobgtr"),
      _imp_str_literal("cvtlb "), _imp_str_literal("cvtlw "),
      _imp_str_literal("ashp  "), _imp_str_literal("cvtlp "),
      _imp_str_literal("callg "), _imp_str_literal("calls "),
      _imp_str_literal("xfc   "), _imp_str_literal("      "),
      _imp_str_literal("      "), _imp_str_literal("      ")};
  static const unsigned char Oplimit[256 /*0:255*/] = {
      0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 6, 5, 3, 3, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,
      1, 1, 1, 1, 1, 1, 1, 1, 4, 6, 4, 6, 5, 6, 5, 6, 3, 3, 4, 4, 5, 5, 6, 6,
      1, 1, 2, 2, 3, 3, 3, 4, 4, 4, 3, 3, 2, 4, 2, 1, 2, 2, 2, 3, 2, 3, 2, 3,
      2, 2, 2, 2, 2, 0, 2, 4, 2, 2, 2, 1, 5, 3, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0,
      2, 3, 2, 3, 2, 3, 2, 3, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 1, 5, 3, 2, 0,
      3, 3, 4, 4, 1, 2, 2, 1, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
      2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2, 2, 3, 4, 2, 1, 2, 3, 2, 3, 2, 3, 2, 3,
      2, 3, 2, 3, 2, 3, 2, 3, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
      2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 2, 2, 2, 1, 1, 1, 1,
      2, 2, 2, 2, 1, 1, 2, 1, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 4, 4, 4, 4, 4, 4,
      4, 4, 3, 3, 2, 2, 2, 2, 6, 3, 2, 2, 0, 0, 0, 0};
  static const signed char Opkey[1536 /*0:1535*/] = {
      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  1,  2,  1,  0,  0,  2,  1,  2,
      1,  0,  0,  4,  4,  4,  4,  4,  4,  1,  4,  2,  1,  4,  0,  1,  2,  1,  0,
      0,  0,  1,  2,  1,  0,  0,  0,  1,  4,  0,  0,  0,  0,  1,  4,  0,  0,  0,
      0,  -1, 0,  0,  0,  0,  0,  -1, 0,  0,  0,  0,  0,  -1, 0,  0,  0,  0,  0,
      -1, 0,  0,  0,  0,  0,  -1, 0,  0,  0,  0,  0,  -1, 0,  0,  0,  0,  0,  1,
      0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  -1, 0,  0,  0,  0,  0,  -1, 0,
      0,  0,  0,  0,  -1, 0,  0,  0,  0,  0,  -1, 0,  0,  0,  0,  0,  -1, 0,  0,
      0,  0,  0,  -1, 0,  0,  0,  0,  0,  -1, 0,  0,  0,  0,  0,  -1, 0,  0,  0,
      0,  0,  2,  1,  2,  1,  0,  0,  2,  1,  2,  1,  2,  1,  2,  1,  2,  1,  0,
      0,  2,  1,  2,  1,  2,  1,  2,  1,  1,  2,  1,  0,  2,  1,  2,  1,  2,  1,
      2,  1,  1,  2,  1,  0,  2,  1,  2,  1,  2,  1,  2,  1,  1,  0,  0,  0,  2,
      1,  1,  0,  0,  0,  2,  1,  1,  1,  0,  0,  2,  1,  1,  1,  0,  0,  2,  1,
      1,  2,  1,  0,  2,  1,  1,  2,  1,  0,  2,  1,  1,  1,  2,  1,  2,  1,  1,
      1,  2,  1,  -2, 0,  0,  0,  0,  0,  -2, 0,  0,  0,  0,  0,  2,  4,  0,  0,
      0,  0,  2,  1,  0,  0,  0,  0,  2,  1,  1,  0,  0,  0,  2,  1,  1,  0,  0,
      0,  2,  1,  4,  0,  0,  0,  2,  1,  2,  1,  0,  0,  2,  1,  1,  1,  0,  0,
      2,  1,  2,  1,  0,  0,  1,  2,  1,  0,  0,  0,  1,  2,  1,  0,  0,  0,  2,
      4,  0,  0,  0,  0,  2,  2,  2,  -2, 0,  0,  2,  4,  0,  0,  0,  0,  2,  0,
      0,  0,  0,  0,  4,  4,  0,  0,  0,  0,  4,  4,  0,  0,  0,  0,  4,  4,  0,
      0,  0,  0,  4,  4,  4,  0,  0,  0,  4,  4,  0,  0,  0,  0,  4,  4,  4,  0,
      0,  0,  4,  4,  0,  0,  0,  0,  4,  4,  4,  0,  0,  0,  4,  1,  0,  0,  0,
      0,  4,  2,  0,  0,  0,  0,  4,  4,  0,  0,  0,  0,  4,  4,  0,  0,  0,  0,
      1,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  4,  0,  0,  0,  0,  4,
      4,  4,  -2, 0,  0,  4,  4,  0,  0,  0,  0,  4,  4,  0,  0,  0,  0,  4,  4,
      0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  4,  1,  4,  4,  4,  0,  4,  2,  1,
      0,  0,  0,  4,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  2,  0,  0,
      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
      0,  0,  0,  0,  0,  0,  8,  8,  0,  0,  0,  0,  8,  8,  8,  0,  0,  0,  8,
      8,  0,  0,  0,  0,  8,  8,  8,  0,  0,  0,  8,  8,  0,  0,  0,  0,  8,  8,
      8,  0,  0,  0,  8,  8,  0,  0,  0,  0,  8,  8,  8,  0,  0,  0,  8,  1,  0,
      0,  0,  0,  8,  2,  0,  0,  0,  0,  8,  4,  0,  0,  0,  0,  8,  4,  0,  0,
      0,  0,  1,  8,  0,  0,  0,  0,  2,  4,  0,  0,  0,  0,  4,  8,  0,  0,  0,
      0,  8,  8,  8,  -2, 0,  0,  8,  8,  0,  0,  0,  0,  8,  8,  0,  0,  0,  0,
      8,  8,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  8,  1,  8,  4,  8,  0,  8,
      2,  1,  0,  0,  0,  8,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  4,
      4,  0,  0,  0,  1,  8,  8,  0,  0,  0,  4,  4,  4,  8,  0,  0,  4,  8,  4,
      4,  0,  0,  8,  0,  0,  0,  0,  0,  8,  8,  0,  0,  0,  0,  8,  4,  0,  0,
      0,  0,  8,  0,  0,  0,  0,  0,  1,  1,  0,  0,  0,  0,  1,  1,  1,  0,  0,
      0,  1,  1,  0,  0,  0,  0,  1,  1,  1,  0,  0,  0,  1,  1,  0,  0,  0,  0,
      1,  1,  1,  0,  0,  0,  1,  1,  0,  0,  0,  0,  1,  1,  1,  0,  0,  0,  1,
      1,  0,  0,  0,  0,  1,  1,  1,  0,  0,  0,  1,  1,  0,  0,  0,  0,  1,  1,
      1,  0,  0,  0,  1,  1,  0,  0,  0,  0,  1,  1,  1,  0,  0,  0,  1,  1,  0,
      0,  0,  0,  1,  1,  1,  0,  0,  0,  1,  1,  0,  0,  0,  0,  1,  1,  0,  0,
      0,  0,  1,  1,  0,  0,  0,  0,  1,  1,  0,  0,  0,  0,  1,  0,  0,  0,  0,
      0,  1,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,
      1,  4,  0,  0,  0,  0,  1,  2,  0,  0,  0,  0,  1,  4,  0,  0,  0,  0,  1,
      2,  0,  0,  0,  0,  1,  4,  4,  0,  0,  0,  1,  1,  1,  -2, 0,  0,  1,  4,
      0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  2,  2,  0,  0,  0,  0,  2,  2,  2,
      0,  0,  0,  2,  2,  0,  0,  0,  0,  2,  2,  2,  0,  0,  0,  2,  2,  0,  0,
      0,  0,  2,  2,  2,  0,  0,  0,  2,  2,  0,  0,  0,  0,  2,  2,  2,  0,  0,
      0,  2,  2,  0,  0,  0,  0,  2,  2,  2,  0,  0,  0,  2,  2,  0,  0,  0,  0,
      2,  2,  2,  0,  0,  0,  2,  2,  0,  0,  0,  0,  2,  2,  2,  0,  0,  0,  2,
      2,  0,  0,  0,  0,  2,  2,  2,  0,  0,  0,  2,  2,  0,  0,  0,  0,  2,  2,
      0,  0,  0,  0,  2,  2,  0,  0,  0,  0,  2,  2,  0,  0,  0,  0,  2,  0,  0,
      0,  0,  0,  2,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  2,  0,  0,  0,
      0,  0,  2,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,
      0,  2,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,
      2,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  4,  4,  0,  0,  0,  0,  4,
      4,  4,  0,  0,  0,  4,  4,  0,  0,  0,  0,  4,  4,  4,  0,  0,  0,  4,  4,
      0,  0,  0,  0,  4,  4,  4,  0,  0,  0,  4,  4,  0,  0,  0,  0,  4,  4,  4,
      0,  0,  0,  4,  4,  0,  0,  0,  0,  4,  4,  4,  0,  0,  0,  4,  4,  0,  0,
      0,  0,  4,  4,  4,  0,  0,  0,  4,  4,  0,  0,  0,  0,  4,  4,  4,  0,  0,
      0,  4,  4,  0,  0,  0,  0,  4,  4,  4,  0,  0,  0,  4,  4,  0,  0,  0,  0,
      4,  4,  0,  0,  0,  0,  4,  4,  0,  0,  0,  0,  4,  4,  0,  0,  0,  0,  4,
      0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  4,  0,
      0,  0,  0,  0,  4,  4,  0,  0,  0,  0,  4,  4,  0,  0,  0,  0,  4,  4,  0,
      0,  0,  0,  4,  4,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  4,  0,  0,  0,
      0,  0,  4,  4,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  4,  1,  -1, 0,  0,
      0,  4,  1,  -1, 0,  0,  0,  4,  1,  -1, 0,  0,  0,  4,  1,  -1, 0,  0,  0,
      4,  1,  -1, 0,  0,  0,  4,  1,  -1, 0,  0,  0,  4,  1,  -1, 0,  0,  0,  4,
      1,  -1, 0,  0,  0,  4,  -1, 0,  0,  0,  0,  4,  -1, 0,  0,  0,  0,  4,  1,
      1,  4,  0,  0,  4,  1,  1,  4,  0,  0,  4,  1,  1,  4,  0,  0,  4,  1,  1,
      4,  0,  0,  4,  1,  1,  4,  0,  0,  4,  1,  1,  4,  0,  0,  4,  4,  1,  1,
      0,  0,  4,  4,  4,  -2, 0,  0,  4,  4,  -1, 0,  0,  0,  4,  4,  -1, 0,  0,
      0,  4,  -1, 0,  0,  0,  0,  4,  -1, 0,  0,  0,  0,  4,  1,  0,  0,  0,  0,
      4,  2,  0,  0,  0,  0,  1,  2,  1,  1,  2,  1,  4,  2,  1,  0,  0,  0,  1,
      1,  0,  0,  0,  0,  4,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
  void Vaxcode(int V) {
    _imp_string Temp;
    static const int Pc = 15;
    static _imp_string Prefix;
    static _imp_string Operand;
    static _imp_string Current;
    static int State = 0;
    int Mode;
    int Reg;
    static int Extra;
    static int Hexlen;
    static int P;
    static int Key;
    static int Limit;
    static int St_sw;
    static void *St[4 /*0:3*/] = {
        &&St_0,
        &&St_1,
        &&St_2,
        &&St_default,
    };
    static int Ops_sw;
    static void *Ops[16 /*0:15*/] = {
        &&Ops_0,  &&Ops_1,  &&Ops_2,  &&Ops_3,  &&Ops_4,  &&Ops_5,
        &&Ops_6,  &&Ops_7,  &&Ops_8,  &&Ops_9,  &&Ops_10, &&Ops_11,
        &&Ops_12, &&Ops_13, &&Ops_14, &&Ops_15,
    };
    static const _imp_string Sreg[16 /*0:15*/] = {
        _imp_str_literal("R0"),  _imp_str_literal("R1"),
        _imp_str_literal("R2"),  _imp_str_literal("R3"),
        _imp_str_literal("R4"),  _imp_str_literal("R5"),
        _imp_str_literal("R6"),  _imp_str_literal("R7"),
        _imp_str_literal("R8"),  _imp_str_literal("R9"),
        _imp_str_literal("R10"), _imp_str_literal("GLA"),
        _imp_str_literal("AP"),  _imp_str_literal("FP"),
        _imp_str_literal("SP"),  _imp_str_literal("PC")};
    _imp_string Hex(int X) {
      static const _imp_string Xsym[16 /*0:15*/] = {
          _imp_str_literal("0"), _imp_str_literal("1"), _imp_str_literal("2"),
          _imp_str_literal("3"), _imp_str_literal("4"), _imp_str_literal("5"),
          _imp_str_literal("6"), _imp_str_literal("7"), _imp_str_literal("8"),
          _imp_str_literal("9"), _imp_str_literal("A"), _imp_str_literal("B"),
          _imp_str_literal("C"), _imp_str_literal("D"), _imp_str_literal("E"),
          _imp_str_literal("F")};
      return (_imp_join(Xsym[(unsigned)X >> 4 & 15], Xsym[X & 15]));
    }
    void Addr(int N) {
      Printstring(Hex(((unsigned)N >> 16)&255));
      Printstring(Hex(((unsigned)N >> 8)&255));
      Printstring(Hex(N&255));
    }
    void Hexbyte(int N) {
      Printstring(Hex(Nl));
      Hexlen += 2;
    }
    void Dumpline(void) {
      Spaces(20 - Hexlen);
      Hexlen = 0;
      Printstring(Current);
      Current = _imp_str_literal("");
      Newline();
    }
    fprintf(stderr, "Vaxcode(%d);\n", V);
    V = V & 255;
    Ca++;
    goto *St[St_sw = State];
  St_0:
    Spaces(5);
    Addr(Ca - 1);
    Space();
    Hexlen = 0;
    Current = Opcode[V];
    Operand = _imp_str_literal("");
    Prefix = _imp_str_literal("");
    P = V * 6;
    Key = 0;
    Limit = Oplimit[V];
    Hexbyte(V);
    if (V == 0xFC) {
      Current = _imp_str_literal(".entry");
      Operand = _imp_str_literal("FC");
      State = 2;
      Extra = 0;
      return;
    }
    if (!Limit)
      goto Complete;
    State = 1;
    Key = 1;
    goto Done;
  St_1:
    Hexbyte(V);
    if (Opkey[P] < 0) {
      State = 2;
      Extra = -Opkey[P];
      goto St2;
    }
    Mode = (unsigned)V >> 4 & 15;
    Reg = V & 15;
    Extra = 0;
    goto *Ops[Ops_sw = Mode];
  Ops_0:
  Ops_1:
  Ops_2:
  Ops_3:;
    Operand = _imp_join(_imp_str_literal("S^"), _imp_join(Hex(V), Operand));
    goto Complete;
  Ops_4:
    Operand = _imp_join(
        _imp_str_literal("["),
        _imp_join(Sreg[Reg], _imp_join(_imp_str_literal("]"), Operand)));
    goto Done;
  Ops_5:
    Operand = _imp_join(Sreg[Reg], Operand);
    goto Complete;
  Ops_8:;
  Ops_9:;
  Ops_6:;
  Ops_7:
    Prefix = _imp_str_literal("");
    if (Reg == Pc && Mode >= 8) {
      Prefix = _imp_str_literal("I^");
      Temp = _imp_str_literal("");
      Extra = Opkey[P];
      if (Mode == 9) {
        Temp = _imp_str_literal("");
        Extra = 4;
      }
    } else {
      Temp = _imp_join(_imp_str_literal("("),
                       _imp_join(Sreg[Reg], _imp_str_literal(")")));
      if (Mode >= 8)
        Temp = _imp_join(Temp, _imp_str_literal("+"));
      if (Mode == 7)
        Temp = _imp_join(_imp_str_literal("-"), Temp);
      if (Mode == 9)
        Temp = _imp_join(_imp_str_literal("@"), Temp);
    }
    Operand = _imp_join(Temp, Operand);
    if (!Extra)
      goto Complete;
    State = 2;
    goto Done;
  Ops_10:
  Ops_11:;
    Prefix = _imp_str_literal("B^");
    Extra = 1;
    goto Rest;
  Ops_12:
  Ops_13:;
    Prefix = _imp_str_literal("W^");
    Extra = 2;
    goto Rest;
  Ops_14:
  Ops_15:;
    Prefix = _imp_str_literal("L^");
    Extra = 4;
  Rest:
    if (Mode & 1)
      Prefix = _imp_join(_imp_str_literal("@"), Prefix);
    if (Reg != Pc)
      Operand = _imp_join(
          _imp_str_literal("("),
          _imp_join(Sreg[Reg], _imp_join(_imp_str_literal(")"), Operand)));
    State = 2;
    goto Done;
  St_2:
    Hexbyte(V);
  St2:
    Operand = _imp_join(Hex(V), Operand);
    Extra--;
    if (Extra > 0)
      goto Done;
    Operand = _imp_join(Prefix, Operand);
  Complete:;
    if (*Length(Current) + *Length(Operand) > 40) {
      Dumpline();
      Hexlen = -6;
      Spaces(12);
    }
    Current = _imp_join(Current, _imp_join(_imp_str_literal(" "), Operand));
    Operand = _imp_str_literal("");
    if (Key == Limit) {
      Dumpline();
      State = 0;
      goto Done;
    }
    Key++;
    P++;
    Current = _imp_join(Current, _imp_str_literal(","));
    State = 1;
  Done:;
    goto St_skip;
  St_default:
    fprintf(stderr, "\nSwitch label 'St(%d):' not set in %s\n", St_sw,
            __PRETTY_FUNCTION__);
    fflush(stderr);
    abort();
  St_skip:;
  }
  void Skip(int N) {
    N = N | 1;
    for (;;) {
      {int tmp; Readsymbol(&tmp);  DPrintch(tmp);}
      //Skipsymbol();
      N--;
      if (N <= 0)
        return;
    }
  }
  void Get(int *N) {
    int J;
    Readch(N);                 DPrintch(*N);
    Readch(&J);                DPrintch(J);
    *N = *N + (J << 8);
  }
  auto void Findline(void);
  void Gettir(void) {
    int T;
    /*
00000000: 00 00 00 00 02 05 43 48 45 43 4b 01 31 20 39 2d  : ......CHECK.1 9-
00000010: 4d 41 59 2d 32 30 30 34 20 31 36 3a 33 31 20 20  : MAY-2004 16:31
00000020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 00  :                .
00000030: 01 49 4d 50 5f 56 41 58 20 56 31 30 2e 32 2e 30  : .IMP_VAX V10.2.0
00000040: 20 50 31 2f 39 2e 31 35 20 50 32 2f 32 30 38 20  :  P1/9.15 P2/208
00000050: 50 33 2f 30 33 38 2b 30 31 31 00 02 44 55 41 31  : P3/038+011..DUA1
00000060: 3a 5b 47 54 4f 41 4c 2e 53 52 43 5d 43 48 45 43  : :[GTOAL.SRC]CHEC
00000070: 4b 2e 49 4d 50 3b 34 01 00 02 e9 00 39 32 00 00  : K.IMP;4.....92..
00000080: 0c 4c 4c 5f 43 4f 44 45 5f 41 52 45 41 00 02 a9  : .LL_CODE_AREA...
00000090: 00 7f 08 00 00 0c 4c 4c 5f 44 49 41 47 5f 41 52  : ......LL_DIAG_AR
000000a0: 45 41 00 02 a9 00 e8 00 00 00 10 4c 4c 5f 52 45  : EA.........LL_RE
000000b0: 43 4f 56 45 52 59 5f 41 52 45 41 00 02 a9 00 10  : COVERY_AREA.....
000000c0: 00 00 00 0e 4c 4c 5f 49 4e 46 4f 5f 41 52 45 41  : ....LL_INFO_AREA
000000d0: 5f 42 00 02 a9 00 dc 06 00 00 10 4c 4c 5f 43 4f  : _B.........LL_CO
000000e0: 4e 53 54 41 4e 54 5f 41 52 45 41 00 02 89 01 7a  : NSTANT_AREA....z
000000f0: 0e 00 00 0e 4c 4c 5f 47 4c 4f 42 41 4c 5f 41 52  : ....LL_GLOBAL_AR
00000100: 45 41 02 04 03 00 50 04 00 00 19 04 01 00 19 04  : EA....P.........
00000110: 02 00 19 fc 39 32 00 00 04 01 00 50 04 01 1e 19  : ....92.....P....
00000120: 05 01 45 04 19 05 01 31 07 19 04 05 00 19 fc 01  : ..E....1........
00000130: 00 00 00 05 01 c5 07 19 fa 05 43 48 45 43 4b 05  : ..........CHECK.
     */
    fprintf(stderr, "Gettir();\n"); // Called once. Looks like check.obj is not in the expected format?
    for (;;) {
      Records++;
      Get(&Len);
      Readch(&T);              DPrintch(T);
      Len--;
      if (T == 3) {
        Thisline = 50000;
        Findline();
      }
      if (T == 2)
        return;
      Skip(Len);
    }
  }
  void Findline(void) {
    int S;
    static int Here = 0;
    fprintf(stderr, "Findline();\n");
    if (Thisline <= Here)
      return;
    //Select(1);
    do {
      Here++;
      Write(Here, -4);
      Space();
      for (;;) {
        Readsymbol(&S);
        if (S == Nl)
          break;
        Printsymbol(S);
      }
      Newline();
    } while (Here < Thisline);
    //Select(2);
  }
  void Processtir(void) {
    int Com;
    int D;
    int P;
    int Extra;
    fprintf(stderr, "Processtir();\n");
    Extra = Len & 1;
    if (Len <= 0)
      goto Skip;
    Readch(&Com);                        DPrintch(Com);
    Len--;
    if ((Com & 0x80) != 0 && Ca >= 0)
      goto Cc;
    if (Com != 5)
      goto Skip;
    Readch(&P);                          DPrintch(P);
    Get(&D);
    {int tmp;                            Readsymbol(&tmp);  DPrintch(tmp);}
    //Skipsymbol();
    Len -= 4;
    Ca = -1;
    if (P == 3) {
      Readch(&P);                        DPrintch(P);
      Get(&D);
      Len -= 3;
      if (P != ((-4) & 255))
        goto Skip;
      Get(&Thisline);
      Len -= 2;
      goto Skip;
    }
    if (P)
      goto Skip;
    Ca = D;
    while (Len > 0) {
      Readch(&Com);                      DPrintch(Com);
      Len--;
      if (!(Com & 0x80))
        break;
    Cc:
      Com = Com | 0xFFFFFF00;
      do {
        Readch(&P);                      DPrintch(P);
        Len--;
        Vaxcode(P);
        Com++;
      } while (Com);
    }
  Skip:;
    while (Len > 0) {
      Skipsymbol();
      Len--;
    }
    if (!Extra) {
                                         {int tmp; Readsymbol(&tmp);  DPrintch(tmp);}
      //Skipsymbol();
    }
  }

  // MAIN PROGRAM:
  if (_imp_on_event(9)) {
    Newline();
    if (Stream != 1) {
      Printstring(_imp_join(_imp_str_literal("Cannot open file - "), EVENTMESSAGE()));
      Newline();
      _imp_monitor(0);
    }
    exit(0);
  }
  if (_imp_argc != 2) {
    fprintf(stderr, "syntax: vaxcode file{.obj}\n");
    exit(1);
  }
  Openinput(2, _imp_join(_imp_c2istr(_imp_argv[1]), _imp_str_literal(".obj")));
  Select(2);
  Selectoutput(0/*1*/);
  if (_imp_on_event(9)) {
    Newline();
    Printstring(_imp_str_literal("**end**"));
    Newline();
    exit(0);
  }
  for (;;) {
    Gettir();
    Findline();
    Processtir();
  }
  exit(0);
  return (1);
}
