/* MENUS.C
 * This file contains the menu declarations and initializations. It should
 * be linked in the main program. Any parts of this file needed by other
 * modules will be referenced in the files externs.h which will be included
 * in every module of the program.
 */
#include	<intuition/intuition.h>
#include	"defns.h"

struct	IntuiText	vmtxt[] =	/*verify menu texts*/
{
	{ 2,3,JAM2,1,0,NULL,"Verify End Game    ",NULL },
	{ 2,3,JAM2,1,0,NULL,"Verify Quit Program",NULL}
};

struct	MenuItem	vmitems[] =	/*verify menu items*/
{
	{ &vmitems[1],0,0,19*FWIDTH,FHEIGHT,ITEMTEXT | HIGHCOMP,NULL,
	  (APTR)&vmtxt[0],NULL,NULL,NULL,MENUNULL
	},
	{ NULL,0,FHEIGHT,19*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP, NULL,
	  (APTR)&vmtxt[1],NULL,NULL,NULL,MENUNULL
	}
};


struct	IntuiText	cmtxt[] =	/*checkable menu text*/
{
	{ MENUCOL1,MENUCOL2,JAM2,CHECKWIDTH,0,NULL,"Player One",NULL},
	{ MENUCOL1,MENUCOL2,JAM2,CHECKWIDTH,0,NULL,"Player Two",NULL },
	{ MENUCOL1,MENUCOL2,JAM2,CHECKWIDTH,0,NULL,"Player Three",NULL }
};
struct	IntuiText	ncmtxt[] =	/*noncheckable menu text*/
{
	{ MENUCOL1,MENUCOL2,JAM2,1,0,NULL,"AutoPlayer One",NULL },
	{ MENUCOL1,MENUCOL2,JAM2,1,0,NULL,"AutoPlayer Two",NULL },
	{ MENUCOL1,MENUCOL2,JAM2,1,0,NULL,"AutoPlayer Three",NULL }
};


struct	MenuItem	mmsub[] =	/*modify memory submenu items*/
{
	{ &mmsub[1],SMOS,0,19*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  NULL, (APTR)&ncmtxt[0], NULL,NULL,NULL, MENUNULL
	},
	{ &mmsub[2],SMOS,FHEIGHT,19*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  NULL, (APTR)&ncmtxt[1], NULL,NULL,NULL, MENUNULL
	},
	{ NULL,SMOS,2*FHEIGHT,19*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  NULL, (APTR)&ncmtxt[2], NULL,NULL,NULL, MENUNULL
	}
};
struct	MenuItem	mcsub[] =	/*manual control submenu items*/
{
	{ &mcsub[1],SMOS,0,19*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP | CHECKED | CHECKIT | MENUTOGGLE | ITEMENABLED,
	  NULL, (APTR)&cmtxt[0], NULL,NULL,NULL, MENUNULL
	},
	{ &mcsub[2],SMOS,FHEIGHT,19*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP | ITEMENABLED | CHECKIT | MENUTOGGLE,
	  NULL, (APTR)&cmtxt[1], NULL,NULL,NULL, MENUNULL
	},
	{ NULL,SMOS,2*FHEIGHT,19*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP | ITEMENABLED | CHECKIT | MENUTOGGLE,
	  NULL, (APTR)&cmtxt[2], NULL,NULL,NULL, MENUNULL
	}
};
struct	MenuItem	vcsub[] =	/*view cards submenu items*/
{
	{ &vcsub[1],SMOS,0,19*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP | CHECKED | CHECKIT | MENUTOGGLE | ITEMENABLED,
	  NULL, (APTR)&cmtxt[0], NULL,NULL,NULL, MENUNULL
	},
	{ &vcsub[2],SMOS,FHEIGHT,19*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP | ITEMENABLED | CHECKIT | MENUTOGGLE,
	  NULL, (APTR)&cmtxt[1], NULL,NULL,NULL, MENUNULL
	},
	{ NULL,SMOS,2*FHEIGHT,19*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP | ITEMENABLED | CHECKIT | MENUTOGGLE,
	  NULL, (APTR)&cmtxt[2], NULL,NULL,NULL, MENUNULL
	}
};
struct	IntuiText	sctxt[] =	/*shuffle/create pack submenu text*/
{
	{ MENUCOL1,MENUCOL2,JAM2,CHECKWIDTH,0,NULL,"After each hand",NULL},
	{ MENUCOL1,MENUCOL2,JAM2,CHECKWIDTH,0,NULL,"After each game",NULL}
};
struct	MenuItem	ipsub[] =	/*initialise pack submenu items*/
{
	{ &ipsub[1],SMOS,0,18*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP | CHECKIT | CHECKED | MENUTOGGLE | ITEMENABLED,
	  NULL, (APTR)&sctxt[0], NULL,NULL,NULL, MENUNULL
	},
	{ NULL,SMOS,FHEIGHT,18*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP | CHECKIT | MENUTOGGLE | ITEMENABLED,
	  NULL, (APTR)&sctxt[1], NULL,NULL,NULL, MENUNULL
	}
};
struct	MenuItem	spsub[] =	/*shuffle pack submenu items*/
{
	{ &spsub[1],SMOS,0,18*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP | CHECKED | CHECKIT | MENUTOGGLE | ITEMENABLED,
	  NULL, (APTR)&sctxt[0], NULL,NULL,NULL, MENUNULL
	},
	{ NULL,SMOS,FHEIGHT,18*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP | CHECKIT | MENUTOGGLE | ITEMENABLED,
	  NULL, (APTR)&sctxt[1], NULL,NULL,NULL, MENUNULL
	}
};

