--- uae/amiga/source/uae-control.c 2018/04/24 16:38:39 1.1 +++ uae/amiga/source/uae-control.c 2018/04/24 16:39:43 1.1.1.2 @@ -1,475 +1,563 @@ /*********************************************************** - * UAE - The U*nix Amiga Emulator * - * * - * UAE-Control -- Emulator Control from Inside Emulation * - * (c) 1996 Tauno Taipaleenmaki * - * * - * Version 0.1 * - * * - * Requires V36 or higher. Compiled with SAS/C 6.5 * - * * - * People with KS1.3 or lower should use the command line * - * version "uaectrl" * - ***********************************************************/ +* UAE - The U*nix Amiga Emulator * +* * +* UAE-Control - Emulator control from inside emulation * +* (c) 1996 Tauno Taipaleenmaki * +* (c) 1998 Cloanto * +* * +* Version 1.1 * +* * +* Requires Amiga OS v. 36 or higher. Compiled with SAS/C * +* * +* Users with KS 1.3 or below should use the command line * +* version "uaectrl" * +***********************************************************/ + +#define VERSION_STRING "\0$VER: UAE-Control 1.1" +#define VERSION_SHELL " UAE-Control v. 1.1\n © 1996 Tauno Taipaleenmaki, © 1998 Cloanto\n\n" + +#include +#ifndef _DCC #include #include #include #include -#include -#include -#include +#include +#else +#include +#include +#include +#include +#include +#endif +#include #include #include -#include "uae-control.h" +#include "UAE-Control.h" #include "uae_pragmas.h" -#define MAX_DRV_NAME 20 +#define MAX_DRV_NAME 25 - struct Library *ReqBase; - struct Library *UaeBase; - struct Window *window; - struct Screen *scr; - struct Gadget *glist; - APTR VisInfo; - -struct UAE_CONFIG config; - -struct TextAttr topaz8 = { - ( STRPTR )"topaz.font", 8, 0x00, 0x01 }; - -struct NewWindow newwindow = { - 20,20, 400,160, 0,1, - IDCMP_CLOSEWINDOW | BUTTONIDCMP | CYCLEIDCMP | INTEGERIDCMP, - WFLG_DRAGBAR | WFLG_CLOSEGADGET | WFLG_ACTIVATE | WFLG_DEPTHGADGET, - NULL,NULL,(UBYTE *)"UAE-Control v0.1",NULL,NULL, - 0,0,0,0, CUSTOMSCREEN +struct Window *window; +struct Screen *scr; +struct Gadget *glist; +APTR VisInfo; +struct UAE_CONFIG config; + +UBYTE *version_string = VERSION_STRING; + +struct TextAttr topaz8 = +{ + (STRPTR) "topaz.font", 8, 0x00, 0x01 +}; + +struct NewWindow newwindow = +{ + 0, 0, 0, 0, 0, 1, +IDCMP_CLOSEWINDOW | BUTTONIDCMP | CYCLEIDCMP | INTEGERIDCMP | STRINGIDCMP, + WFLG_DRAGBAR | WFLG_CLOSEGADGET | WFLG_ACTIVATE | WFLG_DEPTHGADGET, + NULL, NULL, NULL, NULL, NULL, + 0, 0, 0, 0, CUSTOMSCREEN }; int setup_window(void); void quit_program(int error, char *text); void print_drive_status(void); +BOOL get_string(UBYTE * buff, LONG max_len); + -/************************************ - * Main program * - ************************************/ +/***************************************** +* Main program * +*****************************************/ int main() { - int quit = 0,i; - struct IntuiMessage *msg; - struct Gadget *button; - struct StringInfo *strinfo; - char buf[257]; - UWORD koodi, msgID; - ULONG classi, number; - APTR address; - ULONG CycleTags[3]; - - CycleTags[0] = GTCY_Active; - CycleTags[1] = (ULONG)&number; - CycleTags[2] = TAG_DONE; - - ReqBase = OpenLibrary("reqtools.library",0); - if (!ReqBase) { - quit_program(1, "Reqtools.library needed!"); - return(1); - } - UaeBase = OpenLibrary("uae.library",0); - if (!UaeBase) { - UaeBase = OpenLibrary("uae.library",0); - if (!UaeBase) { - quit_program(1, "Emulator not running or uae.library not installed.\n"); - return(1); - } - } -/* Read UAE configuration */ - i = GetUaeConfig( &config ); - - i = setup_window(); - if (i == 0) { - quit_program(1, "Cannot setup a window!"); - return(1); - } - while( quit == 0 ) { - WaitPort(window->UserPort); - while( msg = (struct IntuiMessage *)GT_GetIMsg(window->UserPort)) - { - classi = msg->Class; - koodi = msg->Code; - address = msg->IAddress; - if (classi == IDCMP_GADGETUP) { - msgID = ((struct Gadget *)msg->IAddress)->GadgetID; - button = (struct Gadget *)msg->IAddress; - if (button->SpecialInfo) { - strinfo = (struct StringInfo *)button->SpecialInfo; - } - } else - msgID = msg->Code; - - GT_ReplyIMsg((struct IntuiMessage *)msg); - - switch( classi ) { - case IDCMP_CLOSEWINDOW: - quit = 1; - break; - case IDCMP_GADGETUP: - switch( msgID ) { - case GAD_EXITEMU: - ExitEmu(); - break; - case GAD_EJECT_DF0: - EjectDisk(0); - GetUaeConfig( &config ); - print_drive_status(); - break; - case GAD_EJECT_DF1: - EjectDisk(1); - GetUaeConfig( &config ); - print_drive_status(); - break; - case GAD_EJECT_DF2: - EjectDisk(2); - GetUaeConfig( &config ); - print_drive_status(); - break; - case GAD_EJECT_DF3: - EjectDisk(3); - GetUaeConfig( &config ); - print_drive_status(); - break; - case GAD_SOUND: - if (config.do_output_sound) { - DisableSound(); - } else { - EnableSound(); - } - GetUaeConfig( &config ); - break; - case GAD_JOYSTICK: - if (config.do_fake_joystick) { - DisableJoystick(); - } else { - EnableJoystick(); - } - GetUaeConfig( &config ); - break; - case GAD_FRAMERATE: - SetFrameRate( strinfo->LongInt ); - GetUaeConfig( &config ); - break; - case GAD_INSERT_DF0: - i = rtGetStringA( (UBYTE *)&buf, 255, - (UBYTE *)"Disk-file name:", - NULL, TAG_DONE); - if (i) { - InsertDisk((UBYTE *)&buf, 0); - GetUaeConfig( &config ); - print_drive_status(); - } - break; - case GAD_INSERT_DF1: - i = rtGetStringA( (UBYTE *)&buf, 255, - (UBYTE *)"Disk-file name:", - NULL, TAG_DONE); - if (i) { - InsertDisk((UBYTE *)&buf, 1); - GetUaeConfig( &config ); - print_drive_status(); - } - break; - case GAD_INSERT_DF2: - i = rtGetStringA( (UBYTE *)&buf, 255, - (UBYTE *)"Disk-file name:", - NULL, TAG_DONE); - if (i) { - InsertDisk((UBYTE *)&buf, 2); - GetUaeConfig( &config ); - print_drive_status(); - } - break; - case GAD_INSERT_DF3: - i = rtGetStringA( (UBYTE *)&buf, 255, - (UBYTE *)"Disk-file name:", - NULL, TAG_DONE); - if (i) { - InsertDisk((UBYTE *)&buf, 3); - GetUaeConfig( &config ); - print_drive_status(); - } - break; - case GAD_LANGUAGE: - number = config.keyboard; - number++; - if (number == 5) - number = 0; - ChangeLanguage( number ); - GetUaeConfig( &config ); - break; - case GAD_RESET: - ColdReboot(); - break; - case GAD_DEBUG: - DebugFunc(); - break; - default: - break; - } - break; - default: - break; - } + int quit = 0, i; + struct IntuiMessage *msg; + struct Gadget *button; + struct StringInfo *strinfo; + char buf[257]; + UWORD koodi, msgID; + ULONG classi, number; + APTR address; + ULONG CycleTags[3]; + + CycleTags[0] = GTCY_Active; + CycleTags[1] = (ULONG) & number; + CycleTags[2] = TAG_DONE; + + /* Read UAE configuration */ + i = GetUaeConfig(&config); + i = setup_window(); + if (i == 0) { + quit_program(1, "Cannot setup a window!"); + return 1; + } + while (quit == 0) { + WaitPort(window->UserPort); + while (msg = (struct IntuiMessage *) GT_GetIMsg(window->UserPort)) { + classi = msg->Class; + koodi = msg->Code; + address = msg->IAddress; + if (classi == IDCMP_GADGETUP) { + msgID = ((struct Gadget *) msg->IAddress)->GadgetID; + button = (struct Gadget *) msg->IAddress; + if (button->SpecialInfo) { + strinfo = (struct StringInfo *) button->SpecialInfo; } - } - quit_program(0, ""); - return(0); + } else + msgID = msg->Code; + + GT_ReplyIMsg((struct IntuiMessage *) msg); + switch (classi) { + case IDCMP_CLOSEWINDOW: + quit = 1; + break; + case IDCMP_GADGETUP: + switch (msgID) { + case GAD_EXITEMU: + ExitEmu(); + break; + case GAD_EJECT_DF0: + EjectDisk(0); + Delay(30); + GetUaeConfig(&config); + print_drive_status(); + break; + case GAD_EJECT_DF1: + EjectDisk(1); + Delay(30); + GetUaeConfig(&config); + print_drive_status(); + break; + case GAD_EJECT_DF2: + EjectDisk(2); + Delay(30); + GetUaeConfig(&config); + print_drive_status(); + break; + case GAD_EJECT_DF3: + EjectDisk(3); + Delay(30); + GetUaeConfig(&config); + print_drive_status(); + break; + case GAD_SOUND: + if (config.do_output_sound) + DisableSound(); + else + EnableSound(); + + Delay(30); + GetUaeConfig(&config); + break; + case GAD_JOYSTICK: + if (config.do_fake_joystick) + DisableJoystick(); + else + EnableJoystick(); + + Delay(30); + GetUaeConfig(&config); + break; + case GAD_FRAMERATE: + SetFrameRate(strinfo->LongInt); + Delay(30); + GetUaeConfig(&config); + break; + case GAD_INSERT_DF0: + strcpy(buf, config.df0_name); + if (get_string(buf, 255)) { + InsertDisk((UBYTE *) buf, 0); + Delay(30); + GetUaeConfig(&config); + print_drive_status(); + } + break; + case GAD_INSERT_DF1: + strcpy(buf, config.df1_name); + if (get_string(buf, 255)) { + InsertDisk((UBYTE *) buf, 1); + Delay(30); + GetUaeConfig(&config); + print_drive_status(); + } + break; + case GAD_INSERT_DF2: + strcpy(buf, config.df2_name); + if (get_string(buf, 255)) { + InsertDisk((UBYTE *) buf, 2); + Delay(30); + GetUaeConfig(&config); + print_drive_status(); + } + break; + case GAD_INSERT_DF3: + strcpy(buf, config.df3_name); + if (get_string(buf, 255)) { + InsertDisk((UBYTE *) buf, 3); + Delay(30); + GetUaeConfig(&config); + print_drive_status(); + } + break; + case GAD_LANGUAGE: + number = config.keyboard; + number++; + if (number == 5) + number = 0; + ChangeLanguage(number); + Delay(30); + GetUaeConfig(&config); + break; + case GAD_RESET: + ColdReboot(); + break; + case GAD_DEBUG: + DebugFunc(); + break; + default: + break; + } + break; + default: + break; + } + } + } + quit_program(0, ""); + return (0); } -/****************************************** - * Quits the program * - ******************************************/ +/***************************************** +* Quits the program * +*****************************************/ void quit_program(int error, char *text) { - if (error > 0) { - printf(" UAE-Control v0.1\n"); - printf(" (c)1996 Tauno Taipaleenmaki\n\n"); - printf(" ERROR: %s\n", text); - } - if (scr) - UnlockPubScreen(NULL, scr); - if (window) - CloseWindow( window ); - if (VisInfo) - FreeVisualInfo( VisInfo ); - if (glist) - FreeGadgets( glist ); - if (ReqBase) - CloseLibrary( ReqBase ); - if (UaeBase) - CloseLibrary( UaeBase ); + if (error > 0) { + printf(VERSION_SHELL); + printf(" ERROR: %s\n", text); + } + if (scr) + UnlockPubScreen(NULL, scr); + if (window) + CloseWindow(window); + if (VisInfo) + FreeVisualInfo(VisInfo); + if (glist) + FreeGadgets(glist); } - -/****************************************** - * Opens up the window & sets the gadgets * - ******************************************/ +/***************************************** +* Opens up the window & sets the gadgets * +*****************************************/ int setup_window(void) { - struct Gadget *g; - struct NewGadget ng; - UWORD offy; - ULONG drawtags[20]; - - static const char *keyb_langs[] = - { - "US", - "DE", - "SE", - "FR", - "IT", - NULL - }; - - scr = LockPubScreen(NULL); - if (!scr) - return(0); - - VisInfo = GetVisualInfo( scr, TAG_DONE ); - if (!VisInfo) - return(0); - - offy = scr->WBorTop + scr->RastPort.TxHeight + 1; - -/* Create buttons */ - g = CreateContext( &glist ); - if (!g) - return(0); - - ng.ng_TextAttr = &topaz8; - ng.ng_VisualInfo = VisInfo; - ng.ng_Flags = PLACETEXT_IN; - ng.ng_LeftEdge = 10; ng.ng_TopEdge = offy + 10; - ng.ng_Width = 90; ng.ng_Height = 15; - ng.ng_GadgetText = (UBYTE *)"Hard reset"; - ng.ng_GadgetID = GAD_RESET; - g = CreateGadgetA(BUTTON_KIND, g, &ng, TAG_DONE); - - ng.ng_LeftEdge = 102; ng.ng_Width = 50; - ng.ng_GadgetText = (UBYTE *)"Debug"; - ng.ng_GadgetID = GAD_DEBUG; - g = CreateGadgetA(BUTTON_KIND, g, &ng, TAG_DONE); - - ng.ng_LeftEdge = 153; ng.ng_Width = 50; - ng.ng_GadgetText = (UBYTE *)"Exit"; - ng.ng_GadgetID = GAD_EXITEMU; - g = CreateGadgetA(BUTTON_KIND, g, &ng, TAG_DONE); - -/* Eject buttons */ - ng.ng_LeftEdge = 250; ng.ng_Width = 70; - ng.ng_TopEdge = offy + 35; - ng.ng_GadgetID = GAD_EJECT_DF0; - ng.ng_GadgetText = (UBYTE *)"Eject"; - g = CreateGadgetA(BUTTON_KIND, g, &ng, TAG_DONE); - ng.ng_TopEdge = offy + 53; - ng.ng_GadgetID = GAD_EJECT_DF1; - g = CreateGadgetA(BUTTON_KIND, g, &ng, TAG_DONE); - ng.ng_TopEdge = offy + 70; - ng.ng_GadgetID = GAD_EJECT_DF2; - g = CreateGadgetA(BUTTON_KIND, g, &ng, TAG_DONE); - ng.ng_TopEdge = offy + 87; - ng.ng_GadgetID = GAD_EJECT_DF3; - g = CreateGadgetA(BUTTON_KIND, g, &ng, TAG_DONE); - -/* Insert buttons */ - ng.ng_LeftEdge = 321; ng.ng_TopEdge = offy + 35; - ng.ng_GadgetID = GAD_INSERT_DF0; - ng.ng_GadgetText = (UBYTE *)"Insert"; - g = CreateGadgetA(BUTTON_KIND, g, &ng, TAG_DONE); - ng.ng_TopEdge = offy + 53; - ng.ng_GadgetID = GAD_INSERT_DF1; - g = CreateGadgetA(BUTTON_KIND, g, &ng, TAG_DONE); - ng.ng_TopEdge = offy + 70; - ng.ng_GadgetID = GAD_INSERT_DF2; - g = CreateGadgetA(BUTTON_KIND, g, &ng, TAG_DONE); - ng.ng_TopEdge = offy + 87; - ng.ng_GadgetID = GAD_INSERT_DF3; - g = CreateGadgetA(BUTTON_KIND, g, &ng, TAG_DONE); - -/* Sound & Joystick buttons */ - - ng.ng_LeftEdge = 120; - ng.ng_TopEdge = 120; - ng.ng_GadgetID = GAD_SOUND; - ng.ng_GadgetText = (UBYTE *)"Sound"; - ng.ng_Flags = PLACETEXT_LEFT; - if (config.do_output_sound) { - drawtags[0] = GTCB_Checked; - drawtags[1] = 1; - drawtags[2] = TAG_DONE; - } else { - drawtags[0] = TAG_DONE; - } - g = CreateGadgetA(CHECKBOX_KIND, g, &ng,(struct TagItem *)&drawtags); - - ng.ng_TopEdge = 135; - ng.ng_GadgetID = GAD_JOYSTICK; - ng.ng_GadgetText = (UBYTE *)"Fake Joystick"; - if (config.do_fake_joystick) { - drawtags[0] = GTCB_Checked; - drawtags[1] = 1; - drawtags[2] = TAG_DONE; - } else { - drawtags[0] = TAG_DONE; - } - g = CreateGadgetA(CHECKBOX_KIND, g, &ng, (struct TagItem *)&drawtags); - - ng.ng_TopEdge = 130; - ng.ng_LeftEdge = 160; - ng.ng_GadgetID = GAD_LANGUAGE; - ng.ng_GadgetText = (UBYTE *)"Language"; - ng.ng_Flags = PLACETEXT_ABOVE; - drawtags[0] = GTCY_Labels; - drawtags[1] = (ULONG)keyb_langs; - drawtags[2] = GTCY_Active; - drawtags[3] = config.keyboard; - drawtags[4] = TAG_DONE; - g = CreateGadgetA(CYCLE_KIND, g, &ng, (struct TagItem *)&drawtags); - - ng.ng_TopEdge = 130; - ng.ng_LeftEdge = 250; - ng.ng_GadgetID = GAD_FRAMERATE; - ng.ng_GadgetText = (UBYTE *)"Framerate"; - ng.ng_Flags = PLACETEXT_ABOVE; - drawtags[0] = GTIN_Number; - drawtags[1] = config.framerate; - drawtags[2] = TAG_DONE; - g = CreateGadgetA(INTEGER_KIND, g, &ng, (struct TagItem *)&drawtags); - - newwindow.FirstGadget = glist; - newwindow.Screen = scr; /* Store screen ptr */ - window = OpenWindow( &newwindow ); - if (!window) - return(0); - -/* Draw texts etc... */ - Move(window->RPort, 10, offy + 35 + 10); - Text(window->RPort, (UBYTE *)"DF0:", 4); - Move(window->RPort, 10, offy + 53 + 10); - Text(window->RPort, (UBYTE *)"DF1:", 4); - Move(window->RPort, 10, offy + 70 + 10); - Text(window->RPort, (UBYTE *)"DF2:", 4); - Move(window->RPort, 10, offy + 87 + 10); - Text(window->RPort, (UBYTE *)"DF3:", 4); - - drawtags[0] = (GT_VisualInfo); - drawtags[1] = (ULONG)VisInfo; - drawtags[2] = GTBB_Recessed; - drawtags[3] = 1; - drawtags[4] = TAG_DONE; - - DrawBevelBoxA(window->RPort, 5, offy + 34, - 390, 17, (struct TagItem *)&drawtags); - DrawBevelBoxA(window->RPort, 5, offy + 52, - 390, 17, (struct TagItem *)&drawtags); - DrawBevelBoxA(window->RPort, 5, offy + 69, - 390, 17, (struct TagItem *)&drawtags); - DrawBevelBoxA(window->RPort, 5, offy + 86, - 390, 17, (struct TagItem *)&drawtags); + struct Gadget *g; + struct NewGadget ng; + UWORD offy; + ULONG drawtags[20]; + static const char *keyb_langs[] = + { + "US", + "DE", + "SE", + "FR", + "IT", + NULL + }; + scr = LockPubScreen(NULL); + if (!scr) + return (0); + VisInfo = GetVisualInfo(scr, TAG_DONE); + if (!VisInfo) + return (0); + offy = scr->WBorTop + scr->RastPort.TxHeight + 1; + + /* Create buttons */ + g = CreateContext(&glist); + if (!g) + return (0); + + ng.ng_TextAttr = &topaz8; + ng.ng_VisualInfo = VisInfo; + ng.ng_Flags = PLACETEXT_IN; + ng.ng_LeftEdge = 284; + ng.ng_TopEdge = offy + 86; + ng.ng_Width = 96; + ng.ng_Height = 15; + ng.ng_GadgetText = (UBYTE *) "Hard Reset"; + ng.ng_GadgetID = GAD_RESET; + g = CreateGadget(BUTTON_KIND, g, &ng, TAG_DONE); + + ng.ng_TopEdge = offy + 105; + ng.ng_GadgetText = (UBYTE *) "Debug"; + ng.ng_GadgetID = GAD_DEBUG; + g = CreateGadget(BUTTON_KIND, g, &ng, TAG_DONE); + + ng.ng_TopEdge = offy + 135; + ng.ng_GadgetText = (UBYTE *) "Quit UAE"; + ng.ng_GadgetID = GAD_EXITEMU; + g = CreateGadget(BUTTON_KIND, g, &ng, TAG_DONE); + + /* Eject buttons */ + ng.ng_LeftEdge = 262; + ng.ng_TopEdge = offy + 11; + ng.ng_Width = 70; + ng.ng_GadgetID = GAD_EJECT_DF0; + ng.ng_GadgetText = (UBYTE *) "Eject"; + g = CreateGadget(BUTTON_KIND, g, &ng, TAG_DONE); + + ng.ng_TopEdge = offy + 28; + ng.ng_GadgetID = GAD_EJECT_DF1; + g = CreateGadget(BUTTON_KIND, g, &ng, TAG_DONE); + + ng.ng_TopEdge = offy + 45; + ng.ng_GadgetID = GAD_EJECT_DF2; + g = CreateGadget(BUTTON_KIND, g, &ng, TAG_DONE); + + ng.ng_TopEdge = offy + 62; + ng.ng_GadgetID = GAD_EJECT_DF3; + g = CreateGadget(BUTTON_KIND, g, &ng, TAG_DONE); + + /* Insert buttons */ + ng.ng_LeftEdge = 332; + ng.ng_TopEdge = offy + 11; + ng.ng_GadgetID = GAD_INSERT_DF0; + ng.ng_GadgetText = (UBYTE *) "Insert"; + g = CreateGadget(BUTTON_KIND, g, &ng, TAG_DONE); + + ng.ng_TopEdge = offy + 28; + ng.ng_GadgetID = GAD_INSERT_DF1; + g = CreateGadget(BUTTON_KIND, g, &ng, TAG_DONE); + + ng.ng_TopEdge = offy + 45; + ng.ng_GadgetID = GAD_INSERT_DF2; + g = CreateGadget(BUTTON_KIND, g, &ng, TAG_DONE); + + ng.ng_TopEdge = offy + 62; + ng.ng_GadgetID = GAD_INSERT_DF3; + g = CreateGadget(BUTTON_KIND, g, &ng, TAG_DONE); + + /* Sound & Joystick buttons */ + ng.ng_LeftEdge = 133; + ng.ng_TopEdge = 97; + ng.ng_GadgetID = GAD_SOUND; + ng.ng_GadgetText = (UBYTE *) "Sound:"; + ng.ng_Flags = PLACETEXT_LEFT; + g = CreateGadget(CHECKBOX_KIND, g, &ng, GTCB_Checked, config.do_output_sound ? 1 : 0, TAG_DONE); + + ng.ng_TopEdge = 114; + ng.ng_GadgetID = GAD_JOYSTICK; + ng.ng_GadgetText = (UBYTE *) "Fake Joystick:"; + g = CreateGadget(CHECKBOX_KIND, g, &ng, GTCB_Checked, config.do_fake_joystick ? 1 : 0, TAG_DONE); + + ng.ng_TopEdge = 129; + ng.ng_GadgetID = GAD_LANGUAGE; + ng.ng_GadgetText = (UBYTE *) "Language:"; + g = CreateGadget(CYCLE_KIND, g, &ng, + GTCY_Labels, (ULONG) keyb_langs, + GTCY_Active, config.keyboard, + TAG_DONE); + + ng.ng_TopEdge = 146; + ng.ng_GadgetID = GAD_FRAMERATE; + ng.ng_GadgetText = (UBYTE *) "Framerate:"; + g = CreateGadget(INTEGER_KIND, g, &ng, GTIN_Number, config.framerate, TAG_DONE); + + newwindow.Title = "UAE-Control"; + newwindow.Width = 419; + newwindow.Height = 171; + newwindow.LeftEdge = 20; + newwindow.TopEdge = 20; + newwindow.FirstGadget = glist; + newwindow.Screen = scr; /* Store screen ptr */ + window = OpenWindow(&newwindow); + if (!window) + return (0); + + /* Draw texts etc... */ + SetAPen(window->RPort, 1); + SetDrMd(window->RPort, JAM2); + Move(window->RPort, 19, offy + 11 + 10); + Text(window->RPort, (UBYTE *) "DF0:", 4); + Move(window->RPort, 19, offy + 28 + 10); + Text(window->RPort, (UBYTE *) "DF1:", 4); + Move(window->RPort, 19, offy + 45 + 10); + Text(window->RPort, (UBYTE *) "DF2:", 4); + Move(window->RPort, 19, offy + 62 + 10); + Text(window->RPort, (UBYTE *) "DF3:", 4); + + drawtags[0] = GT_VisualInfo; + drawtags[1] = (ULONG) VisInfo; + drawtags[2] = GTBB_Recessed; + drawtags[3] = 1; + drawtags[4] = TAG_DONE; + DrawBevelBoxA(window->RPort, 14, offy + 10, 390, 17, (struct TagItem *) &drawtags); + DrawBevelBoxA(window->RPort, 14, offy + 27, 390, 17, (struct TagItem *) &drawtags); + DrawBevelBoxA(window->RPort, 14, offy + 44, 390, 17, (struct TagItem *) &drawtags); + DrawBevelBoxA(window->RPort, 14, offy + 61, 390, 17, (struct TagItem *) &drawtags); - print_drive_status(); + print_drive_status(); - UnlockPubScreen(NULL, scr); - return(1); + return (1); } void print_drive_status(void) { - char empty[80]; - int len; - UWORD offy = scr->WBorTop + scr->RastPort.TxHeight + 1; - - for(len=0;len<80;len++) - empty[len] = ' '; - empty[79] = '\0'; - - Move(window->RPort, 42, offy + 45); - if (config.disk_in_df0) { - len = strlen( config.df0_name ); - if (len > MAX_DRV_NAME) - len = MAX_DRV_NAME; - Text(window->RPort, (UBYTE *)config.df0_name, len); - } else { - Text(window->RPort, (UBYTE *)empty, MAX_DRV_NAME); - } - - Move(window->RPort, 42, offy + 63); - if (config.disk_in_df1) { - len = strlen( config.df1_name ); - if (len > MAX_DRV_NAME) - len = MAX_DRV_NAME; - Text(window->RPort, (UBYTE *)config.df1_name, len); - } else { - Text(window->RPort, (UBYTE *)empty, MAX_DRV_NAME); - } - - Move(window->RPort, 42, offy + 80); - if (config.disk_in_df2) { - len = strlen( config.df2_name ); - if (len > MAX_DRV_NAME) - len = MAX_DRV_NAME; - Text(window->RPort, (UBYTE *)config.df2_name, len); - } else { - Text(window->RPort, (UBYTE *)empty, MAX_DRV_NAME); - } - - Move(window->RPort, 42, offy + 97); - if (config.disk_in_df3) { - len = strlen( config.df3_name ); - if (len > MAX_DRV_NAME) - len = MAX_DRV_NAME; - Text(window->RPort, (UBYTE *)config.df3_name, len); - } else { - Text(window->RPort, (UBYTE *)empty, MAX_DRV_NAME); - } + char empty[80]; + int len; + UWORD offy = scr->WBorTop + scr->RastPort.TxHeight + 1; + + for (len = 0; len < 80; len++) + empty[len] = ' '; + empty[79] = '\0'; + + SetAPen(window->RPort, 1); + SetDrMd(window->RPort, JAM2); + + Move(window->RPort, 59, offy + 11 + 10); + if (config.disk_in_df0) { + len = strlen(config.df0_name); + if (len > MAX_DRV_NAME) + len = MAX_DRV_NAME; + Text(window->RPort, (UBYTE *) config.df0_name, len); + } else { + Text(window->RPort, (UBYTE *) empty, MAX_DRV_NAME); + } + Move(window->RPort, 59, offy + 28 + 10); + if (config.disk_in_df1) { + len = strlen(config.df1_name); + if (len > MAX_DRV_NAME) + len = MAX_DRV_NAME; + Text(window->RPort, (UBYTE *) config.df1_name, len); + } else { + Text(window->RPort, (UBYTE *) empty, MAX_DRV_NAME); + } + Move(window->RPort, 59, offy + 45 + 10); + if (config.disk_in_df2) { + len = strlen(config.df2_name); + if (len > MAX_DRV_NAME) + len = MAX_DRV_NAME; + Text(window->RPort, (UBYTE *) config.df2_name, len); + } else { + Text(window->RPort, (UBYTE *) empty, MAX_DRV_NAME); + } + Move(window->RPort, 59, offy + 62 + 10); + if (config.disk_in_df3) { + len = strlen(config.df3_name); + if (len > MAX_DRV_NAME) + len = MAX_DRV_NAME; + Text(window->RPort, (UBYTE *) config.df3_name, len); + } else { + Text(window->RPort, (UBYTE *) empty, MAX_DRV_NAME); + } } +BOOL +get_string(UBYTE * buff, LONG max_len) +{ + struct Gadget *g, *sg; + struct NewGadget ng; + struct Gadget *gl; + struct Window *win; + struct IntuiMessage *msg; + struct StringInfo *strinfo; + UWORD koodi, msgID; + ULONG classi; + APTR address; + UWORD offy; + BOOL quit, ok; + + g = CreateContext(&gl); + if (!g) + return FALSE; + + offy = scr->WBorTop + scr->RastPort.TxHeight + 1; + + ng.ng_TextAttr = &topaz8; + ng.ng_VisualInfo = VisInfo; + ng.ng_Flags = PLACETEXT_IN; + ng.ng_LeftEdge = 14; + ng.ng_TopEdge = offy + 34; + ng.ng_Width = 90; + ng.ng_Height = 15; + ng.ng_GadgetText = (UBYTE *) "OK"; + ng.ng_GadgetID = GAD_OK; + g = CreateGadget(BUTTON_KIND, g, &ng, TAG_DONE); + + ng.ng_LeftEdge = 246; + ng.ng_TopEdge = offy + 34; + ng.ng_GadgetText = (UBYTE *) "Cancel"; + ng.ng_GadgetID = GAD_CANCEL; + g = CreateGadget(BUTTON_KIND, g, &ng, TAG_DONE); + + ng.ng_LeftEdge = 14; + ng.ng_TopEdge = offy + 10; + ng.ng_Width = 322; + ng.ng_Height = 15; + ng.ng_GadgetText = NULL; + ng.ng_GadgetID = GAD_STRING; + sg = CreateGadget(STRING_KIND, g, &ng, + GTST_String, buff, + GTST_MaxChars, max_len, + TAG_DONE); + strinfo = (struct StringInfo *) sg->SpecialInfo; + ok = FALSE; + + newwindow.Title = "Amiga Disk File"; + newwindow.Width = 350; + newwindow.Height = 65; + newwindow.FirstGadget = gl; + newwindow.Screen = scr; + + newwindow.LeftEdge = scr->MouseX - (newwindow.Width / 2); + if (newwindow.LeftEdge + newwindow.Width > scr->Width) + newwindow.LeftEdge = scr->Width - newwindow.Width; + + newwindow.TopEdge = scr->MouseY - (newwindow.Height / 2); + if (newwindow.TopEdge + newwindow.Height > scr->Height) + newwindow.TopEdge = scr->Height - newwindow.Height; + + win = OpenWindow(&newwindow); + if (win) { + ActivateGadget(sg, win, NULL); + quit = FALSE; + while (!quit) { + WaitPort(win->UserPort); + while (msg = (struct IntuiMessage *) GT_GetIMsg(win->UserPort)) { + classi = msg->Class; + koodi = msg->Code; + address = msg->IAddress; + if (classi == IDCMP_GADGETUP) + msgID = ((struct Gadget *) msg->IAddress)->GadgetID; + else + msgID = msg->Code; + + GT_ReplyIMsg((struct IntuiMessage *) msg); + switch (classi) { + case IDCMP_CLOSEWINDOW: + quit = TRUE; + break; + case IDCMP_GADGETUP: + switch (msgID) { + case GAD_CANCEL: + quit = TRUE; + break; + case GAD_OK: + case GAD_STRING: + strcpy(buff, strinfo->Buffer); + quit = ok = TRUE; + break; + } + break; + default: + break; + } + } + } + CloseWindow(win); + } + FreeGadgets(gl); - + return ok; +}