/** * Show and process the Boot options dialog. */ void DlgSound_Main(void) { int but; SDLGui_CenterDlg(sounddlg); /* Set up the dialog from actual values */ if (ConfigureParams.Sound.bEnableSound) sounddlg[DLGSOUND_ENABLE].state |= SG_SELECTED; else sounddlg[DLGSOUND_ENABLE].state &= ~SG_SELECTED; /* Draw and process the dialog */ do { but = SDLGui_DoDialog(sounddlg, NULL); } while (but != DLGSOUND_EXIT && but != SDLGUI_QUIT && but != SDLGUI_ERROR && !bQuitProgram); /* Read values from dialog */ ConfigureParams.Sound.bEnableSound = sounddlg[DLGSOUND_ENABLE].state & SG_SELECTED; }
/** * Show and process the Missing Disk dialog. */ void DlgMissing_Disk(const char* type, int num, char *imgname, bool *inserted, bool *wp) { int but; char dlgname_missingdisk[64]; char missingdisk_alert[64]; char missingdisk_disk[64]; bool bOldMouseVisibility; bOldMouseVisibility = SDL_ShowCursor(SDL_QUERY); SDL_ShowCursor(SDL_ENABLE); SDLGui_CenterDlg(missingdiskdlg); /* Set up dialog to actual values: */ sprintf(missingdisk_alert, "%s drive %i: disk image not found!", type, num); missingdiskdlg[DLGMISDSK_ALERT].txt = missingdisk_alert; sprintf(missingdisk_disk, "%s %i:", type, num); missingdiskdlg[DLGMISDSK_DRIVE].txt = missingdisk_disk; File_ShrinkName(dlgname_missingdisk, imgname, missingdiskdlg[DLGMISDSK_NAME].w); missingdiskdlg[DLGMISDSK_NAME].txt = dlgname_missingdisk; /* Draw and process the dialog */ do { if (*wp) missingdiskdlg[DLGMISDSK_PROTECT].txt = "read-only"; else missingdiskdlg[DLGMISDSK_PROTECT].txt = ""; but = SDLGui_DoDialog(missingdiskdlg, NULL); switch (but) { case DLGMISDSK_BROWSE: SDLGui_DiskSelect(dlgname_missingdisk, imgname, missingdiskdlg[DLGMISDSK_NAME].w, wp); break; case DLGMISDSK_REMOVE: *inserted = false; *wp = false; *imgname = '\0'; break; case DLGMISDSK_QUIT: bQuitProgram = true; break; default: break; } } while (but != DLGMISDSK_SELECT && but != DLGMISDSK_REMOVE && but != SDLGUI_QUIT && but != SDLGUI_ERROR && !bQuitProgram); SDL_ShowCursor(bOldMouseVisibility); }
/** * Show the "about" dialog: */ void Dialog_AboutDlg(void) { /* Center PROG_NAME title string */ aboutdlg[1].x = (aboutdlg[0].w - strlen(PROG_NAME)) / 2; SDLGui_CenterDlg(aboutdlg); SDLGui_DoDialog(aboutdlg, NULL); }
/** * Show and process the "Keyboard" dialog. */ void Dialog_KeyboardDlg(void) { int but; #if ENABLE_LOADED_OPTION char dlgmapfile[44]; #endif SDLGui_CenterDlg(keyboarddlg); /* Set up dialog from actual values: */ keyboarddlg[DLGKEY_SCANCODE].state &= ~SG_SELECTED; keyboarddlg[DLGKEY_SYMBOLIC].state &= ~SG_SELECTED; switch (ConfigureParams.Keyboard.nKeymapType) { case KEYMAP_SCANCODE: keyboarddlg[DLGKEY_SCANCODE].state |= SG_SELECTED; break; case KEYMAP_SYMBOLIC: keyboarddlg[DLGKEY_SYMBOLIC].state |= SG_SELECTED; break; default: break; } #if ENABLE_LOADED_OPTION File_ShrinkName(dlgmapfile, ConfigureParams.Keyboard.szMappingFileName, keyboarddlg[DLGKEY_MAPNAME].w); keyboarddlg[DLGKEY_MAPNAME].txt = dlgmapfile; #endif if (ConfigureParams.Keyboard.bDisableKeyRepeat) keyboarddlg[DLGKEY_DISREPEAT].state |= SG_SELECTED; else keyboarddlg[DLGKEY_DISREPEAT].state &= ~SG_SELECTED; /* Show the dialog: */ do { but = SDLGui_DoDialog(keyboarddlg, NULL); #if ENABLE_LOADED_OPTION if (but == DLGKEY_MAPBROWSE) { SDLGui_FileConfSelect(dlgmapfile, ConfigureParams.Keyboard.szMappingFileName, keyboarddlg[DLGKEY_MAPNAME].w, false); } #endif } while (but != DLGKEY_EXIT && but != SDLGUI_QUIT && but != SDLGUI_ERROR && !bQuitProgram); /* Read values from dialog: */ if (keyboarddlg[DLGKEY_SCANCODE].state & SG_SELECTED) ConfigureParams.Keyboard.nKeymapType = KEYMAP_SCANCODE; else ConfigureParams.Keyboard.nKeymapType = KEYMAP_SYMBOLIC; #if ENABLE_LOADED_OPTION else
/** * Show and process the joystick dialog. */ void Dialog_JoyDlg(void) { int but; SDLGui_CenterDlg(joydlg); joydlg[DLGJOY_MSJY].state &= ~SG_SELECTED; joydlg[DLGJOY_JYJY].state &= ~SG_SELECTED; joydlg[DLGJOY_MSMS].state &= ~SG_SELECTED; int j0 = currprefs.jports[0].id/ JSEM_JOYS; int j1 = currprefs.jports[1].id/ JSEM_JOYS; if (j0 == 2 && j1 == 1) { //mouse & joy-1 joydlg[DLGJOY_MSJY].state |= SG_SELECTED; } else if (j0 == 1 && j1 == 1) { //joy-2 & joy-1 joydlg[DLGJOY_JYJY].state |= SG_SELECTED; } else { joydlg[DLGJOY_MSMS].state |= SG_SELECTED; } do { but = SDLGui_DoDialog(joydlg, NULL); gui_poll_events(); } while (but != DLGJOY_EXIT && but != SDLGUI_QUIT && but != SDLGUI_ERROR && !bQuitProgram); if(joydlg[DLGJOY_MSJY].state & SG_SELECTED){ changed_prefs.jports[0].id = JSEM_MICE; changed_prefs.jports[1].id = JSEM_JOYS; changed_prefs.mouse_settings[1]->enabled = 0; } else if(joydlg[DLGJOY_JYJY].state & SG_SELECTED){ changed_prefs.jports[0].id = JSEM_JOYS + 1; changed_prefs.jports[1].id = JSEM_JOYS; changed_prefs.mouse_settings[1]->enabled = 0; } else if(joydlg[DLGJOY_MSMS].state & SG_SELECTED){ changed_prefs.jports[0].id = JSEM_MICE; changed_prefs.jports[1].id = JSEM_MICE + 1; changed_prefs.mouse_settings[1]->enabled = 1; } inputdevice_config_change(); check_prefs_changed_custom(); }
/** * Show and process the "new blank disk image" dialog. * Return file name of last created diskimage or NULL if none created. * Caller needs to free the name. */ char *DlgNewDisk_Main(void) { int but; char *szNewDiskName, *tmpname, *retname = NULL; sprintf(szTracks, "%i", nTracks); SDLGui_CenterDlg(newdiskdlg); /* Initialize disk image name: */ szNewDiskName = File_MakePath(ConfigureParams.DiskImage.szDiskImageDirectory, "new_disk.st", NULL); if (!szNewDiskName) return NULL; /* Draw and process the dialog */ do { but = SDLGui_DoDialog(newdiskdlg, NULL, false); switch(but) { case DLGNEWDISK_DECTRACK: if (nTracks > 40) nTracks -= 1; sprintf(szTracks, "%i", nTracks); break; case DLGNEWDISK_INCTRACK: if (nTracks < 85) nTracks += 1; sprintf(szTracks, "%i", nTracks); break; case DLGNEWDISK_SAVE: tmpname = SDLGui_FileSelect("New floppy image:", szNewDiskName, NULL, true); if (tmpname) { if (DlgNewDisk_CreateDisk(tmpname)) { if (retname) free(retname); retname = tmpname; } else free(tmpname); } break; } } while (but != DLGNEWDISK_EXIT && but != SDLGUI_QUIT && but != SDLGUI_ERROR && !bQuitProgram); free(szNewDiskName); return retname; }
/** * Show and process the "Keyboard" dialog. */ void Dialog_KeyboardDlg(void) { int i, but; char dlgmapfile[44]; SDLGui_CenterDlg(keyboarddlg); /* Set up dialog from actual values: */ for (i = DLGKEY_SYMBOLIC; i <= DLGKEY_FROMFILE; i++) { keyboarddlg[i].state &= ~SG_SELECTED; } keyboarddlg[DLGKEY_SYMBOLIC+ConfigureParams.Keyboard.nKeymapType].state |= SG_SELECTED; File_ShrinkName(dlgmapfile, ConfigureParams.Keyboard.szMappingFileName, keyboarddlg[DLGKEY_MAPNAME].w); keyboarddlg[DLGKEY_MAPNAME].txt = dlgmapfile; if (ConfigureParams.Keyboard.bDisableKeyRepeat) keyboarddlg[DLGKEY_DISREPEAT].state |= SG_SELECTED; else keyboarddlg[DLGKEY_DISREPEAT].state &= ~SG_SELECTED; /* Show the dialog: */ do { but = SDLGui_DoDialog(keyboarddlg, NULL); if (but == DLGKEY_MAPBROWSE) { SDLGui_FileConfSelect(dlgmapfile, ConfigureParams.Keyboard.szMappingFileName, keyboarddlg[DLGKEY_MAPNAME].w, FALSE); } } while (but != DLGKEY_EXIT && but != SDLGUI_QUIT && but != SDLGUI_ERROR && !bQuitProgram); /* Read values from dialog: */ if (keyboarddlg[DLGKEY_SYMBOLIC].state & SG_SELECTED) ConfigureParams.Keyboard.nKeymapType = KEYMAP_SYMBOLIC; else if (keyboarddlg[DLGKEY_SCANCODE].state & SG_SELECTED) ConfigureParams.Keyboard.nKeymapType = KEYMAP_SCANCODE; else ConfigureParams.Keyboard.nKeymapType = KEYMAP_LOADED; ConfigureParams.Keyboard.bDisableKeyRepeat = (keyboarddlg[DLGKEY_DISREPEAT].state & SG_SELECTED); }
/** * Show the "about" dialog: */ void Dialog_AboutDlg(void) { int but; /* Center PROG_NAME title string */ aboutdlg[1].x = (aboutdlg[0].w - strlen(PROG_NAME)) / 2; SDLGui_CenterDlg(aboutdlg); do { but=SDLGui_DoDialog(aboutdlg, NULL); gui_poll_events(); } while (but != DLGABOUT_EXIT && but != SDLGUI_QUIT && but != SDLGUI_ERROR && !bQuitProgram); }
/** * Show the "alert" dialog. Return true if user pressed "OK". */ static int DlgAlert_ShowDlg(const char *text) { static int maxlen = sizeof(dlglines[0])-1; char *t = (char *)malloc(strlen(text)+1); char *orig_t = t; int lines, i, len, offset; bool bOldMouseVisibility; int nOldMouseX, nOldMouseY; strcpy(t, text); lines = DlgAlert_FormatTextToBox(t, maxlen, &len); offset = (maxlen-len)/2; for(i=0; i<MAX_LINES; i++) { if (i < lines) { /* center text to current dlgline */ memset(dlglines[i], ' ', offset); strcpy(dlglines[i] + offset, t); t += strlen(t)+1; } else { dlglines[i][0] = '\0'; } } free(orig_t); if (SDLGui_SetScreen(sdlscrn)) return false; SDLGui_CenterDlg(alertdlg); SDL_GetMouseState(&nOldMouseX, &nOldMouseY); bOldMouseVisibility = SDL_ShowCursor(SDL_QUERY); SDL_ShowCursor(SDL_ENABLE); i = SDLGui_DoDialog(alertdlg, NULL); SDL_UpdateRect(sdlscrn, 0,0, 0,0); SDL_ShowCursor(bOldMouseVisibility); Main_WarpMouse(nOldMouseX, nOldMouseY); return (i == DLGALERT_OK); }
/** * Show the "alert" dialog. Return true if user pressed "OK". */ static int DlgAlert_ShowDlg(const char *text) { static int maxlen = sizeof(dlglines[0])-1; char *t = (char *)malloc(strlen(text)+1); char *orig_t = t; int lines, i, len, offset; bool bOldMouseVisibility; int nOldMouseX, nOldMouseY; strcpy(t, text); lines = DlgAlert_FormatTextToBox(t, maxlen, &len); offset = (maxlen-len)/2; for(i=0; i<MAX_LINES; i++) { if (i < lines) { /* center text to current dlgline */ memset(dlglines[i], ' ', offset); strcpy(dlglines[i] + offset, t); t += strlen(t)+1; } else { dlglines[i][0] = '\0'; } } free(orig_t); if (SDLGui_SetScreen(/*sdlscrn*/)) return false; SDLGui_CenterDlg(alertdlg); do { i = SDLGui_DoDialog(alertdlg, NULL); gui_poll_events(); } while (i != DLGALERT_OK && i != DLGALERT_CANCEL && i != SDLGUI_QUIT && i != SDLGUI_ERROR && !bQuitProgram); return (i == DLGALERT_OK); }
/** * Show and process the ROM dialog. */ void DlgRom_Main(void) { char szDlgTosName[47]; char szDlgCartName[47]; int but; SDLGui_CenterDlg(romdlg); File_ShrinkName(szDlgTosName, ConfigureParams.Rom.szTosImageFileName, sizeof(szDlgTosName)-1); romdlg[DLGROM_TOSNAME].txt = szDlgTosName; File_ShrinkName(szDlgCartName, ConfigureParams.Rom.szCartridgeImageFileName, sizeof(szDlgCartName)-1); romdlg[DLGROM_CARTNAME].txt = szDlgCartName; do { but = SDLGui_DoDialog(romdlg, NULL); switch (but) { case DLGROM_TOSBROWSE: /* Show and process the file selection dlg */ SDLGui_FileConfSelect("TOS ROM image:", szDlgTosName, ConfigureParams.Rom.szTosImageFileName, sizeof(szDlgTosName)-1, false); break; case DLGROM_CARTEJECT: szDlgCartName[0] = 0; ConfigureParams.Rom.szCartridgeImageFileName[0] = 0; break; case DLGROM_CARTBROWSE: /* Show and process the file selection dlg */ SDLGui_FileConfSelect("Cartridge image:", szDlgCartName, ConfigureParams.Rom.szCartridgeImageFileName, sizeof(szDlgCartName)-1, false); break; } } while (but != DLGROM_EXIT && but != SDLGUI_QUIT && but != SDLGUI_ERROR && !bQuitProgram); }
/** * Show and process the ROM dialog. */ void DlgRom_Main(void) { char szDlgTosName[47]; char szDlgCartName[47]; int32_t but; SDLGui_CenterDlg(romdlg); File_ShrinkName(szDlgTosName, szTosImageFileName, sizeof(szDlgTosName)-1); romdlg[DLGROM_TOSNAME].txt = szDlgTosName; do { but = SDLGui_DoDialog(romdlg, NULL); switch (but) { case DLGROM_TOSBROWSE: /* Show and process the file selection dlg */ SDLGui_FileConfSelect(szDlgTosName, szTosImageFileName, sizeof(szDlgTosName)-1, false); break; } gui_poll_events(); } while (but != DLGROM_EXIT && but != SDLGUI_QUIT && but != SDLGUI_ERROR && !bQuitProgram); if(szTosImageFileName!=NULL && strcmp(szTosImageFileName,"")!=0 && strcmp(szTosImageFileName,"./")!=0 ){ printf("rom:(%s)\n",szTosImageFileName); strcpy(changed_prefs.romfile,szTosImageFileName ); MUSTRESET=1; } }
/** * Ask whether new disk should be inserted to A: or B: and if yes, insert. */ static void DlgFloppy_QueryInsert(char *namea, int ida, char *nameb, int idb, const char *path) { const char *realname; int diskid, dlgid; char *dlgname; SDLGui_CenterDlg(alertdlg); int but; do{ but=SDLGui_DoDialog(alertdlg, NULL); { if(but== DLGMOUNT_A){ dlgname = namea; dlgid = ida; diskid = 0; } else if(but == DLGMOUNT_B){ dlgname = nameb; dlgid = idb; diskid = 1; } } gui_poll_events(); } while (but != DLGMOUNT_CANCEL && but != DLGMOUNT_A && but != DLGMOUNT_B && but != SDLGUI_QUIT && but != SDLGUI_ERROR && !bQuitProgram); realname = Floppy_SetDiskFileName(diskid, path, NULL); if (realname) File_ShrinkName(dlgname, realname, floppydlg[dlgid].w); }
/** * Show and process the Boot options dialog. */ void DlgBoot_Main(void) { int i; int but; SDLGui_CenterDlg(bootdlg); /* Set up the dialog from actual values */ for (i = DLGBOOT_ROMMONITOR; i <= DLGBOOT_FLOPPY; i++) { bootdlg[i].state &= ~SG_SELECTED; } switch (ConfigureParams.Boot.nBootDevice) { case BOOT_ROM: bootdlg[DLGBOOT_ROMMONITOR].state |= SG_SELECTED; break; case BOOT_SCSI: bootdlg[DLGBOOT_SCSI].state |= SG_SELECTED; break; case BOOT_ETHERNET: bootdlg[DLGBOOT_ETHERNET].state |= SG_SELECTED; break; case BOOT_MO: bootdlg[DLGBOOT_MO].state |= SG_SELECTED; break; case BOOT_FLOPPY: bootdlg[DLGBOOT_FLOPPY].state |= SG_SELECTED; break; default: break; } for (i = DLGBOOT_DRAMTEST; i <= DLGBOOT_EXTENDED_POT; i++) { bootdlg[i].state &= ~SG_SELECTED; } if (ConfigureParams.Boot.bEnableDRAMTest) bootdlg[DLGBOOT_DRAMTEST].state |= SG_SELECTED; if (ConfigureParams.Boot.bEnablePot) bootdlg[DLGBOOT_ENABLE_POT].state |= SG_SELECTED; if (ConfigureParams.Boot.bEnableSoundTest) bootdlg[DLGBOOT_SOUNDTEST].state |= SG_SELECTED; if (ConfigureParams.Boot.bEnableSCSITest) bootdlg[DLGBOOT_SCSITEST].state |= SG_SELECTED; if (ConfigureParams.Boot.bLoopPot) bootdlg[DLGBOOT_LOOP].state |= SG_SELECTED; if (ConfigureParams.Boot.bVerbose) bootdlg[DLGBOOT_VERBOSE].state |= SG_SELECTED; if (ConfigureParams.Boot.bExtendedPot) bootdlg[DLGBOOT_EXTENDED_POT].state |= SG_SELECTED; /* Draw and process the dialog */ do { but = SDLGui_DoDialog(bootdlg, NULL); switch (but) { case DLGBOOT_ENABLE_POT: if (!(bootdlg[DLGBOOT_ENABLE_POT].state & SG_SELECTED)) { bootdlg[DLGBOOT_SOUNDTEST].state &= ~SG_SELECTED; bootdlg[DLGBOOT_SCSITEST].state &= ~SG_SELECTED; bootdlg[DLGBOOT_LOOP].state &= ~SG_SELECTED; bootdlg[DLGBOOT_VERBOSE].state &= ~SG_SELECTED; } case DLGBOOT_SOUNDTEST: case DLGBOOT_SCSITEST: case DLGBOOT_LOOP: case DLGBOOT_VERBOSE: if (bootdlg[but].state & SG_SELECTED) { bootdlg[DLGBOOT_ENABLE_POT].state |= SG_SELECTED; } break; default: break; } } while (but != DLGBOOT_EXIT && but != SDLGUI_QUIT && but != SDLGUI_ERROR && !bQuitProgram); /* Read values from dialog */ if (bootdlg[DLGBOOT_ROMMONITOR].state & SG_SELECTED) ConfigureParams.Boot.nBootDevice = BOOT_ROM; else if (bootdlg[DLGBOOT_SCSI].state & SG_SELECTED) ConfigureParams.Boot.nBootDevice = BOOT_SCSI; else if (bootdlg[DLGBOOT_ETHERNET].state & SG_SELECTED) ConfigureParams.Boot.nBootDevice = BOOT_ETHERNET; else if (bootdlg[DLGBOOT_MO].state & SG_SELECTED) ConfigureParams.Boot.nBootDevice = BOOT_MO; else if (bootdlg[DLGBOOT_FLOPPY].state & SG_SELECTED) ConfigureParams.Boot.nBootDevice = BOOT_FLOPPY; ConfigureParams.Boot.bEnableDRAMTest = bootdlg[DLGBOOT_DRAMTEST].state & SG_SELECTED; ConfigureParams.Boot.bEnablePot = bootdlg[DLGBOOT_ENABLE_POT].state & SG_SELECTED; ConfigureParams.Boot.bEnableSoundTest = bootdlg[DLGBOOT_SOUNDTEST].state & SG_SELECTED; ConfigureParams.Boot.bEnableSCSITest = bootdlg[DLGBOOT_SCSITEST].state & SG_SELECTED; ConfigureParams.Boot.bLoopPot = bootdlg[DLGBOOT_LOOP].state & SG_SELECTED; ConfigureParams.Boot.bVerbose = bootdlg[DLGBOOT_VERBOSE].state & SG_SELECTED; ConfigureParams.Boot.bExtendedPot = bootdlg[DLGBOOT_EXTENDED_POT].state & SG_SELECTED; }
/** * Show and process a file selection dialog. * Returns path/name user selected or NULL if user canceled * input: zip_path = pointer's pointer to buffer to contain file path * within a selected zip file, or NULL if browsing zip files is disallowed. * bAllowNew: true if the user is allowed to insert new file names. */ char* SDLGui_FileSelect(const char *path_and_name, char **zip_path, bool bAllowNew) { struct dirent **files = NULL; char *pStringMem; char *retpath = NULL; const char *home; char *path, *fname; /* The actual file and path names */ bool reloaddir = true; /* Do we have to reload the directory file list? */ int retbut; bool bOldMouseVisibility; int selection; /* The selection index */ char *zipfilename; /* Filename in zip file */ char *zipdir; bool browsingzip = false; /* Are we browsing an archive? */ zip_dir *zipfiles = NULL; SDL_Event sdlEvent; int yScrolbar_size; /* Size of the vertical scrollbar */ ypos = 0; scrollbar_Ypos = 0.0; refreshentries = true; entries = 0; /* Allocate memory for the file and path name strings: */ pStringMem = malloc(4 * FILENAME_MAX); path = pStringMem; fname = pStringMem + FILENAME_MAX; zipdir = pStringMem + 2 * FILENAME_MAX; zipfilename = pStringMem + 3 * FILENAME_MAX; zipfilename[0] = 0; fname[0] = 0; path[0] = 0; /* Save mouse state and enable cursor */ bOldMouseVisibility = SDL_ShowCursor(SDL_QUERY); SDL_ShowCursor(SDL_ENABLE); SDLGui_CenterDlg(fsdlg); if (bAllowNew) { fsdlg[SGFSDLG_FILENAME].type = SGEDITFIELD; fsdlg[SGFSDLG_FILENAME].flags |= SG_EXIT; } else { fsdlg[SGFSDLG_FILENAME].type = SGTEXT; fsdlg[SGFSDLG_FILENAME].flags &= ~SG_EXIT; } /* Prepare the path and filename variables */ if (path_and_name && path_and_name[0]) { strncpy(path, path_and_name, FILENAME_MAX); path[FILENAME_MAX-1] = '\0'; } if (!File_DirExists(path)) { File_SplitPath(path, path, fname, NULL); if (!(File_DirExists(path) || getcwd(path, FILENAME_MAX))) { perror("SDLGui_FileSelect: non-existing path and CWD failed"); goto clean_exit; } } File_MakeAbsoluteName(path); File_MakeValidPathName(path); File_ShrinkName(dlgpath, path, DLGPATH_SIZE); File_ShrinkName(dlgfname, fname, DLGFNAME_SIZE); do { if (reloaddir) { files = files_free(files); if (browsingzip) { files = ZIP_GetFilesDir(zipfiles, zipdir, &entries); if(!files) { fprintf(stderr, "SDLGui_FileSelect: ZIP_GetFilesDir error!\n"); goto clean_exit; } } else { /* Load directory entries: */ entries = scandir(path, &files, 0, alphasort); } /* Remove hidden files from the list if necessary: */ if (!(fsdlg[SGFSDLG_SHOWHIDDEN].state & SG_SELECTED)) { DlgFileSelect_RemoveHiddenFiles(files); } if (entries < 0) { fprintf(stderr, "SDLGui_FileSelect: Path not found.\n"); goto clean_exit; } /* reload always implies refresh */ reloaddir = false; refreshentries = true; }/* reloaddir */ /* Refresh scrollbar size */ if (entries <= SGFS_NUMENTRIES) yScrolbar_size = (SGFS_NUMENTRIES-2) * sdlgui_fontheight; else yScrolbar_size = (int)((SGFS_NUMENTRIES-2) / ((float)entries/(float)SGFS_NUMENTRIES) * sdlgui_fontheight); fsdlg[SGFSDLG_SCROLLBAR].w = yScrolbar_size; /* Refresh scrolbar pos */ fsdlg[SGFSDLG_SCROLLBAR].h = (int) (scrollbar_Ypos * sdlgui_fontheight); ypos = (int) (scrollbar_Ypos * ((float)entries/(float)(SGFS_NUMENTRIES-2)) + 0.5); /* Update the file name strings in the dialog? */ if (refreshentries) { if (!DlgFileSelect_RefreshEntries(files, path, browsingzip)) { goto clean_exit; } refreshentries = false; } /* Show dialog: */ retbut = SDLGui_DoDialog(fsdlg, &sdlEvent); /* Has the user clicked on a file or folder? */ if (retbut>=SGFSDLG_ENTRYFIRST && retbut<=SGFSDLG_ENTRYLAST && retbut-SGFSDLG_ENTRYFIRST+ypos<entries) { char *tempstr; tempstr = malloc(FILENAME_MAX); if (!tempstr) { perror("Error while allocating temporary memory in SDLGui_FileSelect()"); goto clean_exit; } if (browsingzip == true) { if (!strcat_maxlen(tempstr, FILENAME_MAX, zipdir, files[retbut-SGFSDLG_ENTRYFIRST+ypos]->d_name)) { fprintf(stderr, "SDLGui_FileSelect: Path name too long!\n"); goto clean_exit; } /* directory? */ if (File_DoesFileNameEndWithSlash(tempstr)) { /* handle the ../ directory */ if (strcmp(files[retbut-SGFSDLG_ENTRYFIRST+ypos]->d_name, "../") == 0) { /* close the zip file */ if (strcmp(tempstr, "../") == 0) { /* free zip file entries */ ZIP_FreeZipDir(zipfiles); zipfiles = NULL; /* Copy the path name to the dialog */ File_ShrinkName(dlgpath, path, DLGPATH_SIZE); browsingzip = false; } else { /* remove "../" and previous dir from path */ File_PathShorten(tempstr, 2); correct_zip_root(tempstr); strcpy(zipdir, tempstr); File_ShrinkName(dlgpath, zipdir, DLGPATH_SIZE); } } else /* not the "../" directory */ { strcpy(zipdir, tempstr); File_ShrinkName(dlgpath, zipdir, DLGPATH_SIZE); } reloaddir = true; /* Copy the path name to the dialog */ zipfilename[0] = '\0'; dlgfname[0] = 0; ypos = 0; scrollbar_Ypos = 0.0; } else { /* not dir, select a file in the zip */ selection = retbut-SGFSDLG_ENTRYFIRST+ypos; strcpy(zipfilename, files[selection]->d_name); File_ShrinkName(dlgfname, zipfilename, DLGFNAME_SIZE); } } else /* not browsingzip */ { if (!strcat_maxlen(tempstr, FILENAME_MAX, path, files[retbut-SGFSDLG_ENTRYFIRST+ypos]->d_name)) { fprintf(stderr, "SDLGui_FileSelect: Path name too long!\n"); goto clean_exit; } if (File_DirExists(tempstr)) { File_HandleDotDirs(tempstr); File_AddSlashToEndFileName(tempstr); /* Copy the path name to the dialog */ File_ShrinkName(dlgpath, tempstr, DLGPATH_SIZE); strcpy(path, tempstr); reloaddir = true; dlgfname[0] = 0; ypos = 0; scrollbar_Ypos = 0.0; } else if (ZIP_FileNameIsZIP(tempstr) && zip_path != NULL) { /* open a zip file */ zipfiles = ZIP_GetFiles(tempstr); if (zipfiles != NULL && browsingzip == false) { selection = retbut-SGFSDLG_ENTRYFIRST+ypos; strcpy(fname, files[selection]->d_name); File_ShrinkName(dlgfname, fname, DLGFNAME_SIZE); browsingzip = true; zipdir[0] = '\0'; /* zip root */ File_ShrinkName(dlgpath, zipdir, DLGPATH_SIZE); reloaddir = true; ypos = 0; scrollbar_Ypos = 0.0; } } else { /* Select a file */ selection = retbut-SGFSDLG_ENTRYFIRST+ypos; strcpy(fname, files[selection]->d_name); File_ShrinkName(dlgfname, fname, DLGFNAME_SIZE); } } /* not browsingzip */ free(tempstr); } else /* Has the user clicked on another button? */ { switch(retbut) { case SGFSDLG_UPDIR: /* Change path to parent directory */ if (browsingzip) { /* close the zip file? */ if (!zipdir[0]) { /* free zip file entries */ ZIP_FreeZipDir(zipfiles); browsingzip = false; zipfiles = NULL; File_ShrinkName(dlgpath, path, DLGPATH_SIZE); } else { /* remove last dir from zipdir path */ File_PathShorten(zipdir, 1); correct_zip_root(zipdir); File_ShrinkName(dlgpath, zipdir, DLGPATH_SIZE); zipfilename[0] = '\0'; } } /* not a zip file: */ else { File_PathShorten(path, 1); File_ShrinkName(dlgpath, path, DLGPATH_SIZE); } reloaddir = true; break; case SGFSDLG_HOMEDIR: /* Change to home directory */ home = Paths_GetUserHome(); if (home == NULL || !*home) break; if (browsingzip) { /* free zip file entries */ ZIP_FreeZipDir(zipfiles); zipfiles = NULL; browsingzip = false; } strcpy(path, home); File_AddSlashToEndFileName(path); File_ShrinkName(dlgpath, path, DLGPATH_SIZE); reloaddir = true; break; case SGFSDLG_ROOTDIR: /* Change to root directory */ if (browsingzip) { /* free zip file entries */ ZIP_FreeZipDir(zipfiles); zipfiles = NULL; browsingzip = false; } path[0] = PATHSEP; path[1] = '\0'; strcpy(dlgpath, path); reloaddir = true; break; case SGFSDLG_UP: /* Scroll up */ DlgFileSelect_ScrollUp(); SDL_Delay(10); break; case SGFSDLG_DOWN: /* Scroll down */ DlgFileSelect_ScrollDown(); SDL_Delay(10); break; case SGFSDLG_SCROLLBAR: /* Scrollbar selected */ DlgFileSelect_ManageScrollbar(); SDL_Delay(10); break; case SGFSDLG_FILENAME: /* User entered new filename */ strcpy(fname, dlgfname); break; case SGFSDLG_SHOWHIDDEN: /* Show/hide hidden files */ reloaddir = true; ypos = 0; scrollbar_Ypos = 0.0; break; case SDLGUI_UNKNOWNEVENT: DlgFileSelect_HandleSdlEvents(&sdlEvent); break; } /* switch */ if (reloaddir) { /* Remove old selection */ fname[0] = 0; dlgfname[0] = 0; ypos = 0; scrollbar_Ypos = 0.0; } } /* other button code */ } /* do */ while (retbut!=SGFSDLG_OKAY && retbut!=SGFSDLG_CANCEL && retbut!=SDLGUI_QUIT && retbut != SDLGUI_ERROR && !bQuitProgram); files_free(files); if (browsingzip) { /* free zip file entries */ ZIP_FreeZipDir(zipfiles); zipfiles = NULL; } if (retbut == SGFSDLG_OKAY) { if (zip_path) *zip_path = zip_get_path(zipdir, zipfilename, browsingzip); retpath = File_MakePath(path, fname, NULL); } else retpath = NULL; clean_exit: SDL_ShowCursor(bOldMouseVisibility); free(pStringMem); return retpath; }
/** * Show and process the "System" dialog */ void Dialog_SystemDlg(void) { int i; MACHINETYPE mti; SDLGui_CenterDlg(systemdlg); /* Set up dialog from actual values: */ for (i = DLGSYS_68000; i <= DLGSYS_68060; i++) { systemdlg[i].state &= ~SG_SELECTED; } systemdlg[DLGSYS_68000+ConfigureParams.System.nCpuLevel].state |= SG_SELECTED; for (i = DLGSYS_ST; i <= DLGSYS_FALCON; i++) { systemdlg[i].state &= ~SG_SELECTED; } systemdlg[DLGSYS_ST + ConfigureParams.System.nMachineType].state |= SG_SELECTED; /* CPU frequency: */ for (i = DLGSYS_8MHZ; i <= DLGSYS_32MHZ; i++) { systemdlg[i].state &= ~SG_SELECTED; } if (ConfigureParams.System.nCpuFreq == 32) systemdlg[DLGSYS_32MHZ].state |= SG_SELECTED; else if (ConfigureParams.System.nCpuFreq == 16) systemdlg[DLGSYS_16MHZ].state |= SG_SELECTED; else systemdlg[DLGSYS_8MHZ].state |= SG_SELECTED; /* DSP mode: */ for (i = DLGSYS_DSPOFF; i <= DLGSYS_DSPON; i++) { systemdlg[i].state &= ~SG_SELECTED; } if (ConfigureParams.System.nDSPType == DSP_TYPE_NONE) systemdlg[DLGSYS_DSPOFF].state |= SG_SELECTED; else if (ConfigureParams.System.nDSPType == DSP_TYPE_DUMMY) systemdlg[DLGSYS_DSPDUMMY].state |= SG_SELECTED; else systemdlg[DLGSYS_DSPON].state |= SG_SELECTED; /* More compatible CPU, Prefetch mode */ if (ConfigureParams.System.bCompatibleCpu) systemdlg[DLGSYS_PREFETCH].state |= SG_SELECTED; else systemdlg[DLGSYS_PREFETCH].state &= ~SG_SELECTED; /* Emulate Blitter */ if (ConfigureParams.System.bBlitter) systemdlg[DLGSYS_BLITTER].state |= SG_SELECTED; else systemdlg[DLGSYS_BLITTER].state &= ~SG_SELECTED; /* Real time clock CPU */ if (ConfigureParams.System.bRealTimeClock) systemdlg[DLGSYS_RTC].state |= SG_SELECTED; else systemdlg[DLGSYS_RTC].state &= ~SG_SELECTED; /* Patch timer D */ if (ConfigureParams.System.bPatchTimerD) systemdlg[DLGSYS_TIMERD].state |= SG_SELECTED; else systemdlg[DLGSYS_TIMERD].state &= ~SG_SELECTED; /* Boot faster by patching system variables */ if (ConfigureParams.System.bFastBoot) systemdlg[DLGSYS_FASTBOOT].state |= SG_SELECTED; else systemdlg[DLGSYS_FASTBOOT].state &= ~SG_SELECTED; #ifdef ENABLE_WINUAE_CPU /* Address space 24 bits */ if (ConfigureParams.System.bAddressSpace24) systemdlg[DLGSYS_24BITS].state |= SG_SELECTED; else systemdlg[DLGSYS_24BITS].state &= ~SG_SELECTED; /* Cycle exact CPU */ if (ConfigureParams.System.bCycleExactCpu) systemdlg[DLGSYS_CYC_EXACT].state |= SG_SELECTED; else systemdlg[DLGSYS_CYC_EXACT].state &= ~SG_SELECTED; /* FPU emulation */ for (i = DLGSYS_FPU_NONE; i <= DLGSYS_FPU_CPU_IN; i++) { systemdlg[i].state &= ~SG_SELECTED; } if (ConfigureParams.System.n_FPUType == FPU_NONE) systemdlg[DLGSYS_FPU_NONE].state |= SG_SELECTED; else if (ConfigureParams.System.n_FPUType == FPU_68881) systemdlg[DLGSYS_FPU_68881].state |= SG_SELECTED; else if (ConfigureParams.System.n_FPUType == FPU_68882) systemdlg[DLGSYS_FPU_68882].state |= SG_SELECTED; else systemdlg[DLGSYS_FPU_CPU_IN].state |= SG_SELECTED; /* More compatible FPU */ if (ConfigureParams.System.bCompatibleFPU) systemdlg[DLGSYS_FPU_COMPAT].state |= SG_SELECTED; else systemdlg[DLGSYS_FPU_COMPAT].state &= ~SG_SELECTED; /* MMU Emulation */ if (ConfigureParams.System.bMMU) systemdlg[DLGSYS_MMU_EMUL].state |= SG_SELECTED; else systemdlg[DLGSYS_MMU_EMUL].state &= ~SG_SELECTED; #endif /* Show the dialog: */ SDLGui_DoDialog(systemdlg, NULL, false); /* Read values from dialog: */ for (i = DLGSYS_68000; i <= DLGSYS_68060; i++) { if (systemdlg[i].state&SG_SELECTED) { ConfigureParams.System.nCpuLevel = i-DLGSYS_68000; break; } } for (mti = MACHINE_ST; mti <= MACHINE_FALCON; mti++) { if (systemdlg[mti + DLGSYS_ST].state&SG_SELECTED) { ConfigureParams.System.nMachineType = mti; break; } } if (systemdlg[DLGSYS_32MHZ].state & SG_SELECTED) ConfigureParams.System.nCpuFreq = 32; else if (systemdlg[DLGSYS_16MHZ].state & SG_SELECTED) ConfigureParams.System.nCpuFreq = 16; else ConfigureParams.System.nCpuFreq = 8; if (systemdlg[DLGSYS_DSPOFF].state & SG_SELECTED) ConfigureParams.System.nDSPType = DSP_TYPE_NONE; else if (systemdlg[DLGSYS_DSPDUMMY].state & SG_SELECTED) ConfigureParams.System.nDSPType = DSP_TYPE_DUMMY; else ConfigureParams.System.nDSPType = DSP_TYPE_EMU; ConfigureParams.System.bCompatibleCpu = (systemdlg[DLGSYS_PREFETCH].state & SG_SELECTED); ConfigureParams.System.bBlitter = (systemdlg[DLGSYS_BLITTER].state & SG_SELECTED); ConfigureParams.System.bRealTimeClock = (systemdlg[DLGSYS_RTC].state & SG_SELECTED); ConfigureParams.System.bPatchTimerD = (systemdlg[DLGSYS_TIMERD].state & SG_SELECTED); ConfigureParams.System.bFastBoot = (systemdlg[DLGSYS_FASTBOOT].state & SG_SELECTED); #ifdef ENABLE_WINUAE_CPU ConfigureParams.System.bCycleExactCpu = (systemdlg[DLGSYS_CYC_EXACT].state & SG_SELECTED); ConfigureParams.System.bMMU = (systemdlg[DLGSYS_MMU_EMUL].state & SG_SELECTED); ConfigureParams.System.bAddressSpace24 = (systemdlg[DLGSYS_24BITS].state & SG_SELECTED); /* FPU emulation */ if (systemdlg[DLGSYS_FPU_NONE].state & SG_SELECTED) ConfigureParams.System.n_FPUType = FPU_NONE; else if (systemdlg[DLGSYS_FPU_68881].state & SG_SELECTED) ConfigureParams.System.n_FPUType = FPU_68881; else if (systemdlg[DLGSYS_FPU_68882].state & SG_SELECTED) ConfigureParams.System.n_FPUType = FPU_68882; else ConfigureParams.System.n_FPUType = FPU_CPU; ConfigureParams.System.bCompatibleFPU = (systemdlg[DLGSYS_FPU_COMPAT].state & SG_SELECTED); #endif }
/** * Show and process the "System" dialog (specific to winUAE cpu). */ void Dialog_SystemDlg(void) { int i; int but; SDLGui_CenterDlg(systemdlg); /* Set up dialog from actual values: */ /* System type: */ for (i = DLGSYS_CUBE030; i <= DLGSYS_SLAB; i++) { systemdlg[i].state &= ~SG_SELECTED; } if (ConfigureParams.System.nMachineType == NEXT_CUBE030) systemdlg[DLGSYS_CUBE030].state |= SG_SELECTED; else if (ConfigureParams.System.nMachineType == NEXT_STATION) systemdlg[DLGSYS_SLAB].state |= SG_SELECTED; /* System overview */ print_system_overview(); /* Draw and process the dialog: */ do { but = SDLGui_DoDialog(systemdlg, NULL); switch (but) { case DLGSYS_CUBE030: ConfigureParams.System.nMachineType = NEXT_CUBE030; get_default_values(); break; case DLGSYS_CUBE: if (ConfigureParams.System.nMachineType!=NEXT_CUBE040) { ConfigureParams.System.bTurbo = false; } ConfigureParams.System.nMachineType = NEXT_CUBE040; get_default_values(); break; case DLGSYS_CUBETURBO: if (ConfigureParams.System.bTurbo && ConfigureParams.System.nMachineType==NEXT_CUBE040) { ConfigureParams.System.bTurbo = false; } else { ConfigureParams.System.bTurbo = true; } ConfigureParams.System.nMachineType = NEXT_CUBE040; get_default_values(); break; case DLGSYS_SLAB: if (ConfigureParams.System.nMachineType!=NEXT_STATION) { ConfigureParams.System.bTurbo = false; } ConfigureParams.System.nMachineType = NEXT_STATION; get_default_values(); break; case DLGSYS_SLABCOLOR: if (ConfigureParams.System.nMachineType!=NEXT_STATION) { ConfigureParams.System.bTurbo = false; } if (ConfigureParams.System.bColor) { ConfigureParams.System.bColor = false; } else { ConfigureParams.System.bColor = true; } ConfigureParams.System.nMachineType = NEXT_STATION; get_default_values(); break; case DLGSYS_SLABTURBO: if (ConfigureParams.System.bTurbo && ConfigureParams.System.nMachineType==NEXT_STATION) { ConfigureParams.System.bTurbo = false; } else { ConfigureParams.System.bTurbo = true; } ConfigureParams.System.nMachineType = NEXT_STATION; get_default_values(); break; case DLGSYS_CUSTOMIZE: Dialog_AdvancedDlg(); break; case DLGSYS_RESET: get_default_values(); break; case DLGSYS_MEMORY: Dialog_MemDlg(); break; default: break; } print_system_overview(); } while (but != DLGSYS_EXIT && but != SDLGUI_QUIT && but != SDLGUI_ERROR && !bQuitProgram); /* Obsolete */ ConfigureParams.System.bCompatibleCpu = 1; ConfigureParams.System.bBlitter = 0; ConfigureParams.System.bRealTimeClock = 0; ConfigureParams.System.bPatchTimerD = 0; ConfigureParams.System.bAddressSpace24 = 0; ConfigureParams.System.bCycleExactCpu = 0; ConfigureParams.System.bCompatibleFPU = 1; ConfigureParams.System.bMMU = 1; }
/** * Show and process the monitor dialog. */ void Dialog_MonitorDlg(void) { int but; unsigned int i; MONITORTYPE mti; SDLGui_CenterDlg(monitordlg); /* Set up general monitor options in the dialog from actual values: */ if (ConfigureParams.Screen.bAllowOverscan) monitordlg[DLGSCRN_OVERSCAN].state |= SG_SELECTED; else monitordlg[DLGSCRN_OVERSCAN].state &= ~SG_SELECTED; for (i = DLGSCRN_MONO; i <= DLGSCRN_TV; i++) monitordlg[i].state &= ~SG_SELECTED; monitordlg[DLGSCRN_MONO+ConfigureParams.Screen.nMonitorType].state |= SG_SELECTED; /* Initialize VDI resolution options: */ if (ConfigureParams.Screen.bUseExtVdiResolutions) monitordlg[DLGSCRN_USEVDIRES].state |= SG_SELECTED; else monitordlg[DLGSCRN_USEVDIRES].state &= ~SG_SELECTED; for (i=0; i<3; i++) monitordlg[DLGSCRN_BPP1 + i].state &= ~SG_SELECTED; monitordlg[DLGSCRN_BPP1 + ConfigureParams.Screen.nVdiColors - GEMCOLOR_2].state |= SG_SELECTED; sprintf(sVdiWidth, "%4i", ConfigureParams.Screen.nVdiWidth); sprintf(sVdiHeight, "%4i", ConfigureParams.Screen.nVdiHeight); DlgMonitor_SetVdiStepping(); /* The monitor dialog main loop */ do { but = SDLGui_DoDialog(monitordlg, NULL); switch (but) { case DLGSCRN_VDI_WLESS: ConfigureParams.Screen.nVdiWidth = VDI_Limit(ConfigureParams.Screen.nVdiWidth - nVdiStepX, nVdiStepX, MIN_VDI_WIDTH, MAX_VDI_WIDTH); sprintf(sVdiWidth, "%4i", ConfigureParams.Screen.nVdiWidth); break; case DLGSCRN_VDI_WMORE: ConfigureParams.Screen.nVdiWidth = VDI_Limit(ConfigureParams.Screen.nVdiWidth + nVdiStepX, nVdiStepX, MIN_VDI_WIDTH, MAX_VDI_WIDTH); sprintf(sVdiWidth, "%4i", ConfigureParams.Screen.nVdiWidth); break; case DLGSCRN_VDI_HLESS: ConfigureParams.Screen.nVdiHeight = VDI_Limit(ConfigureParams.Screen.nVdiHeight - nVdiStepY, nVdiStepY, MIN_VDI_HEIGHT, MAX_VDI_HEIGHT); sprintf(sVdiHeight, "%4i", ConfigureParams.Screen.nVdiHeight); break; case DLGSCRN_VDI_HMORE: ConfigureParams.Screen.nVdiHeight = VDI_Limit(ConfigureParams.Screen.nVdiHeight + nVdiStepY, nVdiStepY, MIN_VDI_HEIGHT, MAX_VDI_HEIGHT); sprintf(sVdiHeight, "%4i", ConfigureParams.Screen.nVdiHeight); break; case DLGSCRN_BPP1: case DLGSCRN_BPP2: case DLGSCRN_BPP4: DlgMonitor_SetVdiStepping(); /* Align resolution to actual conditions: */ ConfigureParams.Screen.nVdiWidth = VDI_Limit(ConfigureParams.Screen.nVdiWidth, nVdiStepX, MIN_VDI_WIDTH, MAX_VDI_WIDTH); ConfigureParams.Screen.nVdiHeight = VDI_Limit(ConfigureParams.Screen.nVdiHeight, nVdiStepY, MIN_VDI_HEIGHT, MAX_VDI_HEIGHT); sprintf(sVdiWidth, "%4i", ConfigureParams.Screen.nVdiWidth); sprintf(sVdiHeight, "%4i", ConfigureParams.Screen.nVdiHeight); break; } } while (but != DLGSCRN_EXIT_MONITOR && but != SDLGUI_QUIT && but != SDLGUI_ERROR && !bQuitProgram); /* Read new values from dialog: */ ConfigureParams.Screen.bAllowOverscan = (monitordlg[DLGSCRN_OVERSCAN].state & SG_SELECTED); for (mti = MONITOR_TYPE_MONO; mti <= MONITOR_TYPE_TV; mti++) { if (monitordlg[mti + DLGSCRN_MONO].state & SG_SELECTED) { ConfigureParams.Screen.nMonitorType = mti; break; } } ConfigureParams.Screen.bUseExtVdiResolutions = (monitordlg[DLGSCRN_USEVDIRES].state & SG_SELECTED); for (i=0; i<3; i++) { if (monitordlg[DLGSCRN_BPP1 + i].state & SG_SELECTED) ConfigureParams.Screen.nVdiColors = GEMCOLOR_2 + i; } }
/** * Show and process the sound dialog. */ void Dialog_SoundDlg(void) { int but, i; SDLGui_CenterDlg(sounddlg); /* Set up dialog from actual values: */ if (ConfigureParams.Sound.bEnableSound) sounddlg[DLGSOUND_ENABLE].state |= SG_SELECTED; else sounddlg[DLGSOUND_ENABLE].state &= ~SG_SELECTED; if (ConfigureParams.Sound.bEnableSoundSync) sounddlg[DLGSOUND_SYNC].state |= SG_SELECTED; else sounddlg[DLGSOUND_SYNC].state &= ~SG_SELECTED; for (i = DLGSOUND_11KHZ; i <= DLGSOUND_50KHZ; i++) sounddlg[i].state &= ~SG_SELECTED; for (i = 0; i <= DLGSOUND_50KHZ-DLGSOUND_11KHZ; i++) { if (ConfigureParams.Sound.nPlaybackFreq > nSoundFreqs[i]-500 && ConfigureParams.Sound.nPlaybackFreq < nSoundFreqs[i]+500) { sounddlg[DLGSOUND_11KHZ + i].state |= SG_SELECTED; break; } } sounddlg[DLGSOUND_MODEL].state &= ~SG_SELECTED; sounddlg[DLGSOUND_TABLE].state &= ~SG_SELECTED; sounddlg[DLGSOUND_LINEAR].state &= ~SG_SELECTED; if (ConfigureParams.Sound.YmVolumeMixing == YM_MODEL_MIXING) sounddlg[DLGSOUND_MODEL].state |= SG_SELECTED; else if (ConfigureParams.Sound.YmVolumeMixing == YM_TABLE_MIXING) sounddlg[DLGSOUND_TABLE].state |= SG_SELECTED; else sounddlg[DLGSOUND_LINEAR].state |= SG_SELECTED; File_ShrinkName(dlgRecordName, ConfigureParams.Sound.szYMCaptureFileName, sounddlg[DLGSOUND_RECNAME].w); if ( Sound_AreWeRecording() ) sounddlg[DLGSOUND_RECORD].txt = "Stop recording"; else sounddlg[DLGSOUND_RECORD].txt = "Record sound"; /* The sound dialog main loop */ do { but = SDLGui_DoDialog(sounddlg, NULL); switch (but) { case DLGSOUND_RECBROWSE: /* Choose a new record file */ SDLGui_FileConfSelect(dlgRecordName, ConfigureParams.Sound.szYMCaptureFileName, sounddlg[DLGSOUND_RECNAME].w, true); break; case DLGSOUND_RECORD: if (Sound_AreWeRecording()) { sounddlg[DLGSOUND_RECORD].txt = "Record sound"; Sound_EndRecording(); } else { /* make sure that we have a valid file name... */ if (strlen(ConfigureParams.Sound.szYMCaptureFileName) < 4) { strcpy(ConfigureParams.Sound.szYMCaptureFileName, "./hatari.wav"); } sounddlg[DLGSOUND_RECORD].txt = "Stop recording"; Sound_BeginRecording(ConfigureParams.Sound.szYMCaptureFileName); } break; } gui_poll_events(); } while (but != DLGSOUND_EXIT && but != SDLGUI_QUIT && but != SDLGUI_ERROR && !bQuitProgram ); /* Read values from dialog */ ConfigureParams.Sound.bEnableSound = (sounddlg[DLGSOUND_ENABLE].state & SG_SELECTED); ConfigureParams.Sound.bEnableSoundSync = (sounddlg[DLGSOUND_SYNC].state & SG_SELECTED); for (i = DLGSOUND_11KHZ; i <= DLGSOUND_50KHZ; i++) { if (sounddlg[i].state & SG_SELECTED) { ConfigureParams.Sound.nPlaybackFreq = nSoundFreqs[i-DLGSOUND_11KHZ]; break; } } if (sounddlg[DLGSOUND_MODEL].state & SG_SELECTED) ConfigureParams.Sound.YmVolumeMixing = YM_MODEL_MIXING; else if (sounddlg[DLGSOUND_TABLE].state & SG_SELECTED) ConfigureParams.Sound.YmVolumeMixing = YM_TABLE_MIXING; else ConfigureParams.Sound.YmVolumeMixing = YM_LINEAR_MIXING; }
/** * Show and process the ROM dialog. */ void DlgRom_Main(void) { char szDlgRom030Name[47]; char szDlgRom040Name[47]; char szDlgRomTurboName[47]; int but; SDLGui_CenterDlg(romdlg); File_ShrinkName(szDlgRom030Name, ConfigureParams.Rom.szRom030FileName, sizeof(szDlgRom030Name)-1); romdlg[DLGROM_ROM030_NAME].txt = szDlgRom030Name; File_ShrinkName(szDlgRom040Name, ConfigureParams.Rom.szRom040FileName, sizeof(szDlgRom040Name)-1); romdlg[DLGROM_ROM040_NAME].txt = szDlgRom040Name; File_ShrinkName(szDlgRomTurboName, ConfigureParams.Rom.szRomTurboFileName, sizeof(szDlgRomTurboName)-1); romdlg[DLGROM_ROMTURBO_NAME].txt = szDlgRomTurboName; do { but = SDLGui_DoDialog(romdlg, NULL); switch (but) { case DLGROM_ROM030_DEFAULT: sprintf(ConfigureParams.Rom.szRom030FileName, "%s%cRev_1.0_v41.BIN", Paths_GetWorkingDir(), PATHSEP); File_ShrinkName(szDlgRom030Name, ConfigureParams.Rom.szRom030FileName, sizeof(szDlgRom030Name)-1); break; case DLGROM_ROM030_BROWSE: /* Show and process the file selection dlg */ SDLGui_FileConfSelect(szDlgRom030Name, ConfigureParams.Rom.szRom030FileName, sizeof(szDlgRom030Name)-1, false); break; case DLGROM_ROM040_DEFAULT: sprintf(ConfigureParams.Rom.szRom040FileName, "%s%cRev_2.5_v66.BIN", Paths_GetWorkingDir(), PATHSEP); File_ShrinkName(szDlgRom040Name, ConfigureParams.Rom.szRom040FileName, sizeof(szDlgRom040Name)-1); break; case DLGROM_ROM040_BROWSE: /* Show and process the file selection dlg */ SDLGui_FileConfSelect(szDlgRom040Name, ConfigureParams.Rom.szRom040FileName, sizeof(szDlgRom040Name)-1, false); break; case DLGROM_ROMTURBO_DEFAULT: sprintf(ConfigureParams.Rom.szRomTurboFileName, "%s%cRev_3.3_v74.BIN", Paths_GetWorkingDir(), PATHSEP); File_ShrinkName(szDlgRomTurboName, ConfigureParams.Rom.szRomTurboFileName, sizeof(szDlgRomTurboName)-1); break; case DLGROM_ROMTURBO_BROWSE: /* Show and process the file selection dlg */ SDLGui_FileConfSelect(szDlgRomTurboName, ConfigureParams.Rom.szRomTurboFileName, sizeof(szDlgRomTurboName)-1, false); break; } } while (but != DLGROM_EXIT && but != SDLGUI_QUIT && but != SDLGUI_ERROR && !bQuitProgram); }
void Dialog_Advanced(Prefs &prefs) { switch (SDLGui_DoDialog(advanceddlg)) { } }
/** * Show and process the "System" dialog (specific to winUAE cpu). */ void Dialog_SystemDlg(void) { int32_t i; //MACHINETYPE mti; //printf("0cpu:%d curr:%d\n",changed_prefs.cpu_model,currprefs.cpu_model); SDLGui_CenterDlg(systemdlg); /* Set up dialog from actual values: */ for (i = DLGSYS_68000; i <= DLGSYS_68060; i++) { systemdlg[i].state &= ~SG_SELECTED; } systemdlg[DLGSYS_68000+/*ConfigureParams.System.*/nCpuLevel].state |= SG_SELECTED; #if 0 for (i = DLGSYS_ST; i <= DLGSYS_FALCON; i++) { systemdlg[i].state &= ~SG_SELECTED; } systemdlg[DLGSYS_ST + ConfigureParams.System.nMachineType].state |= SG_SELECTED; /* CPU frequency: */ for (i = DLGSYS_8MHZ; i <= DLGSYS_16MHZ; i++) { systemdlg[i].state &= ~SG_SELECTED; } if (ConfigureParams.System.nCpuFreq == 32) systemdlg[DLGSYS_32MHZ].state |= SG_SELECTED; else if (ConfigureParams.System.nCpuFreq == 16) systemdlg[DLGSYS_16MHZ].state |= SG_SELECTED; else systemdlg[DLGSYS_8MHZ].state |= SG_SELECTED; /* DSP mode: */ for (i = DLGSYS_DSPOFF; i <= DLGSYS_DSPON; i++) { systemdlg[i].state &= ~SG_SELECTED; } if (ConfigureParams.System.nDSPType == DSP_TYPE_NONE) systemdlg[DLGSYS_DSPOFF].state |= SG_SELECTED; else if (ConfigureParams.System.nDSPType == DSP_TYPE_DUMMY) systemdlg[DLGSYS_DSPDUMMY].state |= SG_SELECTED; else systemdlg[DLGSYS_DSPON].state |= SG_SELECTED; #endif /* More compatible CPU, Prefetch mode */ if (/*ConfigureParams.System.*/bCompatibleCpu) systemdlg[DLGSYS_PREFETCH].state |= SG_SELECTED; else systemdlg[DLGSYS_PREFETCH].state &= ~SG_SELECTED; #if 0 /* Emulate Blitter */ if (ConfigureParams.System.bBlitter) systemdlg[DLGSYS_BLITTER].state |= SG_SELECTED; else systemdlg[DLGSYS_BLITTER].state &= ~SG_SELECTED; /* Real time clock CPU */ if (ConfigureParams.System.bRealTimeClock) systemdlg[DLGSYS_RTC].state |= SG_SELECTED; else systemdlg[DLGSYS_RTC].state &= ~SG_SELECTED; /* Patch timer D */ if (ConfigureParams.System.bPatchTimerD) systemdlg[DLGSYS_TIMERD].state |= SG_SELECTED; else systemdlg[DLGSYS_TIMERD].state &= ~SG_SELECTED; /* Adress space 24 bits */ if (ConfigureParams.System.bAddressSpace24) systemdlg[DLGSYS_24BITS].state |= SG_SELECTED; else systemdlg[DLGSYS_24BITS].state &= ~SG_SELECTED; #endif /* Cycle exact CPU */ if (/*ConfigureParams.System.*/bCycleExactCpu) systemdlg[DLGSYS_CYC_EXACT].state |= SG_SELECTED; else systemdlg[DLGSYS_CYC_EXACT].state &= ~SG_SELECTED; #if 0 /* FPU emulation */ for (i = DLGSYS_FPU_NONE; i <= DLGSYS_FPU_CPU_IN; i++) { systemdlg[i].state &= ~SG_SELECTED; } if (ConfigureParams.System.n_FPUType == FPU_NONE) systemdlg[DLGSYS_FPU_NONE].state |= SG_SELECTED; else if (ConfigureParams.System.n_FPUType == FPU_68881) systemdlg[DLGSYS_FPU_68881].state |= SG_SELECTED; else if (ConfigureParams.System.n_FPUType == FPU_68882) systemdlg[DLGSYS_FPU_68882].state |= SG_SELECTED; else systemdlg[DLGSYS_FPU_CPU_IN].state |= SG_SELECTED; /* More compatible FPU */ if (ConfigureParams.System.bCompatibleFPU) systemdlg[DLGSYS_FPU_COMPAT].state |= SG_SELECTED; else systemdlg[DLGSYS_FPU_COMPAT].state &= ~SG_SELECTED; /* MMU Emulation */ if (ConfigureParams.System.bMMU) systemdlg[DLGSYS_MMU_EMUL].state |= SG_SELECTED; else systemdlg[DLGSYS_MMU_EMUL].state &= ~SG_SELECTED; #endif int32_t but; do { /* Show the dialog: */ but=SDLGui_DoDialog(systemdlg, NULL); gui_poll_events(); } while (but != DLGSYS_EXIT && but != SDLGUI_QUIT && but != SDLGUI_ERROR && !bQuitProgram); /* Read values from dialog: */ for (i = DLGSYS_68000; i <= DLGSYS_68060; i++) { if (systemdlg[i].state&SG_SELECTED) { /*ConfigureParams.System.*/nCpuLevel = i-DLGSYS_68000; break; } } int32_t index = nCpuLevel; if(index==5)index=6; changed_prefs.cpu_model=68000+index*10; //currprefs.cpu_model=68000; //printf("1cpu:%d curr:%d\n",changed_prefs.cpu_model,currprefs.cpu_model); if (changed_prefs.cpu_model <= 68020)changed_prefs.address_space_24=1; /* for (mti = MACHINE_ST; mti <= MACHINE_FALCON; mti++) { if (systemdlg[mti + DLGSYS_ST].state&SG_SELECTED) { ConfigureParams.System.nMachineType = mti; break; } } */ /* if (systemdlg[DLGSYS_32MHZ].state & SG_SELECTED) ConfigureParams.System.nCpuFreq = 32; else if (systemdlg[DLGSYS_16MHZ].state & SG_SELECTED) ConfigureParams.System.nCpuFreq = 16; else ConfigureParams.System.nCpuFreq = 8; if (systemdlg[DLGSYS_DSPOFF].state & SG_SELECTED) ConfigureParams.System.nDSPType = DSP_TYPE_NONE; else if (systemdlg[DLGSYS_DSPDUMMY].state & SG_SELECTED) ConfigureParams.System.nDSPType = DSP_TYPE_DUMMY; else ConfigureParams.System.nDSPType = DSP_TYPE_EMU; */ /*ConfigureParams.System.*/bCompatibleCpu = (systemdlg[DLGSYS_PREFETCH].state & SG_SELECTED); changed_prefs.cpu_compatible =bCompatibleCpu; if (changed_prefs.cpu_compatible && currprefs.cpu_cycle_exact) { changed_prefs.cpu_cycle_exact = 0; } /* ConfigureParams.System.bBlitter = (systemdlg[DLGSYS_BLITTER].state & SG_SELECTED); ConfigureParams.System.bRealTimeClock = (systemdlg[DLGSYS_RTC].state & SG_SELECTED); ConfigureParams.System.bPatchTimerD = (systemdlg[DLGSYS_TIMERD].state & SG_SELECTED); ConfigureParams.System.bAddressSpace24 = (systemdlg[DLGSYS_24BITS].state & SG_SELECTED); */ /*ConfigureParams.System.*/bCycleExactCpu = (systemdlg[DLGSYS_CYC_EXACT].state & SG_SELECTED); changed_prefs.cpu_cycle_exact = bCycleExactCpu; if (changed_prefs.cpu_cycle_exact && currprefs.cpu_compatible) { changed_prefs.cpu_compatible = 0; } config_changed = 1; check_prefs_changed_cpu(); /* FPU emulation */ /* if (systemdlg[DLGSYS_FPU_NONE].state & SG_SELECTED) ConfigureParams.System.n_FPUType = FPU_NONE; else if (systemdlg[DLGSYS_FPU_68881].state & SG_SELECTED) ConfigureParams.System.n_FPUType = FPU_68881; else if (systemdlg[DLGSYS_FPU_68882].state & SG_SELECTED) ConfigureParams.System.n_FPUType = FPU_68882; else ConfigureParams.System.n_FPUType = FPU_CPU; ConfigureParams.System.bCompatibleFPU = (systemdlg[DLGSYS_FPU_COMPAT].state & SG_SELECTED); ConfigureParams.System.bMMU = (systemdlg[DLGSYS_MMU_EMUL].state & SG_SELECTED); */ }
/** * This functions sets up the actual font and then displays the main dialog. */ int Dialog_MainDlg(bool *bReset, bool *bLoadedSnapshot) { int retbut; bool bOldMouseVisibility; int nOldMouseX, nOldMouseY; char *psNewCfg; *bReset = false; *bLoadedSnapshot = false; if (SDLGui_SetScreen(sdlscrn)) return false; SDL_GetMouseState(&nOldMouseX, &nOldMouseY); bOldMouseVisibility = SDL_ShowCursor(SDL_QUERY); SDL_ShowCursor(SDL_ENABLE); SDLGui_CenterDlg(maindlg); maindlg[MAINDLG_NORESET].state |= SG_SELECTED; maindlg[MAINDLG_RESET].state &= ~SG_SELECTED; do { retbut = SDLGui_DoDialog(maindlg, NULL); switch (retbut) { case MAINDLG_ABOUT: Dialog_AboutDlg(); break; case MAINDLG_FLOPPYS: DlgFloppy_Main(); break; case MAINDLG_HARDDISK: DlgHardDisk_Main(); break; case MAINDLG_ROM: DlgRom_Main(); break; case MAINDLG_MONITOR: Dialog_MonitorDlg(); break; case MAINDLG_WINDOW: Dialog_WindowDlg(); break; case MAINDLG_SYSTEM: Dialog_SystemDlg(); break; case MAINDLG_MEMORY: if (Dialog_MemDlg()) { /* Memory snapshot has been loaded - leave GUI immediately */ *bLoadedSnapshot = true; SDL_ShowCursor(bOldMouseVisibility); Main_WarpMouse(nOldMouseX, nOldMouseY); return true; } break; case MAINDLG_JOY: Dialog_JoyDlg(); break; case MAINDLG_KEYBD: Dialog_KeyboardDlg(); break; case MAINDLG_DEVICES: Dialog_DeviceDlg(); break; case MAINDLG_SOUND: Dialog_SoundDlg(); break; case MAINDLG_LOADCFG: psNewCfg = SDLGui_FileSelect(sConfigFileName, NULL, false); if (psNewCfg) { strcpy(sConfigFileName, psNewCfg); Configuration_Load(NULL); free(psNewCfg); } break; case MAINDLG_SAVECFG: psNewCfg = SDLGui_FileSelect(sConfigFileName, NULL, true); if (psNewCfg) { strcpy(sConfigFileName, psNewCfg); Configuration_Save(); free(psNewCfg); } break; case MAINDLG_QUIT: bQuitProgram = true; break; } gui_poll_events(); } while (retbut != MAINDLG_OK && retbut != MAINDLG_CANCEL && retbut != SDLGUI_QUIT && retbut != SDLGUI_ERROR && !bQuitProgram); if (maindlg[MAINDLG_RESET].state & SG_SELECTED) *bReset = true; SDL_ShowCursor(bOldMouseVisibility); Main_WarpMouse(nOldMouseX, nOldMouseY); return (retbut == MAINDLG_OK); }
/** * Show and process the floppy disk image dialog. */ void DlgFloppy_Main(void) { int but, i; char *newdisk; char dlgname[MAX_FLOPPYDRIVES][64], dlgdiskdir[64]; SDLGui_CenterDlg(floppydlg); /* Set up dialog to actual values: */ const char *name; floppydlg[FLOPPYDLG_AUTORUN].state &= ~SG_SELECTED; name = DISKA_NAME; /* Filename */ if (!name)dlgname[0][0] = '\0'; else File_ShrinkName(dlgname[0], name,floppydlg[FLOPPYDLG_DISKA].w); floppydlg[FLOPPYDLG_DISKA].txt = dlgname[0]; name = DISKB_NAME; /* Filename */ if (!name)dlgname[1][0] = '\0'; else File_ShrinkName(dlgname[1], name,floppydlg[FLOPPYDLG_DISKB].w); floppydlg[FLOPPYDLG_DISKB].txt = dlgname[1]; name = TAPE_NAME; /* Filename */ if (!name)dlgname[2][0] = '\0'; else File_ShrinkName(dlgname[2], name,floppydlg[FLOPPYDLG_DISK2].w); floppydlg[FLOPPYDLG_DISK2].txt = dlgname[2]; name = CART_NAME; /* Filename */ if (!name)dlgname[3][0] = '\0'; else File_ShrinkName(dlgname[3], name,floppydlg[FLOPPYDLG_DISK3].w); floppydlg[FLOPPYDLG_DISK3].txt = dlgname[3]; /* Default image directory: */ File_ShrinkName(dlgdiskdir,szDiskImageDirectory, floppydlg[FLOPPYDLG_IMGDIR].w); floppydlg[FLOPPYDLG_IMGDIR].txt = dlgdiskdir; /* Draw and process the dialog */ do { but = SDLGui_DoDialog(floppydlg, NULL); switch (but) { case FLOPPYDLG_EJECTA: /* Eject disk in drive A: */ Floppy_SetDiskFileNameNone(0); dlgname[0][0] = '\0'; DiskImage_RemoveDisk(0); break; case FLOPPYDLG_BROWSEA: /* Choose a new disk A: */ DlgDisk_BrowseDisk(dlgname[0], 0, FLOPPYDLG_DISKA); if (strlen(szDiskFileName[0]) > 0){ if (GenericInterface_InsertDiskImage(0, szDiskFileName[0])) { printf("Error loading drivea:%s\n", szDiskFileName[0]); } else { if(floppydlg[FLOPPYDLG_AUTORUN].state & SG_SELECTED){ char AutoType_String[256]; char *pBuffer = malloc(512*5); int nAutoRunResult = AMSDOS_GenerateAutorunCommand(pBuffer,AutoType_String); if(nAutoRunResult==0){ printf("auto(%s)\n",AutoType_String); AutoType_SetString(AutoType_String, TRUE, TRUE); } else printf("error auto(%d)\n",nAutoRunResult); free(pBuffer); } sprintf(DISKA_NAME,"%s",szDiskFileName[0]); } } break; case FLOPPYDLG_EJECTB: /* Eject disk in drive B: */ Floppy_SetDiskFileNameNone(1); dlgname[1][0] = '\0'; DiskImage_RemoveDisk(1); break; case FLOPPYDLG_BROWSEB: /* Choose a new disk B: */ DlgDisk_BrowseDisk(dlgname[1], 1, FLOPPYDLG_DISKB); if (strlen(szDiskFileName[1]) > 0){ if (GenericInterface_InsertDiskImage(1, szDiskFileName[1])) { printf("Error loading driveb:%s\n", szDiskFileName[1]); } else sprintf(DISKB_NAME,"%s",szDiskFileName[1]); } case FLOPPYDLG_EJECT2: /* Eject tape */ Floppy_SetDiskFileNameNone(2); dlgname[2][0] = '\0'; Tape_Remove(); sprintf(TAPE_NAME,"\0"); break; case FLOPPYDLG_BROWSE2: /* Choose a new tape */ DlgDisk_BrowseDisk(dlgname[2], 2, FLOPPYDLG_DISK2); if (strlen(szDiskFileName[2]) > 0){ if (GenericInterface_InsertTape(szDiskFileName[2])) { printf("Error loading Tape:%s\n", szDiskFileName[2]); } else { sprintf(TAPE_NAME,"%s",szDiskFileName[2]); AutoType_SetString( "|TAPE\nRUN\"\n\n", TRUE, TRUE); } } break; case FLOPPYDLG_EJECT3: /* Eject cart */ Floppy_SetDiskFileNameNone(3); dlgname[3][0] = '\0'; GenericInterface_RemoveCartridge(); sprintf(CART_NAME,"\0"); break; case FLOPPYDLG_BROWSE3: /* Choose a new cart */ DlgDisk_BrowseDisk(dlgname[3], 3, FLOPPYDLG_DISK3); if (strlen(szDiskFileName[3]) > 0){ if(strcmp (szDiskFileName[3],"/home/tech/Bureau/GIT/arnold/roms/parados.rom") == 0){ GenericInterface_LoadRom(7, szDiskFileName[3]); CPC_Reset(); break; } if (GenericInterface_InsertCartridge(szDiskFileName[3])) { printf("Error loading cart:%s\n",szDiskFileName[3]); } else sprintf(CART_NAME,"%s",szDiskFileName[3]); // strcpy(prefs->DrivePath[3], szDiskFileName[3]); } break; case FLOPPYDLG_BROWSEIMG: DlgDisk_BrowseDir(dlgdiskdir,szDiskImageDirectory,floppydlg[FLOPPYDLG_IMGDIR].w); break; /* case FLOPPYDLG_CREATEIMG: newdisk = DlgNewDisk_Main(); if (newdisk) { DlgFloppy_QueryInsert(dlgname[0], FLOPPYDLG_DISKA, dlgname[1], FLOPPYDLG_DISKB, newdisk); free(newdisk); } break; */ } gui_poll_events(); } while (but != FLOPPYDLG_EXIT && but != SDLGUI_QUIT && but != SDLGUI_ERROR && !bQuitProgram); }
/** * Show and process the memory dialog. * @return true if a memory snapshot has been loaded, false otherwise */ bool Dialog_MemDlg(void) { int i; int but; SDLGui_CenterDlg(memorydlg); for (i = DLGMEM_512KB; i <= DLGMEM_14MB; i++) { memorydlg[i].state &= ~SG_SELECTED; } switch (ConfigureParams.Memory.nMemorySize) { case 0: memorydlg[DLGMEM_512KB].state |= SG_SELECTED; break; case 1: memorydlg[DLGMEM_1MB].state |= SG_SELECTED; break; case 2: memorydlg[DLGMEM_2MB].state |= SG_SELECTED; break; case 4: memorydlg[DLGMEM_4MB].state |= SG_SELECTED; break; case 8: memorydlg[DLGMEM_8MB].state |= SG_SELECTED; break; default: memorydlg[DLGMEM_14MB].state |= SG_SELECTED; break; } File_ShrinkName(dlgSnapShotName, ConfigureParams.Memory.szMemoryCaptureFileName, memorydlg[DLGMEM_FILENAME].w); if (ConfigureParams.Memory.bAutoSave) memorydlg[DLGMEM_AUTOSAVE].state |= SG_SELECTED; else memorydlg[DLGMEM_AUTOSAVE].state &= ~SG_SELECTED; do { but = SDLGui_DoDialog(memorydlg, NULL); switch (but) { case DLGMEM_SAVE: /* Save memory snap-shot */ if (SDLGui_FileConfSelect(dlgSnapShotName, ConfigureParams.Memory.szMemoryCaptureFileName, memorydlg[DLGMEM_FILENAME].w, true)) { MemorySnapShot_Capture(ConfigureParams.Memory.szMemoryCaptureFileName, true); } break; case DLGMEM_RESTORE: /* Load memory snap-shot */ if (SDLGui_FileConfSelect(dlgSnapShotName, ConfigureParams.Memory.szMemoryCaptureFileName, memorydlg[DLGMEM_FILENAME].w, false)) { MemorySnapShot_Restore(ConfigureParams.Memory.szMemoryCaptureFileName, true); return true; } break; } } while (but != DLGMEM_EXIT && but != SDLGUI_QUIT && but != SDLGUI_ERROR && !bQuitProgram ); /* Read new values from dialog: */ if (memorydlg[DLGMEM_512KB].state & SG_SELECTED) ConfigureParams.Memory.nMemorySize = 0; else if (memorydlg[DLGMEM_1MB].state & SG_SELECTED) ConfigureParams.Memory.nMemorySize = 1; else if (memorydlg[DLGMEM_2MB].state & SG_SELECTED) ConfigureParams.Memory.nMemorySize = 2; else if (memorydlg[DLGMEM_4MB].state & SG_SELECTED) ConfigureParams.Memory.nMemorySize = 4; else if (memorydlg[DLGMEM_8MB].state & SG_SELECTED) ConfigureParams.Memory.nMemorySize = 8; else ConfigureParams.Memory.nMemorySize = 14; ConfigureParams.Memory.bAutoSave = (memorydlg[DLGMEM_AUTOSAVE].state & SG_SELECTED); return false; }
/** * Show and process the window dialog. */ void Dialog_WindowDlg(void) { int deskw, deskh, but, skip = 0; unsigned int i; SDLGui_CenterDlg(windowdlg); /* Set up general window options in the dialog from actual values: */ if (ConfigureParams.Screen.bFullScreen) windowdlg[DLGSCRN_FULLSCRN].state |= SG_SELECTED; else windowdlg[DLGSCRN_FULLSCRN].state &= ~SG_SELECTED; if (ConfigureParams.Screen.bKeepResolution) windowdlg[DLGSCRN_KEEP_RES].state |= SG_SELECTED; else windowdlg[DLGSCRN_KEEP_RES].state &= ~SG_SELECTED; if (ConfigureParams.Screen.bKeepResolutionST) windowdlg[DLGSCRN_KEEP_RES_ST].state |= SG_SELECTED; else windowdlg[DLGSCRN_KEEP_RES_ST].state &= ~SG_SELECTED; windowdlg[DLGSCRN_STATUSBAR].state &= ~SG_SELECTED; windowdlg[DLGSCRN_DRIVELED].state &= ~SG_SELECTED; windowdlg[DLGSCRN_NONE].state &= ~SG_SELECTED; if (ConfigureParams.Screen.bShowStatusbar) windowdlg[DLGSCRN_STATUSBAR].state |= SG_SELECTED; else if (ConfigureParams.Screen.bShowDriveLed) windowdlg[DLGSCRN_DRIVELED].state |= SG_SELECTED; else windowdlg[DLGSCRN_NONE].state |= SG_SELECTED; for (i = 0; i < ITEMS_IN_ARRAY(skip_frames); i++) { if (ConfigureParams.Screen.nFrameSkips >= skip_frames[i]) skip = i; windowdlg[i+DLGSCRN_SKIP0].state &= ~SG_SELECTED; } windowdlg[DLGSCRN_SKIP0+skip].state |= SG_SELECTED; Resolution_GetDesktopSize(&deskw, &deskh); sprintf(sMaxWidth, "%4i", ConfigureParams.Screen.nMaxWidth); sprintf(sMaxHeight, "%4i", ConfigureParams.Screen.nMaxHeight); /* Initialize window capture options: */ if (ConfigureParams.Screen.bCrop) windowdlg[DLGSCRN_CROP].state |= SG_SELECTED; else windowdlg[DLGSCRN_CROP].state &= ~SG_SELECTED; if (Avi_AreWeRecording()) windowdlg[DLGSCRN_RECANIM].txt = RECORD_STOP; else windowdlg[DLGSCRN_RECANIM].txt = RECORD_START; /* The window dialog main loop */ do { but = SDLGui_DoDialog(windowdlg, NULL); switch (but) { case DLGSCRN_MAX_WLESS: ConfigureParams.Screen.nMaxWidth = VDI_Limit(ConfigureParams.Screen.nMaxWidth - MAX_SIZE_STEP, MAX_SIZE_STEP, MIN_VDI_WIDTH, deskw); sprintf(sMaxWidth, "%4i", ConfigureParams.Screen.nMaxWidth); break; case DLGSCRN_MAX_WMORE: ConfigureParams.Screen.nMaxWidth = VDI_Limit(ConfigureParams.Screen.nMaxWidth + MAX_SIZE_STEP, MAX_SIZE_STEP, MIN_VDI_WIDTH, deskw); sprintf(sMaxWidth, "%4i", ConfigureParams.Screen.nMaxWidth); break; case DLGSCRN_MAX_HLESS: ConfigureParams.Screen.nMaxHeight = VDI_Limit(ConfigureParams.Screen.nMaxHeight - MAX_SIZE_STEP, MAX_SIZE_STEP, MIN_VDI_HEIGHT, deskh); sprintf(sMaxHeight, "%4i", ConfigureParams.Screen.nMaxHeight); break; case DLGSCRN_MAX_HMORE: ConfigureParams.Screen.nMaxHeight = VDI_Limit(ConfigureParams.Screen.nMaxHeight + MAX_SIZE_STEP, MAX_SIZE_STEP, MIN_VDI_HEIGHT, deskh); sprintf(sMaxHeight, "%4i", ConfigureParams.Screen.nMaxHeight); break; case DLGSCRN_CAPTURE: SDL_UpdateRect(sdlscrn, 0,0,0,0); ConfigureParams.Screen.bCrop = (windowdlg[DLGSCRN_CROP].state & SG_SELECTED); ScreenSnapShot_SaveScreen(); break; case DLGSCRN_RECANIM: if (Avi_AreWeRecording()) { /* AVI indexing can take a while for larger files */ Statusbar_AddMessage("Finishing AVI file...", 100); Statusbar_Update(sdlscrn, true); Avi_StopRecording(); windowdlg[DLGSCRN_RECANIM].txt = RECORD_START; Statusbar_AddMessage("Emulation paused", 100); Statusbar_Update(sdlscrn, true); } else { ConfigureParams.Screen.bCrop = (windowdlg[DLGSCRN_CROP].state & SG_SELECTED); Avi_StartRecording ( ConfigureParams.Video.AviRecordFile , ConfigureParams.Screen.bCrop , ConfigureParams.Video.AviRecordFps == 0 ? ClocksTimings_GetVBLPerSec ( ConfigureParams.System.nMachineType , nScreenRefreshRate ) : (Uint32)ConfigureParams.Video.AviRecordFps << CLOCKS_TIMINGS_SHIFT_VBL , 1 << CLOCKS_TIMINGS_SHIFT_VBL , ConfigureParams.Video.AviRecordVcodec ); windowdlg[DLGSCRN_RECANIM].txt = RECORD_STOP; } break; } } while (but != DLGSCRN_EXIT_WINDOW && but != SDLGUI_QUIT && but != SDLGUI_ERROR && !bQuitProgram); /* Read new values from dialog: */ ConfigureParams.Screen.bFullScreen = (windowdlg[DLGSCRN_FULLSCRN].state & SG_SELECTED); ConfigureParams.Screen.bKeepResolution = (windowdlg[DLGSCRN_KEEP_RES].state & SG_SELECTED); ConfigureParams.Screen.bKeepResolutionST = (windowdlg[DLGSCRN_KEEP_RES_ST].state & SG_SELECTED); ConfigureParams.Screen.bShowStatusbar = false; ConfigureParams.Screen.bShowDriveLed = false; if (windowdlg[DLGSCRN_STATUSBAR].state & SG_SELECTED) ConfigureParams.Screen.bShowStatusbar = true; else if (windowdlg[DLGSCRN_DRIVELED].state & SG_SELECTED) ConfigureParams.Screen.bShowDriveLed = true; for (i = DLGSCRN_SKIP0; i <= DLGSCRN_SKIP4; i++) { if (windowdlg[i].state & SG_SELECTED) { ConfigureParams.Screen.nFrameSkips = skip_frames[i-DLGSCRN_SKIP0]; break; } } ConfigureParams.Screen.bCrop = (windowdlg[DLGSCRN_CROP].state & SG_SELECTED); }
/** * Show and process the "Device" dialog. */ void Dialog_DeviceDlg(void) { int but; SDLGui_CenterDlg(devicedlg); /* Set up dialog from actual values: */ if (ConfigureParams.Printer.bPrinterConnected) devicedlg[DEVDLG_PRNENABLE].state |= SG_SELECTED; else devicedlg[DEVDLG_PRNENABLE].state &= ~SG_SELECTED; File_ShrinkName(dlgPrinterName, ConfigureParams.Printer.szPrintToFileName, devicedlg[DEVDLG_PRNFILENAME].w); if (ConfigureParams.RS232.bEnableRS232) devicedlg[DEVDLG_RS232ENABLE].state |= SG_SELECTED; else devicedlg[DEVDLG_RS232ENABLE].state &= ~SG_SELECTED; File_ShrinkName(dlgRs232OutName, ConfigureParams.RS232.szOutFileName, devicedlg[DEVDLG_RS232OUTNAME].w); File_ShrinkName(dlgRs232InName, ConfigureParams.RS232.szInFileName, devicedlg[DEVDLG_RS232INNAME].w); if (ConfigureParams.Midi.bEnableMidi) devicedlg[DEVDLG_MIDIENABLE].state |= SG_SELECTED; else devicedlg[DEVDLG_MIDIENABLE].state &= ~SG_SELECTED; File_ShrinkName(dlgMidiInName, ConfigureParams.Midi.sMidiInFileName, devicedlg[DEVDLG_MIDIINNAME].w); File_ShrinkName(dlgMidiOutName, ConfigureParams.Midi.sMidiOutFileName, devicedlg[DEVDLG_MIDIOUTNAME].w); /* The devices dialog main loop */ do { but = SDLGui_DoDialog(devicedlg, NULL); switch(but) { case DEVDLG_PRNBROWSE: /* Choose a new printer file */ SDLGui_FileConfSelect(dlgPrinterName, ConfigureParams.Printer.szPrintToFileName, devicedlg[DEVDLG_PRNFILENAME].w, true); break; case DEVDLG_RS232OUTBROWSE: /* Choose a new RS232 output file */ SDLGui_FileConfSelect(dlgRs232OutName, ConfigureParams.RS232.szOutFileName, devicedlg[DEVDLG_RS232OUTNAME].w, true); break; case DEVDLG_RS232INBROWSE: /* Choose a new RS232 input file */ SDLGui_FileConfSelect(dlgRs232InName, ConfigureParams.RS232.szInFileName, devicedlg[DEVDLG_RS232INNAME].w, true); break; case DEVDLG_MIDIINBROWSE: /* Choose a new MIDI file */ SDLGui_FileConfSelect(dlgMidiInName, ConfigureParams.Midi.sMidiInFileName, devicedlg[DEVDLG_MIDIINNAME].w, true); break; case DEVDLG_MIDIOUTBROWSE: /* Choose a new MIDI file */ SDLGui_FileConfSelect(dlgMidiOutName, ConfigureParams.Midi.sMidiOutFileName, devicedlg[DEVDLG_MIDIOUTNAME].w, true); break; } } while (but != DEVDLG_EXIT && but != SDLGUI_QUIT && but != SDLGUI_ERROR && !bQuitProgram); /* Read values from dialog */ ConfigureParams.Printer.bPrinterConnected = (devicedlg[DEVDLG_PRNENABLE].state & SG_SELECTED); ConfigureParams.RS232.bEnableRS232 = (devicedlg[DEVDLG_RS232ENABLE].state & SG_SELECTED); ConfigureParams.Midi.bEnableMidi = (devicedlg[DEVDLG_MIDIENABLE].state & SG_SELECTED); }
/** * Show and process the hard disk dialog. */ void DlgHardDisk_Main(void) { int but; char dlgname_gdos[64], dlgname_acsi[64], dlgname_ide[64]; SDLGui_CenterDlg(diskdlg); /* Set up dialog to actual values: */ /* Boot from harddisk? */ if (ConfigureParams.HardDisk.bBootFromHardDisk) diskdlg[DISKDLG_BOOTHD].state |= SG_SELECTED; else diskdlg[DISKDLG_BOOTHD].state &= ~SG_SELECTED; /* ACSI hard disk image: */ if (ConfigureParams.HardDisk.bUseHardDiskImage) File_ShrinkName(dlgname_acsi, ConfigureParams.HardDisk.szHardDiskImage, diskdlg[DISKDLG_ACSINAME].w); else dlgname_acsi[0] = '\0'; diskdlg[DISKDLG_ACSINAME].txt = dlgname_acsi; /* IDE hard disk image: */ if (ConfigureParams.HardDisk.bUseIdeHardDiskImage) File_ShrinkName(dlgname_ide, ConfigureParams.HardDisk.szIdeHardDiskImage, diskdlg[DISKDLG_IDENAME].w); else dlgname_ide[0] = '\0'; diskdlg[DISKDLG_IDENAME].txt = dlgname_ide; /* GEMDOS hard disk directory: */ if (ConfigureParams.HardDisk.bUseHardDiskDirectories) File_ShrinkName(dlgname_gdos, ConfigureParams.HardDisk.szHardDiskDirectories[0], diskdlg[DISKDLG_GEMDOSNAME].w); else dlgname_gdos[0] = '\0'; diskdlg[DISKDLG_GEMDOSNAME].txt = dlgname_gdos; /* Draw and process the dialog */ do { but = SDLGui_DoDialog(diskdlg, NULL); switch (but) { case DISKDLG_ACSIEJECT: ConfigureParams.HardDisk.bUseHardDiskImage = FALSE; dlgname_acsi[0] = '\0'; break; case DISKDLG_ACSIBROWSE: if (SDLGui_FileConfSelect(dlgname_acsi, ConfigureParams.HardDisk.szHardDiskImage, diskdlg[DISKDLG_ACSINAME].w, FALSE)) ConfigureParams.HardDisk.bUseHardDiskImage = TRUE; break; case DISKDLG_IDEEJECT: ConfigureParams.HardDisk.bUseIdeHardDiskImage = FALSE; dlgname_ide[0] = '\0'; break; case DISKDLG_IDEBROWSE: if (SDLGui_FileConfSelect(dlgname_ide, ConfigureParams.HardDisk.szIdeHardDiskImage, diskdlg[DISKDLG_IDENAME].w, FALSE)) ConfigureParams.HardDisk.bUseIdeHardDiskImage = TRUE; break; case DISKDLG_GEMDOSEJECT: ConfigureParams.HardDisk.bUseHardDiskDirectories = FALSE; dlgname_gdos[0] = '\0'; break; case DISKDLG_GEMDOSBROWSE: if (DlgDisk_BrowseDir(dlgname_gdos, ConfigureParams.HardDisk.szHardDiskDirectories[0], diskdlg[DISKDLG_GEMDOSNAME].w)) ConfigureParams.HardDisk.bUseHardDiskDirectories = TRUE; break; } } while (but != DISKDLG_EXIT && but != SDLGUI_QUIT && but != SDLGUI_ERROR && !bQuitProgram); /* Read values from dialog: */ ConfigureParams.HardDisk.bBootFromHardDisk = (diskdlg[DISKDLG_BOOTHD].state & SG_SELECTED); }
/** * This functions sets up the actual font and then displays the main dialog. */ int Dialog_MainDlg(bool *bReset, bool *bLoadedSnapshot) { int retbut=0; bool bOldMouseVisibility; int nOldMouseX, nOldMouseY; char *psNewCfg; *bReset = false; *bLoadedSnapshot = false; if (SDLGui_SetScreen()) return false; SDLGui_CenterDlg(maindlg); maindlg[MAINDLG_NORESET].state |= SG_SELECTED; maindlg[MAINDLG_RESET].state &= ~SG_SELECTED; // prefs = new Prefs(ThePrefs); do { retbut = SDLGui_DoDialog(maindlg, NULL); switch (retbut) { case MAINDLG_ABOUT: Dialog_AboutDlg(); break; case MAINDLG_FLOPPYS: DlgFloppy_Main(); break; case MAINDLG_VIDEO: Dialog_VideoDlg(); break; case MAINDLG_MISC: Dialog_MiscDlg(); break; case MAINDLG_JOYSTICK: Dialog_JoyDlg(); break; case MAINDLG_SOUND: Dialog_SoundDlg(); break; case MAINDLG_LOADCFG: /* strcpy(sConfigFileName, ".frodorc"); psNewCfg = SDLGui_FileSelect(sConfigFileName, NULL, false); if (psNewCfg) { prefs->Load(psNewCfg); TheC64->NewPrefs(prefs); ThePrefs = *prefs; strcpy(sConfigFileName, psNewCfg); free(psNewCfg); } */ break; case MAINDLG_SAVECFG: /* strcpy(sConfigFileName, ".frodorc"); psNewCfg = SDLGui_FileSelect(sConfigFileName, NULL, true); if (psNewCfg) { strcpy(sConfigFileName, psNewCfg); prefs->Save(sConfigFileName); free(psNewCfg); } */ break; case MAINDLG_SNAPSHOT: Dialog_SnapshotDlg(); break; case MAINDLG_QUIT: bQuitProgram = true; break; } /* if(ThePrefs!=*prefs){ printf("pref change \n"); TheC64->NewPrefs(prefs); ThePrefs = *prefs; } */ gui_poll_events(); } while (retbut != MAINDLG_OK && retbut != MAINDLG_CANCEL && retbut != SDLGUI_QUIT && retbut != SDLGUI_ERROR && !bQuitProgram); if (maindlg[MAINDLG_RESET].state & SG_SELECTED) *bReset = true; //delete prefs; return (retbut == MAINDLG_OK); }
/** * Show and process the memory dialog. * @return true if a memory snapshot has been loaded, false otherwise */ bool Dialog_MemDlg(void) { int32_t i; int32_t but; SDLGui_CenterDlg(memorydlg); for (i = DLGMEMC_512KB; i <= DLGMEMC_8MB; i++) { memorydlg[i].state &= ~SG_SELECTED; } for (i = DLGMEMB_512KB; i <= DLGMEMB_1MB; i++) { memorydlg[i].state &= ~SG_SELECTED; } for (i = DLGMEMF_512KB; i <= DLGMEMF_8MB; i++) { memorydlg[i].state &= ~SG_SELECTED; } printf("chip:%x fast:%x bogo:%x \n",currprefs.chipmem_size,currprefs.fastmem_size,currprefs.bogomem_size); switch (currprefs.chipmem_size){ case 0x80000:memorydlg[DLGMEMC_512KB].state |= SG_SELECTED; break; case 0x100000:memorydlg[DLGMEMC_1MB].state |= SG_SELECTED; break; case 0x200000:memorydlg[DLGMEMC_2MB].state |= SG_SELECTED; break; case 0x300000:memorydlg[DLGMEMC_3MB].state |= SG_SELECTED; break; case 0x400000:memorydlg[DLGMEMC_4MB].state |= SG_SELECTED; break; case 0x500000:memorydlg[DLGMEMC_5MB].state |= SG_SELECTED; break; case 0x600000:memorydlg[DLGMEMC_6MB].state |= SG_SELECTED; break; case 0x700000:memorydlg[DLGMEMC_7MB].state |= SG_SELECTED; break; default: memorydlg[DLGMEMC_8MB].state |= SG_SELECTED; break; } switch (currprefs.fastmem_size){ case 0: break; case 0x80000:memorydlg[DLGMEMF_512KB].state |= SG_SELECTED; break; case 0x100000:memorydlg[DLGMEMF_1MB].state |= SG_SELECTED; break; case 0x200000:memorydlg[DLGMEMF_2MB].state |= SG_SELECTED; break; case 0x300000:memorydlg[DLGMEMF_3MB].state |= SG_SELECTED; break; case 0x400000:memorydlg[DLGMEMF_4MB].state |= SG_SELECTED; break; case 0x500000:memorydlg[DLGMEMF_5MB].state |= SG_SELECTED; break; case 0x600000:memorydlg[DLGMEMF_6MB].state |= SG_SELECTED; break; case 0x700000:memorydlg[DLGMEMF_7MB].state |= SG_SELECTED; break; default: memorydlg[DLGMEMF_8MB].state |= SG_SELECTED; break; } switch (currprefs.bogomem_size){ case 0x80000:memorydlg[DLGMEMB_512KB].state |= SG_SELECTED; break; default:memorydlg[DLGMEMB_1MB].state |= SG_SELECTED; break; } do { but = SDLGui_DoDialog(memorydlg, NULL); switch (but) { } gui_poll_events(); } while (but != DLGMEM_EXIT && but != SDLGUI_QUIT && but != SDLGUI_ERROR && !bQuitProgram ); for (i = DLGMEMC_512KB; i <= DLGMEMC_8MB; i++) { if(memorydlg[i].state & SG_SELECTED){ changed_prefs.chipmem_size=chipm[i-DLGMEMC_512KB]; if (currprefs.fastmem_size != 0 && changed_prefs.chipmem_size > 0x200000) changed_prefs.chipmem_size=0x200000; if(changed_prefs.chipmem_size!=currprefs.chipmem_size)memory_reset(); break; } } for (i = DLGMEMB_512KB; i <= DLGMEMB_1MB; i++) { if(memorydlg[i].state & SG_SELECTED){ changed_prefs.bogomem_size=chipm[i-DLGMEMB_512KB]; if(changed_prefs.bogomem_size!=currprefs.bogomem_size)memory_reset(); break; } } for (i = DLGMEMF_512KB; i <= DLGMEMF_8MB; i++) { if(memorydlg[i].state & SG_SELECTED){ changed_prefs.fastmem_size=chipm[i-DLGMEMF_512KB]; if(changed_prefs.fastmem_size!=currprefs.fastmem_size){ if (changed_prefs.fastmem_size > 0 && currprefs.chipmem_size > 0x200000) changed_prefs.chipmem_size = 0x200000; expamem_reset(); memory_reset(); } break; } } return false; }