// TSMorph - Amiga Morphing program
// Copyright (C) © 1993  Topicsave Limited

// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// any later version.

// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

// mpaddock@cix.compulink.co.uk

//	$Author: M_J_Paddock $
//	$Date: 1993/09/04 17:42:36 $
//	$Revision: 1.12 $

// Include precompiled headers if not already included
#ifndef TSMORPH_H
#include "TSMorph.h"
#endif

/* Gadgets in the control window */
extern struct Gadget OneGadget = {
	&TwoGadget,
	0,0,
	IMAGE_WIDTH,IMAGE_HEIGHT,
	GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
	GACT_IMMEDIATE,
	GTYP_BOOLGADGET,
	&One_im,
	&One_imx,
	NULL,
	0,
	NULL,
	ONEGADGET,
	NULL
};
extern struct Gadget TwoGadget = {
	&RelGadget,
	0,0,
	IMAGE_WIDTH,IMAGE_HEIGHT,
	GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
	GACT_IMMEDIATE,
	GTYP_BOOLGADGET,
	&Two_im,
	&Two_imx,
	NULL,
	0,
	NULL,
	TWOGADGET,
	NULL
};
extern struct Gadget RelGadget = {
	&MyAddGadget,
	0,0,
	IMAGE_WIDTH,IMAGE_HEIGHT,
	GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
	GACT_IMMEDIATE,
	GTYP_BOOLGADGET,
	&Rel_im,
	&Rel_imx,
	NULL,
	0,
	NULL,
	RELGADGET,
	NULL
};
extern struct Gadget MyAddGadget = {	// Note not AddGadget as this is a function!
	&DelGadget,
	0,0,
	IMAGE_WIDTH,IMAGE_HEIGHT,
	GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
	GACT_IMMEDIATE,
	GTYP_BOOLGADGET,
	&Add_im,
	&Add_imx,
	NULL,
	0,
	NULL,
	ADDGADGET,
	NULL
};
extern struct Gadget DelGadget = {
	&LinkGadget,
	0,0,
	IMAGE_WIDTH,IMAGE_HEIGHT,
	GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
	GACT_IMMEDIATE,
	GTYP_BOOLGADGET,
	&Del_im,
	&Del_imx,
	NULL,
	0,
	NULL,
	DELGADGET,
	NULL
};
extern struct Gadget LinkGadget = {
	&UnlinkGadget,
	0,0,
	IMAGE_WIDTH,IMAGE_HEIGHT,
	GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
	GACT_IMMEDIATE,
	GTYP_BOOLGADGET,
	&Link_im,
	&Link_imx,
	NULL,
	0,
	NULL,
	LINKGADGET,
	NULL
};
extern struct Gadget UnlinkGadget = {
	&NoneGadget,
	0,0,
	IMAGE_WIDTH,IMAGE_HEIGHT,
	GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
	GACT_IMMEDIATE,
	GTYP_BOOLGADGET,
	&Unlink_im,
	&Unlink_imx,
	NULL,
	0,
	NULL,
	UNLINKGADGET,
	NULL
};
extern struct Gadget NoneGadget = {
	&stGadget,
	0,0,
	IMAGE_WIDTH,IMAGE_HEIGHT,
	GFLG_GADGHIMAGE|GFLG_GADGIMAGE|GFLG_SELECTED,
	GACT_IMMEDIATE,
	GTYP_BOOLGADGET,
	&None_im,
	&None_imx,
	NULL,
	0,
	NULL,
	NONEGADGET,
	NULL
};
extern struct Gadget stGadget = {
	&prevGadget,
	0,0,
	AIMAGE,AIMAGE,
	GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
	GACT_RELVERIFY,
	GTYP_BOOLGADGET,
	&st_im,
	&st_imx,
	NULL,
	0,
	NULL,
	STGADGET,
	NULL
};
extern struct Gadget prevGadget = {
	&gotoGadget,
	0,0,
	AIMAGE,AIMAGE,
	GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
	GACT_RELVERIFY,
	GTYP_BOOLGADGET,
	&prev_im,
	&prev_imx,
	NULL,
	0,
	NULL,
	PREVGADGET,
	NULL
};
extern struct Gadget gotoGadget = {
	&nextGadget,
	0,0,
	AIMAGE+1,AIMAGE,
	GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
	GACT_RELVERIFY,
	GTYP_BOOLGADGET,
	&goto_im,
	&goto_imx,
	NULL,
	0,
	NULL,
	GOTOGADGET,
	NULL
};
extern struct Gadget nextGadget = {
	&lastGadget,
	0,0,
	AIMAGE,AIMAGE,
	GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
	GACT_RELVERIFY,
	GTYP_BOOLGADGET,
	&next_im,
	&next_imx,
	NULL,
	0,
	NULL,
	NEXTGADGET,
	NULL
};
extern struct Gadget lastGadget = {
	NULL,
	0,0,
	AIMAGE,AIMAGE,
	GFLG_GADGHIMAGE|GFLG_GADGIMAGE,
	GACT_RELVERIFY,
	GTYP_BOOLGADGET,
	&last_im,
	&last_imx,
	NULL,
	0,
	NULL,
	LASTGADGET,
	NULL
};