/*all items below are checkwidth in to improve readability*/
struct	IntuiText	dmtxt[] =	/*debug menu text*/
{
	{ MENUCOL1,MENUCOL2,JAM2,CHECKWIDTH,0,NULL,"View Cards >",NULL },
	{ MENUCOL1,MENUCOL2,JAM2,CHECKWIDTH,0,NULL,"Manual Deal",NULL },
	{ MENUCOL1,MENUCOL2,JAM2,CHECKWIDTH,0,NULL,"Manual Control >",NULL },
	{ MENUCOL1,MENUCOL2,JAM2,CHECKWIDTH,0,NULL,"Modify Memory >",NULL },
	{ MENUCOL1,MENUCOL2,JAM2,CHECKWIDTH,0,NULL,"Open New Pack >",NULL },
	{ MENUCOL1,MENUCOL2,JAM2,CHECKWIDTH,0,NULL,"Shuffle Pack >",NULL },
	{ MENUCOL1,MENUCOL2,JAM2,CHECKWIDTH,0,NULL,"Continuous Play",NULL}
};
struct	MenuItem	dmitems[] =	/*debug menu items*/
{
	{ &dmitems[1],0,0, 18*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  NULL, (APTR)&dmtxt[0], NULL,NULL, vcsub, MENUNULL
	},
	{ &dmitems[2],0,FHEIGHT, 18*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP | ITEMENABLED | CHECKIT | MENUTOGGLE,
	  NULL, (APTR)&dmtxt[1], NULL,NULL,NULL,MENUNULL
	},
	{ &dmitems[3],0,2*FHEIGHT, 18*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  NULL, (APTR)&dmtxt[2], NULL,NULL, mcsub, MENUNULL
	},
	{ &dmitems[4],0,3*FHEIGHT, 18*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP,
	  NULL, (APTR)&dmtxt[3], NULL,NULL, mmsub, MENUNULL
	}, /*this item (MODIFY MEMORY) is disabled for obvious reasons*/
	{ &dmitems[5],0,4*FHEIGHT, 18*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  NULL, (APTR)&dmtxt[4], NULL,NULL, ipsub, MENUNULL
	},
	{ &dmitems[6],0,5*FHEIGHT, 18*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  NULL, (APTR)&dmtxt[5], NULL,NULL, spsub, MENUNULL
	},
	{ NULL,0,6*FHEIGHT,18*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP | ITEMENABLED | CHECKIT | MENUTOGGLE,
	 NULL, (APTR)&dmtxt[6], NULL,NULL, NULL, MENUNULL}
};

