home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 6 / AACD06.ISO / AACD / Emulation / Atari800 / atari_amiga.c < prev    next >
C/C++ Source or Header  |  1998-02-12  |  84KB  |  3,992 lines

  1. /*
  2.  * ==========================
  3.  * Atari800 - Amiga Port Code
  4.  * ==========================
  5.  */
  6.  
  7. /*
  8.  * Revision     : v0.3.4
  9.  * Introduced   : NOT KNOWN (Before 2nd September 1995)
  10.  * Last updated : 1st Oct 1997 (thor)
  11.  *
  12.  *
  13.  *
  14.  * Introduction:
  15.  *
  16.  * This file contains all the additional code required to get the Amiga
  17.  * port of the Atari800 emulator up and running.
  18.  *
  19.  * See "Atari800.guide" for info
  20.  */
  21.  
  22.  
  23.  
  24. #include <clib/asl_protos.h>
  25. #include <clib/exec_protos.h>
  26. #include <devices/gameport.h>
  27. #include <devices/inputevent.h>
  28. #include <dos/dos.h>
  29. #include <dos/dostags.h>
  30. #include <exec/libraries.h>
  31. #include <exec/memory.h>
  32. #include <exec/types.h>
  33. #include <intuition/intuition.h>
  34. #include <libraries/asl.h>
  35. #include <stdio.h>
  36. #include <string.h>
  37. #include <workbench/workbench.h>
  38.  
  39. static char *rcsid = "$Id: atari_amiga.c,v 1.5 1997/04/13 21:21:51 david Exp $";
  40.  
  41. #include "atari.h"
  42. #include "colours.h"
  43.  
  44. #define GAMEPORT0 0
  45. #define GAMEPORT1 1
  46.  
  47. #define OCS_ChipSet 0
  48. #define ECS_ChipSet 1
  49. #define AGA_ChipSet 2
  50.  
  51. #ifdef DICE_C
  52. static struct IntuitionBase    *IntuitionBase = NULL;
  53. static struct GfxBase        *GfxBase = NULL;
  54. static struct LayersBase    *LayersBase = NULL;
  55. static struct Library *AslBase = NULL;
  56. #endif
  57.  
  58. #ifdef GNU_C
  59. struct IntuitionBase    *IntuitionBase = NULL;
  60. struct GfxBase        *GfxBase = NULL;
  61. struct LayersBase    *LayersBase = NULL;
  62. struct Library *AslBase = NULL;
  63. #endif
  64.  
  65. extern int countdown_rate;
  66. extern int refresh_rate;
  67.  
  68. static struct Window *WindowMain = NULL;
  69. static struct Window *WindowAbout = NULL;
  70. static struct Window *WindowNotSupported = NULL;
  71. static struct Window *WindowSetup = NULL;
  72. static struct Window *WindowController = NULL;
  73. static struct Window *WindowYesNo = NULL;
  74. static struct Window *WindowIconified = NULL;
  75.  
  76. int old_stick_0 = 0x1f;
  77. int old_stick_1 = 0x1f;
  78.  
  79. static int consol;
  80. static int trig0;
  81. static int stick0;
  82.  
  83. struct InputEvent gameport_data;
  84. struct MsgPort *gameport_msg_port;
  85. struct IOStdReq *gameport_io_msg;
  86. BOOL gameport_error;
  87.  
  88. static UBYTE    *image_data;
  89.  
  90. static BOOL KEYPRESSED,SHIFTPRESSED;
  91.  
  92. static UWORD ScreenType;
  93. static struct Screen *ScreenMain = NULL;
  94. static struct NewScreen NewScreen;
  95. static struct Image image_Screen;
  96. static int ScreenID;
  97. static int ScreenWidth;
  98. static int ScreenHeight;
  99. static int ScreenDepth;
  100. static int TotalColours;
  101.  
  102. struct AppWindow *AppWindow = NULL;
  103. struct AppMenuItem *AppMenuItem = NULL;
  104. struct AppIcon *AppIcon = NULL;
  105. struct DiskObject *AppDiskObject = NULL;
  106. struct MsgPort *AppMessagePort = NULL;
  107. struct AppMessage *AppMessage = NULL;
  108.  
  109. static struct Menu *menu_Project = NULL;
  110. static struct MenuItem *menu_Project00 = NULL;
  111. static struct MenuItem *menu_Project01 = NULL;
  112. static struct MenuItem *menu_Project02 = NULL;
  113. static struct MenuItem *menu_Project03 = NULL;
  114.  
  115. static struct Menu *menu_System = NULL;
  116. static struct MenuItem *menu_System00 = NULL;
  117. static struct MenuItem *menu_System01 = NULL;
  118. static struct MenuItem *menu_System01s00 = NULL;
  119. static struct MenuItem *menu_System01s01 = NULL;
  120. static struct MenuItem *menu_System01s02 = NULL;
  121. static struct MenuItem *menu_System01s03 = NULL;
  122. static struct MenuItem *menu_System01s04 = NULL;
  123. static struct MenuItem *menu_System01s05 = NULL;
  124. static struct MenuItem *menu_System01s06 = NULL;
  125. static struct MenuItem *menu_System01s07 = NULL;
  126. static struct MenuItem *menu_System02 = NULL;
  127. static struct MenuItem *menu_System02s00 = NULL;
  128. static struct MenuItem *menu_System02s01 = NULL;
  129. static struct MenuItem *menu_System02s02 = NULL;
  130. static struct MenuItem *menu_System02s03 = NULL;
  131. static struct MenuItem *menu_System02s04 = NULL;
  132. static struct MenuItem *menu_System02s05 = NULL;
  133. static struct MenuItem *menu_System02s06 = NULL;
  134. static struct MenuItem *menu_System02s07 = NULL;
  135. static struct MenuItem *menu_System03 = NULL;
  136. static struct MenuItem *menu_System03s00 = NULL;
  137. static struct MenuItem *menu_System03s01 = NULL;
  138. static struct MenuItem *menu_System03s02 = NULL;
  139. static struct MenuItem *menu_System04 = NULL;
  140. static struct MenuItem *menu_System05 = NULL;
  141. static struct MenuItem *menu_System06 = NULL;
  142. static struct MenuItem *menu_System07 = NULL;
  143. static struct MenuItem *menu_System08 = NULL;
  144. static struct MenuItem *menu_System09 = NULL;
  145.  
  146. static struct Menu *menu_Console = NULL;
  147. static struct MenuItem *menu_Console00 = NULL;
  148. static struct MenuItem *menu_Console01 = NULL;
  149. static struct MenuItem *menu_Console02 = NULL;
  150. static struct MenuItem *menu_Console03 = NULL;
  151. static struct MenuItem *menu_Console04 = NULL;
  152. static struct MenuItem *menu_Console05 = NULL;
  153. static struct MenuItem *menu_Console06 = NULL;
  154.  
  155. static struct Menu *menu_Prefs = NULL;
  156. static struct MenuItem *menu_Prefs00 = NULL;
  157. static struct MenuItem *menu_Prefs00s00 = NULL;
  158. static struct MenuItem *menu_Prefs00s01 = NULL;
  159. static struct MenuItem *menu_Prefs00s02 = NULL;
  160. static struct MenuItem *menu_Prefs00s03 = NULL;
  161. static struct MenuItem *menu_Prefs01 = NULL;
  162. static struct MenuItem *menu_Prefs01s00 = NULL;
  163. static struct MenuItem *menu_Prefs01s01 = NULL;
  164. static struct MenuItem *menu_Prefs02 = NULL;
  165. static struct MenuItem *menu_Prefs02s00 = NULL;
  166. static struct MenuItem *menu_Prefs02s01 = NULL;
  167. static struct MenuItem *menu_Prefs02s02 = NULL;
  168. static struct MenuItem *menu_Prefs02s03 = NULL;
  169. static struct MenuItem *menu_Prefs03 = NULL;
  170. static struct MenuItem *menu_Prefs03s00 = NULL;
  171. static struct MenuItem *menu_Prefs03s01 = NULL;
  172. static struct MenuItem *menu_Prefs03s02 = NULL;
  173. static struct MenuItem *menu_Prefs03s03 = NULL;
  174.  
  175. struct MemHeader MemHeader;
  176.  
  177. static UWORD *data_Screen;
  178.  
  179. static ChipSet;
  180. static ColourEnabled;
  181. static Controller;
  182. static CustomScreen;
  183.  
  184. static int PaddlePos;
  185.  
  186. static UpdatePalette;
  187.  
  188. static void DisplayAboutWindow ();
  189. static void DisplayNotSupportedWindow ();
  190. static void DisplaySetupWindow ();
  191. static void DisplayControllerWindow ();
  192. static int DisplayYesNoWindow ();
  193. static int InsertDisk ();
  194. static struct Gadget *MakeGadget ();
  195. static struct MenuItem *MakeMenuItem ();
  196. static struct Menu *MakeMenu ();
  197. static void Rule ();
  198. static void ShowText ();
  199.  
  200. static int gui_GridWidth = 4;
  201. static int gui_GridHeight = 7;
  202. static int gui_WindowOffsetLeftEdge = 0; /* 4 */
  203. static int gui_WindowOffsetTopEdge = 0; /* 11 */
  204.  
  205. static int LibraryVersion;
  206.  
  207. #define gadget_Null 0
  208. #define gadget_Button 1
  209. #define gadget_Check 2
  210. #define gadget_String 3
  211. #define gadget_Mutual 4
  212.  
  213. #define controller_Null 0
  214. #define controller_Joystick 1
  215. #define controller_Paddle 2
  216.  
  217.  
  218.  
  219. /*
  220.  * ====================
  221.  * Define data_Button64
  222.  * ====================
  223.  */
  224.  
  225. UWORD data_Button64[]=
  226. {
  227.     0x0000, 0x0000, 0x0000, 0x0001,
  228.     0x0000, 0x0000, 0x0000, 0x0003,
  229.     0x0000, 0x0000, 0x0000, 0x0003,
  230.     0x0000, 0x0000, 0x0000, 0x0003,
  231.     0x0000, 0x0000, 0x0000, 0x0003,
  232.     0x0000, 0x0000, 0x0000, 0x0003,
  233.     0x0000, 0x0000, 0x0000, 0x0003,
  234.     0x0000, 0x0000, 0x0000, 0x0003,
  235.     0x0000, 0x0000, 0x0000, 0x0003,
  236.     0x0000, 0x0000, 0x0000, 0x0003,
  237.     0x0000, 0x0000, 0x0000, 0x0003,
  238.     0x0000, 0x0000, 0x0000, 0x0003,
  239.     0x0000, 0x0000, 0x0000, 0x0003,
  240.     0x7FFF, 0xFFFF, 0xFFFF, 0xFFFF,
  241.  
  242.     0xFFFF, 0xFFFF, 0xFFFF, 0xFFFE,
  243.     0xC000, 0x0000, 0x0000, 0x0000,
  244.     0xC000, 0x0000, 0x0000, 0x0000,
  245.     0xC000, 0x0000, 0x0000, 0x0000,
  246.     0xC000, 0x0000, 0x0000, 0x0000,
  247.     0xC000, 0x0000, 0x0000, 0x0000,
  248.     0xC000, 0x0000, 0x0000, 0x0000,
  249.     0xC000, 0x0000, 0x0000, 0x0000,
  250.     0xC000, 0x0000, 0x0000, 0x0000,
  251.     0xC000, 0x0000, 0x0000, 0x0000,
  252.     0xC000, 0x0000, 0x0000, 0x0000,
  253.     0xC000, 0x0000, 0x0000, 0x0000,
  254.     0xC000, 0x0000, 0x0000, 0x0000,
  255.     0x8000, 0x0000, 0x0000, 0x0000
  256. };
  257.  
  258.  
  259.  
  260. /*
  261.  * ============================
  262.  * Define data_Button64Selected
  263.  * ============================
  264.  */
  265.  
  266. UWORD data_Button64Selected[]=
  267. {
  268.     0xFFFF, 0xFFFF, 0xFFFF, 0xFFFE,
  269.     0xC000, 0x0000, 0x0000, 0x0000,
  270.     0xC000, 0x0000, 0x0000, 0x0000,
  271.     0xC000, 0x0000, 0x0000, 0x0000,
  272.     0xC000, 0x0000, 0x0000, 0x0000,
  273.     0xC000, 0x0000, 0x0000, 0x0000,
  274.     0xC000, 0x0000, 0x0000, 0x0000,
  275.     0xC000, 0x0000, 0x0000, 0x0000,
  276.     0xC000, 0x0000, 0x0000, 0x0000,
  277.     0xC000, 0x0000, 0x0000, 0x0000,
  278.     0xC000, 0x0000, 0x0000, 0x0000,
  279.     0xC000, 0x0000, 0x0000, 0x0000,
  280.     0xC000, 0x0000, 0x0000, 0x0000,
  281.     0x8000, 0x0000, 0x0000, 0x0000,
  282.  
  283.     0x0000, 0x0000, 0x0000, 0x0001,
  284.     0x0000, 0x0000, 0x0000, 0x0003,
  285.     0x0000, 0x0000, 0x0000, 0x0003,
  286.     0x0000, 0x0000, 0x0000, 0x0003,
  287.     0x0000, 0x0000, 0x0000, 0x0003,
  288.     0x0000, 0x0000, 0x0000, 0x0003,
  289.     0x0000, 0x0000, 0x0000, 0x0003,
  290.     0x0000, 0x0000, 0x0000, 0x0003,
  291.     0x0000, 0x0000, 0x0000, 0x0003,
  292.     0x0000, 0x0000, 0x0000, 0x0003,
  293.     0x0000, 0x0000, 0x0000, 0x0003,
  294.     0x0000, 0x0000, 0x0000, 0x0003,
  295.     0x0000, 0x0000, 0x0000, 0x0003,
  296.     0x7FFF, 0xFFFF, 0xFFFF, 0xFFFF
  297. };
  298.  
  299.  
  300.  
  301. /*
  302.  * ========================
  303.  * Define data_MutualGadget
  304.  * ========================
  305.  */
  306.  
  307. UWORD data_MutualGadget[]=
  308. {
  309.     0x0000,
  310.     0x0000,
  311.     0x0004,
  312.     0x0006,
  313.     0x0006,
  314.     0x0003,
  315.     0x0003,
  316.     0x0003,
  317.     0x0003,
  318.     0x0006,
  319.     0x0006,
  320.     0x181C,
  321.     0x1FF8,
  322.     0x07E0,
  323.  
  324.     0x07E0,
  325.     0x1FF8,
  326.     0x3818,
  327.     0x6000,
  328.     0x6000,
  329.     0xC000,
  330.     0xC000,
  331.     0xC000,
  332.     0xC000,
  333.     0x6000,
  334.     0x6000,
  335.     0x2000,
  336.     0x0000,
  337.     0x0000
  338. };
  339.  
  340.  
  341.  
  342. /*
  343.  * ================================
  344.  * Define data_MutualGadgetSelected
  345.  * ================================
  346.  */
  347.  
  348. UWORD data_MutualGadgetSelected[]=
  349. {
  350.     0x07E0,
  351.     0x1FF8,
  352.     0x3818,
  353.     0x6180,
  354.     0x67E0,
  355.     0xC7E0,
  356.     0xCFF0,
  357.     0xCFF0,
  358.     0xC7E0,
  359.     0x67E0,
  360.     0x6180,
  361.     0x2000,
  362.     0x0000,
  363.     0x0000,
  364.  
  365.     0x0000,
  366.     0x0000,
  367.     0x0004,
  368.     0x0006,
  369.     0x0006,
  370.     0x0003,
  371.     0x0003,
  372.     0x0003,
  373.     0x0003,
  374.     0x0006,
  375.     0x0006,
  376.     0x181C,
  377.     0x1FF8,
  378.     0x07E0
  379. };
  380.  
  381.  
  382.  
  383. struct Image image_Button64;
  384. struct Image image_Button64Selected;
  385. struct Image image_MutualGadget;
  386. struct Image image_MutualGadgetSelected;
  387.  
  388. UWORD *chip_Button64 = NULL;
  389. UWORD *chip_Button64Selected = NULL;
  390. UWORD *chip_MutualGadget = NULL;
  391. UWORD *chip_MutualGadgetSelected = NULL;
  392.  
  393. /*
  394.  * ================
  395.  * Atari_Initialize
  396.  * ================
  397.  */
  398.  
  399. /*
  400.  * Revision     : v0.2.1
  401.  * Introduced   : NOT KNOWN (Before 2nd September 1995)
  402.  * Last updated : 12th October 1995
  403.  */
  404.  
  405. void Atari_Initialise (int *argc, char *argv[])
  406. {
  407.     struct NewWindow    NewWindow;
  408.  
  409.     char *ptr;
  410.     int i;
  411.     int j;
  412.     struct IntuiMessage *IntuiMessage;
  413.  
  414.     ULONG Class;
  415.     USHORT Code;
  416.     APTR Address;
  417.  
  418.     int QuitRoutine;
  419.  
  420.     /*
  421.      * =========
  422.      * Zoom Data
  423.      * =========
  424.      */
  425.  
  426.     WORD Zoomdata[4] =
  427.     {
  428.         0, 11, 200, 15,
  429.     };
  430.  
  431.     /*
  432.      *
  433.      *
  434.      *
  435.      */
  436.  
  437.     chip_Button64 = (UWORD *) AllocMem (sizeof (data_Button64), MEMF_CHIP);
  438.     chip_Button64Selected = (UWORD *) AllocMem (sizeof (data_Button64Selected), MEMF_CHIP);
  439.     chip_MutualGadget = (UWORD *) AllocMem (sizeof (data_MutualGadget), MEMF_CHIP);
  440.     chip_MutualGadgetSelected = (UWORD *) AllocMem (sizeof (data_MutualGadgetSelected), MEMF_CHIP);
  441.  
  442.     memcpy (chip_Button64, data_Button64, sizeof (data_Button64));
  443.     memcpy (chip_Button64Selected, data_Button64Selected, sizeof (data_Button64Selected));
  444.     memcpy (chip_MutualGadget, data_MutualGadget, sizeof (data_MutualGadget));
  445.     memcpy (chip_MutualGadgetSelected, data_MutualGadgetSelected, sizeof (data_MutualGadgetSelected));
  446.  
  447.     /*
  448.      *
  449.      *
  450.      *
  451.      */
  452.  
  453.     image_Button64.LeftEdge = 0;
  454.     image_Button64.TopEdge = 0;
  455.     image_Button64.Width = 64;
  456.     image_Button64.Height = 14;
  457.     image_Button64.Depth = 2;
  458.     image_Button64.ImageData = chip_Button64;
  459.     image_Button64.PlanePick = 3;
  460.     image_Button64.PlaneOnOff = (UBYTE) NULL;
  461.     image_Button64.NextImage = NULL;
  462.  
  463.     image_Button64Selected.LeftEdge = 0;
  464.     image_Button64Selected.TopEdge = 0;
  465.     image_Button64Selected.Width = 64;
  466.     image_Button64Selected.Height = 14;
  467.     image_Button64Selected.Depth = 2;
  468.     image_Button64Selected.ImageData = chip_Button64Selected;
  469.     image_Button64Selected.PlanePick = 3;
  470.     image_Button64Selected.PlaneOnOff = (UBYTE) NULL;
  471.     image_Button64Selected.NextImage = NULL;
  472.  
  473.     image_MutualGadget.LeftEdge = 0;
  474.     image_MutualGadget.TopEdge = 0;
  475.     image_MutualGadget.Width = 16;
  476.     image_MutualGadget.Height = 14;
  477.     image_MutualGadget.Depth = 2;
  478.     image_MutualGadget.ImageData = chip_MutualGadget;
  479.     image_MutualGadget.PlanePick = 3;
  480.     image_MutualGadget.PlaneOnOff = (UBYTE) NULL;
  481.     image_MutualGadget.NextImage = NULL;
  482.  
  483.     image_MutualGadgetSelected.LeftEdge = 0;
  484.     image_MutualGadgetSelected.TopEdge = 0;
  485.     image_MutualGadgetSelected.Width = 16;
  486.     image_MutualGadgetSelected.Height = 14;
  487.     image_MutualGadgetSelected.Depth = 2;
  488.     image_MutualGadgetSelected.ImageData = chip_MutualGadgetSelected;
  489.     image_MutualGadgetSelected.PlanePick = 3;
  490.     image_MutualGadgetSelected.PlaneOnOff = (UBYTE) NULL;
  491.     image_MutualGadgetSelected.NextImage = NULL;
  492.  
  493.     /*
  494.      * =======================
  495.       * Process startup options
  496.      * =======================
  497.      */
  498.  
  499.     ChipSet = AGA_ChipSet;
  500.     ColourEnabled = TRUE;
  501.     UpdatePalette = TRUE;
  502.     CustomScreen = TRUE;
  503.     Controller = controller_Joystick;
  504.     PaddlePos = 228;
  505.     LibraryVersion = 39;
  506.  
  507.     for (i=j=1;i<*argc;i++)
  508.     {
  509. /*
  510.         printf("%d: %s\n", i,argv[i]);
  511. */
  512.  
  513.         if (strcmp(argv[i], "-ocs") == 0)
  514.         {
  515.             printf ("Requested OCS graphics mode... Accepted!\n");
  516.             ChipSet = OCS_ChipSet;
  517.             LibraryVersion = 37;
  518.         }
  519.         else if (strcmp(argv[i], "-ecs") == 0)
  520.         {
  521.             printf ("Requested ECS graphics mode... Accepted!\n");
  522.             ChipSet = ECS_ChipSet;
  523.             LibraryVersion = 37;
  524.         }
  525.         else if (strcmp(argv[i], "-aga") == 0)
  526.         {
  527.             printf ("Requested AGA graphics mode... Accepted!\n");
  528.             printf ("  Enabled custom screen automatically\n");
  529.             ChipSet = AGA_ChipSet;
  530.             CustomScreen = TRUE;
  531.             LibraryVersion = 39;
  532.         }
  533.         else if (strcmp(argv[i], "-grey") == 0)
  534.         {
  535.             printf ("Requested grey scale display... Accepted!\n");
  536.             ColourEnabled = FALSE;
  537.         }
  538.         else if (strcmp(argv[i], "-colour") == 0)
  539.         {
  540.             printf ("Requested colour display... Accepted!\n");
  541.             ColourEnabled = TRUE;
  542.         }
  543.         else if (strcmp(argv[i], "-wb") == 0)
  544.         {
  545.             printf ("Requested Workbench window... Accepted!\n");
  546.             CustomScreen = FALSE;
  547.             LibraryVersion = 37;
  548.             if (ChipSet == AGA_ChipSet)
  549.             {
  550.                 printf ("  ECS chip set automatically enabled\n");
  551.                 ChipSet = ECS_ChipSet;
  552.             }
  553.         }
  554.         else if (strcmp(argv[i], "-joystick") == 0)
  555.         {
  556.             printf ("Requested joystick controller... Accepted!\n");
  557.             Controller = controller_Joystick;
  558.         }
  559.         else if (strcmp(argv[i], "-paddle") == 0)
  560.         {
  561.             printf ("Requested paddle controller... Accepted!\n");
  562.             Controller = controller_Paddle;
  563.         }
  564.         else
  565.         {
  566.             argv[j++] = argv[i];
  567.         }
  568.     }
  569.  
  570.     *argc = j;
  571.  
  572.     IntuitionBase = (struct IntuitionBase*) OpenLibrary ("intuition.library", LibraryVersion);
  573.     if (!IntuitionBase)
  574.     {
  575.         printf ("Failed to open intuition.library\n");
  576.         Atari_Exit (0);
  577.     }
  578.  
  579.     GfxBase = (struct GfxBase*) OpenLibrary ("graphics.library", LibraryVersion);
  580.     if (!GfxBase)
  581.     {
  582.         printf ("Failed to open graphics.library\n");
  583.         Atari_Exit (0);
  584.     }
  585.  
  586.     LayersBase = (struct LayersBase*) OpenLibrary ("layers.library", LibraryVersion);
  587.     if (!LayersBase)
  588.     {
  589.         printf ("Failed to open layers.library\n");
  590.         Atari_Exit (0);
  591.     }
  592.  
  593.     AslBase = (struct Library*) OpenLibrary ("asl.library", LibraryVersion);
  594.     if (!AslBase)
  595.     {
  596.         printf ("Failed to open asl.library\n");
  597.         Atari_Exit (0);
  598.     }
  599.  
  600.     data_Screen = (UWORD *) AllocMem (46080 * 2, MEMF_CHIP);
  601.     if (!data_Screen)
  602.     {
  603.         printf ("Oh BUGGER!\n");
  604.     }
  605.  
  606.     printf ("data_Screen = %x\n", data_Screen);
  607.  
  608.     /*
  609.      * ==============
  610.      * Setup Joystick
  611.      * ==============
  612.      */
  613.  
  614.     gameport_msg_port = (struct MsgPort *) CreatePort (0, 0);
  615.     if (!gameport_msg_port)
  616.     {
  617.         printf ("Failed to create gameport_msg_port\n");
  618.         Atari_Exit (0);
  619.     }
  620.  
  621.     gameport_io_msg = (struct IOStdReq *) CreateStdIO (gameport_msg_port);
  622.     if (!gameport_io_msg)
  623.     {
  624.         printf ("Failed to create gameport_io_msg\n");
  625.         Atari_Exit (0);
  626.     }
  627.  
  628.     gameport_error = OpenDevice ("gameport.device", GAMEPORT1, gameport_io_msg, 0xFFFF);
  629.     if (gameport_error)
  630.     {
  631.         printf ("Failed to open the gameport.device\n");
  632.         Atari_Exit (0);
  633.     }
  634.  
  635.     {
  636.         BYTE type = 0;
  637.  
  638.         gameport_io_msg->io_Command = GPD_ASKCTYPE;
  639.         gameport_io_msg->io_Length = 1;
  640.         gameport_io_msg->io_Data = (APTR) &type;
  641.  
  642.         DoIO (gameport_io_msg);
  643.  
  644.         if (type)
  645.         {
  646.             printf ("gameport already in use\n");
  647.             gameport_error = TRUE;
  648.         }
  649.     }
  650.  
  651.     {
  652.         BYTE type = GPCT_ABSJOYSTICK;
  653.  
  654.         gameport_io_msg->io_Command = GPD_SETCTYPE;
  655.         gameport_io_msg->io_Length = 1;
  656.         gameport_io_msg->io_Data = (APTR) &type;
  657.  
  658.         DoIO (gameport_io_msg);
  659.  
  660.         if (gameport_io_msg->io_Error)
  661.         {
  662.             printf ("Failed to set controller type\n");
  663.         }
  664.  
  665.     }
  666.  
  667.     {
  668.         struct GamePortTrigger gpt;
  669.  
  670.         gpt.gpt_Keys = GPTF_DOWNKEYS | GPTF_UPKEYS;
  671.         gpt.gpt_Timeout = 0;
  672.         gpt.gpt_XDelta = 1;
  673.         gpt.gpt_YDelta = 1;
  674.  
  675.         gameport_io_msg->io_Command = GPD_SETTRIGGER;
  676.         gameport_io_msg->io_Length = sizeof (gpt);
  677.         gameport_io_msg->io_Data = (APTR) &gpt;
  678.  
  679.         DoIO (gameport_io_msg);
  680.  
  681.         if (gameport_io_msg->io_Error)
  682.         {
  683.             printf ("Failed to set controller trigger\n");
  684.         }
  685.     }
  686.  
  687.     {
  688.         struct InputEvent *Data;
  689.  
  690.         gameport_io_msg->io_Command = GPD_READEVENT;
  691.         gameport_io_msg->io_Length = sizeof (struct InputEvent);
  692.         gameport_io_msg->io_Data = (APTR) &gameport_data;
  693.         gameport_io_msg->io_Flags = 0;
  694.     }
  695.  
  696.     SendIO (gameport_io_msg);
  697.  
  698.     ScreenType = WBENCHSCREEN;
  699.  
  700.     if (ChipSet == AGA_ChipSet)
  701.     {
  702.         DisplaySetupWindow ();
  703.     }
  704.  
  705.     SetupDisplay ();
  706.  
  707.     DisplayAboutWindow ();
  708.  
  709. /*
  710.  * Setup Project Menu
  711.  */
  712.  
  713.     menu_Project00 = MakeMenuItem (0, 0, 96, 10, "Iconify", NULL, NULL);
  714.     menu_Project01 = MakeMenuItem    (0, 15, 96, 10, "Help", 'H', NULL);
  715.     menu_Project02 = MakeMenuItem (0, 30, 96, 10, "About", '?', NULL);
  716.     menu_Project03 = MakeMenuItem    (0, 45, 96, 10, "Quit", 'N', NULL);
  717.  
  718.     menu_Project00->NextItem = menu_Project01;
  719.     menu_Project01->NextItem = menu_Project02;
  720.     menu_Project02->NextItem = menu_Project03;
  721.  
  722.     menu_Project = MakeMenu (0, 0, 48, "Amiga", menu_Project00);
  723.  
  724. /*
  725.  * Setup Disk Menu
  726.  */
  727.  
  728.     menu_System00 = MakeMenuItem (0, 0, 144, 10, "Boot disk", NULL, NULL);
  729.     menu_System01 = MakeMenuItem (0, 10, 144, 10, "Insert disk      »", NULL, NULL);
  730.         menu_System01s00 = MakeMenuItem (128, 0, 80, 10, "Drive 1...", NULL, NULL);
  731.         menu_System01s01 = MakeMenuItem (128, 10, 80, 10, "Drive 2...", NULL, NULL);
  732.         menu_System01s02 = MakeMenuItem (128, 20, 80, 10, "Drive 3...", NULL, NULL);
  733.         menu_System01s03 = MakeMenuItem (128, 30, 80, 10, "Drive 4...", NULL, NULL);
  734.         menu_System01s04 = MakeMenuItem (128, 40, 80, 10, "Drive 5...", NULL, NULL);
  735.         menu_System01s05 = MakeMenuItem (128, 50, 80, 10, "Drive 6...", NULL, NULL);
  736.         menu_System01s06 = MakeMenuItem (128, 60, 80, 10, "Drive 7...", NULL, NULL);
  737.         menu_System01s07 = MakeMenuItem (128, 70, 80, 10, "Drive 8...", NULL, NULL);
  738.  
  739.         menu_System01s00->NextItem = menu_System01s01;
  740.         menu_System01s01->NextItem = menu_System01s02;
  741.         menu_System01s02->NextItem = menu_System01s03;
  742.         menu_System01s03->NextItem = menu_System01s04;
  743.         menu_System01s04->NextItem = menu_System01s05;
  744.         menu_System01s05->NextItem = menu_System01s06;
  745.         menu_System01s06->NextItem = menu_System01s07;
  746.  
  747.         menu_System01->SubItem = menu_System01s00;
  748.  
  749.     menu_System02 = MakeMenuItem (0, 20, 144, 10, "Eject disk       »", NULL, NULL);
  750.         menu_System02s00 = MakeMenuItem (128, 0, 56, 10, "Drive 1", NULL, NULL);
  751.         menu_System02s01 = MakeMenuItem (128, 10, 56, 10, "Drive 2", NULL, NULL);
  752.         menu_System02s02 = MakeMenuItem (128, 20, 56, 10, "Drive 3", NULL, NULL);
  753.         menu_System02s03 = MakeMenuItem (128, 30, 56, 10, "Drive 4", NULL, NULL);
  754.         menu_System02s04 = MakeMenuItem (128, 40, 56, 10, "Drive 5", NULL, NULL);
  755.         menu_System02s05 = MakeMenuItem (128, 50, 56, 10, "Drive 6", NULL, NULL);
  756.         menu_System02s06 = MakeMenuItem (128, 60, 56, 10, "Drive 7", NULL, NULL);
  757.         menu_System02s07 = MakeMenuItem (128, 70, 56, 10, "Drive 8", NULL, NULL);
  758.  
  759.         menu_System02s00->NextItem = menu_System02s01;
  760.         menu_System02s01->NextItem = menu_System02s02;
  761.         menu_System02s02->NextItem = menu_System02s03;
  762.         menu_System02s03->NextItem = menu_System02s04;
  763.         menu_System02s04->NextItem = menu_System02s05;
  764.         menu_System02s05->NextItem = menu_System02s06;
  765.         menu_System02s06->NextItem = menu_System02s07;
  766.  
  767.         menu_System02->SubItem = menu_System02s00;
  768.  
  769.     menu_System03 = MakeMenuItem (0, 35, 144, 10, "Insert Cartridge »", NULL, NULL);
  770.         menu_System03s00 = MakeMenuItem (128, 0, 128, 10, "8K Cart...", NULL, NULL);
  771.         menu_System03s01 = MakeMenuItem (128, 10, 128, 10, "16K Cart...", NULL, NULL);
  772.         menu_System03s02 = MakeMenuItem (128, 20, 128, 10, "OSS SuperCart...", NULL, NULL);
  773.  
  774.         menu_System03s00->NextItem = menu_System03s01;
  775.         menu_System03s01->NextItem = menu_System03s02;
  776.  
  777.         menu_System03->SubItem = menu_System03s00;
  778.  
  779.     menu_System04 = MakeMenuItem (0, 45, 144, 10, "Remove Cartridge", NULL, NULL);
  780.     menu_System05 = MakeMenuItem (0, 60, 144, 10, "Enable PIL", NULL, NULL);
  781.     menu_System06 = MakeMenuItem (0, 75, 144, 10, "Atari 800 OS/A", NULL, NULL);
  782.     menu_System07 = MakeMenuItem (0, 85, 144, 10, "Atari 800 OS/B", NULL, NULL);
  783.     menu_System08 = MakeMenuItem (0, 95, 144, 10, "Atari 800XL", NULL, NULL);
  784.     menu_System09 = MakeMenuItem (0, 105, 144, 10, "Atari 130XE", NULL, NULL);
  785.  
  786.     menu_System00->NextItem = menu_System01;
  787.     menu_System01->NextItem = menu_System02;
  788.     menu_System02->NextItem = menu_System03;
  789.     menu_System03->NextItem = menu_System04;
  790.     menu_System04->NextItem = menu_System05;
  791.     menu_System05->NextItem = menu_System06;
  792.     menu_System06->NextItem = menu_System07;
  793.     menu_System07->NextItem = menu_System08;
  794.     menu_System08->NextItem = menu_System09;
  795.  
  796.     menu_System = MakeMenu (48, 0, 56, "System", menu_System00);
  797.  
  798. /*
  799.  * Setup Console Menu
  800.  */
  801.  
  802.     menu_Console00 = MakeMenuItem    (0, 0, 80, 10, "Option", NULL, NULL);
  803.     menu_Console01 = MakeMenuItem    (0, 10, 80, 10, "Select", NULL, NULL);
  804.     menu_Console02 = MakeMenuItem    (0, 20, 80, 10, "Start", NULL, NULL);
  805.     menu_Console03 = MakeMenuItem    (0, 30, 80, 10, "Help", NULL, NULL);
  806.  
  807.         if (machine == Atari)
  808.         {
  809.             menu_Console03->Flags = ITEMTEXT | HIGHCOMP;
  810.         }
  811.  
  812.     menu_Console04 = MakeMenuItem (0, 45, 80, 10, "Break", NULL, NULL);
  813.     menu_Console05 = MakeMenuItem    (0, 60, 80, 10, "Reset", NULL, NULL);
  814.     menu_Console06 = MakeMenuItem (0, 75, 80, 10, "Cold Start", NULL, NULL);
  815.  
  816.     menu_Console00->NextItem = menu_Console01;
  817.     menu_Console01->NextItem = menu_Console02;
  818.     menu_Console02->NextItem = menu_Console03;
  819.     menu_Console03->NextItem = menu_Console04;
  820.     menu_Console04->NextItem = menu_Console05;
  821.     menu_Console05->NextItem = menu_Console06;
  822.  
  823.     menu_Console = MakeMenu (104, 0, 64, "Console", menu_Console00);
  824.  
  825. /*
  826.  * Setup Prefs Menu
  827.  */
  828.  
  829. /*
  830.     menu_Prefs00 = MakeMenuItem (0, 0, 96, 10, "Controller »", NULL, NULL);
  831.         menu_Prefs00s00 = MakeMenuItem (80, 0, 80, 10, "  Joystick", NULL, 2);
  832.         menu_Prefs00s01 = MakeMenuItem (80, 10, 80, 10, "  Paddle", NULL, 1);
  833.  
  834.         if (Controller == controller_Joystick)
  835.         {
  836.             menu_Prefs00s00->Flags = menu_Prefs00s00->Flags | CHECKED;
  837.         }
  838.         else if (Controller == controller_Paddle)
  839.         {
  840.             menu_Prefs00s01->Flags = menu_Prefs00s01->Flags | CHECKED;
  841.         }
  842.  
  843.         menu_Prefs00s00->NextItem = menu_Prefs00s01;
  844.  
  845.         menu_Prefs00->SubItem = menu_Prefs00s00;
  846. */
  847.  
  848.     menu_Prefs00 = MakeMenuItem (0, 0, 96, 10, "Controller »", NULL, NULL);
  849.         menu_Prefs00s00 = MakeMenuItem (80, 0, 80, 10, "Port 1...", NULL, NULL);
  850.         menu_Prefs00s01 = MakeMenuItem (80, 10, 80, 10, "Port 2...", NULL, NULL);
  851.             menu_Prefs00s01->Flags = ITEMTEXT | HIGHCOMP;
  852.  
  853.         menu_Prefs00s02 = MakeMenuItem (80, 20, 80, 10, "Port 3...", NULL, NULL);
  854. /*
  855.             if (machine != Atari)
  856.             {
  857.                 menu_Prefs00s02->Flags = ITEMTEXT | HIGHCOMP;
  858.             }
  859. */
  860.             menu_Prefs00s02->Flags = ITEMTEXT | HIGHCOMP;
  861.  
  862.         menu_Prefs00s03 = MakeMenuItem (80, 30, 80, 10, "Port 4...", NULL, NULL);
  863. /*
  864.             if (machine != Atari)
  865.             {
  866.                 menu_Prefs00s03->Flags = ITEMTEXT | HIGHCOMP;
  867.             }
  868. */
  869.             menu_Prefs00s03->Flags = ITEMTEXT | HIGHCOMP;
  870.  
  871.         menu_Prefs00s00->NextItem = menu_Prefs00s01;
  872.         menu_Prefs00s01->NextItem = menu_Prefs00s02;
  873.         menu_Prefs00s02->NextItem = menu_Prefs00s03;
  874.  
  875.         menu_Prefs00->SubItem = menu_Prefs00s00;
  876.  
  877.     menu_Prefs01 = MakeMenuItem (0, 10, 96, 10, "Display    »", NULL, NULL);
  878.         menu_Prefs01s00 = MakeMenuItem (80, 0, 64, 10, "  Colour", NULL, 2);
  879.         menu_Prefs01s01 = MakeMenuItem (80, 10, 64, 10, "  Grey", NULL, 1);
  880.  
  881.         if (ColourEnabled)
  882.         {
  883.             menu_Prefs01s00->Flags = menu_Prefs01s00->Flags | CHECKED;
  884.         }
  885.         else
  886.         {
  887.             menu_Prefs01s01->Flags = menu_Prefs01s01->Flags | CHECKED;
  888.         }
  889.  
  890.         menu_Prefs01s00->NextItem = menu_Prefs01s01;
  891.  
  892.         menu_Prefs01->SubItem = menu_Prefs01s00;
  893.  
  894.     menu_Prefs02 = MakeMenuItem (0, 20, 96, 10, "Refresh    »", NULL, NULL);
  895.         menu_Prefs02s00 = MakeMenuItem (80, 0, 24, 10, "  1", NULL, 14);
  896.         menu_Prefs02s01 = MakeMenuItem (80, 10, 24, 10, "  2", NULL, 13);
  897.         menu_Prefs02s02 = MakeMenuItem (80, 20, 24, 10, "  4", NULL, 11);
  898.         menu_Prefs02s03 = MakeMenuItem (80, 30, 24, 10, "  8", NULL, 7);
  899.  
  900.         if (refresh_rate == 1)
  901.         {
  902.             menu_Prefs02s00->Flags = menu_Prefs02s00->Flags | CHECKED;
  903.         }
  904.         else if (refresh_rate == 2)
  905.         {
  906.             menu_Prefs02s01->Flags = menu_Prefs02s01->Flags | CHECKED;
  907.         }
  908.         else if (refresh_rate == 4)
  909.         {
  910.             menu_Prefs02s02->Flags = menu_Prefs02s02->Flags | CHECKED;
  911.         }
  912.         else if (refresh_rate == 8)
  913.         {
  914.             menu_Prefs02s03->Flags = menu_Prefs02s03->Flags | CHECKED;
  915.         }
  916.  
  917.         menu_Prefs02s00->NextItem = menu_Prefs02s01;
  918.         menu_Prefs02s01->NextItem = menu_Prefs02s02;
  919.         menu_Prefs02s02->NextItem = menu_Prefs02s03;
  920.  
  921.         menu_Prefs02->SubItem = menu_Prefs02s00;
  922.  
  923.     menu_Prefs03 = MakeMenuItem (0, 30, 96, 10, "Countdown  »", NULL, NULL);
  924.         menu_Prefs03s00 = MakeMenuItem (80, 0, 56, 10, "  4000", NULL, 14);
  925.         menu_Prefs03s01 = MakeMenuItem (80, 10, 56, 10, "  8000", NULL, 13);
  926.         menu_Prefs03s02 = MakeMenuItem (80, 20, 56, 10, "  16000", NULL, 11);
  927.         menu_Prefs03s03 = MakeMenuItem (80, 30, 56, 10, "  32000", NULL, 7);
  928.  
  929.         if (countdown_rate == 4000)
  930.         {
  931.             menu_Prefs03s00->Flags = menu_Prefs03s00->Flags | CHECKED;
  932.         }
  933.         else if (countdown_rate == 8000)
  934.         {
  935.             menu_Prefs03s01->Flags = menu_Prefs03s01->Flags | CHECKED;
  936.         }
  937.         else if (countdown_rate == 16000)
  938.         {
  939.             menu_Prefs03s02->Flags = menu_Prefs03s02->Flags | CHECKED;
  940.         }
  941.         else if (countdown_rate == 32000)
  942.         {
  943.             menu_Prefs03s03->Flags = menu_Prefs03s03->Flags | CHECKED;
  944.         }
  945.  
  946.         menu_Prefs03s00->NextItem = menu_Prefs03s01;
  947.         menu_Prefs03s01->NextItem = menu_Prefs03s02;
  948.         menu_Prefs03s02->NextItem = menu_Prefs03s03;
  949.  
  950.         menu_Prefs03->SubItem = menu_Prefs03s00;
  951.  
  952.     menu_Prefs00->NextItem = menu_Prefs01;
  953.     menu_Prefs01->NextItem = menu_Prefs02;
  954.     menu_Prefs02->NextItem = menu_Prefs03;
  955.  
  956.     menu_Prefs = MakeMenu (168, 0, 48, "Prefs", menu_Prefs00);
  957.  
  958. /*
  959.  * Link Menus
  960.  */
  961.  
  962.     menu_Project->NextMenu = menu_System;
  963.     menu_System->NextMenu = menu_Console;
  964.     menu_Console->NextMenu = menu_Prefs;
  965.  
  966.     SetMenuStrip (WindowMain, menu_Project);
  967.  
  968.     image_Screen.LeftEdge = 0;
  969.     image_Screen.TopEdge = 0;
  970.     image_Screen.Width = 384;
  971.     image_Screen.Height = 240;
  972.     image_Screen.Depth = 8;
  973.     image_Screen.ImageData = data_Screen;
  974.     image_Screen.PlanePick = 255;
  975.     image_Screen.PlaneOnOff = NULL;
  976.     image_Screen.NextImage = NULL;
  977.  
  978.     /*
  979.      * ============================
  980.      * Storage for Atari 800 Screen
  981.      * ============================
  982.      */
  983.  
  984.     image_data = (UBYTE*) malloc (ATARI_MODOLU * ATARI_HEIGHT);
  985.     if (!image_data)
  986.     {
  987.         printf ("Failed to allocate space for image\n");
  988.         Atari_Exit (0);
  989.     }
  990.  
  991.     for (ptr=image_data,i=0;i<ATARI_MODULO*ATARI_HEIGHT;i++,ptr++) *ptr = 0;
  992.     for (ptr=(char *)data_Screen,i=0;i<ATARI_MODULO*ATARI_HEIGHT;i++,ptr++) *ptr = 0;
  993.  
  994.     trig0 = 1;
  995.     stick0 = 15;
  996.     consol = 7;
  997. }
  998.  
  999.  
  1000.  
  1001. /*
  1002.  * ==========
  1003.  * Atari_Exit
  1004.  * ==========
  1005.  */
  1006.  
  1007. /*
  1008.  * Revision     : v0.2.0
  1009.  * Introduced   : NOT KNOWN (Before 2nd September 1995)
  1010.  * Last updated : 7th September 1995
  1011.  */
  1012.  
  1013. int Atari_Exit (int run_monitor)
  1014. {
  1015.     if (run_monitor)
  1016.     {
  1017.         if (monitor ())
  1018.         {
  1019.             return TRUE;
  1020.         }
  1021.     }
  1022.  
  1023.     AbortIO (gameport_io_msg);
  1024.  
  1025.     while (GetMsg (gameport_msg_port))
  1026.     {
  1027.     }
  1028.  
  1029.     if (!gameport_error)
  1030.     {
  1031.         {
  1032.             BYTE type = GPCT_NOCONTROLLER;
  1033.  
  1034.             gameport_io_msg->io_Command = GPD_SETCTYPE;
  1035.             gameport_io_msg->io_Length = 1;
  1036.             gameport_io_msg->io_Data = (APTR) &type;
  1037.  
  1038.             DoIO (gameport_io_msg);
  1039.  
  1040.             if (gameport_io_msg->io_Error)
  1041.             {
  1042.                 printf ("Failed to set controller type\n");
  1043.             }
  1044.         }
  1045.  
  1046.         CloseDevice (gameport_io_msg);
  1047.     }
  1048.  
  1049.     FreeMem (data_Screen, 46080 * 2);
  1050.  
  1051.     if (gameport_io_msg)
  1052.     {
  1053.         DeleteStdIO (gameport_io_msg);
  1054.     }
  1055.  
  1056.     if (gameport_msg_port)
  1057.     {
  1058.         DeletePort (gameport_msg_port);
  1059.     }
  1060.  
  1061.     if (WindowMain)
  1062.     {
  1063.         CloseWindow (WindowMain);
  1064.     }
  1065.  
  1066.     if (ScreenMain)
  1067.     {
  1068.         CloseScreen (ScreenMain);
  1069.     }
  1070.  
  1071.     if (LayersBase)
  1072.     {
  1073.         CloseLibrary (LayersBase);
  1074.     }
  1075.  
  1076.     if (GfxBase)
  1077.     {
  1078.         CloseLibrary (GfxBase);
  1079.     }
  1080.  
  1081.     if (IntuitionBase)
  1082.     {
  1083.         CloseLibrary (IntuitionBase);
  1084.     }
  1085.  
  1086.     exit (1);
  1087.  
  1088. /*
  1089.     return FALSE;
  1090. */
  1091. }
  1092.  
  1093.  
  1094.  
  1095. /*
  1096.  * ===================
  1097.  * Atari_DisplayScreen
  1098.  * ===================
  1099.  */
  1100.  
  1101. /*
  1102.  * Revision     : v0.2.0a
  1103.  * Introduced   : NOT KNOWN (Before 2nd September 1995)
  1104.  * Last updated : 7th September 1995
  1105.  */
  1106.  
  1107. void Atari_DisplayScreen (UBYTE *screen)
  1108. {
  1109. /*
  1110.     UWORD    *bitplane0;
  1111.     UWORD    *bitplane1;
  1112.     UWORD    *bitplane2;
  1113.     UWORD    *bitplane3;
  1114.     UWORD    *bitplane4;
  1115.  
  1116.     bitplane0 = WindowMain->RPort->BitMap->Planes[0];
  1117.     word0 = *bitplane0;
  1118.  
  1119.     bitplane1 = WindowMain->RPort->BitMap->Planes[1]; 
  1120.     word1 = *bitplane1;
  1121.  
  1122.     bitplane2 = WindowMain->RPort->BitMap->Planes[2];
  1123.     word2 = *bitplane2;
  1124.  
  1125.     bitplane3 = WindowMain->RPort->BitMap->Planes[3];
  1126.     word3 = *bitplane3;
  1127.  
  1128.     bitplane4 = WindowMain->RPort->BitMap->Planes[4];
  1129.     word4 = *bitplane4;
  1130. */
  1131.  
  1132.     consol = 7;
  1133.  
  1134.     if (ChipSet == AGA_ChipSet)
  1135.     {
  1136.         ULONG    *bitplane0;
  1137.  
  1138.         bitplane0 = &data_Screen[0];
  1139.  
  1140.         if (ColourEnabled)
  1141.           amiga_aga_colour (screen, bitplane0);
  1142.         else
  1143.           amiga_aga_bw (screen, bitplane0);
  1144.     }
  1145.     else
  1146.     {
  1147.         ULONG    *bitplane0;
  1148.         ULONG    *bitplane1;
  1149.         ULONG    *bitplane2;
  1150.         ULONG    *bitplane3;
  1151.         ULONG    *bitplane4;
  1152.  
  1153.         ULONG    word0, word1, word2, word3, word4;
  1154.  
  1155.         int ypos;
  1156.         int    xpos;
  1157.         int    tbit = 31;
  1158.         UBYTE *scanline_ptr;
  1159.  
  1160.         BYTE pens[256];
  1161.         int pen;
  1162.  
  1163.         scanline_ptr = image_data;
  1164.  
  1165.         bitplane0 = &data_Screen[0];
  1166.         word0 = *bitplane0;
  1167.  
  1168.         bitplane1 = &data_Screen[5760]; 
  1169.         word1 = *bitplane1;
  1170.  
  1171.         bitplane2 = &data_Screen[11520];
  1172.         word2 = *bitplane2;
  1173.  
  1174.         bitplane3 = &data_Screen[17280];
  1175.         word3 = *bitplane3;
  1176.  
  1177.         bitplane4 = &data_Screen[23040];
  1178.         word4 = *bitplane4;
  1179.  
  1180.         for (pen=0;pen<256;pen++)
  1181.         {
  1182.             pens[pen] = 0;
  1183.         }
  1184.  
  1185.         pen = 5;
  1186.  
  1187.         if (CustomScreen)
  1188.         {
  1189.             pen = 1;
  1190.         }
  1191.  
  1192.         if (ColourEnabled)
  1193.         {
  1194.             for (ypos=0;ypos<ATARI_HEIGHT;ypos++)
  1195.             {
  1196.                 for (xpos=0;xpos<ATARI_WIDTH;xpos++)
  1197.                 {
  1198.                     UBYTE    colour;
  1199.  
  1200.                     colour = *screen;
  1201.  
  1202.                     if (pens[colour] == 0)
  1203.                     {
  1204.                         if (pen<33)
  1205.                         {
  1206.                             int rgb = colortable[colour];
  1207.                             int red;
  1208.                             int green;
  1209.                             int blue;
  1210.  
  1211.                             pens[colour] = pen;
  1212.                             pen++;
  1213.  
  1214.                             if (UpdatePalette)
  1215.                             {
  1216.                                 red = (rgb & 0x00ff0000) >> 20;
  1217.                                 green = (rgb & 0x0000ff00) >> 12;
  1218.                                 blue = (rgb & 0x000000ff) >> 4;
  1219.  
  1220.                                 SetRGB4 (&WindowMain->WScreen->ViewPort, pen-1, red, green, blue);
  1221.                             }
  1222.                         }
  1223.                     }
  1224.  
  1225.                     colour = pens[*screen++];
  1226.  
  1227.                     if (colour != *scanline_ptr)
  1228.                     {
  1229.                         ULONG mask;
  1230.  
  1231.                         mask = ~(1 << tbit);
  1232.  
  1233.                         word0 = (word0 & mask) | (((colour) & 1) << tbit);
  1234.                         word1 = (word1 & mask) | (((colour >> 1) & 1) << tbit);
  1235.                         word2 = (word2 & mask) | (((colour >> 2) & 1) << tbit);
  1236.                         word3 = (word3 & mask) | (((colour >> 3) & 1) << tbit);
  1237.                         word4 = (word4 & mask) | (((colour >> 4) & 1) << tbit);
  1238.  
  1239.                         *scanline_ptr++ = colour;
  1240.                     }
  1241.                     else
  1242.                     {
  1243.                         scanline_ptr++;
  1244.                     }
  1245.  
  1246.                     if (--tbit == -1)
  1247.                     {
  1248.                         *bitplane0++ = word0;
  1249.                         word0 = *bitplane0;
  1250.  
  1251.                         *bitplane1++ = word1;
  1252.                         word1 = *bitplane1;
  1253.  
  1254.                         *bitplane2++ = word2;
  1255.                         word2 = *bitplane2;
  1256.  
  1257.                         *bitplane3++ = word3;
  1258.                         word3 = *bitplane3;
  1259.  
  1260.                         *bitplane4++ = word4;
  1261.                         word4 = *bitplane4;
  1262.  
  1263.                         tbit = 31;
  1264.                     }
  1265.                 }            
  1266.                 screen += ATARI_EXTRA;
  1267.             }
  1268.         }
  1269.         else
  1270.         {
  1271.             for (ypos=0;ypos<ATARI_HEIGHT;ypos++)
  1272.             {
  1273.                 for (xpos=0;xpos<ATARI_WIDTH;xpos++)
  1274.                 {
  1275.                     UBYTE    colour;
  1276.  
  1277.                     colour = (*screen++ & 0x0f) + pen - 1;
  1278.  
  1279.                     if (colour != *scanline_ptr)
  1280.                     {
  1281.                         ULONG mask;
  1282.  
  1283.                         mask = ~(1 << tbit);
  1284.  
  1285.                         word0 = (word0 & mask) | (((colour) & 1) << tbit);
  1286.                         word1 = (word1 & mask) | (((colour >> 1) & 1) << tbit);
  1287.                         word2 = (word2 & mask) | (((colour >> 2) & 1) << tbit);
  1288.                         word3 = (word3 & mask) | (((colour >> 3) & 1) << tbit);
  1289.                         word4 = (word4 & mask) | (((colour >> 4) & 1) << tbit);
  1290.  
  1291.                         *scanline_ptr++ = colour;
  1292.                     }
  1293.                     else
  1294.                     {
  1295.                         scanline_ptr++;
  1296.                     }
  1297.  
  1298.                     if (--tbit == -1)
  1299.                     {
  1300.                         *bitplane0++ = word0;
  1301.                         word0 = *bitplane0;
  1302.  
  1303.                         *bitplane1++ = word1;
  1304.                         word1 = *bitplane1;
  1305.  
  1306.                         *bitplane2++ = word2;
  1307.                         word2 = *bitplane2;
  1308.  
  1309.                         *bitplane3++ = word3;
  1310.                         word3 = *bitplane3;
  1311.  
  1312.                         *bitplane4++ = word4;
  1313.                         word4 = *bitplane4;
  1314.  
  1315.                         tbit = 31;
  1316.                     }
  1317.                 }
  1318.                 screen += ATARI_EXTRA;
  1319.             }
  1320.         }
  1321.     }
  1322.  
  1323.     if (CustomScreen)
  1324.     {
  1325.         DrawImage (WindowMain->RPort, &image_Screen, -32, 0);
  1326.     }
  1327.     else
  1328.     {
  1329.         DrawImage (WindowMain->RPort, &image_Screen, 0, 0);
  1330.     }
  1331. }
  1332.  
  1333.  
  1334.  
  1335. /*
  1336.  * ==============
  1337.  * Atari_Keyboard
  1338.  * ==============
  1339.  */
  1340.  
  1341. /*
  1342.  * Revision     : v0.3.3
  1343.  * Introduced   : NOT KNOWN (Before 2nd September 1995)
  1344.  * Last updated : 7th March 1996
  1345.  *
  1346.  * Notes: Currently contains GUI monitoring code as well. At some time in
  1347.  * the future I intend on removing this from this code.
  1348.  */
  1349.  
  1350. int Atari_Keyboard (void)
  1351. {
  1352.     int keycode;
  1353.  
  1354.     struct IntuiMessage *IntuiMessage;
  1355.  
  1356.     ULONG Class;
  1357.     USHORT Code;
  1358.     APTR Address;
  1359.     SHORT MouseX;
  1360.     SHORT MouseY;
  1361.  
  1362.     USHORT MenuItem = NULL;
  1363.  
  1364.     int Menu = NULL;
  1365.     int Item = NULL;
  1366.     int SubItem = NULL;
  1367.  
  1368.     keycode = -1;
  1369.  
  1370.     while (IntuiMessage = (struct IntuiMessage*) GetMsg (WindowMain->UserPort))
  1371.     {
  1372.         Class = IntuiMessage->Class;
  1373.         Code = IntuiMessage->Code;
  1374.         Address = IntuiMessage->IAddress;
  1375.         MouseX = IntuiMessage->MouseX;
  1376.         MouseY = IntuiMessage->MouseY;
  1377.  
  1378.         MenuItem = Code;
  1379.  
  1380.         Menu = MENUNUM (MenuItem);
  1381.         Item = ITEMNUM (MenuItem);
  1382.         SubItem = SUBNUM (MenuItem);
  1383.  
  1384.         SHIFTPRESSED = (IntuiMessage->Qualifier & 0x03)?(1):(0);
  1385.  
  1386.         if (Class == MENUVERIFY)
  1387.         {
  1388.             if (ChipSet == OCS_ChipSet || ChipSet == ECS_ChipSet)
  1389.             {
  1390.                 if (CustomScreen)
  1391.                 {
  1392.                     int i;
  1393.  
  1394.                     UpdatePalette = FALSE;
  1395.  
  1396.                     for (i=0;i<16;i++)
  1397.                     {
  1398.                         int rgb = colortable[i];
  1399.                         int red;
  1400.                         int green;
  1401.                         int blue;
  1402.  
  1403.                         red = (rgb & 0x00ff0000) >> 20;
  1404.                         green = (rgb & 0x0000ff00) >> 12;
  1405.                         blue = (rgb & 0x000000ff) >> 4;
  1406.  
  1407.                         SetRGB4 (&WindowMain->WScreen->ViewPort, i, red, green, blue);
  1408.                     }
  1409.  
  1410.                     SetRGB4 (&WindowMain->WScreen->ViewPort, 24, 6, 8, 11);
  1411.                 }
  1412.             }
  1413.         }
  1414.  
  1415.         ReplyMsg (IntuiMessage);
  1416.  
  1417.         switch (Class)
  1418.         {
  1419.             case VANILLAKEY :
  1420.                 keycode = Code;
  1421.  
  1422.                 KEYPRESSED = 1;
  1423.  
  1424.                 switch (keycode)
  1425.                 {
  1426.                     case 0x01 :
  1427.                         keycode = AKEY_CTRL_a;
  1428.                         break;
  1429.                     case 0x02 :
  1430.                         keycode = AKEY_CTRL_b;
  1431.                         break;
  1432.                     case 0x03 :
  1433.                         keycode = AKEY_CTRL_c;
  1434.                         break;
  1435.                     case 0x04 :
  1436.                         keycode = AKEY_CTRL_d;
  1437.                         break;
  1438.                     case 0x05 :
  1439.                         keycode = AKEY_CTRL_E;
  1440.                         break;
  1441.                     case 0x06 :
  1442.                         keycode = AKEY_CTRL_F;
  1443.                         break;
  1444.                     case 0x07 :
  1445.                         keycode = AKEY_CTRL_G;
  1446.                         break;
  1447. /*
  1448.                     case 0x08 :
  1449.                         keycode = AKEY_CTRL_H;
  1450.                         break;
  1451. */
  1452. /* TAB - see case '\t' :
  1453.                     case 0x09 :
  1454.                         keycode = AKEY_CTRL_I;
  1455.                         break;
  1456. */
  1457.                     case 0x0a :
  1458.                         keycode = AKEY_CTRL_J;
  1459.                         break;
  1460.                     case 0x0b :
  1461.                         keycode = AKEY_CTRL_K;
  1462.                         break;
  1463.                     case 0x0c :
  1464.                         keycode = AKEY_CTRL_L;
  1465.                         break;
  1466. /*
  1467.                     case 0x0d :
  1468.                         keycode = AKEY_CTRL_M;
  1469.                         break;
  1470. */
  1471.                     case 0x0e :
  1472.                         keycode = AKEY_CTRL_N;
  1473.                         break;
  1474.                     case 0x0f :
  1475.                         keycode = AKEY_CTRL_O;
  1476.                         break;
  1477.                     case 0x10 :
  1478.                         keycode = AKEY_CTRL_P;
  1479.                         break;
  1480.                     case 0x11 :
  1481.                         keycode = AKEY_CTRL_Q;
  1482.                         break;
  1483.                     case 0x12 :
  1484.                         keycode = AKEY_CTRL_R;
  1485.                         break;
  1486.                     case 0x13 :
  1487.                         keycode = AKEY_CTRL_S;
  1488.                         break;
  1489.                     case 0x14 :
  1490.                         keycode = AKEY_CTRL_T;
  1491.                         break;
  1492.                     case 0x15 :
  1493.                         keycode = AKEY_CTRL_U;
  1494.                         break;
  1495.                     case 0x16 :
  1496.                         keycode = AKEY_CTRL_V;
  1497.                         break;
  1498.                     case 0x17 :
  1499.                         keycode = AKEY_CTRL_W;
  1500.                         break;
  1501.                     case 0x18 :
  1502.                         keycode = AKEY_CTRL_X;
  1503.                         break;
  1504.                     case 0x19 :
  1505.                         keycode = AKEY_CTRL_Y;
  1506.                         break;
  1507.                     case 0x1a :
  1508.                         keycode = AKEY_CTRL_Z;
  1509.                         break;
  1510.                     case 8 :
  1511.                         keycode = AKEY_BACKSPACE;
  1512.                         break;
  1513.                     case 13 :
  1514.                         keycode = AKEY_RETURN;
  1515.                         break;
  1516.                     case 0x1b :
  1517.                         keycode = AKEY_ESCAPE;
  1518.                         break;
  1519.                     case '0' :
  1520.                         keycode = AKEY_0;
  1521.                         break;
  1522.                     case '1' :
  1523.                         keycode = AKEY_1;
  1524.                         break;
  1525.                     case '2' :
  1526.                         keycode = AKEY_2;
  1527.                         break;
  1528.                     case '3' :
  1529.                         keycode = AKEY_3;
  1530.                         break;
  1531.                     case '4' :
  1532.                         keycode = AKEY_4;
  1533.                         break;
  1534.                     case '5' :
  1535.                         keycode = AKEY_5;
  1536.                         break;
  1537.                     case '6' :
  1538.                         keycode = AKEY_6;
  1539.                         break;
  1540.                     case '7' :
  1541.                         keycode = AKEY_7;
  1542.                         break;
  1543.                     case '8' :
  1544.                         keycode = AKEY_8;
  1545.                         break;
  1546.                     case '9' :
  1547.                         keycode = AKEY_9;
  1548.                         break;
  1549.                     case 'A' : case 'a' :
  1550.                         keycode = AKEY_a;
  1551.                         break;
  1552.                     case 'B' : case 'b' :
  1553.                         keycode = AKEY_b;
  1554.                         break;
  1555.                     case 'C' : case 'c' :
  1556.                         keycode = AKEY_c;
  1557.                         break;
  1558.                     case 'D' : case 'd' :
  1559.                         keycode = AKEY_d;
  1560.                         break;
  1561.                     case 'E' : case 'e' :
  1562.                         keycode = AKEY_e;
  1563.                         break;
  1564.                     case 'F' : case 'f' :
  1565.                         keycode = AKEY_f;
  1566.                         break;
  1567.                     case 'G' : case 'g' :
  1568.                         keycode = AKEY_g;
  1569.                         break;
  1570.                     case 'H' : case 'h' :
  1571.                         keycode = AKEY_h;
  1572.                         break;
  1573.                     case 'I' : case 'i' :
  1574.                         keycode = AKEY_i;
  1575.                         break;
  1576.                     case 'J' : case 'j' :
  1577.                         keycode = AKEY_j;
  1578.                         break;
  1579.                     case 'K' : case 'k' :
  1580.                         keycode = AKEY_k;
  1581.                         break;
  1582.                     case 'L' : case 'l' :
  1583.                         keycode = AKEY_l;
  1584.                         break;
  1585.                     case 'M' : case 'm' :
  1586.                         keycode = AKEY_m;
  1587.                         break;
  1588.                     case 'N' : case 'n' :
  1589.                         keycode = AKEY_n;
  1590.                         break;
  1591.                     case 'O' : case 'o' :
  1592.                         keycode = AKEY_o;
  1593.                         break;
  1594.                     case 'P' : case 'p' :
  1595.                         keycode = AKEY_p;
  1596.                         break;
  1597.                     case 'Q' : case 'q' :
  1598.                         keycode = AKEY_q;
  1599.                         break;
  1600.                     case 'R' : case 'r' :
  1601.                         keycode = AKEY_r;
  1602.                         break;
  1603.                     case 'S' : case 's' :
  1604.                         keycode = AKEY_s;
  1605.                         break;
  1606.                     case 'T' : case 't' :
  1607.                         keycode = AKEY_t;
  1608.                         break;
  1609.                     case 'U' : case 'u' :
  1610.                         keycode = AKEY_u;
  1611.                         break;
  1612.                     case 'V' : case 'v' :
  1613.                         keycode = AKEY_v;
  1614.                         break;
  1615.                     case 'W' : case 'w' :
  1616.                         keycode = AKEY_w;
  1617.                         break;
  1618.                     case 'X' : case 'x' :
  1619.                         keycode = AKEY_x;
  1620.                         break;
  1621.                     case 'Y' : case 'y' :
  1622.                         keycode = AKEY_y;
  1623.                         break;
  1624.                     case 'Z' : case 'z' :
  1625.                         keycode = AKEY_z;
  1626.                         break;
  1627.                     case ' ' :
  1628.                         keycode = AKEY_SPACE;
  1629.                         break;
  1630.                     case '\t' :
  1631.                         keycode = AKEY_TAB;
  1632.                         break;
  1633.                     case '!' :
  1634.                         keycode = AKEY_EXCLAMATION;
  1635.                         break;
  1636.                     case '"' :
  1637.                         keycode = AKEY_DBLQUOTE;
  1638.                         break;
  1639.                     case '#' :
  1640.                         keycode = AKEY_HASH;
  1641.                         break;
  1642.                     case '$' :
  1643.                         keycode = AKEY_DOLLAR;
  1644.                         break;
  1645.                     case '%' :
  1646.                         keycode = AKEY_PERCENT;
  1647.                         break;
  1648.                     case '&' :
  1649.                         keycode = AKEY_AMPERSAND;
  1650.                         break;
  1651.                     case '\'' :
  1652.                         keycode = AKEY_QUOTE;
  1653.                         break;
  1654.                     case '@' :
  1655.                         keycode = AKEY_AT;
  1656.                         break;
  1657.                     case '(' :
  1658.                         keycode = AKEY_PARENLEFT;
  1659.                         break;
  1660.                     case ')' :
  1661.                         keycode = AKEY_PARENRIGHT;
  1662.                         break;
  1663.                     case '<' :
  1664.                         keycode = AKEY_LESS;
  1665.                         break;
  1666.                     case '>' :
  1667.                         keycode = AKEY_GREATER;
  1668.                         break;
  1669.                     case '=' :
  1670.                         keycode = AKEY_EQUAL;
  1671.                         break;
  1672.                     case '?' :
  1673.                         keycode = AKEY_QUESTION;
  1674.                         break;
  1675.                     case '-' :
  1676.                         keycode = AKEY_MINUS;
  1677.                         break;
  1678.                     case '+' :
  1679.                         keycode = AKEY_PLUS;
  1680.                         break;
  1681.                     case '*' :
  1682.                         keycode = AKEY_ASTERISK;
  1683.                         break;
  1684.                     case '/' :
  1685.                         keycode = AKEY_SLASH;
  1686.                         break;
  1687.                     case ':' :
  1688.                         keycode = AKEY_COLON;
  1689.                         break;
  1690.                     case ';' :
  1691.                         keycode = AKEY_SEMICOLON;
  1692.                         break;
  1693.                     case ',' :
  1694.                         keycode = AKEY_COMMA;
  1695.                         break;
  1696.                     case '.' :
  1697.                         keycode = AKEY_FULLSTOP;
  1698.                         break;
  1699.                     case '_' :
  1700.                         keycode = AKEY_UNDERSCORE;
  1701.                         break;
  1702.                     case '[' :
  1703.                         keycode = AKEY_BRACKETLEFT;
  1704.                         break;
  1705.                     case ']' :
  1706.                         keycode = AKEY_BRACKETRIGHT;
  1707.                         break;
  1708.                     case '^' :
  1709.                         keycode = AKEY_CIRCUMFLEX;
  1710.                         break;
  1711.                     case '\\' :
  1712.                         keycode = AKEY_BACKSLASH;
  1713.                         break;
  1714.                     case '|' :
  1715.                         keycode = AKEY_BAR;
  1716.                         break;
  1717.                     default :
  1718.                         keycode = AKEY_NONE;
  1719.                         break;
  1720.                 }
  1721.                 break;
  1722.             case RAWKEY :
  1723.                     if ((code & 0x7f) < 0x60)
  1724.                   KEYPRESSED = (keycode & 0x80)?(0):(1);
  1725.  
  1726.                 switch (Code)
  1727.                 {
  1728.                     case 0x51 :
  1729.                         consol &= 0x03;
  1730.                         keycode = AKEY_NONE;
  1731.                         break;
  1732.                     case 0x52 :
  1733.                         consol &= 0x05;
  1734.                         keycode = AKEY_NONE;
  1735.                         break;
  1736.                     case 0x53 :
  1737.                         consol &= 0x06;
  1738.                         keycode = AKEY_NONE;
  1739.                         break;
  1740.                     case 0x55 :
  1741.                         keycode = AKEY_PIL;
  1742.                         break;
  1743.                     case 0x56 :
  1744.                         keycode = AKEY_BREAK;
  1745.                         break;
  1746.                     case 0x59 :
  1747.                         keycode = AKEY_NONE;
  1748.                         break;
  1749.                     case 0x4f :
  1750.                         keycode = AKEY_LEFT;
  1751.                         break;
  1752.                     case 0x4c :
  1753.                         keycode = AKEY_UP;
  1754.                         break;
  1755.                     case 0x4e :
  1756.                         keycode = AKEY_RIGHT;
  1757.                         break;
  1758.                     case 0x4d :
  1759.                         keycode = AKEY_DOWN;
  1760.                         break;
  1761.                     default :
  1762.                         break;
  1763.                 }                
  1764.                 break;
  1765.             case MOUSEBUTTONS :
  1766.                 if (Controller == controller_Paddle)
  1767.                 {
  1768.                     switch (Code)
  1769.                     {
  1770.                         case SELECTDOWN :
  1771.                             stick0 = 251;
  1772.                             break;
  1773.                         case SELECTUP :
  1774.                             stick0 = 255;
  1775.                             break;
  1776.                         default :
  1777.                             break;
  1778.                     }
  1779.                 }
  1780.                 break;
  1781.             case MOUSEMOVE :
  1782.                 if (Controller == controller_Paddle)
  1783.                 {
  1784.                     if (MouseX > 57)
  1785.                     {
  1786.                         if (MouseX < 287)
  1787.                         {
  1788.                             PaddlePos = 228 - (MouseX - 58);
  1789.                         }
  1790.                         else
  1791.                         {
  1792.                             PaddlePos = 0;
  1793.                         }
  1794.                     }
  1795.                     else
  1796.                     {
  1797.                         PaddlePos = 228;
  1798.                     }
  1799.                 }
  1800.                 break;
  1801.             case CLOSEWINDOW :
  1802.                 if (DisplayYesNoWindow ())
  1803.                 {
  1804.                     keycode = AKEY_EXIT;
  1805.                 }
  1806.                 break;
  1807.             case MENUPICK :
  1808.                 switch (Menu)
  1809.                 {
  1810.                     case 0 :
  1811.                         switch (Item)
  1812.                         {
  1813.                             case 0 :
  1814.                                 Iconify ();
  1815. /*
  1816.                                 DisplayNotSupportedWindow ();
  1817. */
  1818.                                 break;
  1819.                             case 1 :
  1820.                                 SystemTags
  1821.                                 (
  1822.                                     "Run >Nil: <Nil: MultiView Atari800.guide",
  1823.                                     SYS_Input, NULL,
  1824.                                     SYS_Output, NULL,
  1825.                                     TAG_DONE
  1826.                                 );
  1827.                                 break;
  1828.                             case 2 :
  1829.                                 DisplayAboutWindow ();
  1830.                                 break;
  1831.                             case 3 :
  1832.                                 if (DisplayYesNoWindow ())
  1833.                                 {
  1834.                                     keycode = AKEY_EXIT;
  1835.                                 }
  1836.                                 break;
  1837.                             default :
  1838.                                 break;
  1839.                         }
  1840.                         break;
  1841.                     case 1 :
  1842.                         switch (Item)
  1843.                         {
  1844.                             case 0 :
  1845.                                 if (InsertDisk (1))
  1846.                                 {
  1847.                                     keycode = AKEY_COLDSTART;
  1848.                                 }
  1849.                                 break;
  1850.                             case 1 :
  1851.                                 switch (SubItem)
  1852.                                 {
  1853.                                     case 0 :
  1854.                                         if (InsertDisk (1))
  1855.                                         {
  1856.                                         }
  1857.                                         break;
  1858.                                     case 1 :
  1859.                                         if (InsertDisk (2))
  1860.                                         {
  1861.                                         }
  1862.                                         break;
  1863.                                     case 2 :
  1864.                                         if (InsertDisk (3))
  1865.                                         {
  1866.                                         }
  1867.                                         break;
  1868.                                     case 3 :
  1869.                                         if (InsertDisk (4))
  1870.                                         {
  1871.                                         }
  1872.                                         break;
  1873.                                     case 4 :
  1874.                                         if (InsertDisk (5))
  1875.                                         {
  1876.                                         }
  1877.                                         break;
  1878.                                     case 5 :
  1879.                                         if (InsertDisk (6))
  1880.                                         {
  1881.                                         }
  1882.                                         break;
  1883.                                     case 6 :
  1884.                                         if (InsertDisk (7))
  1885.                                         {
  1886.                                         }
  1887.                                         break;
  1888.                                     case 7 :
  1889.                                         if (InsertDisk (8))
  1890.                                         {
  1891.                                         }
  1892.                                         break;
  1893.                                     default :
  1894.                                         break;
  1895.                                 }
  1896.                                 break;
  1897.                             case 2 :
  1898.                                 switch (SubItem)
  1899.                                 {
  1900.                                     case 0 :
  1901.                                         SIO_Dismount (1);
  1902.                                         break;
  1903.                                     case 1 :
  1904.                                         SIO_Dismount (2);
  1905.                                         break;
  1906.                                     case 2 :
  1907.                                         SIO_Dismount (3);
  1908.                                         break;
  1909.                                     case 3 :
  1910.                                         SIO_Dismount (4);
  1911.                                         break;
  1912.                                     case 4 :
  1913.                                         SIO_Dismount (5);
  1914.                                         break;
  1915.                                     case 5 :
  1916.                                         SIO_Dismount (6);
  1917.                                         break;
  1918.                                     case 6 :
  1919.                                         SIO_Dismount (7);
  1920.                                         break;
  1921.                                     case 7 :
  1922.                                         SIO_Dismount (8);
  1923.                                         break;
  1924.                                     default :
  1925.                                         break;
  1926.                                 }
  1927.                                 break;
  1928.                             case 3 :
  1929.                                 switch (SubItem)
  1930.                                 {
  1931.                                     case 0 :
  1932.                                         InsertROM (0);
  1933.                                         break;
  1934.                                     case 1 :
  1935.                                         InsertROM (1);
  1936.                                         break;
  1937.                                     case 2 :
  1938.                                         InsertROM (2);
  1939.                                         break;
  1940.                                     default :
  1941.                                         break;
  1942.                                 }
  1943.                                 break;
  1944.                             case 4 :
  1945.                               Remove_ROM ();
  1946.                               Coldstart ();
  1947.                                 break;
  1948.                             case 5 :
  1949.                               EnablePILL ();
  1950.                               Coldstart ();
  1951.                                 break;
  1952.                             case 6 :
  1953.                                 /*
  1954.                                  * Atari800 OS/A
  1955.                                  */
  1956.  
  1957.                                 {
  1958.                                     int status;
  1959.  
  1960.                                     status = Initialise_AtariOSA ();
  1961.                                     if (status)
  1962.                                     {
  1963.                                         if (machine == Atari)
  1964.                                         {
  1965.                                             menu_Console03->Flags = ITEMTEXT | HIGHCOMP;
  1966.                                         }
  1967.                                         else
  1968.                                         {
  1969.                                             menu_Console03->Flags = ITEMTEXT | ITEMENABLED | HIGHCOMP;
  1970.                                         }
  1971.                                     }
  1972.                                     else
  1973.                                     {
  1974.                                     }
  1975.                                 }
  1976.                                 break;
  1977.                             case 7 :
  1978.                                 /*
  1979.                                  * Atari800 OS/B
  1980.                                  */
  1981.  
  1982.                                 {
  1983.                                     int status;
  1984.                                     status = Initialise_AtariOSB ();
  1985.                                     if (status)
  1986.                                     {
  1987.                                         if (machine == Atari)
  1988.                                         {
  1989.                                             menu_Console03->Flags = ITEMTEXT | HIGHCOMP;
  1990.                                         }
  1991.                                         else
  1992.                                         {
  1993.                                             menu_Console03->Flags = ITEMTEXT | ITEMENABLED | HIGHCOMP;
  1994.                                         }
  1995.                                     }
  1996.                                     else
  1997.                                     {
  1998.                                     }
  1999.                                 }
  2000.                                 break;
  2001.                             case 8 :
  2002.                                 /*
  2003.                                  * Atari800 XL
  2004.                                  */
  2005.  
  2006.                                 {
  2007.                                     int status;
  2008.  
  2009.                                     status = Initialise_AtariXL ();
  2010.                                     if (status)
  2011.                                     {
  2012.                                         if (machine == Atari)
  2013.                                         {
  2014.                                             menu_Console03->Flags = ITEMTEXT | HIGHCOMP;
  2015.                                         }
  2016.                                         else
  2017.                                         {
  2018.                                             menu_Console03->Flags = ITEMTEXT | ITEMENABLED | HIGHCOMP;
  2019.                                         }
  2020.                                     }
  2021.                                     else
  2022.                                     {
  2023.                                     }
  2024.                                 }
  2025.                                 break;
  2026.                             case 9 :
  2027.                                 /*
  2028.                                  * Atari XE
  2029.                                  */
  2030.  
  2031.                                 {
  2032.                                     int status;
  2033.  
  2034.                                     status = Initialise_AtariXE ();
  2035.                                     if (status)
  2036.                                     {
  2037.                                         if (machine == Atari)
  2038.                                         {
  2039.                                             menu_Console03->Flags = ITEMTEXT | HIGHCOMP;
  2040.                                         }
  2041.                                         else
  2042.                                         {
  2043.                                             menu_Console03->Flags = ITEMTEXT | ITEMENABLED | HIGHCOMP;
  2044.                                         }
  2045.                                     }
  2046.                                     else
  2047.                                     {
  2048.                                     }
  2049.                                 }
  2050.                                 break;
  2051.                             default :
  2052.                                 break;
  2053.                         }
  2054.                         break;
  2055.                     case 2 :
  2056.                         switch (Item)
  2057.                         {
  2058.                             case 0 :
  2059.                                 consol &= 0x03;
  2060.                                 keycode = AKEY_NONE;
  2061.                                 break;
  2062.                             case 1 :
  2063.                                 consol &= 0x05;
  2064.                                 keycode = AKEY_NONE;
  2065.                                 break;
  2066.                             case 2 :
  2067.                                 consol &= 0x06;
  2068.                                 keycode = AKEY_NONE;
  2069.                                 break;
  2070.                             case 3 :
  2071.                                 keycode = AKEY_HELP;
  2072.                                 break;
  2073.                             case 4 :
  2074.                                 keycode = AKEY_BREAK;
  2075.                                 break;
  2076.                             case 5 :
  2077.                                 if (DisplayYesNoWindow ())
  2078.                                 {
  2079.                                     keycode = AKEY_WARMSTART;
  2080.                                 }
  2081.                                 break;
  2082.                             case 6 :
  2083.                                 if (DisplayYesNoWindow ())
  2084.                                 {
  2085.                                     keycode = AKEY_COLDSTART;
  2086.                                 }
  2087.                                 break;
  2088.                             default :
  2089.                                 break;
  2090.                         }
  2091.                         break;
  2092.                     case 3 :
  2093.                         switch (Item)
  2094.                         {
  2095.                             case 0 :
  2096.                                 switch (SubItem)
  2097.                                 {
  2098.                                     case 0 :
  2099.                                         DisplayControllerWindow (0);
  2100.                                         break;
  2101.                                     case 1 :
  2102.                                         DisplayControllerWindow (1);
  2103.                                         break;
  2104.                                     case 2 :
  2105.                                         DisplayControllerWindow (2);
  2106.                                         break;
  2107.                                     case 3 :
  2108.                                         DisplayControllerWindow (3);
  2109.                                         break;
  2110.                                     default :
  2111.                                         break;
  2112.                                 }
  2113.                                 break;
  2114.                             case 1 :
  2115.                                 switch (SubItem)
  2116.                                 {
  2117.                                     case 0 :
  2118.                                         ColourEnabled = TRUE;
  2119.                                         break;
  2120.                                     case 1 :
  2121.                                         {
  2122.                                             int i;
  2123.  
  2124.                                             ColourEnabled = FALSE;
  2125.  
  2126.                                             for (i=0;i<16;i++)
  2127.                                             {
  2128.                                                 int rgb = colortable[i];
  2129.                                                 int red;
  2130.                                                 int green;
  2131.                                                 int blue;
  2132.  
  2133.                                                 red = (rgb & 0x00ff0000) >> 20;
  2134.                                                 green = (rgb & 0x0000ff00) >> 12;
  2135.                                                 blue = (rgb & 0x000000ff) >> 4;
  2136.  
  2137.                                                 if (CustomScreen)
  2138.                                                 {
  2139.                                                     SetRGB4 (&WindowMain->WScreen->ViewPort, i, red, green, blue);
  2140.                                                 }
  2141.                                                 else
  2142.                                                 {
  2143.                                                     SetRGB4 (&WindowMain->WScreen->ViewPort, i+4, red, green, blue);
  2144.                                                 }
  2145.                                             }
  2146.                                         }
  2147.                                         break;
  2148.                                     default :
  2149.                                         break;
  2150.                                 }
  2151.                                 break;
  2152.                             case 2 :
  2153.                                 switch (SubItem)
  2154.                                 {
  2155.                                     case 0 :
  2156.                                         refresh_rate = 1;
  2157.                                         break;
  2158.                                     case 1 :
  2159.                                         refresh_rate = 2;
  2160.                                         break;
  2161.                                     case 2 :
  2162.                                         refresh_rate = 4;
  2163.                                         break;
  2164.                                     case 3 :
  2165.                                         refresh_rate = 8;
  2166.                                         break;
  2167.                                     default :
  2168.                                         break;
  2169.                                 }
  2170.                                 break;
  2171.                             case 3 :
  2172.                                 switch (SubItem)
  2173.                                 {
  2174.                                     case 0 :
  2175.                                         countdown_rate = 4000;
  2176.                                         break;
  2177.                                     case 1 :
  2178.                                         countdown_rate = 8000;
  2179.                                         break;
  2180.                                     case 2 :
  2181.                                         countdown_rate = 16000;
  2182.                                         break;
  2183.                                     case 3 :
  2184.                                         countdown_rate = 32000;
  2185.                                         break;
  2186.                                     default :
  2187.                                         break;
  2188.                                 }
  2189.                                 break;
  2190.                             default :
  2191.                                 break;
  2192.                         }
  2193.                     default :
  2194.                         break;
  2195.                 }
  2196.  
  2197.                 UpdatePalette = TRUE;
  2198.  
  2199.                 break;
  2200.             default :
  2201.                 break;
  2202.         }
  2203.     }
  2204.  
  2205.     return keycode;
  2206. }
  2207.  
  2208.  
  2209.  
  2210. /*
  2211.  * ==============
  2212.  * Atari_Joystick
  2213.  * ==============
  2214.  */
  2215.  
  2216. /*
  2217.  * Revision     : v0.1.9a
  2218.  * Introduced   : NOT KNOWN (Before 2nd September 1995)
  2219.  * Last updated : 2nd September 1995
  2220.  */
  2221.  
  2222. int Atari_Joystick ()
  2223. {
  2224.     WORD x;
  2225.     WORD y;
  2226.     UWORD code;
  2227.  
  2228.     int stick = 0;
  2229.  
  2230.     if (GetMsg (gameport_msg_port))
  2231.     {
  2232.         x = gameport_data.ie_X;
  2233.         y = gameport_data.ie_Y;
  2234.         code = gameport_data.ie_Code;
  2235.  
  2236.         switch (x)
  2237.         {
  2238.             case -1 :
  2239.                 switch (y)
  2240.                 {
  2241.                     case -1 :
  2242.                         stick = 10;
  2243.                         break;
  2244.                     case 0 :
  2245.                         stick = 11;
  2246.                         break;
  2247.                     case 1 :
  2248.                         stick = 9;
  2249.                         break;
  2250.                         default :
  2251.                         break;
  2252.                 }
  2253.                 break;
  2254.             case 0 :
  2255.                 switch (y)
  2256.                 {
  2257.                     case -1 :
  2258.                         stick = 14;
  2259.                         break;
  2260.                     case 0 :
  2261.                         stick = 15;
  2262.                         break;
  2263.                     case 1 :
  2264.                         stick = 13;
  2265.                         break;
  2266.                     default :
  2267.                         break;
  2268.                 }
  2269.                 break;
  2270.             case 1 :
  2271.                 switch (y)
  2272.                 {
  2273.                     case -1 :
  2274.                         stick = 6;
  2275.                         break;
  2276.                     case 0 :
  2277.                         stick = 7;
  2278.                         break;
  2279.                     case 1 :
  2280.                         stick = 5;
  2281.                         break;
  2282.                     default :
  2283.                         break;
  2284.                 }
  2285.                 break;
  2286.             default :
  2287.                 break;
  2288.         }
  2289.  
  2290.         if (code == IECODE_LBUTTON)
  2291.         {
  2292.             if (stick == 0)
  2293.             {
  2294.                 stick = old_stick_0 & 15;
  2295.             }
  2296.             else
  2297.             {
  2298.                 stick = stick & 15;
  2299.             }
  2300.         }
  2301.  
  2302.         if (code == IECODE_LBUTTON + IECODE_UP_PREFIX)
  2303.         {
  2304.             if (stick == 0)
  2305.             {
  2306.                 stick = old_stick_0 | 16;
  2307.             }
  2308.             else
  2309.             {
  2310.                 stick = stick | 16;
  2311.             }
  2312.         }
  2313.  
  2314.         old_stick_0 = stick;
  2315.         SendIO (gameport_io_msg);
  2316.     }
  2317.     
  2318.     if (stick == 0)
  2319.     {
  2320.         stick = old_stick_0;
  2321.     }
  2322.  
  2323.     stick0 = stick & 0x0f;
  2324.     trig0 = (stick & 0x10) >> 4;
  2325.  
  2326. /*
  2327.     printf ("stick0 = %d   trig0 = %d\n", stick0, trig0);
  2328.     return stick;
  2329. */
  2330. }
  2331.  
  2332.  
  2333.  
  2334. /*
  2335.  * ==========
  2336.  * Atari_PORT
  2337.  * ==========
  2338.  */
  2339.  
  2340. /*
  2341.  * Revision     : v0.2.0a
  2342.  * Introduced   : 2nd September 1995
  2343.  * Last updated : 3rd September 1995
  2344.  *
  2345.  * Notes: Hook required by v0.2.0. All the work is actually done in
  2346.  * Atari_Joystick and Atari_Paddle.
  2347.  */
  2348.  
  2349. int Atari_PORT (int num)
  2350. {
  2351.     if (num == 0)
  2352.     {
  2353.         if (Controller == controller_Joystick)
  2354.         {
  2355.             Atari_Joystick ();
  2356.             return 0xf0 | stick0;
  2357.         }
  2358.         else
  2359.         {
  2360.             return stick0;
  2361.         }
  2362.     }
  2363.     else
  2364.     {
  2365.         return 0xff;
  2366.     }
  2367. }
  2368.  
  2369.  
  2370.  
  2371. /*
  2372.  * ==========
  2373.  * Atari_TRIG
  2374.  * ==========
  2375.  */
  2376.  
  2377. /*
  2378.  * Revision     : v0.1.9a
  2379.  * Introduced   : 2nd September 1995
  2380.  * Last updated : 2nd September 1995
  2381.  *
  2382.  * Notes: Hook required by v0.1.9. All the work is actually done in
  2383.  * Atari_Joystick.
  2384.  */
  2385.  
  2386. int Atari_TRIG (int num)
  2387. {
  2388.     if (num == 0)
  2389.     {
  2390.         Atari_Joystick ();
  2391.         return trig0;
  2392.     }
  2393.     else
  2394.         return 1;
  2395. }
  2396.  
  2397.  
  2398.  
  2399. /*
  2400.  * =========
  2401.  * Atari_POT
  2402.  * =========
  2403.  */
  2404.  
  2405. /*
  2406.  * Revision     : v0.2.0a
  2407.  * Introduced   : 2nd September 1995
  2408.  * Last updated : 3rd September 1995
  2409.  *
  2410.  * Notes: Currently acts as nothing more than a hook.
  2411.  */
  2412.  
  2413. int Atari_POT (int num)
  2414. {
  2415.     return PaddlePos;
  2416. }
  2417.  
  2418.  
  2419.  
  2420. /*
  2421.  * ============
  2422.  * Atari_CONSOL
  2423.  * ============
  2424.  */
  2425.  
  2426. /*
  2427.  * Revision     : v0.1.9a
  2428.  * Introduced   : 2nd September 1995
  2429.  * Last updated : 2nd September 1995
  2430.  *
  2431.  * Notes: Hook required by v0.1.9. All the work is actually done in
  2432.  * Atari_Keyboard.
  2433.  */
  2434.  
  2435. int Atari_CONSOL (void)
  2436. {
  2437.     return consol;
  2438. }
  2439.  
  2440.  
  2441.  
  2442. /*
  2443.  * ==================
  2444.  * DisplayAboutWindow
  2445.  * ==================
  2446.  */
  2447.  
  2448. /*
  2449.  * Revision     : v0.3.3
  2450.  * Introduced   : 2nd September 1995
  2451.  * Last updated : 7th March 1996
  2452.  */
  2453.  
  2454. void DisplayAboutWindow (void)
  2455.  
  2456. {
  2457.     ULONG Class;
  2458.     USHORT Code;
  2459.     APTR Address;
  2460.  
  2461.     struct IntuiMessage *IntuiMessage;
  2462.  
  2463.     struct NewWindow    NewWindow;
  2464.  
  2465.     struct Gadget *Gadget1 = NULL;
  2466.  
  2467.     int QuitRoutine;
  2468.  
  2469.     NewWindow.LeftEdge = 12;
  2470.     NewWindow.TopEdge = 46;
  2471.     NewWindow.Width = 296;
  2472.     NewWindow.Height = 148;
  2473.     NewWindow.DetailPen = 0;
  2474.     NewWindow.BlockPen = 15;
  2475.     NewWindow.IDCMPFlags = CLOSEWINDOW | GADGETUP;
  2476.     NewWindow.Flags = WINDOWCLOSE | GIMMEZEROZERO | WINDOWDRAG | SMART_REFRESH | ACTIVATE;
  2477.     NewWindow.FirstGadget = NULL;
  2478.     NewWindow.CheckMark = NULL;
  2479.     NewWindow.Title = ATARI_TITLE;
  2480.     NewWindow.Screen = ScreenMain;
  2481.     NewWindow.Type = ScreenType;
  2482.     NewWindow.BitMap = NULL;
  2483.     NewWindow.MinWidth = 92;
  2484.     NewWindow.MinHeight = 65;
  2485.     NewWindow.MaxWidth = 1280;
  2486.     NewWindow.MaxHeight = 512;
  2487.  
  2488.     WindowAbout = (struct Window*) OpenWindowTags
  2489.     (
  2490.         &NewWindow,
  2491.         WA_NewLookMenus, TRUE,
  2492.         WA_MenuHelp, TRUE,
  2493.         WA_ScreenTitle, ATARI_TITLE,
  2494.         TAG_DONE
  2495.     );
  2496.  
  2497.     if (ScreenType == CUSTOMSCREEN)
  2498.     {
  2499.         SetRast (WindowAbout->RPort, 6);
  2500.     }
  2501.  
  2502.     Rule (0, 15, 288, WindowAbout);
  2503.  
  2504.     {
  2505.         char temp[128];
  2506.         char *ptr;
  2507.  
  2508.         strcpy (temp, ATARI_TITLE);
  2509.         ptr = strchr(temp,',');
  2510.         if (ptr)
  2511.         {
  2512.             int title_len;
  2513.             int version_len;
  2514.  
  2515.             *ptr++ = '\0';
  2516.             ptr++;
  2517.  
  2518.             title_len = strlen(temp);
  2519.             version_len = strlen(ptr);
  2520.  
  2521.             ShowText ((36 - title_len), 1, WindowAbout, temp);
  2522.             ShowText ((36 - version_len), 4, WindowAbout, ptr);
  2523.         }
  2524.         else
  2525.         {
  2526.             ShowText (19, 1, WindowAbout, "Atari800 Emulator");
  2527.             ShowText (21, 4, WindowAbout, "Version Unknown");
  2528.         }
  2529.  
  2530.         ShowText (17, 7, WindowAbout, "Original program by");
  2531.         ShowText (25, 9, WindowAbout, "David Firth");
  2532.         ShowText (18, 12, WindowAbout, "Amiga Module V8 by");
  2533.         ShowText (20, 14, WindowAbout, "Stephen A. Firth");
  2534.     }
  2535.  
  2536.     Gadget1 = MakeGadget (55, 17, 64, 14, 0, WindowAbout, "Ok", gadget_Button);
  2537.  
  2538.     QuitRoutine = FALSE;
  2539.  
  2540.     while (QuitRoutine == FALSE)
  2541.     {
  2542.         while (IntuiMessage = (struct IntuiMessage*) GetMsg (WindowAbout->UserPort))
  2543.         {
  2544.             Class = IntuiMessage->Class;
  2545.             Code = IntuiMessage->Code;
  2546.             Address = IntuiMessage->IAddress;
  2547.  
  2548.             ReplyMsg (IntuiMessage);
  2549.  
  2550.             switch (Class)
  2551.             {
  2552.                 case CLOSEWINDOW :
  2553.                     QuitRoutine = TRUE;
  2554.                     break;
  2555.                 case GADGETUP :
  2556.                     if (Address == (APTR) Gadget1)
  2557.                     {
  2558.                         QuitRoutine = TRUE;
  2559.                     }
  2560.                     break;
  2561.                 default :
  2562.                     break;
  2563.             }
  2564.         }
  2565.     }
  2566.  
  2567.     CloseWindow (WindowAbout);
  2568. }
  2569.  
  2570.  
  2571.  
  2572. /*
  2573.  * ==================
  2574.  * DisplaySetupWindow
  2575.  * ==================
  2576.  */
  2577.  
  2578. /*
  2579.  * Revision     : v0.2.1
  2580.  * Introduced   : 3rd September 1995
  2581.  * Last updated : 12th October 1995
  2582.  */
  2583.  
  2584. void DisplaySetupWindow (void)
  2585.  
  2586. {
  2587.     ULONG Class;
  2588.     USHORT Code;
  2589.     APTR Address;
  2590.  
  2591.     struct IntuiMessage *IntuiMessage;
  2592.  
  2593.     struct NewWindow    NewWindow;
  2594.  
  2595.     struct Gadget *Gadget1 = NULL;
  2596.     struct Gadget *Gadget2 = NULL;
  2597.     struct Gadget *Gadget3 = NULL;
  2598.     struct Gadget *Gadget4 = NULL;
  2599.     struct Gadget *Gadget5 = NULL;
  2600.     struct Gadget *Gadget6 = NULL;
  2601.     struct Gadget *Gadget7 = NULL;
  2602.  
  2603.     int QuitRoutine;
  2604.  
  2605.     NewWindow.LeftEdge = 0;
  2606.     NewWindow.TopEdge = 11;
  2607.     NewWindow.Width = 296;
  2608.     NewWindow.Height = 148; /* 177 */
  2609.     NewWindow.DetailPen = 0;
  2610.     NewWindow.BlockPen = 15;
  2611.     NewWindow.IDCMPFlags = CLOSEWINDOW | GADGETUP;
  2612.     NewWindow.Flags = WINDOWCLOSE | GIMMEZEROZERO | WINDOWDRAG | SMART_REFRESH | ACTIVATE;
  2613.     NewWindow.FirstGadget = NULL;
  2614.     NewWindow.CheckMark = NULL;
  2615.     NewWindow.Title = ATARI_TITLE;
  2616.     NewWindow.Screen = NULL;
  2617.     NewWindow.Type = WBENCHSCREEN;
  2618.     NewWindow.BitMap = NULL;
  2619.     NewWindow.MinWidth = 92;
  2620.     NewWindow.MinHeight = 65;
  2621.     NewWindow.MaxWidth = 1280;
  2622.     NewWindow.MaxHeight = 512;
  2623.  
  2624.     WindowSetup = (struct Window*) OpenWindowTags
  2625.     (
  2626.         &NewWindow,
  2627.         WA_NewLookMenus, TRUE,
  2628.         WA_MenuHelp, TRUE,
  2629.         WA_ScreenTitle, ATARI_TITLE,
  2630.         TAG_DONE
  2631.     );
  2632.  
  2633.     Rule (0, 15, 288, WindowSetup);
  2634.  
  2635.     ShowText (1, 1, WindowSetup, "Display:");
  2636.  
  2637. /*
  2638.     ShowText (17, 1, WindowSetup, "CLI Startup Options");
  2639.  
  2640.     ShowText (2, 4, WindowSetup, "-ocs      OCS emulation module");
  2641.     ShowText (2, 6, WindowSetup, "-ecs      ECS emulation module");
  2642.     ShowText (2, 8, WindowSetup, "-aga      AGA emulation module");
  2643.  
  2644.     ShowText (2, 11, WindowSetup, "-wb       Open window on Workbench");
  2645.     ShowText (2, 13, WindowSetup, "          (forces ECS emulation)");
  2646.  
  2647.     ShowText (2, 16, WindowSetup, "-colour   Colour display");
  2648.     ShowText (2, 18, WindowSetup, "-grey     Grey scale display");
  2649. */
  2650.  
  2651. /*
  2652.     Gadget1 = MakeGadget (0, 21, 64, 14, 0, WindowSetup, "AGA Screen", gadget_Button);
  2653.     Gadget2 = MakeGadget (24, 21, 64, 14, 0, WindowSetup, "ECS Screen", gadget_Button);
  2654.     Gadget3 = MakeGadget (48, 21, 64, 14, 0, WindowSetup, "OCS Screen", gadget_Button);
  2655.     Gadget4 = MakeGadget (0, 23, 64, 14, 0, WindowSetup, "AGA Window", gadget_Button);
  2656.     Gadget5 = MakeGadget (24, 23, 64, 14, 0, WindowSetup, "ECS Window", gadget_Button);
  2657.     Gadget6 = MakeGadget (48, 23, 64, 14, 0, WindowSetup, "OCS Window", gadget_Button);
  2658. */
  2659.     Gadget1 = MakeGadget (3, 3, 16, 14, 0, WindowSetup, "AGA Screen", gadget_Mutual);
  2660.     Gadget1->Flags = GADGIMAGE | GADGHIMAGE | SELECTED;
  2661.     Gadget2 = MakeGadget (3, 5, 16, 14, 0, WindowSetup, "ECS Screen", gadget_Mutual);
  2662.     Gadget3 = MakeGadget (3, 7, 16, 14, 0, WindowSetup, "OCS Screen", gadget_Mutual);
  2663.     Gadget4 = MakeGadget (3, 9, 16, 14, 0, WindowSetup, "AGA Window", gadget_Mutual);
  2664.     Gadget5 = MakeGadget (3, 11, 16, 14, 0, WindowSetup, "ECS Window", gadget_Mutual);
  2665.     Gadget6 = MakeGadget (3, 13, 16, 14, 0, WindowSetup, "OCS Window", gadget_Mutual);
  2666.     Gadget7 = MakeGadget (55, 17, 64, 14, 0, WindowSetup, "Ok", gadget_Button);
  2667.  
  2668.     RefreshGadgets (Gadget1, WindowSetup, NULL);
  2669.  
  2670.     QuitRoutine = FALSE;
  2671.  
  2672.     while (QuitRoutine == FALSE)
  2673.     {
  2674.         while (IntuiMessage = (struct IntuiMessage*) GetMsg (WindowSetup->UserPort))
  2675.         {
  2676.             Class = IntuiMessage->Class;
  2677.             Code = IntuiMessage->Code;
  2678.             Address = IntuiMessage->IAddress;
  2679.  
  2680.             ReplyMsg (IntuiMessage);
  2681.  
  2682.             switch (Class)
  2683.             {
  2684.                 case CLOSEWINDOW :
  2685.                     QuitRoutine = TRUE;
  2686.                     break;
  2687.                 case GADGETUP :
  2688.                     {
  2689.                         int NewFlagsForGadget1 = GADGIMAGE | GADGHIMAGE;
  2690.                         int NewFlagsForGadget2 = GADGIMAGE | GADGHIMAGE;
  2691.                         int NewFlagsForGadget3 = GADGIMAGE | GADGHIMAGE;
  2692.                         int NewFlagsForGadget4 = GADGIMAGE | GADGHIMAGE;
  2693.                         int NewFlagsForGadget5 = GADGIMAGE | GADGHIMAGE;
  2694.                         int NewFlagsForGadget6 = GADGIMAGE | GADGHIMAGE;
  2695.                         int NewFlags = FALSE;
  2696.  
  2697.                         if (Address == (APTR) Gadget1)
  2698.                         {
  2699.                             ChipSet = AGA_ChipSet;
  2700.                             CustomScreen = TRUE;
  2701.                             NewFlagsForGadget1 = GADGIMAGE | GADGHIMAGE | SELECTED;
  2702.                             NewFlags = TRUE;
  2703.                         }
  2704.                         else if (Address == (APTR) Gadget2)
  2705.                         {
  2706.                             ChipSet = ECS_ChipSet;
  2707.                             CustomScreen = TRUE;
  2708.                             NewFlagsForGadget2 = GADGIMAGE | GADGHIMAGE | SELECTED;
  2709.                             NewFlags = TRUE;
  2710.                         }
  2711.                         else if (Address == (APTR) Gadget3)
  2712.                         {
  2713.                             ChipSet = OCS_ChipSet;
  2714.                             CustomScreen = TRUE;
  2715.                             NewFlagsForGadget3 = GADGIMAGE | GADGHIMAGE | SELECTED;
  2716.                             NewFlags = TRUE;
  2717.                         }
  2718.                         else if (Address == (APTR) Gadget4)
  2719.                         {
  2720.                             /*
  2721.                              * NOTE: AGA Window Modes Currently Not Supported
  2722.                              */
  2723.  
  2724.                             DisplayNotSupportedWindow ();
  2725.  
  2726.                             Gadget4->Flags = GADGIMAGE | GADGHIMAGE;
  2727.                             RefreshGadgets (Gadget1, WindowSetup, NULL);
  2728. /*
  2729.                             QuitRoutine = TRUE;
  2730.                             ChipSet = ECS_ChipSet;
  2731.                             CustomScreen = FALSE;
  2732. */
  2733.                         }
  2734.                         else if (Address == (APTR) Gadget5)
  2735.                         {
  2736.                             ChipSet = ECS_ChipSet;
  2737.                             CustomScreen = FALSE;
  2738.                             NewFlagsForGadget5 = GADGIMAGE | GADGHIMAGE | SELECTED;
  2739.                             NewFlags = TRUE;
  2740.                         }
  2741.                         else if (Address == (APTR) Gadget6)
  2742.                         {
  2743.                             ChipSet = OCS_ChipSet;
  2744.                             CustomScreen = FALSE;
  2745.                             NewFlagsForGadget6 = GADGIMAGE | GADGHIMAGE | SELECTED;
  2746.                             NewFlags = TRUE;
  2747.                         }
  2748.                         else if (Address == (APTR) Gadget7)
  2749.                         {
  2750.                             QuitRoutine = TRUE;
  2751.                         }
  2752.  
  2753.                         if (NewFlags)
  2754.                         {
  2755.                             Gadget1->Flags = NewFlagsForGadget1;
  2756.                             Gadget2->Flags = NewFlagsForGadget2;
  2757.                             Gadget3->Flags = NewFlagsForGadget3;
  2758.                             Gadget4->Flags = NewFlagsForGadget4;
  2759.                             Gadget5->Flags = NewFlagsForGadget5;
  2760.                             Gadget6->Flags = NewFlagsForGadget6;
  2761.                             RefreshGadgets (Gadget1, WindowSetup, NULL);
  2762.                         }
  2763.                     }
  2764.                     break;
  2765.                 default :
  2766.                     break;
  2767.             }
  2768.         }
  2769.     }
  2770.  
  2771.     CloseWindow (WindowSetup);
  2772. }
  2773.  
  2774.  
  2775.  
  2776. /*
  2777.  * =======================
  2778.  * DisplayControllerWindow
  2779.  * =======================
  2780.  */
  2781.  
  2782. /*
  2783.  * Revision     : v0.2.1a
  2784.  * Introduced   : 3rd October 1995
  2785.  * Last updated : 12th October 1995
  2786.  */
  2787.  
  2788. void DisplayControllerWindow (int Port)
  2789.  
  2790. {
  2791.     ULONG Class;
  2792.     USHORT Code;
  2793.     APTR Address;
  2794.  
  2795.     struct IntuiMessage *IntuiMessage;
  2796.  
  2797.     struct NewWindow    NewWindow;
  2798.  
  2799.     struct Gadget *Gadget1 = NULL;
  2800.     struct Gadget *Gadget2 = NULL;
  2801.     struct Gadget *Gadget3 = NULL;
  2802.     struct Gadget *Gadget4 = NULL;
  2803.     struct Gadget *Gadget5 = NULL;
  2804.     struct Gadget *Gadget6 = NULL;
  2805.     struct Gadget *Gadget7 = NULL;
  2806.     struct Gadget *Gadget8 = NULL;
  2807.     struct Gadget *Gadget9 = NULL;
  2808.  
  2809.     int QuitRoutine;
  2810.     int Accepted;
  2811.     int NewController;
  2812.  
  2813.     NewWindow.LeftEdge = 0;
  2814.     NewWindow.TopEdge = 11;
  2815.     NewWindow.Width = 296;
  2816. /* Re-insert for v.0.2.2
  2817.     NewWindow.Height = 155;
  2818. */
  2819.     NewWindow.Height = 92; /* 177 */
  2820.     NewWindow.DetailPen = 0;
  2821.     NewWindow.BlockPen = 15;
  2822.     NewWindow.IDCMPFlags = CLOSEWINDOW | GADGETUP;
  2823.     NewWindow.Flags = WINDOWCLOSE | GIMMEZEROZERO | WINDOWDRAG | SMART_REFRESH | ACTIVATE;
  2824.     NewWindow.FirstGadget = NULL;
  2825.     NewWindow.CheckMark = NULL;
  2826.     NewWindow.Title = "Controller Options";
  2827.     NewWindow.Screen = ScreenMain;
  2828.     NewWindow.Type = ScreenType;
  2829.     NewWindow.BitMap = NULL;
  2830.     NewWindow.MinWidth = 92;
  2831.     NewWindow.MinHeight = 65;
  2832.     NewWindow.MaxWidth = 1280;
  2833.     NewWindow.MaxHeight = 512;
  2834.  
  2835.     WindowController = (struct Window*) OpenWindowTags
  2836.     (
  2837.         &NewWindow,
  2838.         WA_NewLookMenus, TRUE,
  2839.         WA_MenuHelp, TRUE,
  2840.         WA_ScreenTitle, ATARI_TITLE,
  2841.         TAG_DONE
  2842.     );
  2843.  
  2844.     if (ScreenType == CUSTOMSCREEN)
  2845.     {
  2846.         SetRast (WindowController->RPort, 6);
  2847.     }
  2848.  
  2849. /* Re-insert for v0.2.2
  2850.     Rule (0, 16, 288, WindowController);
  2851. */
  2852.     Rule (0, 7, 288, WindowController);
  2853.  
  2854.     ShowText (1, 1, WindowController, "Emulate:");
  2855.  
  2856.     Gadget1 = MakeGadget (3, 3, 16, 14, 0, WindowController, "Joystick", gadget_Mutual);
  2857.  
  2858.     if (Controller == controller_Joystick)
  2859.     {
  2860.         Gadget1->Flags = GADGIMAGE | GADGHIMAGE | SELECTED;
  2861.     }
  2862.  
  2863.     Gadget2 = MakeGadget (3, 5, 16, 14, 0, WindowController, "Paddle", gadget_Mutual);
  2864.  
  2865.     if (Controller == controller_Paddle)
  2866.     {
  2867.         Gadget2->Flags = GADGIMAGE | GADGHIMAGE | SELECTED;
  2868.     }
  2869.  
  2870. /* Re-insert for v0.2.2
  2871.     ShowText (36, 1, WindowController, "Via:");
  2872.  
  2873.     Gadget3 = MakeGadget (38, 3, 16, 14, 0, WindowController, "Joystick", gadget_Mutual);
  2874.     Gadget4 = MakeGadget (38, 5, 16, 14, 0, WindowController, "Mouse", gadget_Mutual);
  2875.  
  2876.     ShowText (1, 8, WindowController, "Amiga port:");
  2877.  
  2878.     Gadget5 = MakeGadget (3, 10, 16, 14, 0, WindowController, "0", gadget_Mutual);
  2879.     Gadget6 = MakeGadget (3, 12, 16, 14, 0, WindowController, "1", gadget_Mutual);
  2880.     Gadget7 = MakeGadget (3, 14, 16, 14, 0, WindowController, "None", gadget_Mutual);
  2881.  
  2882.     Gadget8 = MakeGadget (39, 18, 64, 14, 0, WindowController, "Ok", gadget_Button);
  2883.     Gadget9 = MakeGadget (55, 18, 64, 14, 0, WindowController, "Cancel", gadget_Button);
  2884. */
  2885.  
  2886.     Gadget8 = MakeGadget (39, 9, 64, 14, 0, WindowController, "Ok", gadget_Button);
  2887.     Gadget9 = MakeGadget (55, 9, 64, 14, 0, WindowController, "Cancel", gadget_Button);
  2888.  
  2889.     RefreshGadgets (Gadget1, WindowController, NULL);
  2890.  
  2891.     QuitRoutine = FALSE;
  2892.     Accepted = FALSE;
  2893.  
  2894.     NewController = Controller;
  2895.  
  2896.     while (QuitRoutine == FALSE)
  2897.     {
  2898.         while (IntuiMessage = (struct IntuiMessage*) GetMsg (WindowController->UserPort))
  2899.         {
  2900.             Class = IntuiMessage->Class;
  2901.             Code = IntuiMessage->Code;
  2902.             Address = IntuiMessage->IAddress;
  2903.  
  2904.             ReplyMsg (IntuiMessage);
  2905.  
  2906.             switch (Class)
  2907.             {
  2908.                 case CLOSEWINDOW :
  2909.                     QuitRoutine = TRUE;
  2910.                     break;
  2911.                 case GADGETUP :
  2912.                     if (Address == (APTR) Gadget1)
  2913.                     {
  2914.                         Gadget1->Flags = GADGIMAGE | GADGHIMAGE | SELECTED;
  2915.                         Gadget2->Flags = GADGIMAGE | GADGHIMAGE;
  2916.                         RefreshGadgets (Gadget1, WindowController, NULL);
  2917.                         NewController = controller_Joystick;
  2918.                     }
  2919.                     else if (Address == (APTR) Gadget2)
  2920.                     {
  2921.                         Gadget1->Flags = GADGIMAGE | GADGHIMAGE;
  2922.                         Gadget2->Flags = GADGIMAGE | GADGHIMAGE | SELECTED;
  2923.                         RefreshGadgets (Gadget1, WindowController, NULL);
  2924.                         NewController = controller_Paddle;
  2925.                     }
  2926. /* Re-insert for v0.2.2
  2927.                     else if (Address == (APTR) Gadget3)
  2928.                     {
  2929.                     }
  2930.                     else if (Address == (APTR) Gadget4)
  2931.                     {
  2932.                     }
  2933.                     else if (Address == (APTR) Gadget5)
  2934.                     {
  2935.                     }
  2936.                     else if (Address == (APTR) Gadget6)
  2937.                     {
  2938.                     }
  2939.                     else if (Address == (APTR) Gadget7)
  2940.                     {
  2941.                     }
  2942. */
  2943.                     else if (Address == (APTR) Gadget8)
  2944.                     {
  2945.                         QuitRoutine = TRUE;
  2946.                         Accepted = TRUE;
  2947.                     }
  2948.                     else if (Address == (APTR) Gadget9)
  2949.                     {
  2950.                         QuitRoutine = TRUE;
  2951.                     }
  2952.                     break;
  2953.                 default :
  2954.                     break;
  2955.             }
  2956.         }
  2957.     }
  2958.  
  2959.     if (Accepted)
  2960.     {
  2961.         Controller = NewController;
  2962.     }
  2963.  
  2964.     CloseWindow (WindowController);
  2965. }
  2966.  
  2967.  
  2968.  
  2969. /*
  2970.  * =========================
  2971.  * DisplayNotSupportedWindow
  2972.  * =========================
  2973.  */
  2974.  
  2975. /*
  2976.  * Revision     : v0.2.0
  2977.  * Introduced   : 3rd September 1995
  2978.  * Last updated : 9th September 1995
  2979.  */
  2980.  
  2981. void DisplayNotSupportedWindow (void)
  2982.  
  2983. {
  2984.     ULONG Class;
  2985.     USHORT Code;
  2986.     APTR Address;
  2987.  
  2988.     struct IntuiMessage *IntuiMessage;
  2989.  
  2990.     struct NewWindow    NewWindow;
  2991.  
  2992.     struct Gadget *Gadget1 = NULL;
  2993.  
  2994.     int QuitRoutine;
  2995.  
  2996.     NewWindow.LeftEdge = 12;
  2997.     NewWindow.TopEdge = 91;
  2998.     NewWindow.Width = 296;
  2999.     NewWindow.Height = 57;
  3000.     NewWindow.DetailPen = 0;
  3001.     NewWindow.BlockPen = 15;
  3002.     NewWindow.IDCMPFlags = CLOSEWINDOW | GADGETUP;
  3003.     NewWindow.Flags = WINDOWCLOSE | GIMMEZEROZERO | WINDOWDRAG | SMART_REFRESH | ACTIVATE;
  3004.     NewWindow.FirstGadget = NULL;
  3005.     NewWindow.CheckMark = NULL;
  3006.     NewWindow.Title = "Warning!";
  3007.     NewWindow.Screen = ScreenMain;
  3008.     NewWindow.Type = ScreenType;
  3009.     NewWindow.BitMap = NULL;
  3010.     NewWindow.MinWidth = 92;
  3011.     NewWindow.MinHeight = 65;
  3012.     NewWindow.MaxWidth = 1280;
  3013.     NewWindow.MaxHeight = 512;
  3014.  
  3015.     WindowNotSupported = (struct Window*) OpenWindowTags
  3016.     (
  3017.         &NewWindow,
  3018.         WA_NewLookMenus, TRUE,
  3019.         WA_MenuHelp, TRUE,
  3020.         WA_ScreenTitle, ATARI_TITLE,
  3021.         TAG_DONE
  3022.     );
  3023.  
  3024.     if (ScreenType == CUSTOMSCREEN)
  3025.     {
  3026.         SetRast (WindowNotSupported->RPort, 6);
  3027.     }
  3028.  
  3029.     Rule (0, 2, 288, WindowNotSupported);
  3030.  
  3031.     ShowText (15, 1, WindowNotSupported, "Feature not supported");
  3032.  
  3033.     Gadget1 = MakeGadget (55, 4, 64, 14, 0, WindowNotSupported, "Ok", gadget_Button);
  3034.  
  3035.     QuitRoutine = FALSE;
  3036.  
  3037.     while (QuitRoutine == FALSE)
  3038.     {
  3039.         while (IntuiMessage = (struct IntuiMessage*) GetMsg (WindowNotSupported->UserPort))
  3040.         {
  3041.             Class = IntuiMessage->Class;
  3042.             Code = IntuiMessage->Code;
  3043.             Address = IntuiMessage->IAddress;
  3044.  
  3045.             ReplyMsg (IntuiMessage);
  3046.  
  3047.             switch (Class)
  3048.             {
  3049.                 case CLOSEWINDOW :
  3050.                     QuitRoutine = TRUE;
  3051.                     break;
  3052.                 case GADGETUP :
  3053.                     if (Address == (APTR) Gadget1)
  3054.                     {
  3055.                         QuitRoutine = TRUE;
  3056.                     }
  3057.                     break;
  3058.                 default :
  3059.                     break;
  3060.             }
  3061.         }
  3062.     }
  3063.  
  3064.     CloseWindow (WindowNotSupported);
  3065. }
  3066.  
  3067.  
  3068.  
  3069. /*
  3070.  * ==================
  3071.  * DisplayYesNoWindow
  3072.  * ==================
  3073.  */
  3074.  
  3075. /*
  3076.  * Revision     : v0.2.0a
  3077.  * Introduced   : 9th September 1995
  3078.  * Last updated : 9th September 1995
  3079.  */
  3080.  
  3081. int DisplayYesNoWindow (void)
  3082.  
  3083. {
  3084.     ULONG Class;
  3085.     USHORT Code;
  3086.     APTR Address;
  3087.  
  3088.     struct IntuiMessage *IntuiMessage;
  3089.  
  3090.     struct NewWindow    NewWindow;
  3091.  
  3092.     struct Gadget *Gadget1 = NULL;
  3093.     struct Gadget *Gadget2 = NULL;
  3094.  
  3095.     int QuitRoutine;
  3096.     int Answer;
  3097.  
  3098.     Answer = FALSE;
  3099.  
  3100.     NewWindow.LeftEdge = 12;
  3101.     NewWindow.TopEdge = 91;
  3102.     NewWindow.Width = 296;
  3103.     NewWindow.Height = 57;
  3104.     NewWindow.DetailPen = 0;
  3105.     NewWindow.BlockPen = 15;
  3106.     NewWindow.IDCMPFlags = CLOSEWINDOW | GADGETUP;
  3107.     NewWindow.Flags = WINDOWCLOSE | GIMMEZEROZERO | WINDOWDRAG | SMART_REFRESH | ACTIVATE;
  3108.     NewWindow.FirstGadget = NULL;
  3109.     NewWindow.CheckMark = NULL;
  3110.     NewWindow.Title = "Warning!";
  3111.     NewWindow.Screen = ScreenMain;
  3112.     NewWindow.Type = ScreenType;
  3113.     NewWindow.BitMap = NULL;
  3114.     NewWindow.MinWidth = 92;
  3115.     NewWindow.MinHeight = 65;
  3116.     NewWindow.MaxWidth = 1280;
  3117.     NewWindow.MaxHeight = 512;
  3118.  
  3119.     WindowYesNo = (struct Window*) OpenWindowTags
  3120.     (
  3121.         &NewWindow,
  3122.         WA_NewLookMenus, TRUE,
  3123.         WA_MenuHelp, TRUE,
  3124.         WA_ScreenTitle, ATARI_TITLE,
  3125.         TAG_DONE
  3126.     );
  3127.  
  3128.     if (ScreenType == CUSTOMSCREEN)
  3129.     {
  3130.         SetRast (WindowYesNo->RPort, 6);
  3131.     }
  3132.  
  3133.     Rule (0, 2, 288, WindowYesNo);
  3134.  
  3135.     ShowText (1, 1, WindowYesNo, "Are you sure?");
  3136.  
  3137.     Gadget1 = MakeGadget (39, 4, 64, 14, 0, WindowYesNo, "Ok", gadget_Button);
  3138.     Gadget2 = MakeGadget (55, 4, 64, 14, 0, WindowYesNo, "Cancel", gadget_Button);
  3139.  
  3140.     QuitRoutine = FALSE;
  3141.  
  3142.     while (QuitRoutine == FALSE)
  3143.     {
  3144.         while (IntuiMessage = (struct IntuiMessage*) GetMsg (WindowYesNo->UserPort))
  3145.         {
  3146.             Class = IntuiMessage->Class;
  3147.             Code = IntuiMessage->Code;
  3148.             Address = IntuiMessage->IAddress;
  3149.  
  3150.             ReplyMsg (IntuiMessage);
  3151.  
  3152.             switch (Class)
  3153.             {
  3154.                 case CLOSEWINDOW :
  3155.                     QuitRoutine = TRUE;
  3156.                     break;
  3157.                 case GADGETUP :
  3158.                     if (Address == (APTR) Gadget1)
  3159.                     {
  3160.                         QuitRoutine = TRUE;
  3161.                         Answer = TRUE;
  3162.                     }
  3163.                     else if (Address == (APTR) Gadget2)
  3164.                     {
  3165.                         QuitRoutine = TRUE;
  3166.                     }
  3167.                     break;
  3168.                 default :
  3169.                     break;
  3170.             }
  3171.         }
  3172.     }
  3173.  
  3174.     CloseWindow (WindowYesNo);
  3175.  
  3176.     return Answer;
  3177. }
  3178.  
  3179.  
  3180.  
  3181. /*
  3182.  * ============
  3183.  * MakeMenuItem
  3184.  * ============
  3185.  */
  3186.  
  3187. /*
  3188.  * Revision     : v0.2.0
  3189.  * Introduced   : NOT KNOWN (Before 2nd September 1995)
  3190.  * Last updated : 9th September 1995
  3191.  *
  3192.  * Notes: A simple routine to help GUI development.
  3193.  */
  3194.  
  3195. struct MenuItem *MakeMenuItem (int LeftEdge, int TopEdge, int Width, 
  3196. int Height, char *Title, int Key, int Exclude)
  3197.  
  3198. {
  3199.     struct IntuiText    *IntuiText;
  3200.     struct MenuItem        *MenuItem;
  3201.  
  3202.     IntuiText = (struct IntuiText*)malloc(sizeof(struct IntuiText));
  3203.     if (!IntuiText)
  3204.     {
  3205.     }
  3206.  
  3207.     IntuiText->FrontPen = 1;
  3208.     IntuiText->BackPen = 2;
  3209.     IntuiText->DrawMode = JAM1;
  3210.     IntuiText->LeftEdge = NULL;
  3211.     IntuiText->TopEdge = 1;
  3212.     IntuiText->ITextFont = NULL;
  3213.     IntuiText->IText = (UBYTE*)Title;
  3214.     IntuiText->NextText = NULL;
  3215.  
  3216.     MenuItem = (struct MenuItem*)malloc(sizeof(struct MenuItem));
  3217.     if (!MenuItem)
  3218.     {
  3219.     }
  3220.  
  3221.     MenuItem->NextItem = NULL;
  3222.     MenuItem->LeftEdge = LeftEdge;
  3223.     MenuItem->TopEdge = TopEdge;
  3224.     MenuItem->Width = Width;
  3225.     MenuItem->Height = Height;
  3226.  
  3227.     MenuItem->Flags = ITEMTEXT | ITEMENABLED | HIGHCOMP;
  3228.  
  3229.     if (Key)
  3230.     {
  3231.         MenuItem->Flags = MenuItem->Flags | COMMSEQ;
  3232.     }
  3233.  
  3234.     if (Exclude)
  3235.     {
  3236.         MenuItem->Flags = MenuItem->Flags | CHECKIT;
  3237.     }
  3238.  
  3239. /*
  3240.     if (Key==NULL)    
  3241.     {
  3242.         MenuItem->Flags = ITEMTEXT | ITEMENABLED | HIGHCOMP;
  3243.     }
  3244.     else
  3245.     {
  3246.         MenuItem->Flags = ITEMTEXT | ITEMENABLED | HIGHCOMP | COMMSEQ;
  3247.     }
  3248. */
  3249.  
  3250.     MenuItem->MutualExclude = Exclude;
  3251.     MenuItem->ItemFill = (APTR)IntuiText;
  3252.     MenuItem->SelectFill = NULL;
  3253.     MenuItem->Command = (BYTE)Key;
  3254.     MenuItem->SubItem = NULL;
  3255.     MenuItem->NextSelect = MENUNULL;
  3256.  
  3257.     return MenuItem;
  3258. }
  3259.  
  3260.  
  3261.  
  3262. /*
  3263.  * ========
  3264.  * MakeMenu
  3265.  * ========
  3266.  */
  3267.  
  3268. /*
  3269.  * Revision     : v0.1.8
  3270.  * Introduced   : NOT KNOWN (Before 2nd September 1995)
  3271.  * Last updated : NOT KNOWN (Before 2nd September 1995)
  3272.  *
  3273.  * Notes: A simple routine to help GUI development.
  3274.  */
  3275.  
  3276. struct Menu *MakeMenu (int LeftEdge, int TopEdge, int Width, char *Title, struct MenuItem *MenuItem)
  3277.  
  3278. {
  3279.     struct Menu *Menu;
  3280.  
  3281.     Menu = (struct Menu*)malloc(sizeof(struct Menu));
  3282.     if (!Menu)
  3283.     {
  3284.     }
  3285.  
  3286.     Menu->NextMenu = NULL;
  3287.     Menu->LeftEdge = LeftEdge;
  3288.     Menu->TopEdge = TopEdge;
  3289.     Menu->Width = Width;
  3290.     Menu->Height = 0;
  3291.     Menu->Flags = MENUENABLED;
  3292.     Menu->MenuName = Title;
  3293.     Menu->FirstItem = MenuItem;
  3294.  
  3295.     return Menu;
  3296. }
  3297.  
  3298.  
  3299.  
  3300. /*
  3301.  * ==========
  3302.  * MakeGadget
  3303.  * ==========
  3304.  */
  3305.  
  3306. /*
  3307.  * Revision     : v0.2.1a
  3308.  * Introduced   : 2nd September 1995
  3309.  * Last updated : 9th October 1995
  3310.  *
  3311.  * Notes: Not complete yet. The Type argument is currently not supported so
  3312.  * routine is only capable of producing boring click-me-to-continue type
  3313.  * gadgets.
  3314.  */
  3315.  
  3316. struct Gadget *MakeGadget (int LeftEdge, int TopEdge, int Width, int Height, int Offset, struct Window *Window, char *Title, int Type)
  3317.  
  3318. {
  3319.     int Result;
  3320.     int TextX;
  3321.  
  3322.     struct IntuiText *NewTextAddress = NULL;
  3323.     struct Gadget *NewGadgetAddress = NULL;
  3324.  
  3325.     NewGadgetAddress = (struct Gadget*)malloc(sizeof(struct Gadget));
  3326.     if (!NewGadgetAddress)
  3327.     {
  3328.     }
  3329.  
  3330.     NewGadgetAddress->NextGadget = NULL;
  3331. /*
  3332.     NewGadgetAddress->LeftEdge = LeftEdge;
  3333.     NewGadgetAddress->TopEdge = TopEdge;
  3334. */
  3335.     NewGadgetAddress->Width = Width;
  3336.     NewGadgetAddress->Height = Height;
  3337.  
  3338.     NewGadgetAddress->Flags = GADGIMAGE | GADGHIMAGE;
  3339.     NewGadgetAddress->Activation = RELVERIFY;
  3340.     NewGadgetAddress->GadgetType = BOOLGADGET;
  3341.     if (Type == gadget_Button)
  3342.     {
  3343.         NewGadgetAddress->GadgetRender = &image_Button64;
  3344.         NewGadgetAddress->SelectRender = &image_Button64Selected;
  3345.     }
  3346.     else if (Type == gadget_Mutual)
  3347.     {
  3348.         NewGadgetAddress->Activation = TOGGLESELECT | RELVERIFY;
  3349.         NewGadgetAddress->GadgetRender = &image_MutualGadget;
  3350.         NewGadgetAddress->SelectRender = &image_MutualGadgetSelected;
  3351.     }
  3352.     else
  3353.     {
  3354.         NewGadgetAddress->Flags = GADGHCOMP;
  3355.     }
  3356.  
  3357.     NewGadgetAddress->GadgetText = NULL;
  3358.     NewGadgetAddress->MutualExclude = NULL;
  3359.     NewGadgetAddress->SpecialInfo = NULL;
  3360.     NewGadgetAddress->GadgetID = 0;
  3361.     NewGadgetAddress->UserData = NULL;
  3362.  
  3363.     LeftEdge = (LeftEdge * gui_GridWidth) + gui_WindowOffsetLeftEdge;
  3364.     TopEdge = (TopEdge * gui_GridHeight) + gui_WindowOffsetTopEdge + 1 + ((gui_GridHeight - 7) * 2);
  3365.  
  3366.     NewGadgetAddress->LeftEdge = LeftEdge;
  3367.     NewGadgetAddress->TopEdge = TopEdge;
  3368.     NewGadgetAddress->Width = Width;
  3369.     NewGadgetAddress->Height = Height;
  3370.  
  3371.     if (Type == gadget_Button)
  3372.     {
  3373.         TextX=(Width/2)-(strlen(Title)*4);
  3374.     }
  3375.     else if (Type == gadget_Mutual)
  3376.     {
  3377.         TextX = 24;
  3378.     }
  3379.  
  3380.     NewTextAddress = (struct IntuiText*)malloc(sizeof(struct IntuiText));
  3381.     if (!NewTextAddress)
  3382.     {
  3383.     }
  3384.  
  3385.     NewTextAddress->FrontPen = 1;
  3386.     NewTextAddress->BackPen = 3;
  3387.     NewTextAddress->DrawMode = JAM1;
  3388.     NewTextAddress->LeftEdge = TextX;
  3389.     NewTextAddress->TopEdge = 3;
  3390.     NewTextAddress->ITextFont = NULL;
  3391.     NewTextAddress->IText = (UBYTE*)Title;
  3392.     NewTextAddress->NextText = NULL;
  3393.  
  3394.     NewGadgetAddress->GadgetText = NewTextAddress;
  3395.  
  3396.     if (NewGadgetAddress->Activation & TOGGLESELECT)
  3397.     {
  3398.         if (Title)
  3399.         {
  3400.             if (Offset)
  3401.             {
  3402.                 NewTextAddress->LeftEdge = Offset;
  3403.             }
  3404.         }
  3405.     }
  3406.  
  3407.     if (Window)
  3408.     {
  3409.         Result = AddGadget (Window, NewGadgetAddress, -1);
  3410.         RefreshGadgets (NewGadgetAddress, Window, NULL);
  3411.     }
  3412.  
  3413.     return NewGadgetAddress;
  3414. }
  3415.  
  3416.  
  3417.  
  3418. /*
  3419.  * ========
  3420.  * ShowText
  3421.  * ========
  3422.  */
  3423.  
  3424. /*
  3425.  * Revision     : v0.2.0
  3426.  * Introduced   : 2nd September 1995
  3427.  * Last updated : 9th September 1995
  3428.  *
  3429.  * Notes: A simple routine to help any future GUI development.
  3430.  */
  3431.  
  3432. void ShowText (int LeftEdge, int TopEdge, struct Window *Window, char *TextString)
  3433.  
  3434. {
  3435.     if (ScreenType == CUSTOMSCREEN)
  3436.     {
  3437.         SetAPen (Window->RPort, 0);
  3438.         SetBPen (Window->RPort, 6);
  3439.     }
  3440.     else
  3441.     {
  3442.         SetAPen (Window->RPort, 1);
  3443.         SetBPen (Window->RPort, 0);
  3444.     }
  3445.  
  3446.     LeftEdge = (LeftEdge * gui_GridWidth);
  3447.     TopEdge = (TopEdge * gui_GridHeight) + ((gui_GridHeight - 7) * 2);
  3448.  
  3449.     if (Window->Flags & GIMMEZEROZERO)
  3450.     {
  3451.         TopEdge = TopEdge + 8;
  3452.     }
  3453.     else
  3454.     {
  3455.         LeftEdge = LeftEdge + gui_WindowOffsetLeftEdge;
  3456.         TopEdge = TopEdge + gui_WindowOffsetTopEdge + 8;
  3457.     }
  3458.  
  3459.     Move (Window->RPort, LeftEdge, TopEdge);
  3460.     Text (Window->RPort, TextString, strlen(TextString));
  3461. }
  3462.  
  3463.  
  3464.  
  3465. /*
  3466.  * ====
  3467.  * Rule
  3468.  * ====
  3469.  */
  3470.  
  3471. /*
  3472.  * Revision     : v0.2.0
  3473.  * Introduced   : 2nd September 1995
  3474.  * Last updated : 9th September 1995
  3475.  *
  3476.  * Notes: A simple routine to help any future GUI development.
  3477.  */
  3478.  
  3479. void Rule (int LeftEdge, int TopEdge, int Width, struct Window *Window)
  3480.  
  3481. {
  3482.     int RightEdge;
  3483.  
  3484.     LeftEdge = (LeftEdge * gui_GridWidth) + gui_WindowOffsetLeftEdge;
  3485.     TopEdge = (TopEdge * gui_GridHeight) + 12 + gui_WindowOffsetTopEdge; /* + 44 */
  3486.  
  3487.     RightEdge = Width + LeftEdge - 1;
  3488.  
  3489.     if (ScreenType == CUSTOMSCREEN)
  3490.     {
  3491.         SetAPen (Window->RPort, 0);
  3492.     }
  3493.     else
  3494.     {
  3495.         SetAPen (Window->RPort, 1);
  3496.     }
  3497.  
  3498.     Move (Window->RPort, LeftEdge, TopEdge);
  3499.     Draw (Window->RPort, RightEdge, TopEdge);
  3500.  
  3501.     if (ScreenType == CUSTOMSCREEN)
  3502.     {
  3503.         SetAPen (Window->RPort, 15);
  3504.     }
  3505.     else
  3506.     {
  3507.         SetAPen (Window->RPort, 2);
  3508.     }
  3509.  
  3510.     Move (Window->RPort, LeftEdge, TopEdge + 1);
  3511.     Draw (Window->RPort, RightEdge, TopEdge + 1);
  3512. }
  3513.  
  3514.  
  3515.  
  3516. /*
  3517.  * ==========
  3518.  * InsertDisk
  3519.  * ==========
  3520.  */
  3521.  
  3522. /*
  3523.  * Revision     : v0.2.1
  3524.  * Introduced   : 24th September 1995
  3525.  * Last updated : 24th September 1995
  3526.  *
  3527.  * Notes: A simple routine to help any future GUI development.
  3528.  */
  3529.  
  3530. int InsertDisk (int Drive)
  3531.  
  3532. {
  3533.     struct FileRequester *FileRequester = NULL;
  3534.     char Filename[256];
  3535.     int Success = FALSE;
  3536.  
  3537.     if (FileRequester = (struct FileRequester*) AllocAslRequestTags (ASL_FileRequest, TAG_DONE))
  3538.     {
  3539.         if (AslRequestTags (FileRequester,
  3540.             ASLFR_Screen, ScreenMain,
  3541.             ASLFR_TitleText, "Select file",
  3542.             ASLFR_PositiveText, "Ok",
  3543.             ASLFR_NegativeText, "Cancel",
  3544.             TAG_DONE))
  3545.         {
  3546.             printf ("File selected: %s/%s\n", FileRequester->rf_Dir, FileRequester->rf_File);
  3547.             printf ("Number of files : %d\n", FileRequester->fr_NumArgs);
  3548.  
  3549.             SIO_Dismount (Drive);
  3550.  
  3551.             if (FileRequester->rf_Dir)
  3552.             {
  3553.                 sprintf (Filename, "%s/%s", FileRequester->rf_Dir, FileRequester->rf_File);
  3554.             }
  3555.             else
  3556.             {
  3557.                 sprintf (Filename, "%s", FileRequester->rf_File);
  3558.             }
  3559.  
  3560.             if (!SIO_Mount (Drive, Filename))
  3561.             {
  3562.             }
  3563.             else
  3564.             {
  3565.                 Success = TRUE;
  3566.             }
  3567.         }
  3568.         else
  3569.         {
  3570.             /*
  3571.              * Cancelled
  3572.              */
  3573.         }
  3574.     }
  3575.     else
  3576.     {
  3577.         printf ("Unable to create requester\n");
  3578.     }
  3579.  
  3580.     return Success;
  3581. }
  3582.  
  3583.  
  3584.  
  3585. /*
  3586.  * =========
  3587.  * InsertROM
  3588.  * =========
  3589.  */
  3590.  
  3591. /*
  3592.  * Revision     : v0.3.3
  3593.  * Introduced   : 10th March 1996
  3594.  * Last updated : 10th March 1996
  3595.  */
  3596.  
  3597. int InsertROM (int CartType)
  3598.  
  3599. {
  3600.     struct FileRequester *FileRequester = NULL;
  3601.     char Filename[256];
  3602.     int Success = FALSE;
  3603.  
  3604.     if (FileRequester = (struct FileRequester*) AllocAslRequestTags (ASL_FileRequest, TAG_DONE))
  3605.     {
  3606.         if (AslRequestTags (FileRequester,
  3607.             ASLFR_Screen, ScreenMain,
  3608.             ASLFR_TitleText, "Select file",
  3609.             ASLFR_PositiveText, "Ok",
  3610.             ASLFR_NegativeText, "Cancel",
  3611.             TAG_DONE))
  3612.         {
  3613.             printf ("File selected: %s/%s\n", FileRequester->rf_Dir, FileRequester->rf_File);
  3614.             printf ("Number of files : %d\n", FileRequester->fr_NumArgs);
  3615.  
  3616.             if (FileRequester->rf_Dir)
  3617.             {
  3618.                 sprintf (Filename, "%s/%s", FileRequester->rf_Dir, FileRequester->rf_File);
  3619.             }
  3620.             else
  3621.             {
  3622.                 sprintf (Filename, "%s", FileRequester->rf_File);
  3623.             }
  3624.  
  3625.             if (CartType == 0)
  3626.             {
  3627.                 Remove_ROM ();
  3628.                 if (Insert_8K_ROM(Filename))
  3629.                 {
  3630.                     Coldstart ();
  3631.                 }
  3632.             }
  3633.             else if (CartType == 1)
  3634.             {
  3635.                 Remove_ROM ();
  3636.                 if (Insert_16K_ROM(Filename))
  3637.                 {
  3638.                     Coldstart ();
  3639.                 }
  3640.             }
  3641.             else if (CartType == 2)
  3642.             {
  3643.                 Remove_ROM ();
  3644.                 if (Insert_OSS_ROM(Filename))
  3645.                 {
  3646.                     Coldstart ();
  3647.                 }
  3648.             }
  3649.         }
  3650.         else
  3651.         {
  3652.             /*
  3653.              * Cancelled
  3654.              */
  3655.         }
  3656.     }
  3657.     else
  3658.     {
  3659.         printf ("Unable to create requester\n");
  3660.     }
  3661.  
  3662.     return Success;
  3663. }
  3664.  
  3665.  
  3666.  
  3667. insert_rom_callback ()
  3668. {
  3669. /*
  3670.   xv_set (chooser,
  3671.       FRAME_LABEL, "ROM Selector",
  3672.       FILE_CHOOSER_DIRECTORY, ATARI_ROM_DIR,
  3673.       FILE_CHOOSER_NOTIFY_FUNC, rom_change,
  3674.       XV_SHOW, TRUE,
  3675.       NULL);
  3676. */
  3677. }
  3678.  
  3679.  
  3680.  
  3681. /*
  3682.  * ============
  3683.  * SetupDisplay
  3684.  * ============
  3685.  */
  3686.  
  3687. /*
  3688.  * Revision     : v0.3.3
  3689.  * Introduced   : 10th March 1996
  3690.  * Last updated : 10th March 1996
  3691.  */
  3692.  
  3693. SetupDisplay ()
  3694. {
  3695.     struct NewWindow    NewWindow;
  3696.     int i;
  3697.  
  3698.     /*
  3699.      * ===========
  3700.      * Screen Pens
  3701.      * ===========
  3702.      */
  3703.  
  3704.     WORD ScreenPens[13] =
  3705.     {
  3706.         15, /* Unknown */
  3707.         15, /* Unknown */
  3708.         0, /* Windows titlebar text when inactive */
  3709.         15, /* Windows bright edges */
  3710.         0, /* Windows dark edges */
  3711.         120, /* Windows titlebar when active */
  3712.         0, /* Windows titlebar text when active */
  3713.         4, /* Windows titlebar when inactive */
  3714.         15, /* Unknown */
  3715.         0, /* Menubar text */
  3716.         15, /* Menubar */
  3717.         0, /* Menubar base */
  3718.         -1
  3719.     };
  3720.  
  3721.     /*
  3722.      * =============
  3723.      * Create Screen
  3724.      * =============
  3725.      */
  3726.  
  3727.     if (CustomScreen)
  3728.     {
  3729.         ScreenType = CUSTOMSCREEN;
  3730.  
  3731.         ScreenWidth = ATARI_WIDTH - 64; /* ATARI_WIDTH + 8; */
  3732.         ScreenHeight = ATARI_HEIGHT; /* ATARI_HEIGHT + 13; */
  3733.  
  3734.         if (ChipSet == AGA_ChipSet)
  3735.         {
  3736.             ScreenDepth = 8;
  3737.         }
  3738.         else
  3739.         {
  3740.             ScreenDepth = 5;
  3741.         }
  3742.  
  3743.         NewScreen.LeftEdge = 0;
  3744.         NewScreen.TopEdge = 0;
  3745.         NewScreen.Width = ScreenWidth;
  3746.         NewScreen.Height = ScreenHeight;
  3747.         NewScreen.Depth = ScreenDepth;
  3748.         NewScreen.DetailPen = 1;
  3749.         NewScreen.BlockPen = 2; /* 2 */
  3750.         NewScreen.ViewModes = NULL;
  3751.         NewScreen.Type = CUSTOMSCREEN;
  3752.         NewScreen.Font = NULL;
  3753.         NewScreen.DefaultTitle = ATARI_TITLE;
  3754.         NewScreen.Gadgets = NULL;
  3755.         NewScreen.CustomBitMap = NULL;
  3756.  
  3757.         ScreenMain = (struct Screen *) OpenScreenTags
  3758.         (
  3759.             &NewScreen,
  3760.             SA_Left, 0,
  3761.             SA_Top, 0,
  3762.             SA_Width, ScreenWidth,
  3763.             SA_Height, ScreenHeight,
  3764.             SA_Depth, ScreenDepth,
  3765.             SA_DetailPen, 1,
  3766.             SA_BlockPen, 2, /* 2 */
  3767.             SA_Pens, ScreenPens,
  3768.             SA_Title, ATARI_TITLE,
  3769.             SA_Type, CUSTOMSCREEN,
  3770. /*
  3771.             SA_Overscan, OSCAN_STANDARD,
  3772. */
  3773. /*
  3774.             SA_DisplayID, ScreenID,
  3775. */
  3776.             SA_AutoScroll, TRUE,
  3777. /*
  3778.             SA_Interleaved, TRUE,
  3779. */
  3780.             TAG_DONE
  3781.         );
  3782.  
  3783.         if (ChipSet == AGA_ChipSet)
  3784.         {
  3785.             TotalColours = 256;
  3786.         }
  3787.         else
  3788.         {
  3789.             TotalColours = 16;
  3790.         }
  3791.  
  3792.         for (i=0;i<TotalColours;i++)
  3793.         {
  3794.             int rgb = colortable[i];
  3795.             int red;
  3796.             int green;
  3797.             int blue;
  3798.  
  3799.             red = (rgb & 0x00ff0000) >> 20;
  3800.             green = (rgb & 0x0000ff00) >> 12;
  3801.             blue = (rgb & 0x000000ff) >> 4;
  3802.  
  3803.             SetRGB4 (&ScreenMain->ViewPort, i, red, green, blue);
  3804.         }
  3805.  
  3806.         image_Button64.PlanePick = 9;
  3807.         image_Button64.PlaneOnOff = (UBYTE) 6;
  3808.         image_Button64Selected.PlanePick = 9;
  3809.         image_Button64Selected.PlaneOnOff = (UBYTE) 6;
  3810.         image_MutualGadget.PlanePick = 9;
  3811.         image_MutualGadget.PlaneOnOff = (UBYTE) 6;
  3812.         image_MutualGadgetSelected.PlanePick = 9;
  3813.         image_MutualGadgetSelected.PlaneOnOff = (UBYTE) 6;
  3814.     }
  3815.     else
  3816.     {
  3817.         ScreenType = WBENCHSCREEN;
  3818.  
  3819.         ScreenWidth = ATARI_WIDTH; /* ATARI_WIDTH + 8; */
  3820.         ScreenHeight = ATARI_HEIGHT; /* ATARI_HEIGHT + 13; */
  3821.     }
  3822.  
  3823.     /*
  3824.      * =============
  3825.      * Create Window
  3826.      * =============
  3827.      */
  3828.  
  3829.     NewWindow.DetailPen = 0;
  3830.     NewWindow.BlockPen = 148;
  3831.  
  3832.     if (CustomScreen)
  3833.     {
  3834.         NewWindow.LeftEdge = 0;
  3835.         NewWindow.TopEdge = 0;
  3836.         NewWindow.Width = ScreenWidth; /* ATARI_WIDTH + 8; */
  3837.         NewWindow.Height = ScreenHeight; /* ATARI_HEIGHT + 13; */
  3838.         NewWindow.IDCMPFlags = SELECTDOWN | SELECTUP | MOUSEBUTTONS | MOUSEMOVE | MENUPICK | MENUVERIFY | MOUSEBUTTONS | GADGETUP | RAWKEY | VANILLAKEY;
  3839.  
  3840.         /*
  3841.          * If you use the ClickToFront commodity it might be a good idea to
  3842.          * enable the BACKDROP option in the NewWindow.Flags line below.
  3843.          */
  3844.  
  3845.         NewWindow.Flags = /* BACKDROP | */ REPORTMOUSE | BORDERLESS | GIMMEZEROZERO | SMART_REFRESH | ACTIVATE;
  3846.         NewWindow.Title = NULL;
  3847.     }
  3848.     else
  3849.     {
  3850.         NewWindow.LeftEdge = 0;
  3851.         NewWindow.TopEdge = 11;
  3852.         NewWindow.Width = ScreenWidth + 8; /* ATARI_WIDTH + 8; */
  3853.         NewWindow.Height = ScreenHeight + 13; /* ATARI_HEIGHT + 13; */
  3854.         NewWindow.IDCMPFlags = SELECTDOWN | SELECTUP | MOUSEBUTTONS | MOUSEMOVE | CLOSEWINDOW | MENUPICK | MENUVERIFY | MOUSEBUTTONS | GADGETUP | RAWKEY | VANILLAKEY;
  3855.         NewWindow.Flags = REPORTMOUSE | WINDOWCLOSE | GIMMEZEROZERO | WINDOWDRAG | WINDOWDEPTH | SMART_REFRESH | ACTIVATE;
  3856.         NewWindow.Title = ATARI_TITLE;
  3857.     }
  3858.  
  3859.     NewWindow.FirstGadget = NULL;
  3860.     NewWindow.CheckMark = NULL;
  3861.     NewWindow.Screen = ScreenMain;
  3862.     NewWindow.Type = ScreenType;
  3863.     NewWindow.BitMap = NULL;
  3864.     NewWindow.MinWidth = 50;
  3865.     NewWindow.MinHeight = 11;
  3866.     NewWindow.MaxWidth = 1280;
  3867.     NewWindow.MaxHeight = 512;
  3868.  
  3869.     WindowMain = (struct Window*) OpenWindowTags
  3870.     (
  3871.         &NewWindow,
  3872.         WA_NewLookMenus, TRUE,
  3873.         WA_MenuHelp, TRUE,
  3874.         WA_ScreenTitle, ATARI_TITLE,
  3875. /*
  3876.         WA_Zoom, Zoomdata,
  3877. */
  3878.         TAG_DONE
  3879.     );
  3880.  
  3881.     if (!WindowMain)
  3882.     {
  3883.         printf ("Failed to create window\n");
  3884.         Atari_Exit (0);
  3885.     }
  3886. }
  3887.  
  3888.  
  3889.  
  3890. /*
  3891.  * =======
  3892.  * Iconify
  3893.  * =======
  3894.  */
  3895.  
  3896. /*
  3897.  * Revision     : v0.3.3
  3898.  * Introduced   : 10th March 1996
  3899.  * Last updated : 10th March 1996
  3900.  */
  3901.  
  3902. Iconify ()
  3903. {
  3904.     ULONG Class;
  3905.     USHORT Code;
  3906.     APTR Address;
  3907.  
  3908.     struct IntuiMessage *IntuiMessage;
  3909.  
  3910.     struct NewWindow    NewWindow;
  3911.  
  3912.     int QuitRoutine;
  3913.  
  3914.     ClearMenuStrip (WindowMain);
  3915.  
  3916.     if (WindowMain)
  3917.     {
  3918.         CloseWindow (WindowMain);
  3919.     }
  3920.  
  3921.     if (ScreenMain)
  3922.     {
  3923.         CloseScreen (ScreenMain);
  3924.     }
  3925.  
  3926.     NewWindow.LeftEdge = 0;
  3927.     NewWindow.TopEdge = 11;
  3928.     NewWindow.Width = 112;
  3929.     NewWindow.Height = 21;
  3930.     NewWindow.DetailPen = 0;
  3931.     NewWindow.BlockPen = 15;
  3932.     NewWindow.IDCMPFlags = CLOSEWINDOW;
  3933.     NewWindow.Flags = WINDOWCLOSE | WINDOWDRAG | ACTIVATE;
  3934.     NewWindow.FirstGadget = NULL;
  3935.     NewWindow.CheckMark = NULL;
  3936.     NewWindow.Title = "Atari800e";
  3937.     NewWindow.Screen = NULL;
  3938.     NewWindow.Type = WBENCHSCREEN;
  3939.     NewWindow.BitMap = NULL;
  3940.     NewWindow.MinWidth = 92;
  3941.     NewWindow.MinHeight = 21;
  3942.     NewWindow.MaxWidth = 1280;
  3943.     NewWindow.MaxHeight = 512;
  3944.  
  3945.     WindowIconified = (struct Window*) OpenWindowTags
  3946.     (
  3947.         &NewWindow,
  3948.         WA_NewLookMenus, TRUE,
  3949.         WA_MenuHelp, TRUE,
  3950.         WA_ScreenTitle, ATARI_TITLE,
  3951.         TAG_DONE
  3952.     );
  3953.  
  3954.     QuitRoutine = FALSE;
  3955.  
  3956.     while (QuitRoutine == FALSE)
  3957.     {
  3958.         while (IntuiMessage = (struct IntuiMessage*) GetMsg (WindowIconified->UserPort))
  3959.         {
  3960.             Class = IntuiMessage->Class;
  3961.             Code = IntuiMessage->Code;
  3962.             Address = IntuiMessage->IAddress;
  3963.  
  3964.             ReplyMsg (IntuiMessage);
  3965.  
  3966.             switch (Class)
  3967.             {
  3968.                 case CLOSEWINDOW :
  3969.                     QuitRoutine = TRUE;
  3970.                     break;
  3971.                 default :
  3972.                     break;
  3973.             }
  3974.         }
  3975.     }
  3976.  
  3977.     CloseWindow (WindowIconified);
  3978.  
  3979.     SetupDisplay ();
  3980.  
  3981.     SetMenuStrip (WindowMain, menu_Project);
  3982. }
  3983.  
  3984. void Atari_Set_LED(int on)
  3985. {
  3986. }
  3987.  
  3988. UBYTE Atari_Keyboard_State(void)
  3989. {
  3990.     return ~((SHIFTPRESSED<<3) | (KEYPRESSED<<2));
  3991. }
  3992.