/* Menu for the Control Window - comments on the right are the array index */
extern struct NewMenu MyNewMenu[] = {	// There must be an easier way!
	{ NM_TITLE, "Project",NULL,0,0,NULL },			// 0
		{ NM_ITEM,"New Points","N",0,0,0 },			// 1
		{ NM_ITEM,"Open Points...","O",0,0,0 },	// 2
   	{ NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },		// 3
   	{ NM_ITEM,"Save","S",0,0,0},					// 4
   	{ NM_ITEM,"Save As...","A",0,0,0},			// 5
   	{ NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },		// 6
		{ NM_ITEM,"About...",NULL,0,0,0 },			// 7
   	{ NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },		// 8
		{ NM_ITEM,"Exit Points",NULL,0,0,0 },		// 9
   	{ NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },		// 10
		{ NM_ITEM,"Quit","Q",0,0,0 },					// 11
   	{ NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },		// 12
		{ NM_ITEM,"Preview...",NULL,0,0,NULL },	// 13
	{ NM_TITLE, "Edit",0,0,0,NULL},					// 14
		{ NM_ITEM,"Add Grid...","G",0,0,0 },		// 15
   	{ NM_ITEM,"Frame",NULL,0,0,NULL },			// 16
			{ NM_SUB,"First","<",0,0,0 },				// 17
			{ NM_SUB,"Previous","-",0,0,0 },			// 18
			{ NM_SUB,"Goto...",".",0,0,0 },			// 19
			{ NM_SUB,"Next","+",0,0,0 },				// 20
			{ NM_SUB,"Last",">",0,0,0 },				// 21
		{ NM_ITEM,"Mode",0,0,0,NULL },										// 22
			{ NM_SUB, "Edit One","1",CHECKIT,~1,NULL },					// 23
			{ NM_SUB, "Edit Two","2",CHECKIT,~2,NULL },					// 24
			{ NM_SUB, "Edit Rel","3",CHECKIT,~4,NULL },					// 25
			{ NM_SUB, "Add",     "4",CHECKIT,~8,NULL },					// 26
			{ NM_SUB, "Delete",  "5",CHECKIT,~16,NULL },					// 27
			{ NM_SUB, "Link",    "6",CHECKIT,~32,NULL },					// 28
			{ NM_SUB, "Unlink",  "7",CHECKIT,~64,NULL },					// 29
			{ NM_SUB, "None",    "8",CHECKIT|CHECKED,~128,NULL },		// 30
	{ NM_TITLE, "Settings",0,0,0,NULL },									//	31
		{ NM_ITEM,"Create Icons?",NULL, CHECKIT|MENUTOGGLE,0,NULL },			// 32
		{ NM_ITEM,"Change Palette?","P", CHECKIT|MENUTOGGLE,0,NULL },			// 33
		{ NM_ITEM,"Zoom?","Z", CHECKIT|MENUTOGGLE,0,NULL },			// 			34
		{ NM_ITEM,"Open Mode",NULL,0,NULL},									//				35
			{ NM_SUB, "ILBM Always",NULL,CHECKIT,~1,NULL },				//				36
			{ NM_SUB, "ILBM If ILBM",NULL,CHECKIT,~2,NULL },			//				37
			{ NM_SUB, "ILBM If Colours",NULL,CHECKIT,~4,NULL },		//				38
			{ NM_SUB, "Remap",NULL,CHECKIT,~8,NULL },						//				39
			{ NM_SUB, "Opal",NULL,CHECKIT,~16,NULL },						//				40
		{ NM_ITEM,"Public Screen...",NULL,0,NULL},						//				41
		{ NM_ITEM,"Custom Mode...",NULL,0,NULL},							//				42
		{ NM_ITEM,"Custom Depth...",NULL,0,NULL},							//				43
		{ NM_ITEM,"Preview Script...",NULL,0,NULL},						//				44
   	{ NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },								// 			45
   	{ NM_ITEM,"Create Prefs Icons?",NULL,CHECKIT|MENUTOGGLE,NULL},//			46
   	{ NM_ITEM,"Keep Settings?",NULL,CHECKIT|MENUTOGGLE,NULL},	//				47
		{ NM_ITEM,"Load Settings...", NULL, 0, NULL },					// 			48
   	{ NM_ITEM,"Save Settings", NULL, 0, NULL },						// 			49
   	{ NM_ITEM,"Save Settings As...", NULL, 0, NULL },				// 			50
   	{ NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },								// 			51
		{ NM_ITEM,"Create Render Icons?",NULL, CHECKIT|MENUTOGGLE,NULL },//		52
   	{ NM_ITEM,"DX...",NULL,0,NULL},										//				53
   	{ NM_ITEM,"DY...",NULL,0,NULL},										//				54
   	{ NM_ITEM,"Load Script...",NULL,0,NULL},							//				55
   	{ NM_ITEM,"Pre Script...",NULL,0,NULL},							//				56
   	{ NM_ITEM,"Post Script...",NULL,0,NULL},							//				57
   	{ NM_ITEM,"Depth...",NULL,0,NULL},									//				58
   	{ NM_ITEM,"Mode",NULL,0,NULL},										//				59
			{ NM_SUB, "Quick(0)",NULL,CHECKIT,~1,NULL },					//				60
			{ NM_SUB, "Quick Stationary(1)",NULL,CHECKIT,~2,NULL },	//				61
			{ NM_SUB, "Closest(2)",NULL,CHECKIT,~4,NULL },				//				62
			{ NM_SUB, "Closest Stationary(3)",NULL,CHECKIT,~8,NULL },//				63
   	{ NM_ITEM,"Save Format", NULL, 0, NULL },							// 			64
			{ NM_SUB, "ILBM 24",NULL,CHECKIT,~1,NULL },					//				65
			{ NM_SUB, "Opal 24",NULL,CHECKIT,~2,NULL },					//				66
			{ NM_SUB, "Opal 24 Thumbnail",NULL,CHECKIT,~4,NULL },		//				67
			{ NM_SUB, "Opal 24 Fast",NULL,CHECKIT,~8,NULL },			//				68
			{ NM_SUB, "Opal 24 Fast Thumbnail",NULL,CHECKIT,~16,NULL },	//			69
			{ NM_SUB, "Opal JPEG",NULL,CHECKIT,~32,NULL },				//				70
			{ NM_SUB, "Opal JPEG Thumbnail",NULL,CHECKIT,~64,NULL },	//				71
			{ NM_SUB, "PPM (P6)",NULL,CHECKIT,~128,NULL },				//				72
			{ NM_SUB, "B&W 16",NULL,CHECKIT,~256,NULL },					//				73
			{ NM_SUB, "B&W 256",NULL,CHECKIT,~512,NULL },				//				74
			{ NM_SUB, "HAM 6",NULL,CHECKIT,~1024,NULL },					//				75
			{ NM_SUB, "HAM 8",NULL,CHECKIT,~2048,NULL },					//				76
			{ NM_SUB, "DCTV 3",NULL,CHECKIT,~4096,NULL },				//				77
			{ NM_SUB, "DCTV 4",NULL,CHECKIT,~8192,NULL },				//				78
   	{ NM_ITEM,"JPEG Quality...", NULL, 0, NULL },					// 			79
   	{ NM_ITEM,"Render Screen...", NULL, 0, NULL },					//				80
   	{ NM_ITEM,"Anti-Alias?",NULL,CHECKIT|MENUTOGGLE,NULL },		//				81
   	{ NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },								// 			82
		{ NM_ITEM,"Reset To Defaults",NULL,0,NULL },						//				83
		{ NM_ITEM,"Last Saved",NULL,0,NULL },								//				84
		{ NM_ITEM,"Restore",NULL,0,NULL },									//				85
  	{ NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },									// 			86
	{ NM_ITEM,"Continuous Help?",NULL,CHECKIT|MENUTOGGLE,NULL },	//				87
   { NM_END,NULL,NULL,0,0,NULL }
};

