/* hypocycloid3.c */
/* based on the articles on cycloids in Creative Computing May-June 1984
and the article in February 1984 BYTE "Five Original Graphics" */

void IMsg();
int stopcheck();

/* Include the definitions  and functions we need */

#include "hypocycloid2.h"
#include "hypo2.c"
#include "palette.c"
#include "save.c"
#include "newradii.c"

struct IntuiText Menu0IText [] = {

   {
   0,3,JAM2,      /* Front Pen, Back Pen, Draw Mode */
   0,0,            /* Left Edge, Top Edge */
   &TestFont,         /* pointer to Text Font */
   " new ",   /* text of Menu Item */
   NULL            /* pointer to next IText */
   },

   {0,3,JAM2,0,0,&TestFont," go  ",NULL },
   {0,3,JAM2,0,0,&TestFont,"stop ",NULL },
   {0,3,JAM2,0,0,&TestFont,"cycle",NULL },
   {0,3,JAM2,0,0,&TestFont,"color",NULL },
   {0,3,JAM2,0,0,&TestFont,"save ",NULL },
   {0,3,JAM2,0,0,&TestFont,"clear",NULL },
   {0,3,JAM2,0,0,&TestFont,"quit ",NULL },
};

struct MenuItem Menu0Item[8] = {
   {
   &Menu0Item[1],         /* pointer to next Item */
   0,0,50,9,      /* Left, Top, Width, Height */
   ITEMTEXT | ITEMENABLED | HIGHCOMP,   /* Flags */
   0,            /*  no mutual exclude */
   (APTR)&Menu0IText[0],   /* Render info */   
   NULL,NULL,NULL,         /*Alt Image, Command (amiga) char, subitem*/
   MENUNULL      /* next select */
   },

   {&Menu0Item[2],0,9,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP,
   0,(APTR)&Menu0IText[1],NULL,NULL,NULL,MENUNULL},

   {&Menu0Item[3],0,18,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP,
   0,(APTR)&Menu0IText[2],NULL,NULL,NULL,MENUNULL},

   {&Menu0Item[4],0,27,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP,
   0,(APTR)&Menu0IText[3],NULL,NULL,NULL,MENUNULL},

   {&Menu0Item[5],0,36,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP,
   0,(APTR)&Menu0IText[4],NULL,NULL,NULL,MENUNULL},

   {&Menu0Item[6],0,45,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP,
   0,(APTR)&Menu0IText[5],NULL,NULL,NULL,MENUNULL},

   {&Menu0Item[7],0,54,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP,
   0,(APTR)&Menu0IText[6],NULL,NULL,NULL,MENUNULL},

   {NULL,0,63,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP,
   0,(APTR)&Menu0IText[7],NULL,NULL,NULL,MENUNULL}
};

struct IntuiText Menu1IText [] = {

   {
   0,3,JAM2,      /* Front Pen, Back Pen, Draw Mode */
   0,0,            /* Left Edge, Top Edge */
   &TestFont,         /* pointer to Text Font */
   " 0.00",   /* text of Menu Item */
   NULL            /* pointer to next IText */
   },

   {0,3,JAM2,0,0,&TestFont," 0.25",NULL },
   {0,3,JAM2,0,0,&TestFont," 0.50",NULL },
   {0,3,JAM2,0,0,&TestFont," 0.75",NULL },
   {0,3,JAM2,0,0,&TestFont," 1.00",NULL },
   {0,3,JAM2,0,0,&TestFont," 1.25",NULL },
   {0,3,JAM2,0,0,&TestFont," 1.50",NULL },
   {0,3,JAM2,0,0,&TestFont," 1.75",NULL },
   {0,3,JAM2,0,0,&TestFont," 2.00",NULL },
   {0,3,JAM2,0,0,&TestFont," 2.50",NULL },
};

struct MenuItem Menu1Item[10] = {
   {
   &Menu1Item[1],         /* pointer to next Item */
   0,0,50,9,      /* Left, Top, Width, Height */
   ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,   /* Flags */
   (~(1 << 0)),            /* mutual exclude */
   (APTR)&Menu1IText[0],   /* Render info */
   NULL,NULL,NULL,         /*Alt Image, Command (amiga) char, subitem*/
   MENUNULL      /* next select */
   },

