#include <exec/types.h>
#include <intuition/intuition.h>

extern struct TextAttr Font;
extern struct Screen *FirstScreen;
extern struct IntuiMessage *message;
extern struct Window *FirstWindow,*NoBorder;
extern SHORT op_code;     
extern BOOL DrawWindow;

/**************************************************************************

            I N F O R M A T I O N   R E Q U E S T E R   I N F O 
          
**************************************************************************/
   


struct IntuiText in_Quit_txt =
       {1, 0, JAM1, 8, 8, &Font, (UBYTE *)"QUIT", NULL};

struct IntuiText in_Next_txt =
       {1, 0, JAM1, 8, 8, &Font, (UBYTE *)"Next Page", NULL};

struct IntuiText in_Prev_txt =
       {1, 0, JAM1, 8, 8, &Font, (UBYTE *)"Previous Page", NULL};
         
struct Image in_Quit_img = {0,0, 50,25, 3, NULL, 0, 0, NULL};

struct Image in_Next_img = {0,0, 88,25, 3, NULL, 0, 0, NULL};

struct Image in_Prev_img = {0,0, 120,25, 3, NULL, 0, 0, NULL};
   
struct Gadget in_Prev_gadg =
    {
     NULL,
     420, 350, 120, 25,
     GADGIMAGE|GADGHBOX, RELVERIFY, REQGADGET|BOOLGADGET,
     (APTR)&in_Prev_img, NULL,
     &in_Prev_txt, NULL,
     NULL, 3, NULL
    };

struct Gadget in_Next_gadg =
    {
     &in_Prev_gadg,
     250, 350, 88, 25,
     GADGIMAGE|GADGHBOX, RELVERIFY, REQGADGET|BOOLGADGET,
     (APTR)&in_Next_img, NULL,
     &in_Next_txt, NULL,
     NULL, 2, NULL
    };

struct Gadget in_Quit_gadg =
    {
     &in_Next_gadg,
     100, 350, 50, 25,
     GADGIMAGE|GADGHBOX, ENDGADGET, REQGADGET|BOOLGADGET,
     (APTR)&in_Quit_img, NULL,
     &in_Quit_txt, NULL,
     NULL, 1, NULL
    };


SHORT in_border1_cords[] = {5,10, 620,10, 620,388, 5,388, 5,10};
SHORT in_border2_cords[] = {10,15, 615,15, 615,383, 10,383, 10,15};
 

struct Border in_border2 =
    {
     0, 0,
     1, 0, JAM1,
     5, &in_border2_cords[0],
     NULL
    };

struct Border in_border1 =
    {
     0, 0,
     1, 0, JAM1,
     5, &in_border1_cords[0],
     &in_border2
    };

struct IntuiText prg_txt1[30] =
  { 
   {1, 0, JAM1, 40, 40, &Font,
    "    There is no known real world structure that when magnified",
    &prg_txt1[1]},
   {1, 0, JAM1, 40, 50, &Font,    
    "repeatedly an infinite number of times maintains its original",
    &prg_txt1[2]},
   {1, 0, JAM1, 40, 60, &Font,     
    "appearance, however, the study of such imaginary structures have",
    &prg_txt1[3]},
   {1, 0, JAM1, 40, 70, &Font,     
    "intrigued mathematicians and physicists for some time.",
    &prg_txt1[4]},    
   {1, 0, JAM1, 40, 80, &Font,    
   "    Mathematicians have perennially contemplated numerous ideas using",
    &prg_txt1[5]},   
   {1, 0, JAM1, 40, 90, &Font,   
    "pictures; in fact, they often use aesthetic classifications as",
    &prg_txt1[6]},    
   {1, 0, JAM1, 40, 100, &Font,     
   "criteria for showing completeness and/or discovering truths.  There",
    &prg_txt1[7]},   
   {1, 0, JAM1, 40, 110, &Font,    
   "is a growing conviction, amongst the mathematical community, that",
    &prg_txt1[8]},   
   {1, 0, JAM1, 40, 120, &Font,    
   "formation processes and self-organization develop by an exclusive",
    &prg_txt1[9]},   
   {1, 0, JAM1, 40, 130, &Font,    
   "number of orthodox scenarios which are independent of the specific",
    &prg_txt1[10]},   
   {1, 0, JAM1, 40, 140, &Font,    
   "system involved.  During the 1980's there was a great deal of effort",
    &prg_txt1[11]},   
   {1, 0, JAM1, 40, 150, &Font,    
   "put into methodically finding the rules by which order arises in",
    &prg_txt1[12]},   
   {1, 0, JAM1, 40, 160, &Font,    
   "complex systems; the exploration into the fields of chaos and order",
    &prg_txt1[13]},   
   {1, 0, JAM1, 40, 170, &Font,    
   "has since continued enthusiastically.  By creating these beautiful",
    &prg_txt1[14]},   
   {1, 0, JAM1, 40, 180, &Font,    
   "pictures, scientists are trying to comprehend how the organization",
    &prg_txt1[15]},   
   {1, 0, JAM1, 40, 190, &Font,    
   "of the boundaries (the fractal's shape or form) corresponds to the",
    &prg_txt1[16]},   
   {1, 0, JAM1, 40, 200, &Font,    
   "parameters chosen.",
    &prg_txt1[17]},   
   {1, 0, JAM1, 40, 210, &Font,   
   "    While producing exquisite depictions, the Mandelbrot set",
    &prg_txt1[18]},   
   {1, 0, JAM1, 40, 220, &Font,    
   "provides a superlative working example of the complex transformation",
    &prg_txt1[19]},   
   {1, 0, JAM1, 40, 230, &Font,    
   "from order to chaos.  The Julia sets are peculiar to the individual",
    &prg_txt1[20]},   
   {1, 0, JAM1, 40, 240, &Font,    
   "parts of the Mandelbrot set; that is, by using parameters from",
    &prg_txt1[21]},   
   {1, 0, JAM1, 40, 250, &Font,    
   "disparate sections of the Mandelbrot set distinct Julia set fractals",
    &prg_txt1[22]},   
   {1, 0, JAM1, 40, 260, &Font,    
   "will be generated.  The pictures that are generated are actually",
    &prg_txt1[23]},   
   {1, 0, JAM1, 40, 270, &Font,    
   "computations of escape velocities of the equation for each point on",
    &prg_txt1[24]},   
   {1, 0, JAM1, 40, 280, &Font,   
   "the screen to which the picture is being drawn, and the picture's",
    &prg_txt1[25]},   
   {1, 0, JAM1, 40, 290, &Font,   
   "colors are selected by an associated color table.  The way in which",
    &prg_txt1[26]},   
   {1, 0, JAM1, 40, 300, &Font,   
   "one chooses these colors (or zones as this program refers to them)",
    &prg_txt1[27]},   
   {1, 0, JAM1, 40, 310, &Font,   
   "is of critical importance since this will determine what is",
    &prg_txt1[28]},   
   {1, 0, JAM1, 40, 320, &Font,   
   "graphically rendered to the screen; different color assignments in",
    &prg_txt1[29]},   
   {1, 0, JAM1, 40, 330, &Font,   
   "the same region can actually produce distinct fractals.  Knowing",
    NULL}
  };
  