struct	IntuiText	imtxt[] =	/*Intelligence menu texts*/
{
	{ MENUCOL1,MENUCOL2,JAM2,CHECKWIDTH,0,NULL,"Level One",NULL },
	{ MENUCOL1,MENUCOL2,JAM2,CHECKWIDTH,0,NULL,"Level Two",NULL },
	{ MENUCOL1,MENUCOL2,JAM2,CHECKWIDTH,0,NULL,"Level Three",NULL },
	{ MENUCOL1,MENUCOL2,JAM2,CHECKWIDTH,0,NULL,"Level Four",NULL },
	{ MENUCOL1,MENUCOL2,JAM2,CHECKWIDTH,0,NULL,"Level Five",NULL },
	{ MENUCOL1,MENUCOL2,JAM2,CHECKWIDTH,0,NULL,"Level Six",NULL },
	{ MENUCOL1,MENUCOL2,JAM2,CHECKWIDTH,0,NULL,"Level Seven",NULL },
	{ MENUCOL1,MENUCOL2,JAM2,CHECKWIDTH,0,NULL,"Level Eight",NULL },
	{ MENUCOL1,MENUCOL2,JAM2,CHECKWIDTH,0,NULL,"Level Nine",NULL },
	{ MENUCOL1,MENUCOL2,JAM2,CHECKWIDTH,0,NULL,"Level Ten",NULL }
};

struct	MenuItem	p1isub[] =	/*Player One Intelligence sub menu items*/
{
	{ &p1isub[1],SMOS,0,12*FWIDTH,FHEIGHT, CHECKIT | ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  0X3FE, (APTR)&imtxt[0], NULL,NULL,NULL,MENUNULL
	},
	{ &p1isub[2],SMOS,FHEIGHT,12*FWIDTH,FHEIGHT, CHECKIT | ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  0X3FD, (APTR)&imtxt[1], NULL,NULL,NULL,MENUNULL
	},
	{ &p1isub[3],SMOS,FHEIGHT*2,12*FWIDTH,FHEIGHT, CHECKIT | ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  0X3FB, (APTR)&imtxt[2], NULL,NULL,NULL,MENUNULL
	},
	{ &p1isub[4],SMOS,FHEIGHT*3,12*FWIDTH,FHEIGHT, CHECKIT | ITEMTEXT | HIGHCOMP | ITEMENABLED | CHECKED,
	  0X3F7, (APTR)&imtxt[3], NULL,NULL,NULL,MENUNULL
	},
	{ &p1isub[5],SMOS,FHEIGHT*4,12*FWIDTH,FHEIGHT, CHECKIT | ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  0X3EF, (APTR)&imtxt[4], NULL,NULL,NULL,MENUNULL
	},
	{ &p1isub[6],SMOS,FHEIGHT*5,12*FWIDTH,FHEIGHT, CHECKIT | ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  0X3DF, (APTR)&imtxt[5], NULL,NULL,NULL,MENUNULL
	},
	{ &p1isub[7],SMOS,FHEIGHT*6,12*FWIDTH,FHEIGHT, CHECKIT | ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  0X3BF, (APTR)&imtxt[6], NULL,NULL,NULL,MENUNULL
	},
	{ &p1isub[8],SMOS,FHEIGHT*7,12*FWIDTH,FHEIGHT, CHECKIT | ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  0X37F, (APTR)&imtxt[7], NULL,NULL,NULL,MENUNULL
	},
	{ &p1isub[9],SMOS,FHEIGHT*8,12*FWIDTH,FHEIGHT, CHECKIT | ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  0X2FF, (APTR)&imtxt[8], NULL,NULL,NULL,MENUNULL
	},
	{ NULL, SMOS,FHEIGHT*9,12*FWIDTH,FHEIGHT, CHECKIT | ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  0X1FF, (APTR)&imtxt[9], NULL,NULL,NULL,MENUNULL
	}
};

