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

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"
        !            18: #include "os.h"
        !            19: #include "autoconf.h"
        !            20: #include "tui.h"
        !            21: #include "gui.h"
        !            22: #include "memory.h"
        !            23: 
        !            24: char *screenmodes[] = { "320x200", "320x240", "320x400", "640x480", "800x600" };
        !            25: char *colormodes[] = { "256 colors", "32768 colors", "65536 colors",
        !            26:        "256 colors dithered", "16 colors dithered", "16 million colors" };
        !            27: 
        !            28: int quit_program;
        !            29: 
        !            30: char mountvol[256] = "\0";
        !            31: char mountdir[256] = "\0";
        !            32: int mountok=0;
        !            33: 
        !            34: void gui_led(int led, int on)
        !            35: {
        !            36: }
        !            37: void gui_filename(int num, char *name)
        !            38: {
        !            39: }
        !            40: static void getline(char *p)
        !            41: {
        !            42: }
        !            43: void gui_handle_events(void)
        !            44: {
        !            45: }
        !            46: 
        !            47: static void save_options(FILE *f)
        !            48: {
        !            49:     /* We only get here if allow_save is true, so... */
        !            50:     fprintf(f, "-o\n");
        !            51:     if (use_debugger)
        !            52:        fprintf(f, "-D\n");
        !            53:     fprintf(f, "-r %s\n", romfile);
        !            54:     fprintf(f, "-0 %s\n", df0);
        !            55:     fprintf(f, "-1 %s\n", df1);
        !            56:     fprintf(f, "-2 %s\n", df2);
        !            57:     fprintf(f, "-3 %s\n", df3);
        !            58:     fprintf(f, "-p %s\n", prtname);
        !            59:     fprintf(f, "-S %d\n", produce_sound);
        !            60:     if (fake_joystick)
        !            61:        fprintf(f, "-J\n");
        !            62:     fprintf(f, "-l %s\n", (keyboard_lang == KBD_LANG_DE ? "de"
        !            63:                           : keyboard_lang == KBD_LANG_US ? "us"
        !            64:                           : keyboard_lang == KBD_LANG_SE ? "se"
        !            65:                           : keyboard_lang == KBD_LANG_FR ? "fr"
        !            66:                           : keyboard_lang == KBD_LANG_IT ? "it"
        !            67:                           : "FOO"));
        !            68:     fprintf(f, "-f %d\n", framerate);
        !            69:     fprintf(f, "-d %d\n", screen_res);
        !            70:     if (correct_aspect)
        !            71:        fprintf(f, "-C\n");
        !            72:     fprintf(f, "-H %d\n", color_mode);
        !            73:     if (fastmem_size > 0)
        !            74:        fprintf(f, "-F %d\n", fastmem_size / 0x100000);
        !            75:     if (bogomem_size > 0)
        !            76:        fprintf(f, "-s %d\n", bogomem_size / 0x40000);
        !            77:     fprintf(f, "-c %d\n", chipmem_size / 0x80000);
        !            78:     if (!automount_uaedev)
        !            79:        fprintf(f, "-a\n");
        !            80:     fprintf(f, "-B %d\n", sound_desired_bsiz);
        !            81:     fprintf(f, "-b %d\n", sound_desired_bits);
        !            82:     fprintf(f, "-R %d\n", sound_desired_freq);
        !            83:     
        !            84:     write_filesys_config(f);
        !            85: }
        !            86: 
        !            87: void gui_exit()
        !            88: {
        !            89:     if (allow_save) {
        !            90:        if (tui_backup_optionsfile() == 0) {
        !            91:            FILE *f = fopen(optionsfile, "w");
        !            92:            if (f == NULL) {
        !            93:                fprintf(stderr, "Error saving options file!\n");
        !            94:                return;
        !            95:            }
        !            96:            save_options(f);
        !            97:            fclose(f);
        !            98:        }
        !            99:     }
        !           100: }
        !           101: 
        !           102: static const char *mainmenu[] = { 
        !           103:        "D - Disk settings",
        !           104:        "V - Video settings",
        !           105:        "M - Memory settings",
        !           106:        "H - Hard disk settings",
        !           107:        "S - Sound settings",
        !           108:        "O - Other settings",
        !           109:        NULL
        !           110: };
        !           111: 
        !           112: static const char *diskmenu[] = { 
        !           113:        "0 - change DF0:",
        !           114:        "1 - change DF1:",
        !           115:        "2 - change DF2:",
        !           116:        "3 - change DF3:",
        !           117:        NULL
        !           118: };
        !           119: 
        !           120: static const char *videomenu[] = { 
        !           121:        "1 - Change resolution",
        !           122:        "2 - Change color mode",
        !           123:        "3 - Toggle aspect correction",
        !           124:        "4 - Change framerate",
        !           125:        NULL
        !           126: };
        !           127: 
        !           128: static const char *memmenu[] = { 
        !           129:        "1 - Change fastmem size",
        !           130:        "2 - Change chipmem size",
        !           131:        "3 - Change slowmem size",
        !           132:        NULL
        !           133: };
        !           134: 
        !           135: static const char *soundmenu[] = { 
        !           136:        "1 - Change sound emulation",
        !           137:        NULL
        !           138: };
        !           139: 
        !           140: static const char *miscmenu[] = { 
        !           141:        "1 - Toggle keypad joystick emulation",
        !           142:        "2 - Select ROM image",
        !           143:        NULL
        !           144: };
        !           145: 
        !           146: static const char *hdmenu[] = {
        !           147:        "1 - Enable/Disable HardDrive file",
        !           148:        "2 - Change Mounted volume name",
        !           149:        "3 - Change Mounted volume path",
        !           150:        "4 - Enable/Disable Mounted volume",
        !           151:        NULL
        !           152: };
        !           153: 
        !           154: static int makemenu(const char **menu, int x, int y)
        !           155: {
        !           156:     const char **m = menu;
        !           157:     int maxlen = 0, count = 0;
        !           158:     int w;
        !           159:     
        !           160:     while (*m != NULL) {
        !           161:        int l = strlen(*m);
        !           162:        if (l > maxlen)
        !           163:            maxlen = l;
        !           164:        m++; count++;
        !           165:     }
        !           166:     w = tui_dlog(x, y, x + maxlen + 2, y + count + 1);
        !           167:     tui_drawbox(w);
        !           168:     tui_selwin(w);
        !           169:     y = 2;
        !           170:     while (*menu != NULL) {
        !           171:        tui_gotoxy(2, y++);
        !           172:        tui_puts(*menu++);
        !           173:     }
        !           174:     tui_selwin(0);
        !           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;
        !           185:     if (strlen(s) == 0)
        !           186:        strcpy(tmpbuf, "none");
        !           187:     else if (strlen(s) < n)
        !           188:        strcpy(tmpbuf, s);
        !           189:     else {
        !           190:        tmpbuf[0] = '^';
        !           191:        strcpy(tmpbuf + 1, s + strlen(s) - n + 2);
        !           192:     }
        !           193:     for (i = strlen(tmpbuf); i < n; i++)
        !           194:        tmpbuf[i] = ' ';
        !           195:     tmpbuf[i] = 0;
        !           196:     return tmpbuf;
        !           197: }
        !           198: 
        !           199: static void print_configuration(void)
        !           200: {
        !           201:     char tmp[256];
        !           202:     int y = 5;
        !           203: 
        !           204: /*    tui_clrarea(35,4,79,20);*/
        !           205:     
        !           206:     tui_gotoxy(35, y++); sprintf(tmp, "Disk file DF0: %s", trimfilename(df0, tui_cols() - 50)); tui_puts(tmp);
        !           207:     tui_gotoxy(35, y++); sprintf(tmp, "Disk file DF1: %s", trimfilename(df1, tui_cols() - 50)); tui_puts(tmp);
        !           208:     tui_gotoxy(35, y++); sprintf(tmp, "Disk file DF2: %s", trimfilename(df2, tui_cols() - 50)); tui_puts(tmp);
        !           209:     tui_gotoxy(35, y++); sprintf(tmp, "Disk file DF3: %s", trimfilename(df3, tui_cols() - 50)); tui_puts(tmp);
        !           210:     y++;
        !           211:     tui_gotoxy(35, y++);
        !           212:     sprintf(tmp, "VIDEO: %-7s %-19s ",screenmodes[screen_res], colormodes[color_mode]); 
        !           213:     tui_puts(tmp);
        !           214: 
        !           215:     tui_gotoxy(42, y++);
        !           216:     if (correct_aspect)
        !           217:        tui_puts("Aspect corrected    ");
        !           218:     else 
        !           219:        tui_puts("Not aspect corrected");
        !           220:     tui_gotoxy(42, y++);
        !           221:     tui_puts("drawing every ");
        !           222:     switch(framerate) {
        !           223:      case 1: break;
        !           224:      case 2: tui_puts("2nd "); break;
        !           225:      case 3: tui_puts("3rd "); break;
        !           226:      default: sprintf(tmp, "%dth ",framerate); tui_puts(tmp); break;
        !           227:     }
        !           228:     tui_puts("frame.    ");
        !           229:     y++;
        !           230:     tui_gotoxy(35, y++);
        !           231:     sprintf(tmp, "MEMORY: %4dK chip; %4dK fast; %4dK slow",chipmem_size/1024,fastmem_size/1024,bogomem_size/1024);
        !           232:     tui_puts(tmp);
        !           233: 
        !           234:     tui_gotoxy(35, y++);
        !           235:     sprintf(tmp, "ROM IMAGE: %s", trimfilename(romfile, tui_cols() - 50));
        !           236:     tui_puts(tmp);
        !           237:     tui_gotoxy(35, y++);
        !           238:     if (!sound_available)
        !           239:        tui_puts("SOUNDS: Not available");
        !           240:     else {
        !           241:        switch (produce_sound) {
        !           242:         case 0: tui_puts("SOUND: 0 (Off)                   "); break;
        !           243:         case 1: tui_puts("SOUND: 1 (Off, but emulated)     "); break;
        !           244:         case 2: tui_puts("SOUND: 2 (On)                    "); break;
        !           245:         case 3: tui_puts("SOUND: 3 (On, emulated perfectly)"); break;
        !           246:        }
        !           247:     }
        !           248: 
        !           249:     tui_gotoxy(35,y++);
        !           250:     if(fake_joystick==1) {
        !           251:        tui_puts("JOYSTICK: using keypad emulation");
        !           252:     } else {
        !           253:        if (joystickpresent)
        !           254:            tui_puts("JOYSTICK: using joystick #0     ");
        !           255:         else
        !           256:            tui_puts("JOYSTICK: no joystick emulation "); 
        !           257:     }
        !           258: 
        !           259:     tui_gotoxy(35,y++);
        !           260:     tui_puts("HARDDISK: ");
        !           261:     if(hardfile_size>16) {
        !           262:         sprintf(tmp, "Current Harddisk file = %d K is", hardfile_size/1024);
        !           263:        tui_puts(tmp);
        !           264:         if (automount_uaedev==1) {
        !           265:            tui_puts(" active"); 
        !           266:        } else {
        !           267:            tui_puts(" not active"); 
        !           268:        }
        !           269:     } else {
        !           270:        tui_puts("No Harddisk file available     "); 
        !           271:     }
        !           272: 
        !           273:     tui_gotoxy(35,y++);
        !           274:     if(mountok==1) {
        !           275:        sprintf(tmp, "Mounting volume %s at %s",mountvol,mountdir); tui_puts(tmp);
        !           276:     }
        !           277:     tui_refresh();
        !           278: }
        !           279: 
        !           280: static void HDOptions(void) 
        !           281: {
        !           282:     char *buff;
        !           283:     char tmp[256];
        !           284: 
        !           285:     int w = makemenu(hdmenu, 3, 5);
        !           286: 
        !           287:     for (;;){
        !           288:        int c;
        !           289:        
        !           290:        tui_selwin(0);
        !           291:        print_configuration();
        !           292:        tui_refresh();
        !           293:        tui_selwin(w);
        !           294:        tui_refresh();
        !           295:        c = tui_getc();
        !           296:        if (c == 27 || c == 13)
        !           297:            break;
        !           298:        switch(c) {
        !           299:         case '1':
        !           300:            automount_uaedev=!automount_uaedev; break;
        !           301:         case '2':
        !           302:            tui_wgets(mountvol, "Enter mounted volume name", 78);
        !           303:            if(mountvol[strlen(mountvol)-1]==':') {
        !           304:                mountvol[strlen(mountvol)-1]=0; }
        !           305:            break;
        !           306:         case '3': 
        !           307:            tui_wgets(mountdir, "Enter mounted volume path", 78);
        !           308:            break;
        !           309:         case '4': mountok=!mountok; break;
        !           310:        }
        !           311:     }
        !           312:     tui_dlogdie(w);
        !           313: }
        !           314: 
        !           315: static void DiskOptions(void) 
        !           316: {
        !           317:     char buf[256], tmp[256];
        !           318:     int w = makemenu(diskmenu, 3, 5);
        !           319:     
        !           320:     for (;;) {
        !           321:        char *sel;
        !           322:        int c;
        !           323:        
        !           324:        tui_selwin(0);
        !           325:        print_configuration();
        !           326:        tui_refresh();
        !           327:        tui_selwin(w);
        !           328:        tui_refresh();
        !           329:        
        !           330:        c = tui_getc();
        !           331:        if (c == 27 || c == 13)
        !           332:            break;
        !           333:        switch(c) {
        !           334:         case '0': 
        !           335:            sel = tui_filereq("*.adf", df0);
        !           336:            if (sel == NULL)
        !           337:                break;
        !           338:            strcpy(df0, sel); 
        !           339:            break;
        !           340:         case '1': 
        !           341:            sel = tui_filereq("*.adf", df1);
        !           342:            if (sel == NULL)
        !           343:                break;
        !           344:            strcpy(df1, sel); 
        !           345:            break;
        !           346:         case '2': 
        !           347:            sel = tui_filereq("*.adf", df2);
        !           348:            if (sel == NULL)
        !           349:                break;
        !           350:            strcpy(df2, sel); 
        !           351:            break;
        !           352:         case '3': 
        !           353:            sel = tui_filereq("*.adf", df3);
        !           354:            if (sel == NULL)
        !           355:                break;
        !           356:            strcpy(df3, sel); 
        !           357:            break;
        !           358:        }
        !           359:     }
        !           360:     tui_dlogdie(w);
        !           361: }
        !           362: 
        !           363: static void VideoOptions(void) 
        !           364: {
        !           365:     char tmp[256];
        !           366:     int w = makemenu(videomenu, 3, 5);
        !           367: 
        !           368:     for (;;) {
        !           369:        int c;
        !           370: 
        !           371:        tui_selwin(0);
        !           372:        print_configuration();
        !           373:        tui_refresh();
        !           374:        tui_selwin(w);
        !           375:        tui_refresh();
        !           376: 
        !           377:        c = tui_getc();
        !           378:        if (c == 27 || c == 13)
        !           379:            break;
        !           380:        switch(c) {
        !           381:         case 49:
        !           382:            screen_res++;
        !           383:            if (screen_res > MAX_SCREEN_MODES)
        !           384:                screen_res=0;
        !           385:            break;
        !           386:         case 50:
        !           387:            color_mode++;
        !           388:            if (color_mode > MAX_COLOR_MODES) 
        !           389:                color_mode=0;
        !           390:            break;
        !           391:         case 51:
        !           392:            correct_aspect = !correct_aspect;
        !           393:            break;
        !           394:         case 52:
        !           395:            framerate++;
        !           396:            if (framerate > 9)
        !           397:                framerate=1;
        !           398:            break;
        !           399:        }
        !           400:     }
        !           401:     tui_dlogdie(w);
        !           402: }
        !           403: 
        !           404: static void MemoryOptions(void)
        !           405: {
        !           406:     int w = makemenu(memmenu, 3, 5);
        !           407:     for (;;) {
        !           408:        int c;
        !           409: 
        !           410:        tui_selwin(0);
        !           411:        print_configuration();
        !           412:        tui_refresh();
        !           413:        tui_selwin(w);
        !           414:        tui_refresh();
        !           415: 
        !           416:        c = tui_getc();
        !           417:        if (c == 27 || c == 13)
        !           418:            break;
        !           419:        switch(c) {
        !           420:         case '1':
        !           421:            if (fastmem_size == 0)
        !           422:                fastmem_size = 0x200000;
        !           423:            else if (fastmem_size == 0x800000)
        !           424:                fastmem_size = 0;
        !           425:            else
        !           426:                fastmem_size <<= 1;
        !           427:            break;
        !           428:         case '2':
        !           429:            if (chipmem_size == 0x200000)
        !           430:                chipmem_size = 0x80000;
        !           431:            else
        !           432:                chipmem_size <<= 1;
        !           433:             break;
        !           434:         case '3':
        !           435:            if (bogomem_size == 0)
        !           436:                bogomem_size = 0x40000;
        !           437:            else if (bogomem_size == 0x100000)
        !           438:                bogomem_size = 0;
        !           439:            else
        !           440:                bogomem_size <<= 1;
        !           441:            break;
        !           442:         }
        !           443: 
        !           444:     }
        !           445:     tui_dlogdie(w);
        !           446: }
        !           447: 
        !           448: static void SoundOptions(void)
        !           449: {
        !           450:     int w = makemenu(soundmenu, 3, 5);
        !           451: 
        !           452:     for (;;) {
        !           453:        int c;
        !           454: 
        !           455:        tui_selwin(0);
        !           456:        print_configuration();
        !           457:        tui_refresh();
        !           458:        tui_selwin(w);
        !           459:        tui_refresh();
        !           460: 
        !           461:        c = tui_getc();
        !           462:        if (c == 27 || c == 13)
        !           463:            break;
        !           464:        switch(c) {
        !           465:         case '1':
        !           466:            produce_sound++;
        !           467:            if(produce_sound > 3)
        !           468:                produce_sound = 0;
        !           469:            break;
        !           470: 
        !           471:         }
        !           472:     }
        !           473:     tui_dlogdie(w);
        !           474: }
        !           475: 
        !           476: static void OtherOptions(void)
        !           477: {
        !           478:     char *tmp;
        !           479:     int w = makemenu(miscmenu, 3, 5);
        !           480: 
        !           481:     for (;;) {
        !           482:        int c;
        !           483: 
        !           484:        tui_selwin(0);
        !           485:        print_configuration();
        !           486:        tui_refresh();
        !           487:        tui_selwin(w);
        !           488:        tui_refresh();
        !           489: 
        !           490:        c = tui_getc();
        !           491:        if (c == 27 || c == 13)
        !           492:            break;
        !           493:        switch(c) {
        !           494:         case '1':
        !           495:             fake_joystick = !fake_joystick;
        !           496:             break;
        !           497:         case '2':
        !           498:             tmp = tui_filereq("*.rom", romfile);
        !           499:            if (tmp != NULL)
        !           500:                strcpy(romfile, tmp);
        !           501:            break;
        !           502:        }
        !           503:     }
        !           504:     tui_dlogdie(w);
        !           505: }
        !           506: 
        !           507: int gui_init() 
        !           508: {
        !           509:     char cwd[1024];
        !           510:     char tmp[256];
        !           511:     int mm_win;
        !           512:     
        !           513:     if (getcwd(cwd, 1024) == NULL)
        !           514:        return 0;
        !           515: 
        !           516:     quit_program = 0;
        !           517: 
        !           518:     tui_setup();
        !           519: 
        !           520:     tui_drawbox(0);
        !           521:     tui_hline(2, 3, tui_cols() - 1);
        !           522:     sprintf(tmp, "UAE %d.%d.%d: The Un*x Amiga Emulator", UAEMAJOR, UAEMINOR, UAEURSAMINOR);
        !           523:     tui_gotoxy((tui_cols() - strlen(tmp))/2, 2); tui_puts(tmp);
        !           524:     strcpy(tmp, "Press RETURN/ENTER to run UAE, ESC to exit");
        !           525:     tui_gotoxy((tui_cols() - strlen(tmp))/2, tui_lines()); tui_puts(tmp);
        !           526:        
        !           527:     mm_win = makemenu(mainmenu, 2, 4);
        !           528: 
        !           529:     for (;;) {
        !           530:        int c;
        !           531:        tui_selwin(0);
        !           532:        print_configuration();
        !           533:        tui_refresh();
        !           534:        tui_selwin(mm_win);
        !           535:        tui_refresh();
        !           536:        c = tui_getc();
        !           537:        
        !           538:        if (c == 27) {
        !           539:            tui_dlogdie(mm_win);
        !           540:            tui_shutdown();
        !           541:            exit(0);
        !           542:        } else if (c == 13) {
        !           543:            break;
        !           544:        }
        !           545:        
        !           546:        switch(c) {
        !           547:         case 100: DiskOptions(); break;
        !           548:         case 118: VideoOptions(); break;
        !           549:         case 109: MemoryOptions(); break;
        !           550:         case 104: HDOptions(); break;
        !           551:         case 115: SoundOptions(); break;
        !           552:         case 111: OtherOptions(); break;
        !           553:        }
        !           554:     }
        !           555: 
        !           556:     tui_dlogdie(mm_win);
        !           557:     if(mountok)
        !           558:        add_filesys_unit(mountvol, mountdir, 0);
        !           559: 
        !           560:     tui_shutdown();
        !           561:     chdir (cwd);
        !           562:     return 0;
        !           563: }

unix.superglobalmegacorp.com

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