struct IntuiText prg_txt2[27] =
  {   
   {1, 0, JAM1, 40, 40, &Font,   
   "how to pick the right combinations of colors is somewhat of an art,",
    &prg_txt2[1]},    
   {1, 0, JAM1, 40, 50, &Font,      
   "however, by employing the trial and error method it is possible to",
    &prg_txt2[2]},   
   {1, 0, JAM1, 40, 60, &Font,   
   "generate fairly attractive fractals.  For more information",
    &prg_txt2[3]},   
   {1, 0, JAM1, 40, 70, &Font,   
   "concerning choosing the colors for the zones see the Color Zones",
    &prg_txt2[4]},   
   {1, 0, JAM1, 40, 80, &Font,   
   "information.  Also, you may find it helpful to peruse the",
    &prg_txt2[5]},   
   {1, 0, JAM1, 40, 90, &Font,   
   "information on Fractal Values especially for the Julia set",
    &prg_txt2[6]},   
   {1, 0, JAM1, 40, 100, &Font,   
   "parameters.",
    &prg_txt2[7]},   
   {1, 0, JAM1, 40, 110, &Font,   
   "    Some of my friends have expressed a concern about only allowing",
    &prg_txt2[8]},   
   {1, 0, JAM1, 40, 120, &Font,    
   "for a high-resolution, interlaced screen, but it is my belief that",
    &prg_txt2[9]},   
   {1, 0, JAM1, 40, 130, &Font,    
   "these alluring structures can only be fully appreciated with the",
    &prg_txt2[10]},   
   {1, 0, JAM1, 40, 140, &Font,    
   "finest resolution attainable.  Although this increases the run-time",
    &prg_txt2[11]},   
   {1, 0, JAM1, 40, 150, &Font,    
   "for a full screen fractal, if you have the time to wait, I believe",
    &prg_txt2[12]},   
   {1, 0, JAM1, 40, 160, &Font,    
   "it is well worth it.",
    &prg_txt2[13]},   
   {1, 0, JAM1, 40, 170, &Font,   
   "    I am submitting this program to the public domain in hopes that",
    &prg_txt2[14]},   
   {1, 0, JAM1, 40, 180, &Font,    
   "it will serve to inspire others to program and offer their code to",
    &prg_txt2[15]},   
   {1, 0, JAM1, 40, 190, &Font,    
   "rookies, like myself, who struggle through the growing pains of not",
    &prg_txt2[16]},   
   {1, 0, JAM1, 40, 200, &Font,    
   "knowing how to program on their Amiga.  This is not a high-powered",
    &prg_txt2[17]},   
   {1, 0, JAM1, 40, 210, &Font,    
   "fractal program; in fact, I could cite several examples of faster",
    &prg_txt2[18]},   
   {1, 0, JAM1, 40, 220, &Font,    
   "fractal generators with more ""bells and whistles"" than this, but my",
    &prg_txt2[19]},   
   {1, 0, JAM1, 40, 230, &Font,    
   "intention is to share, with anyone interested, the code which makes",
    &prg_txt2[20]},   
   {1, 0, JAM1, 40, 240, &Font,    
   "this program possible.  This program began as an extra credit project",
    &prg_txt2[21]},   
   {1, 0, JAM1, 40, 250, &Font,   
   "in a C class that I was taking at Grand Rapids Junior College, and as",
    &prg_txt2[22]},   
   {1, 0, JAM1, 40, 260, &Font,   
   "my fascination with fractals grew so did the program!  If you have",
    &prg_txt2[23]},   
   {1, 0, JAM1, 40, 270, &Font,    
   "any comments or suggestions, please feel free to write me or, what",
    &prg_txt2[24]},   
   {1, 0, JAM1, 40, 280, &Font,    
   "the hell, if you feel the need to send money - I'm still just a poor",
    &prg_txt2[25]},   
   {1, 0, JAM1, 40, 290, &Font,    
   "college student... You can find my address in the About section of",
    &prg_txt2[26]},   
   {1, 0, JAM1, 40, 300, &Font,    
   "the information sub-menu. I hope you enjoy the pictures I've created.",
    NULL}
  };
   

struct IntuiText map_txt[24] =
  {   
   {1, 0, JAM1, 40, 40, &Font,   
   "    The Map is an ILBM that I created using this program.  I loaded",
    &map_txt[1]},
   {1, 0, JAM1, 40, 50, &Font,    
   "it into Deluxe Paint III to add the words and markings.  The Map is",
    &map_txt[2]},
   {1, 0, JAM1, 40, 60, &Font,    
   "a picture of the Mandelbrot set and its associated coordinates in the",
    &map_txt[3]},   
   {1, 0, JAM1, 40, 70, &Font,   
   "complex plane.  The coordinates are used as parameters when defining",
    &map_txt[4]},   
   {1, 0, JAM1, 40, 80, &Font,   
   "where you want your fractal to come from.  For example, if you were",
    &map_txt[5]},   
   {1, 0, JAM1, 40, 90, &Font,    
   "to choose a real minimum of -2, a real maximum of .50, an imaginary",
    &map_txt[6]},   
   {1, 0, JAM1, 40, 100, &Font,   
   "minimum of -1.25, and an imaginary maximum of 1.25 and then you",
    &map_txt[7]},   
   {1, 0, JAM1, 40, 110, &Font,   
   "assigned these values in the Assign Mandelbrot Values requester,",
    &map_txt[8]},   
   {1, 0, JAM1, 40, 120, &Font,    
   "then chose Draw/Mandelbrot you would effectively generate the",
    &map_txt[9]},   
   {1, 0, JAM1, 40, 130, &Font,    
   "Mandelbrot set you see when you display the Map.  When you want to",
    &map_txt[10]},   
   {1, 0, JAM1, 40, 140, &Font,    
   "zoom in on a particular spot of the Mandelbrot set, you can use the",
    &map_txt[11]},   
   {1, 0, JAM1, 40, 150, &Font,    
   "Map to get a general idea of what coordinates are used to generate",
    &map_txt[12]},   
   {1, 0, JAM1, 40, 160, &Font,    
   "that fractal.  Finding a precise location isn't always easy, and it",
    &map_txt[13]},   
   {1, 0, JAM1, 40, 170, &Font,    
   "may require a couple of test runs to get the fractal you want.  I",
    &map_txt[14]},   
   {1, 0, JAM1, 40, 180, &Font,    
   "suggest that instead of generating a full screen fractal you use",
    &map_txt[15]},   
   {1, 0, JAM1, 40, 190, &Font,    
   "the Drawing Area Parameters requester and make the draw window say",
    &map_txt[16]},   
   {1, 0, JAM1, 40, 200, &Font,    
   "50 x 50 (just big enough to see if you found the right area) and set",
    &map_txt[17]},   
   {1, 0, JAM1, 40, 210, &Font,   
   "the iterations to 25 so it is generated as quickly as possible.",
    &map_txt[18]},   
   {1, 0, JAM1, 40, 220, &Font,     
   "Then if the area you chose was the spot you wanted to zoom in on,",
    &map_txt[19]},   
   {1, 0, JAM1, 40, 230, &Font,    
   "you could increase the draw window size and increase the number of",
    &map_txt[20]},   
   {1, 0, JAM1, 40, 240, &Font,    
   "iterations used.  This Map can be used for picking Julia set",
    &map_txt[21]},   
   {1, 0, JAM1, 40, 250, &Font,    
   "fractals also since they require separate real and imaginary",
    &map_txt[22]},   
   {1, 0, JAM1, 40, 260, &Font,    
   "parameters.  SEE Iterations, Fractal Values, Draw, and Drawing Area",
    &map_txt[23]},   
   {1, 0, JAM1, 40, 270, &Font,   
   "for more information about these functions.",
    NULL}
  };
   
   
struct IntuiText drwa_txt[18] =
  {   
   {1, 0, JAM1, 40, 40, &Font,   
   "    The Drawing Area Parameters requester allows you to change the",
    &drwa_txt[1]},   
   {1, 0, JAM1, 40, 50, &Font,   
   "size and/or position of the drawing window.  Since this window has",
    &drwa_txt[2]},   
   {1, 0, JAM1, 40, 60, &Font,    
   "no border or window sizing gadgets, this requester facilitates the",
    &drwa_txt[3]},   
   {1, 0, JAM1, 40, 70, &Font,    
   "way in which you specify where the window should appear by using the",
    &drwa_txt[4]},   
   {1, 0, JAM1, 40, 80, &Font,    
   "Left Edge and Top Edge gadgets.  The Left Edge should be a natural",
    &drwa_txt[5]},   
   {1, 0, JAM1, 40, 90, &Font,    
   "number between 0 and 500 while the Top Edge should be a natural",
    &drwa_txt[6]},   
   {1, 0, JAM1, 40, 100, &Font,    
   "number between 10 and 350.  The size of the window is governed by",
    &drwa_txt[7]},   
   {1, 0, JAM1, 40, 110, &Font,    
   "the Width and Height gadgets.  If the sum of the Left Edge and the",
    &drwa_txt[8]},   
   {1, 0, JAM1, 40, 120, &Font,    
   "Width is greater than 640 an error message is displayed and the",
    &drwa_txt[9]},   
   {1, 0, JAM1, 40, 130, &Font,    
   "values are reset to their default settings.  If the sum of the",
    &drwa_txt[10]},   
   {1, 0, JAM1, 40, 140, &Font,    
   "Height and Top Edge exceeds 400 an error message is displayed and,",
    &drwa_txt[11]},   
   {1, 0, JAM1, 40, 150, &Font,    
   "once again, both of these values will be reset to their respective",
    &drwa_txt[12]},   
   {1, 0, JAM1, 40, 160, &Font,    
   "default settings.  The size of the window will determine the total",
    &drwa_txt[13]},   
   {1, 0, JAM1, 40, 170, &Font,    
   "drawing area for the fractal.  Smaller windows are useful for",
    &drwa_txt[14]},   
   {1, 0, JAM1, 40, 180, &Font,    
   "testing color arrangements or specific fractal values where you're",
    &drwa_txt[15]},   
   {1, 0, JAM1, 40, 190, &Font,    
   "not sure if you've chosen the correct area to zoom in on.  A full",
    &drwa_txt[16]},   
   {1, 0, JAM1, 40, 200, &Font,    
   "window (or say a 400 x 400 window) is nice for generating the",
    &drwa_txt[17]},   
   {1, 0, JAM1, 40, 210, &Font,    
   "fractal you wish to save.",
    NULL}
  };   
   

