int ReadConfigFile() { CFILE cf; char line[80], *token, *value, *ptr; ubyte gamma; int joy_axis_min[7]; int joy_axis_center[7]; int joy_axis_max[7]; int i; strcpy( gameConfig.szLastPlayer, "" ); joy_axis_min[0] = joy_axis_min[1] = joy_axis_min[2] = joy_axis_min[3] = 0; joy_axis_max[0] = joy_axis_max[1] = joy_axis_max[2] = joy_axis_max[3] = 0; joy_axis_center[0] = joy_axis_center[1] = joy_axis_center[2] = joy_axis_center[3] = 0; JoySetCalVals(joy_axis_min, joy_axis_center, joy_axis_max); gameConfig.nDigiVolume = 8; gameConfig.nMidiVolume = 8; gameConfig.nRedbookVolume = 8; gameConfig.nControlType = 0; gameConfig.bReverseChannels = 0; //set these here in case no cfg file bHiresMoviesSave = gameOpts->movies.bHires; bRedbookEnabledSave = gameStates.sound.bRedbookEnabled; if (!CFOpen (&cf, "descent.cfg", gameFolders.szConfigDir, "rt", 0)) { return 1; } while (!CFEoF(&cf)) { memset (line, 0, 80); CFGetS (line, 80, &cf); ptr = &line [0]; while (::isspace (*ptr)) ptr++; if (*ptr != '\0') { token = strtok (ptr, "="); value = strtok (NULL, "="); if (!(value && token)) { PrintLog ("configuration file (descent.cfg) looks messed up.\n"); continue; } if (value[strlen(value)-1] == '\n') value[strlen(value)-1] = 0; if (!strcmp(token, pszDigiVolume)) gameConfig.nDigiVolume = (ubyte) strtol(value, NULL, 10); else if (!strcmp(token, pszMidiVolume)) gameConfig.nMidiVolume = (ubyte) strtol(value, NULL, 10); else if (!strcmp(token, pszRedbookEnabled)) gameStates.sound.bRedbookEnabled = bRedbookEnabledSave = strtol(value, NULL, 10); else if (!strcmp(token, pszRedbookVolume)) gameConfig.nRedbookVolume = (ubyte) strtol(value, NULL, 10); else if (!strcmp(token, pszStereoRev)) gameConfig.bReverseChannels = (ubyte) strtol(value, NULL, 10); else if (!strcmp(token, pszGammaLevel)) { gamma = (ubyte) strtol(value, NULL, 10); GrSetPaletteGamma( gamma ); } else if (!strcmp(token, pszDetailLevel)) { gameStates.app.nDetailLevel = strtol(value, NULL, 10); if (gameStates.app.nDetailLevel == NUM_DETAIL_LEVELS-1) { int count,dummy,oc,od,wd,wrd,da,sc; count = sscanf (value, "%d,%d,%d,%d,%d,%d,%d\n",&dummy,&oc,&od,&wd,&wrd,&da,&sc); if (count == 7) { gameStates.render.detail.nObjectComplexity = oc; gameStates.render.detail.nObjectDetail = od; gameStates.render.detail.nWallDetail = wd; gameStates.render.detail.nWallRenderDepth = wrd; gameStates.render.detail.nDebrisAmount = da; gameStates.sound.nSoundChannels = sc; InitCustomDetails(); } #ifdef PA_3DFX_VOODOO // Set to highest detail because you can't change em gameStates.render.detail.nObjectComplexity=gameStates.render.detail.nObjectDetail=gameStates.render.detail.nWallDetail= gameStates.render.detail.nWallRenderDepth=gameStates.render.detail.nDebrisAmount=SoundChannels = NUM_DETAIL_LEVELS-1; gameStates.app.nDetailLevel=NUM_DETAIL_LEVELS-1; InitCustomDetails(); #endif } } else if (!strcmp(token, pszJoystickMin)) { sscanf( value, "%d,%d,%d,%d", &joy_axis_min[0], &joy_axis_min[1], &joy_axis_min[2], &joy_axis_min[3] ); } else if (!strcmp(token, pszJoystickMax)) { sscanf( value, "%d,%d,%d,%d", &joy_axis_max[0], &joy_axis_max[1], &joy_axis_max[2], &joy_axis_max[3] ); } else if (!strcmp(token, pszJoystickCen)) { sscanf( value, "%d,%d,%d,%d", &joy_axis_center[0], &joy_axis_center[1], &joy_axis_center[2], &joy_axis_center[3] ); } else if (!strcmp(token, pszLastPlayer)) { char * p; strncpy( gameConfig.szLastPlayer, value, CALLSIGN_LEN ); p = strchr( gameConfig.szLastPlayer, '\n'); if ( p ) *p = 0; } else if (!strcmp(token, pszLastMission)) { char * p; strncpy( gameConfig.szLastMission, value, MISSION_NAME_LEN ); p = strchr( gameConfig.szLastMission, '\n'); if ( p ) *p = 0; } else if (!strcmp(token, pszVrType)) { gameConfig.vrType = strtol(value, NULL, 10); } else if (!strcmp(token, pszVrResolution)) { gameConfig.vrResolution = strtol(value, NULL, 10); } else if (!strcmp(token, pszVrTracking)) { gameConfig.vrTracking = strtol(value, NULL, 10); } else if (!strcmp(token, pszHiresMovies)) { bHiresMoviesSave = gameOpts->movies.bHires = strtol(value, NULL, 10); } } } CFClose(&cf); JoySetCalVals(joy_axis_min, joy_axis_center, joy_axis_max); i = FindArg( "-volume" ); if ( i > 0 ) { i = atoi( pszArgList[i+1] ); if ( i < 0 ) i = 0; if ( i > 100 ) i = 100; gameConfig.nDigiVolume = (i*8)/100; gameConfig.nMidiVolume = (i*8)/100; gameConfig.nRedbookVolume = (i*8)/100; } if ( gameConfig.nDigiVolume > 8 ) gameConfig.nDigiVolume = 8; if ( gameConfig.nMidiVolume > 8 ) gameConfig.nMidiVolume = 8; if ( gameConfig.nRedbookVolume > 8 ) gameConfig.nRedbookVolume = 8; DigiMidiVolume( (gameConfig.nDigiVolume*32768)/8, (gameConfig.nMidiVolume*128)/8 ); /* //printf( "DigiDeviceID: 0x%x\n", digi_driver_board ); //printf( "DigiPort: 0x%x\n", digi_driver_port ); //printf( "DigiIrq: 0x%x\n", digi_driver_irq ); //printf( "DigiDma: 0x%x\n", digi_driver_dma ); //printf( "MidiDeviceID: 0x%x\n", digi_midiType ); //printf( "MidiPort: 0x%x\n", digi_midi_port ); KeyGetChar(); */ /*gameConfig.nMidiType = digi_midiType; gameConfig.nDigiType = digi_driver_board; gameConfig.nDigiDMA = digi_driver_dma;*/ #if 0 if (digi_driver_board_16 > 0 && !FindArg("-no16bit") && digi_driver_board_16 != _GUS_16_ST) { digi_driver_board = digi_driver_board_16; digi_driver_dma = digi_driver_dma_16; } // HACK!!! //Hack to make some cards look like others, such as //the Crytal Lake look like Microsoft Sound System if ( digi_driver_board == _CRYSTAL_LAKE_8_ST ) { ubyte tmp; tmp = CrystalLakeReadMCP( CL_MC1 ); if ( !(tmp & 0x80) ) atexit( CrystalLakeSetSB ); // Restore to SB when done. CrystalLakeSetWSS(); digi_driver_board = _MICROSOFT_8_ST; } else if ( digi_driver_board == _CRYSTAL_LAKE_16_ST ) { ubyte tmp; tmp = CrystalLakeReadMCP( CL_MC1 ); if ( !(tmp & 0x80) ) atexit( CrystalLakeSetSB ); // Restore to SB when done. CrystalLakeSetWSS(); digi_driver_board = _MICROSOFT_16_ST; } else if ( digi_driver_board == _AWE32_8_ST ) { digi_driver_board = _SB16_8_ST; } else if ( digi_driver_board == _AWE32_16_ST ) { digi_driver_board = _SB16_16_ST; } else digi_driver_board = digi_driver_board; #else if (CFOpen (&cf, "descentw.cfg", gameFolders.szConfigDir, "rt", 0)) { while (!CFEoF(&cf)) { memset(line, 0, 80); CFGetS(line, 80, &cf); ptr = &(line[0]); while (::isspace(*ptr)) ptr++; if (*ptr != '\0') { token = strtok(ptr, "="); value = strtok(NULL, "="); if (!(value && token)) { PrintLog ("configuration file (descentw.cfg) looks messed up.\n"); continue; } if (value[strlen(value)-1] == '\n') value[strlen(value)-1] = 0; if (!strcmp(token, pszJoystickMin)) { sscanf( value, "%d,%d,%d,%d,%d,%d,%d", &joy_axis_min[0], &joy_axis_min[1], &joy_axis_min[2], &joy_axis_min[3], &joy_axis_min[4], &joy_axis_min[5], &joy_axis_min[6] ); } else if (!strcmp(token, pszJoystickMax)) { sscanf( value, "%d,%d,%d,%d,%d,%d,%d", &joy_axis_max[0], &joy_axis_max[1], &joy_axis_max[2], &joy_axis_max[3], &joy_axis_max[4], &joy_axis_max[5], &joy_axis_max[6] ); } else if (!strcmp(token, pszJoystickCen)) { sscanf( value, "%d,%d,%d,%d,%d,%d,%d", &joy_axis_center[0], &joy_axis_center[1], &joy_axis_center[2], &joy_axis_center[3], &joy_axis_center[4], &joy_axis_center[5], &joy_axis_center[6] ); } } } CFClose(&cf); } #endif return 0; }
int ReadConfigFile() { FILE *infile; char line[80], *token, *value, *ptr; ubyte gamma; int joy_axis_min[4]; int joy_axis_center[4]; int joy_axis_max[4]; int i; strcpy( config_last_player, "" ); joy_axis_min[0] = joy_axis_min[1] = joy_axis_min[2] = joy_axis_min[3] = 0; joy_axis_max[0] = joy_axis_max[1] = joy_axis_max[2] = joy_axis_max[3] = 0; joy_axis_center[0] = joy_axis_center[1] = joy_axis_center[2] = joy_axis_center[3] = 0; joy_set_cal_vals(joy_axis_min, joy_axis_center, joy_axis_max); digi_driver_board = 0; digi_driver_port = 0; digi_driver_irq = 0; digi_driver_dma = 0; digi_midi_type = 0; digi_midi_port = 0; Config_digi_volume = 4; Config_midi_volume = 4; Config_control_type = 0; Config_channels_reversed = 0; infile = fopen("descent.cfg", "rt"); if (infile == NULL) { return 1; } while (!feof(infile)) { memset(line, 0, 80); fgets(line, 80, infile); ptr = &(line[0]); while (isspace(*ptr)) ptr++; if (*ptr != '\0') { token = strtok(ptr, "="); value = strtok(NULL, "="); if (!strcmp(token, digi_dev_str)) digi_driver_board = strtol(value, NULL, 16); else if (!strcmp(token, digi_port_str)) digi_driver_port = strtol(value, NULL, 16); else if (!strcmp(token, digi_irq_str)) digi_driver_irq = strtol(value, NULL, 10); else if (!strcmp(token, digi_dma_str)) digi_driver_dma = strtol(value, NULL, 10); else if (!strcmp(token, digi_volume_str)) Config_digi_volume = strtol(value, NULL, 10); else if (!strcmp(token, midi_dev_str)) digi_midi_type = strtol(value, NULL, 16); else if (!strcmp(token, midi_port_str)) digi_midi_port = strtol(value, NULL, 16); else if (!strcmp(token, midi_volume_str)) Config_midi_volume = strtol(value, NULL, 10); else if (!strcmp(token, stereo_rev_str)) Config_channels_reversed = strtol(value, NULL, 10); else if (!strcmp(token, gamma_level_str)) { gamma = strtol(value, NULL, 10); gr_palette_set_gamma( gamma ); } else if (!strcmp(token, detail_level_str)) { Detail_level = strtol(value, NULL, 10); if (Detail_level == NUM_DETAIL_LEVELS-1) { int count,dummy,oc,od,wd,wrd,da,sc; count = sscanf (value, "%d,%d,%d,%d,%d,%d,%d\n",&dummy,&oc,&od,&wd,&wrd,&da,&sc); if (count == 7) { Object_complexity = oc; Object_detail = od; Wall_detail = wd; Wall_render_depth = wrd; Debris_amount = da; SoundChannels = sc; set_custom_detail_vars(); } } } else if (!strcmp(token, joystick_min_str)) { sscanf( value, "%d,%d,%d,%d", &joy_axis_min[0], &joy_axis_min[1], &joy_axis_min[2], &joy_axis_min[3] ); } else if (!strcmp(token, joystick_max_str)) { sscanf( value, "%d,%d,%d,%d", &joy_axis_max[0], &joy_axis_max[1], &joy_axis_max[2], &joy_axis_max[3] ); } else if (!strcmp(token, joystick_cen_str)) { sscanf( value, "%d,%d,%d,%d", &joy_axis_center[0], &joy_axis_center[1], &joy_axis_center[2], &joy_axis_center[3] ); } else if (!strcmp(token, last_player_str)) { char * p; strncpy( config_last_player, value, CALLSIGN_LEN ); p = strchr( config_last_player, '\n'); if ( p ) *p = 0; } else if (!strcmp(token, last_mission_str)) { char * p; strncpy( config_last_mission, value, MISSION_NAME_LEN ); p = strchr( config_last_mission, '\n'); if ( p ) *p = 0; } else if (!strcmp(token, config_vr_type_str)) { Config_vr_type = strtol(value, NULL, 10); } else if (!strcmp(token, config_vr_tracking_str)) { Config_vr_tracking = strtol(value, NULL, 10); } } } fclose(infile); i = FindArg( "-volume" ); if ( i > 0 ) { i = atoi( Args[i+1] ); if ( i < 0 ) i = 0; if ( i > 100 ) i = 100; Config_digi_volume = (i*8)/100; Config_midi_volume = (i*8)/100; } if ( Config_digi_volume > 8 ) Config_digi_volume = 8; if ( Config_midi_volume > 8 ) Config_midi_volume = 8; joy_set_cal_vals(joy_axis_min, joy_axis_center, joy_axis_max); digi_set_volume( (Config_digi_volume*32768)/8, (Config_midi_volume*128)/8 ); /* printf( "DigiDeviceID: 0x%x\n", digi_driver_board ); printf( "DigiPort: 0x%x\n", digi_driver_port ); printf( "DigiIrq: 0x%x\n", digi_driver_irq ); printf( "DigiDma: 0x%x\n", digi_driver_dma ); printf( "MidiDeviceID: 0x%x\n", digi_midi_type ); printf( "MidiPort: 0x%x\n", digi_midi_port ); key_getch(); */ Config_midi_type = digi_midi_type; Config_digi_type = digi_driver_board; // HACK!!! //Hack to make the Crytal Lake look like Microsoft Sound System if ( digi_driver_board == 0xe200 ) { ubyte tmp; tmp = CrystalLakeReadMCP( CL_MC1 ); if ( !(tmp & 0x80) ) atexit( CrystalLakeSetSB ); // Restore to SB when done. CrystalLakeSetWSS(); digi_driver_board = 0;//_MICROSOFT_8_ST;<was this microsoft thing, but its irrelevant, because we have no sound here yet,being that its also undefined, I set it to 0 -KRB } return 0; }