Annotation of uae/amiga/source/uae-control.c, revision 1.1.1.1

1.1       root        1: /***********************************************************
                      2:  * UAE - The U*nix Amiga Emulator                          *
                      3:  *                                                         *
                      4:  * UAE-Control -- Emulator Control from Inside Emulation   *
                      5:  *  (c) 1996 Tauno Taipaleenmaki <[email protected]>  *
                      6:  *                                                         *
                      7:  * Version 0.1                                             *
                      8:  *                                                         *
                      9:  * Requires V36 or higher. Compiled with SAS/C 6.5         *
                     10:  *                                                         *
                     11:  * People with KS1.3 or lower should use the command line  *
                     12:  * version "uaectrl"                                       *
                     13:  ***********************************************************/
                     14: #include <proto/exec.h>
                     15: #include <proto/intuition.h>
                     16: #include <proto/gadtools.h>
                     17: #include <proto/graphics.h>
                     18: #include <proto/reqtools.h>
                     19: #include <intuition/intuition.h>
                     20: #include <libraries/reqtools.h>
                     21: #include <stdio.h>
                     22: #include <string.h>
                     23: #include "uae-control.h"
                     24: #include "uae_pragmas.h"
                     25: 
                     26: #define MAX_DRV_NAME          20
                     27: 
                     28:      struct Library              *ReqBase; 
                     29:      struct Library              *UaeBase;
                     30:      struct Window               *window;
                     31:      struct Screen               *scr;
                     32:      struct Gadget               *glist;
                     33:      APTR                        VisInfo;
                     34: 
                     35: struct UAE_CONFIG      config;
                     36: 
                     37: struct TextAttr topaz8 = {
                     38:        ( STRPTR )"topaz.font", 8, 0x00, 0x01 };
                     39: 
                     40: struct NewWindow newwindow = {
                     41:        20,20, 400,160, 0,1,
                     42:         IDCMP_CLOSEWINDOW | BUTTONIDCMP | CYCLEIDCMP | INTEGERIDCMP,
                     43:         WFLG_DRAGBAR | WFLG_CLOSEGADGET | WFLG_ACTIVATE | WFLG_DEPTHGADGET,
                     44:         NULL,NULL,(UBYTE *)"UAE-Control v0.1",NULL,NULL,
                     45:         0,0,0,0, CUSTOMSCREEN
                     46: };
                     47: 
                     48: int setup_window(void);
                     49: void quit_program(int error, char *text);
                     50: void print_drive_status(void);
                     51: 
                     52: /************************************
                     53:  * Main program                     *
                     54:  ************************************/
                     55: int main()
                     56: {
                     57:        int                  quit = 0,i;
                     58:        struct IntuiMessage  *msg;
                     59:        struct Gadget        *button;
                     60:        struct StringInfo    *strinfo;
                     61:        char                 buf[257];
                     62:        UWORD                koodi, msgID;
                     63:        ULONG                classi, number;
                     64:        APTR                 address;
                     65:        ULONG                CycleTags[3];
                     66: 
                     67:        CycleTags[0] = GTCY_Active;
                     68:        CycleTags[1] = (ULONG)&number;
                     69:        CycleTags[2] = TAG_DONE;
                     70:        
                     71:        ReqBase = OpenLibrary("reqtools.library",0);
                     72:        if (!ReqBase) {
                     73:              quit_program(1, "Reqtools.library needed!");
                     74:              return(1);
                     75:        }
                     76:        UaeBase = OpenLibrary("uae.library",0);
                     77:        if (!UaeBase) {
                     78:              UaeBase = OpenLibrary("uae.library",0);
                     79:              if (!UaeBase) {
                     80:                     quit_program(1, "Emulator not running or uae.library not installed.\n");
                     81:                     return(1);
                     82:              }
                     83:        }
                     84: /* Read UAE configuration */
                     85:        i = GetUaeConfig( &config );
                     86:        
                     87:        i = setup_window();
                     88:        if (i == 0) {
                     89:              quit_program(1, "Cannot setup a window!");
                     90:              return(1);
                     91:        }
                     92:        while( quit == 0 ) {
                     93:              WaitPort(window->UserPort);
                     94:              while( msg = (struct IntuiMessage *)GT_GetIMsg(window->UserPort))
                     95:                {
                     96:                       classi = msg->Class;
                     97:                       koodi = msg->Code;
                     98:                       address = msg->IAddress;
                     99:                       if (classi == IDCMP_GADGETUP) {
                    100:                              msgID = ((struct Gadget *)msg->IAddress)->GadgetID;
                    101:                              button = (struct Gadget *)msg->IAddress;
                    102:                              if (button->SpecialInfo) {
                    103:                                     strinfo = (struct StringInfo *)button->SpecialInfo;
                    104:                              }
                    105:                       } else
                    106:                         msgID = msg->Code;
                    107: 
                    108:                       GT_ReplyIMsg((struct IntuiMessage *)msg);
                    109:                       
                    110:                       switch( classi ) {
                    111:                        case IDCMP_CLOSEWINDOW:
                    112:                              quit = 1;
                    113:                              break;
                    114:                        case IDCMP_GADGETUP:
                    115:                              switch( msgID ) {
                    116:                               case GAD_EXITEMU:
                    117:                                     ExitEmu();
                    118:                                     break;
                    119:                               case GAD_EJECT_DF0:
                    120:                                     EjectDisk(0);
                    121:                                     GetUaeConfig( &config );
                    122:                                     print_drive_status();
                    123:                                     break;
                    124:                               case GAD_EJECT_DF1:
                    125:                                     EjectDisk(1);
                    126:                                     GetUaeConfig( &config );
                    127:                                     print_drive_status();
                    128:                                     break;
                    129:                               case GAD_EJECT_DF2:
                    130:                                     EjectDisk(2);
                    131:                                     GetUaeConfig( &config );
                    132:                                     print_drive_status();
                    133:                                     break;
                    134:                               case GAD_EJECT_DF3:
                    135:                                     EjectDisk(3);
                    136:                                     GetUaeConfig( &config );
                    137:                                     print_drive_status();
                    138:                                     break;
                    139:                               case GAD_SOUND:
                    140:                                     if (config.do_output_sound) {
                    141:                                            DisableSound();
                    142:                                     } else {
                    143:                                            EnableSound();
                    144:                                     }
                    145:                                     GetUaeConfig( &config );
                    146:                                     break;
                    147:                               case GAD_JOYSTICK:
                    148:                                     if (config.do_fake_joystick) { 
                    149:                                            DisableJoystick();
                    150:                                     } else {
                    151:                                            EnableJoystick();
                    152:                                     }
                    153:                                     GetUaeConfig( &config );
                    154:                                     break;
                    155:                               case GAD_FRAMERATE:
                    156:                                     SetFrameRate( strinfo->LongInt );
                    157:                                     GetUaeConfig( &config );
                    158:                                     break;
                    159:                               case GAD_INSERT_DF0:
                    160:                                     i = rtGetStringA( (UBYTE *)&buf, 255, 
                    161:                                                  (UBYTE *)"Disk-file name:",
                    162:                                                  NULL, TAG_DONE);
                    163:                                     if (i) {
                    164:                                            InsertDisk((UBYTE *)&buf, 0);
                    165:                                            GetUaeConfig( &config );
                    166:                                            print_drive_status();
                    167:                                     }
                    168:                                     break;
                    169:                               case GAD_INSERT_DF1:
                    170:                                     i = rtGetStringA( (UBYTE *)&buf, 255,
                    171:                                                      (UBYTE *)"Disk-file name:",
                    172:                                                      NULL, TAG_DONE);
                    173:                                     if (i) {
                    174:                                            InsertDisk((UBYTE *)&buf, 1);
                    175:                                            GetUaeConfig( &config );
                    176:                                            print_drive_status();
                    177:                                     }
                    178:                                     break;
                    179:                               case GAD_INSERT_DF2:
                    180:                                     i = rtGetStringA( (UBYTE *)&buf, 255,
                    181:                                                      (UBYTE *)"Disk-file name:",
                    182:                                                      NULL, TAG_DONE);
                    183:                                     if (i) {
                    184:                                            InsertDisk((UBYTE *)&buf, 2);
                    185:                                            GetUaeConfig( &config );
                    186:                                            print_drive_status();
                    187:                                     }
                    188:                                     break;
                    189:                               case GAD_INSERT_DF3:
                    190:                                     i = rtGetStringA( (UBYTE *)&buf, 255,
                    191:                                                      (UBYTE *)"Disk-file name:",
                    192:                                                      NULL, TAG_DONE);
                    193:                                     if (i) {
                    194:                                            InsertDisk((UBYTE *)&buf, 3);
                    195:                                            GetUaeConfig( &config );
                    196:                                            print_drive_status();
                    197:                                     }
                    198:                                     break;
                    199:                               case GAD_LANGUAGE:
                    200:                                     number = config.keyboard;
                    201:                                     number++;
                    202:                                     if (number == 5) 
                    203:                                       number = 0;
                    204:                                     ChangeLanguage( number );
                    205:                                     GetUaeConfig( &config );
                    206:                                     break;
                    207:                               case GAD_RESET:
                    208:                                     ColdReboot();
                    209:                                     break;
                    210:                               case GAD_DEBUG:
                    211:                                     DebugFunc();
                    212:                                     break;
                    213:                               default:
                    214:                                     break;
                    215:                              }
                    216:                              break;
                    217:                        default:
                    218:                              break;
                    219:                       }
                    220:                }
                    221:        }
                    222:        quit_program(0, "");
                    223:        return(0);
                    224: }
                    225: 
                    226: /******************************************
                    227:  * Quits the program                      *
                    228:  ******************************************/
                    229: void quit_program(int error, char *text)
                    230: {
                    231:        if (error > 0) {
                    232:              printf(" UAE-Control v0.1\n");
                    233:              printf("  (c)1996 Tauno Taipaleenmaki\n\n");
                    234:              printf(" ERROR: %s\n", text);
                    235:        }
                    236:        if (scr) 
                    237:         UnlockPubScreen(NULL, scr);
                    238:        if (window)
                    239:         CloseWindow( window );
                    240:        if (VisInfo)
                    241:         FreeVisualInfo( VisInfo );
                    242:        if (glist)
                    243:         FreeGadgets( glist );
                    244:        if (ReqBase)
                    245:         CloseLibrary( ReqBase );
                    246:        if (UaeBase)
                    247:         CloseLibrary( UaeBase );
                    248: }
                    249: 
                    250: 
                    251: /******************************************
                    252:  * Opens up the window & sets the gadgets *
                    253:  ******************************************/
                    254: int setup_window(void)
                    255: {
                    256:        struct Gadget           *g;
                    257:        struct NewGadget        ng;
                    258:        UWORD                   offy;
                    259:        ULONG                   drawtags[20];
                    260: 
                    261:        static const char *keyb_langs[] =
                    262:         {
                    263:                "US",
                    264:                "DE",
                    265:                "SE",
                    266:                "FR",
                    267:                "IT",
                    268:                NULL
                    269:         };
                    270: 
                    271:        scr = LockPubScreen(NULL);
                    272:        if (!scr)
                    273:         return(0);
                    274:        
                    275:        VisInfo = GetVisualInfo( scr, TAG_DONE );
                    276:        if (!VisInfo)
                    277:         return(0);
                    278:        
                    279:        offy = scr->WBorTop + scr->RastPort.TxHeight + 1;
                    280: 
                    281: /* Create buttons */
                    282:        g = CreateContext( &glist );
                    283:        if (!g)
                    284:         return(0);
                    285:        
                    286:        ng.ng_TextAttr = &topaz8;
                    287:        ng.ng_VisualInfo = VisInfo;
                    288:        ng.ng_Flags = PLACETEXT_IN;
                    289:        ng.ng_LeftEdge = 10; ng.ng_TopEdge = offy + 10;
                    290:        ng.ng_Width = 90; ng.ng_Height = 15;
                    291:        ng.ng_GadgetText = (UBYTE *)"Hard reset";
                    292:        ng.ng_GadgetID = GAD_RESET;
                    293:        g = CreateGadgetA(BUTTON_KIND, g, &ng, TAG_DONE);
                    294:        
                    295:        ng.ng_LeftEdge = 102; ng.ng_Width = 50;
                    296:        ng.ng_GadgetText = (UBYTE *)"Debug";
                    297:        ng.ng_GadgetID = GAD_DEBUG;
                    298:        g = CreateGadgetA(BUTTON_KIND, g, &ng, TAG_DONE);
                    299:        
                    300:        ng.ng_LeftEdge = 153; ng.ng_Width = 50;
                    301:        ng.ng_GadgetText = (UBYTE *)"Exit";
                    302:        ng.ng_GadgetID = GAD_EXITEMU;
                    303:        g = CreateGadgetA(BUTTON_KIND, g, &ng, TAG_DONE);
                    304: 
                    305: /* Eject buttons */
                    306:        ng.ng_LeftEdge = 250; ng.ng_Width = 70;
                    307:        ng.ng_TopEdge = offy + 35;
                    308:        ng.ng_GadgetID = GAD_EJECT_DF0;
                    309:        ng.ng_GadgetText = (UBYTE *)"Eject";
                    310:        g = CreateGadgetA(BUTTON_KIND, g, &ng, TAG_DONE);
                    311:        ng.ng_TopEdge = offy + 53;
                    312:        ng.ng_GadgetID = GAD_EJECT_DF1;
                    313:        g = CreateGadgetA(BUTTON_KIND, g, &ng, TAG_DONE);
                    314:        ng.ng_TopEdge = offy + 70;
                    315:        ng.ng_GadgetID = GAD_EJECT_DF2;
                    316:        g = CreateGadgetA(BUTTON_KIND, g, &ng, TAG_DONE);
                    317:        ng.ng_TopEdge = offy + 87;
                    318:        ng.ng_GadgetID = GAD_EJECT_DF3;
                    319:        g = CreateGadgetA(BUTTON_KIND, g, &ng, TAG_DONE);
                    320: 
                    321: /* Insert buttons */
                    322:        ng.ng_LeftEdge = 321; ng.ng_TopEdge = offy + 35;
                    323:        ng.ng_GadgetID = GAD_INSERT_DF0;
                    324:        ng.ng_GadgetText = (UBYTE *)"Insert";
                    325:        g = CreateGadgetA(BUTTON_KIND, g, &ng, TAG_DONE);
                    326:        ng.ng_TopEdge = offy + 53;
                    327:        ng.ng_GadgetID = GAD_INSERT_DF1;
                    328:        g = CreateGadgetA(BUTTON_KIND, g, &ng, TAG_DONE);
                    329:        ng.ng_TopEdge = offy + 70;
                    330:        ng.ng_GadgetID = GAD_INSERT_DF2;
                    331:        g = CreateGadgetA(BUTTON_KIND, g, &ng, TAG_DONE);
                    332:        ng.ng_TopEdge = offy + 87;
                    333:        ng.ng_GadgetID = GAD_INSERT_DF3;
                    334:        g = CreateGadgetA(BUTTON_KIND, g, &ng, TAG_DONE);
                    335: 
                    336: /* Sound & Joystick buttons */       
                    337: 
                    338:        ng.ng_LeftEdge = 120;
                    339:        ng.ng_TopEdge = 120;
                    340:        ng.ng_GadgetID = GAD_SOUND;
                    341:        ng.ng_GadgetText = (UBYTE *)"Sound";
                    342:        ng.ng_Flags = PLACETEXT_LEFT;
                    343:        if (config.do_output_sound) {
                    344:              drawtags[0] = GTCB_Checked;
                    345:              drawtags[1] = 1;
                    346:              drawtags[2] = TAG_DONE;
                    347:        } else {
                    348:              drawtags[0] = TAG_DONE;
                    349:        }
                    350:        g = CreateGadgetA(CHECKBOX_KIND, g, &ng,(struct TagItem *)&drawtags);
                    351:        
                    352:        ng.ng_TopEdge = 135;
                    353:        ng.ng_GadgetID = GAD_JOYSTICK;
                    354:        ng.ng_GadgetText = (UBYTE *)"Fake Joystick";
                    355:        if (config.do_fake_joystick) {
                    356:              drawtags[0] = GTCB_Checked;
                    357:              drawtags[1] = 1;
                    358:              drawtags[2] = TAG_DONE;
                    359:        } else {
                    360:              drawtags[0] = TAG_DONE;
                    361:        }
                    362:        g = CreateGadgetA(CHECKBOX_KIND, g, &ng, (struct TagItem *)&drawtags);
                    363: 
                    364:        ng.ng_TopEdge = 130;
                    365:        ng.ng_LeftEdge = 160;
                    366:        ng.ng_GadgetID = GAD_LANGUAGE;
                    367:        ng.ng_GadgetText = (UBYTE *)"Language";
                    368:        ng.ng_Flags = PLACETEXT_ABOVE;
                    369:        drawtags[0] = GTCY_Labels;
                    370:        drawtags[1] = (ULONG)keyb_langs;
                    371:        drawtags[2] = GTCY_Active;
                    372:        drawtags[3] = config.keyboard;
                    373:        drawtags[4] = TAG_DONE;
                    374:        g = CreateGadgetA(CYCLE_KIND, g, &ng, (struct TagItem *)&drawtags);
                    375: 
                    376:        ng.ng_TopEdge = 130;
                    377:        ng.ng_LeftEdge = 250;
                    378:        ng.ng_GadgetID = GAD_FRAMERATE;
                    379:        ng.ng_GadgetText = (UBYTE *)"Framerate";
                    380:        ng.ng_Flags = PLACETEXT_ABOVE;
                    381:        drawtags[0] = GTIN_Number;
                    382:        drawtags[1] = config.framerate;
                    383:        drawtags[2] = TAG_DONE;
                    384:        g = CreateGadgetA(INTEGER_KIND, g, &ng, (struct TagItem *)&drawtags);
                    385:        
                    386:        newwindow.FirstGadget = glist;
                    387:        newwindow.Screen = scr;             /* Store screen ptr */
                    388:        window = OpenWindow( &newwindow );
                    389:        if (!window)
                    390:         return(0);
                    391: 
                    392: /* Draw texts etc... */
                    393:        Move(window->RPort, 10, offy + 35 + 10);
                    394:        Text(window->RPort, (UBYTE *)"DF0:", 4);
                    395:        Move(window->RPort, 10, offy + 53 + 10);
                    396:        Text(window->RPort, (UBYTE *)"DF1:", 4);
                    397:        Move(window->RPort, 10, offy + 70 + 10);
                    398:        Text(window->RPort, (UBYTE *)"DF2:", 4);
                    399:        Move(window->RPort, 10, offy + 87 + 10);
                    400:        Text(window->RPort, (UBYTE *)"DF3:", 4);
                    401: 
                    402:        drawtags[0] = (GT_VisualInfo);
                    403:        drawtags[1] = (ULONG)VisInfo;
                    404:        drawtags[2] = GTBB_Recessed;
                    405:        drawtags[3] = 1;
                    406:        drawtags[4] = TAG_DONE;
                    407:        
                    408:        DrawBevelBoxA(window->RPort, 5, offy + 34, 
                    409:                     390, 17, (struct TagItem *)&drawtags);
                    410:        DrawBevelBoxA(window->RPort, 5, offy + 52,
                    411:                     390, 17, (struct TagItem *)&drawtags);
                    412:        DrawBevelBoxA(window->RPort, 5, offy + 69,
                    413:                     390, 17, (struct TagItem *)&drawtags);
                    414:        DrawBevelBoxA(window->RPort, 5, offy + 86,
                    415:                     390, 17, (struct TagItem *)&drawtags);
                    416: 
                    417:        print_drive_status();
                    418: 
                    419:        UnlockPubScreen(NULL, scr);
                    420:        return(1);
                    421: }
                    422: 
                    423: void print_drive_status(void)
                    424: {
                    425:        char     empty[80];
                    426:        int      len;
                    427:        UWORD    offy = scr->WBorTop + scr->RastPort.TxHeight + 1;
                    428:        
                    429:        for(len=0;len<80;len++) 
                    430:         empty[len] = ' ';
                    431:        empty[79] = '\0';
                    432:        
                    433:        Move(window->RPort, 42, offy + 45);
                    434:        if (config.disk_in_df0) {
                    435:              len = strlen( config.df0_name );
                    436:              if (len > MAX_DRV_NAME)
                    437:                len = MAX_DRV_NAME;
                    438:              Text(window->RPort, (UBYTE *)config.df0_name, len);
                    439:        } else {
                    440:              Text(window->RPort, (UBYTE *)empty, MAX_DRV_NAME);
                    441:        }
                    442:        
                    443:        Move(window->RPort, 42, offy + 63);
                    444:        if (config.disk_in_df1) {
                    445:              len = strlen( config.df1_name );
                    446:              if (len > MAX_DRV_NAME)
                    447:                len = MAX_DRV_NAME;
                    448:              Text(window->RPort, (UBYTE *)config.df1_name, len);
                    449:        } else {
                    450:              Text(window->RPort, (UBYTE *)empty, MAX_DRV_NAME);
                    451:        }
                    452:        
                    453:        Move(window->RPort, 42, offy + 80);
                    454:        if (config.disk_in_df2) {
                    455:              len = strlen( config.df2_name );
                    456:              if (len > MAX_DRV_NAME)
                    457:                len = MAX_DRV_NAME;
                    458:              Text(window->RPort, (UBYTE *)config.df2_name, len);
                    459:        } else {
                    460:              Text(window->RPort, (UBYTE *)empty, MAX_DRV_NAME);
                    461:        }
                    462:        
                    463:        Move(window->RPort, 42, offy + 97);
                    464:        if (config.disk_in_df3) {
                    465:              len = strlen( config.df3_name );
                    466:              if (len > MAX_DRV_NAME)
                    467:                len = MAX_DRV_NAME;
                    468:              Text(window->RPort, (UBYTE *)config.df3_name, len);
                    469:        } else {
                    470:              Text(window->RPort, (UBYTE *)empty, MAX_DRV_NAME);
                    471:        }
                    472: }
                    473: 
                    474: 
                    475: 

unix.superglobalmegacorp.com

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