struct IntuiText drw_txt1[19] =
  {   
   {1, 0, JAM1, 40, 40, &Font,   
   "                                Draw",
    &drw_txt1[1]},   
   {1, 0, JAM1, 40, 60, &Font,
   "Mandelbrot - selection of this option will initiate the drawing of a",
    &drw_txt1[2]},   
   {1, 0, JAM1, 40, 70, &Font,   
   "Mandelbrot set fractal.",
    &drw_txt1[3]},
   {1, 0, JAM1, 40, 90, &Font,
   "Julia - selection of this option will initiate the drawing of a Julia",
    &drw_txt1[4]},   
   {1, 0, JAM1, 40, 100, &Font,   
   "set fractal.",
    &drw_txt1[5]},
   {1, 0, JAM1, 40, 120, &Font,
   "The choice of Draw is the last command given to the program before",
    &drw_txt1[6]},   
   {1, 0, JAM1, 40, 130, &Font,   
   "generation of a fractal takes place.  The program is dependent upon",
    &drw_txt1[7]},   
   {1, 0, JAM1, 40, 140, &Font,   
   "the values in these requesters as follows:",
    &drw_txt1[8]},
   {1, 0, JAM1, 40, 160, &Font,
   "Colors - colors currently defined in the Modify Colors requester are",
    &drw_txt1[9]},   
   {1, 0, JAM1, 40, 170, &Font,   
   "         the system colors and will be used to color the fractal as",
    &drw_txt1[10]},   
   {1, 0, JAM1, 40, 180, &Font,   
   "         well as define screen, border, and text colors.",
    &drw_txt1[11]},   
   {1, 0, JAM1, 40, 200, &Font,
   "Color Zones - zones currently defined by values stored in their",
    &drw_txt1[12]},   
   {1, 0, JAM1, 40, 210, &Font,   
   "              respective gadgets are used to define escape sequences.",
    &drw_txt1[13]},   
   {1, 0, JAM1, 40, 230, &Font,
   "Iterations - the iteration number with the checkmark in front of it",
    &drw_txt1[14]},   
   {1, 0, JAM1, 40, 240, &Font,   
   "             will determine the number of iterations for this",
    &drw_txt1[15]},  
   {1, 0, JAM1, 40, 250, &Font,   
   "             drawing.",
    &drw_txt1[16]},
   {1, 0, JAM1, 40, 270, &Font,
   "Drawing Area - values currently defined by the Drawing Area",
    &drw_txt1[17]},   
   {1, 0, JAM1, 40, 280, &Font,   
   "               Parameters requester will determine where the drawing",
    &drw_txt1[18]},   
   {1, 0, JAM1, 40, 290, &Font,   
   "               will occur on the screen as well as its size.",
    NULL}
  };


struct IntuiText drw_txt2[7] =
  {   
   {1, 0, JAM1, 40, 40, &Font,   
   "Fractal Values - values currently assigned by the respective Fractal",
    &drw_txt2[1]},   
   {1, 0, JAM1, 40, 50, &Font,
   "                 Values Parameter requester will be used in",
    &drw_txt2[2]},   
   {1, 0, JAM1, 40, 60, &Font,    
   "                 determining which area of the set to generate.",
    &drw_txt2[3]},   
   {1, 0, JAM1, 40, 80, &Font,   
   "For more specific information on any of the items above look in the",
    &drw_txt2[4]},   
   {1, 0, JAM1, 40, 90, &Font,   
   "information menu.  Note: Information on colors can be found in the",
    &drw_txt2[5]},   
   {1, 0, JAM1, 40, 100, &Font,   
   "Modify Colors section while the rest of the items each have their",
    &drw_txt2[6]},
   {1, 0, JAM1, 40, 110, &Font,
   "own headings.",
    NULL}
  };   
   

struct IntuiText mod_txt[24] =
  {   
   {1, 0, JAM1, 40, 40, &Font,   
   "                            Modify Colors",
    &mod_txt[1]},   
   {1, 0, JAM1, 40, 60, &Font,
   "This requester allows the changing of the 16 system colors.  You",
    &mod_txt[2]},   
   {1, 0, JAM1, 40, 70, &Font,   
   "can blend each of the red, green, and blue amounts for all 16 colors",
    &mod_txt[3]},   
   {1, 0, JAM1, 40, 80, &Font,   
   "(they are numbered 0 - 15) available.  However, changing the black",
    &mod_txt[4]},   
   {1, 0, JAM1, 40, 90, &Font,    
   "and white colors is not recommended since the black color represents",
    &mod_txt[5]},   
   {1, 0, JAM1, 40, 100, &Font,   
   "infinity on a fractal drawing and the white color is used for borders",
    &mod_txt[6]},   
   {1, 0, JAM1, 40, 110, &Font,   
   "and other program functions.  Additionally, you may experience",
    &mod_txt[7]},   
   {1, 0, JAM1, 40, 120, &Font,   
   "text recognition problems when mixing some colors.  All of the",
    &mod_txt[8]},   
   {1, 0, JAM1, 40, 130, &Font,    
   "requesters utilizing text use blue backgrounds with white lettering",
    &mod_txt[9]},   
   {1, 0, JAM1, 40, 140, &Font,   
   "for ease of reading, but when those colors are mixed the result can",
    &mod_txt[10]},   
   {1, 0, JAM1, 40, 150, &Font,   
   "be hard to understand text.  You can reset the system colors to what",
    &mod_txt[11]},   
   {1, 0, JAM1, 40, 160, &Font,   
   "they were originally by selecting the default gadget of this",
    &mod_txt[12]},   
   {1, 0, JAM1, 40, 170, &Font,   
   "requester.  Think of these colors as your palette.  Since you are the",
    &mod_txt[13]},   
   {1, 0, JAM1, 40, 180, &Font,   
   "artist who will do the painting, they should be colors that will",
    &mod_txt[14]},   
   {1, 0, JAM1, 40, 190, &Font,   
   "produce the most aesthetically pleasing results to you!  Your color",
    &mod_txt[15]},   
   {1, 0, JAM1, 40, 200, &Font,   
   "selections will be directly used by the program to color the zones to",
    &mod_txt[16]},   
   {1, 0, JAM1, 40, 210, &Font,   
   "which they correspond.  Each color zone is assigned a number from 0 -",
    &mod_txt[17]},   
   {1, 0, JAM1, 40, 220, &Font,   
   "15 (your color palette numbers), and the color that has been defined",
    &mod_txt[18]},   
   {1, 0, JAM1, 40, 230, &Font,   
   "in your palette for that number will be the color the program will",
    &mod_txt[19]},   
   {1, 0, JAM1, 40, 240, &Font,   
   "use to paint that zone.  This is how you can change the colors of",
    &mod_txt[20]},   
   {1, 0, JAM1, 40, 250, &Font,   
   "your fractals.  This can even be done after the fractal has been",
    &mod_txt[21]},   
   {1, 0, JAM1, 40, 260, &Font,    
   "drawn; that is, once the drawing is complete you can modify its",
    &mod_txt[22]},   
   {1, 0, JAM1, 40, 270, &Font,   
   "colors (you will, of course, change every occurrence of that color).",
    &mod_txt[23]},   
   {1, 0, JAM1, 40, 280, &Font,   
   "SEE Color Zones for more information pertaining to that subject.",
    NULL}
  };
   

