/** * Read a custom pallete from a file and load it into the core. */ int LoadCPalette(const std::string &file) { uint8 tmpp[192]; FILE *fp; if(!(fp = FCEUD_UTF8fopen(file.c_str(), "rb"))) { char errorMsg[256]; strcpy(errorMsg, "Error loading custom palette from file: "); strcat(errorMsg, file.c_str()); FCEUD_PrintError(errorMsg); return 0; } size_t result = fread(tmpp, 1, 192, fp); if(result != 192) { char errorMsg[256]; strcpy(errorMsg, "Error loading custom palette from file: "); strcat(errorMsg, file.c_str()); FCEUD_PrintError(errorMsg); return 0; } FCEUI_SetPaletteArray(tmpp); fclose(fp); return 1; }
bool SetPalette(const char* nameo) { FILE *fp; if((fp = FCEUD_UTF8fopen(nameo, "rb"))) { fread(cpalette, 1, 192, fp); fclose(fp); FCEUI_SetPaletteArray(cpalette); eoptions |= EO_CPALETTE; return true; } else { FCEUD_PrintError("Error opening palette file!"); return false; } }
/** * Read a custom pallete from a file and load it into the core. */ int LoadCPalette(const std::string &file) { uint8 tmpp[192]; FILE *fp; if (!(fp = FCEUD_UTF8fopen(file.c_str(), "rb"))) { printf(" Error loading custom palette from file: %s\n", file.c_str()); return 0; } size_t result = fread(tmpp, 1, 192, fp); if (result != 192) { printf(" Error reading custom palette from file: %s\n", file.c_str()); return 0; } FCEUI_SetPaletteArray(tmpp); fclose(fp); return 1; }
int main(int argc,char *argv[]) { char *t; if(timeBeginPeriod(1)!=TIMERR_NOERROR) { AddLogText("Error setting timer granularity to 1ms.",1); } if(!FCEUI_Initialize()) goto doexito; srand(GetTickCount()); // rand() is used for some GUI sillyness. fceu_hInstance=GetModuleHandle(0); GetBaseDirectory(); sprintf(TempArray,"%s\\fceu98.cfg",BaseDirectory); LoadConfig(TempArray); t=ParseArgies(argc,argv); /* Bleh, need to find a better place for this. */ { palyo&=1; FCEUI_SetVidSystem(palyo); genie&=1; FCEUI_SetGameGenie(genie); fullscreen&=1; soundo&=1; FCEUI_SetSoundVolume(soundvolume); FCEUI_SetSoundQuality(soundquality); } ParseGIInput(NULL); /* Since a game doesn't have to be loaded before the GUI can be used, make sure the temporary input type variables are set. */ CreateDirs(); SetDirs(); DoVideoConfigFix(); DoTimingConfigFix(); if(eoptions&EO_CPALETTE) FCEUI_SetPaletteArray(cpalette); if(!t) fullscreen=0; CreateMainWindow(); if(!InitDInput()) goto doexito; if(!DriverInitialize()) goto doexito; InitSpeedThrottle(); UpdateMenu(); if(t) ALoad(t); else if(eoptions&EO_FOAFTERSTART) LoadNewGamey(hAppWnd, 0); doloopy: UpdateFCEUWindow(); if(GI) { while(GI) { uint8 *gfx; int32 *sound; int32 ssize; FCEUI_Emulate(&gfx, &sound, &ssize, 0); xbsave = gfx; FCEUD_Update(gfx, sound, ssize); } xbsave = NULL; RedrawWindow(hAppWnd,0,0,RDW_ERASE|RDW_INVALIDATE); StopSound(); } Sleep(50); if(!exiting) goto doloopy; doexito: DriverKill(); timeEndPeriod(1); FCEUI_Kill(); return(0); }
/** * Callback function for the palette configuration dialog. **/ BOOL CALLBACK PaletteConCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_INITDIALOG: if(ntsccol) { CheckDlgButton(hwndDlg, CHECK_PALETTE_ENABLED, BST_CHECKED); } SendDlgItemMessage(hwndDlg, CTL_TINT_TRACKBAR, TBM_SETRANGE, 1, MAKELONG(0, 128)); SendDlgItemMessage(hwndDlg, CTL_HUE_TRACKBAR, TBM_SETRANGE, 1, MAKELONG(0, 128)); FCEUI_GetNTSCTH(&ntsctint, &ntschue); SendDlgItemMessage(hwndDlg, CTL_TINT_TRACKBAR, TBM_SETPOS, 1, ntsctint); SendDlgItemMessage(hwndDlg, CTL_HUE_TRACKBAR, TBM_SETPOS, 1, ntschue); EnableWindow(GetDlgItem(hwndDlg, BTN_PALETTE_RESET), (eoptions & EO_CPALETTE) ? 1 : 0); CenterWindowOnScreen(hwndDlg); break; case WM_HSCROLL: ntsctint = SendDlgItemMessage(hwndDlg, CTL_TINT_TRACKBAR, TBM_GETPOS, 0, (LPARAM)(LPSTR)0); ntschue = SendDlgItemMessage(hwndDlg, CTL_HUE_TRACKBAR, TBM_GETPOS, 0, (LPARAM)(LPSTR)0); FCEUI_SetNTSCTH(ntsccol, ntsctint, ntschue); break; case WM_CLOSE: case WM_QUIT: goto gornk; case WM_COMMAND: if(!(wParam>>16)) { switch(wParam&0xFFFF) { case CHECK_PALETTE_ENABLED: ntsccol ^= 1; FCEUI_SetNTSCTH(ntsccol, ntsctint, ntschue); break; case BTN_PALETTE_LOAD: if(LoadPaletteFile()) { EnableWindow(GetDlgItem(hwndDlg, BTN_PALETTE_RESET), 1); } break; case BTN_PALETTE_RESET: FCEUI_SetPaletteArray(0); eoptions &= ~EO_CPALETTE; EnableWindow(GetDlgItem(hwndDlg, BTN_PALETTE_RESET), 0); break; case BUTTON_CLOSE: gornk: DestroyWindow(hwndDlg); pwindow = 0; // Yay for user race conditions. break; } } } return 0; }
/** * Callback function for the palette configuration dialog. **/ BOOL CALLBACK PaletteConCallB(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_INITDIALOG: if(ntsccol) CheckDlgButton(hwndDlg, CHECK_PALETTE_ENABLED, BST_CHECKED); SendDlgItemMessage(hwndDlg, CTL_TINT_TRACKBAR, TBM_SETRANGE, 1, MAKELONG(0, 128)); SendDlgItemMessage(hwndDlg, CTL_HUE_TRACKBAR, TBM_SETRANGE, 1, MAKELONG(0, 128)); FCEUI_GetNTSCTH(&ntsctint, &ntschue); SendDlgItemMessage(hwndDlg, CTL_TINT_TRACKBAR, TBM_SETPOS, 1, ntsctint); SendDlgItemMessage(hwndDlg, CTL_HUE_TRACKBAR, TBM_SETPOS, 1, ntschue); if(force_grayscale) CheckDlgButton(hwndDlg, CHECK_PALETTE_GRAYSCALE, BST_CHECKED); if (eoptions & EO_CPALETTE) CheckDlgButton(hwndDlg, CHECK_PALETTE_CUSTOM, BST_CHECKED); CenterWindowOnScreen(hwndDlg); break; case WM_HSCROLL: ntsctint = SendDlgItemMessage(hwndDlg, CTL_TINT_TRACKBAR, TBM_GETPOS, 0, (LPARAM)(LPSTR)0); ntschue = SendDlgItemMessage(hwndDlg, CTL_HUE_TRACKBAR, TBM_GETPOS, 0, (LPARAM)(LPSTR)0); FCEUI_SetNTSCTH(ntsccol, ntsctint, ntschue); break; case WM_CLOSE: case WM_QUIT: goto gornk; case WM_COMMAND: if(!(wParam>>16)) { switch(wParam&0xFFFF) { case CHECK_PALETTE_ENABLED: ntsccol ^= 1; FCEUI_SetNTSCTH(ntsccol, ntsctint, ntschue); break; case CHECK_PALETTE_GRAYSCALE: force_grayscale ^= 1; FCEUI_SetNTSCTH(ntsccol, ntsctint, ntschue); break; case BTN_PALETTE_LOAD: if(LoadPaletteFile()) CheckDlgButton(hwndDlg, CHECK_PALETTE_CUSTOM, BST_CHECKED); break; case CHECK_PALETTE_CUSTOM: { if (eoptions & EO_CPALETTE) { // switch back to default palette FCEUI_SetPaletteArray(0); eoptions &= ~EO_CPALETTE; } else { // switch to custom, even if it isn't loaded yet FCEUI_SetPaletteArray(cpalette); eoptions |= EO_CPALETTE; } break; } case BUTTON_CLOSE: gornk: DestroyWindow(hwndDlg); pwindow = 0; // Yay for user race conditions. break; } } } return 0; }