261 return str_buffr; |
261 return str_buffr; |
262 |
262 |
263 case FIOS_TYPE_OLDFILE: |
263 case FIOS_TYPE_OLDFILE: |
264 sprintf(str_buffr, "%s/%s.%s", _fios_path, item->name, _old_extensions[item->old_extension]); |
264 sprintf(str_buffr, "%s/%s.%s", _fios_path, item->name, _old_extensions[item->old_extension]); |
265 return str_buffr; |
265 return str_buffr; |
266 |
266 |
267 case FIOS_TYPE_SCENARIO: |
267 case FIOS_TYPE_SCENARIO: |
268 sprintf(str_buffr, "%s/%s.scn", path, item->name); |
268 sprintf(str_buffr, "%s/%s.scn", path, item->name); |
269 return str_buffr; |
269 return str_buffr; |
270 |
270 |
271 case FIOS_TYPE_OLD_SCENARIO: |
271 case FIOS_TYPE_OLD_SCENARIO: |
272 sprintf(str_buffr, "%s/%s.%s", path, item->name, _old_extensions[item->old_extension]); |
272 sprintf(str_buffr, "%s/%s.%s", path, item->name, _old_extensions[item->old_extension]); |
273 return str_buffr; |
273 return str_buffr; |
274 } |
274 } |
275 |
275 |
289 |
289 |
290 if (statvfs(*path, &s) == 0) |
290 if (statvfs(*path, &s) == 0) |
291 { |
291 { |
292 uint64 tot = (uint64)s.f_bsize * s.f_bavail; |
292 uint64 tot = (uint64)s.f_bsize * s.f_bavail; |
293 SET_DPARAM32(0, (uint32)(tot >> 20)); |
293 SET_DPARAM32(0, (uint32)(tot >> 20)); |
294 return STR_4005_BYTES_FREE; |
294 return STR_4005_BYTES_FREE; |
295 } |
295 } |
296 else |
296 else |
297 return STR_4006_UNABLE_TO_READ_DRIVE; |
297 return STR_4006_UNABLE_TO_READ_DRIVE; |
298 } |
298 } |
299 #else |
299 #else |
300 SET_DPARAM32(0, 0); |
300 SET_DPARAM32(0, 0); |
301 return STR_4005_BYTES_FREE; |
301 return STR_4005_BYTES_FREE; |
302 #endif |
302 #endif |
303 } |
303 } |
304 |
304 |
305 void FiosMakeSavegameName(char *buf, const char *name) |
305 void FiosMakeSavegameName(char *buf, const char *name) |
306 { |
306 { |
346 {"extmidi", "External MIDI Driver", &_extmidi_music_driver, EXTMIDI_PRI}, |
346 {"extmidi", "External MIDI Driver", &_extmidi_music_driver, EXTMIDI_PRI}, |
347 #endif |
347 #endif |
348 #endif |
348 #endif |
349 #ifdef __BEOS__ |
349 #ifdef __BEOS__ |
350 { "bemidi", "BeOS MIDI Driver", &_bemidi_music_driver, 1}, |
350 { "bemidi", "BeOS MIDI Driver", &_bemidi_music_driver, 1}, |
351 #endif |
351 #endif |
352 { "null", "Null Music Driver", &_null_music_driver, 1}, |
352 { "null", "Null Music Driver", &_null_music_driver, 1}, |
353 { NULL, NULL, NULL, 0} |
353 { NULL, NULL, NULL, 0} |
354 }; |
354 }; |
355 |
355 |
356 bool FileExists(const char *filename) |
356 bool FileExists(const char *filename) |
357 { |
357 { |
358 return access(filename, 0) == 0; |
358 return access(filename, 0) == 0; |
359 } |
359 } |
360 |
360 |
361 static int LanguageCompareFunc(const void *a, const void *b) |
361 static int LanguageCompareFunc(const void *a, const void *b) |
362 { |
362 { |
363 return strcmp(*(char**)a, *(char**)b); |
363 return strcmp(*(char**)a, *(char**)b); |
433 _path.game_data_dir = malloc( MAX_PATH ); |
433 _path.game_data_dir = malloc( MAX_PATH ); |
434 strcpy(_path.game_data_dir, GAME_DATA_DIR); |
434 strcpy(_path.game_data_dir, GAME_DATA_DIR); |
435 |
435 |
436 #if defined(USE_HOMEDIR) |
436 #if defined(USE_HOMEDIR) |
437 { |
437 { |
438 char *homedir; |
438 char *homedir; |
439 homedir = getenv("HOME"); |
439 homedir = getenv("HOME"); |
440 |
440 |
441 if(!homedir) { |
441 if(!homedir) { |
442 struct passwd *pw = getpwuid(getuid()); |
442 struct passwd *pw = getpwuid(getuid()); |
443 if (pw) homedir = pw->pw_dir; |
443 if (pw) homedir = pw->pw_dir; |
444 } |
444 } |
445 |
445 |
446 _path.personal_dir = str_fmt("%s" PATHSEP "%s", homedir, PERSONAL_DIR); |
446 _path.personal_dir = str_fmt("%s" PATHSEP "%s", homedir, PERSONAL_DIR); |
447 } |
447 } |
448 |
448 |
449 #else /* not defined(USE_HOMEDIR) */ |
449 #else /* not defined(USE_HOMEDIR) */ |
450 |
450 |
451 _path.personal_dir = malloc( MAX_PATH ); |
451 _path.personal_dir = malloc( MAX_PATH ); |
452 strcpy(_path.personal_dir, PERSONAL_DIR); |
452 strcpy(_path.personal_dir, PERSONAL_DIR); |
453 |
453 |
454 // check if absolute or relative path |
454 // check if absolute or relative path |
455 s = strchr(_path.personal_dir, '/'); |
455 s = strchr(_path.personal_dir, '/'); |
456 |
456 |
457 // add absolute path |
457 // add absolute path |
458 if (s==NULL || _path.personal_dir != s) { |
458 if (s==NULL || _path.personal_dir != s) { |
459 getcwd(_path.personal_dir, MAX_PATH); |
459 getcwd(_path.personal_dir, MAX_PATH); |
460 s = strchr(_path.personal_dir, 0); |
460 s = strchr(_path.personal_dir, 0); |
461 *s++ = '/'; |
461 *s++ = '/'; |
462 strcpy(s, PERSONAL_DIR); |
462 strcpy(s, PERSONAL_DIR); |
463 } |
463 } |
464 |
464 |
465 #endif /* defined(USE_HOMEDIR) */ |
465 #endif /* defined(USE_HOMEDIR) */ |
466 |
466 |
467 s = strchr(_path.personal_dir, 0); |
467 s = strchr(_path.personal_dir, 0); |
468 |
468 |
469 // append a / ? |
469 // append a / ? |
470 if (s[-1] != '/') { s[0] = '/'; s[1] = 0; } |
470 if (s[-1] != '/') { s[0] = '/'; s[1] = 0; } |
471 |
471 |
472 _path.save_dir = str_fmt("%ssave", _path.personal_dir); |
472 _path.save_dir = str_fmt("%ssave", _path.personal_dir); |
473 _path.autosave_dir = str_fmt("%s/autosave", _path.save_dir); |
473 _path.autosave_dir = str_fmt("%s/autosave", _path.save_dir); |
474 _path.scenario_dir = str_fmt("%sscenario", _path.personal_dir); |
474 _path.scenario_dir = str_fmt("%sscenario", _path.personal_dir); |
475 _path.gm_dir = str_fmt("%sgm/", _path.game_data_dir); |
475 _path.gm_dir = str_fmt("%sgm/", _path.game_data_dir); |
476 _path.data_dir = str_fmt("%sdata/", _path.game_data_dir); |
476 _path.data_dir = str_fmt("%sdata/", _path.game_data_dir); |
477 _path.lang_dir = str_fmt("%slang/", _path.game_data_dir); |
477 _path.lang_dir = str_fmt("%slang/", _path.game_data_dir); |
478 |
478 |
479 _config_file = str_fmt("%sopenttd.cfg", _path.personal_dir); |
479 _config_file = str_fmt("%sopenttd.cfg", _path.personal_dir); |
480 |
480 |
481 // make (auto)save and scenario folder |
481 // make (auto)save and scenario folder |
482 mkdir(_path.save_dir, 0755); |
482 mkdir(_path.save_dir, 0755); |
483 mkdir(_path.autosave_dir, 0755); |
483 mkdir(_path.autosave_dir, 0755); |
484 mkdir(_path.scenario_dir, 0755); |
484 mkdir(_path.scenario_dir, 0755); |
485 } |
485 } |