struct IntuiText fv_txt1[29] =
  {   
   {1, 0, JAM1, 40, 40, &Font,   
   "                     Assigning Mandelbrot Values",
    &fv_txt1[1]},    
   {1, 0, JAM1, 40, 60, &Font,   
   "This requester contains four important gadgets; Real Min., Real Max.,",
    &fv_txt1[2]},   
   {1, 0, JAM1, 40, 70, &Font,   
   "Imag. Min., Imag. Max..  These gadgets are used to specify values,",
    &fv_txt1[3]},   
   {1, 0, JAM1, 40, 80, &Font,    
   "from the Mandelbrot set, that you would like to use in generating",
    &fv_txt1[4]},   
   {1, 0, JAM1, 40, 90, &Font,   
   "your fractal.  Notice that they are in pairs (i.e. Real Min. - Real",
    &fv_txt1[5]},   
   {1, 0, JAM1, 40, 100, &Font,   
   "Max.).  Upon observing the Map provided by this program, you will see",
    &fv_txt1[6]},   
   {1, 0, JAM1, 40, 110, &Font,   
   "real and imaginary number lines that form a two dimensional",
    &fv_txt1[7]},   
   {1, 0, JAM1, 40, 120, &Font,   
   "coordinate plane.  The values you choose for these gadgets should be",
    &fv_txt1[8]},   
   {1, 0, JAM1, 40, 130, &Font,   
   "within the range shown on the Map, and they are entered as to form a",
    &fv_txt1[9]},   
   {1, 0, JAM1, 40, 140, &Font,   
   "subrange of values from the real and imaginary axes.  Be careful",
    &fv_txt1[10]},   
   {1, 0, JAM1, 40, 150, &Font,   
   "where you pick these values because if you specify coordinates that",
    &fv_txt1[11]},   
   {1, 0, JAM1, 40, 160, &Font,   
   "put you in the infinity realm, your fractal will just be a generation",
    &fv_txt1[12]},   
   {1, 0, JAM1, 40, 170, &Font,   
   "of infinity (on the Map, infinity is the black lake-like zone in the",
    &fv_txt1[13]},   
   {1, 0, JAM1, 40, 180, &Font,   
   "middle of the picture).  However, you shouldn't be too afraid to",
    &fv_txt1[14]},   
   {1, 0, JAM1, 40, 190, &Font,    
   "experiment with values around the infinity lake since many beautiful",
    &fv_txt1[15]},   
   {1, 0, JAM1, 40, 200, &Font,   
   "fractals are generated from its border.  You can use the Map to get a",
    &fv_txt1[16]},   
   {1, 0, JAM1, 40, 210, &Font,   
   "general idea of where your values will come from.  You can think of",
    &fv_txt1[17]},   
   {1, 0, JAM1, 40, 220, &Font,   
   "this process as a microscope where you designate the area you would",
    &fv_txt1[18]},   
   {1, 0, JAM1, 40, 230, &Font,   
   "like to see; in fact, that is very analogous to what is going on.",
    &fv_txt1[19]},   
   {1, 0, JAM1, 40, 240, &Font,   
   "You are magnifying the area specified by the range of values, and",
    &fv_txt1[20]},   
   {1, 0, JAM1, 40, 250, &Font,   
   "the magnification factor depends upon the difference of the values.",
    &fv_txt1[21]},   
   {1, 0, JAM1, 40, 260, &Font,   
   "For example, the smaller the distance between the minimum and",
    &fv_txt1[22]},   
   {1, 0, JAM1, 40, 270, &Font,    
   "maximum values chosen, the higher the magnification factor.",
    &fv_txt1[23]},   
   {1, 0, JAM1, 40, 280, &Font,   
   "     There is no defined methodology for picking these values.  My",
    &fv_txt1[24]},   
   {1, 0, JAM1, 40, 290, &Font,   
   "advice would be to look at the Map and find someplace that might",
    &fv_txt1[25]},   
   {1, 0, JAM1, 40, 300, &Font,   
   "look interesting when magnified.  Pick a minimum value for either",
    &fv_txt1[26]},   
   {1, 0, JAM1, 40, 310, &Font,   
   "the real or imaginary axis (this will be where you want your",
    &fv_txt1[27]},   
   {1, 0, JAM1, 40, 320, &Font,   
   "fractal to start) then pick a maximum value for either the real or",
    &fv_txt1[28]},   
   {1, 0, JAM1, 40, 330, &Font,   
   "imaginary axis (this will be where you want your fractal to end),",
    NULL}
  };  
   

struct IntuiText fv_txt2[28] =
  {   
   {1, 0, JAM1, 40, 40, &Font,   
   "then repeat the process for the other axis.  Try to select values",
    &fv_txt2[1]},   
   {1, 0, JAM1, 40, 50, &Font,   
   "from the Map that aren't in the ""lake of infinity"", and use a",
    &fv_txt2[2]},   
   {1, 0, JAM1, 40, 60, &Font,    
   "smaller Draw Window for your initial generation.  By using a",
    &fv_txt2[3]},   
   {1, 0, JAM1, 40, 70, &Font,   
   "smaller area to generate the fractal, you won't be wasting your",
    &fv_txt2[4]},   
   {1, 0, JAM1, 40, 80, &Font,   
   "time if the area you've picked was not a good choice; if it was a",
    &fv_txt2[5]},   
   {1, 0, JAM1, 40, 90, &Font,   
   "good choice, you can stop the current job, redefine your drawing",
    &fv_txt2[6]},   
   {1, 0, JAM1, 40, 100, &Font,   
   "area, and start again.",
    &fv_txt2[7]},   
   {1, 0, JAM1, 40, 120, &Font,
   "                       Assigning Julia Values",
    &fv_txt2[8]},   
   {1, 0, JAM1, 40, 140, &Font,   
   "This requester contains the same four important gadgets that you",
    &fv_txt2[9]},   
   {1, 0, JAM1, 40, 150, &Font,   
   "see in the Mandelbrot requester, and it has two additional",
    &fv_txt2[10]},   
   {1, 0, JAM1, 40, 160, &Font,   
   "gadgets.  The previously defined gadgets can be thought of exactly",
    &fv_txt2[11]},   
   {1, 0, JAM1, 40, 170, &Font,   
   "as I described them above, but the two new gadgets require some",
    &fv_txt2[12]},   
   {1, 0, JAM1, 40, 180, &Font,   
   "explanation.  The Real Param and the Imag Param gadgets specify a",
    &fv_txt2[13]},   
   {1, 0, JAM1, 40, 190, &Font,   
   "particular spot in the Mandelbrot set.  I'll try to explain this",
    &fv_txt2[14]},   
   {1, 0, JAM1, 40, 200, &Font,   
   "the best that I can.  The Julia set is a pictorial description of",
    &fv_txt2[15]},   
   {1, 0, JAM1, 40, 210, &Font,   
   "the ebbs or of the underlying forces in the Mandelbrot set.  It",
    &fv_txt2[16]},  
   {1, 0, JAM1, 40, 220, &Font,   
   "contains areas called strange attractors which are a place where",
    &fv_txt2[17]},   
   {1, 0, JAM1, 40, 230, &Font,   
   "these chaotic forces tend to come together.  Thus, when you",
    &fv_txt2[18]},   
   {1, 0, JAM1, 40, 240, &Font,   
   "generate a Julia fractal you specify the area of the Mandelbrot",
    &fv_txt2[19]},   
   {1, 0, JAM1, 40, 250, &Font,   
   "set as well as including an offset into the set.  The Real Param",
    &fv_txt2[20]},   
   {1, 0, JAM1, 40, 260, &Font,   
   "and Imag Param gadgets will be your offset.  I can't tell you how",
    &fv_txt2[21]},   
   {1, 0, JAM1, 40, 270, &Font,   
   "to select these values, but if you'd like to learn more about",
    &fv_txt2[22]},   
   {1, 0, JAM1, 40, 280, &Font,   
   "them, there are several good books out as well as scientific",
    &fv_txt2[23]},   
   {1, 0, JAM1, 40, 290, &Font,   
   "publications and journals where you could get more information on",
    &fv_txt2[24]},   
   {1, 0, JAM1, 40, 300, &Font,   
   "the subject.  There are some very interesting looking Julias",
    &fv_txt2[25]},   
   {1, 0, JAM1, 40, 310, &Font,   
   "around the set (in fact, the introductory screen you see when you",
    &fv_txt2[26]},   
   {1, 0, JAM1, 40, 320, &Font,   
   "load the program came from a Julia), and I encourage you to",
    &fv_txt2[27]},   
   {1, 0, JAM1, 40, 330, &Font,   
   "explore this type of fractal.  My advice for generating these",
    NULL}
  };  
  
   
