#include <stdio.h>
#include <dos.h>
#include <exec/types.h>
#include <exec/memory.h>

main()
{
   int i,j,nb,nb1,nbr,dn,(*ROM_Load)(void *,int);
   ULONG f,f1;
   char *p,*rom,ml[10]={0x48,0xe7,0x7f,0xfe,0x78,0x04,0x20,0x6f,0x00,0x3c};
   unsigned char rp[102] = {
      0x48,0xe7,0x7f,0xfe,0x2c,0x78,0x00,0x04,0x70,0x00,0x43,0xfa,0x00,0x46,
      0x4e,0xae,0xfd,0xd8,0xc1,0x8e,0x24,0x3c,0x00,0x00,0x03,0xed,0x43,0xfa,
      0x00,0x42,0xc3,0x89,0x4e,0xae,0xff,0xe2,0x2f,0x00,0xc3,0x40,0x24,0x2f,
      0x00,0x40,0x26,0x3c,0x00,0x02,0x00,0x00,0x4e,0xae,0xff,0xd6,0x22,0x1f,
      0x4e,0xae,0xff,0xdc,0xcd,0x49,0x2c,0x78,0x00,0x04,0x4e,0xae,0xfe,0x62,
      0x20,0x3c,0x00,0x00,0x00,0x00,0x4c,0xdf,0x7f,0xfe,0x4e,0x75,0x64,0x6f,
      0x73,0x2e,0x6c,0x69,0x62,0x72,0x61,0x72,0x79,0x00,0x4d,0x61,0x63,0x52,
      0x4f,0x4d,0x73,0x00
   };
   
   p = (char *)AllocMem(100000,MEMF_CLEAR);
   if (p) {
      rom = (char *)AllocMem(196608,MEMF_CLEAR);
      if (rom) {
         f = Open("A-Max Startup",MODE_OLDFILE);
         if (f) {
            nb = Read(f,p,100000);
            if (nb!=-1) {
               for (i=0; i<100000; i++) {
                  if (*(p+i)==ml[0]) {
                     for (j=1; j<10; j++) if (*(p+i+j)!=ml[j]) break;
                     if (j==10) break;
                  }
               }
               if (i!=100000) {
                  ROM_Load = p+i;
                  printf("Reading ROMs...");
                  dn = (*ROM_Load)((void *)rom,0);
                  printf("Done!\n");
                  rp[72] = dn/16777216;
                  rp[73] = (dn-(rp[68]*16777216))/65536;
                  rp[74] = (dn%65536)/256;
                  rp[75] = dn%256;
                  for (j=0; j<102; j++) *(p+i+j) = rp[j];
                  f1 = Open("A-Max Startup.patch",MODE_NEWFILE);
                  if (f1) {
                     nb1 = Write(f1,p,nb);
                     if (nb1!=nb) printf("FastAMax error: couldn't write output file for patched A-Max\n");
                     Close(f1);
                  }
                  else printf("FastAMax error: couldn't open output file for patched A-Max\n");
                  if (rp[69]==0x69) nbr = 65536; else nbr = 131072;
                  f1 = Open("MacROMs",MODE_NEWFILE);
                  if (f1) {
                     nb1 = Write(f1,rom,nbr);
                     if (nb1!=nbr) printf("FastAMax error: couldn't write output file for Macintosh ROMs\n");
                     Close(f1);
                  }
                  else printf("FastAMax error: couldn't open output file for Macintosh ROMs\n");
               }
               else printf("FastAMax error: couldn't identify A-Max program file\n");
            }
            else printf("FastAMax error: couldn't read A-Max program file\n");
            Close(f);
         }
         else printf("FastAMax error: couldn't open A-Max program file\n");
         FreeMem((APTR *)rom,196608);
      }
      else printf("FastAMax error: couldn't allocate memory for ROM image\n");
      FreeMem((APTR *)p,100000);
   }
   else printf("FastAMax error: couldn't allocate memory for A-Max program\n");
}
