void load_config(char * path) { int i; char *p; //__android_log_print(ANDROID_LOG_DEBUG, "org.rin", "path in load_config: %s",path); jfile fd = jfopen(env_game_thread, path, JF_MODE_READ, NULL, 0); if(!fd) { init_config(); return; } memset(&setting, 0, sizeof(setting)); jfread(env_game_thread, fd, &setting, sizeof(setting)); jfclose(env_game_thread, fd); tmpsetting = setting; memcpy(m_pal16[PAL_CUSTOM_LOCAL],setting.custom_palette, sizeof(short)*4*3); check_config(); set_gb_type(); set_speed(setting.speed); }
/* freopen() wrapper */ struct jfs *jfreopen(const char *path, const char *mode, struct jfs *stream) { if (stream) jfclose(stream); stream = jfopen(path, mode); return stream; }
int main(void) /* test jfopen() jfgetc() */ { FILE *fp = jfopen("test", "r"); int c; #ifdef DEBUG printf("stdin fd: %d\n", stdin->fd); #endif while ((c = jgetc(fp)) != EOF) printf("%c", c); return 0; }
void DiskWriteMda::allocate(int N1, int N2, int N3, int N4, int N5, int N6) { if (d->m_allocated) { printf("Warning: cannot allocate once array has been allocated.\n"); return; } jfclose(jfopen(d->m_path.toLatin1().data(),"wb")); //remove the file d->m_file=jfopen(d->m_path.toLatin1().data(),"wb+"); if (!d->m_file) { printf("Warning: cannot allocate. Unable to open file: %s\n",d->m_path.toLatin1().data()); return; } int dims[MDAIO_MAX_DIMS]; for (int i=0; i<MDAIO_MAX_DIMS; i++) dims[i]=1; dims[0]=N1; dims[1]=N2; dims[2]=N3; dims[3]=N4; dims[4]=N5; dims[5]=N6; int num_dims=2; for (int i=2; i<MDAIO_MAX_DIMS; i++) { if (dims[i]>1) num_dims=i+1; } d->m_total_size=1; for (int i=0; i<num_dims; i++) { d->m_total_size*=dims[i]; } d->m_mda_header.data_type=d->m_data_type; for (int i=0; i<MDAIO_MAX_DIMS; i++) d->m_mda_header.dims[i]=dims[i]; d->m_mda_header.num_dims=num_dims; mda_write_header(&d->m_mda_header,d->m_file); float *all_zeros=(float *)jmalloc(sizeof(float)*d->m_total_size); for (int j=0; j<d->m_total_size; j++) all_zeros[j]=0; mda_write_float32(all_zeros,&d->m_mda_header,d->m_total_size,d->m_file); jfree(all_zeros); d->m_allocated=true; }
void save_config_glob(char * path) { memcpy(setting2.custom_palette,m_pal16[PAL_CUSTOM_GLOBAL], sizeof(word)*3*4); //__android_log_print(ANDROID_LOG_DEBUG, "org.rin", "path in save_config_glob: %s",path); jfile fd = jfopen(env_game_thread, path, JF_MODE_NEW | JF_MODE_OVERWRITE | JF_MODE_WRITE, NULL, 0); if(!fd) { return; } jfwrite(env_game_thread, fd, &setting2, sizeof(setting2)); jfclose(env_game_thread, fd); }
int state_load(char* path) { /*FILE * fd = fopen(path,"rb"); if (!fd){ strcat(path,".gz"); fd = fopen(path,"rb"); if (!fd) return 0; } gb_restore_state(fd,NULL); fclose(fd);*/ byte * buf; jfile fd = jfopen(env_game_thread, path, JF_MODE_READ, NULL, 0); gb_restore_state(fd, NULL); jfclose(env_game_thread, fd); if(rom_get_info()->gb_type == 1) lcd_set_mpal(0); else if(rom_get_info()->gb_type == 2 && sgb_mode) lcd_set_mpal(PAL_SGB); else lcd_set_mpal(setting.gb_palette); if(rom_get_info()->gb_type>=3 && org_gbtype==3) now_gb_mode = 3; else if(rom_get_info()->gb_type==2 && sgb_mode) now_gb_mode = 2; else now_gb_mode = 1; border_uploaded = 2; free_rewind_states(); allocate_rewind_states(); return 1; }
void save_config(char * path) { char tmp[PATH_MAX]; if(!rom_get_loaded()) { return; } else { if(rom_has_battery()) { save_sram(get_sram(), rom_get_info()->ram_size,SramPath); } } memcpy(setting.custom_palette,m_pal16[PAL_CUSTOM_LOCAL], sizeof(word)*3*4); //__android_log_print(ANDROID_LOG_DEBUG, "org.rin", "path in save_config: %s",path); int i; for(i=0; i<sizeof(SETTING); i++){ if ( *((byte*)&setting+i) != *((byte*)&tmpsetting+i) ) break; } if (i>=sizeof(SETTING)) return; jfile fd = jfopen(env_game_thread, path, JF_MODE_NEW | JF_MODE_OVERWRITE | JF_MODE_WRITE, NULL, 0); if(!fd) { return; } jfwrite(env_game_thread, fd, &setting, sizeof(setting)); jfclose(env_game_thread, fd); tmpsetting = setting; }
void load_config_glob(char * path) { int i; char *p; //__android_log_print(ANDROID_LOG_DEBUG, "org.rin", "path in load_config_glob: %s",path); jfile fd = jfopen(env_game_thread, path, JF_MODE_READ, NULL, 0); if(!fd) { init_config_glob(); return; } memset(&setting2, 0, sizeof(setting2)); jfread(env_game_thread, fd, &setting2, sizeof(setting2)); jfclose(env_game_thread, fd); memcpy(m_pal16[PAL_CUSTOM_GLOBAL],setting2.custom_palette, sizeof(short)*4*3); check_config_glob(); }
int load_sram(char * path) { jfile fd = jfopen(env_game_thread, path, JF_MODE_READ, NULL, 0); /*if(!fd){ strcat(SavePath, ".gz"); fd = gzopen(SavePath, "rb"); }*/ if(!fd) { return 0; } int ramsize = jfread(env_game_thread, fd, sram_space, 16*0x2000+4); jfclose(env_game_thread, fd); if(ramsize & 4) { renderer_set_timer_state(*(int*)(sram_space+ramsize-4)); } return ramsize; }
// load rom image by ruka long load_rom(char *szRomPath) { char name[MAX_NAME], *p, tmp[PATH_MAX]; long lReadSize=0; p = strrchr(szRomPath, '/'); if (!p) return 0; strcpy(name, p+1); char* exts[3]= {".gb",".gbc",".sgb"}; jfile fd = jfopen(env_game_thread, szRomPath, JF_MODE_READ, exts, 3); if(fd) { int size = jfsize(env_game_thread, fd); lReadSize = jfread(env_game_thread, fd, rom_image, size); jfclose(env_game_thread, fd); } //lReadSize = jfile_read(env_game_thread, szRomPath, exts,3,(void **) &rom_image); /*ROM_INFO stRomInfo; int nRet; int nExtId = getExtId(szRomPath); switch(nExtId) { case EXT_GB:{ // "gb" "gbc" "sgb" p = strrchr(szRomPath, '/'); if (!p) return 0; strcpy(name, p+1); FILE * fd = fopen(szRomPath, "r"); lReadSize = fread(rom_image, 1, MAX_ROM_SIZE, fd); fclose(fd); break }case EXT_GZ:{ // "gz" gzFile fd = gzopen(szRomPath, "r"); if (!gzGetOrigName(szRomPath, name, fd)){ gzclose(fd); return 0; }else if (getExtId(name)!=EXT_GB){ gzclose(fd); return 0; } lReadSize = gzread(fd, rom_image, MAX_ROM_SIZE); gzclose(fd); break; }case EXT_ZIP: // "zip" if (path_inzip[0]){ if (getExtId(path_inzip)!=EXT_GB) return 0; p = strrchr(path_inzip, '/'); if (!p) p = path_inzip; else p++; strcpy(name, p); }else{ p = strrchr(szRomPath, '/'); if (!p) return 0; strcpy(name, p+1); } stRomInfo.p_rom_image = rom_image; stRomInfo.rom_size = 0; memset(stRomInfo.szFileName, 0x00, sizeof(stRomInfo.szFileName)); // Unzipコールバックセット Unzip_setCallback(funcUnzipCallback); // Unzip展開する nRet = Unzip_execExtract(szRomPath, (unsigned long)&stRomInfo); if (nRet != UZEXR_OK) { // 読み込み失敗! - このコードでは、UZEXR_CANCELもここに来て // しまうがコールバックでキャンセルしてないので無視 lReadSize = 0; pgFillvram(RGBA_8(255,0,0)); pgPrintf(0,0,0xFFFF, "Unzip fatal error."); pgScreenFlip(); } lReadSize = stRomInfo.rom_size; break; default: return 0; }*/ if(lReadSize){ strcpy(RomName, name); p = strrchr(RomName, '.'); if(p) *p = 0; } return lReadSize; }
int save_sram(byte *buf,int size, char * path) { const int sram_tbl[]={1,1,1,4,16,8}; /*char *p = strrchr(SavePath, '.'); if (!strcmp(p,".gz")){ if(!setting.compress) remove_file(SavePath); }else{ if(setting.compress)*/ //remove_file(path); /*} sprintf(SavePath, "%sSAVE/%s.sav", RinPath, RomName); if (setting.compress) { strcat(SavePath, ".gz"); FILE * fd = fopen(SavePath, "w"); if (!fd) return 0; int sram_size = 0x2000 * sram_tbl[size]; if ((rom_get_info()->cart_type>=0x0f) && (rom_get_info()->cart_type<=0x13)) { int tmp = renderer_get_timer_state(); memcpy(buf+sram_size, &tmp, sizeof(int)); sram_size += sizeof(int); } cheat_decreate_cheat_map(); gzCreate(fd, buf, sram_size); fclose(fd); cheat_create_cheat_map(); }else { FILE * fd = fopen(path, "w"); if(!fd) { return 0; } cheat_decreate_cheat_map(); fwrite(buf, 0x2000*sram_tbl[size],1,fd); if ((rom_get_info()->cart_type>=0x0f) && (rom_get_info()->cart_type<=0x13)){ int tmp = renderer_get_timer_state(); fwrite( &tmp, sizeof(int),1,fd); } fclose(fd); cheat_create_cheat_map(); }*/ cheat_decreate_cheat_map(); int tmp; jfile fd = jfopen(env_game_thread, path, JF_MODE_OVERWRITE | JF_MODE_NEW | JF_MODE_WRITE, NULL, 0); cheat_decreate_cheat_map(); jfwrite(env_game_thread,fd, buf, 0x2000*sram_tbl[size]); if ((rom_get_info()->cart_type>=0x0f) && (rom_get_info()->cart_type<=0x13)){ int tmp = renderer_get_timer_state(); jfwrite( env_game_thread, fd, &tmp, sizeof(int)); } jfclose(env_game_thread, fd); cheat_create_cheat_map(); return 1; }
int state_save(char* path) { size_t size = gb_save_state(NULL); byte *buf = (byte*)malloc(size); if (!buf) { return 0; } gb_save_state(buf); jfile fd = jfopen(env_game_thread, path, JF_MODE_WRITE | JF_MODE_OVERWRITE | JF_MODE_NEW, NULL, 0); if(fd) { jfwrite(env_game_thread, fd, buf, size); jfclose(env_game_thread, fd); } free(buf); char tmp[PATH_MAX]; if(rom_has_battery()) { sprintf(tmp, "%s.sram.gz", RomPath); save_sram(get_sram(), rom_get_info()->ram_size,tmp); } return size; //char temp[PATH_MAX]; //int ret; /* if (0)//setting.compress) { sprintf(temp,"%s.gz",path); FILE * fd = fopen(temp, "w"); if (fd<0){ free(buf); return 0; } ret = gzCreate(fd, buf, size); fclose(fd); free(buf); if (!ret) { remove(temp); return 0; } } else { FILE * fd = fopen(path, "w"); if (fd<0) { free(buf); return 0; } ret = fwrite(buf, size,1 ,fd); fclose(fd); free(buf); if (ret!=1){ remove(path); return 0; }else{ //strcat(path, ".gz"); //remove_file(path); } return ret; }*/ }