struct IntuiText fv_txt3[4] =
  {   
   {1, 0, JAM1, 40, 40, &Font,   
   "fractals would be the same as I've already given you with one",
    &fv_txt3[1]},   
   {1, 0, JAM1, 40, 50, &Font,   
   "exception, you don't have to stay away from the ""lake of",
    &fv_txt3[2]},    
   {1, 0, JAM1, 40, 60, &Font,   
   "infinity"" anymore since the underlying forces can be found in",
    &fv_txt3[3]},    
   {1, 0, JAM1, 40, 70, &Font,   
   "this area.",
    NULL}
   };


struct IntuiText itr_txt1[22] =
  {   
   {1, 0, JAM1, 40, 40, &Font,   
   "                             Iterations",
    &itr_txt1[1]},    
   {1, 0, JAM1, 40, 60, &Font,    
   "This pull down menu item controls the number of iterations that will",
    &itr_txt1[2]},   
   {1, 0, JAM1, 40, 70, &Font,    
   "be used in generating your fractal as well as the number of zones",
    &itr_txt1[3]},   
   {1, 0, JAM1, 40, 80, &Font,     
   "that can be used.  The higher the iteration number you select,",
    &itr_txt1[4]},   
   {1, 0, JAM1, 40, 90, &Font,     
   "the more precise your fractal will be; that is, with lower iteration",
    &itr_txt1[5]},   
   {1, 0, JAM1, 40, 100, &Font,    
   "numbers there is a tendency to color some of the pixels incorrectly.",
    &itr_txt1[6]},   
   {1, 0, JAM1, 40, 110, &Font,    
   "However, this is not a major concern unless your magnification factor",
    &itr_txt1[7]},   
   {1, 0, JAM1, 40, 120, &Font,    
   "is very high.  You can generate a fairly accurate and alluring",
    &itr_txt1[8]},   
   {1, 0, JAM1, 40, 130, &Font,    
   "fractal without the use of a high number of iterations.  Increasing",
    &itr_txt1[9]},   
   {1, 0, JAM1, 40, 140, &Font,    
   "the iterations makes for a longer run-time for the fractal being",
    &itr_txt1[10]},   
   {1, 0, JAM1, 40, 150, &Font,    
   "generated; thus, if you don't care about the initial looks of an",
    &itr_txt1[11]},   
   {1, 0, JAM1, 40, 160, &Font,     
   "area (say you were just testing a spot out) a lower iteration number",
    &itr_txt1[12]},   
   {1, 0, JAM1, 40, 170, &Font,    
   "would be appropriate.  The iterations is directly connected with",
    &itr_txt1[13]},   
   {1, 0, JAM1, 40, 180, &Font,    
   "the number of zones that you will be able to use when coloring",
    &itr_txt1[14]},   
   {1, 0, JAM1, 40, 190, &Font,    
   "your fractal, and the higher the iteration number, the more zones",
    &itr_txt1[15]},   
   {1, 0, JAM1, 40, 200, &Font,    
   "you can use for coloring.  This is all more complicated then I am",
    &itr_txt1[16]},   
   {1, 0, JAM1, 40, 210, &Font,    
   "making it seem, but for practicality we'll leave it at that.  One",
    &itr_txt1[17]},   
   {1, 0, JAM1, 40, 220, &Font,    
   "note I'd like to make is that when you are generating a fractal that",
    &itr_txt1[18]},   
   {1, 0, JAM1, 40, 230, &Font,    
   "has a high magnification factor you may have to use a higher number",
    &itr_txt1[19]},   
   {1, 0, JAM1, 40, 240, &Font,    
   "of iterations to see anything at all.  So, if you want more accuracy",
    &itr_txt1[20]},   
   {1, 0, JAM1, 40, 250, &Font,    
   "or you have chosen a high magnification factor, you should make an",
    &itr_txt1[21]},   
   {1, 0, JAM1, 40, 260, &Font,    
   "adjustment in your iterations.  The iteration number controls the",
    NULL}
   };


struct IntuiText itr_txt2[19] =
  {   
   {1, 0, JAM1, 40, 40, &Font,   
   "zones in the following manner:",
    &itr_txt2[1]},
   {1, 0, JAM1, 40, 60, &Font,
   "         Number of Iterations                Allowable Zones",
    &itr_txt2[2]},   
   {1, 0, JAM1, 40, 70, &Font,   
   "        ----------------------              -----------------",
    &itr_txt2[3]},   
   {1, 0, JAM1, 40, 90, &Font,   
   "                  25                              1 - 25",
    &itr_txt2[4]},   
   {1, 0, JAM1, 40, 100, &Font,   
   "                  50                              1 - 38",
    &itr_txt2[5]},   
   {1, 0, JAM1, 40, 110, &Font,   
   "                  75                              1 - 50",
    &itr_txt2[6]},   
   {1, 0, JAM1, 40, 120, &Font,   
   "                  100                             1 - 63",
    &itr_txt2[7]},   
   {1, 0, JAM1, 40, 130, &Font,   
   "                  125                             1 - 75",
    &itr_txt2[8]},   
   {1, 0, JAM1, 40, 140, &Font,   
   "                  175                             1 - 100",
    &itr_txt2[9]},   
   {1, 0, JAM1, 40, 150, &Font,   
   "                  225                             1 - 125",
    &itr_txt2[10]},   
   {1, 0, JAM1, 40, 160, &Font,   
   "                  275                             1 - 150",
    &itr_txt2[11]},   
   {1, 0, JAM1, 40, 170, &Font,   
   "                  325                             1 - 175",
    &itr_txt2[12]},   
   {1, 0, JAM1, 40, 180, &Font,   
   "                  375                             1 - 200",
    &itr_txt2[13]},   
   {1, 0, JAM1, 40, 200, &Font,
   "Keep in mind that whatever number you select for the iterations,",
    &itr_txt2[14]},   
   {1, 0, JAM1, 40, 210, &Font,   
   "the program will use all of the allowable number of zones for that",
    &itr_txt2[15]},   
   {1, 0, JAM1, 40, 220, &Font,   
   "choice.  So if you have color numbers in the zones that you don't",
    &itr_txt2[16]},   
   {1, 0, JAM1, 40, 230, &Font,   
   "like or are unaware of, you should reset them to what you want.",
    &itr_txt2[17]},   
   {1, 0, JAM1, 40, 240, &Font,   
   "SEE Color Zones for more information on its requesters and ",
    &itr_txt2[18]},   
   {1, 0, JAM1, 40, 250, &Font,   
   "interaction with iterations.",
    NULL}
   };
   
   
