/* Constructor function open(options: Object = null): File NOTE: options can be an options hash or as mode string */ static EjsObj *openFile(Ejs *ejs, EjsFile *fp, int argc, EjsObj **argv) { EjsObj *options; cchar *mode; int perms, omode; if (argc < 0 || argc > 1) { ejsThrowArgError(ejs, "Bad args"); return 0; } options = argv[0]; if (argc == 0 || !ejsIsDefined(ejs, options)) { omode = O_RDONLY | O_BINARY; perms = EJS_FILE_PERMS; fp->mode = EJS_FILE_READ; mode = "r"; } else { if (ejsIs(ejs, options, String)) { mode = ejsToMulti(ejs, options); perms = EJS_FILE_PERMS; } else { perms = ejsGetNumOption(ejs, options, "permissions", EJS_FILE_PERMS, 1); mode = getStrOption(ejs, options, "mode", "r", 1); if (ejs->exception) { return 0; } } omode = mapMode(mode); if (!(omode & O_WRONLY)) { fp->mode |= EJS_FILE_READ; } if (omode & (O_WRONLY | O_RDWR)) { fp->mode |= EJS_FILE_WRITE; } } fp->modeString = sclone(mode); fp->perms = perms; if (fp->file) { mprCloseFile(fp->file); } fp->file = mprOpenFile(fp->path, omode, perms); if (fp->file == 0) { ejsThrowIOError(ejs, "Cannot open %s", fp->path); return 0; } if (options) { ejsSetPathAttributes(ejs, fp->path, options); } #if ME_CC_MMU && FUTURE mprGetPathInfo(&fp->info); fp->mapped = mapFile(fp, fp->info.size, MPR_MAP_READ | MPR_MAP_WRITE); #endif fp->mode |= EJS_FILE_OPEN; return (EjsObj*) fp; }
int iniRead() { FILE* fp = NULL; fp = fopen(FBARL_INI_PATH, "r"); if(fp) { char* pszStrOption = NULL; // ----------------------------------------------------------------------------------------- // Rom path options // ----------------------------------------------------------------------------------------- pszStrOption = getStrOption(fp, "rompath_1:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szROMPaths[0], pszStrOption); pszStrOption = getStrOption(fp, "rompath_2:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szROMPaths[1], pszStrOption); pszStrOption = getStrOption(fp, "rompath_3:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szROMPaths[2], pszStrOption); pszStrOption = getStrOption(fp, "rompath_4:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szROMPaths[3], pszStrOption); pszStrOption = getStrOption(fp, "rompath_5:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szROMPaths[4], pszStrOption); pszStrOption = getStrOption(fp, "rompath_6:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szROMPaths[5], pszStrOption); pszStrOption = getStrOption(fp, "rompath_7:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szROMPaths[6], pszStrOption); pszStrOption = getStrOption(fp, "rompath_8:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szROMPaths[7], pszStrOption); pszStrOption = getStrOption(fp, "rompath_9:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szROMPaths[8], pszStrOption); pszStrOption = getStrOption(fp, "rompath_10:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szROMPaths[9], pszStrOption); pszStrOption = getStrOption(fp, "rompath_11:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szROMPaths[10], pszStrOption); pszStrOption = getStrOption(fp, "rompath_12:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szROMPaths[11], pszStrOption); // ----------------------------------------------------------------------------------------- // Custom System Filters options // ----------------------------------------------------------------------------------------- if(!getBoolOption(fp, "filter_capcom_misc:\"" , &g_opt_bCustomSysFilter[0])) {return 0;} if(!getBoolOption(fp, "filter_cave:\"" , &g_opt_bCustomSysFilter[1])) {return 0;} if(!getBoolOption(fp, "filter_cps1:\"" , &g_opt_bCustomSysFilter[2])) {return 0;} if(!getBoolOption(fp, "filter_cps2:\"" , &g_opt_bCustomSysFilter[3])) {return 0;} if(!getBoolOption(fp, "filter_cps3:\"" , &g_opt_bCustomSysFilter[4])) {return 0;} if(!getBoolOption(fp, "filter_dataeast:\"" , &g_opt_bCustomSysFilter[5])) {return 0;} if(!getBoolOption(fp, "filter_galaxian:\"" , &g_opt_bCustomSysFilter[6])) {return 0;} if(!getBoolOption(fp, "filter_irem:\"" , &g_opt_bCustomSysFilter[7])) {return 0;} if(!getBoolOption(fp, "filter_kaneko:\"" , &g_opt_bCustomSysFilter[8])) {return 0;} if(!getBoolOption(fp, "filter_konami:\"" , &g_opt_bCustomSysFilter[9])) {return 0;} if(!getBoolOption(fp, "filter_neogeo:\"" , &g_opt_bCustomSysFilter[10])) {return 0;} if(!getBoolOption(fp, "filter_pacman:\"" , &g_opt_bCustomSysFilter[11])) {return 0;} if(!getBoolOption(fp, "filter_pgm:\"" , &g_opt_bCustomSysFilter[12])) {return 0;} if(!getBoolOption(fp, "filter_psikyo:\"" , &g_opt_bCustomSysFilter[13])) {return 0;} if(!getBoolOption(fp, "filter_sega:\"" , &g_opt_bCustomSysFilter[14])) {return 0;} if(!getBoolOption(fp, "filter_seta:\"" , &g_opt_bCustomSysFilter[15])) {return 0;} if(!getBoolOption(fp, "filter_taito:\"" , &g_opt_bCustomSysFilter[16])) {return 0;} if(!getBoolOption(fp, "filter_technos:\"" , &g_opt_bCustomSysFilter[17])) {return 0;} if(!getBoolOption(fp, "filter_toaplan:\"" , &g_opt_bCustomSysFilter[18])) {return 0;} if(!getBoolOption(fp, "filter_misc_pre90:\"" , &g_opt_bCustomSysFilter[19])) {return 0;} if(!getBoolOption(fp, "filter_misc_post90:\"" , &g_opt_bCustomSysFilter[20])) {return 0;} // ----------------------------------------------------------------------------------------- // Enable / Disable Neo-Geo UNI-BIOS // ----------------------------------------------------------------------------------------- if(!getBoolOption(fp, "use_ng_unibios:\"", &g_opt_bUseUNIBIOS)) {return 0;} // ----------------------------------------------------------------------------------------- // Active System Filter // ----------------------------------------------------------------------------------------- if(!getIntOption(fp, "filter_active:\"", &g_opt_nActiveSysFilter)) {return 0;} // ----------------------------------------------------------------------------------------- // Enable / Disable display of missing games // ----------------------------------------------------------------------------------------- if(!getBoolOption(fp, "display_missing:\"", &g_opt_bDisplayMissingGames)) {return 0;} // ----------------------------------------------------------------------------------------- // Auto aspect ratio option // ----------------------------------------------------------------------------------------- if(!getBoolOption(fp, "auto_ar:\"", &g_opt_bAutoAspectRatio)) {return 0;} // ----------------------------------------------------------------------------------------- // Alternate RetroArch menu key combo option // ----------------------------------------------------------------------------------------- if(!getBoolOption(fp, "alt_menu_key_combo:\"", &g_opt_bUseAltMenuKeyCombo)) {return 0;} // ----------------------------------------------------------------------------------------- // Game System Input preset options // ----------------------------------------------------------------------------------------- pszStrOption = getStrOption(fp, "input_capcom_misc:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szInputCFG[0], pszStrOption); pszStrOption = getStrOption(fp, "input_cave:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szInputCFG[1], pszStrOption); pszStrOption = getStrOption(fp, "input_cps1:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szInputCFG[2], pszStrOption); pszStrOption = getStrOption(fp, "input_cps2:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szInputCFG[3], pszStrOption); pszStrOption = getStrOption(fp, "input_cps3:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szInputCFG[4], pszStrOption); pszStrOption = getStrOption(fp, "input_dataeast:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szInputCFG[5], pszStrOption); pszStrOption = getStrOption(fp, "input_galaxian:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szInputCFG[6], pszStrOption); pszStrOption = getStrOption(fp, "input_irem:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szInputCFG[7], pszStrOption); pszStrOption = getStrOption(fp, "input_kaneko:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szInputCFG[8], pszStrOption); pszStrOption = getStrOption(fp, "input_konami:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szInputCFG[9], pszStrOption); pszStrOption = getStrOption(fp, "input_neogeo:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szInputCFG[10], pszStrOption); pszStrOption = getStrOption(fp, "input_pacman:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szInputCFG[11], pszStrOption); pszStrOption = getStrOption(fp, "input_pgm:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szInputCFG[12], pszStrOption); pszStrOption = getStrOption(fp, "input_psikyo:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szInputCFG[13], pszStrOption); pszStrOption = getStrOption(fp, "input_sega:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szInputCFG[14], pszStrOption); pszStrOption = getStrOption(fp, "input_seta:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szInputCFG[15], pszStrOption); pszStrOption = getStrOption(fp, "input_taito:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szInputCFG[16], pszStrOption); pszStrOption = getStrOption(fp, "input_technos:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szInputCFG[17], pszStrOption); pszStrOption = getStrOption(fp, "input_toaplan:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szInputCFG[18], pszStrOption); pszStrOption = getStrOption(fp, "input_misc_pre90:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szInputCFG[19], pszStrOption); pszStrOption = getStrOption(fp, "input_misc_post90:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szInputCFG[20], pszStrOption); // ----------------------------------------------------------------------------------------- // Auto Input Configuration creation option // ----------------------------------------------------------------------------------------- if(!getBoolOption(fp, "input_auto_create:\"", &g_opt_bAutoInputCfgCreate)) {return 0;} // ----------------------------------------------------------------------------------------- // Texture options // ----------------------------------------------------------------------------------------- pszStrOption = getStrOption(fp, "texture_main_menu:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szTextures[TEX_MAIN_MENU], pszStrOption); pszStrOption = getStrOption(fp, "texture_gamelist:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szTextures[TEX_GAME_LIST], pszStrOption); pszStrOption = getStrOption(fp, "texture_zipinfo:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szTextures[TEX_ZIP_INFO], pszStrOption); pszStrOption = getStrOption(fp, "texture_rominfo:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szTextures[TEX_ROM_INFO], pszStrOption); pszStrOption = getStrOption(fp, "texture_options:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szTextures[TEX_OPTIONS], pszStrOption); pszStrOption = getStrOption(fp, "texture_filebrowser:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szTextures[TEX_FILEBROWSER], pszStrOption); pszStrOption = getStrOption(fp, "texture_preview:\""); if(pszStrOption == NULL) {return 0;} strcpy(g_opt_szTextures[TEX_PREVIEW], pszStrOption); // ----------------------------------------------------------------------------------------- if(pszStrOption) { free(pszStrOption); *&pszStrOption = NULL; } fclose(fp); return 1; } else { return 0; } return 0; }