Annotation of uae/src/tui.c, revision 1.1.1.4

1.1       root        1:  /*
                      2:   * UAE - The Un*x Amiga Emulator
                      3:   *
                      4:   * Text-based user interface
                      5:   * Sie haben es sich verdient!
                      6:   *
                      7:   * Copyright 1996 Tim Gunn, Bernd Schmidt
                      8:   */
                      9: 
                     10: #include "sysconfig.h"
                     11: #include "sysdeps.h"
                     12: 
                     13: #include <stdio.h>
                     14: #include <ctype.h>
                     15: 
                     16: #include "config.h"
                     17: #include "options.h"
1.1.1.3   root       18: #include "threaddep/penguin.h"
1.1.1.2   root       19: #include "uae.h"
1.1.1.3   root       20: #include "gensound.h"
                     21: #include "joystick.h"
                     22: #include "keybuf.h"
1.1       root       23: #include "autoconf.h"
1.1.1.3   root       24: #include "xwin.h"
1.1       root       25: #include "tui.h"
                     26: #include "gui.h"
                     27: #include "memory.h"
                     28: 
1.1.1.3   root       29: #define MAX_MENU_HEIGHT 15
                     30: #define OPTION_COLUMN 3
                     31: #define MENU_COL_OFFSET -2
1.1       root       32: 
                     33: int mountok=0;
                     34: 
1.1.1.4 ! root       35: void gui_led (int led, int on)
1.1       root       36: {
                     37: }
1.1.1.4 ! root       38: void gui_filename (int num, const char *name)
1.1       root       39: {
                     40: }
1.1.1.4 ! root       41: static void getline (char *p)
1.1       root       42: {
                     43: }
1.1.1.4 ! root       44: void gui_handle_events (void)
1.1       root       45: {
                     46: }
                     47: 
1.1.1.3   root       48: static void save_settings (void)
1.1       root       49: {
1.1.1.3   root       50:     FILE *f;
                     51:     tui_backup_optionsfile ();
                     52:     f = fopen (optionsfile, "w");
                     53:     if (f == NULL) {
1.1.1.4 ! root       54:        fprintf (stderr, "Error saving options file!\n");
1.1.1.3   root       55:        return;
                     56:     }
                     57:     save_options (f);
                     58:     fclose (f);
1.1       root       59: }
                     60: 
                     61: void gui_exit()
                     62: {
                     63: }
                     64: 
1.1.1.2   root       65: static struct bstring mainmenu[] = {
1.1.1.3   root       66:     { "UAE configuration", 0 },
1.1.1.2   root       67:     { "_Disk settings", 'D' },
                     68:     { "_Video settings", 'V' },
                     69:     { "_Memory settings", 'M' },
                     70:     { "_Hard disk settings", 'H' },
                     71:     { "_Sound settings", 'S' },
                     72:     { "_Other settings", 'O' },
1.1.1.3   root       73:     { "S_ave settings", 'A' },
1.1.1.2   root       74:     { "_Run UAE", 'R' },
                     75:     { NULL, -3 }
                     76: };
                     77: 
1.1.1.3   root       78: static struct bstring mainmenu2[] = {
                     79:     { "UAE configuration", 0 },
                     80:     { "_Disk settings", 'D' },
                     81: /*    { "_Video settings", 'V' },
                     82:     { "_Memory settings", 'M' },
                     83:     { "_Hard disk settings", 'H' },
                     84:     { "_Sound settings", 'S' }, */
                     85:     { "_Other settings", 'O' },
                     86:     { "S_ave settings", 'A' },
                     87:     { "R_eset UAE", 'E' },
                     88:     { "_Quit UAE", 'Q' },
                     89:     { "_Run UAE", 'R' },
                     90:     { NULL, -3 }
1.1       root       91: };
                     92: 
1.1.1.3   root       93: static struct bstring diskmenu[] = {
                     94:     { "Floppy disk settings", 0 },
1.1.1.2   root       95:     { "Change DF_0:", '0' },
                     96:     { "Change DF_1:", '1' },
                     97:     { "Change DF_2:", '2' },
                     98:     { "Change DF_3:", '3' },
                     99:     { NULL, -3 }
1.1       root      100: };
                    101: 