/* Screen and VisualInfo for ControlWindow	*/
static struct Screen 		*Screen	= NULL;
static struct VisualInfo	*VisInfo	= NULL;

/* The Window and its menus and (animated) screen title	*/
extern struct Window			*ControlWindow	= NULL;
extern struct Menu 			*MyMenu 			= NULL;
extern UBYTE					*CWTitle			= "TSMorph - Frame    ";	// note spaces at end for frame number!

/* Open the Control Window
 * Not really sure why it returns a Struct Window *
 * as ControlWindow is set up inside this function anyway
 * should really be a BOOL
 */
struct Window *
OpenControlWindow(void) {
	ULONG HNum;			// The current edit mode is displayed as help
	switch (Mode) {
	case EDIT1:
		HNum = H_EOne;
		break;
	case EDIT2:
		HNum = H_ETwo;
		break;
	case EDITREL:
		HNum = H_ERel;
		break;
	case ADD:
		HNum = H_EAdd;
		break;
	case DELETE:
		HNum = H_EDel;
		break;
	case LINK1:
		HNum = H_ELnk;
		break;
	case UNLINK1:
		HNum = H_EUnl;
		break;
	case NONE:
		HNum = H_EMov;
		break;
	}
	if (Screen = LockPubScreen(PubScreenName)) {		/* Supplied in PUBSCREEN=	*/
		// Dynamically position all the gadgets (actually only based on window top border)
		/* Gadgets in the left column */
		OneGadget.LeftEdge =
			RelGadget.LeftEdge =
			DelGadget.LeftEdge =
			UnlinkGadget.LeftEdge =
			stGadget.LeftEdge = Screen->WBorLeft; 
		/* Gadgets in the right column */
		TwoGadget.LeftEdge =
			MyAddGadget.LeftEdge =
			LinkGadget.LeftEdge =
			NoneGadget.LeftEdge = Screen->WBorLeft + IMAGE_WIDTH;
		prevGadget.LeftEdge = Screen->WBorLeft + AIMAGE;
		gotoGadget.LeftEdge = Screen->WBorLeft + (AIMAGE+AIMAGE);
		nextGadget.LeftEdge = Screen->WBorLeft + (AIMAGE+AIMAGE+AIMAGE+1);	// +1 as gotoGadget is 1 wider
		lastGadget.LeftEdge = Screen->WBorLeft + (AIMAGE+AIMAGE+AIMAGE+1+AIMAGE);
		/* Gadgets in top row */
		OneGadget.TopEdge =
			TwoGadget.TopEdge = Screen->WBorTop + Screen->Font->ta_YSize+1;
		/* Gadgets in 2nd row */
		RelGadget.TopEdge =
			MyAddGadget.TopEdge = Screen->WBorTop + Screen->Font->ta_YSize+1+(IMAGE_HEIGHT);
		/* Gadgets in 3rd row */
		DelGadget.TopEdge =
			LinkGadget.TopEdge = Screen->WBorTop + Screen->Font->ta_YSize+1+(IMAGE_HEIGHT+IMAGE_HEIGHT);
		/* Gadgets in bottom (-1) row */
		UnlinkGadget.TopEdge =
			NoneGadget.TopEdge = Screen->WBorTop + Screen->Font->ta_YSize+1+(IMAGE_HEIGHT+IMAGE_HEIGHT+IMAGE_HEIGHT);
		/* Arrow gadgets */
		stGadget.TopEdge =
			prevGadget.TopEdge =
			gotoGadget.TopEdge =
			nextGadget.TopEdge =
			lastGadget.TopEdge = Screen->WBorTop + Screen->Font->ta_YSize+1+(IMAGE_HEIGHT+IMAGE_HEIGHT+IMAGE_HEIGHT+IMAGE_HEIGHT);
		if ((SinglePicture == 2) || (SinglePicture == 3)) {		// Animated so set screen title
			sprintf(CWTitle,"TSMorph - Frame %03ld",FrameNumber);
		}
		else {
			strcpy(CWTitle,"TSMorph");										// Otherwise default
		}
		/* Open the window, in a default position */
		if (ControlWindow = OpenWindowTags(NULL,
										WA_Gadgets, 		&OneGadget,
										WA_IDCMP,			IDCMP_MENUPICK | IDCMP_CLOSEWINDOW | IDCMP_MENUHELP |
																IDCMP_GADGETDOWN | IDCMP_RAWKEY | IDCMP_VANILLAKEY | IDCMP_GADGETUP |
																IDCMP_GADGETHELP | IDCMP_MOUSEMOVE,
										WA_SimpleRefresh, TRUE,
										WA_Flags,			WFLG_DRAGBAR | WFLG_DEPTHGADGET | WFLG_CLOSEGADGET |
																WFLG_NOCAREREFRESH,
										WA_PubScreen, 		Screen,
					               WA_Width,			Screen->WBorLeft + Screen->WBorRight + 
					               							(IMAGE_WIDTH+IMAGE_WIDTH),
					               WA_Height,			Screen->WBorTop + Screen->Font->ta_YSize + 1 +
					               							Screen->WBorBottom +
					               							(IMAGE_HEIGHT+IMAGE_HEIGHT+IMAGE_HEIGHT+IMAGE_HEIGHT+AIMAGE),
					               WA_Left,				0,			// left edge of screen
					               WA_Top,				TSMorphWnd->TopEdge + Rect[GD_Help].MaxY + 2,
										WA_ScreenTitle,	CWTitle,	//	Top edge means help gadget is still visible
										WA_Title,			"Mov",	// This is wrong - could be a different mode ?
										WA_MenuHelp,		TRUE,
										WA_NewLookMenus,	TRUE,
										TAG_DONE)) {
		   if (IntuitionBase->lib_Version > 38) {			// If running 3.0+ turn on gadget help
				HelpControl(ControlWindow,HC_GADGETHELP);
			}
			UpdateMenuDefs();										// Update the menu off/on/checks etc.
         /* Create,layout and add the menu	*/
			if (MyMenu = CreateMenus(MyNewMenu,
										GTMN_FullMenu,TRUE,
										TAG_END)) {
				if (VisInfo = GetVisualInfo(Screen, TAG_END)) {
					if (LayoutMenus(MyMenu,VisInfo,
											GTMN_NewLookMenus,TRUE,
											TAG_END)) {
						if (SetMenuStrip(ControlWindow,MyMenu)) {
							// display either full or short help
							if (GHelp) {
								help(HNum);
							}
							else {
								ihelp(HNum);
							}
							return ControlWindow;		/* Success !!!						*/
						}
					}
				}
			}
		}
	}
	/* Something failed so clear everything down	*/
	CloseControlWindow();
	return NULL;
}
		