struct IntuiText cz_txt1[29] =
  {   
   {1, 0, JAM1, 40, 40, &Font,    
   "                             Color Zones",
    &cz_txt1[1]},    
   {1, 0, JAM1, 40, 60, &Font,   
   "This menu item has two different choices: Zones 1 - 100, and Zones",
    &cz_txt1[2]},   
   {1, 0, JAM1, 40, 70, &Font,   
   "101 - 200.  Each of these requesters is used in defining the color",
    &cz_txt1[3]},   
   {1, 0, JAM1, 40, 80, &Font,   
   "that will be used by the program to color your fractal.  You should",
    &cz_txt1[4]},   
   {1, 0, JAM1, 40, 90, &Font,   
   "enter a number between 0 and 15 into the zone gadgets that are",
    &cz_txt1[5]},   
   {1, 0, JAM1, 40, 100, &Font,   
   "useable (i.e. the allowable number of zones).  If there is currently",
    &cz_txt1[6]},   
   {1, 0, JAM1, 40, 110, &Font,   
   "a number there and you don't want to change it, that's o.k. just",
    &cz_txt1[7]},   
   {1, 0, JAM1, 40, 120, &Font,   
   "leave it that way.  But, something MUST be in each allowable gadget",
    &cz_txt1[8]},   
   {1, 0, JAM1, 40, 130, &Font,   
   "or you will experience problems.  Additionally, if you try to enter",
    &cz_txt1[9]},   
   {1, 0, JAM1, 40, 140, &Font,   
   "a number outside of the legal range, you will see a screen flash and",
    &cz_txt1[10]},  
   {1, 0, JAM1, 40, 150, &Font,   
   "the number will not be allowed.  In any case, you should ALWAYS click",
    &cz_txt1[11]},   
   {1, 0, JAM1, 40, 160, &Font,   
   "the o.k. gadget regardless of what you do so that the program can",
    &cz_txt1[12]},   
   {1, 0, JAM1, 40, 170, &Font,   
   "accept the values from the gadgets.  If you are experiencing a black",
    &cz_txt1[13]},   
   {1, 0, JAM1, 40, 180, &Font,   
   "picture every time you are generating a fractal, the problem could be",
    &cz_txt1[14]},   
   {1, 0, JAM1, 40, 190, &Font,   
   "that you have not given the program permission to use any colors to",
    &cz_txt1[15]},   
   {1, 0, JAM1, 40, 200, &Font,   
   "color your fractal!",
    &cz_txt1[16]},   
   {1, 0, JAM1, 40, 210, &Font,   
   "     The iteration number controls how many zones you will be allowed",
    &cz_txt1[17]},   
   {1, 0, JAM1, 40, 220, &Font,   
   "to use for defining the coloring of your fractal.  There is a",
    &cz_txt1[18]},   
   {1, 0, JAM1, 40, 230, &Font,    
   "complete breakdown of how this is done in the Iterations information.",
    &cz_txt1[19]},   
   {1, 0, JAM1, 40, 240, &Font,   
   "     Explaining the process that is going on here will not be an easy",
    &cz_txt1[20]},   
   {1, 0, JAM1, 40, 250, &Font,   
   "task, but I will try to keep it simple.  One day while developing this",
    &cz_txt1[21]},   
   {1, 0, JAM1, 40, 260, &Font,   
   "program, I noticed that a binary fractal (meaning a fractal consisting",
    &cz_txt1[22]},   
   {1, 0, JAM1, 40, 270, &Font,   
   "of only two colors - namely black and white) had very distinct zones.",
    &cz_txt1[23]},   
   {1, 0, JAM1, 40, 280, &Font,   
   "I tried to count the zones to see how many there was, but as the",
    &cz_txt1[24]},   
   {1, 0, JAM1, 40, 290, &Font,   
   "number of zones increased it became increasingly difficult to see",
    &cz_txt1[25]},   
   {1, 0, JAM1, 40, 300, &Font,   
   "where one stopped and the next one started.  Approximately 25 zones",
    &cz_txt1[26]},   
   {1, 0, JAM1, 40, 310, &Font,   
   "could be seen clearly on the Mandelbrot set that I had generated so",
    &cz_txt1[27]},   
   {1, 0, JAM1, 40, 320, &Font,   
   "the lowest number of allowable zones is 25; which corresponds to an",
    &cz_txt1[28]},   
   {1, 0, JAM1, 40, 330, &Font,   
   "iteration number of 25.  The Map is an exemplary generation of the",
    NULL}
   };
   
struct IntuiText cz_txt2[30] =
  {   
   {1, 0, JAM1, 40, 40, &Font,    
   "Mandelbrot set, and the very first color on the Map (in either the",
    &cz_txt2[1]},   
   {1, 0, JAM1, 40, 50, &Font,   
   "upper or lower left hand corner) corresponds to Zone #1.  You could",
    &cz_txt2[2]},   
   {1, 0, JAM1, 40, 60, &Font,   
   "begin counting from there to determine how many zones you can",
    &cz_txt2[3]},   
   {1, 0, JAM1, 40, 70, &Font,   
   "identify, but unfortunately this number is not uniform for all",
    &cz_txt2[4]},   
   {1, 0, JAM1, 40, 80, &Font,    
   "fractals; that is, a different fractal (esp. one where the iteration",
    &cz_txt2[5]},   
   {1, 0, JAM1, 40, 90, &Font,   
   "number is increased or the magnification factor is higher) will have",
    &cz_txt2[6]},   
   {1, 0, JAM1, 40, 100, &Font,   
   "different zones.  Even if the allowable number is at its maximum, some",
    &cz_txt2[7]},   
   {1, 0, JAM1, 40, 110, &Font,   
   "of the lower color zones may never be used (they still have to be",
    &cz_txt2[8]},   
   {1, 0, JAM1, 40, 120, &Font,   
   "specified though since their individual usage is about as chaotic",
    &cz_txt2[9]},   
   {1, 0, JAM1, 40, 130, &Font,   
   "as the fractal itself, and I don't know of anyway to predict which",
    &cz_txt2[10]},   
   {1, 0, JAM1, 40, 140, &Font,   
   "zones will be used).  These zones directly define the escape",
    &cz_txt2[11]},   
   {1, 0, JAM1, 40, 150, &Font,   
   "sequences of the fractal; that is, they make up the shape that you",
    &cz_txt2[12]},   
   {1, 0, JAM1, 40, 160, &Font,   
   "see once it has been generated.  If you only wanted to use two",
    &cz_txt2[13]},   
   {1, 0, JAM1, 40, 170, &Font,
   "colors, then you would include only those two colors in each",
    &cz_txt2[14]},   
   {1, 0, JAM1, 40, 180, &Font,   
   "allowable color zone and alternate them back and forth.  Since you",
    &cz_txt2[15]},   
   {1, 0, JAM1, 40, 190, &Font,   
   "only have a maximum of 16 colors, the planning of this part of the",
    &cz_txt2[16]},   
   {1, 0, JAM1, 40, 200, &Font,   
   "program is critical.  If you use all 16 colors and you spread them",
    &cz_txt2[17]},   
   {1, 0, JAM1, 40, 210, &Font,   
   "around wildly throughout the allowable zones, your end result may",
    &cz_txt2[18]},   
   {1, 0, JAM1, 40, 220, &Font,   
   "look too ""busy""; by that, I mean the colors won't have a good",
    &cz_txt2[19]},   
   {1, 0, JAM1, 40, 230, &Font,   
   "definition to them and it will be difficult to see the seperation",
    &cz_txt2[20]},   
   {1, 0, JAM1, 40, 240, &Font,   
   "of the zones.  You can remedy that problem by selecting one color",
    &cz_txt2[21]},   
   {1, 0, JAM1, 40, 250, &Font,   
   "for several consecutive zones; thereby making a wider zone of color",
    &cz_txt2[22]},   
   {1, 0, JAM1, 40, 260, &Font,   
   "and adding more distinction between zones.  Perhaps now you realize",
    &cz_txt2[23]},   
   {1, 0, JAM1, 40, 270, &Font,   
   "how a different looking fractal can be generated from the same area",
    &cz_txt2[24]},   
   {1, 0, JAM1, 40, 280, &Font,   
   "using the same colors; all you have to do is change how the zones",
    &cz_txt2[25]},   
   {1, 0, JAM1, 40, 290, &Font,    
   "are defined.",
    &cz_txt2[26]},   
   {1, 0, JAM1, 40, 300, &Font,   
   "    This is, by far, the hardest part of the program to understand",
    &cz_txt2[27]},   
   {1, 0, JAM1, 40, 310, &Font,   
   "and to visualize, and it is also the most important part of",
    &cz_txt2[28]},   
   {1, 0, JAM1, 40, 320, &Font,    
   "generating a good fractal.  It takes time and practice to know how",
    &cz_txt2[29]},   
   {1, 0, JAM1, 40, 330, &Font,   
   "you should define your zones, but you can learn how to do this",
    NULL}
   };
   

struct IntuiText cz_txt3[9] =
  {   
   {1, 0, JAM1, 40, 40, &Font,    
   "effectively.  I suggest that you start with a smaller drawing area",
    &cz_txt3[1]},   
   {1, 0, JAM1, 40, 50, &Font,   
   "as well as a lower number of iterations (if that is possible,",
    &cz_txt3[2]},    
   {1, 0, JAM1, 40, 60, &Font,   
   "remember if your magnification factor is high you'll need more",
    &cz_txt3[3]},   
   {1, 0, JAM1, 40, 70, &Font,   
   "iterations and more color zones).  Try your color zone definition",
    &cz_txt3[4]},   
   {1, 0, JAM1, 40, 80, &Font,   
   "out and see what you think.  If you don't like it, go in and make",
    &cz_txt3[5]},   
   {1, 0, JAM1, 40, 90, &Font,   
   "some changes to your definitions paying close attention to how they",
    &cz_txt3[6]},   
   {1, 0, JAM1, 40, 100, &Font,   
   "affect the next generation of the fractal.  Before long you will",
    &cz_txt3[7]},    
   {1, 0, JAM1, 40, 110, &Font,   
   "begin to see how you can manipulate the color zones and you'll be",
    &cz_txt3[8]},
   {1, 0, JAM1, 40, 120, &Font,    
   "on your way to generating beautiful fractals.",
    NULL}
   };