1.1.1.3   root      102: static struct bstring videomenu[] = {
                    103:     { "Video settings", 0 },
1.1.1.2   root      104:     { "Change _width", 'W' },
                    105:     { "Change _height", 'H' },
1.1.1.3   root      106:     { "Change _color mode", 'C' },
                    107:     { "Select predefined _mode", 'M' },
1.1.1.2   root      108:     { "Toggle _low resolution", 'L' },
                    109:     { "Change _X centering", 'X' },
1.1.1.3   root      110:     { "Change _Y centering", 'Y' },
1.1.1.2   root      111:     { "Toggle line _doubling", 'D' },
                    112:     { "Toggle _aspect _correction", 'A' },
                    113:     { "Change _framerate", 'F' },
                    114:     { NULL, -3 }
1.1       root      115: };
                    116: 
1.1.1.3   root      117: static struct bstring memorymenu[] = {
                    118:     { "Memory settings", 0 },
1.1.1.2   root      119:     { "Change _fastmem size", 'F' },
                    120:     { "Change _chipmem size", 'C' },
                    121:     { "Change _slowmem size", 'S' },
1.1.1.3   root      122:     { "Select ROM _image", 'I' },
1.1.1.2   root      123:     { NULL, -3 }
1.1       root      124: };
                    125: 
1.1.1.3   root      126: static struct bstring soundmenu[] = {
                    127:     { "Sound settings", 0 },
                    128:     { "Change _sound emulation accuracy", 'S' },
                    129:     { "Change m_inimum sound buffer size", 'I' },
                    130:     { "Change m_aximum sound buffer size", 'A' },
                    131:     { "Change number of _bits", 'B' },
                    132:     { "Change output _frequency", 'F' },
1.1.1.2   root      133:     { NULL , -3 }
1.1       root      134: };
                    135: 
1.1.1.3   root      136: static struct bstring miscmenu[] = {
                    137:     { "Miscellaneous settings", 0 },
                    138:     { "Toggle joystick port _0 emulation", '0' },
                    139:     { "Toggle joystick port _1 emulation", '1' },
                    140:     { "Set _CPU emulation speed", 'C' },
1.1.1.2   root      141:     { NULL, -3 }
1.1       root      142: };
                    143: 
1.1.1.2   root      144: static struct bstring hdmenu[] = {
1.1.1.3   root      145: /*    { "Harddisk/CDROM emulation settings", 0 },*/
                    146:     { "Enable/Disable _harddisks/fastmem", 'H' },
                    147:     { "_Add a mounted volume", 'A' },
                    148:     { "Add a mounted _volume r/o", 'V' },
                    149:     { "Add a hard_file", 'F' },
                    150:     { "_Delete a mounted volume", 'D' },
1.1.1.2   root      151:     { NULL, -3 }
1.1       root      152: };
                    153: 
1.1.1.4 ! root      154: static int makemenu (const char **menu, int x, int y)
1.1       root      155: {
                    156:     const char **m = menu;
                    157:     int maxlen = 0, count = 0;
                    158:     int w;
1.1.1.3   root      159: 
1.1       root      160:     while (*m != NULL) {
1.1.1.4 ! root      161:        int l = strlen (*m);
1.1       root      162:        if (l > maxlen)
                    163:            maxlen = l;
                    164:        m++; count++;
                    165:     }
1.1.1.4 ! root      166:     w = tui_dlog (x, y, x + maxlen + 2, y + count + 1);
        !           167:     tui_drawbox (w);
        !           168:     tui_selwin (w);
1.1       root      169:     y = 2;
                    170:     while (*menu != NULL) {
1.1.1.4 ! root      171:        tui_gotoxy (2, y++);
        !           172:        tui_puts (*menu++);
1.1       root      173:     }
1.1.1.4 ! root      174:     tui_selwin (0);
1.1       root      175:     return w;
                    176: }
                    177: 
                    178: static char tmpbuf[256];
                    179: 
                    180: static char *trimfilename(char *s, size_t n)
                    181: {
                    182:     size_t i;
                    183:     if (n > 250)
                    184:        n = 250;
1.1.1.4 ! root      185:     if (strlen (s) == 0)
        !           186:        strcpy (tmpbuf, "none");
        !           187:     else if (strlen (s) < n)
        !           188:        strcpy (tmpbuf, s);
1.1       root      189:     else {
                    190:        tmpbuf[0] = '^';
1.1.1.4 ! root      191:        strcpy (tmpbuf + 1, s + strlen (s) - n + 2);
1.1       root      192:     }
                    193:     for (i = strlen(tmpbuf); i < n; i++)
                    194:        tmpbuf[i] = ' ';
                    195:     tmpbuf[i] = 0;
                    196:     return tmpbuf;
                    197: }
                    198: 