struct	MenuItem	p2isub[] =	/*Player Two intelligence submenu items*/
{
	{ &p2isub[1],SMOS,0,12*FWIDTH,FHEIGHT, CHECKIT | ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  0X3FE, (APTR)&imtxt[0], NULL,NULL,NULL,MENUNULL
	},
	{ &p2isub[2],SMOS,FHEIGHT,12*FWIDTH,FHEIGHT, CHECKIT | ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  0X3FD, (APTR)&imtxt[1], NULL,NULL,NULL,MENUNULL
	},
	{ &p2isub[3],SMOS,FHEIGHT*2,12*FWIDTH,FHEIGHT, CHECKIT | ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  0X3FB, (APTR)&imtxt[2], NULL,NULL,NULL,MENUNULL
	},
	{ &p2isub[4],SMOS,FHEIGHT*3,12*FWIDTH,FHEIGHT, CHECKIT | ITEMTEXT | HIGHCOMP | ITEMENABLED | CHECKED,
	  0X3F7, (APTR)&imtxt[3], NULL,NULL,NULL,MENUNULL
	},
	{ &p2isub[5],SMOS,FHEIGHT*4,12*FWIDTH,FHEIGHT, CHECKIT | ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  0X3EF, (APTR)&imtxt[4], NULL,NULL,NULL,MENUNULL
	},
	{ &p2isub[6],SMOS,FHEIGHT*5,12*FWIDTH,FHEIGHT, CHECKIT | ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  0X3DF, (APTR)&imtxt[5], NULL,NULL,NULL,MENUNULL
	},
	{ &p2isub[7],SMOS,FHEIGHT*6,12*FWIDTH,FHEIGHT, CHECKIT | ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  0X3BF, (APTR)&imtxt[6], NULL,NULL,NULL,MENUNULL
	},
	{ &p2isub[8],SMOS,FHEIGHT*7,12*FWIDTH,FHEIGHT, CHECKIT | ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  0X37F, (APTR)&imtxt[7], NULL,NULL,NULL,MENUNULL
	},
	{ &p2isub[9],SMOS,FHEIGHT*8,12*FWIDTH,FHEIGHT, CHECKIT | ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  0X2FF, (APTR)&imtxt[8], NULL,NULL,NULL,MENUNULL
	},
	{ NULL, SMOS,FHEIGHT*9,12*FWIDTH,FHEIGHT, CHECKIT | ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  0X1FF, (APTR)&imtxt[9], NULL,NULL,NULL,MENUNULL
	}
};

struct	MenuItem	p3isub[] =	/*Player Three intelligence sub menu items*/
{
	{ &p3isub[1],SMOS,0,12*FWIDTH,FHEIGHT, CHECKIT | ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  0X3FE, (APTR)&imtxt[0], NULL,NULL,NULL,MENUNULL
	},
	{ &p3isub[2],SMOS,FHEIGHT,12*FWIDTH,FHEIGHT, CHECKIT | ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  0X3FD, (APTR)&imtxt[1], NULL,NULL,NULL,MENUNULL
	},
	{ &p3isub[3],SMOS,FHEIGHT*2,12*FWIDTH,FHEIGHT, CHECKIT | ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  0X3FB, (APTR)&imtxt[2], NULL,NULL,NULL,MENUNULL
	},
	{ &p3isub[4],SMOS,FHEIGHT*3,12*FWIDTH,FHEIGHT, CHECKIT | ITEMTEXT | HIGHCOMP | ITEMENABLED | CHECKED,
	  0X3F7, (APTR)&imtxt[3], NULL,NULL,NULL,MENUNULL
	},
	{ &p3isub[5],SMOS,FHEIGHT*4,12*FWIDTH,FHEIGHT, CHECKIT | ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  0X3EF, (APTR)&imtxt[4], NULL,NULL,NULL,MENUNULL
	},
	{ &p3isub[6],SMOS,FHEIGHT*5,12*FWIDTH,FHEIGHT, CHECKIT | ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  0X3DF, (APTR)&imtxt[5], NULL,NULL,NULL,MENUNULL
	},
	{ &p3isub[7],SMOS,FHEIGHT*6,12*FWIDTH,FHEIGHT, CHECKIT | ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  0X3BF, (APTR)&imtxt[6], NULL,NULL,NULL,MENUNULL
	},
	{ &p3isub[8],SMOS,FHEIGHT*7,12*FWIDTH,FHEIGHT, CHECKIT | ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  0X37F, (APTR)&imtxt[7], NULL,NULL,NULL,MENUNULL
	},
	{ &p3isub[9],SMOS,FHEIGHT*8,12*FWIDTH,FHEIGHT, CHECKIT | ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  0X2FF, (APTR)&imtxt[8], NULL,NULL,NULL,MENUNULL
	},
	{ NULL, SMOS,FHEIGHT*9,12*FWIDTH,FHEIGHT, CHECKIT | ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  0X1FF, (APTR)&imtxt[9], NULL,NULL,NULL,MENUNULL
	}
};

