/* polygon drawing routine based on Polygon Constructor by John Jainschigg
taken from Family Computing June 1986 */
/* Polygon is based on an original program by Terry W. Gintz
for the Apple Macintosh -- that used Quickdraw for the polygon drawing */

void IMsg();

/* Include the definitions and functions we need */

#include "polygon2.h"
#include "polyg3.c"
#include "palette.c"
#include "save.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 pict  ",   /* text of Menu Item */
   NULL            /* pointer to next IText */
   },

   {0,3,JAM2,0,0,&TestFont,"modify color",NULL },
   {0,3,JAM2,0,0,&TestFont,"cycle colors",NULL },
   {0,3,JAM2,0,0,&TestFont,"stop drawing",NULL },
   {0,3,JAM2,0,0,&TestFont,"save picture",NULL },
   {0,3,JAM2,0,0,&TestFont,"    quit    ",NULL },
};

struct MenuItem Menu0Item[6] = {
   {
   &Menu0Item[1],         /* pointer to next Item */
   0,0,120,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,120,9,ITEMTEXT | ITEMENABLED | HIGHCOMP,
   0,(APTR)&Menu0IText[1],NULL,NULL,NULL,MENUNULL},

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

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

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

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

struct Menu BdMenu [1] = {
   NULL,      /* ptr to next Menu */
   10,0,120,0,   /* left,top,width,height--top and height ignored */
   MENUENABLED,   /* Flags */
   "   Polygons ",   /* menu title */
   &Menu0Item[0]   /* First Item in list */
   };
int nf,cycle,delay,sav;
UWORD color18, color19;

main()
{
   USHORT drawing;
cycle=0;
nf=0;
delay=9000;
initwind();
init_colors();
init_scr();
drawing=1;
poly();
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();
   if (nf==1)
      poly();
   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 (ITEMNUM(Mcode)){
                  case 0:
                     poly();
                     break;
                  case 1:
                     palette(w);
                     break;
                  case 2:
                     if (cycle==0)
                        cycle=1;
                     else
                        cycle=0;
                     break;
                  case 3:
                     break;
                  case 4:
                     sav=save(w);
                     if (sav == 1){
                        color18=GetRGB4(p_Co,18);
                        color19=GetRGB4(p_Co,19);
                        SetRGB4(vp,18,15,0,0);
                        SetRGB4(vp,19,15,15,15);
                        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 5:
                     clear_colors();
                     Cleanup();
                     exit(TRUE);
                     break;
            }
      } 
   }
}

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;
   int ex;

   if (cycle==1)
      cyclecolors();
   ex = 0;
   nf = 0;
   while (BdMsg = (struct IntuiMessage *)GetMsg(w->UserPort)) {
      Mclass = BdMsg->Class;
      Mcode = BdMsg->Code;
      ReplyMsg(BdMsg);
      switch (Mclass) {
         case CLOSEWINDOW:
            Cleanup();
            exit(TRUE);
            break;
         case MENUPICK:
            ItemNum = ITEMNUM(Mcode);
            switch (ItemNum){
                  case 0:
                     ex = 1;
                     nf = 1;
                     break;
                  case 1:
                     palette(w);
                     break;
                  case 2:
                     if (cycle==1)
                        cycle=0;
                     else
                        cycle=1;
                     break;
                  case 3:
                     ex=1;
                     break;
                  case 4:
                     break;
                  case 5:
                     clear_colors();
                     Cleanup();
                     exit(TRUE);
            }
      }
   }
   return(ex);
}