1.1.1.4 ! root      199: static void print_configuration (void)
1.1       root      200: {
                    201:     char tmp[256];
                    202:     int y = 5;
1.1.1.2   root      203:     int i;
1.1       root      204: 
1.1.1.4 ! root      205:     tui_clrwin (0);
1.1.1.3   root      206: 
1.1.1.4 ! root      207:     tui_drawbox (0);
        !           208:     tui_hline (2, 3, tui_cols () - 1);
        !           209:     sprintf (tmp, "UAE %d.%d.%d: The Un*x Amiga Emulator", UAEMAJOR, UAEMINOR, UAESUBREV);
        !           210:     tui_gotoxy ((tui_cols () - strlen(tmp))/2, 2); tui_puts (tmp);
1.1.1.2   root      211:     strcpy(tmp, "Press RETURN/ENTER to run UAE, ESC to exit");
1.1.1.4 ! root      212:     tui_gotoxy ((tui_cols () - strlen(tmp))/2, tui_lines ()); tui_puts (tmp);
1.1.1.2   root      213: 
1.1.1.4 ! root      214:     tui_gotoxy (OPTION_COLUMN, y++); sprintf (tmp, "Disk file DF0: %s", trimfilename (currprefs.df[0], tui_cols () - 20)); tui_puts (tmp);
        !           215:     tui_gotoxy (OPTION_COLUMN, y++); sprintf (tmp, "Disk file DF1: %s", trimfilename (currprefs.df[1], tui_cols () - 20)); tui_puts (tmp);
        !           216:     tui_gotoxy (OPTION_COLUMN, y++); sprintf (tmp, "Disk file DF2: %s", trimfilename (currprefs.df[2], tui_cols () - 20)); tui_puts (tmp);
        !           217:     tui_gotoxy (OPTION_COLUMN, y++); sprintf (tmp, "Disk file DF3: %s", trimfilename (currprefs.df[3], tui_cols () - 20)); tui_puts (tmp);
1.1       root      218:     y++;
1.1.1.4 ! root      219:     tui_gotoxy (OPTION_COLUMN, y++);
        !           220:     sprintf (tmp, "VIDEO: %d:%d%s %s", currprefs.gfx_width, currprefs.gfx_height,
1.1.1.3   root      221:            currprefs.gfx_lores ? " (lores)" : "", colormodes[currprefs.color_mode]);
1.1.1.4 ! root      222:     tui_puts (tmp);
1.1       root      223: 
1.1.1.4 ! root      224:     tui_gotoxy (OPTION_COLUMN+7, y++);
1.1.1.3   root      225:     if (currprefs.gfx_linedbl)
1.1.1.4 ! root      226:        tui_puts ("Doubling lines, ");
1.1.1.3   root      227:     if (currprefs.gfx_correct_aspect)
1.1.1.4 ! root      228:        tui_puts ("Aspect corrected");
1.1.1.3   root      229:     else
1.1.1.4 ! root      230:        tui_puts ("Not aspect corrected");
        !           231:     tui_gotoxy (OPTION_COLUMN+7, y++);
1.1.1.3   root      232:     if (currprefs.gfx_xcenter)
1.1.1.2   root      233:        tui_puts ("X centered");
1.1.1.3   root      234:     if (currprefs.gfx_xcenter == 2)
1.1.1.2   root      235:        tui_puts (" (clever)");
1.1.1.3   root      236:     if (currprefs.gfx_ycenter && currprefs.gfx_xcenter)
1.1.1.2   root      237:        tui_puts (", ");
1.1.1.3   root      238:     if (currprefs.gfx_ycenter)
1.1.1.2   root      239:        tui_puts ("Y centered ");
1.1.1.3   root      240:     if (currprefs.gfx_ycenter == 2)
1.1.1.2   root      241:        tui_puts (" (clever)");
1.1.1.4 ! root      242:     tui_gotoxy (OPTION_COLUMN+7, y++);
        !           243:     tui_puts ("drawing every ");
        !           244:     switch (currprefs.framerate) {
1.1       root      245:      case 1: break;
1.1.1.4 ! root      246:      case 2: tui_puts ("2nd "); break;
        !           247:      case 3: tui_puts ("3rd "); break;
        !           248:      default: sprintf (tmp, "%dth ",currprefs.framerate); tui_puts (tmp); break;
1.1       root      249:     }
1.1.1.4 ! root      250:     tui_puts ("frame.    ");
1.1       root      251:     y++;
1.1.1.4 ! root      252:     tui_gotoxy (OPTION_COLUMN, y++);
        !           253:     sprintf (tmp, "MEMORY: %4dK chip; %4dK fast; %4dK slow",chipmem_size/1024,fastmem_size/1024,bogomem_size/1024);
        !           254:     tui_puts (tmp);
        !           255: 
        !           256:     tui_gotoxy (OPTION_COLUMN, y++);
        !           257:     sprintf (tmp, "ROM IMAGE: %s", trimfilename(romfile, tui_cols () - 50));
        !           258:     tui_puts (tmp);
        !           259:     tui_gotoxy (OPTION_COLUMN, y++);
1.1       root      260:     if (!sound_available)
1.1.1.4 ! root      261:        tui_puts ("SOUND: Not available");
1.1       root      262:     else {
1.1.1.3   root      263:        switch (currprefs.produce_sound) {
1.1.1.4 ! root      264:         case 0: tui_puts ("SOUND: 0 (Off)"); break;
        !           265:         case 1: tui_puts ("SOUND: 1 (Off, but emulated)"); break;
        !           266:         case 2: tui_puts ("SOUND: 2 (On)"); break;
        !           267:         case 3: tui_puts ("SOUND: 3 (On, emulated perfectly)"); break;
1.1       root      268:        }
1.1.1.4 ! root      269:        tui_gotoxy (OPTION_COLUMN + 7, y++);
        !           270:        sprintf (tmp, "%d bits at %d Hz", currprefs.sound_bits, currprefs.sound_freq);
        !           271:        tui_puts (tmp);
        !           272:        tui_gotoxy (OPTION_COLUMN + 7, y++);
        !           273:        sprintf (tmp, "Minimum buffer size %d bytes, maximum %d bytes", currprefs.sound_minbsiz, currprefs.sound_maxbsiz);
        !           274:        tui_puts (tmp);
1.1       root      275:     }
                    276: 
1.1.1.4 ! root      277:     tui_gotoxy (OPTION_COLUMN,y++);
1.1.1.3   root      278:     tui_puts ("GAME PORT 1: "); tui_puts (gameport_state (0));
1.1.1.4 ! root      279:     tui_gotoxy (OPTION_COLUMN,y++);
1.1.1.3   root      280:     tui_puts ("GAME PORT 2: "); tui_puts (gameport_state (1));
1.1       root      281: 
1.1.1.4 ! root      282:     tui_gotoxy (OPTION_COLUMN,y++);
        !           283:     sprintf (tmp, "HARDDISK: (%s)", currprefs.automount_uaedev ? "enabled" : "disabled");
        !           284:     tui_puts (tmp);
1.1       root      285: 
1.1.1.2   root      286:     for (i = 0;; i++) {
                    287:        char buf[256];
1.1.1.3   root      288: 
1.1.1.4 ! root      289:        tui_gotoxy (OPTION_COLUMN+1,y++);
1.1.1.2   root      290:        if (sprintf_filesys_unit(buf, i) == -1)
                    291:            break;
1.1.1.4 ! root      292:        tui_puts (buf);
1.1       root      293:     }
                    294: }
                    295: 