   {&Menu1Item[2],0,9,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 1)),(APTR)&Menu1IText[1],NULL,NULL,NULL,MENUNULL},

   {&Menu1Item[3],0,18,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 2)),(APTR)&Menu1IText[2],NULL,NULL,NULL,MENUNULL},

   {&Menu1Item[4],0,27,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 3)),(APTR)&Menu1IText[3],NULL,NULL,NULL,MENUNULL},

   {&Menu1Item[5],0,36,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT | CHECKED,
   (~(1 << 4)),(APTR)&Menu1IText[4],NULL,NULL,NULL,MENUNULL},

   {&Menu1Item[6],0,45,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 5)),(APTR)&Menu1IText[5],NULL,NULL,NULL,MENUNULL},

   {&Menu1Item[7],0,54,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 6)),(APTR)&Menu1IText[6],NULL,NULL,NULL,MENUNULL},

   {&Menu1Item[8],0,63,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 7)),(APTR)&Menu1IText[7],NULL,NULL,NULL,MENUNULL},

   {&Menu1Item[9],0,72,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 8)),(APTR)&Menu1IText[8],NULL,NULL,NULL,MENUNULL},

   {NULL,0,81,50,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 9)),(APTR)&Menu1IText[9],NULL,NULL,NULL,MENUNULL}
};

struct IntuiText Menu2IText [] = {

   {
   0,3,JAM2,      /* Front Pen, Back Pen, Draw Mode */
   0,0,            /* Left Edge, Top Edge */
   &TestFont,         /* pointer to Text Font */
   "  0%",   /* text of Menu Item */
   NULL            /* pointer to next IText */
   },

   {0,3,JAM2,0,0,&TestFont," 10%",NULL },
   {0,3,JAM2,0,0,&TestFont," 20%",NULL },
   {0,3,JAM2,0,0,&TestFont," 30%",NULL },
};

struct MenuItem Menu2Item[4] = {
   {
   &Menu2Item[1],         /* pointer to next Item */
   0,0,40,9,      /* Left, Top, Width, Height */
   ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,   /* Flags */
   (~(1 << 0)),            /* mutual exclude */
   (APTR)&Menu2IText[0],   /* Render info */
   NULL,NULL,NULL,         /*Alt Image, Command (amiga) char, subitem*/
   MENUNULL      /* next select */
   },

   {&Menu2Item[2],0,9,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT | CHECKED,
   (~(1 << 1)),(APTR)&Menu2IText[1],NULL,NULL,NULL,MENUNULL},

   {&Menu2Item[3],0,18,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 2)),(APTR)&Menu2IText[2],NULL,NULL,NULL,MENUNULL},

   {NULL,0,27,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 3)),(APTR)&Menu2IText[3],NULL,NULL,NULL,MENUNULL}
};

struct IntuiText Menu3IText [] = {
   {
   0,3,JAM2,      /* Front Pen, Back Pen, Draw Mode */
   0,0,            /* Left Edge, Top Edge */
   &TestFont,         /* pointer to Text Font */
   " 10%",   /* text of Menu Item */
   NULL            /* pointer to next IText */
   },

   {0,3,JAM2,0,0,&TestFont," 20%",NULL },
   {0,3,JAM2,0,0,&TestFont," 30%",NULL },
   {0,3,JAM2,0,0,&TestFont," 40%",NULL },
   {0,3,JAM2,0,0,&TestFont," 50%",NULL },
   {0,3,JAM2,0,0,&TestFont," 60%",NULL },
   {0,3,JAM2,0,0,&TestFont," 70%",NULL },
   {0,3,JAM2,0,0,&TestFont," 80%",NULL },
};

struct MenuItem Menu3Item[8] = {
   {
   &Menu3Item[1],         /* pointer to next Item */
   0,0,40,9,      /* Left, Top, Width, Height */
   ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,   /* Flags */
   (~(1 << 0)),            /* mutual exclude */
   (APTR)&Menu3IText[0],   /* Render info */
   NULL,NULL,NULL,         /*Alt Image, Command (amiga) char, subitem*/
   MENUNULL      /* next select */
   },

