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

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

unix.superglobalmegacorp.com

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