1.1.1.4 ! root      296: static void HDOptions (void)
1.1       root      297: {
                    298:     char *buff;
                    299:     char tmp[256];
1.1.1.3   root      300:     char mountvol[256];
                    301:     char mountdir[256];
1.1.1.2   root      302:     int c = 0;
1.1       root      303: 
                    304:     for (;;){
1.1.1.3   root      305: 
1.1       root      306:        tui_selwin(0);
                    307:        print_configuration();
1.1.1.2   root      308: 
1.1.1.3   root      309:        c = tui_menubrowse (hdmenu, MENU_COL_OFFSET, 5, c, MAX_MENU_HEIGHT);
1.1.1.2   root      310:        if (c == -1)
                    311:            break;
1.1.1.4 ! root      312:        else switch (c) {
1.1.1.2   root      313:         case 0:
1.1.1.3   root      314:            currprefs.automount_uaedev = !currprefs.automount_uaedev;
1.1.1.2   root      315:            break;
                    316:         case 1:
1.1.1.3   root      317:            tui_wgets (mountvol, "Enter mounted volume name", 10);
                    318:            if (strlen (mountvol) == 0)
1.1.1.2   root      319:                break;
1.1.1.3   root      320:            if (mountvol[strlen(mountvol)-1]==':')
1.1.1.2   root      321:                mountvol[strlen(mountvol)-1] = 0;
1.1.1.3   root      322:            tui_wgets (mountdir, "Enter mounted volume path", 78);
                    323:            add_filesys_unit (mountvol, mountdir, 0, 0, 0, 0);
1.1       root      324:            break;
1.1.1.3   root      325:         case 2:
                    326:            tui_wgets (mountvol, "Enter mounted volume name", 10);
                    327:            if (strlen (mountvol) == 0)
1.1.1.2   root      328:                break;
1.1.1.4 ! root      329:            if (mountvol[strlen (mountvol)-1]==':')
1.1.1.3   root      330:                mountvol[strlen (mountvol)-1] = 0;
                    331:            tui_wgets (mountdir, "Enter mounted volume path", 78);
                    332:            add_filesys_unit (mountvol, mountdir, 1, 0, 0, 0);
1.1.1.2   root      333:            break;
                    334:         case 3:
1.1.1.3   root      335:            buff = tui_filereq("*", "", "Select the hardfile to be mounted");
                    336:            if (buff == NULL)
                    337:                break;
                    338:            strcpy (mountvol, buff);
                    339:            tui_wgets (mountdir, "Enter number of sectors per track", 4);
                    340:            tui_wgets (mountdir + 10, "Enter number of heads", 4);
                    341:            tui_wgets (mountdir + 20, "Enter number of reserved blocks", 3);
                    342:            buff = add_filesys_unit (0, mountvol, 1,
                    343:                                     atoi (mountdir), atoi (mountdir + 10),
                    344:                                     atoi (mountdir + 20));
                    345:            if (buff)
                    346:                tui_errorbox (buff);
                    347:            break;
                    348:         case 4:
                    349:            tui_wgets (mountvol, "Enter number of volume to be removed (0 for UAE0:, etc.)", 2);
                    350:            if (kill_filesys_unit (atoi (mountvol)) == -1)
1.1.1.4 ! root      351:                tui_errorbox ("Volume does not exist");
1.1       root      352:            break;
                    353:        }
                    354:     }
                    355: }
                    356: 
