int movie_load(char *filename) { memfile_t *file; u32 size; u8 flags; int devid[3]; char ident[5]; movie_unload(); if((file = memfile_open(filename,"rb")) == 0) { log_printf("movie_load: error opening movie '%s'\n",filename); return(1); } //need header and stuff here memfile_read(ident,1,4,file); if(memcmp(ident,movie_ident,4) != 0) { log_printf("movie_load: bad movie ident\n"); memfile_close(file); return(2); } //read movie flags memfile_read(&flags,1,sizeof(u8),file); if(flags & 1) nes->movie.mode |= MOVIE_TEST; //set required input devices memfile_read(&devid[0],1,sizeof(int),file); memfile_read(&devid[1],1,sizeof(int),file); memfile_read(&devid[2],1,sizeof(int),file); nes_set_inputdev(0,devid[0]); nes_set_inputdev(1,devid[1]); nes_set_inputdev(2,devid[2]); //read movie data memfile_read(&nes->movie.startframe,1,sizeof(u32),file); memfile_read(&nes->movie.endframe,1,sizeof(u32),file); memfile_read(&nes->movie.crc32,1,sizeof(u32),file); memfile_read(&nes->movie.len,1,sizeof(u32),file); log_printf("movie_load: start, end = %d, %d :: len = %d bytes\n",nes->movie.startframe,nes->movie.endframe,nes->movie.len); nes->movie.data = (u8*)mem_alloc(nes->movie.len); memfile_read(nes->movie.data,1,nes->movie.len,file); size = memfile_size(file) - memfile_tell(file); nes->movie.state = memfile_create(); memfile_copy(nes->movie.state,file,size); memfile_close(file); return(0); }
LRESULT CALLBACK PaletteProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) { LPNMHDR nmhdr; static char tmpstr[1024]; char *ptr; int i; int reinitvideo = 0; switch(message) { case WM_INITDIALOG: CheckDlgButton(hDlg,IDC_FRAMELIMITCHECK,config_get_bool("video.framelimit") ? BST_CHECKED : BST_UNCHECKED); //video filters ptr = config_get_string("video.filter"); for(i=0;filters[i];i++) { ComboBox_AddString(GetDlgItem(hDlg,IDC_FILTERCOMBO),filters[i]); if(stricmp(filters[i],ptr) == 0) ComboBox_SetCurSel(GetDlgItem(hDlg,IDC_FILTERCOMBO),i); } //scale for(i=0;scales[i];i++) { ComboBox_AddString(GetDlgItem(hDlg,IDC_SCALECOMBO),scales[i]); if((i + 1) == config_get_int("video.scale")) ComboBox_SetCurSel(GetDlgItem(hDlg,IDC_SCALECOMBO),i); } //port1 input devices ptr = config_get_string("input.port0"); for(i=0;inputdevices[i];i++) { ComboBox_AddString(GetDlgItem(hDlg,IDC_PORT1COMBO),inputdevices[i]); if(stricmp(inputdevices[i],ptr) == 0) ComboBox_SetCurSel(GetDlgItem(hDlg,IDC_PORT1COMBO),i); } //port2 input devices ptr = config_get_string("input.port1"); for(i=0;inputdevices[i];i++) { ComboBox_AddString(GetDlgItem(hDlg,IDC_PORT2COMBO),inputdevices[i]); if(stricmp(inputdevices[i],ptr) == 0) ComboBox_SetCurSel(GetDlgItem(hDlg,IDC_PORT2COMBO),i); } //expansion port devices ptr = config_get_string("input.expansion"); for(i=0;inputexpansion[i];i++) { ComboBox_AddString(GetDlgItem(hDlg,IDC_EXPANSIONCOMBO),inputexpansion[i]); if(stricmp(inputexpansion[i],ptr) == 0) ComboBox_SetCurSel(GetDlgItem(hDlg,IDC_EXPANSIONCOMBO),i); } return(TRUE); case WM_NOTIFY: nmhdr = (LPNMHDR)lParam; switch(nmhdr->code) { case PSN_APPLY: config_set_bool("video.framelimit",IsDlgButtonChecked(hDlg,IDC_FRAMELIMITCHECK) ? 1 : 0); ptr = mem_strdup(config_get_string("video.filter")); GetDlgItemText_SetConfig(hDlg,IDC_FILTERCOMBO,"video.filter"); if(stricmp(ptr,config_get_string("video.filter")) != 0) { reinitvideo = 1; } mem_free(ptr); i = ComboBox_GetCurSel(GetDlgItem(hDlg,IDC_SCALECOMBO)); if(i != CB_ERR) { if(config_get_int("video.scale") != (i + 1)) { config_set_int("video.scale",i + 1); reinitvideo = 1; } } if(reinitvideo) { video_reinit(); } GetDlgItemText_SetConfig(hDlg,IDC_PORT1COMBO,"input.port0"); GetDlgItemText_SetConfig(hDlg,IDC_PORT2COMBO,"input.port1"); nes_set_inputdev(0,get_device_id(config_get_string("input.port0"))); nes_set_inputdev(1,get_device_id(config_get_string("input.port1"))); return(TRUE); } break; } return(FALSE); }