]> git.sesse.net Git - pistorm/blobdiff - platforms/amiga/pistorm-dev/pistorm_dev_amiga/gui_interact.c
Fix font rendering issue in GUI
[pistorm] / platforms / amiga / pistorm-dev / pistorm_dev_amiga / gui_interact.c
index 668e27d3b05e350df883a418397b4d515f60e277..b18a556424efa15545de840ce4024305f2767f8a 100644 (file)
 extern unsigned int pistorm_base_addr;
 struct ReqToolsBase *ReqToolsBase;
 
-#define VERSION "v0.2"
+#define VERSION "v0.3.4"
 
 #define button1w 54
-#define button1h 20
+#define button1h 11
 
 #define button2w 87
-#define button2h 20
+#define button2h 11
 
 #define button3w 100
-#define button3h 20
+#define button3h 11
 
 #define tbox1w 130
-#define tbox1h 18
+#define tbox1h 10
+
+#define tbox2w 132
+#define tbox2h 12
 
 #define statusbarw 507
 #define statusbarh 10
 
+struct TextAttr font =
+{
+        "topaz.font",
+        8,
+        FS_NORMAL,
+        0
+};
+
 SHORT SharedBordersPairs0[] =
 {
     0, 0, 0, button1h - 1, 1, button1h - 2, 1, 0, button1w - 2, 0
@@ -80,11 +91,11 @@ SHORT SharedBordersPairs8[] =
 
 SHORT SharedBordersPairs9[] =
 {
-    0, 0, 0, tbox1h - 1, 1, tbox1h - 2, 1, 0, tbox1w - 2, 0
+    0, 0, 0, tbox2h - 1, 1, tbox2h - 2, 1, 0, tbox2w - 2, 0
 };
 SHORT SharedBordersPairs10[] =
 {
-    1, tbox1h - 1, tbox1w - 2, tbox1h - 1, tbox1w - 2, 1, tbox1w - 1, 0, tbox1w - 1, tbox1h - 1
+    1, tbox2h - 1, tbox2w - 2, tbox2h - 1, tbox2w - 2, 1, tbox2w - 1, 0, tbox2w - 1, tbox2h - 1
 };
 
 
@@ -115,19 +126,79 @@ struct Border SharedBordersInvert[] =
     0, 0, 2, 0, JAM2, 5, (SHORT *) &SharedBordersPairs10[0], NULL,
 };
 
+struct IntuiText KickstartCommit_text =
+{
+    1, 0, JAM2, 2, 2, &font, (UBYTE *)"Commit", NULL
+};
+
+#define GADKICKSTARTCOMMIT 14
+
+struct Gadget KickstartCommit =
+{
+    NULL, 401, 49, button1w, button1h,
+    GADGHIMAGE,
+    RELVERIFY,
+    BOOLGADGET,
+    (APTR) &SharedBorders[0], (APTR) &SharedBordersInvert[0],
+    &KickstartCommit_text, 0, NULL, GADKICKSTARTCOMMIT, NULL
+};
+
+
+UBYTE KickstartFileValue_buf[255];
+
+struct StringInfo KickstartFileValue =
+{
+    KickstartFileValue_buf, NULL, 0, 255, 0, 0, 0, 0, 4, 4, NULL, 0, NULL
+};
+
+struct IntuiText KickstartFile_text =
+{
+    1, 0, JAM2, 0, -10, &font, "Kickstart file:", NULL
+};
+
+#define GADKICKSTARTFILE 13
+
+struct Gadget KickstartFile =
+{
+    &KickstartCommit, 266, 50, tbox1w, tbox1h,
+    GADGHIMAGE,
+    0,
+    STRGADGET,
+    (APTR) &SharedBorders[6], NULL,
+    &KickstartFile_text, 0, (APTR)&KickstartFileValue, GADKICKSTARTFILE, NULL
+};
+
+struct IntuiText ShutdownButton_text =
+{
+    1, 0, JAM2, 2, 2, &font, (UBYTE *)"Shutdown Pi", NULL
+};
+
+#define GADSHUTDOWN 12
+
+struct Gadget ShutdownButton =
+{
+    &KickstartFile, 60, 166, button3w, button3h,
+    GADGHIMAGE,
+    RELVERIFY,
+    BOOLGADGET,
+    (APTR) &SharedBorders[2], (APTR) &SharedBordersInvert[2],
+    &ShutdownButton_text, 0, NULL, GADSHUTDOWN, NULL
+};
+
+
 UBYTE DestinationValue_buf[255];
 
 struct IntuiText Destination_text[] =
 {
-    1, 0, JAM2, -98, 6, NULL, "Destination:", &Destination_text[1],
-    1, 0, JAM2, 4, 4, NULL, DestinationValue_buf, NULL,
+    1, 0, JAM2, -98, 1, &font, "Destination:", &Destination_text[1],
+    1, 0, JAM2, 1, 1, &font, DestinationValue_buf, NULL,
 };
 
 #define GADGETDESTINATION 11
 
 struct Gadget GetDestination =
 {
-    NULL, 108, 117, tbox1w, tbox1h,
+    &ShutdownButton, 107, 105, tbox2w, tbox2h,
     GADGHIMAGE,
     RELVERIFY,
     BOOLGADGET,
@@ -137,7 +208,7 @@ struct Gadget GetDestination =
 
 struct IntuiText RebootButton_text =
 {
-    1, 0, JAM2, 2, 6, NULL, (UBYTE *)"Reboot", NULL
+    1, 0, JAM2, 2, 2, &font, (UBYTE *)"Reboot", NULL
 };
 
 #define GADREBOOT 10
@@ -152,11 +223,11 @@ struct Gadget RebootButton =
     &RebootButton_text, 0, NULL, GADREBOOT, NULL
 };
 