1.1.1.4 ! root      357: static void DiskOptions (void)
1.1       root      358: {
1.1.1.3   root      359:     char tmp[256];
1.1.1.2   root      360:     int c = 0;
                    361: 
1.1       root      362:     for (;;) {
                    363:        char *sel;
1.1.1.2   root      364: 
1.1       root      365:        tui_selwin(0);
                    366:        print_configuration();
1.1.1.3   root      367: 
1.1.1.4 ! root      368:        c = tui_menubrowse (diskmenu, MENU_COL_OFFSET, 5, c, MAX_MENU_HEIGHT);
1.1.1.2   root      369:        if (c == -1)
1.1       root      370:            break;
1.1.1.4 ! root      371:        else switch (c) {
1.1.1.3   root      372:         case 0:
                    373:         case 1:
                    374:         case 2:
                    375:         case 3:
1.1.1.4 ! root      376:            sprintf (tmp, "Select a diskfile for DF%d:", c);
1.1.1.3   root      377:            sel = tui_filereq("*.adf", currprefs.df[c], tmp);
1.1       root      378:            if (sel == NULL)
                    379:                break;
1.1.1.3   root      380:            strcpy(currprefs.df[c], sel);
1.1       root      381:            break;
                    382:        }
                    383:     }
                    384: }
                    385: 
