#include "fpse.h"

FPSECfgType FPSEIni;

#define ON(a) FPSE_Flags |= a
#define OFF(a) FPSE_Flags &= ~a

extern int amiga_cd_unit;
extern char amiga_cd_device[256];
extern int amiga_use_screen;
extern int frame_skip;

void LoadCFG(void)
{
  char row[128];
  FILE *fp;

  memset(&FPSEIni,0,sizeof(FPSEIni));

  OFF(EMULATE_BIOS);
  FPSEIni.BiosName = strdup("scph1001.bin");

  ON(COMPILE);

  OFF(VERBOSE);
  OFF(DISASMFLG);
  OFF(DEBUG);

  ON(CDUSECACHE);

  // Europe as default
  FPSE_Flags |= USE_EUROPE_PSX;

  OFF(USESERIAL);

  // Set default device
  strcpy(amiga_cd_device, "atapi.device");

  fp = fopen("fpse.cfg", "r");
  if (fp != NULL) {
    while (fgets(row, 128, fp) != NULL) {
      if (strncasecmp(row, "CDDevice=", strlen("CDDevice=")) == 0) {
        strcpy(amiga_cd_device, row+9);
        amiga_cd_device[strlen(amiga_cd_device)-1] = '\0';
      }
      if (strncasecmp(row, "CDUnit=", strlen("CDUnit=")) == 0) {
        amiga_cd_unit = atoi(row+7);
      }
      if (strncasecmp(row, "Compiler=No", strlen("Compiler=No")) == 0) {
        OFF(COMPILE);
      }
      if (strncasecmp(row, "Fullscreen=Yes", strlen("Fullscreen=Yes")) == 0) {
        amiga_use_screen = 1;
      }
      if (strncasecmp(row, "Frameskip=", strlen("Frameskip=")) == 0) {
        frame_skip = atoi(row+10);
      }
      if (strncasecmp(row, "Location=", strlen("Location=")) == 0) {
        FPSE_Flags &= 0xfffcffff; // Remove previous location
        switch (row[9]) {
          case 'U':
          case 'u': FPSE_Flags |= USE_AMERICAN_PSX;
          break;

          case 'J':
          case 'j': FPSE_Flags |= USE_JAPAN_PSX;
          break;

          default: FPSE_Flags |= USE_EUROPE_PSX;
          break;
        }
      }
    }
    fclose(fp);
  }
}

// OS Section
char *OS_Name        = "AmigaPPC";
char *OS_PorterName  = "Mathias 'AmiDog' Roslund";
char *OS_ExtendedMsg = 
     " -u#          cd unit (def: 2)\n"
     " -x<device>   cd device (def: atapi.device)\n"
     " -f           use screen (def: window)\n"
     " -l<c>        location, u=USA, j=Japan (def: Europe)\n"
     " -r#          frameskip (def: 1)\n";

int OS_CheckOption(char *s)
{
    switch (*s) {
    case 'u': amiga_cd_unit    = atoi(s+1); break;
    case 'x': strcpy(amiga_cd_device, s+1); break;
    case 'f': amiga_use_screen = 1;         break;
    case 'l':
        FPSE_Flags &= 0xfffcffff; // Remove previous location
        switch(*(s+1)) {
            case 'u': FPSE_Flags |= USE_AMERICAN_PSX; break; // USA
            case 'j': FPSE_Flags |= USE_JAPAN_PSX; break;  // Japan
            default: FPSE_Flags |= USE_EUROPE_PSX; break;  // Europe
        }
        break;
    case 'r': frame_skip = atoi(s+1); break;
    default:  return FPSE_ERR;
    }

    return FPSE_OK;
}