-UBYTE StatusBar_buf[128] = "PiStorm...";
+UBYTE StatusBar_buf[128] = "Reticulating splines...";
 
 struct IntuiText StatusBar_text =
 {
-    1, 0, JAM2, 4, 2, NULL, (UBYTE *)StatusBar_buf, NULL
+    1, 0, JAM2, 4, 2, &font, (UBYTE *)StatusBar_buf, NULL
 };
 
 #define GADSTATUSBAR 9
@@ -174,14 +245,14 @@ struct Gadget StatusBar =
 
 struct IntuiText RetrieveButton_text =
 {
-    1, 0, JAM2, 10, 6, NULL, (UBYTE *)"Retrieve", NULL
+    1, 0, JAM2, 10, 2, &font, (UBYTE *)"Retrieve", NULL
 };
 
 #define GADRETRIEVEBUTTON 8
 
 struct Gadget RetrieveButton =
 {
-    &StatusBar, 244, 117, button2w, button2h,
+    &StatusBar, 244, 99, button2w, button2h,
     GADGHIMAGE,
     RELVERIFY,
     BOOLGADGET,
@@ -198,8 +269,8 @@ struct StringInfo GetFileValue =
 
 struct IntuiText GetFile_text[] =
 {
-    1, 0, JAM2, -98, -15, NULL, "Get file", &GetFile_text[1],
-    1, 0, JAM2, -98, 4, NULL, "Source:", NULL,
+    1, 0, JAM2, -98, -10, &font, "Get file from PiStorm:", &GetFile_text[1],
+    1, 0, JAM2, -59, 1, &font, "Source:", NULL,
 };
 
 #define GADGETFILE 7
@@ -216,14 +287,14 @@ struct Gadget GetFile =
 
 struct IntuiText ConfigDefault_text =
 {
-    1, 0, JAM2, 2, 6, NULL, (UBYTE *)"Load Default", NULL
+    1, 0, JAM2, 2, 2, &font, (UBYTE *)"Load Default", NULL
 };
 
 #define GADCONFIGDEFAULT 6
 
 struct Gadget ConfigDefault =
 {
-    &GetFile, 304, 39, button3w, button3h,
+    &GetFile, 9, 62, button3w, button3h,
     GADGHIMAGE,
     RELVERIFY,
     BOOLGADGET,
@@ -233,14 +304,14 @@ struct Gadget ConfigDefault =
 
 struct IntuiText ConfigCommit_text =
 {
-    1, 0, JAM2, 2, 6, NULL, (UBYTE *)"Commit", NULL
+    1, 0, JAM2, 2, 2, &font, (UBYTE *)"Commit", NULL
 };
 
 #define GADCONFIGCOMMIT 5
 
 struct Gadget ConfigCommit =
 {
-    &ConfigDefault, 244, 39, button1w, button1h,
+    &ConfigDefault, 144, 49, button1w, button1h,
     GADGHIMAGE,
     RELVERIFY,
     BOOLGADGET,
@@ -258,14 +329,14 @@ struct StringInfo ConfigFileValue =
 
 struct IntuiText ConfigFile_text =
 {
-    1, 0, JAM2, -98, 4, NULL, "Config file:", NULL
+    1, 0, JAM2, 0, -10, &font, "Config file:", NULL
 };
 
 #define GADCONFIGFILE 4
 
 struct Gadget ConfigFile =
 {
-    &ConfigCommit, 108, 41, tbox1w, tbox1h,
+    &ConfigCommit, 10, 50, tbox1w, tbox1h,
     GADGHIMAGE,
     0,
     STRGADGET,
@@ -277,14 +348,14 @@ UBYTE RTGStatus_buf[64] = "RTG status";
 
 struct IntuiText RTGStatus_text =
 {
-    1, 0, JAM2, 4, 4, NULL, (UBYTE *)RTGStatus_buf, NULL
+    1, 0, JAM2, 1, 1, &font, (UBYTE *)RTGStatus_buf, NULL
 };
 
 #define GADRTGSTATUS 3
 
 struct Gadget RTGStatus =
 {
-    &ConfigFile, 14, 15, tbox1w, tbox1h,
+    &ConfigFile, 10, 20, tbox1w, tbox1h,
     GADGHIMAGE,
     0,
     BOOLGADGET,
@@ -296,14 +367,14 @@ UBYTE RTG_buf[64] = "RTG Enable";
 
 struct IntuiText RTG_text =
 {
-    1, 0, JAM2, 8, 6, NULL, (UBYTE *)RTG_buf, NULL
+    1, 0, JAM2, 8, 2, &font, (UBYTE *)RTG_buf, NULL
 };
 
 #define GADRTGBUTTON 2
 
 struct Gadget RTGButton =
 {
-    &RTGStatus, 150, 13, button3w, button3h,
+    &RTGStatus, 144, 19, button3w, button3h,
     GADGHIMAGE,
     RELVERIFY,
     BOOLGADGET,
@@ -313,7 +384,7 @@ struct Gadget RTGButton =
 
 struct IntuiText AboutButton_text =
 {
-    1, 0, JAM2, 8, 6, NULL, (UBYTE *)"About", NULL
+    1, 0, JAM2, 8, 2, &font, (UBYTE *)"About", NULL
 };
 
 #define GADABOUT 1
@@ -331,7 +402,7 @@ struct Gadget AboutButton =
 
 struct IntuiText QuitButton_text =
 {
-    1, 0, JAM2, 12, 6, NULL, (UBYTE *)"Quit", NULL
+    1, 0, JAM2, 12, 2, &font, (UBYTE *)"Quit", NULL
 };
 
 #define GADQUIT 0
@@ -349,7 +420,7 @@ struct Gadget QuitButton =
 
 struct NewWindow winlayout =
 {
-    20, 20,
+    0, 0,
     512, 200,
     -1, -1,
     CLOSEWINDOW | GADGETUP | GADGETDOWN,
@@ -425,12 +496,21 @@ static char *GetSavePath()
     else
     {
         rtEZRequest("Out of memory!", "Oh no!", NULL, NULL);
+        return NULL;
     }
 
     strncpy(fullpath, (char*)filereq->Dir, 256);
+    rtFreeRequest((APTR)filereq);
     return fullpath;
 }
 
+int questionReboot()
+{
+    int res = rtEZRequest("This will restart the emulator, rebooting the Amiga\n"
+                          "Continue anyway?",
+                          "Yes|No", NULL, NULL);
+    return res;
+}
 
 int main()
 {
@@ -448,8 +528,8 @@ int main()
         static struct IntuiText pos;
         struct IntuiText msg[] =
         {
-            1, 0, JAM2, 0, 0, NULL, "You need reqtools.library V38 or higher!.", &msg[1],
-            1, 0, JAM2, 0, 10, NULL, "Please install it in your Libs: drirectory.", NULL,
+            1, 0, JAM2, 0, 0, &font, "You need reqtools.library V38 or higher!.", &msg[1],
+            1, 0, JAM2, 0, 10, &font, "Please install it in your Libs: drirectory.", NULL,
         };
         AutoRequest(NULL, msg, NULL, &pos, 0, 0, 0, 0);
         return RETURN_FAIL;
@@ -461,13 +541,15 @@ int main()
 
     if (pistorm_base_addr == 0xFFFFFFFF)
     {
-        static struct IntuiText msg, pos;
-        msg.IText = "Unable to find PiStorm autoconf device.";
-        pos.IText = "OK";
-        AutoRequest(myWindow, &msg, NULL, &pos, 0, 0, 0, 0);
+        rtEZRequest("Unable to find PiStorm autoconf device.",
+                    "OK", NULL, NULL);
         no_board = TRUE;
         WriteGadgetText("PiStorm not found", StatusBar_buf, myWindow, &StatusBar);
     }
+    else
+    {
+        WriteGadgetText("PiStorm found!", StatusBar_buf, myWindow, &StatusBar);
+    }
     if (!no_board)
     {
         updateRTG(myWindow);
@@ -503,29 +585,23 @@ int main()
                     case GADABOUT:
                         {
                             static struct IntuiText pos;
-                            UBYTE buf[64], buf2[64], buf3[64];
+                            char buf2[64], buf3[64];
                             if (!no_board)
                             {
                                 unsigned short hw_rev = pi_get_hw_rev();
                                 unsigned short sw_rev = pi_get_sw_rev();
-                                snprintf((char*)buf2, 64, "PiStorm hardware: %d.%d", (hw_rev >> 8), (hw_rev & 0xFF));
-                                snprintf((char*)buf3, 64, "PiStorm software: %d.%d", (sw_rev >> 8), (sw_rev & 0xFF));
+                                snprintf(buf2, 64, "PiStorm hardware: %d.%d", (hw_rev >> 8), (hw_rev & 0xFF));
+                                snprintf(buf3, 64, "PiStorm software: %d.%d", (sw_rev >> 8), (sw_rev & 0xFF));
                             }
                             else
                             {
-                                snprintf((char*)buf2, 64, "PiStorm hardware not found!");
+                                snprintf(buf2, 64, "PiStorm hardware not found!");
                             }
-                            struct IntuiText msg[] =
-                            {
-                                1, 0, JAM2, 0, 0, NULL, (UBYTE *)buf, &msg[1],
-                                1, 0, JAM2, 0, 10, NULL, "Tool written by beeanyew and LinuxJedi", &msg[2],
-                                1, 0, JAM2, 0, 20, NULL, (UBYTE*)buf2, &msg[3],
-                                1, 0, JAM2, 0, 30, NULL, (UBYTE*)buf3, &msg[4],
-                                1, 0, JAM2, 0, 50, NULL, "Now with 53% more Nibbles!", NULL,
-                            };
-                            snprintf(buf, 64, "PiStorm Interaction Tool %s", VERSION);
-                            pos.IText = "OK";
-                            AutoRequest(myWindow, msg, NULL, &pos, 0, 0, 0, 0);
+                            rtEZRequest("PiStorm Interaction Tool %s\n"
+                                        "Tool written by beeanyew and LinuxJedi\n"
+                                        "%s\n%s\n\n"
+                                        "Now with 53%% more Nibbles!",
+                                        "More Nibbles!", NULL, NULL, VERSION, buf2, buf3);
                             break;
                         }
                     case GADRTGBUTTON:
@@ -537,18 +613,25 @@ int main()
                         }
                     case GADCONFIGCOMMIT:
                         {
+                            if (!questionReboot())
+                            {
+                                break;
+                            }
+                            Disable();
                             unsigned short ret = pi_handle_config(PICFG_LOAD, ConfigFileValue_buf);
                             if (ret == PI_RES_FILENOTFOUND)
                             {
-                                static struct IntuiText msg, pos;
-                                msg.IText = "PiStorm says: \"file not found\"";
-                                pos.IText = "OK";
-                                AutoRequest(myWindow, &msg, NULL, &pos, 0, 0, 0, 0);
+                                rtEZRequest("PiStorm says: \"file not found\"",
+                                            "OK", NULL, NULL);
                             }
                             break;
                         }
                     case GADCONFIGDEFAULT:
                         {
+                            if (!questionReboot())
+                            {
+                                break;
+                            }
                             pi_handle_config(PICFG_DEFAULT, NULL);
                             break;
                         }
@@ -560,28 +643,22 @@ int main()
 
                             if (pi_get_filesize(GetFileValue_buf, &filesize) == PI_RES_FILENOTFOUND)
                             {
-                                static struct IntuiText msg, pos;
-                                msg.IText = "PiStorm says: \"file not found\"";
-                                pos.IText = "OK";
-                                AutoRequest(myWindow, &msg, NULL, &pos, 0, 0, 0, 0);
+                                rtEZRequest("PiStorm says: \"file not found\"",
+                                            "OK", NULL, NULL);
                                 break;
                             }
                             buf = malloc(filesize);
                             if (buf == NULL)
                             {
-                                static struct IntuiText msg, pos;
-                                msg.IText = "Could not allocate enough memory to transfer file";
-                                pos.IText = "OK";
-                                AutoRequest(myWindow, &msg, NULL, &pos, 0, 0, 0, 0);
+                                rtEZRequest("Could not allocate enough memory to transfer file",
+                                            "OK", NULL, NULL);
                                 break;
                             }
                             WriteGadgetText("Retrieving file...", StatusBar_buf, myWindow, &StatusBar);
                             if (pi_transfer_file(GetFileValue_buf, buf) != PI_RES_OK)
                             {
-                                static struct IntuiText msg, pos;
-                                msg.IText = "PiStorm says: \"something went wrong with the file transfer\"";
-                                pos.IText = "OK";
-                                AutoRequest(myWindow, &msg, NULL, &pos, 0, 0, 0, 0);
+                                rtEZRequest("PiStorm says: \"something went wrong with the file transfer\"",
+                                            "OK", NULL, NULL);
                                 WriteGadgetText("File transfer failed", StatusBar_buf, myWindow, &StatusBar);
                                 free(buf);
                                 break;
@@ -610,15 +687,9 @@ int main()
                             {
                                 char errbuf[64];
                                 snprintf(errbuf, 64, "Error code: %ld", IoErr());
-                                struct IntuiText msg[] =
-                                {
-                                    1, 0, JAM2, 0, 0, NULL, "Could not open file for writing", &msg[1],
-                                    1, 0, JAM2, 0, 10, NULL, destfile, &msg[2],
-                                    1, 0, JAM2, 0, 20, NULL, (UBYTE*)errbuf, NULL,
-                                };
-                                static struct IntuiText pos;
-                                pos.IText = "OK";
-                                AutoRequest(myWindow, msg, NULL, &pos, 0, 0, 0, 0);
+                                rtEZRequest("Could not open file for writing\n"
+                                            "%s\n%s",
+                                            "OK", NULL, NULL, destfile, errbuf);
                                 WriteGadgetText("File transfer failed", StatusBar_buf, myWindow, &StatusBar);
                                 free(buf);
                                 free(destfile);
@@ -633,7 +704,7 @@ int main()
                         }
                     case GADREBOOT:
                         {
-                            WriteGadgetText("Rebooting PiStorm", StatusBar_buf, myWindow, &StatusBar);
+                            WriteGadgetText("Rebooting Amiga", StatusBar_buf, myWindow, &StatusBar);
                             pi_reset_amiga(0);
                             break;
                         }
@@ -645,6 +716,36 @@ int main()
                                 WriteGadgetText(fileName, DestinationValue_buf, myWindow, &GetDestination);
                                 free(fileName);
                             }
+                            break;
+                        }
+                    case GADSHUTDOWN:
+                        {
+                            int res = rtEZRequest("This will shutdown the Pi and cause the Amiga to freeze\n"
+                                                  "Continue anyway?",
+                                                  "Yes|No", NULL, NULL);
+                            if (!res)
+                            {
+                                break;
+                            }
+                            WriteGadgetText("Shuttting down PiStorm...", StatusBar_buf, myWindow, &StatusBar);
+                            int confirm = pi_shutdown_pi(0);
+                            pi_confirm_shutdown(confirm);
+                            break;
+                        }
+                    case GADKICKSTARTCOMMIT:
+                        {
+                            if (!questionReboot())
+                            {
+                                break;
+                            }
+                            Disable();
+                            unsigned short ret = pi_remap_kickrom(KickstartFileValue_buf);
+                            if (ret == PI_RES_FILENOTFOUND)
+                            {
+                                rtEZRequest("PiStorm says: \"file not found\"",
+                                            "OK", NULL, NULL);
+                            }
+                            break;
                         }
                 }
             }