   {&Menu3Item[2],0,9,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 1)),(APTR)&Menu3IText[1],NULL,NULL,NULL,MENUNULL},

   {&Menu3Item[3],0,18,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 2)),(APTR)&Menu3IText[2],NULL,NULL,NULL,MENUNULL},

   {&Menu3Item[4],0,27,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 3)),(APTR)&Menu3IText[3],NULL,NULL,NULL,MENUNULL},

   {&Menu3Item[5],0,36,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT | CHECKED,
   (~(1 << 4)),(APTR)&Menu3IText[4],NULL,NULL,NULL,MENUNULL},

   {&Menu3Item[6],0,45,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 5)),(APTR)&Menu3IText[5],NULL,NULL,NULL,MENUNULL},

   {&Menu3Item[7],0,54,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 6)),(APTR)&Menu3IText[6],NULL,NULL,NULL,MENUNULL},

   {NULL,0,63,40,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 7)),(APTR)&Menu3IText[7],NULL,NULL,NULL,MENUNULL}
};

struct IntuiText Menu4IText [] = {

   {
   0,3,JAM2,      /* Front Pen, Back Pen, Draw Mode */
   0,0,            /* Left Edge, Top Edge */
   &TestFont,         /* pointer to Text Font */
   "  0",   /* text of Menu Item */
   NULL            /* pointer to next IText */
   },

   {0,3,JAM2,0,0,&TestFont,"  3",NULL },
   {0,3,JAM2,0,0,&TestFont,"  6",NULL },
   {0,3,JAM2,0,0,&TestFont,"  9",NULL },
   {0,3,JAM2,0,0,&TestFont," 12",NULL },
   {0,3,JAM2,0,0,&TestFont," 15",NULL },
   {0,3,JAM2,0,0,&TestFont," 18",NULL },
   {0,3,JAM2,0,0,&TestFont," 21",NULL },
   {0,3,JAM2,0,0,&TestFont," 24",NULL },
   {0,3,JAM2,0,0,&TestFont," 30",NULL },
};

struct MenuItem Menu4Item[10] = {
   {
   &Menu4Item[1],         /* pointer to next Item */
   0,0,30,9,      /* Left, Top, Width, Height */
   ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,   /* Flags */
   (~(1 << 0)),            /* mutual exclude */
   (APTR)&Menu4IText[0],   /* Render info */
   NULL,NULL,NULL,         /*Alt Image, Command (amiga) char, subitem*/
   MENUNULL      /* next select */
   },

   {&Menu4Item[2],0,9,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 1)),(APTR)&Menu4IText[1],NULL,NULL,NULL,MENUNULL},

   {&Menu4Item[3],0,18,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 2)),(APTR)&Menu4IText[2],NULL,NULL,NULL,MENUNULL},

   {&Menu4Item[4],0,27,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT | CHECKED,
   (~(1 << 3)),(APTR)&Menu4IText[3],NULL,NULL,NULL,MENUNULL},

   {&Menu4Item[5],0,36,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 4)),(APTR)&Menu4IText[4],NULL,NULL,NULL,MENUNULL},

   {&Menu4Item[6],0,45,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 5)),(APTR)&Menu4IText[5],NULL,NULL,NULL,MENUNULL},

   {&Menu4Item[7],0,54,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 6)),(APTR)&Menu4IText[6],NULL,NULL,NULL,MENUNULL},

   {&Menu4Item[8],0,63,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 7)),(APTR)&Menu4IText[7],NULL,NULL,NULL,MENUNULL},

   {&Menu4Item[9],0,72,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 8)),(APTR)&Menu4IText[8],NULL,NULL,NULL,MENUNULL},

   {NULL,0,81,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 9)),(APTR)&Menu4IText[9],NULL,NULL,NULL,MENUNULL}
};

struct IntuiText Menu5IText [] = {

   {
   0,3,JAM2,      /* Front Pen, Back Pen, Draw Mode */
   0,0,            /* Left Edge, Top Edge */
   &TestFont,         /* pointer to Text Font */
   "  1",   /* text of Menu Item */
   NULL            /* pointer to next IText */
   },

   {0,3,JAM2,0,0,&TestFont,"  2",NULL },
   {0,3,JAM2,0,0,&TestFont,"  3",NULL },
   {0,3,JAM2,0,0,&TestFont,"  4",NULL },
   {0,3,JAM2,0,0,&TestFont,"  5",NULL },
   {0,3,JAM2,0,0,&TestFont,"  6",NULL },
   {0,3,JAM2,0,0,&TestFont,"  7",NULL },
   {0,3,JAM2,0,0,&TestFont,"  8",NULL },
   {0,3,JAM2,0,0,&TestFont,"  9",NULL },
   {0,3,JAM2,0,0,&TestFont," 10",NULL },
};