1.1.1.4 ! root      386: static void VideoOptions (void)
1.1       root      387: {
                    388:     char tmp[256];
1.1.1.2   root      389:     int c = 0;
1.1       root      390: 
1.1.1.3   root      391:     for (c = 0; c < 10; c++)
                    392:        if (videomenu[c].val == 'M') {
                    393:            if (video_mode_menu == NULL)
                    394:                videomenu[c].val = -4;
                    395:            break;
                    396:        }
                    397: 
                    398:     c = 0;
1.1       root      399:     for (;;) {
                    400: 
                    401:        tui_selwin(0);
                    402:        print_configuration();
1.1.1.3   root      403: 
1.1.1.4 ! root      404:        c = tui_menubrowse (videomenu, MENU_COL_OFFSET, 5, c, MAX_MENU_HEIGHT);
1.1.1.2   root      405:        if (c == -1)
                    406:            break;
1.1.1.4 ! root      407:        else switch (c) {
1.1.1.2   root      408:         case 0:
1.1.1.4 ! root      409:            tui_wgets (tmp, "Enter new video mode width", 4);
1.1.1.2   root      410:            if (atoi (tmp) < 320 || atoi (tmp) > 1600 /* maybe we'll implement SHires */)
1.1.1.4 ! root      411:                tui_errorbox ("Insane value for video mode width");
1.1.1.2   root      412:            else
1.1.1.3   root      413:                currprefs.gfx_width = atoi (tmp);
1.1.1.2   root      414:            break;
                    415:         case 1:
1.1.1.4 ! root      416:            tui_wgets (tmp, "Enter new video mode height", 4);
1.1.1.2   root      417:            if (atoi (tmp) < 200 || atoi (tmp) > 800 /* whatever */)
1.1.1.4 ! root      418:                tui_errorbox ("Insane value for video mode height");
1.1.1.2   root      419:            else
1.1.1.3   root      420:                currprefs.gfx_height = atoi (tmp);
1.1.1.2   root      421:            break;
                    422:         case 2:
1.1.1.3   root      423:            currprefs.color_mode++;
                    424:            if (currprefs.color_mode > MAX_COLOR_MODES)
                    425:                currprefs.color_mode=0;
1.1       root      426:            break;
1.1.1.2   root      427:         case 3:
1.1.1.4 ! root      428:            c = tui_menubrowse (video_mode_menu, 4, 6, 0, 15);
1.1.1.3   root      429:            if (c != -1)
                    430:                vidmode_menu_selected(c);
                    431:            c = 3;
1.1.1.2   root      432:            break;
                    433:         case 4:
1.1.1.3   root      434:            currprefs.gfx_lores = !currprefs.gfx_lores;
1.1.1.2   root      435:            break;
                    436:         case 5:
1.1.1.3   root      437:            currprefs.gfx_xcenter = (currprefs.gfx_xcenter + 1) % 3;
1.1.1.2   root      438:            break;
                    439:         case 6:
1.1.1.3   root      440:            currprefs.gfx_ycenter = (currprefs.gfx_ycenter + 1) % 3;
1.1.1.2   root      441:            break;
                    442:         case 7:
1.1.1.3   root      443:            currprefs.gfx_linedbl = !currprefs.gfx_linedbl;
1.1       root      444:            break;
1.1.1.2   root      445:         case 8:
1.1.1.3   root      446:            currprefs.gfx_correct_aspect = !currprefs.gfx_correct_aspect;
                    447:            break;
                    448:         case 9:
                    449:            currprefs.framerate++;
                    450:            if (currprefs.framerate > 9)
                    451:                currprefs.framerate=1;
1.1       root      452:            break;
                    453:        }
                    454:     }
                    455: }
                    456: 
1.1.1.4 ! root      457: static void MemoryOptions (void)
1.1       root      458: {
1.1.1.3   root      459:     char *tmp;
1.1.1.2   root      460:     int c = 0;
1.1       root      461:     for (;;) {
                    462: 
                    463:        tui_selwin(0);
1.1.1.4 ! root      464:        print_configuration ();
1.1       root      465: 
1.1.1.4 ! root      466:        c = tui_menubrowse (memorymenu, MENU_COL_OFFSET, 5, c, MAX_MENU_HEIGHT);
1.1.1.2   root      467:        if (c == -1)
1.1       root      468:            break;
1.1.1.4 ! root      469:        else switch (c) {
1.1.1.2   root      470:         case 0:
1.1       root      471:            if (fastmem_size == 0)
                    472:                fastmem_size = 0x200000;
                    473:            else if (fastmem_size == 0x800000)
                    474:                fastmem_size = 0;
                    475:            else
                    476:                fastmem_size <<= 1;
                    477:            break;
1.1.1.2   root      478:         case 1:
                    479:            if (chipmem_size == 0x800000)
1.1       root      480:                chipmem_size = 0x80000;
                    481:            else
                    482:                chipmem_size <<= 1;
1.1.1.3   root      483:            if (chipmem_size > 0x200000)
                    484:                fastmem_size = 0;
                    485:            break;
1.1.1.2   root      486:         case 2:
1.1       root      487:            if (bogomem_size == 0)
                    488:                bogomem_size = 0x40000;
                    489:            else if (bogomem_size == 0x100000)
                    490:                bogomem_size = 0;
                    491:            else
                    492:                bogomem_size <<= 1;
                    493:            break;
1.1.1.3   root      494:         case 3:
                    495:            tmp = tui_filereq("*.rom", romfile, "Select a ROM image");
                    496:            if (tmp != NULL)
                    497:                strcpy(romfile, tmp);
                    498:            break;
                    499:        }
1.1       root      500:     }
                    501: }
                    502: 
