--- uae/src/tui.c 2018/04/24 16:38:39 1.1.1.1 +++ uae/src/tui.c 2018/04/24 16:40:05 1.1.1.3 @@ -15,26 +15,27 @@ #include "config.h" #include "options.h" -#include "os.h" +#include "threaddep/penguin.h" +#include "uae.h" +#include "gensound.h" +#include "joystick.h" +#include "keybuf.h" #include "autoconf.h" +#include "xwin.h" #include "tui.h" #include "gui.h" #include "memory.h" -char *screenmodes[] = { "320x200", "320x240", "320x400", "640x480", "800x600" }; -char *colormodes[] = { "256 colors", "32768 colors", "65536 colors", - "256 colors dithered", "16 colors dithered", "16 million colors" }; +#define MAX_MENU_HEIGHT 15 +#define OPTION_COLUMN 3 +#define MENU_COL_OFFSET -2 -int quit_program; - -char mountvol[256] = "\0"; -char mountdir[256] = "\0"; int mountok=0; void gui_led(int led, int on) { } -void gui_filename(int num, char *name) +void gui_filename(int num, const char *name) { } static void getline(char *p) @@ -44,111 +45,110 @@ void gui_handle_events(void) { } -static void save_options(FILE *f) +static void save_settings (void) { - /* We only get here if allow_save is true, so... */ - fprintf(f, "-o\n"); - if (use_debugger) - fprintf(f, "-D\n"); - fprintf(f, "-r %s\n", romfile); - fprintf(f, "-0 %s\n", df0); - fprintf(f, "-1 %s\n", df1); - fprintf(f, "-2 %s\n", df2); - fprintf(f, "-3 %s\n", df3); - fprintf(f, "-p %s\n", prtname); - fprintf(f, "-S %d\n", produce_sound); - if (fake_joystick) - fprintf(f, "-J\n"); - fprintf(f, "-l %s\n", (keyboard_lang == KBD_LANG_DE ? "de" - : keyboard_lang == KBD_LANG_US ? "us" - : keyboard_lang == KBD_LANG_SE ? "se" - : keyboard_lang == KBD_LANG_FR ? "fr" - : keyboard_lang == KBD_LANG_IT ? "it" - : "FOO")); - fprintf(f, "-f %d\n", framerate); - fprintf(f, "-d %d\n", screen_res); - if (correct_aspect) - fprintf(f, "-C\n"); - fprintf(f, "-H %d\n", color_mode); - if (fastmem_size > 0) - fprintf(f, "-F %d\n", fastmem_size / 0x100000); - if (bogomem_size > 0) - fprintf(f, "-s %d\n", bogomem_size / 0x40000); - fprintf(f, "-c %d\n", chipmem_size / 0x80000); - if (!automount_uaedev) - fprintf(f, "-a\n"); - fprintf(f, "-B %d\n", sound_desired_bsiz); - fprintf(f, "-b %d\n", sound_desired_bits); - fprintf(f, "-R %d\n", sound_desired_freq); - - write_filesys_config(f); + FILE *f; + tui_backup_optionsfile (); + f = fopen (optionsfile, "w"); + if (f == NULL) { + fprintf(stderr, "Error saving options file!\n"); + return; + } + save_options (f); + fclose (f); } void gui_exit() { - if (allow_save) { - if (tui_backup_optionsfile() == 0) { - FILE *f = fopen(optionsfile, "w"); - if (f == NULL) { - fprintf(stderr, "Error saving options file!\n"); - return; - } - save_options(f); - fclose(f); - } - } } -static const char *mainmenu[] = { - "D - Disk settings", - "V - Video settings", - "M - Memory settings", - "H - Hard disk settings", - "S - Sound settings", - "O - Other settings", - NULL +static struct bstring mainmenu[] = { + { "UAE configuration", 0 }, + { "_Disk settings", 'D' }, + { "_Video settings", 'V' }, + { "_Memory settings", 'M' }, + { "_Hard disk settings", 'H' }, + { "_Sound settings", 'S' }, + { "_Other settings", 'O' }, + { "S_ave settings", 'A' }, + { "_Run UAE", 'R' }, + { NULL, -3 } +}; + +static struct bstring mainmenu2[] = { + { "UAE configuration", 0 }, + { "_Disk settings", 'D' }, +/* { "_Video settings", 'V' }, + { "_Memory settings", 'M' }, + { "_Hard disk settings", 'H' }, + { "_Sound settings", 'S' }, */ + { "_Other settings", 'O' }, + { "S_ave settings", 'A' }, + { "R_eset UAE", 'E' }, + { "_Quit UAE", 'Q' }, + { "_Run UAE", 'R' }, + { NULL, -3 } }; -static const char *diskmenu[] = { - "0 - change DF0:", - "1 - change DF1:", - "2 - change DF2:", - "3 - change DF3:", - NULL +static struct bstring diskmenu[] = { + { "Floppy disk settings", 0 }, + { "Change DF_0:", '0' }, + { "Change DF_1:", '1' }, + { "Change DF_2:", '2' }, + { "Change DF_3:", '3' }, + { NULL, -3 } }; -static const char *videomenu[] = { - "1 - Change resolution", - "2 - Change color mode", - "3 - Toggle aspect correction", - "4 - Change framerate", - NULL +static struct bstring videomenu[] = { + { "Video settings", 0 }, + { "Change _width", 'W' }, + { "Change _height", 'H' }, + { "Change _color mode", 'C' }, + { "Select predefined _mode", 'M' }, + { "Toggle _low resolution", 'L' }, + { "Change _X centering", 'X' }, + { "Change _Y centering", 'Y' }, + { "Toggle line _doubling", 'D' }, + { "Toggle _aspect _correction", 'A' }, + { "Change _framerate", 'F' }, + { NULL, -3 } }; -static const char *memmenu[] = { - "1 - Change fastmem size", - "2 - Change chipmem size", - "3 - Change slowmem size", - NULL +static struct bstring memorymenu[] = { + { "Memory settings", 0 }, + { "Change _fastmem size", 'F' }, + { "Change _chipmem size", 'C' }, + { "Change _slowmem size", 'S' }, + { "Select ROM _image", 'I' }, + { NULL, -3 } }; -static const char *soundmenu[] = { - "1 - Change sound emulation", - NULL +static struct bstring soundmenu[] = { + { "Sound settings", 0 }, + { "Change _sound emulation accuracy", 'S' }, + { "Change m_inimum sound buffer size", 'I' }, + { "Change m_aximum sound buffer size", 'A' }, + { "Change number of _bits", 'B' }, + { "Change output _frequency", 'F' }, + { NULL , -3 } }; -static const char *miscmenu[] = { - "1 - Toggle keypad joystick emulation", - "2 - Select ROM image", - NULL +static struct bstring miscmenu[] = { + { "Miscellaneous settings", 0 }, + { "Toggle joystick port _0 emulation", '0' }, + { "Toggle joystick port _1 emulation", '1' }, + { "Set _CPU emulation speed", 'C' }, + { NULL, -3 } }; -static const char *hdmenu[] = { - "1 - Enable/Disable HardDrive file", - "2 - Change Mounted volume name", - "3 - Change Mounted volume path", - "4 - Enable/Disable Mounted volume", - NULL +static struct bstring hdmenu[] = { +/* { "Harddisk/CDROM emulation settings", 0 },*/ + { "Enable/Disable _harddisks/fastmem", 'H' }, + { "_Add a mounted volume", 'A' }, + { "Add a mounted _volume r/o", 'V' }, + { "Add a hard_file", 'F' }, + { "_Delete a mounted volume", 'D' }, + { NULL, -3 } }; static int makemenu(const char **menu, int x, int y) @@ -156,7 +156,7 @@ static int makemenu(const char **menu, i const char **m = menu; int maxlen = 0, count = 0; int w; - + while (*m != NULL) { int l = strlen(*m); if (l > maxlen) @@ -200,224 +200,274 @@ static void print_configuration(void) { char tmp[256]; int y = 5; + int i; + + tui_clrwin(0); + + tui_drawbox(0); + tui_hline(2, 3, tui_cols() - 1); + sprintf(tmp, "UAE %d.%d.%d: The Un*x Amiga Emulator", UAEMAJOR, UAEMINOR, UAEURSAMINOR); + tui_gotoxy((tui_cols() - strlen(tmp))/2, 2); tui_puts(tmp); + strcpy(tmp, "Press RETURN/ENTER to run UAE, ESC to exit"); + tui_gotoxy((tui_cols() - strlen(tmp))/2, tui_lines()); tui_puts(tmp); -/* tui_clrarea(35,4,79,20);*/ - - tui_gotoxy(35, y++); sprintf(tmp, "Disk file DF0: %s", trimfilename(df0, tui_cols() - 50)); tui_puts(tmp); - tui_gotoxy(35, y++); sprintf(tmp, "Disk file DF1: %s", trimfilename(df1, tui_cols() - 50)); tui_puts(tmp); - tui_gotoxy(35, y++); sprintf(tmp, "Disk file DF2: %s", trimfilename(df2, tui_cols() - 50)); tui_puts(tmp); - tui_gotoxy(35, y++); sprintf(tmp, "Disk file DF3: %s", trimfilename(df3, tui_cols() - 50)); tui_puts(tmp); + tui_gotoxy(OPTION_COLUMN, y++); sprintf(tmp, "Disk file DF0: %s", trimfilename(currprefs.df[0], tui_cols() - 20)); tui_puts(tmp); + tui_gotoxy(OPTION_COLUMN, y++); sprintf(tmp, "Disk file DF1: %s", trimfilename(currprefs.df[1], tui_cols() - 20)); tui_puts(tmp); + tui_gotoxy(OPTION_COLUMN, y++); sprintf(tmp, "Disk file DF2: %s", trimfilename(currprefs.df[2], tui_cols() - 20)); tui_puts(tmp); + tui_gotoxy(OPTION_COLUMN, y++); sprintf(tmp, "Disk file DF3: %s", trimfilename(currprefs.df[3], tui_cols() - 20)); tui_puts(tmp); y++; - tui_gotoxy(35, y++); - sprintf(tmp, "VIDEO: %-7s %-19s ",screenmodes[screen_res], colormodes[color_mode]); + tui_gotoxy(OPTION_COLUMN, y++); + sprintf(tmp, "VIDEO: %d:%d%s %s", currprefs.gfx_width, currprefs.gfx_height, + currprefs.gfx_lores ? " (lores)" : "", colormodes[currprefs.color_mode]); tui_puts(tmp); - tui_gotoxy(42, y++); - if (correct_aspect) - tui_puts("Aspect corrected "); - else + tui_gotoxy(OPTION_COLUMN+7, y++); + if (currprefs.gfx_linedbl) + tui_puts("Doubling lines, "); + if (currprefs.gfx_correct_aspect) + tui_puts("Aspect corrected"); + else tui_puts("Not aspect corrected"); - tui_gotoxy(42, y++); + tui_gotoxy(OPTION_COLUMN+7, y++); + if (currprefs.gfx_xcenter) + tui_puts ("X centered"); + if (currprefs.gfx_xcenter == 2) + tui_puts (" (clever)"); + if (currprefs.gfx_ycenter && currprefs.gfx_xcenter) + tui_puts (", "); + if (currprefs.gfx_ycenter) + tui_puts ("Y centered "); + if (currprefs.gfx_ycenter == 2) + tui_puts (" (clever)"); + tui_gotoxy(OPTION_COLUMN+7, y++); tui_puts("drawing every "); - switch(framerate) { + switch(currprefs.framerate) { case 1: break; case 2: tui_puts("2nd "); break; case 3: tui_puts("3rd "); break; - default: sprintf(tmp, "%dth ",framerate); tui_puts(tmp); break; + default: sprintf(tmp, "%dth ",currprefs.framerate); tui_puts(tmp); break; } tui_puts("frame. "); y++; - tui_gotoxy(35, y++); + tui_gotoxy(OPTION_COLUMN, y++); sprintf(tmp, "MEMORY: %4dK chip; %4dK fast; %4dK slow",chipmem_size/1024,fastmem_size/1024,bogomem_size/1024); tui_puts(tmp); - tui_gotoxy(35, y++); + tui_gotoxy(OPTION_COLUMN, y++); sprintf(tmp, "ROM IMAGE: %s", trimfilename(romfile, tui_cols() - 50)); tui_puts(tmp); - tui_gotoxy(35, y++); + tui_gotoxy(OPTION_COLUMN, y++); if (!sound_available) - tui_puts("SOUNDS: Not available"); + tui_puts("SOUND: Not available"); else { - switch (produce_sound) { - case 0: tui_puts("SOUND: 0 (Off) "); break; - case 1: tui_puts("SOUND: 1 (Off, but emulated) "); break; - case 2: tui_puts("SOUND: 2 (On) "); break; + switch (currprefs.produce_sound) { + case 0: tui_puts("SOUND: 0 (Off)"); break; + case 1: tui_puts("SOUND: 1 (Off, but emulated)"); break; + case 2: tui_puts("SOUND: 2 (On)"); break; case 3: tui_puts("SOUND: 3 (On, emulated perfectly)"); break; } + tui_gotoxy(OPTION_COLUMN + 7, y++); + sprintf(tmp, "%d bits at %d Hz", currprefs.sound_bits, currprefs.sound_freq); + tui_puts(tmp); + tui_gotoxy(OPTION_COLUMN + 7, y++); + sprintf(tmp, "Minimum buffer size %d bytes, maximum %d bytes", currprefs.sound_minbsiz, currprefs.sound_maxbsiz); + tui_puts(tmp); } - tui_gotoxy(35,y++); - if(fake_joystick==1) { - tui_puts("JOYSTICK: using keypad emulation"); - } else { - if (joystickpresent) - tui_puts("JOYSTICK: using joystick #0 "); - else - tui_puts("JOYSTICK: no joystick emulation "); - } + tui_gotoxy(OPTION_COLUMN,y++); + tui_puts ("GAME PORT 1: "); tui_puts (gameport_state (0)); + tui_gotoxy(OPTION_COLUMN,y++); + tui_puts ("GAME PORT 2: "); tui_puts (gameport_state (1)); - tui_gotoxy(35,y++); - tui_puts("HARDDISK: "); - if(hardfile_size>16) { - sprintf(tmp, "Current Harddisk file = %d K is", hardfile_size/1024); - tui_puts(tmp); - if (automount_uaedev==1) { - tui_puts(" active"); - } else { - tui_puts(" not active"); - } - } else { - tui_puts("No Harddisk file available "); - } + tui_gotoxy(OPTION_COLUMN,y++); + sprintf(tmp, "HARDDISK: (%s)", currprefs.automount_uaedev ? "enabled" : "disabled"); + tui_puts(tmp); - tui_gotoxy(35,y++); - if(mountok==1) { - sprintf(tmp, "Mounting volume %s at %s",mountvol,mountdir); tui_puts(tmp); + for (i = 0;; i++) { + char buf[256]; + + tui_gotoxy(OPTION_COLUMN+1,y++); + if (sprintf_filesys_unit(buf, i) == -1) + break; + tui_puts(buf); } - tui_refresh(); } -static void HDOptions(void) +static void HDOptions(void) { char *buff; char tmp[256]; - - int w = makemenu(hdmenu, 3, 5); + char mountvol[256]; + char mountdir[256]; + int c = 0; for (;;){ - int c; - + tui_selwin(0); print_configuration(); - tui_refresh(); - tui_selwin(w); - tui_refresh(); - c = tui_getc(); - if (c == 27 || c == 13) - break; - switch(c) { - case '1': - automount_uaedev=!automount_uaedev; break; - case '2': - tui_wgets(mountvol, "Enter mounted volume name", 78); - if(mountvol[strlen(mountvol)-1]==':') { - mountvol[strlen(mountvol)-1]=0; } + + c = tui_menubrowse (hdmenu, MENU_COL_OFFSET, 5, c, MAX_MENU_HEIGHT); + if (c == -1) break; - case '3': - tui_wgets(mountdir, "Enter mounted volume path", 78); + else switch(c) { + case 0: + currprefs.automount_uaedev = !currprefs.automount_uaedev; + break; + case 1: + tui_wgets (mountvol, "Enter mounted volume name", 10); + if (strlen (mountvol) == 0) + break; + if (mountvol[strlen(mountvol)-1]==':') + mountvol[strlen(mountvol)-1] = 0; + tui_wgets (mountdir, "Enter mounted volume path", 78); + add_filesys_unit (mountvol, mountdir, 0, 0, 0, 0); + break; + case 2: + tui_wgets (mountvol, "Enter mounted volume name", 10); + if (strlen (mountvol) == 0) + break; + if(mountvol[strlen (mountvol)-1]==':') + mountvol[strlen (mountvol)-1] = 0; + tui_wgets (mountdir, "Enter mounted volume path", 78); + add_filesys_unit (mountvol, mountdir, 1, 0, 0, 0); + break; + case 3: + buff = tui_filereq("*", "", "Select the hardfile to be mounted"); + if (buff == NULL) + break; + strcpy (mountvol, buff); + tui_wgets (mountdir, "Enter number of sectors per track", 4); + tui_wgets (mountdir + 10, "Enter number of heads", 4); + tui_wgets (mountdir + 20, "Enter number of reserved blocks", 3); + buff = add_filesys_unit (0, mountvol, 1, + atoi (mountdir), atoi (mountdir + 10), + atoi (mountdir + 20)); + if (buff) + tui_errorbox (buff); + break; + case 4: + tui_wgets (mountvol, "Enter number of volume to be removed (0 for UAE0:, etc.)", 2); + if (kill_filesys_unit (atoi (mountvol)) == -1) + tui_errorbox("Volume does not exist"); break; - case '4': mountok=!mountok; break; } } - tui_dlogdie(w); } -static void DiskOptions(void) +static void DiskOptions(void) { - char buf[256], tmp[256]; - int w = makemenu(diskmenu, 3, 5); - + char tmp[256]; + int c = 0; + for (;;) { char *sel; - int c; - + tui_selwin(0); print_configuration(); - tui_refresh(); - tui_selwin(w); - tui_refresh(); - - c = tui_getc(); - if (c == 27 || c == 13) - break; - switch(c) { - case '0': - sel = tui_filereq("*.adf", df0); - if (sel == NULL) - break; - strcpy(df0, sel); - break; - case '1': - sel = tui_filereq("*.adf", df1); - if (sel == NULL) - break; - strcpy(df1, sel); - break; - case '2': - sel = tui_filereq("*.adf", df2); - if (sel == NULL) - break; - strcpy(df2, sel); + + c = tui_menubrowse(diskmenu, MENU_COL_OFFSET, 5, c, MAX_MENU_HEIGHT); + if (c == -1) break; - case '3': - sel = tui_filereq("*.adf", df3); + else switch(c) { + case 0: + case 1: + case 2: + case 3: + sprintf(tmp, "Select a diskfile for DF%d:", c); + sel = tui_filereq("*.adf", currprefs.df[c], tmp); if (sel == NULL) break; - strcpy(df3, sel); + strcpy(currprefs.df[c], sel); break; } } - tui_dlogdie(w); } -static void VideoOptions(void) +static void VideoOptions(void) { char tmp[256]; - int w = makemenu(videomenu, 3, 5); + int c = 0; + for (c = 0; c < 10; c++) + if (videomenu[c].val == 'M') { + if (video_mode_menu == NULL) + videomenu[c].val = -4; + break; + } + + c = 0; for (;;) { - int c; tui_selwin(0); print_configuration(); - tui_refresh(); - tui_selwin(w); - tui_refresh(); - - c = tui_getc(); - if (c == 27 || c == 13) - break; - switch(c) { - case 49: - screen_res++; - if (screen_res > MAX_SCREEN_MODES) - screen_res=0; - break; - case 50: - color_mode++; - if (color_mode > MAX_COLOR_MODES) - color_mode=0; - break; - case 51: - correct_aspect = !correct_aspect; - break; - case 52: - framerate++; - if (framerate > 9) - framerate=1; + + c = tui_menubrowse(videomenu, MENU_COL_OFFSET, 5, c, MAX_MENU_HEIGHT); + if (c == -1) + break; + else switch(c) { + case 0: + tui_wgets(tmp, "Enter new video mode width", 4); + if (atoi (tmp) < 320 || atoi (tmp) > 1600 /* maybe we'll implement SHires */) + tui_errorbox("Insane value for video mode width"); + else + currprefs.gfx_width = atoi (tmp); + break; + case 1: + tui_wgets(tmp, "Enter new video mode height", 4); + if (atoi (tmp) < 200 || atoi (tmp) > 800 /* whatever */) + tui_errorbox("Insane value for video mode height"); + else + currprefs.gfx_height = atoi (tmp); + break; + case 2: + currprefs.color_mode++; + if (currprefs.color_mode > MAX_COLOR_MODES) + currprefs.color_mode=0; + break; + case 3: + c = tui_menubrowse(video_mode_menu, 4, 6, 0, 15); + if (c != -1) + vidmode_menu_selected(c); + c = 3; + break; + case 4: + currprefs.gfx_lores = !currprefs.gfx_lores; + break; + case 5: + currprefs.gfx_xcenter = (currprefs.gfx_xcenter + 1) % 3; + break; + case 6: + currprefs.gfx_ycenter = (currprefs.gfx_ycenter + 1) % 3; + break; + case 7: + currprefs.gfx_linedbl = !currprefs.gfx_linedbl; + break; + case 8: + currprefs.gfx_correct_aspect = !currprefs.gfx_correct_aspect; + break; + case 9: + currprefs.framerate++; + if (currprefs.framerate > 9) + currprefs.framerate=1; break; } } - tui_dlogdie(w); } static void MemoryOptions(void) { - int w = makemenu(memmenu, 3, 5); + char *tmp; + int c = 0; for (;;) { - int c; tui_selwin(0); print_configuration(); - tui_refresh(); - tui_selwin(w); - tui_refresh(); - c = tui_getc(); - if (c == 27 || c == 13) + c = tui_menubrowse(memorymenu, MENU_COL_OFFSET, 5, c, MAX_MENU_HEIGHT); + if (c == -1) break; - switch(c) { - case '1': + else switch(c) { + case 0: if (fastmem_size == 0) fastmem_size = 0x200000; else if (fastmem_size == 0x800000) @@ -425,13 +475,15 @@ static void MemoryOptions(void) else fastmem_size <<= 1; break; - case '2': - if (chipmem_size == 0x200000) + case 1: + if (chipmem_size == 0x800000) chipmem_size = 0x80000; else chipmem_size <<= 1; - break; - case '3': + if (chipmem_size > 0x200000) + fastmem_size = 0; + break; + case 2: if (bogomem_size == 0) bogomem_size = 0x40000; else if (bogomem_size == 0x100000) @@ -439,125 +491,170 @@ static void MemoryOptions(void) else bogomem_size <<= 1; break; - } - + case 3: + tmp = tui_filereq("*.rom", romfile, "Select a ROM image"); + if (tmp != NULL) + strcpy(romfile, tmp); + break; + } } - tui_dlogdie(w); } static void SoundOptions(void) { - int w = makemenu(soundmenu, 3, 5); - + char tmp[256]; + int c = 0; for (;;) { - int c; - tui_selwin(0); print_configuration(); - tui_refresh(); - tui_selwin(w); - tui_refresh(); + c = tui_menubrowse(soundmenu, MENU_COL_OFFSET, 5, c, MAX_MENU_HEIGHT); + if (c == -1) + break; + else switch(c) { + case 0: + currprefs.produce_sound++; + if(currprefs.produce_sound > 3) + currprefs.produce_sound = 0; + break; + + case 1: + tui_wgets(tmp, "Enter new minimum sound buffer size in bytes", 6); + if (atoi (tmp) < 128 || atoi (tmp) > 65536 || atoi (tmp) > currprefs.sound_maxbsiz) + tui_errorbox("Insane value for minimum sound buffer size"); + else + currprefs.sound_minbsiz = atoi (tmp); + break; - c = tui_getc(); - if (c == 27 || c == 13) + case 2: + tui_wgets(tmp, "Enter new maximum sound buffer size in bytes", 6); + if (atoi (tmp) < 128 || atoi (tmp) > 65536 || atoi (tmp) < currprefs.sound_minbsiz) + tui_errorbox("Insane value for maximum sound buffer size"); + else + currprefs.sound_maxbsiz = atoi (tmp); break; - switch(c) { - case '1': - produce_sound++; - if(produce_sound > 3) - produce_sound = 0; + + case 3: + tui_wgets(tmp, "Enter new number of bits", 3); + if (atoi (tmp)!= 8 && atoi (tmp) != 16) + tui_errorbox("Unsupported number of bits"); + else + currprefs.sound_bits = atoi (tmp); break; - } + case 4: + tui_wgets(tmp, "Enter new sound output frequency", 6); + if (atoi (tmp) < 11025 || atoi (tmp) > 44100) + tui_errorbox("Unsupported frequency"); + else + currprefs.sound_freq = atoi (tmp); + break; + } } - tui_dlogdie(w); } static void OtherOptions(void) { - char *tmp; - int w = makemenu(miscmenu, 3, 5); + char tmp[256]; + int c = 0; for (;;) { - int c; - - tui_selwin(0); - print_configuration(); - tui_refresh(); - tui_selwin(w); - tui_refresh(); - - c = tui_getc(); - if (c == 27 || c == 13) - break; - switch(c) { - case '1': - fake_joystick = !fake_joystick; - break; - case '2': - tmp = tui_filereq("*.rom", romfile); - if (tmp != NULL) - strcpy(romfile, tmp); + tui_selwin (0); + print_configuration (); + c = tui_menubrowse (miscmenu, MENU_COL_OFFSET, 5, c, MAX_MENU_HEIGHT); + if (c == -1) { + break; + } else switch(c) { + case 0: + currprefs.fake_joystick = (currprefs.fake_joystick & 0xFF00) + ((currprefs.fake_joystick & 255) + 1) % 6; + if ((currprefs.fake_joystick & 255) == (currprefs.fake_joystick >> 8)) + currprefs.fake_joystick = (currprefs.fake_joystick & 0x00FF) + ((((currprefs.fake_joystick >> 8) - 1) % 6) << 8); + break; + case 1: + currprefs.fake_joystick = (currprefs.fake_joystick & 0x00FF) + ((((currprefs.fake_joystick >> 8) + 1) % 6) << 8); + if ((currprefs.fake_joystick & 255) == (currprefs.fake_joystick >> 8)) + currprefs.fake_joystick = (currprefs.fake_joystick & 0xFF00) + ((currprefs.fake_joystick & 255) - 1) % 6; + break; + case 2: + tui_wgets(tmp, "Enter new CPU emulation speed", 6); + if (atoi (tmp) < 1 || atoi (tmp) > 20) + tui_errorbox("Unsupported CPU emulation speed"); + else + currprefs.m68k_speed = atoi (tmp); break; } } - tui_dlogdie(w); } -int gui_init() +static int do_gui(int mode) { char cwd[1024]; - char tmp[256]; - int mm_win; - + if (getcwd(cwd, 1024) == NULL) return 0; - quit_program = 0; - tui_setup(); - tui_drawbox(0); - tui_hline(2, 3, tui_cols() - 1); - sprintf(tmp, "UAE %d.%d.%d: The Un*x Amiga Emulator", UAEMAJOR, UAEMINOR, UAEURSAMINOR); - tui_gotoxy((tui_cols() - strlen(tmp))/2, 2); tui_puts(tmp); - strcpy(tmp, "Press RETURN/ENTER to run UAE, ESC to exit"); - tui_gotoxy((tui_cols() - strlen(tmp))/2, tui_lines()); tui_puts(tmp); - - mm_win = makemenu(mainmenu, 2, 4); - for (;;) { int c; + tui_selwin(0); print_configuration(); - tui_refresh(); - tui_selwin(mm_win); - tui_refresh(); - c = tui_getc(); - - if (c == 27) { - tui_dlogdie(mm_win); + c = tui_menubrowse(mode == 0 ? mainmenu2 : mainmenu, MENU_COL_OFFSET, 4, 0, MAX_MENU_HEIGHT); + if (c == -1) { tui_shutdown(); - exit(0); - } else if (c == 13) { - break; + return -2; } - - switch(c) { - case 100: DiskOptions(); break; - case 118: VideoOptions(); break; - case 109: MemoryOptions(); break; - case 104: HDOptions(); break; - case 115: SoundOptions(); break; - case 111: OtherOptions(); break; + if (mode == 1) { + if (c == 7) + break; + switch (c) { + case 0: DiskOptions (); break; + case 1: VideoOptions (); break; + case 2: MemoryOptions (); break; + case 3: HDOptions (); break; + case 4: SoundOptions (); break; + case 5: OtherOptions (); break; + case 6: save_settings (); break; + } + } else { + if (c == 5) + break; + switch (c) { + case 0: DiskOptions (); break; + case 1: OtherOptions (); break; + case 2: save_settings (); break; + case 3: uae_reset (); break; + case 4: uae_quit (); break; + } } } - - tui_dlogdie(mm_win); - if(mountok) - add_filesys_unit(mountvol, mountdir, 0); - tui_shutdown(); + chdir (cwd); return 0; } + +int gui_init(void) +{ + return do_gui(1); +} + +void gui_changesettings(void) +{ + struct uae_prefs oldprefs; + oldprefs = currprefs; + + if (do_gui(0) == -2) + uae_quit (); + else { + changed_prefs = currprefs; + currprefs = oldprefs; + currprefs.fake_joystick = changed_prefs.fake_joystick; + joystick_setting_changed (); + } +} + +int gui_update(void) +{ + return 0; +}