struct IntuiText dc_txt[7] =
  {   
   {1, 0, JAM1, 40, 40, &Font,
   "                           Default Colors",
    &dc_txt[1]},   
   {1, 0, JAM1, 40, 60, &Font,   
   "This small requester serves only one purpose; to show you what the",
    &dc_txt[2]},   
   {1, 0, JAM1, 40, 70, &Font,   
   "default system colors are while naming them.  If you are using the",
    &dc_txt[3]},   
   {1, 0, JAM1, 40, 80, &Font,   
   "Modify Colors requester you will see a gadget that is named default.",
    &dc_txt[4]},   
   {1, 0, JAM1, 40, 90, &Font,   
   "Clicking this gadget will reset the system colors back to the way",
    &dc_txt[5]},   
   {1, 0, JAM1, 40, 100, &Font,   
   "they were originally defined.  You cannot reset the colors by using",
    &dc_txt[6]},   
   {1, 0, JAM1, 40, 110, &Font,   
   "this requester.",
    NULL}
   };


struct IntuiText abt_txt[12] =
  {   
   {1, 0, JAM1, 40, 40, &Font,
   "                                About",
    &abt_txt[1]},   
   {1, 0, JAM1, 40, 60, &Font,   
   "My name is Steven Dillon, and I am currently a Senior at Grand",
    &abt_txt[2]},   
   {1, 0, JAM1, 40, 70, &Font,   
   "Valley State University where I am majoring in Computer Science.  I",
    &abt_txt[3]},   
   {1, 0, JAM1, 40, 80, &Font,   
   "am concurrently getting a minor in math.  If you have any questions",
    &abt_txt[4]},   
   {1, 0, JAM1, 40, 90, &Font,   
   "or comments about this program or the source code that is included,",
    &abt_txt[5]},   
   {1, 0, JAM1, 40, 100, &Font,   
   "feel free to contact me at the following address:",
    &abt_txt[6]},   
   {1, 0, JAM1, 40, 120, &Font,   
   "6157 - 5 Woodfield Place S.E.",
    &abt_txt[7]},   
   {1, 0, JAM1, 40, 130, &Font,   
   "Grand Rapids, MI 49548",
    &abt_txt[8]},   
   {1, 0, JAM1, 40, 150, &Font,   
   "This program and its contents are being donated to the public domain",
    &abt_txt[9]},   
   {1, 0, JAM1, 40, 160, &Font,   
   "with one request: If you use any of the source code or modify it",
    &abt_txt[10]},   
   {1, 0, JAM1, 40, 170, &Font,   
   "for your own usage, please include the fact that you borrowed it from",
    &abt_txt[11]},   
   {1, 0, JAM1, 40, 180, &Font,   
   "this program.",
    NULL}
   };


struct IntuiText las_txt1[29] =
  {   
   {1, 0, JAM1, 40, 40, &Font,
   "                             Load & Save",
    &las_txt1[1]},   
   {1, 0, JAM1, 40, 60, &Font,   
   "Load and Save both have two important choices to consider: ILBM, and",
    &las_txt1[2]},   
   {1, 0, JAM1, 40, 70, &Font,   
   "Parameters.  If you choose the ILBM option, then the program expects",
    &las_txt1[3]},   
   {1, 0, JAM1, 40, 80, &Font,   
   "you to either load or save an ILBM file, and if you choose the",
    &las_txt1[4]},   
   {1, 0, JAM1, 40, 90, &Font,   
   "parameters option, the program expects you to either load or save a",
    &las_txt1[5]},   
   {1, 0, JAM1, 40, 100, &Font,   
   "parameters file.  These will be explained in further detail later.",
    &las_txt1[6]},   
   {1, 0, JAM1, 40, 110, &Font,     
   "After selecting the ILBM or Parameters choice you will see the File",
    &las_txt1[7]},   
   {1, 0, JAM1, 40, 120, &Font,   
   "Manager window/requester.  The File Manager's default drawer is df1:",
    &las_txt1[8]},   
   {1, 0, JAM1, 40, 130, &Font,   
   "so it will be looking there initially.  You can change the drawer to",
    &las_txt1[9]},   
   {1, 0, JAM1, 40, 140, &Font,   
   "look at df0:, but I'm not sure if this will work with a hard drive as",
    &las_txt1[10]},   
   {1, 0, JAM1, 40, 150, &Font,   
   "I haven't been able to afford one yet!  You can then click on the",
    &las_txt1[11]},   
   {1, 0, JAM1, 40, 160, &Font,   
   "file name (if you are loading a file) or type something in the file",
    &las_txt1[12]},   
   {1, 0, JAM1, 40, 170, &Font,   
   "name gadget after you click in it.  This is not a difficult requester",
    &las_txt1[13]},   
   {1, 0, JAM1, 40, 180, &Font,   
   "to get the hang of, and with very little usage you'll be able to do",
    &las_txt1[14]},   
   {1, 0, JAM1, 40, 190, &Font,   
   "what you want with it easily.",
    &las_txt1[15]},   
    {1, 0, JAM1, 40, 200, &Font,  
    "     The ILBM option either saves or loads an ILBM file.  Once saved",
    &las_txt1[16]},    
   {1, 0, JAM1, 40, 210, &Font,    
   "you can use the file in any program that accepts the standard format",
    &las_txt1[17]},   
   {1, 0, JAM1, 40, 220, &Font,   
   "for an ILBM file (as far as I know).  I can say that I haven't had",
    &las_txt1[18]},   
   {1, 0, JAM1, 40, 230, &Font,   
   "any problems with loading my saved ILBM's into the Deluxe Paint",
    &las_txt1[19]},   
   {1, 0, JAM1, 40, 240, &Font,   
   "environment.  You can view a saved ILBM by using the Load - ILBM",
    &las_txt1[20]},   
   {1, 0, JAM1, 40, 250, &Font,   
   "option.  Once there, you will receive instructions from the program,",
    &las_txt1[21]},   
   {1, 0, JAM1, 40, 260, &Font,   
   "at the top of the screen, on how to exit from this option.",
    &las_txt1[22]},   
   {1, 0, JAM1, 40, 270, &Font,   
   "     The Parameters option saves or loads a parameters file.",
    &las_txt1[23]},   
   {1, 0, JAM1, 40, 280, &Font,   
   "Several parameters are saved or loaded during this operation.  The",
    &las_txt1[24]},   
   {1, 0, JAM1, 40, 290, &Font,   
   "list of items saved or loaded is as follows: the drawing area",
    &las_txt1[25]},   
   {1, 0, JAM1, 40, 300, &Font,    
   "parameters which includes the drawing area and its location; the",
    &las_txt1[26]},   
   {1, 0, JAM1, 40, 310, &Font,   
   "currently defined fractal values; the iterations number; the",
    &las_txt1[27]},   
   {1, 0, JAM1, 40, 320, &Font,    
   "currently defined system colors; and the numbers currently defined",
    &las_txt1[28]},   
   {1, 0, JAM1, 40, 330, &Font,   
   "in the allowable zones.  The program knows which respective values",
    NULL}
   };
   
   