1.1.1.4 ! root      503: static void SoundOptions (void)
1.1       root      504: {
1.1.1.3   root      505:     char tmp[256];
1.1.1.2   root      506:     int c = 0;
1.1       root      507:     for (;;) {
                    508:        tui_selwin(0);
1.1.1.4 ! root      509:        print_configuration ();
        !           510:        c = tui_menubrowse (soundmenu, MENU_COL_OFFSET, 5, c, MAX_MENU_HEIGHT);
1.1.1.2   root      511:        if (c == -1)
1.1       root      512:            break;
1.1.1.4 ! root      513:        else switch (c) {
1.1.1.2   root      514:         case 0:
1.1.1.3   root      515:            currprefs.produce_sound++;
1.1.1.4 ! root      516:            if (currprefs.produce_sound > 3)
1.1.1.3   root      517:                currprefs.produce_sound = 0;
                    518:            break;
                    519: 
                    520:         case 1:
1.1.1.4 ! root      521:            tui_wgets (tmp, "Enter new minimum sound buffer size in bytes", 6);
1.1.1.3   root      522:            if (atoi (tmp) < 128 || atoi (tmp) > 65536 || atoi (tmp) > currprefs.sound_maxbsiz)
1.1.1.4 ! root      523:                tui_errorbox ("Insane value for minimum sound buffer size");
1.1.1.3   root      524:            else
                    525:                currprefs.sound_minbsiz = atoi (tmp);
                    526:            break;
                    527: 
                    528:         case 2:
1.1.1.4 ! root      529:            tui_wgets (tmp, "Enter new maximum sound buffer size in bytes", 6);
1.1.1.3   root      530:            if (atoi (tmp) < 128 || atoi (tmp) > 65536 || atoi (tmp) < currprefs.sound_minbsiz)
1.1.1.4 ! root      531:                tui_errorbox ("Insane value for maximum sound buffer size");
1.1.1.3   root      532:            else
                    533:                currprefs.sound_maxbsiz = atoi (tmp);
                    534:            break;
                    535: 
                    536:         case 3:
1.1.1.4 ! root      537:            tui_wgets (tmp, "Enter new number of bits", 3);
1.1.1.3   root      538:            if (atoi (tmp)!= 8 && atoi (tmp) != 16)
1.1.1.4 ! root      539:                tui_errorbox ("Unsupported number of bits");
1.1.1.3   root      540:            else
                    541:                currprefs.sound_bits = atoi (tmp);
                    542:            break;
                    543: 
                    544:         case 4:
1.1.1.4 ! root      545:            tui_wgets (tmp, "Enter new sound output frequency", 6);
1.1.1.3   root      546:            if (atoi (tmp) < 11025 || atoi (tmp) > 44100)
1.1.1.4 ! root      547:                tui_errorbox ("Unsupported frequency");
1.1.1.3   root      548:            else
                    549:                currprefs.sound_freq = atoi (tmp);
1.1       root      550:            break;
1.1.1.3   root      551:        }
1.1       root      552:     }
                    553: }
                    554: 