struct	MenuItem	imitems[] =	/*Intelligence menu items*/
{
	{ &imitems[1], 0,0,19*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  NULL, (APTR)&ncmtxt[0], NULL,NULL,p1isub, MENUNULL
	},
	{ &imitems[2], 0,FHEIGHT,19*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  NULL, (APTR)&ncmtxt[1], NULL,NULL,p2isub, MENUNULL
	},
	{ NULL, 0,FHEIGHT*2,19*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  NULL, (APTR)&ncmtxt[2], NULL,NULL,p3isub, MENUNULL
	}
};

struct	IntuiText	pmtxt[] =	/*Project Menu text*/
{
	{ MENUCOL1,MENUCOL2,JAM2,1,0,NULL,"Play >",NULL},
	{ MENUCOL1,MENUCOL2,JAM2,1,0,NULL,"Reorder Cards",NULL},
	{ MENUCOL1,MENUCOL2,JAM2,1,0,NULL,"About",NULL},
	{ MENUCOL1,MENUCOL2,JAM2,1,0,NULL,"Quit",NULL},
	{ MENUCOL1,MENUCOL2,JAM2,1,0,NULL,"Three Player Game",NULL},
	{ MENUCOL1,MENUCOL2,JAM2,1,0,NULL,"",NULL},
	{ MENUCOL1,MENUCOL2,JAM2,1,0,NULL,"Two Player Game",NULL},
	{ MENUCOL1,MENUCOL2,JAM2,1,0,NULL,"Exit Current Game",NULL}
};

struct	MenuItem	ppsub[] =	/*Project-Play sub items*/
{
	{ &ppsub[1], SMOS,0,26*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  NULL, (APTR)&pmtxt[4], NULL,NULL,NULL, MENUNULL},
	{ &ppsub[2], SMOS,FHEIGHT,26*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP,
	  NULL, (APTR)&pmtxt[5], NULL,NULL,NULL, MENUNULL},
	{ &ppsub[3], SMOS,FHEIGHT*2,26*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  NULL, (APTR)&pmtxt[6], NULL,NULL,NULL, MENUNULL},
	{ NULL, SMOS,FHEIGHT*3,26*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP,
	  NULL, (APTR)&pmtxt[7], NULL,NULL,NULL, MENUNULL}
};

struct	MenuItem	pmitems[] =	/*Project menu items*/
{
	{ &pmitems[1],0,0,15*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  NULL,(APTR)&pmtxt[0],NULL,NULL,ppsub,MENUNULL
	},
	{ &pmitems[2],0,FHEIGHT,15*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP,
	  NULL,(APTR)&pmtxt[1],NULL,NULL,NULL,MENUNULL
	}/* this item (REORDER CARDS) is disabled for obvious reasons*/,
	{ &pmitems[3],0,FHEIGHT*2,15*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  NULL,(APTR)&pmtxt[2],NULL,NULL,NULL,MENUNULL
	},
	{ NULL,0,FHEIGHT*3,15*FWIDTH,FHEIGHT, ITEMTEXT | HIGHCOMP | ITEMENABLED,
	  NULL,(APTR)&pmtxt[3],NULL,NULL,NULL,MENUNULL
	}
};

struct	Menu	menu[] =	/*menu strip*/
{
	{ &menu[1], 0,0,9*FWIDTH,FHEIGHT, MENUENABLED, "Project", pmitems},
	{ &menu[2], 9*FWIDTH,0,14*FWIDTH,FHEIGHT, MENUENABLED, "Intelligence", imitems },
	{ &menu[3], 23*FWIDTH,0,9*FWIDTH,FHEIGHT, MENUENABLED, "Special", dmitems},
	{ NULL, 32*FWIDTH,0,8*FWIDTH,FHEIGHT, MENUENABLED, "Verify", vmitems}
};
