예제 #1
0
파일: iniconfig.c 프로젝트: mckayemu/hugo
void
parse_INIfile ()
{
    Log ("--[ PARSING INI FILE ]------------------------------\n");

#ifndef LINUX
    sprintf (config_file, "%shugo.ini", short_exe_name);
#else
    {

        char tmp_home[256];
        FILE *f;

        sprintf (tmp_home, "%shugo.ini", short_exe_name);

        f = fopen (tmp_home, "rb");

        if (f != NULL)
        {
            strcpy (config_file, tmp_home);
            fclose (f);
        }
        else
            strcpy (config_file, "/etc/hugo.ini");
    }
#endif


    init_config ();

    parse_INIfile_raw ();

    dispose_config ();

}
예제 #2
0
char
init_config (void)
{
  FILE *FCfgFile = NULL;
  char *pWrd = NULL;
  char *pRet;
  char *pTmp;
  char *section = NULL;

  if (config_ar) dispose_config();

  config_ar_index = 0;
  config_ar = (config_var *) malloc (sizeof (config_var) * config_ar_size_max);
  if (! config_ar) return 0;

  /* open config file for reading */
  if ((FCfgFile = fopen (config_file, "r")) != NULL)
    {
      do
			{
			  memset (sCfgFileLine, '\0', BUFSIZ);
			  /* note.. line must NOT be a comment */
			  pRet = fgets (sCfgFileLine, BUFSIZ, FCfgFile);
    
			  if (sCfgFileLine[0] == '#')
			    continue;
    
			  if (sCfgFileLine[0] == '[')
			    {
			      int section_size;
			      pWrd = strrchr (sCfgFileLine, ']');
			      if (pWrd == NULL)	/* Badly formed section line */
				      continue;
    
			      if (section != NULL)
				      free (section);
    
			      section_size = pWrd - sCfgFileLine;
			      section = (char *) malloc (section_size);
			      strncpy (section, sCfgFileLine + 1, section_size - 1);
			      section[section_size - 1] = '\0';
			      continue;
			    }
    
			  pWrd = strchr (sCfgFileLine, '=');
			  if (pWrd == NULL)
			    continue;
    
			  pTmp = strchr (pWrd, '\n');
			  if (pTmp != NULL)
			    *pTmp = '\0';
    
			  if (config_ar_index < config_ar_size_max)
			    {
			      config_ar[config_ar_index].section = (char *) strdup (section);
    
			      *pWrd = '\0';
			      pTmp = pWrd - 1;
			      while (*pTmp == '\t' || *pTmp == ' ') *(pTmp--) = '\0';
			      config_ar[config_ar_index].variable = (char *) strdup (sCfgFileLine);
    
			      while (*pWrd == '\t' || *pWrd == ' ') pWrd++;
			      config_ar[config_ar_index].value = (char *) strdup (pWrd + 1);
    
			      config_ar_index++;
			    }
    
			}
      while (pRet != NULL);

      fclose (FCfgFile);
    }

  if (section != NULL)
    free (section);

  qsort (config_ar, config_ar_index, sizeof (config_var), config_var_cmp);

  return 1;
}
예제 #3
0
파일: iniconfig.c 프로젝트: mckayemu/hugo
//! makes the configuration changes permanent
void
save_config (void)
{

    char config_name[PATH_MAX];
    unsigned char input_config_number, input_config_button, input_config_player;

    // Reads all variables in the ini file
    init_config ();

    set_config_var_str ("main", "rom_dir", initial_path);
    set_config_var_int ("main", "config", current_config);
    set_config_var_int ("main", "language", language);
    set_config_var_int ("main", "smode", smode);
    set_config_var_int ("main", "eagle", use_eagle);
    set_config_var_int ("main", "scanline", use_scanline);
    set_config_var_int ("main", "snd_freq", option.want_snd_freq);
    set_config_var_int ("main", "buffer_size", sbuf_size);
    set_config_var_int ("main", "joy_type", gamepad_driver);
    set_config_var_int ("main", "sound_driver", sound_driver);
    set_config_var_int ("main", "start_fullscreen", option.want_fullscreen);
    set_config_var_int ("main", "use_fullscreen_aspect",
                        option.want_fullscreen_aspect);
    set_config_var_int ("main", "use_overlay", option.want_hardware_scaling);
    set_config_var_int ("main", "minimum_bios_hooking", minimum_bios_hooking);
    set_config_var_str ("main", "cdsystem_path", cdsystem_path);
    set_config_var_str ("main", "cd_path", ISO_filename);
    set_config_var_int ("main", "stereo_sound", option.want_stereo);
    set_config_var_int ("main", "fullscreen_width", option.fullscreen_width);
    set_config_var_int ("main", "fullscreen_height", option.fullscreen_height);
    set_config_var_int ("main", "window_size", option.window_size);
    set_config_var_int ("main", "arcade_card",
                        option.want_arcade_card_emulation);
    set_config_var_int ("main", "supergraphx",
                        option.want_supergraphx_emulation);
    set_config_var_int ("main", "tv_size",
                        option.want_television_size_emulation);
    set_config_var_int ("main", "hardware_format",
                        option.wanted_hardware_format);

    // For each input configuration ...
    for (input_config_number = 0; input_config_number < 16;
            input_config_number++)
    {
        char section_name[] = "CONFIG0";

        if (input_config_number < 10)
            section_name[6] = '0' + input_config_number;
        else
            section_name[6] = 'a' + input_config_number - 10;

        // For each player configuration ...
        for (input_config_player = 0; input_config_player < 5;
                input_config_player++)
        {
            char input_name[8];
            char input_type_name[10];

            // If there's a joypad, dump it
            if (config[input_config_number].individual_config[input_config_player].joydev)
            {
                snprintf (input_name, 8, "joydev%1d", input_config_player);
                snprintf (input_type_name, 10, "%d",
                          config[input_config_number].individual_config[input_config_player].joydev);
                set_config_var_str (section_name, input_name, input_type_name);
            }

            // For each button configuration ...
            for (input_config_button = 0; input_config_button < J_MAX;
                    input_config_button++)
            {
                char temp_joy_str[15];

                // Skip empty entries in joypad mapping
                if (config[input_config_number].individual_config[input_config_player].
                        joy_mapping[input_config_button] == default_joy_mapping[input_config_button])
                    continue;

                if ((0 == config[input_config_number].individual_config[input_config_player].joydev)
                        && (input_config_button >= J_PAD_START))
                {
                    // If it is a joystick button/axis and it is disabled, we skip it
                    continue;
                }

                snprintf (temp_joy_str, 15, "%s%1d",
                          joymap_reverse[input_config_button], input_config_player);

                set_config_var_int (section_name, temp_joy_str,
                                    config[input_config_number].individual_config[input_config_player].
                                    joy_mapping[input_config_button]);
            }
        }
    }

    // Sorts the configuration array
    qsort (config_ar, config_ar_index, sizeof (config_var), config_var_cmp);

    // Dump the configuration into a file
    sprintf (config_name, "%shugo.ini", short_exe_name);
    dump_config (config_name);

    dispose_config ();

}