1.1.1.4 ! root      555: static void OtherOptions (void)
1.1       root      556: {
1.1.1.3   root      557:     char tmp[256];
1.1.1.2   root      558:     int c = 0;
1.1       root      559: 
                    560:     for (;;) {
1.1.1.3   root      561:        tui_selwin (0);
                    562:        print_configuration ();
                    563:        c = tui_menubrowse (miscmenu, MENU_COL_OFFSET, 5, c, MAX_MENU_HEIGHT);
1.1.1.2   root      564:        if (c == -1) {
1.1       root      565:            break;
1.1.1.4 ! root      566:        } else switch (c) {
1.1.1.2   root      567:         case 0:
1.1.1.3   root      568:            currprefs.fake_joystick = (currprefs.fake_joystick & 0xFF00) + ((currprefs.fake_joystick & 255) + 1) % 6;
                    569:            if ((currprefs.fake_joystick & 255) == (currprefs.fake_joystick >> 8))
                    570:                currprefs.fake_joystick = (currprefs.fake_joystick & 0x00FF) + ((((currprefs.fake_joystick >> 8) - 1) % 6) << 8);
                    571:            break;
1.1.1.2   root      572:         case 1:
1.1.1.3   root      573:            currprefs.fake_joystick = (currprefs.fake_joystick & 0x00FF) + ((((currprefs.fake_joystick >> 8) + 1) % 6) << 8);
                    574:            if ((currprefs.fake_joystick & 255) == (currprefs.fake_joystick >> 8))
                    575:                currprefs.fake_joystick = (currprefs.fake_joystick & 0xFF00) + ((currprefs.fake_joystick & 255) - 1) % 6;
                    576:            break;
                    577:         case 2:
1.1.1.4 ! root      578:            tui_wgets (tmp, "Enter new CPU emulation speed", 6);
1.1.1.3   root      579:            if (atoi (tmp) < 1 || atoi (tmp) > 20)
1.1.1.4 ! root      580:                tui_errorbox ("Unsupported CPU emulation speed");
1.1.1.3   root      581:            else
                    582:                currprefs.m68k_speed = atoi (tmp);
1.1       root      583:            break;
                    584:        }
                    585:     }
                    586: }
                    587: 
1.1.1.4 ! root      588: static int do_gui (int mode)
1.1       root      589: {
                    590:     char cwd[1024];
1.1.1.2   root      591: 
1.1.1.4 ! root      592:     if (getcwd (cwd, 1024) == NULL)
1.1       root      593:        return 0;
                    594: 
1.1.1.4 ! root      595:     tui_setup ();
1.1.1.3   root      596: 
1.1       root      597:     for (;;) {
                    598:        int c;
1.1.1.3   root      599: 
1.1.1.4 ! root      600:        tui_selwin (0);
        !           601:        print_configuration ();
        !           602:        c = tui_menubrowse (mode == 0 ? mainmenu2 : mainmenu, MENU_COL_OFFSET, 4, 0, MAX_MENU_HEIGHT);
1.1.1.2   root      603:        if (c == -1) {
1.1.1.4 ! root      604:            tui_shutdown ();
1.1.1.2   root      605:            return -2;
1.1.1.3   root      606:        }
                    607:        if (mode == 1) {
                    608:            if (c == 7)
                    609:                break;
                    610:            switch (c) {
                    611:             case 0: DiskOptions (); break;
                    612:             case 1: VideoOptions (); break;
                    613:             case 2: MemoryOptions (); break;
                    614:             case 3: HDOptions (); break;
                    615:             case 4: SoundOptions (); break;
                    616:             case 5: OtherOptions (); break;
                    617:             case 6: save_settings (); break;
                    618:            }
                    619:        } else {
                    620:            if (c == 5)
                    621:                break;
                    622:            switch (c) {
                    623:             case 0: DiskOptions (); break;
                    624:             case 1: OtherOptions (); break;
                    625:             case 2: save_settings (); break;
                    626:             case 3: uae_reset (); break;
                    627:             case 4: uae_quit (); break;
                    628:            }
1.1       root      629:        }
                    630:     }
1.1.1.4 ! root      631:     tui_shutdown ();
1.1.1.3   root      632: 
1.1       root      633:     chdir (cwd);
                    634:     return 0;
                    635: }
1.1.1.2   root      636: 
1.1.1.4 ! root      637: int gui_init (void)
1.1.1.2   root      638: {
1.1.1.4 ! root      639:     return do_gui (1);
1.1.1.2   root      640: }
                    641: 
1.1.1.4 ! root      642: void gui_changesettings (void)
1.1.1.3   root      643: {
                    644:     struct uae_prefs oldprefs;
                    645:     oldprefs = currprefs;
                    646: 
                    647:     if (do_gui(0) == -2)
                    648:        uae_quit ();
                    649:     else {
                    650:        changed_prefs = currprefs;
                    651:        currprefs = oldprefs;
                    652:        currprefs.fake_joystick = changed_prefs.fake_joystick;
                    653:        joystick_setting_changed ();
                    654:     }
                    655: }
                    656: 
1.1.1.4 ! root      657: int gui_update (void)
1.1.1.2   root      658: {
1.1.1.3   root      659:     return 0;
1.1.1.2   root      660: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.