struct MenuItem Menu5Item[10] = {
   {
   &Menu5Item[1],         /* pointer to next Item */
   0,0,30,9,      /* Left, Top, Width, Height */
   ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,   /* Flags */
   (~(1 << 0)),            /* mutual exclude */
   (APTR)&Menu5IText[0],   /* Render info */
   NULL,NULL,NULL,         /*Alt Image, Command (amiga) char, subitem*/
   MENUNULL      /* next select */
   },

   {&Menu5Item[2],0,9,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 1)),(APTR)&Menu5IText[1],NULL,NULL,NULL,MENUNULL},

   {&Menu5Item[3],0,18,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 2)),(APTR)&Menu5IText[2],NULL,NULL,NULL,MENUNULL},

   {&Menu5Item[4],0,27,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT | CHECKED,
   (~(1 << 3)),(APTR)&Menu5IText[3],NULL,NULL,NULL,MENUNULL},

   {&Menu5Item[5],0,36,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 4)),(APTR)&Menu5IText[4],NULL,NULL,NULL,MENUNULL},

   {&Menu5Item[6],0,45,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 5)),(APTR)&Menu5IText[5],NULL,NULL,NULL,MENUNULL},

   {&Menu5Item[7],0,54,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 6)),(APTR)&Menu5IText[6],NULL,NULL,NULL,MENUNULL},

   {&Menu5Item[8],0,63,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 7)),(APTR)&Menu5IText[7],NULL,NULL,NULL,MENUNULL},

   {&Menu5Item[9],0,72,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 8)),(APTR)&Menu5IText[8],NULL,NULL,NULL,MENUNULL},

   {NULL,0,81,30,9,ITEMTEXT | ITEMENABLED | HIGHCOMP | CHECKIT,
   (~(1 << 9)),(APTR)&Menu5IText[9],NULL,NULL,NULL,MENUNULL}
};
struct Menu BdMenu[6] = {
   {
   &BdMenu[1],      /* ptr to next Menu */
   5,0,50,0,   /* left,top,width,height--top and height ignored */
   MENUENABLED,   /* Flags */
   "Main ",   /* menu title */
   &Menu0Item[0]   /* First Item in list */
   },
{&BdMenu[2],65,0,50,0,MENUENABLED," > < ",&Menu1Item[0]},
{&BdMenu[3],125,0,40,0,MENUENABLED,"-> <",&Menu2Item[0]},
{&BdMenu[4],175,0,40,0,MENUENABLED,"> <-",&Menu3Item[0]},
{&BdMenu[5],225,0,30,0,MENUENABLED,">>°",&Menu4Item[0]},
{NULL,265,0,50,0,MENUENABLED,"#COLS",&Menu5Item[0]}
};
int an,bd,col,cycle,cc,delay,ex,rr;
double bf,bl,cf,dd,l,z;
extern int aa,bb;
int sav;
UWORD color18, color19;

main()
{
   USHORT drawing;

   drawing=1;
   delay=9000;
   cycle=0;
   col=4;
   ex=0;
   cc=1.0;
   an=9;
   rr=1;
   bd=1;
   dd=360.0;
   bf=.1;
   cf=.5;
   l=0;
   bl=1.0;
   z=1;
   aa=5;
   bb=2;
   initwind();
   init_colors();
   init_scr();
   fillscreen();
   precalculate();
   doepic();
   while(drawing){
      IMsg();
   }
}   /* end of main */

void IMsg()

