#define CHIPFILESIZE  267776

#define FS_PATCHLOC1  0x00003BABL
#define FS_PATCHLOC2  0x00003C61L
#define FS_PATCHLOC3  0x00009764L
#define FS_PATCHLOC4  0x0000695DL
#define FS_PATCHLOC5  0x000069E6L
#define FS_PATCHLOC6  0x000075F2L

#define BEFORE   0
#define AFTER    1

#define FF_Invalid        0
#define FF_Original       1
#define FF_Patched        2
#define FF_Newpatch       3

int getInFile(char* ExeIn, FILE **ExeInF);
int checkFileType(FILE *ExeInF);
int getOutFile(char* filetypeString, char* ExeIn, char* ExeOut, FILE **ExeOutF);
int patch(FILE *ExeInF, FILE *ExeOutF, int beforeaft);
int getTmpFile(char *tmpFilename, FILE **ExeOutF);
void prependext(char *exefilename);

/* left column = before, right column = after */
/* (to avoid breaking the patch into too many parts, sometimes the same byte
    might appear in both columns) */

static char fs_patchpart1[][2] = {
  0xAD, 0x81
};

static char fs_patchpart2[][2] = {
  0x0B, 0x80,
  0xC0, 0x36,
  0x7C, 0xF7,
  0x03, 0x0A,
  0xE9, 0x20,
  0xC1, 0xEB,
  0x00, 0xE7
};

static char fs_patchpart3[][2] = {
  0xFC, 0xFA,
  0x16, 0x16,
  0x50, 0x50,
  0x6A, 0x6A,
  0x02, 0x04,
  0x9A, 0x9A,
  0x88, 0x88,
  0x09, 0x09,
  0x00, 0x00,
  0x00, 0x00,
  0x3D, 0x3D,
  0x02, 0x04,
  0x00, 0x00,
  0x73, 0x73,
  0x05, 0x04,
  0x33, 0x33,
  0xC0, 0xC0,
  0xEB, 0xEB,
  0x35, 0x35,
  0x90, 0x31,
  0x81, 0xC0,
  0x7E, 0xF6,
  0xFC, 0x06,
  0xAC, 0xF7,
  0xAA, 0x0A,
  0x75, 0x20,
  0xF4, 0x75,
  0x56, 0x02,
  0x8D, 0xB0,
  0x46, 0x0A,
  0xFC, 0xA3,
  0x16, 0x4E,
  0x50, 0x06,
  0x6A, 0xEB,
  0x02, 0x10
};

static char fs_patchpart4[][2] = {
  0x8B, 0xE9,
  0x1E, 0xA2,
  0x80, 0x00,
  0x16, 0x90
};

static char fs_patchpart5[][2] = {
  0xD1, 0x24,
  0xE0, 0xFC,
  0x93, 0xD1,
  0x2E, 0xE8,
  0xFF, 0x93,
  0xA7, 0x2E,
  0xEE, 0xFF,
  0x07, 0xA7,
  0x36, 0xF0,
  0x08, 0x07,
  0x36, 0x36,
  0x08, 0x08,
  0x36, 0xCE,
  0x08, 0x08,
  0x36, 0x56,
  0x08, 0x09,
  0xCE, 0xC6,
  0x08, 0x09,
  0xCE, 0xA0,
  0x08, 0x0A,
  0xCE, 0x7C,
  0x08, 0x0B,
  0xCE, 0x9E,
  0x08, 0x0D,
  0x56, 0xD2,
  0x09, 0x0E,
  0x56, 0x14,
  0x09, 0x10,
  0x56, 0x8B,
  0x09, 0x46,
  0x56, 0x22,
  0x09, 0xA3,
  0xC6, 0x4E,
  0x09, 0x06,
  0xC6, 0x8B,
  0x09, 0x1E,
  0xC6, 0x80,
  0x09, 0x16,
  0xC6, 0xE9,
  0x09, 0x52,
  0xA0, 0xFF,
  0x0A, 0x8B,
  0xA0, 0x1E,
  0x0A, 0x4E,
  0xA0, 0x06,
  0x0A, 0x3B,
  0xA0, 0x5E,
  0x0A, 0x20,
  0x7C, 0x74,
  0x0B, 0x05,
  0x7C, 0xC7,
  0x0B, 0x46,
  0x7C, 0x20,
  0x0B, 0x00,
  0x7C, 0x00,
  0x0B, 0x8B,
  0x9E, 0x1E,
  0x0D, 0x80,
  0x9E, 0x16,
  0x0D, 0xE9,
  0x9E, 0xD2,
  0x0D, 0x0B
};

static char fs_patchpart6[][2] = {
  0x8B, 0xE9,
  0x1E, 0x1A,
  0x80, 0xF4,
  0x16, 0x90
};
