#include <stdio.h>

int fload(FILE *file, char *p)
{
  int i = 0, c;
  for (;;) {
    c = fgetc(file);
    if (c == EOF) return(i);
    *p++ = c; i += 1;
  }
  return i;
}


char *cstr(char *istr)
{
  static char tmp[0x1000];
  int i, l=*istr;
  for (i = 0; i < l; i++) tmp[i] = *++istr;
  tmp[l] = '\0';
  return tmp;
}

char *imem(char *mem)
{
  static char tmp[4+0x1000];
  int *ip;
  tmp[0] = mem[3]; tmp[1] = mem[2]; tmp[2] = mem[1]; tmp[3] = mem[0];
  ip = (int *)tmp;
  sprintf(tmp+4, "%d", *ip);
  return tmp+4;
}

int main(int argc, char **argv)
{
  char *fname;
  FILE *file, *outf;
  char mem[1024*1024*4];
  int size;

  if (argc != 2) return(1);
  fname = argv[1];
  file = fopen(fname, "rb");
  size = fload(file, mem);
  fprintf(stderr, "'%s'\n", cstr(mem+0x0000));
  fprintf(stderr, "'%s'\n", cstr(mem+0x0007));
  fprintf(stderr, "'%s'\n", cstr(mem+0x000e));
  fprintf(stderr, "'%s'\n", cstr(mem+0x001e));
  fprintf(stderr, "'%s'\n", cstr(mem+0x0027));
  fprintf(stderr, "'%s'\n", cstr(mem+0x0030));
  fprintf(stderr, "'%s'\n", cstr(mem+0x003e));
  fprintf(stderr, "%s\n", imem(mem+0x0040));
  fprintf(stderr, "%s\n", imem(mem+0x0044));
  fprintf(stderr, "%s\n", imem(mem+0x0048));
  outf = fopen(cstr(mem+0x000e), "wb");
  if (outf != NULL) {
    fwrite(mem+0x1000, size-0x1000, 1, outf);
    fclose(outf);
  }
  return(0);
}