{
   struct IntuiMessage *BdMsg;      /* Intuition message structure */
   ULONG Mclass;               /* Message class */
   USHORT Mcode;            /* Message code */

   if (cycle==1)
      cyclecolors();

while (BdMsg = (struct IntuiMessage *)GetMsg(w->UserPort))
   {
   Mclass = BdMsg->Class;
   Mcode = BdMsg->Code;
   ReplyMsg(BdMsg);
   switch (Mclass) {
      case CLOSEWINDOW:
         clear_colors();
         Cleanup();
         exit(TRUE);
         break;

      case MENUPICK:
         switch (MENUNUM(Mcode)){
            case 0:
               switch (ITEMNUM(Mcode)){
                  case 0:
                     newradii(w);
                     break;
                  case 1:
                     doepic();
                     break;
                  case 2:
                     break;
                  case 3:
                     if (cycle==0)
                        cycle=1;
                     else
                        cycle=0;
                     break;
                  case 4:
                     palette(w);
                     break;
                  case 5:
                     sav=save(w);
                     if (sav == 1){
                        color18=GetRGB4(p_Co,18);
                        color19=GetRGB4(p_Co,19);
                        SetRGB4(vp,18,15,0,0);   /* red */
                        SetRGB4(vp,19,15,15,15); /* white */
                        SetPointer(w,&PointImage,14,16,0,0);
                        SavePicture();
                        ClearPointer(w);
                        *(p_ct+18)=(USHORT)color18;
                        *(p_ct+19)=(USHORT)color19;
                        LoadRGB4(vp,p_ct,CTSIZ);
                     }
                     break;
                  case 6:
                     fillscreen();
                     break;
                  case 7:
                     clear_colors();
                     Cleanup();
                     exit(TRUE);
                     break;
               }
               break;
            case 1:
               switch (ITEMNUM(Mcode)){
                  case 0:
                     cc=0;
                     break;
                  case 1:
                     cc=.25;
                     break;
                  case 2:
                     cc=.5;
                     break;
                  case 3:
                     cc=.75;
                     break;
                  case 4:
                     cc=1.0;
                     break;
                  case 5:
                     cc=1.25;
                     break;
                  case 6:
                     cc=1.5;
                     break;
                  case 7:
                     cc=1.75;
                     break;
                  case 8:
                     cc=2.0;
                     break;
                  case 9:
                     cc=2.5;
                     break;
               }
               break;
            case 2:
               switch (ITEMNUM(Mcode)){
                  case 0:
                     bf=0;
                     break;
                  case 1:
                     bf=.1;
                     break;
                  case 2:
                     bf=.2;
                     break;
                  case 3:
                     bf=.3;
                     break;
               }
               break;
            case 3:
               switch (ITEMNUM(Mcode)){
                  case 0:
                     cf=.1;
                     break;
                  case 1:
                     cf=.2;
                     break;
                  case 2:
                     cf=.3;
                     break;
                  case 3:
                     cf=.4;
                     break;
                  case 4:
                     cf=.5;
                     break;
                  case 5:
                     cf=.6;
                     break;
                  case 6:
                     cf=.7;
                     break;
                  case 7:
                     cf=.8;
                     break;
               }
               break;
            case 4:
               switch (ITEMNUM(Mcode)){
                  case 0:
                     an=0;
                     break;
                  case 1:
                     an=3;
                     break;
                  case 2:
                     an=6;
                     break;
                  case 3:
                     an=9;
                     break;
                  case 4:
                     an=12;
                     break;
                  case 5:
                     an=15;
                     break;
                  case 6:
                     an=18;
                     break;
                  case 7:
                     an=21;
                     break;
                  case 8:
                     an=24;
                     break;
                  case 9:
                     an=30;
                     break;
               }
               break;
            case 5:
               switch (ITEMNUM(Mcode)){
                  case 0:
                     col=1;
                     break;
                  case 1:
                     col=2;
                     break;
                  case 2:
                     col=3;
                     break;
                  case 3:
                     col=4;
                     break;
                  case 4:
                     col=5;
                     break;
                  case 5:
                     col=6;
                     break;
                  case 6:
                     col=7;
                     break;
                  case 7:
                     col=8;
                     break;
                  case 8:
                     col=9;
                     break;
                  case 9:
                     col=10;
                     break;
               }
               break;
         }
   } 
  /* end of Class switch */      
   }/* while */
}

init_scr()
{
 
SetMenuStrip(w,&BdMenu);

}   /* end of init_scr */

Cleanup()
{
   CloseWindow(w);
   CloseScreen(screen);
}

cyclecolors()
{
   int i,temp;

   temp=*(p_ct+5);
   for (i=5;i<=30;i++)
      *(p_ct+i)=*(p_ct+i+1);
   *(p_ct+31)=temp;
   LoadRGB4(vp,p_ct,CTSIZ);
   for (i=0;i<=delay;i++)
      ;
}

int stopcheck()

