home *** CD-ROM | disk | FTP | other *** search
/ Resource Library: Graphics / graphics-16000.iso / amiga / fractal / mak / source.lzh / Source / M_A_K.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-07-20  |  88.2 KB  |  3,155 lines

  1. /****************** Mandelbrot Fractal Generator ************************
  2.  
  3. This program was written to learn the lattice environment and to better
  4. learn how the AMIGA works.  It started out as an extra credit project
  5. for CO-127-A1 (C-class).  I became very interested in what these chaotic
  6. fractal images looked like and decided to design a program that would
  7. let anyone interested in them explore "chaos" on their own.  If you have
  8. the patience to wait, they sure make some beautiful looking images.
  9.  
  10. **************************************************************************/
  11.  
  12. /*************************************************************************
  13.  
  14.                 I N C L U D E S   A N D   D E F I N E S
  15.              
  16. *************************************************************************/
  17.  
  18. #include <exec/types.h>
  19. #include <intuition/intuition.h>
  20. #include <stdio.h>
  21. #include <math.h>
  22. #include <exec/memory.h>
  23. #include <graphics/sprite.h>
  24.  
  25. #define MAND_DRAWING 1
  26. #define JULIA_DRAWING 2
  27. #define MAK_PIC 0
  28. #define MAP_PIC 1
  29. #define TITLE_PIC 2
  30.  
  31.  
  32. /************************************************************************
  33.  
  34.                   S T R U C T U R E    P O I N T E R S
  35.         
  36. ************************************************************************/
  37.  
  38. extern struct Menu *MAKMenu;
  39.  
  40. struct MathBase *MathBase;
  41. struct GfxBase *GfxBase;
  42. struct RastPort *rp;
  43. struct ViewPort *vp;
  44. struct IntuitionBase *IntuitionBase;
  45. struct Screen *FirstScreen;
  46. struct Window *FirstWindow, *NoBorder, *ColorWindow, *QuitWindow;
  47. struct IntuiMessage *message;
  48.  
  49.  
  50.  
  51. /************************************************************************
  52.  
  53.                        F O N T   S T R U C T U R E  
  54.              
  55. ************************************************************************/
  56.  
  57. struct TextAttr Font =
  58.   {
  59.   (STRPTR)"topaz.font",
  60.   TOPAZ_EIGHTY,
  61.   FS_NORMAL,
  62.   FPF_ROMFONT
  63.   };
  64.  
  65.  
  66. /************************************************************************
  67.  
  68.                       S C R E E N    S T R U C T U R E
  69.             
  70. ************************************************************************/
  71.  
  72. struct NewScreen FirstNewScreen =
  73.   {
  74.   0, 0,
  75.   640, 400,
  76.   4,
  77.   0, 1,
  78.   HIRES | LACE,
  79.   CUSTOMSCREEN,
  80.   &Font,
  81.   (UBYTE *)"Mandelbrot Adventure Kit",
  82.   NULL,
  83.   NULL,
  84.   };
  85.  
  86.  
  87. /*************************************************************************
  88.  
  89.                          F I R S T     W I N D O W
  90.           
  91. *************************************************************************/
  92.  
  93. struct NewWindow FirstNewWindow =
  94.   {
  95.   0, 0,
  96.   640, 400,
  97.   0, 1,
  98.   GADGETUP | GADGETDOWN | MENUPICK | REQCLEAR,
  99.   WINDOWDEPTH | WINDOWSIZING | WINDOWDRAG |
  100.   SMART_REFRESH | ACTIVATE,
  101.   NULL,
  102.   NULL,
  103.   (UBYTE *)"Mandelbrot Adventure Kit",
  104.   NULL,
  105.   NULL,
  106.   320, 200,
  107.   640, 400,
  108.   CUSTOMSCREEN,
  109.   };
  110.  
  111.  
  112. /*************************************************************************
  113.  
  114.                  C O L O R   T A B L E    C O L O R S
  115.        
  116. *************************************************************************/
  117.  
  118.  
  119. USHORT colortable[16] = { 0x000,0xfff,0x00f,0xc1f,0x91f,
  120.                         0xf00,0x0f0,0xf90,0xff0,0x61f,
  121.                         0x0db,0xbf0,0xfac,0x1fb,0xd00,
  122.                         0x8e0 };
  123.  
  124. USHORT colortable_2[16];
  125.          
  126. /*****   Color Table colors respectively are: ***************************
  127.  
  128.          Black, White, Blue, Violet, Purple,
  129.          Red, Green, Orange, Lemon Yellow, Bright Blue,
  130.          Aqua, Lime Green, Pink, Light Aqua, Brick Red,
  131.          Light Green...
  132.  
  133. *************************************************************************/
  134.  
  135. /************************************************************************
  136.  
  137.                            Pointer colors
  138.             
  139. ************************************************************************/  
  140.  
  141. UWORD POINTER_col[] = { 0xff0, 0x000, 0x0f0 };
  142. UWORD CROSS_col[] = { 0xfff, 0x000, 0xf00 };
  143. UWORD SLEEPY_col[] = { 0x9bc, 0x000, 0xff0 };      
  144.  
  145. /************************************************************************
  146.  
  147.               Pointer definitions and initializations                      
  148.                                                        
  149. ************************************************************************/ 
  150.  
  151. #define POINTER_SIZE 152
  152. #define CROSS_SIZE 152
  153. #define SLEEPY_SIZE 216
  154.  
  155. USHORT *Pointer = (USHORT *) NULL;
  156. USHORT *Cross = (USHORT *) NULL;
  157. USHORT *Sleepy = (USHORT *) NULL;
  158.  
  159. /************************************************************************
  160.  
  161.              This is the data for the sleepy cloud sprite 
  162.                   
  163. *************************************************************************/
  164.  
  165. USHORT Sleepy_Sprite[] = {
  166.       0x0000,  0x0000,
  167.       0x0ff0,  0x0000,
  168.       0x1ff0,  0x0000,
  169.       0x3ffc,  0x0000,
  170.       0x7ffe,  0x0000,
  171.       0xffff,  0x1f00,
  172.       0xffff,  0x1300,
  173.       0xffff,  0x067c,
  174.       0xffff,  0x0c4c,
  175.       0xffff,  0x1918,
  176.       0xffff,  0x1f30,
  177.       0xffff,  0x0064,
  178.       0x7fff,  0x007c,
  179.       0x3fff,  0x0000,
  180.       0x1ffe,  0x0000,
  181.       0x07f8,  0x0000,
  182.       0x03ae,  0x0000,
  183.       0x06db,  0x0000,
  184.       0x0451,  0x0000,
  185.       0x06fb,  0x0000,
  186.       0x03de,  0x0000,
  187.       0x0034,  0x0000,
  188.       0x0036,  0x0000,
  189.       0x001d,  0x0000,
  190.       0x0002,  0x0000,
  191.       0x0000,  0x0000,
  192.       0x0000,  0x0000,
  193.                         };
  194.  
  195. /************************************************************************
  196.  
  197.                 This is the data for the cross sprite 
  198.                   
  199. *************************************************************************/
  200.  
  201. USHORT Cross_Sprite[] = {
  202.    0x0000, 0x0000,
  203.    0x0100, 0x0100,
  204.    0x0100, 0x0100,
  205.    0x0100, 0x0000,
  206.    0x0100, 0x0000,
  207.    0x0100, 0x0000,
  208.    0x0100, 0x0000,
  209.    0x0000, 0x0000,
  210.    0xfd7e, 0xc106,
  211.    0x0000, 0x0000,
  212.    0x0100, 0x0000,
  213.    0x0100, 0x0000,
  214.    0x0100, 0x0000,
  215.    0x0100, 0x0000,
  216.    0x0100, 0x0100,
  217.    0x0100, 0x0100,
  218.    0x0000, 0x0000,
  219.    0x0000, 0x0000  };
  220.  
  221. /************************************************************************
  222.  
  223.                 This is the data for the pointer sprite 
  224.                   
  225. *************************************************************************/
  226.  
  227. USHORT Pointer_Sprite[] = {
  228.    0x0000, 0x0000,
  229.    0x4000, 0x4000,
  230.    0x6000, 0x6000,
  231.    0x7000, 0xb000,
  232.    0x7800, 0xb800,
  233.    0x7c00, 0x9c00,
  234.    0x7e00, 0x9e00,
  235.    0x7f00, 0x8f00,
  236.    0x7f80, 0x8f80,
  237.    0x7fc0, 0x87c0,
  238.    0x7e00, 0x83c0,
  239.    0x7600, 0x8b00,
  240.    0x6300, 0x9d00,
  241.    0x4300, 0xb500,
  242.    0x0180, 0xe680,
  243.    0x0180, 0x0280,
  244.    0x0000, 0x0380,
  245.    0x0000, 0x0000  };
  246.  
  247. /**************************************************************************
  248.  
  249.  D E F A U L T   C O L O R   R E Q U E S T E R   I N F O R M A T I O N
  250.  
  251. **************************************************************************/
  252.  
  253.  
  254. struct Requester dc_requester;
  255.  
  256. struct IntuiText dc_OK_txt =
  257.        {1, 0, JAM1, 8, 8, &Font, (UBYTE *)" OK !", NULL};
  258.    
  259. struct Image dc_OK_img = {0,0, 50,25, 3, NULL, 0, 0, NULL};
  260.  
  261. struct Gadget dc_OK_gadg =
  262.     {
  263.      NULL,
  264.      20, 230, 50, 25,
  265.      GADGIMAGE|GADGHBOX, ENDGADGET|RELVERIFY, REQGADGET|BOOLGADGET,
  266.      (APTR)&dc_OK_img, NULL,
  267.      &dc_OK_txt, NULL,
  268.      NULL, 1, NULL
  269.     };
  270.  
  271. SHORT default_border1_cords[] = {5,22, 220,22, 220,280, 5,280, 5,22};
  272. SHORT default_border2_cords[] = {10,25, 216,25, 216,275, 10,275, 10,25};
  273.  
  274.  
  275. struct Border default_border2 =
  276.     {
  277.      0, 0,
  278.      1, 0, JAM1,
  279.      5, &default_border2_cords[0],
  280.      NULL
  281.     };
  282.  
  283. struct Border default_border1 =
  284.     {
  285.      0, 0,
  286.      1, 0, JAM1,
  287.      5, &default_border1_cords[0],
  288.      &default_border2
  289.     };
  290.  
  291. struct IntuiText dctxt[19] =
  292.    { 
  293.    {1, 0, JAM1, 60, 34, &Font,
  294.     "Default Colors",
  295.     &dctxt[1]},
  296.    {1, 0, JAM1, 20, 52, &Font,
  297.     "Color #       Color",
  298.     &dctxt[2]},
  299.    {1, 0, JAM1, 20, 61, &Font,
  300.     "-------       -----",
  301.     &dctxt[3]},
  302.    {1, 0, JAM1, 20, 79, &Font,
  303.     " 0          Black",
  304.     &dctxt[4]},
  305.    {1, 0, JAM1, 20, 88, &Font,
  306.     " 1          White",
  307.     &dctxt[5]},
  308.    {1, 0, JAM1, 20, 97, &Font,
  309.     " 2          Blue",
  310.     &dctxt[6]},
  311.    {1, 0, JAM1, 20, 106, &Font,
  312.     " 3          Violet",
  313.     &dctxt[7]},
  314.    {1, 0, JAM1, 20, 115, &Font,
  315.     " 4          Purple",
  316.     &dctxt[8]},
  317.    {1, 0, JAM1, 20, 124, &Font,
  318.     " 5          Red",
  319.     &dctxt[9]},
  320.    {1, 0, JAM1, 20, 133, &Font,
  321.     " 6          Green",
  322.     &dctxt[10]},
  323.    {1, 0, JAM1, 20, 142, &Font,
  324.     " 7          Orange",
  325.     &dctxt[11]},
  326.    {1, 0, JAM1, 20, 151, &Font,
  327.     " 8          Lemon Yellow",
  328.     &dctxt[12]},
  329.    {1, 0, JAM1, 20, 160, &Font,
  330.     " 9          Bright Blue",
  331.     &dctxt[13]},
  332.    {1, 0, JAM1, 20, 169, &Font,
  333.     " 10         Aqua",
  334.     &dctxt[14]},
  335.    {1, 0, JAM1, 20, 178, &Font,
  336.     " 11         Light Green",
  337.     &dctxt[15]},
  338.    {1, 0, JAM1, 20, 187, &Font,
  339.     " 12         Pink",
  340.     &dctxt[16]},
  341.    {1, 0, JAM1, 20, 196, &Font,
  342.     " 13         Light Aqua",
  343.     &dctxt[17]},
  344.    {1, 0, JAM1, 20, 205, &Font,
  345.     " 14         Brick Red",
  346.     &dctxt[18]},
  347.    {1, 0, JAM1, 20, 214, &Font,
  348.     " 15         Light Green",
  349.     NULL}
  350.    };
  351.  
  352.  
  353. /**************************************************************************
  354.  
  355.     D R A W I N G   A R E A   R E Q U E S T E R   I N F O R M A T I O N
  356.     
  357. **************************************************************************/
  358.  
  359. struct Requester da_requester;
  360.  
  361. struct IntuiText draw_area_OK_txt =
  362.        {1, 0, JAM1, 8, 8, &Font, (UBYTE *)"OK !", NULL};
  363. struct IntuiText draw_area_cancel_txt =
  364.        {1, 0, JAM1, 8, 8, &Font, (UBYTE *)"CANCEL", NULL};
  365.  
  366. struct Image draw_area_OK_img = {0,0, 50,30, 3, NULL, 0, 0, NULL};
  367. struct Image draw_area_cancel_img = {0,0, 70,30, 3, NULL, 0, 0, NULL};
  368.  
  369.  
  370. unsigned char da_H_StringBuffer[6] = "390";
  371. unsigned char da_H_UndoBuffer[6];
  372.  
  373. struct StringInfo *da_H_ptr;
  374. struct StringInfo da_H_StringInfo =
  375.   {
  376.    &da_H_StringBuffer[0],
  377.    &da_H_UndoBuffer[0],
  378.    0, 6, 0, 0, 0, 0, 0, 0, NULL, 390, NULL,
  379.   };
  380.  
  381. struct Image da_H_String_img = {0,0, 60,10, 3, NULL, 0, 0, NULL};
  382.  
  383. struct Gadget da_H_String_gadg =
  384.   {
  385.    NULL,
  386.    120, 120, 60, 10,
  387.    GADGHCOMP, RELVERIFY|LONGINT, REQGADGET|STRGADGET,
  388.    (APTR)&da_H_String_img, NULL,
  389.    NULL, NULL,
  390.    (APTR)&da_H_StringInfo,
  391.    6, NULL,
  392.   };
  393.  
  394.  
  395. unsigned char da_W_StringBuffer[6] = "640";
  396. unsigned char da_W_UndoBuffer[6];
  397.  
  398. struct StringInfo *da_W_ptr;
  399. struct StringInfo da_W_StringInfo =
  400.   {
  401.    &da_W_StringBuffer[0],
  402.    &da_W_UndoBuffer[0],
  403.    0, 6, 0, 0, 0, 0, 0, 0, NULL, 640, NULL,
  404.   };
  405.  
  406. struct Image da_W_String_img = {0,0, 60,10, 3, NULL, 0, 0, NULL};
  407.  
  408. struct Gadget da_W_String_gadg =
  409.   {
  410.    &da_H_String_gadg,
  411.    120, 100, 60, 10,
  412.    GADGHCOMP, RELVERIFY|LONGINT, REQGADGET|STRGADGET,
  413.    (APTR)&da_W_String_img, NULL,
  414.    NULL, NULL,
  415.    (APTR)&da_W_StringInfo,
  416.    5, NULL,
  417.   };
  418.  
  419. unsigned char da_TE_StringBuffer[6] = "10";
  420. unsigned char da_TE_UndoBuffer[6];
  421.  
  422. struct StringInfo *da_TE_ptr;
  423. struct StringInfo da_TE_StringInfo =
  424.   {
  425.    &da_TE_StringBuffer[0],
  426.    &da_TE_UndoBuffer[0],
  427.    0, 6, 0, 0, 0, 0, 0, 0, NULL, 10, NULL,
  428.   };
  429.  
  430. struct Image da_TE_String_img = {0,0, 60,10, 3, NULL, 0, 0, NULL};
  431.  
  432. struct Gadget da_TE_String_gadg =
  433.   {
  434.    &da_W_String_gadg,
  435.    120, 80, 60, 10,
  436.    GADGHCOMP, RELVERIFY|LONGINT, REQGADGET|STRGADGET,
  437.    (APTR)&da_TE_String_img, NULL,
  438.    NULL, NULL,
  439.    (APTR)&da_TE_StringInfo,
  440.    4, NULL,
  441.   };
  442.  
  443.  
  444. unsigned char da_LE_StringBuffer[6] = "0";
  445. unsigned char da_LE_UndoBuffer[6];
  446.  
  447.  
  448. struct StringInfo *da_LE_ptr;
  449. struct StringInfo da_LE_StringInfo =
  450.   {
  451.    &da_LE_StringBuffer[0],
  452.    &da_LE_UndoBuffer[0],
  453.    0, 6, 0, 0, 0, 0, 0, 0, NULL, 0, NULL,
  454.   };
  455.  
  456. struct Image da_LE_String_img = {0,0, 60,10, 3, NULL, 0, 0, NULL};
  457.  
  458. struct Gadget da_LE_String_gadg =
  459.   {
  460.    &da_TE_String_gadg,
  461.    120, 60, 60, 10,
  462.    GADGHCOMP, RELVERIFY|LONGINT, REQGADGET|STRGADGET,
  463.    (APTR)&da_LE_String_img, NULL,
  464.    NULL, NULL,
  465.    (APTR)&da_LE_StringInfo,
  466.    3, NULL,
  467.   };
  468.  
  469. struct Gadget draw_area_cancel_gadg =
  470.     {
  471.      &da_LE_String_gadg,
  472.      120, 150, 70, 30,
  473.      GADGIMAGE|GADGHBOX, ENDGADGET|RELVERIFY, REQGADGET|BOOLGADGET,
  474.      (APTR)&draw_area_cancel_img, NULL,
  475.      &draw_area_cancel_txt, NULL,
  476.      NULL, 2, NULL
  477.     };
  478.  
  479. struct Gadget draw_area_OK_gadg =
  480.     {
  481.      &draw_area_cancel_gadg,
  482.      32, 150, 50, 30,
  483.      GADGIMAGE|GADGHBOX, ENDGADGET|RELVERIFY, REQGADGET|BOOLGADGET,
  484.      (APTR)&draw_area_OK_img, NULL,
  485.      &draw_area_OK_txt, NULL,
  486.      NULL, 1, NULL
  487.     };
  488.  
  489. SHORT draw_area_border1_cords[] = {10,15, 238,15, 238,195, 10,195, 10,15};
  490. SHORT draw_area_border2_cords[] = {14,20, 234,20, 234,190, 14,190, 14,20};
  491.  
  492.  
  493. struct Border draw_area_border2 =
  494.     {
  495.      0, 0,
  496.      1, 0, JAM1,
  497.      5, &draw_area_border2_cords[0],
  498.      NULL
  499.     };
  500.  
  501. struct Border draw_area_border1 =
  502.     {
  503.      0, 0,
  504.      1, 0, JAM1,
  505.      5, &draw_area_border1_cords[0],
  506.      &draw_area_border2
  507.     };
  508.  
  509. struct IntuiText draw_area_txt[5] =
  510.  {
  511.    {1,0,JAM1,24,40,&Font,"Drawing Area Parameters",&draw_area_txt[1]},
  512.    {1, 0, JAM1, 24, 60, &Font, "Left Edge:", &draw_area_txt[2]},
  513.    {1, 0, JAM1, 24, 80, &Font, "Top Edge:", &draw_area_txt[3]},
  514.    {1, 0, JAM1, 24, 100, &Font, "Width:", &draw_area_txt[4]},
  515.    {1, 0, JAM1, 24, 120, &Font, "Height:", NULL}
  516.  };
  517.  
  518.  
  519. /**************************************************************************
  520.  
  521.  D R A W I N G   A R E A   E R R O R   #1   R E Q U E S T E R   I N F O
  522.  
  523. **************************************************************************/
  524.  
  525.  
  526. struct Requester da_err1_requester;
  527.  
  528. struct IntuiText da_err1_OK_txt =
  529.        {1, 0, JAM1, 8, 8, &Font, (UBYTE *)"OK !", NULL};
  530.  
  531. struct Image da_err1_OK_img = {0,0, 50,30, 3, NULL, 0, 0, NULL};
  532.  
  533. struct Gadget da_err1_OK_gadg =
  534.     {
  535.      NULL,
  536.      32, 150, 50, 30,
  537.      GADGIMAGE|GADGHBOX, ENDGADGET|RELVERIFY, REQGADGET|BOOLGADGET,
  538.      (APTR)&da_err1_OK_img, NULL,
  539.      &da_err1_OK_txt, NULL,
  540.      NULL, 1, NULL
  541.     };
  542.  
  543.  
  544. SHORT da_err1_border1_cords[] = {10,15, 600,15, 600,195, 10,195, 10,15};
  545. SHORT da_err1_border2_cords[] = {14,20, 596,20, 596,190, 14,190, 14,20};
  546.  
  547.  
  548. struct Border da_err1_border2 =
  549.     {
  550.      0, 0,
  551.      1, 0, JAM1,
  552.      5, &da_err1_border2_cords[0],
  553.      NULL
  554.     };
  555.  
  556. struct Border da_err1_border1 =
  557.     {
  558.      0, 0,
  559.      1, 0, JAM1,
  560.      5, &da_err1_border1_cords[0],
  561.      &da_err1_border2
  562.     };
  563.  
  564. struct IntuiText da_err1_txt[5] =
  565.  {
  566.    {1, 0, JAM1, 24, 40, &Font,
  567.     "The maximum width for drawing allowed by this program is 640!!",
  568.     &da_err1_txt[1]},
  569.    {1, 0, JAM1, 24, 60, &Font,
  570.     "When you are changing the drawing area parameters, please keep",
  571.     &da_err1_txt[2]},
  572.    {1, 0, JAM1, 24, 80, &Font,
  573.     "in mind that the numbers you specify in the Left Edge: and",
  574.     &da_err1_txt[3]},
  575.    {1, 0, JAM1, 24, 100, &Font,
  576.     "Width: fields can not have a sum larger than 640!!  These",
  577.     &da_err1_txt[4]},
  578.    {1, 0, JAM1, 24, 120, &Font,
  579.     "fields have been reset to their default values...",
  580.     NULL}
  581.  };
  582.  
  583.  
  584. /**************************************************************************
  585.  
  586.  D R A W I N G   A R E A   E R R O R   #2   R E Q U E S T E R   I N F O
  587.  
  588. **************************************************************************/
  589.  
  590.  
  591. struct Requester da_err2_requester;
  592.  
  593. struct IntuiText da_err2_OK_txt =
  594.        {1, 0, JAM1, 8, 8, &Font, (UBYTE *)"OK !", NULL};
  595.  
  596. struct Image da_err2_OK_img = {0,0, 50,30, 3, NULL, 0, 0, NULL};
  597.  
  598. struct Gadget da_err2_OK_gadg =
  599.     {
  600.      NULL,
  601.      32, 150, 50, 30,
  602.      GADGIMAGE|GADGHBOX, ENDGADGET|RELVERIFY, REQGADGET|BOOLGADGET,
  603.      (APTR)&da_err2_OK_img, NULL,
  604.      &da_err2_OK_txt, NULL,
  605.      NULL, 1, NULL
  606.     };
  607.  
  608.  
  609. SHORT da_err2_border1_cords[] = {10,15, 600,15, 600,195, 10,195, 10,15};
  610. SHORT da_err2_border2_cords[] = {14,20, 596,20, 596,190, 14,190, 14,20};
  611.  
  612.  
  613. struct Border da_err2_border2 =
  614.     {
  615.      0, 0,
  616.      1, 0, JAM1,
  617.      5, &da_err2_border2_cords[0],
  618.      NULL
  619.     };
  620.  
  621. struct Border da_err2_border1 =
  622.     {
  623.      0, 0,
  624.      1, 0, JAM1,
  625.      5, &da_err2_border1_cords[0],
  626.      &da_err2_border2
  627.     };
  628.  
  629. struct IntuiText da_err2_txt[5] =
  630.  {
  631.    {1, 0, JAM1, 24, 40, &Font,
  632.     "The maximum height for drawing allowed by this program is 400!!",
  633.     &da_err2_txt[1]},
  634.    {1, 0, JAM1, 24, 60, &Font,
  635.     "When you are changing the drawing area parameters, please keep",
  636.     &da_err2_txt[2]},
  637.    {1, 0, JAM1, 24, 80, &Font,
  638.     "in mind that the numbers you specify in the Top Edge: and",
  639.     &da_err2_txt[3]},
  640.    {1, 0, JAM1, 24, 100, &Font,
  641.     "Height: fields can not have a sum larger than 400!!  These",
  642.     &da_err2_txt[4]},
  643.    {1, 0, JAM1, 24, 120, &Font,
  644.     "fields have been reset to their default values...",
  645.     NULL}
  646.  };
  647.  
  648.  
  649. /**************************************************************************
  650.  
  651.                              Q U I T     I N F O
  652.  
  653. **************************************************************************/
  654.  
  655. struct IntuiText quit_OK_txt =
  656.        {0, 1, JAM2, 4, 4, &Font, (UBYTE *)"OK !", NULL};
  657.          
  658. struct IntuiText quit_cancel_txt =
  659.        {0, 1, JAM2, 4, 4, &Font, (UBYTE *)"CANCEL", NULL};
  660.  
  661. struct IntuiText quit_crnt_txt[5] =
  662.  {
  663.    {0, 1, JAM2, 5, 10, &Font,
  664.     "  Q U I T    C U R R E N T    J O B",
  665.     &quit_crnt_txt[1]},
  666.    {0, 1, JAM2, 65, 25, &Font,
  667.     "The Drawing Window will",
  668.     &quit_crnt_txt[2]},
  669.    {0, 1, JAM2, 5, 40, &Font,
  670.     "  be closed and, unless saved, the",
  671.     &quit_crnt_txt[3]},
  672.    {0, 1, JAM2, 5, 55, &Font,
  673.     "  current drawing will be lost !!!",
  674.     &quit_crnt_txt[4]},
  675.    {0, 1, JAM2, 85, 70, &Font,
  676.     "STILL WANT TO QUIT ?",
  677.     NULL}
  678.  };   
  679.  
  680. struct IntuiText quit_prog_txt[2] =
  681.  {
  682.    {0, 1, JAM2, 5, 10, &Font,
  683.     "    Q U I T    P R O G R A M",
  684.     &quit_prog_txt[1]},
  685.    {0, 1, JAM2, 5, 50, &Font,
  686.     "         ARE YOU SURE ?",
  687.     NULL}
  688.  };
  689.  
  690.  
  691. /**************************************************************************
  692.  
  693.             M A N D E L B R O T    F R A C T A L   V A L U E S  
  694.  
  695.                 R E Q U E S T E R   I N F O R M A T I O N
  696.  
  697. **************************************************************************/
  698.  
  699. struct Requester fv_requester;
  700.  
  701. struct IntuiText frac_val_OK_txt =
  702.        {1, 0, JAM1, 8, 8, &Font, (UBYTE *)"OK !", NULL};
  703. struct IntuiText frac_val_cancel_txt =
  704.        {1, 0, JAM1, 8, 8, &Font, (UBYTE *)"CANCEL", NULL};
  705.  
  706. struct Image frac_val_OK_img = {0,0, 50,30, 3, NULL, 0, 0, NULL};
  707. struct Image frac_val_cancel_img = {0,0, 70,30, 3, NULL, 0, 0, NULL};
  708.  
  709.  
  710. unsigned char fv_rn_StringBuffer[13] = "-2.000000";
  711. unsigned char fv_rn_UndoBuffer[13];
  712. unsigned char *fv_rn_ptr;
  713.  
  714. struct StringInfo fv_rn_StringInfo =
  715.   {
  716.    &fv_rn_StringBuffer[0],
  717.    &fv_rn_UndoBuffer[0],
  718.    0, 13, 0, 0, 0, 0, 0, 0, NULL, 0, NULL,
  719.   };
  720.  
  721. struct Image fv_rn_String_img = {0,0, 110,10, 3, NULL, 0, 0, NULL};
  722.  
  723. struct Gadget fv_rn_String_gadg =
  724.   {
  725.    NULL,
  726.    120, 60, 110, 10,
  727.    GADGHCOMP, RELVERIFY, REQGADGET|STRGADGET,
  728.    (APTR)&fv_rn_String_img, NULL,
  729.    NULL, NULL,
  730.    (APTR)&fv_rn_StringInfo,
  731.    6, NULL,
  732.   };
  733.  
  734.  
  735. unsigned char fv_rx_StringBuffer[13] = ".500000";
  736. unsigned char fv_rx_UndoBuffer[13];
  737. unsigned char *fv_rx_ptr;
  738.  
  739. struct StringInfo fv_rx_StringInfo =
  740.   {
  741.    &fv_rx_StringBuffer[0],
  742.    &fv_rx_UndoBuffer[0],
  743.    0, 13, 0, 0, 0, 0, 0, 0, NULL, 0, NULL,
  744.   };
  745.  
  746. struct Image fv_rx_String_img = {0,0, 110,10, 3, NULL, 0, 0, NULL};
  747.  
  748. struct Gadget fv_rx_String_gadg =
  749.   {
  750.    &fv_rn_String_gadg,
  751.    120, 80, 110, 10,
  752.    GADGHCOMP, RELVERIFY, REQGADGET|STRGADGET,
  753.    (APTR)&fv_rx_String_img, NULL,
  754.    NULL, NULL,
  755.    (APTR)&fv_rx_StringInfo,
  756.    5, NULL,
  757.   };
  758.  
  759. unsigned char fv_in_StringBuffer[13] = "-1.250000";
  760. unsigned char fv_in_UndoBuffer[13];
  761. unsigned char *fv_in_ptr;
  762.  
  763. struct StringInfo fv_in_StringInfo =
  764.   {
  765.    &fv_in_StringBuffer[0],
  766.    &fv_in_UndoBuffer[0],
  767.    0, 13, 0, 0, 0, 0, 0, 0, NULL, 0, NULL,
  768.   };
  769.  
  770. struct Image fv_in_String_img = {0,0, 110,10, 3, NULL, 0, 0, NULL};
  771.  
  772. struct Gadget fv_in_String_gadg =
  773.   {
  774.    &fv_rx_String_gadg,
  775.    120, 100, 110, 10,
  776.    GADGHCOMP, RELVERIFY, REQGADGET|STRGADGET,
  777.    (APTR)&fv_in_String_img, NULL,
  778.    NULL, NULL,
  779.    (APTR)&fv_in_StringInfo,
  780.    4, NULL,
  781.   };
  782.  
  783.  
  784. unsigned char fv_ix_StringBuffer[13] = "1.250000";
  785. unsigned char fv_ix_UndoBuffer[13];
  786. unsigned char *fv_ix_ptr;
  787.  
  788. struct StringInfo fv_ix_StringInfo =
  789.   {
  790.    &fv_ix_StringBuffer[0],
  791.    &fv_ix_UndoBuffer[0],
  792.    0, 13, 0, 0, 0, 0, 0, 0, NULL, 0, NULL,
  793.   };
  794.  
  795. struct Image fv_ix_String_img = {0,0, 110,10, 3, NULL, 0, 0, NULL};
  796.  
  797. struct Gadget fv_ix_String_gadg =
  798.   {
  799.    &fv_in_String_gadg,
  800.    120, 120, 110, 10,
  801.    GADGHCOMP, RELVERIFY, REQGADGET|STRGADGET,
  802.    (APTR)&fv_ix_String_img, NULL,
  803.    NULL, NULL,
  804.    (APTR)&fv_ix_StringInfo,
  805.    3, NULL,
  806.   };
  807.  
  808. struct Gadget frac_val_cancel_gadg =
  809.     {
  810.      &fv_ix_String_gadg,
  811.      120, 150, 70, 30,
  812.      GADGIMAGE|GADGHBOX, ENDGADGET|RELVERIFY, REQGADGET|BOOLGADGET,
  813.      (APTR)&frac_val_cancel_img, NULL,
  814.      &frac_val_cancel_txt, NULL,
  815.      NULL, 2, NULL
  816.     };
  817.  
  818. struct Gadget frac_val_OK_gadg =
  819.     {
  820.      &frac_val_cancel_gadg,
  821.      32, 150, 50, 30,
  822.      GADGIMAGE|GADGHBOX, ENDGADGET|RELVERIFY, REQGADGET|BOOLGADGET,
  823.      (APTR)&frac_val_OK_img, NULL,
  824.      &frac_val_OK_txt, NULL,
  825.      NULL, 1, NULL
  826.     };
  827.  
  828. SHORT frac_val_border1_cords[] = {10,15, 250,15, 250,195, 10,195, 10,15};
  829. SHORT frac_val_border2_cords[] = {14,20, 246,20, 246,190, 14,190, 14,20};
  830.  
  831.  
  832. struct Border frac_val_border2 =
  833.     {
  834.      0, 0,
  835.      1, 0, JAM1,
  836.      5, &frac_val_border2_cords[0],
  837.      NULL
  838.     };
  839.  
  840. struct Border frac_val_border1 =
  841.     {
  842.      0, 0,
  843.      1, 0, JAM1,
  844.      5, &frac_val_border1_cords[0],
  845.      &frac_val_border2
  846.     };
  847.  
  848. struct IntuiText frac_val_txt[6] =
  849.  {
  850.    {1, 0, JAM1, 24, 30, &Font,
  851.     "    Fractal  Values",
  852.     &frac_val_txt[1]},
  853.     {1, 0, JAM1, 24, 40, &Font,
  854.     "    Mandelbrot  Set",
  855.     &frac_val_txt[2]},
  856.    {1, 0, JAM1, 24, 60, &Font, 
  857.     "Real Min.:", 
  858.     &frac_val_txt[3]},
  859.    {1, 0, JAM1, 24, 80, &Font, 
  860.     "Real Max.:", 
  861.     &frac_val_txt[4]},
  862.    {1, 0, JAM1, 24, 100, &Font, 
  863.     "Imag. Min.:", 
  864.     &frac_val_txt[5]},
  865.    {1, 0, JAM1, 24, 120, &Font, 
  866.     "Imag. Max.:", 
  867.     NULL}
  868.  };
  869.  
  870.  
  871. /**************************************************************************
  872.  
  873.                 J U L I A    F R A C T A L    V A L U E S  
  874.  
  875.                 R E Q U E S T E R   I N F O R M A T I O N
  876.  
  877. **************************************************************************/
  878.  
  879. struct Requester jv_requester;
  880.  
  881. struct IntuiText jul_val_OK_txt =
  882.        {1, 0, JAM1, 8, 8, &Font, (UBYTE *)"OK !", NULL};
  883.    
  884. struct IntuiText jul_val_cancel_txt =
  885.        {1, 0, JAM1, 8, 8, &Font, (UBYTE *)"CANCEL", NULL};
  886.  
  887. struct Image jul_val_OK_img = {0,0, 50,30, 3, NULL, 0, 0, NULL};
  888. struct Image jul_val_cancel_img = {0,0, 70,30, 3, NULL, 0, 0, NULL};
  889.  
  890.  
  891. unsigned char jv_rn_StringBuffer[13] = "-1.500000";
  892. unsigned char jv_rn_UndoBuffer[13];
  893. unsigned char *jv_rn_ptr;
  894.  
  895. struct StringInfo jv_rn_StringInfo =
  896.   {
  897.    &jv_rn_StringBuffer[0],
  898.    &jv_rn_UndoBuffer[0],
  899.    0, 13, 0, 0, 0, 0, 0, 0, NULL, 0, NULL,
  900.   };
  901.  
  902. struct Image jv_rn_String_img = {0,0, 110,10, 3, NULL, 0, 0, NULL};
  903.  
  904. struct Gadget jv_rn_String_gadg =
  905.   {
  906.    NULL,
  907.    120, 60, 110, 10,
  908.    GADGHCOMP, RELVERIFY, REQGADGET|STRGADGET,
  909.    (APTR)&jv_rn_String_img, NULL,
  910.    NULL, NULL,
  911.    (APTR)&jv_rn_StringInfo,
  912.    8, NULL,
  913.   };
  914.  
  915.  
  916. unsigned char jv_rx_StringBuffer[13] = "1.500000";
  917. unsigned char jv_rx_UndoBuffer[13];
  918. unsigned char *jv_rx_ptr;
  919.  
  920. struct StringInfo jv_rx_StringInfo =
  921.   {
  922.    &jv_rx_StringBuffer[0],
  923.    &jv_rx_UndoBuffer[0],
  924.    0, 13, 0, 0, 0, 0, 0, 0, NULL, 0, NULL,
  925.   };
  926.  
  927. struct Image jv_rx_String_img = {0,0, 110,10, 3, NULL, 0, 0, NULL};
  928.  
  929. struct Gadget jv_rx_String_gadg =
  930.   {
  931.    &jv_rn_String_gadg,
  932.    120, 80, 110, 10,
  933.    GADGHCOMP, RELVERIFY, REQGADGET|STRGADGET,
  934.    (APTR)&jv_rx_String_img, NULL,
  935.    NULL, NULL,
  936.    (APTR)&jv_rx_StringInfo,
  937.    7, NULL,
  938.   };
  939.  
  940. unsigned char jv_in_StringBuffer[13] = "-1.500000";
  941. unsigned char jv_in_UndoBuffer[13];
  942. unsigned char *jv_in_ptr;
  943.  
  944. struct StringInfo jv_in_StringInfo =
  945.   {
  946.    &jv_in_StringBuffer[0],
  947.    &jv_in_UndoBuffer[0],
  948.    0, 13, 0, 0, 0, 0, 0, 0, NULL, 0, NULL,
  949.   };
  950.  
  951. struct Image jv_in_String_img = {0,0, 110,10, 3, NULL, 0, 0, NULL};
  952.  
  953. struct Gadget jv_in_String_gadg =
  954.   {
  955.    &jv_rx_String_gadg,
  956.    120, 100, 110, 10,
  957.    GADGHCOMP, RELVERIFY, REQGADGET|STRGADGET,
  958.    (APTR)&jv_in_String_img, NULL,
  959.    NULL, NULL,
  960.    (APTR)&jv_in_StringInfo,
  961.    6, NULL,
  962.   };
  963.  
  964.  
  965. unsigned char jv_ix_StringBuffer[13] = "1.500000";
  966. unsigned char jv_ix_UndoBuffer[13];
  967. unsigned char *jv_ix_ptr;
  968.  
  969. struct StringInfo jv_ix_StringInfo =
  970.   {
  971.    &jv_ix_StringBuffer[0],
  972.    &jv_ix_UndoBuffer[0],
  973.    0, 13, 0, 0, 0, 0, 0, 0, NULL, 0, NULL,
  974.   };
  975.  
  976. struct Image jv_ix_String_img = {0,0, 110,10, 3, NULL, 0, 0, NULL};
  977.  
  978. struct Gadget jv_ix_String_gadg =
  979.   {
  980.    &jv_in_String_gadg,
  981.    120, 120, 110, 10,
  982.    GADGHCOMP, RELVERIFY, REQGADGET|STRGADGET,
  983.    (APTR)&jv_ix_String_img, NULL,
  984.    NULL, NULL,
  985.    (APTR)&jv_ix_StringInfo,
  986.    5, NULL,
  987.   };
  988.  
  989.  
  990. unsigned char rl_pm_StringBuffer[13] = "-1.100000";
  991. unsigned char rl_pm_UndoBuffer[13];
  992. unsigned char *rl_pm_ptr;
  993.  
  994. struct StringInfo rl_pm_StringInfo =
  995.   {
  996.    &rl_pm_StringBuffer[0],
  997.    &rl_pm_UndoBuffer[0],
  998.    0, 13, 0, 0, 0, 0, 0, 0, NULL, 0, NULL,
  999.   };
  1000.  
  1001. struct Image rl_pm_String_img = {0,0, 110,10, 3, NULL, 0, 0, NULL};
  1002.  
  1003. struct Gadget rl_pm_String_gadg =
  1004.   {
  1005.    &jv_ix_String_gadg,
  1006.    140, 140, 110, 10,
  1007.    GADGHCOMP, RELVERIFY, REQGADGET|STRGADGET,
  1008.    (APTR)&rl_pm_String_img, NULL,
  1009.    NULL, NULL,
  1010.    (APTR)&rl_pm_StringInfo,
  1011.    4, NULL,
  1012.   };
  1013.  
  1014. unsigned char im_pm_StringBuffer[13] = ".6557000";
  1015. unsigned char im_pm_UndoBuffer[13];
  1016. unsigned char *im_pm_ptr;
  1017.  
  1018. struct StringInfo im_pm_StringInfo =
  1019.   {
  1020.    &im_pm_StringBuffer[0],
  1021.    &im_pm_UndoBuffer[0],
  1022.    0, 13, 0, 0, 0, 0, 0, 0, NULL, 0, NULL,
  1023.   };
  1024.  
  1025. struct Image im_pm_String_img = {0,0, 110,10, 3, NULL, 0, 0, NULL};
  1026.  
  1027. struct Gadget im_pm_String_gadg =
  1028.   {
  1029.    &rl_pm_String_gadg,
  1030.    140, 150, 110, 10,
  1031.    GADGHCOMP, RELVERIFY, REQGADGET|STRGADGET,
  1032.    (APTR)&im_pm_String_img, NULL,
  1033.    NULL, NULL,
  1034.    (APTR)&im_pm_StringInfo,
  1035.    3, NULL,
  1036.   };
  1037.  
  1038.  
  1039. struct Gadget jul_val_cancel_gadg =
  1040.     {
  1041.      &im_pm_String_gadg,
  1042.      120, 180, 70, 30,
  1043.      GADGIMAGE|GADGHBOX, ENDGADGET|RELVERIFY, REQGADGET|BOOLGADGET,
  1044.      (APTR)&jul_val_cancel_img, NULL,
  1045.      &jul_val_cancel_txt, NULL,
  1046.      NULL, 2, NULL
  1047.     };
  1048.  
  1049. struct Gadget jul_val_OK_gadg =
  1050.     {
  1051.      &jul_val_cancel_gadg,
  1052.      32, 180, 50, 30,
  1053.      GADGIMAGE|GADGHBOX, ENDGADGET|RELVERIFY, REQGADGET|BOOLGADGET,
  1054.      (APTR)&jul_val_OK_img, NULL,
  1055.      &jul_val_OK_txt, NULL,
  1056.      NULL, 1, NULL
  1057.     };
  1058.  
  1059. SHORT jul_val_border1_cords[] = {10,15, 270,15, 270,225, 10,225, 10,15};
  1060. SHORT jul_val_border2_cords[] = {14,20, 266,20, 266,220, 14,220, 14,20};
  1061.  
  1062.  
  1063. struct Border jul_val_border2 =
  1064.     {
  1065.      0, 0,
  1066.      1, 0, JAM1,
  1067.      5, &jul_val_border2_cords[0],
  1068.      NULL
  1069.     };
  1070.  
  1071. struct Border jul_val_border1 =
  1072.     {
  1073.      0, 0,
  1074.      1, 0, JAM1,
  1075.      5, &jul_val_border1_cords[0],
  1076.      &jul_val_border2
  1077.     };
  1078.  
  1079. struct IntuiText jul_val_txt[8] =
  1080.  {
  1081.    {1, 0, JAM1, 24, 30, &Font,
  1082.     "    Fractal  Values",
  1083.     &jul_val_txt[1]},
  1084.     {1, 0, JAM1, 24, 40, &Font,
  1085.     "      Julia   Set",
  1086.     &jul_val_txt[2]},
  1087.    {1, 0, JAM1, 24, 60, &Font, 
  1088.     "Real Min.:", 
  1089.     &jul_val_txt[3]},
  1090.    {1, 0, JAM1, 24, 80, &Font, 
  1091.     "Real Max.:", 
  1092.     &jul_val_txt[4]},
  1093.    {1, 0, JAM1, 24, 100, &Font, 
  1094.     "Imag. Min.:", 
  1095.     &jul_val_txt[5]},
  1096.    {1, 0, JAM1, 24, 120, &Font, 
  1097.     "Imag. Max.:", 
  1098.     &jul_val_txt[6]},
  1099.    {1, 0, JAM1, 24, 140, &Font,
  1100.     "Real Param.",
  1101.     &jul_val_txt[7]},
  1102.    {1, 0, JAM1, 24, 150, &Font,
  1103.     "Imag. Param.",
  1104.     NULL}
  1105.  };
  1106.  
  1107.  
  1108. /**************************************************************************
  1109.  
  1110.   C O L O R   A D J U S T E R   R E Q U E S T E R   I N F O R M A T I O N
  1111.  
  1112. **************************************************************************/
  1113.  
  1114. struct Image clr_adj_box_img = {0, 0, 70, 40, 3, NULL, 0, 0, NULL};
  1115.  
  1116. char clr_adj_box_str[4];
  1117.  
  1118. struct IntuiText clr_adj_box_txt = 
  1119.             {1, 0, JAM1, 12, 12, &Font, NULL, NULL};
  1120.  
  1121. struct Gadget clr_adj_box_gad =
  1122.   {
  1123.    NULL,
  1124.    115, 145, 70, 40,
  1125.    GADGHNONE|GADGIMAGE, RELVERIFY,
  1126.    BOOLGADGET|REQGADGET,
  1127.    (APTR)&clr_adj_box_img,
  1128.    NULL, &clr_adj_box_txt, 
  1129.    NULL, NULL,
  1130.    22, NULL
  1131.   };
  1132.  
  1133. /*************************** Slider Info ********************************/
  1134.  
  1135. struct IntuiText R_txt = 
  1136.             {1, 0, JAM1, -14, 2, &Font, (UBYTE *)"R", NULL};
  1137.       
  1138. struct IntuiText G_txt = 
  1139.             {1, 0, JAM1, -14, 2, &Font, (UBYTE *)"G", NULL};
  1140.       
  1141. struct IntuiText B_txt =  
  1142.             {1, 0, JAM1, -14, 2, &Font, (UBYTE *)"B", NULL};
  1143.       
  1144. struct Image    R_img, G_img, B_img;
  1145. struct PropInfo R_Propinfo, G_Propinfo, B_Propinfo;
  1146.  
  1147. struct Gadget B_gad = 
  1148.   {
  1149.    &clr_adj_box_gad, 
  1150.    40, 125, 140, 11, 
  1151.    GADGHCOMP, GADGIMMEDIATE|RELVERIFY,
  1152.    PROPGADGET|REQGADGET,
  1153.    (APTR)&B_img, NULL,
  1154.    &B_txt, NULL,
  1155.    (APTR)&B_Propinfo, 
  1156.    16, NULL 
  1157.   };
  1158.  
  1159. struct Gadget G_gad = 
  1160.   {
  1161.    &B_gad, 
  1162.    40, 110, 140, 11, 
  1163.    GADGHCOMP, GADGIMMEDIATE|RELVERIFY,
  1164.    PROPGADGET|REQGADGET,
  1165.    (APTR)&G_img, NULL,
  1166.    &G_txt, NULL,
  1167.    (APTR)&G_Propinfo, 
  1168.    17, NULL 
  1169.   };
  1170.  
  1171. struct Gadget R_gad = 
  1172.   {
  1173.    &G_gad, 
  1174.    40, 95, 140, 11, 
  1175.    GADGHCOMP, GADGIMMEDIATE|RELVERIFY,
  1176.    PROPGADGET|REQGADGET,
  1177.    (APTR)&R_img, NULL,
  1178.    &R_txt, NULL,
  1179.    (APTR)&R_Propinfo, 
  1180.    18, NULL 
  1181.   };
  1182.  
  1183. struct IntuiText clr_adj_cancel_txt = 
  1184.             {1, 0, JAM1, 13, 1, &Font, (UBYTE *)"Cancel", NULL};
  1185.       
  1186. struct IntuiText clr_adj_default_txt = 
  1187.             {1, 0, JAM1, 8, 1, &Font, (UBYTE *)"Default", NULL};
  1188.        
  1189. struct IntuiText clr_adj_OK_txt =  
  1190.             {1, 0, JAM1, 26, 1, &Font, (UBYTE *)"OK", NULL};
  1191.  
  1192. struct Image clr_adj_gad_img = {0, 0, 70, 10, 3, NULL, 0, 2, NULL};
  1193.    
  1194. struct Gadget clr_adj_default_gad = 
  1195.   {
  1196.    &R_gad, 
  1197.    30, 160, 70, 10, 
  1198.    GADGHBOX|GADGIMAGE, RELVERIFY,
  1199.    BOOLGADGET|REQGADGET, 
  1200.    (APTR)&clr_adj_gad_img, NULL,
  1201.    &clr_adj_default_txt, 
  1202.    NULL, NULL, 
  1203.    19, NULL 
  1204.   };
  1205.    
  1206. struct Gadget clr_adj_cancel_gad = 
  1207.   {
  1208.    &clr_adj_default_gad, 
  1209.    30, 145, 70, 10, 
  1210.    GADGHBOX|GADGIMAGE, RELVERIFY,
  1211.    BOOLGADGET|REQGADGET, 
  1212.    (APTR)&clr_adj_gad_img, NULL,
  1213.    &clr_adj_cancel_txt, 
  1214.    NULL, NULL, 
  1215.    20, NULL 
  1216.   };
  1217.  
  1218.   
  1219. struct Gadget clr_adj_OK_gad = 
  1220.   {
  1221.    &clr_adj_cancel_gad, 
  1222.    30, 175, 70, 10, 
  1223.    GADGHBOX|GADGIMAGE,
  1224.    RELVERIFY|ENDGADGET, 
  1225.    BOOLGADGET|REQGADGET, 
  1226.    (APTR)&clr_adj_gad_img, NULL,
  1227.    &clr_adj_OK_txt, 
  1228.    NULL, NULL, 
  1229.    21, NULL 
  1230.   };
  1231.   
  1232.  
  1233. /************************ Color Select ***********************************/
  1234.  
  1235. struct Image clr_adj_boxes[16] = 
  1236.   {
  1237.    {0, 0, 30, 15, 1, NULL, 0, 0, NULL},
  1238.    {0, 0, 30, 15, 1, NULL, 0, 1, NULL},
  1239.    {0, 0, 30, 15, 1, NULL, 0, 2, NULL},
  1240.    {0, 0, 30, 15, 1, NULL, 0, 3, NULL},
  1241.    {0, 0, 30, 15, 1, NULL, 0, 4, NULL},
  1242.    {0, 0, 30, 15, 1, NULL, 0, 5, NULL},
  1243.    {0, 0, 30, 15, 1, NULL, 0, 6, NULL},
  1244.    {0, 0, 30, 15, 1, NULL, 0, 7, NULL},
  1245.    {0, 0, 30, 15, 1, NULL, 0, 8, NULL},
  1246.    {0, 0, 30, 15, 1, NULL, 0, 9, NULL},
  1247.    {0, 0, 30, 15, 1, NULL, 0, 10, NULL},
  1248.    {0, 0, 30, 15, 1, NULL, 0, 11, NULL},
  1249.    {0, 0, 30, 15, 1, NULL, 0, 12, NULL},
  1250.    {0, 0, 30, 15, 1, NULL, 0, 13, NULL},
  1251.    {0, 0, 30, 15, 1, NULL, 0, 14, NULL},
  1252.    {0, 0, 30, 15, 1, NULL, 0, 15, NULL} 
  1253.   };
  1254.  
  1255. struct Gadget clr_adj_gads[16] = 
  1256.   {
  1257.    {&clr_adj_gads[1], 44, 22,  30, 15, GADGHBOX|GADGIMAGE, RELVERIFY,
  1258.      BOOLGADGET|REQGADGET, (APTR)&clr_adj_boxes[0], 
  1259.       NULL, NULL, NULL, NULL, 0, NULL},
  1260.    {&clr_adj_gads[2], 78, 22, 30, 15, GADGHBOX|GADGIMAGE, RELVERIFY,
  1261.      BOOLGADGET|REQGADGET, (APTR)&clr_adj_boxes[1], 
  1262.       NULL, NULL, NULL, NULL, 1, NULL},
  1263.    {&clr_adj_gads[3], 112, 22, 30, 15, GADGHBOX|GADGIMAGE, RELVERIFY,
  1264.      BOOLGADGET|REQGADGET, (APTR)&clr_adj_boxes[2], 
  1265.       NULL, NULL, NULL, NULL, 2, NULL},
  1266.    {&clr_adj_gads[4], 146, 22, 30, 15, GADGHBOX|GADGIMAGE, RELVERIFY,
  1267.      BOOLGADGET|REQGADGET, (APTR)&clr_adj_boxes[3], 
  1268.       NULL, NULL, NULL, NULL, 3, NULL},
  1269.    {&clr_adj_gads[5], 44, 39, 30, 15, GADGHBOX|GADGIMAGE, RELVERIFY,
  1270.      BOOLGADGET|REQGADGET, (APTR)&clr_adj_boxes[4], 
  1271.       NULL, NULL, NULL, NULL, 4, NULL},
  1272.    {&clr_adj_gads[6], 78, 39, 30, 15, GADGHBOX|GADGIMAGE, RELVERIFY,
  1273.      BOOLGADGET|REQGADGET, (APTR)&clr_adj_boxes[5], 
  1274.       NULL, NULL, NULL, NULL, 5, NULL},
  1275.    {&clr_adj_gads[7], 112, 39, 30, 15, GADGHBOX|GADGIMAGE, RELVERIFY,
  1276.      BOOLGADGET|REQGADGET, (APTR)&clr_adj_boxes[6], 
  1277.       NULL, NULL, NULL, NULL, 6, NULL},
  1278.    {&clr_adj_gads[8], 146, 39,  30, 15, GADGHBOX|GADGIMAGE, RELVERIFY,
  1279.      BOOLGADGET|REQGADGET, (APTR)&clr_adj_boxes[7], 
  1280.       NULL, NULL, NULL, NULL, 7, NULL},
  1281.    {&clr_adj_gads[9], 44, 56, 30, 15, GADGHBOX|GADGIMAGE, RELVERIFY,
  1282.      BOOLGADGET|REQGADGET, (APTR)&clr_adj_boxes[8], 
  1283.       NULL, NULL, NULL, NULL, 8, NULL},
  1284.    {&clr_adj_gads[10], 78, 56, 30, 15, GADGHBOX|GADGIMAGE, RELVERIFY,
  1285.      BOOLGADGET|REQGADGET, (APTR)&clr_adj_boxes[9], 
  1286.       NULL, NULL, NULL, NULL, 9, NULL},
  1287.    {&clr_adj_gads[11], 112, 56, 30, 15, GADGHBOX|GADGIMAGE, RELVERIFY,
  1288.      BOOLGADGET|REQGADGET, (APTR)&clr_adj_boxes[10], 
  1289.       NULL, NULL, NULL, NULL, 10, NULL},
  1290.    {&clr_adj_gads[12], 146, 56, 30, 15, GADGHBOX|GADGIMAGE, RELVERIFY,
  1291.      BOOLGADGET|REQGADGET, (APTR)&clr_adj_boxes[11], 
  1292.       NULL, NULL, NULL, NULL, 11, NULL},
  1293.    {&clr_adj_gads[13], 44, 73, 30, 15, GADGHBOX|GADGIMAGE, RELVERIFY,
  1294.      BOOLGADGET|REQGADGET, (APTR)&clr_adj_boxes[12], 
  1295.       NULL, NULL, NULL, NULL, 12, NULL},
  1296.    {&clr_adj_gads[14], 78, 73, 30, 15, GADGHBOX|GADGIMAGE, RELVERIFY,
  1297.      BOOLGADGET|REQGADGET, (APTR)&clr_adj_boxes[13], 
  1298.       NULL, NULL, NULL, NULL, 13, NULL},
  1299.    {&clr_adj_gads[15], 112, 73, 30, 15, GADGHBOX|GADGIMAGE, RELVERIFY,
  1300.      BOOLGADGET|REQGADGET, (APTR)&clr_adj_boxes[14], 
  1301.       NULL, NULL, NULL, NULL, 14, NULL},
  1302.    {&clr_adj_OK_gad, 146, 73, 30, 15, GADGHBOX|GADGIMAGE, RELVERIFY,
  1303.      BOOLGADGET | REQGADGET,  (APTR)&clr_adj_boxes[15], 
  1304.       NULL, NULL, NULL, NULL, 15, NULL} 
  1305.   };
  1306.  
  1307. struct IntuiText clr_adj_txt = 
  1308.             {1, 0, JAM1, 55, 10, &Font, (UBYTE *)"Color Modifier", NULL};
  1309.  
  1310. struct Requester clr_adj_requester;
  1311.  
  1312. SHORT clr_adj_border1_cords[] = {10,1, 205,1, 205,195, 10,195, 10,1};
  1313. SHORT clr_adj_border2_cords[] = {15,4, 200,4, 200,192, 15,192, 15,4};
  1314.  
  1315. struct Border clr_adj_border2 =
  1316.   {
  1317.    0, 0,
  1318.    1, 0, JAM1,
  1319.    5, &clr_adj_border2_cords[0], 
  1320.    NULL
  1321.   };
  1322.  
  1323. struct Border clr_adj_border1 =
  1324.   {
  1325.    0, 0,
  1326.    1, 0, JAM1,
  1327.    5, &clr_adj_border1_cords[0], 
  1328.    &clr_adj_border2
  1329.   };
  1330.   
  1331. /**************************************************************************
  1332.  
  1333.  G L O B A L   V A R I A B L E S   &   S T R U C T U R E S
  1334.  
  1335. **************************************************************************/ 
  1336.    
  1337. struct Values
  1338.   {
  1339.    double realmn;
  1340.    double realmx;
  1341.    double imagmn;
  1342.    double imagmx;
  1343.   };
  1344. struct Values vls;
  1345.  
  1346. BOOL DrawWindow = FALSE; 
  1347.  
  1348. int colr, xpos, ypos;
  1349. int maxcolr = 25;
  1350.  
  1351. long da_W = 640,
  1352.      da_H = 400,
  1353.      da_LE = 0,
  1354.      da_TE = 0;
  1355.  
  1356. int zn1, zn2, zn3, zn4, zn5, zn6, zn7, zn8, zn9, zn10, 
  1357.     zn11, zn12, zn13, zn14, zn15, zn16, zn17, zn18, zn19, zn20, 
  1358.     zn21, zn22, zn23, zn24, zn25, zn26, zn27, zn28, zn29, zn30,
  1359.     zn31, zn32, zn33, zn34, zn35, zn36, zn37, zn38, zn39, zn40,
  1360.     zn41, zn42, zn43, zn44, zn45, zn46, zn47, zn48, zn49, zn50,
  1361.     zn51, zn52, zn53, zn54, zn55, zn56, zn57, zn58, zn59, zn60,
  1362.     zn61, zn62, zn63, zn64, zn65, zn66, zn67, zn68, zn69, zn70,
  1363.     zn71, zn72, zn73, zn74, zn75, zn76, zn77, zn78, zn79, zn80,
  1364.     zn81, zn82, zn83, zn84, zn85, zn86, zn87, zn88, zn89, zn90,
  1365.     zn91, zn92, zn93, zn94, zn95, zn96, zn97, zn98, zn99, zn100,
  1366.     zn101, zn102, zn103, zn104, zn105, zn106, zn107, zn108, zn109, zn110, 
  1367.     zn111, zn112, zn113, zn114, zn115, zn116, zn117, zn118, zn119, zn120, 
  1368.     zn121, zn122, zn123, zn124, zn125, zn126, zn127, zn128, zn129, zn130,
  1369.     zn131, zn132, zn133, zn134, zn135, zn136, zn137, zn138, zn139, zn140,
  1370.     zn141, zn142, zn143, zn144, zn145, zn146, zn147, zn148, zn149, zn150,
  1371.     zn151, zn152, zn153, zn154, zn155, zn156, zn157, zn158, zn159, zn160,
  1372.     zn161, zn162, zn163, zn164, zn165, zn166, zn167, zn168, zn169, zn170,
  1373.     zn171, zn172, zn173, zn174, zn175, zn176, zn177, zn178, zn179, zn180,
  1374.     zn181, zn182, zn183, zn184, zn185, zn186, zn187, zn188, zn189, zn190,
  1375.     zn191, zn192, zn193, zn194, zn195, zn196, zn197, zn198, zn199, zn200;
  1376.         
  1377.  
  1378. int *Zones[200] = 
  1379.                  { &zn1, &zn2, &zn3, &zn4, &zn5, &zn6, 
  1380.                    &zn7, &zn8, &zn9, &zn10, 
  1381.                    &zn11, &zn12, &zn13, &zn14, &zn15,  
  1382.                    &zn16, &zn17, &zn18, &zn19, &zn20, 
  1383.                    &zn21, &zn22, &zn23, &zn24, &zn25,
  1384.                    &zn26, &zn27, &zn28, &zn29, &zn30,
  1385.                    &zn31, &zn32, &zn33, &zn34, &zn35,
  1386.                    &zn36, &zn37, &zn38, &zn39, &zn40,
  1387.                    &zn41, &zn42, &zn43, &zn44, &zn45,
  1388.                    &zn46, &zn47, &zn48, &zn49, &zn50,
  1389.                    &zn51, &zn52,   &zn53,  &zn54,  &zn55,
  1390.                    &zn56, &zn57,   &zn58,  &zn59,  &zn60,
  1391.                    &zn61, &zn62,   &zn63,  &zn64,  &zn65,
  1392.                    &zn66, &zn67,   &zn68,  &zn69,  &zn70,
  1393.                    &zn71, &zn72,   &zn73,  &zn74,  &zn75,
  1394.                    &zn76, &zn77,   &zn78,  &zn79,  &zn80,
  1395.                    &zn81, &zn82,   &zn83,  &zn84,  &zn85,
  1396.                    &zn86, &zn87,   &zn88,  &zn89,  &zn90,
  1397.                    &zn91, &zn92,   &zn93,  &zn94,  &zn95,
  1398.                    &zn96, &zn97,   &zn98,  &zn99,  &zn100,
  1399.                    &zn101, &zn102, &zn103, &zn104, &zn105,  
  1400.                    &zn106, &zn107, &zn108, &zn109, &zn110, 
  1401.                    &zn111, &zn112, &zn113, &zn114, &zn115,  
  1402.                    &zn116, &zn117, &zn118, &zn119, &zn120, 
  1403.                    &zn121, &zn122, &zn123, &zn124, &zn125,
  1404.                    &zn126, &zn127, &zn128, &zn129, &zn130,
  1405.                    &zn131, &zn132, &zn133, &zn134, &zn135,
  1406.                    &zn136, &zn137, &zn138, &zn139, &zn140,
  1407.                    &zn141, &zn142, &zn143, &zn144, &zn145,
  1408.                    &zn146, &zn147, &zn148, &zn149, &zn150,
  1409.                    &zn151, &zn152, &zn153, &zn154, &zn155,
  1410.                    &zn156, &zn157, &zn158, &zn159, &zn160,
  1411.                    &zn161, &zn162, &zn163, &zn164, &zn165,
  1412.                    &zn166, &zn167, &zn168, &zn169, &zn170,
  1413.                    &zn171, &zn172, &zn173, &zn174, &zn175,
  1414.                    &zn176, &zn177, &zn178, &zn179, &zn180,
  1415.                    &zn181, &zn182, &zn183, &zn184, &zn185,
  1416.                    &zn186, &zn187, &zn188, &zn189, &zn190,
  1417.                    &zn191, &zn192, &zn193, &zn194, &zn195,
  1418.                    &zn196, &zn197, &zn198, &zn199, &zn200 };
  1419.  
  1420.  
  1421. float jlrow, jlcolmn;
  1422. double row, colmn, dltax, dltay;
  1423.  
  1424. float realmin = -2.00,
  1425.       realmax = .550,
  1426.       imagmin = -1.2500,
  1427.       imagmax = 1.2500,
  1428.       jl_rlmin = -1.5,
  1429.       jl_rlmax = 1.5,
  1430.       jl_imgmin = -1.5,
  1431.       jl_imgmax = 1.5,
  1432.       rlparm = -.11,
  1433.       imparm = .6557;
  1434.  
  1435. float mandmax = 5.0;
  1436. float juliamax = 100.0;
  1437.  
  1438. SHORT op_code, FractalType;
  1439.  
  1440. /**************************************************************************
  1441.  
  1442.                                  M A I N
  1443.                  
  1444. **************************************************************************/
  1445.  
  1446.  
  1447. VOID main()
  1448.   {
  1449.    VOID Open_All(), Close_All();
  1450.    UBYTE pict[30];
  1451.    int run, Code, Menu, MenuItem, SubItem, MessageClass, i;
  1452.    BOOL result;
  1453.    Open_All();
  1454.    
  1455.    for(i = 0; i < 16; i++) colortable_2[i] = colortable[i];
  1456.  
  1457.    run = TRUE;
  1458.  
  1459.    while (run)
  1460.     {
  1461.      while ((message = (struct IntuiMessage *)
  1462.         GetMsg(FirstWindow->UserPort)))
  1463.       {
  1464.        MessageClass = message->Class;
  1465.        Code = message->Code;
  1466.        Menu = MENUNUM(Code);
  1467.        MenuItem = ITEMNUM(Code);
  1468.        SubItem = SUBNUM(Code);
  1469.        ReplyMsg(message);
  1470.  
  1471.        if(MessageClass == MENUPICK)
  1472.         {
  1473.          if((Code) != MENUNULL)
  1474.           {
  1475.            switch(Menu)
  1476.              {
  1477.               case 0 : switch(MenuItem)
  1478.                {
  1479.                 case 0: switch(SubItem)
  1480.                  {
  1481.                   case 0 : op_code = 0;
  1482.                            Info_requester(FirstWindow,op_code);
  1483.                            ModifyIDCMP(FirstWindow,NULL);
  1484.                            ModifyIDCMP(FirstWindow,GADGETUP | 
  1485.                            GADGETDOWN | MENUPICK | REQCLEAR);
  1486.                            break;
  1487.                   
  1488.                   case 1 : op_code = 1;
  1489.                            Info_requester(FirstWindow,op_code);
  1490.                            ModifyIDCMP(FirstWindow,NULL);
  1491.                            ModifyIDCMP(FirstWindow,GADGETUP | 
  1492.                            GADGETDOWN | MENUPICK | REQCLEAR);
  1493.                            break;
  1494.                            
  1495.                   case 2 : op_code = 2;
  1496.                            Info_requester(FirstWindow,op_code);
  1497.                            ModifyIDCMP(FirstWindow,NULL);
  1498.                            ModifyIDCMP(FirstWindow,GADGETUP | 
  1499.                            GADGETDOWN | MENUPICK | REQCLEAR);
  1500.                            break;
  1501.                            
  1502.                   case 3 : op_code = 3;
  1503.                            Info_requester(FirstWindow,op_code);
  1504.                            ModifyIDCMP(FirstWindow,NULL);
  1505.                            ModifyIDCMP(FirstWindow,GADGETUP | 
  1506.                            GADGETDOWN | MENUPICK | REQCLEAR);
  1507.                            break;
  1508.                   
  1509.                   case 4 : op_code = 4;
  1510.                            Info_requester(FirstWindow,op_code);
  1511.                            ModifyIDCMP(FirstWindow,NULL);
  1512.                            ModifyIDCMP(FirstWindow,GADGETUP | 
  1513.                            GADGETDOWN | MENUPICK | REQCLEAR);
  1514.                            break;
  1515.                            
  1516.                   case 5 : op_code = 5;
  1517.                            Info_requester(FirstWindow,op_code);
  1518.                            ModifyIDCMP(FirstWindow,NULL);
  1519.                            ModifyIDCMP(FirstWindow,GADGETUP | 
  1520.                            GADGETDOWN | MENUPICK | REQCLEAR);
  1521.                            break;
  1522.                   
  1523.                   case 6 : op_code = 6;
  1524.                            Info_requester(FirstWindow,op_code);
  1525.                            ModifyIDCMP(FirstWindow,NULL);
  1526.                            ModifyIDCMP(FirstWindow,GADGETUP | 
  1527.                            GADGETDOWN | MENUPICK | REQCLEAR);
  1528.                            break;
  1529.                   
  1530.                   case 7 : op_code = 7;
  1531.                            Info_requester(FirstWindow,op_code);
  1532.                            ModifyIDCMP(FirstWindow,NULL);
  1533.                            ModifyIDCMP(FirstWindow,GADGETUP | 
  1534.                            GADGETDOWN | MENUPICK | REQCLEAR);
  1535.                            break;
  1536.                            
  1537.                   case 8 : op_code = 8;
  1538.                            Info_requester(FirstWindow,op_code);
  1539.                            ModifyIDCMP(FirstWindow,NULL);
  1540.                            ModifyIDCMP(FirstWindow,GADGETUP | 
  1541.                            GADGETDOWN | MENUPICK | REQCLEAR);
  1542.                            break;
  1543.                            
  1544.                   case 9 : op_code = 9;
  1545.                            Info_requester(FirstWindow,op_code);
  1546.                            ModifyIDCMP(FirstWindow,NULL);
  1547.                            ModifyIDCMP(FirstWindow,GADGETUP | 
  1548.                            GADGETDOWN | MENUPICK | REQCLEAR);
  1549.                            break;
  1550.                   
  1551.                   case 10 : op_code = 10;
  1552.                            Info_requester(FirstWindow,op_code);
  1553.                            ModifyIDCMP(FirstWindow,NULL);
  1554.                            ModifyIDCMP(FirstWindow,GADGETUP | 
  1555.                            GADGETDOWN | MENUPICK | REQCLEAR);
  1556.                            break;
  1557.                  }                
  1558.                 break;
  1559.                
  1560.                 case 1:   strcpy(pict,"MAP.ILBM");
  1561.                           LoadIt(pict,1);   
  1562.                           break;
  1563.                
  1564.                 case 2: switch(SubItem)
  1565.                  {
  1566.                   case 0 : OffMenu(FirstWindow, 0x07E1);
  1567.                            OffMenu(FirstWindow, 0x07E2);
  1568.                            OffMenu(FirstWindow, 0x07E3);
  1569.                            OffMenu(FirstWindow, 0x07E4);
  1570.                            OffMenu(FirstWindow, 0xF800);
  1571.                            OffMenu(FirstWindow, 0xF820);
  1572.                            OffMenu(FirstWindow, 0xF840);
  1573.                            OffMenu(FirstWindow, 0xF860);
  1574.                            OffMenu(FirstWindow, 0xF880);
  1575.                            OffMenu(FirstWindow, 0xF8A0);
  1576.                            mand_draw_func(FirstWindow);
  1577.                            FractalType = MAND_DRAWING;
  1578.                            DisplayBeep(FirstScreen);
  1579.                            if(DrawWindow == TRUE)
  1580.                              {
  1581.                               OnMenu(FirstWindow, 0x07E2);
  1582.                               OffMenu(FirstWindow, 0xF802);
  1583.                               OffMenu(FirstWindow, 0xF822);
  1584.                              }
  1585.                            OnMenu(FirstWindow, 0xF860);
  1586.                            break;
  1587.                            
  1588.                   case 1 : OffMenu(FirstWindow, 0x07E1);
  1589.                            OffMenu(FirstWindow, 0x07E2);
  1590.                            OffMenu(FirstWindow, 0x07E3);
  1591.                            OffMenu(FirstWindow, 0x07E4);
  1592.                            OffMenu(FirstWindow, 0xF800);
  1593.                            OffMenu(FirstWindow, 0xF820);
  1594.                            OffMenu(FirstWindow, 0xF840);
  1595.                            OffMenu(FirstWindow, 0xF860);
  1596.                            OffMenu(FirstWindow, 0xF880);
  1597.                            OffMenu(FirstWindow, 0xF8A0);
  1598.                            julia_draw_func(FirstWindow);
  1599.                            FractalType = JULIA_DRAWING;
  1600.                            DisplayBeep(FirstScreen);
  1601.                            if(DrawWindow == TRUE)
  1602.                              {
  1603.                               OnMenu(FirstWindow, 0x07E2);
  1604.                               OffMenu(FirstWindow, 0xF802);
  1605.                               OffMenu(FirstWindow, 0xF822);
  1606.                              }
  1607.                            OnMenu(FirstWindow, 0xF860);
  1608.                            break;
  1609.                   }
  1610.                  break;
  1611.                   
  1612.                 case 3: switch(SubItem)
  1613.                  {
  1614.                   case 0 : op_code = 1;  
  1615.                            file_manager(FirstWindow,Pointer,op_code);
  1616.                            break;
  1617.                   case 1 : op_code = 2;
  1618.                            file_manager(FirstWindow,Pointer,op_code);
  1619.                            break;
  1620.                  }          
  1621.                  break;
  1622.                  
  1623.                 case 4: switch(SubItem)
  1624.                  {
  1625.                   case 0 : op_code = 3;  
  1626.                            file_manager(FirstWindow,Pointer,op_code);
  1627.                            break;
  1628.                   case 1 : op_code = 4;
  1629.                            file_manager(FirstWindow,Pointer,op_code);
  1630.                            break;
  1631.                  }          
  1632.                  break; 
  1633.             
  1634.                 case 5: switch(SubItem)
  1635.                  {
  1636.                   case 0 : op_code = 5;  
  1637.                            file_manager(FirstWindow,Pointer,op_code);
  1638.                            break;
  1639.                   case 1 : op_code = 6;
  1640.                            file_manager(FirstWindow,Pointer,op_code);
  1641.                            break;
  1642.                  }          
  1643.                  break;
  1644.                 
  1645.                 case 6: switch(SubItem)
  1646.                  {
  1647.                   case 0 : result = quit_crnt(FirstWindow);
  1648.                            if(result == TRUE)
  1649.                              { 
  1650.                                if(DrawWindow == TRUE)   
  1651.                                  {
  1652.                                    CloseWindow(NoBorder);
  1653.                                    DrawWindow = FALSE;
  1654.                                    OnMenu(FirstWindow, 0x07E1);
  1655.                                    OnMenu(FirstWindow, 0x07E3);
  1656.                                    OnMenu(FirstWindow, 0x07E4);
  1657.                                    OnMenu(FirstWindow, 0xF800);
  1658.                                    OnMenu(FirstWindow, 0xF802);
  1659.                                    OnMenu(FirstWindow, 0xF820);
  1660.                                    OnMenu(FirstWindow, 0xF822);
  1661.                                    OnMenu(FirstWindow, 0xF840);
  1662.                                    OnMenu(FirstWindow, 0xF880);
  1663.                                    OnMenu(FirstWindow, 0xF8A0);
  1664.                                  }
  1665.                              }
  1666.                            else
  1667.                              {
  1668.                                WindowToFront(NoBorder);
  1669.                              }          
  1670.                            break;
  1671.                   case 1 : result = quit_prog(FirstWindow);
  1672.                            if(result == TRUE)
  1673.                              {
  1674.                                run = 0;
  1675.                              }
  1676.                            else
  1677.                              {
  1678.                                WindowToFront(NoBorder);
  1679.                              }      
  1680.                            break;
  1681.                  }          
  1682.                  break;       
  1683.                } /* close off case 0 MenuItem Switch */
  1684.                break;
  1685.  
  1686.               case 1 : switch(MenuItem)
  1687.                            {
  1688.                             case 0 : draw_area(FirstWindow);
  1689.                                      break;
  1690.                            }
  1691.                        break;
  1692.  
  1693.               case 2 : switch(MenuItem)
  1694.                        {
  1695.                         case 0 : default_colors(FirstWindow);
  1696.                                  break;
  1697.              
  1698.                         case 1 : switch(SubItem)
  1699.                           {
  1700.                             case 0:  color_assign_zn1(FirstWindow);
  1701.                                      break;
  1702.                    
  1703.                             case 1:  color_assign_zn2(FirstWindow);
  1704.                                      break;
  1705.                            }              
  1706.                           break;
  1707.                                      
  1708.                         case 2 : color_adjust(FirstWindow);
  1709.                                  BeginRefresh(FirstWindow);
  1710.                                  EndRefresh(FirstWindow);
  1711.                                  break;        
  1712.                        }
  1713.                        break;
  1714.  
  1715.               case 3 : switch(MenuItem)
  1716.                        {
  1717.                          case 0 : maxcolr = 25;
  1718.                                   break;
  1719.                          case 1 : maxcolr = 50;
  1720.                                   break;
  1721.                          case 2 : maxcolr = 75;
  1722.                                   break;
  1723.                          case 3 : maxcolr = 100;
  1724.                                   break;
  1725.                          case 4 : maxcolr = 125;
  1726.                                   break;
  1727.                          case 5 : maxcolr = 175;
  1728.                                   break;
  1729.                          case 6 : maxcolr = 225;
  1730.                                   break;
  1731.                          case 7 : maxcolr = 275;
  1732.                                   break;         
  1733.                          case 8 : maxcolr = 325;
  1734.                                   break;
  1735.                          case 9 : maxcolr = 375;
  1736.                                   break;
  1737.                        }          
  1738.                        break;
  1739.                        
  1740.               case 4 : switch(MenuItem)
  1741.                            {
  1742.                             case 0 : fract_vals(FirstWindow);
  1743.                                      break;
  1744.                  
  1745.                             case 1 : julia_vals(FirstWindow);
  1746.                                      break;        
  1747.                            }
  1748.                        break;
  1749.  
  1750.              } /*** Menu Switch ***/
  1751.  
  1752.           } /*** MENUNULL if ***/
  1753.  
  1754.         } /*** MENUPICK if ***/
  1755.  
  1756.       } /*** While Message ***/
  1757.  
  1758.     } /*** While run loop ***/
  1759.     
  1760.     Close_All();
  1761.     
  1762.   } /***  Close Off Main ***/
  1763.  
  1764.  
  1765. /*************************************************************************
  1766.  
  1767.                     O P E N   A L L   F U N C T I O N 
  1768.  
  1769. *************************************************************************/ 
  1770.  
  1771. VOID Open_All()
  1772.   {
  1773.    VOID *OpenLibrary(),move_pointers_to_chipram();
  1774.    struct Window *OpenWindow();
  1775.    struct Screen *OpenScreen();
  1776.    UBYTE pictr[15];
  1777.    
  1778.    if (!(IntuitionBase = (struct IntuitionBase *)
  1779.          OpenLibrary("intuition.library", 0L)))
  1780.       {
  1781.        printf("Intuition Library not found!\n");
  1782.        Close_All();
  1783.        exit(FALSE);
  1784.       }
  1785.  
  1786.    if (!(FirstScreen = (struct Screen *)
  1787.          OpenScreen(&FirstNewScreen)))
  1788.       {
  1789.        printf("No screen page !\n");
  1790.        Close_All();
  1791.        exit(FALSE);
  1792.       }
  1793.  
  1794.    FirstNewWindow.Screen = FirstScreen;
  1795.  
  1796.    if (!(FirstWindow = (struct Window *)
  1797.          OpenWindow(&FirstNewWindow)))
  1798.       {
  1799.        printf("Window will not open !\n");
  1800.        Close_All();
  1801.        exit(FALSE);
  1802.       }
  1803.    
  1804.    GfxBase = (struct GfxBase *)
  1805.          OpenLibrary("graphics.library",0);
  1806.    if(GfxBase == NULL)
  1807.       {
  1808.        printf("Here graphics library...Here boy...\n");
  1809.        exit(FALSE);
  1810.       }
  1811.     
  1812.    MathBase = (struct MathBase *)
  1813.           OpenLibrary("mathieeedoubbas.library",0);
  1814.    if(MathBase == NULL)
  1815.       {
  1816.         printf("2 + 2 = 9 ???\n");
  1817.         printf("I don't know without my mathieeedoubbas.library\n");
  1818.         exit(FALSE);
  1819.       }
  1820.       
  1821. /************************ Load in the colors *****************************/
  1822.  
  1823.    vp = (struct ViewPort *)ViewPortAddress(FirstWindow);
  1824.    LoadRGB4(vp,&colortable,16);
  1825.  
  1826. /************************************************************************/
  1827.  
  1828. /************************ Show Title Page *******************************/
  1829.  
  1830.    strcpy(pictr,"title");
  1831.    LoadIt(pictr,2);
  1832.  
  1833. /***********************************************************************/
  1834.  
  1835.    move_pointers_to_chipram();
  1836.    do_Pointer(FirstWindow);   
  1837.    SetMenuStrip(FirstWindow, MAKMenu);
  1838.  
  1839.   } /*************** Close off Open_All Function ***************/
  1840.  
  1841.  
  1842. /************************************************************************
  1843.  
  1844.       Move the data for the pointers from the program into chip ram
  1845.        
  1846. *************************************************************************/
  1847.  
  1848. USHORT *MoveData(This_Sprite, Size)
  1849. USHORT *This_Sprite;
  1850. int Size;
  1851.   {
  1852.     USHORT *Chip_Sprite, *Save_it, *AllocMem();
  1853.     int counter;
  1854.  
  1855.     Chip_Sprite = AllocMem( (LONG) (Size * 2), MEMF_CHIP);
  1856.     if(Chip_Sprite == (struct USHORT * ) NULL)
  1857.        return(Chip_Sprite);
  1858.  
  1859.     Save_it = Chip_Sprite;
  1860.  
  1861.     for (counter = 0; counter < Size; counter++)
  1862.       *(Chip_Sprite++) = *(This_Sprite++);
  1863.  
  1864.     return(Save_it);
  1865.   }
  1866.  
  1867. /***********************************************************************/
  1868.  
  1869. VOID move_pointers_to_chipram()
  1870.   {
  1871.    Pointer = MoveData(Pointer_Sprite, POINTER_SIZE);      
  1872.    Cross = MoveData(Cross_Sprite, CROSS_SIZE);   
  1873.    Sleepy = MoveData(Sleepy_Sprite, SLEEPY_SIZE); 
  1874.   }
  1875.   
  1876. /**********************************************************************/
  1877.   
  1878.  
  1879. /************************************************************************
  1880.  
  1881.                    D O   P O I N T E R   F U N C T I O N
  1882.          
  1883. ************************************************************************/  
  1884.  
  1885. do_Pointer(FirstWindow)
  1886. struct Window *FirstWindow;
  1887.    {
  1888.      SHORT i;
  1889.      UWORD red, green, blue;
  1890.    
  1891.      for (i = 0; i < 3; i++)
  1892.        {
  1893.    red = (POINTER_col[i] & 0xf00) >> 8;
  1894.    green = (POINTER_col[i] & 0x0f0) >> 4;
  1895.    blue = (POINTER_col[i] & 0x00f);
  1896.    SetRGB4(vp,i + 17,red,green,blue);
  1897.        } 
  1898.      ClearPointer(FirstWindow);
  1899.      SetPointer(FirstWindow,Pointer,16,16,0,0);
  1900.    
  1901.      return(TRUE);
  1902.           
  1903.     } /**** Close off do_Pointer function *****/
  1904.  
  1905. /************************************************************************
  1906.  
  1907.                    D O   C R O S S   F U N C T I O N
  1908.          
  1909. ************************************************************************/
  1910.  
  1911. do_Cross(FirstWindow)
  1912. struct Window *FirstWindow;
  1913.    {
  1914.      SHORT i;
  1915.      UWORD red, green, blue;
  1916.    
  1917.      for (i = 0; i < 3; i++)
  1918.        {
  1919.    red = (CROSS_col[i] & 0xf00) >> 8;
  1920.    green = (CROSS_col[i] & 0x0f0) >> 4;
  1921.    blue = (CROSS_col[i] & 0x00f);
  1922.    SetRGB4(vp,i + 17,red,green,blue);
  1923.        } 
  1924.      ClearPointer(FirstWindow);
  1925.      SetPointer(FirstWindow,Cross,16,16,-8,-8);
  1926.    
  1927.      return(TRUE);
  1928.           
  1929.     } /**** Close off the do_Cross function ****/
  1930.  
  1931. /************************************************************************
  1932.  
  1933.                    D O   S L E E P Y   F U N C T I O N
  1934.          
  1935. ************************************************************************/
  1936.  
  1937. do_Sleepy(FirstWindow)
  1938. struct Window *FirstWindow;
  1939.    {
  1940.      SHORT i;
  1941.      UWORD red, green, blue;
  1942.    
  1943.      for (i = 0; i < 3; i++)
  1944.        {
  1945.    red = (SLEEPY_col[i] & 0xf00) >> 8;
  1946.    green = (SLEEPY_col[i] & 0x0f0) >> 4;
  1947.    blue = (SLEEPY_col[i] & 0x00f);
  1948.    SetRGB4(vp,i + 17,red,green,blue);
  1949.        } 
  1950.      ClearPointer(FirstWindow);
  1951.      SetPointer(FirstWindow,Sleepy,25,16,0,0);
  1952.    
  1953.      return(TRUE);
  1954.           
  1955.     } /**** Close off do_Sleepy function ****/
  1956.  
  1957. /***********************************************************************
  1958.  
  1959.           M A N D E L B R O T      D R A W      F U N C T I O N
  1960.          
  1961. ************************************************************************/  
  1962.   
  1963. mand_draw_func(FirstWindow)
  1964. struct Window *FirstWindow;
  1965.   {
  1966.    VOID calculate(), pick_color();
  1967.       
  1968.    int MessageClass, Code, Menu, MenuItem, SubItem;
  1969.    BOOL result;
  1970.      
  1971.    open_draw_window(FirstWindow);
  1972.  
  1973.    vls.realmn = realmin;
  1974.    vls.realmx = realmax;
  1975.    vls.imagmn = imagmin;
  1976.    vls.imagmx = imagmax;
  1977.    dltax = (vls.realmx - vls.realmn)/da_W;
  1978.    dltay = (vls.imagmx - vls.imagmn)/da_H;
  1979.  
  1980.    ypos = da_H;
  1981.  
  1982.    for(row = vls.imagmn; row <= (vls.imagmx + dltay/2); row += dltay)
  1983.     {
  1984.       xpos = 0;
  1985.  
  1986.       for(colmn=vls.realmn; colmn <= vls.realmx+dltax/2; colmn += dltax)
  1987.         {
  1988.          calculate();
  1989.          SetAPen(rp,1);
  1990.          if (xpos + 2 <= da_W)
  1991.            {
  1992.             WritePixel(rp,xpos,ypos);
  1993.             WritePixel(rp,xpos+1,ypos);
  1994.             WritePixel(rp,xpos+2,ypos);
  1995.            } 
  1996.          pick_color();
  1997.          WritePixel(rp,xpos,ypos);
  1998.          xpos++;
  1999.  
  2000.          while((message = (struct IntuiMessage *)
  2001.                 GetMsg(FirstWindow->UserPort)))
  2002.             {
  2003.              MessageClass = message->Class;
  2004.              Code = message->Code;
  2005.              Menu = MENUNUM(Code);
  2006.              MenuItem = ITEMNUM(Code);
  2007.              SubItem = SUBNUM(Code);
  2008.              ReplyMsg(message);
  2009.              if(MessageClass == MENUPICK)
  2010.                {
  2011.                 if((Code) != MENUNULL)
  2012.                   {
  2013.                    if(Menu == 0 && MenuItem == 6)
  2014.                      {
  2015.                       if(SubItem == 0)
  2016.                         {
  2017.                          result = quit_crnt(FirstWindow);
  2018.                          if(result == TRUE)
  2019.                            {
  2020.                             if(DrawWindow == TRUE)   
  2021.                               {
  2022.                                CloseWindow(NoBorder);
  2023.                                DrawWindow = FALSE;
  2024.                                OnMenu(FirstWindow, 0x07E1);
  2025.                                OnMenu(FirstWindow, 0x07E2);
  2026.                                OnMenu(FirstWindow, 0x07E3);
  2027.                                OnMenu(FirstWindow, 0x07E4);
  2028.                                OnMenu(FirstWindow, 0xF800);
  2029.                                OnMenu(FirstWindow, 0xF820);
  2030.                                OnMenu(FirstWindow, 0xF840);
  2031.                                OnMenu(FirstWindow, 0xF880);
  2032.                                OnMenu(FirstWindow, 0xF8A0);
  2033.                                return(TRUE);
  2034.                               }
  2035.                            } 
  2036.                          else
  2037.                            {
  2038.                              WindowToFront(NoBorder);
  2039.                            }       
  2040.                         } /*  If SubItem == 0  */        
  2041.                       if(SubItem == 1)
  2042.                         {  
  2043.                          result = quit_prog(FirstWindow);
  2044.                          if(result == TRUE)
  2045.                            {
  2046.                             Close_All();
  2047.                            }
  2048.                          else
  2049.                            {
  2050.                              WindowToFront(NoBorder);
  2051.                            }      
  2052.                         } /*  If SubItem == 1  */   
  2053.                      }
  2054.                   }
  2055.                }
  2056.             } /**** While loop ****/
  2057.             
  2058.         } /**** Close off column loop ****/
  2059.  
  2060.          ypos--;
  2061.  
  2062.       }   /**** Close off row loop ****/
  2063.       
  2064.     return(TRUE);
  2065.       
  2066.   } /**** Close off draw_func ****/
  2067.  
  2068.  
  2069. /***********************************************************************
  2070.  
  2071.                 J U L I A     D R A W      F U N C T I O N
  2072.          
  2073. ************************************************************************/  
  2074.   
  2075. julia_draw_func(FirstWindow)
  2076. struct Window *FirstWindow;
  2077.   {
  2078.    VOID julia_calc(), pick_color();
  2079.    USHORT xx, yy;
  2080.    int MessageClass, Code, Menu, MenuItem, SubItem;
  2081.    BOOL result;  
  2082.      
  2083.    open_draw_window(FirstWindow);
  2084.  
  2085.    for(jlrow = da_H; jlrow >= 0; jlrow--)
  2086.     {
  2087.  
  2088.       for(jlcolmn = 0; jlcolmn <= da_W; jlcolmn++)
  2089.         {
  2090.          julia_calc();
  2091.          xx = jlcolmn;
  2092.          yy = jlrow;
  2093.          SetAPen(rp,1);
  2094.          if (xx + 2 <= da_W)
  2095.            {
  2096.              WritePixel(rp,xx,yy);
  2097.              WritePixel(rp,xx+1,yy);
  2098.              WritePixel(rp,xx+2,yy);
  2099.            }  
  2100.          pick_color();
  2101.          WritePixel(rp,xx,yy);
  2102.  
  2103.          while((message = (struct IntuiMessage *)
  2104.                 GetMsg(FirstWindow->UserPort)))
  2105.             {
  2106.              MessageClass = message->Class;
  2107.              Code = message->Code;
  2108.              Menu = MENUNUM(Code);
  2109.              MenuItem = ITEMNUM(Code);
  2110.              SubItem = SUBNUM(Code);
  2111.              ReplyMsg(message);
  2112.              if(MessageClass == MENUPICK)
  2113.                {
  2114.                 if((Code) != MENUNULL)
  2115.                   {
  2116.                    if(Menu == 0 && MenuItem == 6)
  2117.                      {
  2118.                       if(SubItem == 0)
  2119.                         {
  2120.                          result = quit_crnt(FirstWindow);
  2121.                          if(result == TRUE)
  2122.                            {
  2123.                             if(DrawWindow == TRUE)   
  2124.                               {
  2125.                                CloseWindow(NoBorder);
  2126.                                DrawWindow = FALSE;
  2127.                                OnMenu(FirstWindow, 0x07E1);
  2128.                                OnMenu(FirstWindow, 0x07E2);
  2129.                                OnMenu(FirstWindow, 0x07E3);
  2130.                                OnMenu(FirstWindow, 0x07E4);
  2131.                                OnMenu(FirstWindow, 0xF800);
  2132.                                OnMenu(FirstWindow, 0xF820);
  2133.                                OnMenu(FirstWindow, 0xF840);
  2134.                                OnMenu(FirstWindow, 0xF880);
  2135.                                OnMenu(FirstWindow, 0xF8A0);
  2136.                                return(TRUE);
  2137.                               }
  2138.                            }  /*  If result == TRUE  */
  2139.                          else
  2140.                               {
  2141.                                 WindowToFront(NoBorder);
  2142.                               }    
  2143.                         }    /* If SubItem == 0 */     
  2144.                       if(SubItem == 1)
  2145.                         {  
  2146.                          result = quit_prog(FirstWindow);
  2147.                          if(result == TRUE)
  2148.                            {
  2149.                             Close_All();
  2150.                            }
  2151.                          else
  2152.                            {
  2153.                              WindowToFront(NoBorder);
  2154.                            }     
  2155.                         }  /*  If SubItem == 1 */      
  2156.                      }
  2157.                   }
  2158.                }
  2159.             } /**** While loop ****/
  2160.          
  2161.         } /* Close off julia column loop */
  2162.    
  2163.       }   /* Close off julia row loop    */
  2164.    
  2165.     return(TRUE);
  2166.       
  2167.   } /**** Close off julia_draw_func ****/
  2168.  
  2169.  
  2170. /**************************************************************************
  2171.  
  2172.            J U L I A     C A L C U L A T E    F U N C T I O N
  2173.  
  2174. **************************************************************************/
  2175.  
  2176. VOID julia_calc()
  2177.   {
  2178.    float r, xtemp, ytemp;
  2179.    double x, y, deltax, deltay;
  2180.    
  2181.    deltax = (jl_rlmax - jl_rlmin)/da_W;
  2182.    deltay = (jl_imgmax - jl_imgmin)/da_H;
  2183.    
  2184.    x = jl_rlmin + (jlcolmn * deltax);
  2185.    y = jl_imgmin + (jlrow * deltay);
  2186.    colr = 0;
  2187.    r = 0;
  2188.  
  2189.    while(r <= juliamax && colr < maxcolr)
  2190.      {
  2191.       xtemp = x*x - y*y + rlparm;
  2192.       ytemp = 2*x*y + imparm;
  2193.       colr++;
  2194.       r = x*x + y*y;
  2195.       x = xtemp;
  2196.       y = ytemp;
  2197.      }
  2198.      
  2199.   } /**** Close Off Julia Calculate Function ****/
  2200.  
  2201.  
  2202.  
  2203. /**************************************************************************
  2204.  
  2205.              O P E N   D R A W   W I N D O W   F U N C T I O N
  2206.  
  2207. **************************************************************************/
  2208.  
  2209. open_draw_window(FirstWindow)
  2210. struct Window *FirstWindow;
  2211.   {
  2212.    struct NewWindow noborder;
  2213.    noborder.LeftEdge = da_LE;
  2214.    noborder.TopEdge = da_TE;
  2215.    noborder.Width = da_W;
  2216.    noborder.Height = da_H;
  2217.    noborder.DetailPen = 0;
  2218.    noborder.BlockPen = 1;
  2219.    noborder.Flags = SMART_REFRESH|BORDERLESS;
  2220.    noborder.IDCMPFlags = NULL;
  2221.    noborder.FirstGadget = NULL;
  2222.    noborder.CheckMark = NULL;
  2223.    noborder.Title = NULL;
  2224.    noborder.Screen = FirstScreen;
  2225.    noborder.BitMap = NULL;
  2226.    noborder.MinWidth = 0;
  2227.    noborder.MinHeight = 0;
  2228.    noborder.MaxWidth = 0;
  2229.    noborder.MaxHeight = 0;
  2230.    noborder.Type = CUSTOMSCREEN;
  2231.  
  2232.    NoBorder = (struct Window *)OpenWindow(&noborder);
  2233.    if(NoBorder == NULL)
  2234.       {
  2235.        printf("Errors can occur anywhere! Why here??  Why me??");
  2236.        exit(FALSE);
  2237.       }
  2238.    rp = NoBorder->RPort;
  2239.    DrawWindow = TRUE;
  2240.    return(TRUE);
  2241.    
  2242.   }  /****  Close Off Open Draw Window Function  ****/
  2243.  
  2244.  
  2245. /**************************************************************************
  2246.  
  2247.                    C A L C U L A T E    F U N C T I O N
  2248.  
  2249. **************************************************************************/
  2250.  
  2251. VOID calculate()
  2252.   {
  2253.    float x,y,r,xtemp;
  2254.    x = 0;
  2255.    y = 0;
  2256.    r = 0;
  2257.    colr = 0;
  2258.  
  2259.    while(r <= mandmax && colr < maxcolr)
  2260.      {
  2261.       xtemp = x*x - y*y + colmn;
  2262.       y = 2*x*y + row;
  2263.       x = xtemp;
  2264.       colr++;
  2265.       r = x*x + y*y;
  2266.      }
  2267.       
  2268.    
  2269.   }  /****  Close Off Calculate Function  ****/
  2270.   
  2271.  
  2272. /*************************************************************************
  2273.   
  2274.                     P I C K   C O L O R   F U N C T I O N  
  2275.   
  2276. *************************************************************************/
  2277.  
  2278. VOID pick_color()
  2279.   {
  2280.    int zoneNum;
  2281.    
  2282.    if(colr <= 25)
  2283.      {
  2284.       zoneNum = (colr - 1);
  2285.       SetAPen(rp,*Zones[zoneNum]);
  2286.      }
  2287.    else
  2288.      {
  2289.        if(colr % 2 == 0)
  2290.          {
  2291.           zoneNum = ((colr / 2) + 12);
  2292.           SetAPen(rp,*Zones[zoneNum]);
  2293.          }
  2294.        else
  2295.          {
  2296.           zoneNum = (((colr - 1)/ 2) + 12);
  2297.           SetAPen(rp,*Zones[zoneNum]);
  2298.          }      
  2299.      }      
  2300.   
  2301.       
  2302.   }  /****  Close Off Pick Color Function  ****/
  2303.  
  2304.  
  2305. /**************************************************************************
  2306.  
  2307.                 D E F A U L T   C O L O R S   F U N C T I O N  
  2308.  
  2309. **************************************************************************/
  2310.  
  2311. default_colors(FirstWindow)
  2312. struct Window *FirstWindow;
  2313.   {
  2314.    VOID default_color_set();
  2315.    BOOL go;
  2316.    int class;
  2317.    go = TRUE;
  2318.  
  2319.  
  2320.    InitRequester(&dc_requester);
  2321.  
  2322.    dc_requester.LeftEdge = 230;
  2323.    dc_requester.TopEdge = 10;
  2324.    dc_requester.Width = 230;
  2325.    dc_requester.Height = 300;
  2326.    dc_requester.ReqGadget = &dc_OK_gadg;
  2327.    dc_requester.ReqText = &dctxt[0];
  2328.    dc_requester.BackFill = 2;
  2329.    dc_requester.Flags = NULL;
  2330.    dc_requester.ReqBorder = &default_border1;
  2331.  
  2332.    if(DrawWindow == TRUE)
  2333.      {
  2334.        WindowToFront(FirstWindow);
  2335.      } 
  2336.  
  2337.    Request(&dc_requester,FirstWindow);
  2338.  
  2339.    while(go)
  2340.     {
  2341.      Wait(1 << FirstWindow->UserPort->mp_SigBit);
  2342.      while(message = (struct IntuiMessage *)
  2343.         GetMsg(FirstWindow->UserPort))
  2344.        {
  2345.         class = message->Class;
  2346.         ReplyMsg(message);
  2347.         if(class == REQCLEAR)
  2348.            go = FALSE;
  2349.  
  2350.        } /**** While Message ****/
  2351.  
  2352.     } /**** While go ****/
  2353.  
  2354.    if(DrawWindow == TRUE)
  2355.      {
  2356.        WindowToFront(NoBorder);
  2357.      } 
  2358.  
  2359.    return(TRUE);
  2360.  
  2361.   } /**** Close Off default_color Function ****/
  2362.  
  2363.  
  2364.  
  2365. /**************************************************************************
  2366.  
  2367.           D R A W   A R E A   P A R A M E T E R S   F U N C T I O N  
  2368.  
  2369. **************************************************************************/
  2370.  
  2371. draw_area(FirstWindow)
  2372. struct Window *FirstWindow;
  2373.   {
  2374.    BOOL go;
  2375.    int class,item;
  2376.  
  2377.    extern long da_LE, da_TE, da_W, da_H;
  2378.    
  2379.    da_LE_ptr = &da_LE_StringInfo;
  2380.    da_TE_ptr = &da_TE_StringInfo;
  2381.    da_W_ptr = &da_W_StringInfo;
  2382.    da_H_ptr = &da_H_StringInfo;
  2383.  
  2384.    go = TRUE;
  2385.  
  2386.  
  2387.    InitRequester(&da_requester);
  2388.  
  2389.    da_requester.LeftEdge = 200;
  2390.    da_requester.TopEdge = 10;
  2391.    da_requester.Width = 250;
  2392.    da_requester.Height = 210;
  2393.    da_requester.ReqGadget = &draw_area_OK_gadg;
  2394.    da_requester.ReqText = &draw_area_txt[0];
  2395.    da_requester.BackFill = 2;
  2396.    da_requester.Flags = NULL;
  2397.    da_requester.ReqBorder = &draw_area_border1;
  2398.  
  2399.    if(DrawWindow == TRUE)
  2400.      {
  2401.        WindowToFront(FirstWindow);
  2402.      } 
  2403.  
  2404.    Request(&da_requester,FirstWindow);
  2405.  
  2406.    while(go)
  2407.     {
  2408.      Wait(1 << FirstWindow->UserPort->mp_SigBit);
  2409.      while(message = (struct IntuiMessage *)
  2410.         GetMsg(FirstWindow->UserPort))
  2411.        {
  2412.         class = message->Class;
  2413.         ReplyMsg(message);
  2414.  
  2415.         da_LE = da_LE_ptr->LongInt;
  2416.         da_TE = da_TE_ptr->LongInt;
  2417.         da_W = da_W_ptr->LongInt;
  2418.         da_H = da_H_ptr->LongInt;
  2419.  
  2420.         if(class == REQCLEAR)
  2421.            go = FALSE;
  2422.         if(class == GADGETUP)
  2423.            item = ((struct Gadget *) message->IAddress)->GadgetID;
  2424.         switch(item)
  2425.             {
  2426.              case 3:  if(da_LE < 0 || da_LE > 500)
  2427.                        {
  2428.                         DisplayBeep(FirstScreen);
  2429.                         strcpy(da_LE_StringBuffer, "0");
  2430.                         da_LE_ptr->LongInt = 0;
  2431.                        }
  2432.                       break;
  2433.  
  2434.              case 4:  if(da_TE < 10 || da_TE > 350)
  2435.                        {
  2436.                         DisplayBeep(FirstScreen);
  2437.                         strcpy(da_TE_StringBuffer, "10");
  2438.                         da_LE_ptr->LongInt = 10;
  2439.                        }
  2440.                       break;
  2441.  
  2442.              case 5:  if(da_W < 0 || da_W > 640)
  2443.                        {
  2444.                         DisplayBeep(FirstScreen);
  2445.                         strcpy(da_W_StringBuffer, "640");
  2446.                         da_W_ptr->LongInt = 640;
  2447.                        }
  2448.                       break;
  2449.  
  2450.              case 6:  if(da_H < 0 || da_H > 390)
  2451.                        {
  2452.                         DisplayBeep(FirstScreen);
  2453.                         strcpy(da_H_StringBuffer, "390");
  2454.                         da_H_ptr->LongInt = 390;
  2455.                        }
  2456.                       break;
  2457.  
  2458.             } /*** item switch ***/
  2459.  
  2460.        } /*** While message ***/
  2461.  
  2462.     } /**** While go ****/
  2463.  
  2464. /*************** Error Check #1 ***************/
  2465.  
  2466.    if((da_W + da_LE) > 640)
  2467.     {
  2468.      da_err1(FirstWindow);
  2469.      strcpy(da_W_StringBuffer, "640");
  2470.      strcpy(da_LE_StringBuffer, "0");
  2471.      da_W_ptr->LongInt = 640;
  2472.      da_LE_ptr->LongInt = 0;
  2473.     }
  2474.  
  2475. /*************** Error Check #2 ***************/
  2476.  
  2477.    if((da_H + da_TE) > 400)
  2478.     {
  2479.      da_err2(FirstWindow);
  2480.      strcpy(da_H_StringBuffer, "390");
  2481.      strcpy(da_TE_StringBuffer, "10");
  2482.      da_H_ptr->LongInt = 390;
  2483.      da_TE_ptr->LongInt = 10;
  2484.     }
  2485.  
  2486.    if(DrawWindow == TRUE)
  2487.      {
  2488.        WindowToFront(NoBorder);
  2489.      } 
  2490.  
  2491.    return(TRUE);
  2492.  
  2493.   } /**** Close Off draw_area Function ****/
  2494.  
  2495.  
  2496. /**************************************************************************
  2497.  
  2498.          D R A W I N G   A R E A   E R R O R   #1   F U N C T I O N   
  2499.  
  2500. **************************************************************************/
  2501.  
  2502.  
  2503. da_err1(FirstWindow)
  2504. struct Window *FirstWindow;
  2505.   {
  2506.    BOOL go;
  2507.    int class;
  2508.    go = TRUE;
  2509.  
  2510.    InitRequester(&da_err1_requester);
  2511.  
  2512.    da_err1_requester.LeftEdge = 0;
  2513.    da_err1_requester.TopEdge = 10;
  2514.    da_err1_requester.Width = 640;
  2515.    da_err1_requester.Height = 210;
  2516.    da_err1_requester.ReqGadget = &da_err1_OK_gadg;
  2517.    da_err1_requester.ReqText = &da_err1_txt[0];
  2518.    da_err1_requester.BackFill = 2;
  2519.    da_err1_requester.Flags = NULL;
  2520.    da_err1_requester.ReqBorder = &da_err1_border1;
  2521.  
  2522.    if(DrawWindow == TRUE)
  2523.      {
  2524.        WindowToFront(FirstWindow);
  2525.      } 
  2526.  
  2527.    Request(&da_err1_requester,FirstWindow);
  2528.  
  2529.    while(go)
  2530.     {
  2531.      Wait(1 << FirstWindow->UserPort->mp_SigBit);
  2532.      while(message = (struct IntuiMessage *)
  2533.         GetMsg(FirstWindow->UserPort))
  2534.        {
  2535.         class = message->Class;
  2536.         ReplyMsg(message);
  2537.         if(class == REQCLEAR)
  2538.            go = FALSE;
  2539.  
  2540.        } /*** While message ***/
  2541.  
  2542.     } /**** While go ****/
  2543.  
  2544.    if(DrawWindow == TRUE)
  2545.      {
  2546.        WindowToFront(NoBorder);
  2547.      } 
  2548.  
  2549.    return(TRUE);
  2550.  
  2551.   } /**** Close Off da_err1 Function ****/
  2552.  
  2553.  
  2554. /**************************************************************************
  2555.  
  2556.          D R A W I N G   A R E A   E R R O R   #2   F U N C T I O N
  2557.  
  2558. **************************************************************************/
  2559.  
  2560.  
  2561. da_err2(FirstWindow)
  2562. struct Window *FirstWindow;
  2563.   {
  2564.    BOOL go;
  2565.    int class;
  2566.    go = TRUE;
  2567.  
  2568.    InitRequester(&da_err2_requester);
  2569.  
  2570.    da_err2_requester.LeftEdge = 0;
  2571.    da_err2_requester.TopEdge = 10;
  2572.    da_err2_requester.Width = 640;
  2573.    da_err2_requester.Height = 210;
  2574.    da_err2_requester.ReqGadget = &da_err2_OK_gadg;
  2575.    da_err2_requester.ReqText = &da_err2_txt[0];
  2576.    da_err2_requester.BackFill = 2;
  2577.    da_err2_requester.Flags = NULL;
  2578.    da_err2_requester.ReqBorder = &da_err2_border1;
  2579.  
  2580.    if(DrawWindow == TRUE)
  2581.      {
  2582.        WindowToFront(FirstWindow);
  2583.      } 
  2584.  
  2585.    Request(&da_err2_requester,FirstWindow);
  2586.  
  2587.    while(go)
  2588.     {
  2589.      Wait(1 << FirstWindow->UserPort->mp_SigBit);
  2590.      while(message = (struct IntuiMessage *)
  2591.         GetMsg(FirstWindow->UserPort))
  2592.        {
  2593.         class = message->Class;
  2594.         ReplyMsg(message);
  2595.         if(class == REQCLEAR)
  2596.            go = FALSE;
  2597.  
  2598.        } /*** While message ***/
  2599.  
  2600.     } /**** While go ****/
  2601.  
  2602.    if(DrawWindow == TRUE)
  2603.      {
  2604.        WindowToFront(NoBorder);
  2605.      } 
  2606.  
  2607.    return(TRUE);
  2608.  
  2609.   } /**** Close Off da_err2 function ****/
  2610.  
  2611. /**************************************************************************
  2612.  
  2613.                  Q U I T   P R O G R A M   F U N C T I O N
  2614.  
  2615. **************************************************************************/
  2616.  
  2617. quit_prog(FirstWindow)
  2618. struct Window *FirstWindow;
  2619.   {
  2620.    if(AutoRequest(FirstWindow,&quit_prog_txt[0],&quit_OK_txt,
  2621.        &quit_cancel_txt,NULL,NULL,300,130))
  2622.      return(TRUE);
  2623.    else
  2624.      return(FALSE);
  2625.    
  2626.   } /**** Close Off Quit Program Function ****/
  2627.  
  2628.  
  2629. /**************************************************************************
  2630.  
  2631.              Q U I T   C U R R E N T   J O B   F U N C T I O N
  2632.  
  2633. **************************************************************************/
  2634.  
  2635. quit_crnt(FirstWindow)
  2636. struct Window *FirstWindow;
  2637.   {
  2638.    if(AutoRequest(FirstWindow,&quit_crnt_txt[0],&quit_OK_txt,
  2639.                &quit_cancel_txt,NULL,NULL,340,130))
  2640.      return(TRUE);
  2641.    else
  2642.      return(FALSE);
  2643.  
  2644.   } /**** Close Off Quit Current Job Function ****/
  2645.  
  2646.  
  2647. /**************************************************************************
  2648.  
  2649.                        M A N D E L B R O T   S E T
  2650.  
  2651.                F R A C T A L   V A L U E S   F U N C T I O N
  2652.  
  2653. **************************************************************************/
  2654.  
  2655. fract_vals(FirstWindow)
  2656. struct Window *FirstWindow;
  2657.   {
  2658.    BOOL go;
  2659.    int class,item;
  2660.  
  2661.    float rlmn, rlmx, immn, immx;
  2662.       
  2663.    fv_rn_ptr = &fv_rn_StringBuffer[0]; 
  2664.    fv_rx_ptr = &fv_rx_StringBuffer[0]; 
  2665.    fv_in_ptr = &fv_in_StringBuffer[0]; 
  2666.    fv_ix_ptr = &fv_ix_StringBuffer[0];  
  2667.  
  2668.    go = TRUE;
  2669.  
  2670.  
  2671.    InitRequester(&fv_requester);
  2672.  
  2673.    fv_requester.LeftEdge = 200;
  2674.    fv_requester.TopEdge = 10;
  2675.    fv_requester.Width = 260;
  2676.    fv_requester.Height = 210;
  2677.    fv_requester.ReqGadget = &frac_val_OK_gadg;
  2678.    fv_requester.ReqText = &frac_val_txt[0];
  2679.    fv_requester.BackFill = 2;
  2680.    fv_requester.Flags = NULL;
  2681.    fv_requester.ReqBorder = &frac_val_border1;
  2682.  
  2683.    if(DrawWindow == TRUE)
  2684.      {
  2685.        WindowToFront(FirstWindow);
  2686.      } 
  2687.  
  2688.    Request(&fv_requester, FirstWindow);
  2689.  
  2690.    while(go)
  2691.     {
  2692.      Wait(1 << FirstWindow->UserPort->mp_SigBit);
  2693.      while(message = (struct IntuiMessage *)
  2694.         GetMsg(FirstWindow->UserPort))
  2695.        {
  2696.         class = message->Class;
  2697.         ReplyMsg(message);
  2698.  
  2699.         rlmn = atof(fv_rn_ptr);
  2700.         rlmx = atof(fv_rx_ptr);  
  2701.         immn = atof(fv_in_ptr);
  2702.         immx = atof(fv_ix_ptr);
  2703.  
  2704.         if(class == REQCLEAR)
  2705.            go = FALSE;
  2706.         if(class == GADGETUP)
  2707.            item = ((struct Gadget *) message->IAddress)->GadgetID;
  2708.         switch(item)
  2709.             {
  2710.              case 3:  if(immx < -5.0 || immx > 5.0)
  2711.                        {
  2712.                         DisplayBeep(FirstScreen);
  2713.                         strcpy(fv_ix_StringBuffer, "0");
  2714.                        }
  2715.              
  2716.                       if(immx <= 5.0 && immx >= -5.0)
  2717.                        {
  2718.                         imagmax = immx;
  2719.                        }
  2720.           
  2721.                       break;
  2722.  
  2723.              case 4:  if(immn < -5.0 || immn > 5.0)
  2724.                        {
  2725.                         DisplayBeep(FirstScreen);
  2726.                         strcpy(fv_in_StringBuffer, "0");
  2727.                        }
  2728.              
  2729.                       if(immn <= 5.0 && immn >= -5.0)
  2730.                        {
  2731.                         imagmin = immn;
  2732.                        }
  2733.              
  2734.                       break;
  2735.  
  2736.              case 5:  if(rlmx < -5.0 || rlmx > 5.0)
  2737.                        {
  2738.                         DisplayBeep(FirstScreen);
  2739.                         strcpy(fv_rx_StringBuffer, "0");
  2740.                        }
  2741.              
  2742.                       if(rlmx <= 5.0 && rlmx >= -5.0)
  2743.                        {
  2744.                         realmax = rlmx;
  2745.                        }
  2746.              
  2747.                       break;
  2748.  
  2749.              case 6:  if(rlmn < -5.0 || rlmn > 5.0)
  2750.                        {
  2751.                         DisplayBeep(FirstScreen);
  2752.                         strcpy(fv_rn_StringBuffer, "0");
  2753.                        }
  2754.              
  2755.                      if(rlmn <= 5.0 && rlmn >= -5.0)
  2756.                       {
  2757.                        realmin = rlmn;
  2758.                       }
  2759.                 
  2760.                      break;
  2761.  
  2762.             } /*** item switch ***/
  2763.  
  2764.        } /*** While message ***/
  2765.  
  2766.     } /**** While go ****/
  2767.  
  2768.    if(DrawWindow == TRUE)
  2769.      {
  2770.        WindowToFront(NoBorder);
  2771.      } 
  2772.  
  2773.    return(TRUE);
  2774.  
  2775.   } /**** Close Off Fractal Values Function ****/
  2776.  
  2777.  
  2778. /**************************************************************************
  2779.  
  2780.                           J U L I A   S E T
  2781.  
  2782.                F R A C T A L   V A L U E S   F U N C T I O N
  2783.  
  2784. **************************************************************************/
  2785.  
  2786. julia_vals(FirstWindow)
  2787. struct Window *FirstWindow;
  2788.   {
  2789.    BOOL go;
  2790.    int class,item;
  2791.  
  2792.    float jl_rlmn, jl_rlmx, jl_immn, jl_immx, rlpm, impm;
  2793.    
  2794.    rl_pm_ptr = &rl_pm_StringBuffer[0];
  2795.    im_pm_ptr = &im_pm_StringBuffer[0];   
  2796.    jv_rn_ptr = &jv_rn_StringBuffer[0]; 
  2797.    jv_rx_ptr = &jv_rx_StringBuffer[0]; 
  2798.    jv_in_ptr = &jv_in_StringBuffer[0]; 
  2799.    jv_ix_ptr = &jv_ix_StringBuffer[0];  
  2800.  
  2801.    go = TRUE;
  2802.  
  2803.    InitRequester(&jv_requester);
  2804.  
  2805.    jv_requester.LeftEdge = 200;
  2806.    jv_requester.TopEdge = 10;
  2807.    jv_requester.Width = 290;
  2808.    jv_requester.Height = 245;
  2809.    jv_requester.ReqGadget = &jul_val_OK_gadg;
  2810.    jv_requester.ReqText = &jul_val_txt[0];
  2811.    jv_requester.BackFill = 2;
  2812.    jv_requester.Flags = NULL;
  2813.    jv_requester.ReqBorder = &jul_val_border1;
  2814.  
  2815.    if(DrawWindow == TRUE)
  2816.      {
  2817.        WindowToFront(FirstWindow);
  2818.      } 
  2819.  
  2820.    Request(&jv_requester, FirstWindow);
  2821.  
  2822.    while(go)
  2823.     {
  2824.      Wait(1 << FirstWindow->UserPort->mp_SigBit);
  2825.      while(message = (struct IntuiMessage *)
  2826.         GetMsg(FirstWindow->UserPort))
  2827.        {
  2828.         class = message->Class;
  2829.         ReplyMsg(message);
  2830.  
  2831.         rlpm = atof(rl_pm_ptr);
  2832.         impm = atof(im_pm_ptr);
  2833.         jl_rlmn = atof(jv_rn_ptr);
  2834.         jl_rlmx = atof(jv_rx_ptr);  
  2835.         jl_immn = atof(jv_in_ptr);
  2836.         jl_immx = atof(jv_ix_ptr);
  2837.  
  2838.         if(class == REQCLEAR)
  2839.            go = FALSE;
  2840.         if(class == GADGETUP)
  2841.            item = ((struct Gadget *) message->IAddress)->GadgetID;
  2842.         switch(item)
  2843.             { 
  2844.          case 3:  if(impm < -5.0 || impm > 5.0)
  2845.                        {
  2846.                         DisplayBeep(FirstScreen);
  2847.                         strcpy(im_pm_StringBuffer, "0");
  2848.                        }
  2849.              
  2850.                       if(impm <= 5.0 && impm >= -5.0)
  2851.                        {
  2852.                         imparm = impm;
  2853.                        }
  2854.           
  2855.                       break;
  2856.       
  2857.          case 4:  if(rlpm < -5.0 || rlpm > 5.0)
  2858.                        {
  2859.                         DisplayBeep(FirstScreen);
  2860.                         strcpy(rl_pm_StringBuffer, "0");
  2861.                        }
  2862.              
  2863.                       if(rlpm <= 5.0 && rlpm >= -5.0)
  2864.                        {
  2865.                         rlparm = rlpm;
  2866.                        }
  2867.           
  2868.                       break;
  2869.    
  2870.              case 5:  if(jl_immx < -5.0 || jl_immx > 5.0)
  2871.                        {
  2872.                         DisplayBeep(FirstScreen);
  2873.                         strcpy(jv_ix_StringBuffer, "0");
  2874.                        }
  2875.              
  2876.                       if(jl_immx <= 5.0 && jl_immx >= -5.0)
  2877.                        {
  2878.                         jl_imgmax = jl_immx;
  2879.                        }
  2880.           
  2881.                       break;
  2882.  
  2883.              case 6:  if(jl_immn < -5.0 || jl_immn > 5.0)
  2884.                        {
  2885.                         DisplayBeep(FirstScreen);
  2886.                         strcpy(jv_in_StringBuffer, "0");
  2887.                        }
  2888.              
  2889.                       if(jl_immn <= 5.0 && jl_immn >= -5.0)
  2890.                        {
  2891.                         jl_imgmin = jl_immn;
  2892.                        }
  2893.              
  2894.                       break;
  2895.  
  2896.              case 7:  if(jl_rlmx < -5.0 || jl_rlmx > 5.0)
  2897.                        {
  2898.                         DisplayBeep(FirstScreen);
  2899.                         strcpy(jv_rx_StringBuffer, "0");
  2900.                        }
  2901.              
  2902.                       if(jl_rlmx <= 5.0 && jl_rlmx >= -5.0)
  2903.                        {
  2904.                         jl_rlmax = jl_rlmx;
  2905.                        }
  2906.              
  2907.                       break;
  2908.  
  2909.              case 8:  if(jl_rlmn < -5.0 || jl_rlmn > 5.0)
  2910.                        {
  2911.                         DisplayBeep(FirstScreen);
  2912.                         strcpy(jv_rn_StringBuffer, "0");
  2913.                        }
  2914.              
  2915.                      if(jl_rlmn <= 5.0 && jl_rlmn >= -5.0)
  2916.                       {
  2917.                        jl_rlmin = jl_rlmn;
  2918.                       }
  2919.                 
  2920.                      break;
  2921.  
  2922.             } /*** item switch ***/
  2923.  
  2924.        } /*** While message ***/
  2925.  
  2926.     } /**** While go ****/
  2927.  
  2928.    if(DrawWindow == TRUE)
  2929.      {
  2930.        WindowToFront(NoBorder);
  2931.      } 
  2932.  
  2933.    return(TRUE);
  2934.  
  2935.   } /**** Close Off Fractal Values Function ****/
  2936.  
  2937.  
  2938.  
  2939.  
  2940.  
  2941.  
  2942. /**************************************************************************
  2943.  
  2944.                 C O L O R   A D J U S T E R   F U N C T I O N  
  2945.                        
  2946. **************************************************************************/
  2947.  
  2948.  
  2949. color_adjust(FirstWindow)
  2950. struct Window *FirstWindow;
  2951.   {
  2952.  
  2953.    register int class, check, c, item;
  2954.    BOOL go, pick;
  2955.    USHORT backup[16], temp_colr;
  2956.  
  2957.    for (c = 0; c < 16; c++) backup[c] = colortable[c];
  2958.  
  2959.    R_Propinfo.Flags = FREEHORIZ|AUTOKNOB;
  2960.    G_Propinfo.Flags = FREEHORIZ|AUTOKNOB;
  2961.    B_Propinfo.Flags = FREEHORIZ|AUTOKNOB;
  2962.  
  2963.    R_Propinfo.HorizBody = 0x1000;
  2964.    G_Propinfo.HorizBody = 0x1000;
  2965.    B_Propinfo.HorizBody = 0x1000;
  2966.  
  2967.    open_color_wind(FirstWindow);
  2968.    
  2969.    ModifyIDCMP(ColorWindow, GADGETUP|GADGETDOWN|REQCLEAR|MOUSEMOVE); 
  2970.    
  2971.    InitRequester(&clr_adj_requester);
  2972.  
  2973.    clr_adj_requester.LeftEdge = 0;
  2974.    clr_adj_requester.TopEdge = 0;
  2975.    clr_adj_requester.Width = 215;
  2976.    clr_adj_requester.Height = 200;
  2977.    clr_adj_requester.ReqGadget = &clr_adj_gads[0];
  2978.    clr_adj_requester.ReqText = &clr_adj_txt;
  2979.    clr_adj_requester.BackFill = 0;
  2980.    clr_adj_requester.ReqBorder = &clr_adj_border1;
  2981.  
  2982.    Request(&clr_adj_requester, ColorWindow);
  2983.  
  2984.    check = 1;
  2985.  
  2986.    R_Propinfo.HorizPot = (colortable[check] & 0xf00) << 4;
  2987.    G_Propinfo.HorizPot = (colortable[check] & 0x0f0) << 8;
  2988.    B_Propinfo.HorizPot = colortable[check] << 12;
  2989.  
  2990.    clr_adj_box_img.PlaneOnOff = (UBYTE)check;
  2991.  
  2992.    RefreshGList(&R_gad, ColorWindow, &clr_adj_requester, 4);
  2993.  
  2994.    go = TRUE;
  2995.    pick = FALSE;
  2996.         
  2997.    while (go)
  2998.      {
  2999.       Wait(1 << ColorWindow->UserPort->mp_SigBit); 
  3000.       while (message = (struct IntuiMessage *) 
  3001.                      GetMsg(ColorWindow->UserPort))
  3002.        {
  3003.         class = message->Class;  
  3004.         ReplyMsg(message);
  3005.  
  3006.         if(class == REQCLEAR) go = FALSE;         
  3007.      
  3008.         if((class == GADGETDOWN) || (class == GADGETUP))
  3009.            item = ((struct Gadget *) message->IAddress)->GadgetID;
  3010.        }
  3011.  
  3012.       if((item >= 0) && (item < 16) && (item != check)) pick = TRUE;
  3013.       switch (item)
  3014.        {
  3015.         case 16 : /**** Let these cases fall through because they all
  3016.                    have to be handled the same way !!            ****/
  3017.         case 17 :
  3018.          
  3019.         case 18 : temp_colr = ((R_Propinfo.HorizPot >> 4) & 0xf00)
  3020.                             + ((G_Propinfo.HorizPot >> 8) & 0xf0)
  3021.                             + (B_Propinfo.HorizPot >>12);
  3022.                   if(colortable[check] != temp_colr)
  3023.                    {
  3024.                     colortable[check] = temp_colr;
  3025.                     LoadRGB4(vp,&colortable,16);
  3026.                     RefreshGList(&clr_adj_box_gad, ColorWindow,
  3027.                        &clr_adj_requester, 1);
  3028.                     RefreshGList(&clr_adj_gads[check], ColorWindow,
  3029.                        &clr_adj_requester, 1);
  3030.                    }
  3031.                   break;
  3032.       
  3033.         case 19 : for(c = 0; c < 16; c++) colortable[c] = colortable_2[c];
  3034.                   LoadRGB4(vp,&colortable,16);
  3035.                   R_Propinfo.HorizPot = (colortable[check] & 0xf00) << 4;
  3036.                   G_Propinfo.HorizPot = (colortable[check] & 0x0f0) << 8;
  3037.                   B_Propinfo.HorizPot = colortable[check] << 12;
  3038.                   RefreshGList(&R_gad, ColorWindow, 
  3039.                      &clr_adj_requester, 3);
  3040.                   item = 69;
  3041.                   break;
  3042.         
  3043.         case 20 : for(c = 0; c < 16; c++) colortable[c] = backup[c];
  3044.                   LoadRGB4(vp,&colortable,16);
  3045.                   R_Propinfo.HorizPot = (colortable[check] & 0xf00) << 4;
  3046.                   G_Propinfo.HorizPot = (colortable[check] & 0x0f0) << 8;
  3047.                   B_Propinfo.HorizPot = colortable[check] << 12;
  3048.                   RefreshGList(&R_gad, ColorWindow,
  3049.                      &clr_adj_requester, 3);
  3050.                   item = 69;
  3051.                   break;
  3052.         
  3053.         case 22 : sprintf(clr_adj_box_str, "%03X\0", colortable[check]);
  3054.                   clr_adj_box_txt.IText = (UBYTE *)clr_adj_box_str;
  3055.                   if(check != 0) clr_adj_box_txt.FrontPen = 0;
  3056.                   else clr_adj_box_txt.FrontPen = 1;
  3057.                   RefreshGList(&clr_adj_box_gad, ColorWindow,
  3058.                      &clr_adj_requester, 1);
  3059.                   clr_adj_box_txt.IText = NULL;
  3060.                   item = 69;
  3061.                   break;
  3062.         
  3063.                } /**** Item Switch ****/
  3064.         
  3065.         if (pick)            /* This is used only when a color box */
  3066.          {                   /* gadget has been selected.  It then */
  3067.                              /* resets the sliders & box gadget.   */
  3068.           check = item;
  3069.           clr_adj_box_img.PlaneOnOff = (UBYTE)check;
  3070.           R_Propinfo.HorizPot = (colortable[check] & 0xf00) << 4;
  3071.           G_Propinfo.HorizPot = (colortable[check] & 0x0f0) << 8;
  3072.           B_Propinfo.HorizPot = colortable[check] << 12;
  3073.           RefreshGList(&R_gad, ColorWindow,
  3074.                   &clr_adj_requester, 4);
  3075.           pick = FALSE;
  3076.          }
  3077.        
  3078.       } /**** While loop ****/
  3079.    
  3080.    CloseWindow(ColorWindow);
  3081.    return(TRUE);
  3082.    
  3083.   } /**** Close Off Color Adjust Function ****/
  3084.  
  3085.  
  3086. /**************************************************************************
  3087.  
  3088.   O P E N   C O L O R   A D J U S T E R   W I N D O W   F U N C T I O N
  3089.  
  3090. **************************************************************************/
  3091.  
  3092. open_color_wind(FirstWindow)
  3093. struct Window *FirstWindow;
  3094.   {
  3095.    struct NewWindow color_wind;
  3096.    color_wind.LeftEdge = 230;
  3097.    color_wind.TopEdge = 10;
  3098.    color_wind.Width = 215;
  3099.    color_wind.Height = 200;
  3100.    color_wind.DetailPen = 0;
  3101.    color_wind.BlockPen = 1;
  3102.    color_wind.Flags = BORDERLESS;
  3103.    color_wind.IDCMPFlags = MENUPICK|REQCLEAR;
  3104.    color_wind.FirstGadget = NULL;
  3105.    color_wind.CheckMark = NULL;
  3106.    color_wind.Title = NULL;
  3107.    color_wind.Screen = FirstScreen;
  3108.    color_wind.BitMap = NULL;
  3109.    color_wind.MinWidth = 0;
  3110.    color_wind.MinHeight = 0;
  3111.    color_wind.MaxWidth = 0;
  3112.    color_wind.MaxHeight = 0;
  3113.    color_wind.Type = CUSTOMSCREEN;
  3114.  
  3115.    ColorWindow = (struct Window *)OpenWindow(&color_wind);
  3116.    if(ColorWindow == NULL)
  3117.       {
  3118.        printf("Errors can occur anywhere! Why here??  Why me??");
  3119.        exit(FALSE);
  3120.       }
  3121.       
  3122.    ClearPointer(ColorWindow);
  3123.    SetPointer(ColorWindow,Pointer,16,16,0,0);   
  3124.    return(TRUE);
  3125.    
  3126.   }  /****  Close Off Open Color Adjuster Window Function  ****/
  3127.  
  3128.  
  3129. /**************************************************************************
  3130.  
  3131.                      C L O S E   A L L   F U N C T I O N  
  3132.  
  3133. *************************************************************************/
  3134.  
  3135. VOID Close_All()
  3136.   {
  3137.    FreeMem(Pointer, POINTER_SIZE * 2);
  3138.    FreeMem(Cross, CROSS_SIZE * 2);
  3139.    FreeMem(Sleepy, SLEEPY_SIZE * 2);   
  3140.    if(DrawWindow == TRUE)   
  3141.      {
  3142.       CloseWindow(NoBorder);
  3143.      }  
  3144.    ClearMenuStrip(FirstWindow);
  3145.    CloseWindow(FirstWindow);
  3146.    ClearPointer(FirstWindow);
  3147.    CloseScreen(FirstScreen);
  3148.    CloseLibrary(GfxBase);
  3149.    CloseLibrary(IntuitionBase);
  3150.    CloseLibrary(MathBase);
  3151.    
  3152.    exit(FALSE);
  3153.    
  3154.   } /****  Close Off The Close All Function ****/
  3155.