/* Close the Control Window
 * or at least as much as it is open
 * Clearing down all variables
 */
void
CloseControlWindow(void) {
	if (ControlWindow) {
		ClearMenuStrip(ControlWindow);
	}
	if (VisInfo) {
		FreeVisualInfo(VisInfo);
		VisInfo = NULL;
	}
	if (MyMenu) {
		FreeMenus(MyMenu);
		MyMenu = NULL;
	}
	if (ControlWindow) {
		CloseWindow(ControlWindow);
		ControlWindow = NULL;
	}
	if (Screen) {
		UnlockPubScreen(NULL,Screen);
		Screen = NULL;
	}
}

/* Update the new menu array based on the current settings
 * updates enabled/disabled status
 * and checkmarks
 */
void
UpdateMenuDefs(void) {
	if ((SinglePicture == 2) || (SinglePicture == 3)) {	// No frame controls if not anim
      MyNewMenu[NM_FRAME].nm_Flags &= ~NM_ITEMDISABLED;
	}
	else {
      MyNewMenu[NM_FRAME].nm_Flags |= NM_ITEMDISABLED;
	}
   if (CreateIcons) {							/* Supplied in CREATEICONS=	*/
      MyNewMenu[NM_CREATEICONS].nm_Flags |= CHECKED;
   }
   else {
      MyNewMenu[NM_CREATEICONS].nm_Flags &= ~CHECKED;
   }
   if (CreateIconsP) {							/* Supplied in CREATEICONSP=	*/
      MyNewMenu[NM_ICONSP].nm_Flags |= CHECKED;
   }
   else {
      MyNewMenu[NM_ICONSP].nm_Flags &= ~CHECKED;
   }
   if (KeepSettings) {							/* Supplied in KEEPSETTINGS=	*/
      MyNewMenu[NM_KEEPS].nm_Flags |= CHECKED;
   }
   else {
      MyNewMenu[NM_KEEPS].nm_Flags &= ~CHECKED;
   }
	if (PaletteAllowed) {						/* Supplied in CHANGEPALETTE=	*/
      MyNewMenu[NM_CHANGEPALETTE].nm_Flags &= ~NM_ITEMDISABLED;
	}
	else {
      MyNewMenu[NM_CHANGEPALETTE].nm_Flags |= NM_ITEMDISABLED;
	}
   if (palette) {									/* Supplied in CHANGEPALETTE=	*/
      MyNewMenu[NM_CHANGEPALETTE].nm_Flags |= CHECKED;
   }
   else {
      MyNewMenu[NM_CHANGEPALETTE].nm_Flags &= ~CHECKED;
   }
	if (ZoomAllowed) {							/* Supplied in ZOOM=				*/
      MyNewMenu[NM_ZOOM].nm_Flags &= ~NM_ITEMDISABLED;
	}
	else {
      MyNewMenu[NM_ZOOM].nm_Flags |= NM_ITEMDISABLED;
	}
   if (Zoom) {										/* Supplied in ZOOM=				*/
      MyNewMenu[NM_ZOOM].nm_Flags |= CHECKED;
   }
   else {
      MyNewMenu[NM_ZOOM].nm_Flags &= ~CHECKED;
   }
   if (AntiAlias) {								/* Supplied in ANTIALIAS=		*/
      MyNewMenu[NM_ANTIALIAS].nm_Flags |= CHECKED;
   }
   else {
      MyNewMenu[NM_ANTIALIAS].nm_Flags &= ~CHECKED;
   }
   if (!ReqToolsBase) {							// No reqtools.library so disable all string and int requesters
   	MyNewMenu[NM_SCREEN].nm_Flags |= NM_ITEMDISABLED;
   	MyNewMenu[NM_DX].nm_Flags |= NM_ITEMDISABLED;
   	MyNewMenu[NM_DY].nm_Flags |= NM_ITEMDISABLED;
   	MyNewMenu[NM_LOADSCRIPT].nm_Flags |= NM_ITEMDISABLED;
   	MyNewMenu[NM_PRESCRIPT].nm_Flags |= NM_ITEMDISABLED;
   	MyNewMenu[NM_POSTSCRIPT].nm_Flags |= NM_ITEMDISABLED;
   	MyNewMenu[NM_DEPTH].nm_Flags |= NM_ITEMDISABLED;
   	MyNewMenu[NM_QUALITY].nm_Flags |= NM_ITEMDISABLED;
   	MyNewMenu[NM_SCREENR].nm_Flags |= NM_ITEMDISABLED;
   	MyNewMenu[NM_PPREVIEW].nm_Flags |= NM_ITEMDISABLED;
   	MyNewMenu[NM_SPREVIEW].nm_Flags |= NM_ITEMDISABLED;
   	MyNewMenu[NM_CUSTOM].nm_Flags |= NM_ITEMDISABLED;
   	MyNewMenu[NM_CDEPTH].nm_Flags |= NM_ITEMDISABLED;
   	TSMorphNewMenu[12].nm_Flags |= NM_ITEMDISABLED;
   }
   if (!OpalBase) {								// No opal.library so disable opal output formats and input mode
   	MyNewMenu[NM_OPAL24].nm_Flags |= NM_ITEMDISABLED;
   	MyNewMenu[NM_OPAL24T].nm_Flags |= NM_ITEMDISABLED;
   	MyNewMenu[NM_OPAL24F].nm_Flags |= NM_ITEMDISABLED;
   	MyNewMenu[NM_OPAL24FT].nm_Flags |= NM_ITEMDISABLED;
   	MyNewMenu[NM_OPALJPEG].nm_Flags |= NM_ITEMDISABLED;
   	MyNewMenu[NM_OPALJPEGT].nm_Flags |= NM_ITEMDISABLED;
   	MyNewMenu[NM_QUALITY].nm_Flags |= NM_ITEMDISABLED;
   	MyNewMenu[NM_ILBMOPAL].nm_Flags |= NM_ITEMDISABLED;
   }
   if (!DCTVBase) {								// no dctv.library so disable dctv output formats
   	MyNewMenu[NM_DCTV3].nm_Flags |= NM_ITEMDISABLED;
   	MyNewMenu[NM_DCTV4].nm_Flags |= NM_ITEMDISABLED;
   }
   if (CreateIconsR) {							/* Supplied in CREATEICONSR=	*/
      MyNewMenu[NM_ICONSR].nm_Flags |= CHECKED;
   }
   else {
      MyNewMenu[NM_ICONSR].nm_Flags &= ~CHECKED;
   }
   if (GHelp) {									/* Supplied in HELP=				*/
      MyNewMenu[NM_HELP].nm_Flags |= CHECKED;
   }
   else {
      MyNewMenu[NM_HELP].nm_Flags &= ~CHECKED;
   }
   if (!handle) {									// Have not managed to open amigaguide help file
   	MyNewMenu[NM_HELP].nm_Flags |= NM_ITEMDISABLED;
   }
   // Switch off all modes except current
	MyNewMenu[NM_MODE0].nm_Flags &= ~CHECKED;
	MyNewMenu[NM_MODE1].nm_Flags &= ~CHECKED;
	MyNewMenu[NM_MODE2].nm_Flags &= ~CHECKED;
	MyNewMenu[NM_MODE3].nm_Flags &= ~CHECKED;
	MyNewMenu[NM_MODE0+RenderMode].nm_Flags |= CHECKED;
	// switch off all output formats except current
	MyNewMenu[NM_ILBM24].nm_Flags &= ~CHECKED;
	MyNewMenu[NM_OPAL24].nm_Flags &= ~CHECKED;
	MyNewMenu[NM_OPAL24T].nm_Flags &= ~CHECKED;
	MyNewMenu[NM_OPAL24F].nm_Flags &= ~CHECKED;
	MyNewMenu[NM_OPAL24FT].nm_Flags &= ~CHECKED;
	MyNewMenu[NM_OPALJPEG].nm_Flags &= ~CHECKED;
	MyNewMenu[NM_OPALJPEGT].nm_Flags &= ~CHECKED;
	MyNewMenu[NM_PBM].nm_Flags &= ~CHECKED;
	MyNewMenu[NM_BW16].nm_Flags &= ~CHECKED;
	MyNewMenu[NM_BW256].nm_Flags &= ~CHECKED;
	MyNewMenu[NM_HAM6].nm_Flags &= ~CHECKED;
	MyNewMenu[NM_HAM8].nm_Flags &= ~CHECKED;
	MyNewMenu[NM_DCTV3].nm_Flags &= ~CHECKED;
	MyNewMenu[NM_DCTV4].nm_Flags &= ~CHECKED;
	MyNewMenu[NM_ILBM24+SaveFormat].nm_Flags |= CHECKED;
	// switch off all input modes except current
	MyNewMenu[NM_ILBMALWAYS].nm_Flags &= ~CHECKED;
	MyNewMenu[NM_ILBMIFILBM].nm_Flags &= ~CHECKED;
	MyNewMenu[NM_ILBMIFCOLOURS].nm_Flags &= ~CHECKED;
	MyNewMenu[NM_ILBMOPAL].nm_Flags &= ~CHECKED;
	MyNewMenu[NM_ILBMALWAYS+OpenMode].nm_Flags |= CHECKED;
}