{
   struct IntuiMessage *BdMsg;      /* Intuition message structure */
   ULONG Mclass;               /* Message class */
   USHORT Mcode,ItemNum;

ex = 0;
while (BdMsg = (struct IntuiMessage *)GetMsg(w->UserPort))
   {
   Mclass = BdMsg->Class;
   Mcode = BdMsg->Code;
   ReplyMsg(BdMsg);
   switch (Mclass) {
      case CLOSEWINDOW:
         clear_colors();
         Cleanup();
         exit(TRUE);
         break;

      case MENUPICK:
         switch (MENUNUM(Mcode)){
            case 0:
               ItemNum = ITEMNUM(Mcode);
               switch (ItemNum){
                  case 0:
                     newradii(w);
                     break;
                  case 1:
                     break;
                  case 2:
                     ex = 1;
                     break;
                  case 3:
                     if (cycle==0)
                        cycle=1;
                     else
                        cycle=0;
                     break;
                  case 4:
                     palette(w);
                     break;
                  case 5:
                     sav=save(w);
                     if (sav==1){
                        color18=GetRGB4(p_Co,18);/* save current color 18 */
                        color19=GetRGB4(p_Co,19);/* save current color 19 */
                        SetRGB4(vp,18,15,0,0);   /* red */
                        SetRGB4(vp,19,15,15,15); /* white */
                        SetPointer(w,&PointImage,14,16,0,0);
                        SavePicture();
                        ClearPointer(w);
                        *(p_ct+18)=(USHORT)color18;
                        *(p_ct+19)=(USHORT)color19;
                        LoadRGB4(vp,p_ct,CTSIZ);  /* restore color table */
                     }
                     break;
                  case 6:
                     fillscreen();
                     break;
                  case 7:
                     clear_colors();
                     Cleanup();
                     exit(TRUE);
               }
               break;
            case 1:
               switch (ITEMNUM(Mcode)){
                  case 0:
                     cc=0;
                     break;
                  case 1:
                     cc=.25;
                     break;
                  case 2:
                     cc=.5;
                     break;
                  case 3:
                     cc=.75;
                     break;
                  case 4:
                     cc=1.0;
                     break;
                  case 5:
                     cc=1.25;
                     break;
                  case 6:
                     cc=1.5;
                     break;
                  case 7:
                     cc=1.75;
                     break;
                  case 8:
                     cc=2.0;
                     break;
                  case 9:
                     cc=2.5;
                     break;
               }
               break;
            case 2:
               switch (ITEMNUM(Mcode)){
                  case 0:
                     bf=0;
                     break;
                  case 1:
                     bf=.1;
                     break;
                  case 2:
                     bf=.2;
                     break;
                  case 3:
                     bf=.3;
                     break;
               }
               break;
            case 3:
               switch (ITEMNUM(Mcode)){
                  case 0:
                     cf=.1;
                     break;
                  case 1:
                     cf=.2;
                     break;
                  case 2:
                     cf=.3;
                     break;
                  case 3:
                     cf=.4;
                     break;
                  case 4:
                     cf=.5;
                     break;
                  case 5:
                     cf=.6;
                     break;
                  case 6:
                     cf=.7;
                     break;
                  case 7:
                     cf=.8;
                     break;
               }
               break;
            case 4:
               switch (ITEMNUM(Mcode)){
                  case 0:
                     an=0;
                     break;
                  case 1:
                     an=3;
                     break;
                  case 2:
                     an=6;
                     break;
                  case 3:
                     an=9;
                     break;
                  case 4:
                     an=12;
                     break;
                  case 5:
                     an=15;
                     break;
                  case 6:
                     an=18;
                     break;
                  case 7:
                     an=21;
                     break;
                  case 8:
                     an=24;
                     break;
                  case 9:
                     an=30;
                     break;
               }
               break;
            case 5:
               switch (ITEMNUM(Mcode)){
                  case 0:
                     col=1;
                     break;
                  case 1:
                     col=2;
                     break;
                  case 2:
                     col=3;
                     break;
                  case 3:
                     col=4;
                     break;
                  case 4:
                     col=5;
                     break;
                  case 5:
                     col=6;
                     break;
                  case 6:
                     col=7;
                     break;
                  case 7:
                     col=8;
                     break;
                  case 8:
                     col=9;
                     break;
                  case 9:
                     col=10;
                     break;
               }
               break;
         }
      } 
   }/* while */
   return(ex);
}