struct IntuiText las_txt2[25] =
  {   
   {1, 0, JAM1, 40, 40, &Font,
   "to save and/or load so you don't have to worry about saving or",
    &las_txt2[1]},   
   {1, 0, JAM1, 40, 50, &Font,    
   "loading unnecessary or unwanted information during this process.",
    &las_txt2[2]},   
   {1, 0, JAM1, 40, 60, &Font,   
   "You won't be able to use this option to load any other type of",
    &las_txt2[3]},   
   {1, 0, JAM1, 40, 70, &Font,   
   "files though because when the Parameters file is saved it has a",
    &las_txt2[4]},   
   {1, 0, JAM1, 40, 80, &Font,    
   "special header on it that tells the program it's o.k. to load it",
    &las_txt2[5]},   
   {1, 0, JAM1, 40, 90, &Font,   
   "back in, and the program will insist that the header is present or",
    &las_txt2[6]},   
   {1, 0, JAM1, 40, 100, &Font,   
   "it won't allow the loading of the file to take place.  The",
    &las_txt2[7]},   
   {1, 0, JAM1, 40, 110, &Font,    
   "Parameters file can be useful if you like the fractal you've",
    &las_txt2[8]},   
   {1, 0, JAM1, 40, 120, &Font,   
   "generated and you want to save the program definitions.  You could",
    &las_txt2[9]},   
   {1, 0, JAM1, 40, 130, &Font,   
   "then use these definitions to generate a similar fractal, to use",
    &las_txt2[10]},   
   {1, 0, JAM1, 40, 140, &Font,   
   "the color zones you saved in a different area, or to just use the",
    &las_txt2[11]},   
   {1, 0, JAM1, 40, 150, &Font,   
   "particular blend of colors you have in your palette for a new",
    &las_txt2[12]},   
   {1, 0, JAM1, 40, 160, &Font,   
   "fractal.",
    &las_txt2[13]},   
   {1, 0, JAM1, 40, 170, &Font,    
   "     You will find examples of both ILBM files and Parameters files",
    &las_txt2[14]},   
   {1, 0, JAM1, 40, 180, &Font,   
   "included on this disk.  The ILBM files will be in the Drawings",
    &las_txt2[15]},   
   {1, 0, JAM1, 40, 190, &Font,    
   "directory, and the Parameters files will be in the Parameters",
    &las_txt2[16]},   
   {1, 0, JAM1, 40, 200, &Font,   
   "directory.  The ILBM files have an extension that immediately",
    &las_txt2[17]},   
   {1, 0, JAM1, 40, 210, &Font,   
   "identifies them (.ILBM), and I have adopted a similar convention",
    &las_txt2[18]},   
   {1, 0, JAM1, 40, 220, &Font,   
   "for the Parameters files (.prms) - NOTE - this is not",
    &las_txt2[19]},   
   {1, 0, JAM1, 40, 230, &Font,    
   "automatically done by the program during a save; it is a method",
    &las_txt2[20]},   
   {1, 0, JAM1, 40, 240, &Font,    
   "that I have been using, and you need not follow it if you don't",
    &las_txt2[21]},   
   {1, 0, JAM1, 40, 250, &Font,   
   "want to.  I suggest that if you stick with this practice, you",
    &las_txt2[22]},   
   {1, 0, JAM1, 40, 260, &Font,    
   "should name both files the same name and then just change the",
    &las_txt2[23]},   
   {1, 0, JAM1, 40, 270, &Font,   
   "extension; that way you have a picture of what you've saved to",
    &las_txt2[24]},   
   {1, 0, JAM1, 40, 280, &Font,   
   "help you remember what was generated using those definitions.",
    NULL}
  };
  
struct IntuiText *TextArray[] = 
   { &prg_txt1[0], &prg_txt2[0], &fv_txt1[0], &fv_txt2[0], &fv_txt3[0],
     &map_txt[0], &itr_txt1[0], &itr_txt2[0], &drwa_txt[0], &drw_txt1[0], 
     &drw_txt2[0], &cz_txt1[0], &cz_txt2[0], &cz_txt3[0], &mod_txt[0], 
     &dc_txt[0], &las_txt1[0], &las_txt2[0], &abt_txt[0] };

struct Requester in_requester;

SHORT sub_num, min_txt, max_txt;

BOOL go, next_gadg, prev_gadg, next_set, prev_set;

ULONG class;

int item;

/**************************************************************************

                I N F O R M A T I O N   R E Q U E S T E R

**************************************************************************/


Info_requester(FirstWindow,op_code)
struct Window *FirstWindow;
SHORT op_code;
  {
   void processMessages();
   
   switch(op_code)
     {
       case 0: sub_num = 0;
               min_txt = 0;
               max_txt = 1;
               next_gadg = TRUE;
               prev_gadg = FALSE;
               break;
               
       case 1: sub_num = 2;
               min_txt = 2; 
               max_txt = 4;
               next_gadg = TRUE;
               prev_gadg = FALSE;
               break;
               
       case 2: sub_num = 5;
               min_txt = 5;
               max_txt = 5;
               next_gadg = FALSE;
               prev_gadg = FALSE;
               break;
               
       case 3: sub_num = 6;
               min_txt = 6;
               max_txt = 7;
               next_gadg = TRUE;
               prev_gadg = FALSE;
               break;

       case 4: sub_num = 8;
               min_txt = 8;
               max_txt = 8;
               next_gadg = FALSE;
               prev_gadg = FALSE;
               break;
               
       case 5: sub_num = 9;
               min_txt = 9;
               max_txt = 10;
               next_gadg = TRUE;
               prev_gadg = FALSE;
               break;       
             
       case 6: sub_num = 11;
               min_txt = 11;
               max_txt = 13;
               next_gadg = TRUE;
               prev_gadg = FALSE;
               break;
               
       case 7: sub_num = 14;
               min_txt = 14;
               max_txt = 14;
               next_gadg = FALSE;
               prev_gadg = FALSE;
               break;             

       case 8: sub_num = 15;
               min_txt = 15;
               max_txt = 15;
               next_gadg = FALSE;
               prev_gadg = FALSE;
               break;
               
       case 9: sub_num = 16;
               min_txt = 16;
               max_txt = 17;
               next_gadg = TRUE;
               prev_gadg = FALSE;
               break;

       case 10: sub_num = 18;
                min_txt = 18;
                max_txt = 18;
                next_gadg = FALSE;
                prev_gadg = FALSE;
                break;
                
     } /*  Close off op_code switch  */    
          
   go = TRUE;

   if(DrawWindow == TRUE)
     {
      WindowToBack(NoBorder);
     }
        
   ModifyIDCMP(FirstWindow, NULL);   
   ModifyIDCMP(FirstWindow, GADGETUP | REQCLEAR); 
   make_request(FirstWindow);
   if(next_gadg)
     {
      OnGadget(&in_Next_gadg, FirstWindow, &in_requester);
     }
   else
      OffGadget(&in_Next_gadg, FirstWindow, &in_requester);
     
   OffGadget(&in_Prev_gadg, FirstWindow, &in_requester);
     
   while(go)
    {
     Wait(1 << FirstWindow->UserPort->mp_SigBit); 
     while(message = (struct IntuiMessage *)
        GetMsg(FirstWindow->UserPort))
       {
        class = message->Class;
        item = ((struct Gadget *) message->IAddress)->GadgetID;        
        ReplyMsg(message);

       } /* while message */

     processMessages(class, item);

     if(go)
       { 
         make_request(FirstWindow);

         if(!(next_gadg) && next_set)
           {
            OnGadget(&in_Next_gadg, FirstWindow, &in_requester);
            next_gadg = TRUE;
           }
         else if(next_gadg && !(next_set))
           {
            OffGadget(&in_Next_gadg, FirstWindow, &in_requester);
            next_gadg = FALSE;
           }
             
         if(!(prev_gadg) && prev_set)
           {
            OnGadget(&in_Prev_gadg, FirstWindow, &in_requester);
            prev_gadg = TRUE;
           }
         else if(prev_gadg && !(prev_set))
           {
            OffGadget(&in_Prev_gadg, FirstWindow, &in_requester);
            prev_gadg = FALSE;
           }
           
         ModifyIDCMP(FirstWindow, NULL);   
         ModifyIDCMP(FirstWindow, GADGETUP | REQCLEAR);            
           
       } /* if go */         
       
    } /**** While go ****/

   if(DrawWindow == TRUE)
     {
      WindowToFront(NoBorder);
     }    
    
   return(TRUE);

  } /**** Close Off Information ****/


make_request(FirstWindow)
struct Window *FirstWindow;
  {
   InitRequester(&in_requester);
 
   in_requester.LeftEdge = 0;
   in_requester.TopEdge = 10;
   in_requester.Width = 640;
   in_requester.Height = 390;
   in_requester.ReqGadget = &in_Quit_gadg;
   in_requester.ReqText = TextArray[sub_num];
   in_requester.BackFill = 2;
   in_requester.Flags = NULL;
   in_requester.ReqBorder = &in_border1;

   Request(&in_requester,FirstWindow);
   return(TRUE);
  }


void processMessages(class, item)
ULONG class;
int item;
  { 
        if(class == REQCLEAR)
          {
            go = FALSE;
          }
            
        if(class == GADGETUP)
          {
            switch(item)
              {
                case 2:  EndRequest(&in_requester,FirstWindow);
                         if (sub_num + 1 == max_txt)
                           {
                             sub_num = sub_num + 1;
                             prev_set = TRUE;
                             next_set = FALSE;
                           } 
                         if (sub_num + 1 < max_txt)
                           {
                             sub_num = sub_num + 1;
                             prev_set = TRUE;
                             next_set = TRUE;
                           }
                         break;

                case 3:  EndRequest(&in_requester,FirstWindow);
                         if (sub_num - 1 == min_txt)
                           {
                             sub_num = sub_num - 1;
                             next_set = TRUE;
                             prev_set = FALSE;
                           }
                         if (sub_num - 1 > min_txt)
                           {
                             sub_num = sub_num - 1;
                             next_set = TRUE;
                             prev_set = TRUE;
                           }
                         break;
                         
              } /* switch */                          
 
          } /* if */              

  } /* processMessages */ 


