// MPMorph - 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

/*
 *  Source machine generated by GadToolsBox V2.0
 *  which is (c) Copyright 1991-1993 Jaba Development
 *
 *  GUI Designed by : M J P
 */

// Note! This has had some source code changes after GadToolsBox generation
// including joining sources together, changing/adding gadgets
// and other source code (etc.) !!!!!
// Most changes should have comments attached

// include headers if not already done so
#ifndef MPMORPH_AMIGA_H
#include "MPMorph-amiga.h"
#endif
#ifndef MPMORPH_H
#include "MPMorph.h"
#endif

struct Screen         *Scr = NULL;
UBYTE                 *PubScreenName = NULL;
APTR                   VisualInfo = NULL;
struct Window         *MPMorphWnd = NULL;
struct Gadget         *MPMorphGList = NULL;
struct Menu           *MPMorphMenus = NULL;
struct IntuiMessage    MPMorphMsg;
UWORD                  MPMorphZoom[4];
struct Gadget         *MPMorphGadgets[19];
UWORD                  MPMorphLeft = 0;
UWORD                  MPMorphTop = 15;
UWORD                  MPMorphWidth = 322;
UWORD                  MPMorphHeight = 188;
//UBYTE                 *MPMorphWdt = (UBYTE *)"MPMorph";
struct TextAttr       *Font, Attr;
UWORD                  FontX, FontY;
UWORD                  OffX, OffY;

// Bottom of Help Gadget
extern int							BottomHelp = 0;
// Position of Help Gadget
extern int HelpLeft = 0;
extern int HelpTop = 0;
extern int HelpWidth = 0;
extern int HelpHeight = 0;

struct NewMenu MPMorphNewMenu[] = {
	NM_TITLE, NULL, NULL, 0, NULL, NULL,							// 0
	NM_ITEM, NULL, NULL, 0, 0L, (APTR)MPMorphMenuNew,			// 1
	NM_ITEM, NULL, NULL, 0, 0L, (APTR)MPMorphMenuOpen,		// 2
	NM_ITEM,	NULL,0,0,0,NULL,										// 3
	NM_SUB, NULL, NULL,0,0L,(APTR)MPMorphMenuRecent1,	// 4
	NM_SUB, NULL, NULL,0,0L,(APTR)MPMorphMenuRecent2, // 5
	NM_SUB, NULL, NULL,0,0L,(APTR)MPMorphMenuRecent3, // 6
	NM_SUB, NULL, NULL,0,0L,(APTR)MPMorphMenuRecent4, // 7
	NM_SUB, NULL, NULL,0,0L,(APTR)MPMorphMenuRecent5, // 8
	NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,							// 9
	NM_ITEM, NULL, NULL, 0, 0L, (APTR)MPMorphMenuSave,			// 10
	NM_ITEM, NULL, NULL, 0, 0L, (APTR)MPMorphMenuSaveAs,	//11
	NM_ITEM, NULL, NULL, 0, 0L, (APTR)MPMorphMenuDelete,			// 12
	NM_ITEM, NM_BARLABEL, NULL, 0, 0L, NULL,							// 13
	NM_ITEM, NULL, NULL, 0, 0L, (APTR)MPMorphMenuAbout,			// 14
	NM_ITEM, NM_BARLABEL, NULL, 0, 0L, NULL,							// 15
	NM_ITEM, NULL, NULL, 0, 0L, (APTR)MPMorphMenuEditPoints,	// 16
	NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,							// 17
	NM_ITEM, NULL, NULL, 0, 0L, (APTR)MPMorphMenuQuit,			// 18
	{ NM_TITLE, NULL,0,0,0,NULL },									//	19
		{ NM_ITEM,NULL,NULL, CHECKIT|MENUTOGGLE,0,NULL },			// 20
		{ NM_ITEM,NULL,NULL, CHECKIT|MENUTOGGLE,0,NULL },			// 21
		{ NM_ITEM,NULL,NULL,0,NULL},						//				22
		{ NM_ITEM,NULL,NULL,0,NULL},							//			23
		{ NM_ITEM,NULL,NULL,0,NULL},						//				24
   	{ NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },								// 			25
   	{ NM_ITEM,NULL,NULL,CHECKIT|MENUTOGGLE,NULL},//			26
   	{ NM_ITEM,NULL,NULL,CHECKIT|MENUTOGGLE,NULL},	//				27
		{ NM_ITEM,NULL, NULL, 0, NULL },					// 			28
   	{ NM_ITEM,NULL, NULL, 0, NULL },						// 		29
   	{ NM_ITEM,NULL, NULL, 0, NULL },				// 			30
   	{ NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },								// 			31
		{ NM_ITEM,NULL,NULL,0,NULL },						//				32
		{ NM_ITEM,NULL,NULL,0,NULL },								//				33
		{ NM_ITEM,NULL,NULL,0,NULL },									//				34
  	{ NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },									// 			35
	{ NM_ITEM,NULL,NULL,CHECKIT|MENUTOGGLE,NULL },	//				36
	{ NM_TITLE, NULL,0,0,0,NULL },											//		37
	{ NM_ITEM, NULL,"F1",NM_COMMANDSTRING,0L,NULL},			// 38
	{ NM_ITEM, NULL,"F2",NM_COMMANDSTRING|NM_ITEMDISABLED,0L,NULL},				// 39
	{ NM_ITEM, NULL,"F3",NM_COMMANDSTRING|NM_ITEMDISABLED,0L,NULL},				// 40
	{ NM_ITEM, NULL,"F4",NM_COMMANDSTRING|NM_ITEMDISABLED,0L,NULL},				// 41
	{ NM_ITEM, NULL,"F5",NM_COMMANDSTRING|NM_ITEMDISABLED,0L,NULL},				// 42
	{ NM_ITEM, NULL,"F6",NM_COMMANDSTRING|NM_ITEMDISABLED,0L,NULL},				// 43
	{ NM_ITEM, NULL,"F7",NM_COMMANDSTRING|NM_ITEMDISABLED,0L,NULL},				// 44
	{ NM_ITEM, NULL,"F8",NM_COMMANDSTRING|NM_ITEMDISABLED,0L,NULL},				// 45
	{ NM_ITEM, NULL,"F9",NM_COMMANDSTRING|NM_ITEMDISABLED,0L,NULL},				// 46
  	{ NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },								// 47
	{ NM_ITEM, NULL,NULL,NULL,0L,NULL},				// 48
	{ NM_ITEM, NULL,NULL,NM_ITEMDISABLED,0L,NULL},				// 49
	{ NM_ITEM, NULL,NULL,NULL,0L,NULL},							// 50
	NM_END, NULL, NULL, 0, 0L, 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, NULL,NULL,0,0,NULL },			// 0
		{ NM_ITEM,NULL,NULL,0,0,0 },			// 1
		{ NM_ITEM,NULL,NULL,0,0,0 },	// 2
   	{ NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },		// 3
   	{ NM_ITEM,NULL,NULL,0,0,0},					// 4
   	{ NM_ITEM,NULL,NULL,0,0,0},			// 5
   	{ NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },		// 6
		{ NM_ITEM,NULL,NULL,0,0,0 },			// 7
   	{ NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },		// 8
		{ NM_ITEM,NULL,NULL,0,0,0 },		// 9
   	{ NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },		// 10
		{ NM_ITEM,NULL,NULL,0,0,0 },					// 11
	{ NM_TITLE, NULL,0,0,0,NULL},					// 12
		{ NM_ITEM,NULL,NULL,0,0,0 },		// 13
		{ NM_ITEM,NULL,NULL,0,0,0 },		// 14
   	{ NM_ITEM,NULL,NULL,0,0,NULL },			// 15
			{ NM_SUB,NULL,NULL,0,0,0 },				// 16
			{ NM_SUB,NULL,NULL,0,0,0 },			// 17
			{ NM_SUB,NULL,NULL,0,0,0 },			// 18
			{ NM_SUB,NULL,NULL,0,0,0 },				// 19
			{ NM_SUB,NULL,NULL,0,0,0 },				// 20
		{ NM_ITEM,NULL,0,0,0,NULL },										// 21
			{ NM_SUB, NULL,NULL,CHECKIT,~1,NULL },					// 22
			{ NM_SUB, NULL,NULL,CHECKIT,~2,NULL },					// 23
			{ NM_SUB, NULL,NULL,CHECKIT,~4,NULL },					// 24
			{ NM_SUB, NULL,NULL,CHECKIT,~8,NULL },					// 25
			{ NM_SUB, NULL,NULL,CHECKIT,~16,NULL },					// 26
			{ NM_SUB, NULL,NULL,CHECKIT,~32,NULL },					// 27
			{ NM_SUB, NULL,NULL,CHECKIT,~64,NULL },					// 28
			{ NM_SUB, NULL,NULL,CHECKIT|CHECKED,~128,NULL },		// 29
	{ NM_TITLE, NULL,0,0,0,NULL },									//	30
		{ NM_ITEM,NULL,NULL, CHECKIT|MENUTOGGLE,0,NULL },			// 31
		{ NM_ITEM,NULL,NULL, CHECKIT|MENUTOGGLE,0,NULL },			// 32
		{ NM_ITEM,NULL,NULL,0,NULL},						//				33
		{ NM_ITEM,NULL,NULL,0,NULL},							//			34
		{ NM_ITEM,NULL,NULL,0,NULL},						//				35
   	{ NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },								// 			36
   	{ NM_ITEM,NULL,NULL,CHECKIT|MENUTOGGLE,NULL},//			37
   	{ NM_ITEM,NULL,NULL,CHECKIT|MENUTOGGLE,NULL},	//				38
		{ NM_ITEM,NULL, NULL, 0, NULL },					// 			39
   	{ NM_ITEM,NULL, NULL, 0, NULL },						// 			40
   	{ NM_ITEM,NULL, NULL, 0, NULL },				// 			41
   	{ NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },								// 			42
		{ NM_ITEM,NULL,NULL,0,NULL },						//				43
		{ NM_ITEM,NULL,NULL,0,NULL },								//				44
		{ NM_ITEM,NULL,NULL,0,NULL },									//				45
  	{ NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },									// 			46
	{ NM_ITEM,NULL,NULL,CHECKIT|MENUTOGGLE,NULL },	//				47
	{ NM_TITLE, NULL,0,0,0,NULL },											//		48
	{ NM_ITEM, NULL,"F1",NM_COMMANDSTRING,0L,NULL},			// 49
	{ NM_ITEM, NULL,"F2",NM_COMMANDSTRING|NM_ITEMDISABLED,0L,NULL},				// 50
	{ NM_ITEM, NULL,"F3",NM_COMMANDSTRING|NM_ITEMDISABLED,0L,NULL},				// 51
	{ NM_ITEM, NULL,"F4",NM_COMMANDSTRING|NM_ITEMDISABLED,0L,NULL},				// 52
	{ NM_ITEM, NULL,"F5",NM_COMMANDSTRING|NM_ITEMDISABLED,0L,NULL},				// 53
	{ NM_ITEM, NULL,"F6",NM_COMMANDSTRING|NM_ITEMDISABLED,0L,NULL},				// 54
	{ NM_ITEM, NULL,"F7",NM_COMMANDSTRING|NM_ITEMDISABLED,0L,NULL},				// 55
	{ NM_ITEM, NULL,"F8",NM_COMMANDSTRING|NM_ITEMDISABLED,0L,NULL},				// 56
	{ NM_ITEM, NULL,"F9",NM_COMMANDSTRING|NM_ITEMDISABLED,0L,NULL},				// 57
  	{ NM_ITEM,NM_BARLABEL,NULL,0,0,NULL },								// 58
	{ NM_ITEM, NULL,NULL,NULL,0L,NULL},				// 59
	{ NM_ITEM, NULL,NULL,NM_ITEMDISABLED,0L,NULL},				// 60
	{ NM_ITEM, NULL,NULL,NULL,0L,NULL},							// 61
   { NM_END,NULL,NULL,0,0,NULL }
};

UBYTE *SinglePictureLabels[] = {
	NULL,
	NULL,
	NULL,
	NULL,
	NULL
};

UWORD MPMorphGTypes[] = {
	BUTTON_KIND,
	BUTTON_KIND,
	NUMBER_KIND,
	NUMBER_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	CYCLE_KIND,
	BUTTON_KIND,
	STRING_KIND,
	STRING_KIND,
	STRING_KIND,
	STRING_KIND,
	INTEGER_KIND,
	INTEGER_KIND,
	STRING_KIND,
	TEXT_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
};

struct NewGadget MPMorphNGad[] = {
	299, 57, 20, 14, (UBYTE *)"«", NULL, GD_GetFile1, PLACETEXT_IN, NULL, (APTR)GetFile1Clicked,
	299, 75, 20, 14, (UBYTE *)"«", NULL, GD_GetFile2, PLACETEXT_IN, NULL, (APTR)GetFile2Clicked,
	72, 96, 37, 13, NULL, NULL, GD_Width, PLACETEXT_LEFT, NULL, NULL,
	282, 96, 37, 13, NULL, NULL, GD_Height, PLACETEXT_LEFT, NULL, NULL,
	299, 21, 20, 14, (UBYTE *)"«", NULL, GD_GetFileOne, PLACETEXT_IN, NULL, (APTR)GetFileOneClicked,
	299, 39, 20, 14, (UBYTE *)"«", NULL, GD_GetFileTwo, PLACETEXT_IN, NULL, (APTR)GetFileTwoClicked,
	2, 169, 317, 15, NULL, NULL, GD_EditPoints, PLACETEXT_IN, NULL, (APTR)EditPointsClicked,
	2, 133, 90, 14, NULL, NULL, GD_SinglePicture, 0, NULL, (APTR)SinglePictureClicked,
	299, 151, 20, 14, (UBYTE *)"«", NULL, GD_GetSaveName, PLACETEXT_IN, NULL, (APTR)GetSaveNameClicked,
	72, 21, 223, 14, NULL, NULL, GD_FileOne, PLACETEXT_LEFT, NULL, (APTR)FileOneClicked,
	72, 39, 223, 14, NULL, NULL, GD_FileTwo, PLACETEXT_LEFT, NULL, (APTR)FileTwoClicked,
	72, 57, 223, 14, NULL, NULL, GD_File241, PLACETEXT_LEFT, NULL, (APTR)File241Clicked,
	72, 75, 223, 14, NULL, NULL, GD_File242, PLACETEXT_LEFT, NULL, (APTR)File242Clicked,
	160, 133, 52, 14, NULL, NULL, GD_Frames, PLACETEXT_LEFT, NULL, (APTR)FramesClicked,
	275, 133, 44, 14, NULL, NULL, GD_Start, PLACETEXT_LEFT, NULL, (APTR)StartClicked,
	72, 151, 223, 14, NULL, NULL, GD_Name, PLACETEXT_LEFT, NULL, (APTR)NameClicked,
	2, 4, 317, 13,NULL,NULL,GD_Help,0,NULL,NULL,
	2, 114, 156, 14, NULL, NULL, GD_SetSize, PLACETEXT_IN, NULL, (APTR)SetSizeClicked,
	163, 114, 156, 14, NULL, NULL, GD_Scale, PLACETEXT_IN, NULL, (APTR)ScaleClicked,
};

ULONG MPMorphGTags[] = {
	(TAG_DONE),
	(TAG_DONE),
	(GTNM_Border), TRUE, (TAG_DONE),
	(GTNM_Border), TRUE, (TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE),
	(GT_Underscore), '_', (GTCY_Labels), (ULONG)&SinglePictureLabels[0], (TAG_DONE),
	(TAG_DONE),
	(STRINGA_ExitHelp), TRUE, (GTST_MaxChars), 256, (STRINGA_Justification), (GACT_STRINGRIGHT), (GT_Underscore), '_', (TAG_DONE),
	(STRINGA_ExitHelp), TRUE, (GTST_MaxChars), 256, (STRINGA_Justification), (GACT_STRINGRIGHT), (GT_Underscore), '_', (TAG_DONE),
	(STRINGA_ExitHelp), TRUE, (GTST_MaxChars), 256, (STRINGA_Justification), (GACT_STRINGRIGHT), (GT_Underscore), '_', (TAG_DONE),
	(STRINGA_ExitHelp), TRUE, (GTST_MaxChars), 256, (STRINGA_Justification), (GACT_STRINGRIGHT), (GT_Underscore), '_', (TAG_DONE),
	(STRINGA_ExitHelp), TRUE, 	(GTIN_Number), 1, (GTIN_MaxChars), 10, (GT_Underscore), '_', (TAG_DONE),
	(STRINGA_ExitHelp), TRUE, 	(GTIN_Number), 1, (GTIN_MaxChars), 10, (GT_Underscore), '_', (TAG_DONE),
	(STRINGA_ExitHelp), TRUE, 	(GTST_MaxChars), 256, (STRINGA_Justification), (GACT_STRINGRIGHT), (GT_Underscore), '_', (TAG_DONE),
	(GTTX_Border), TRUE, /* GTTX_Justification, GTJ_CENTER, GTTX_Clipped, TRUE, */ (TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE),
	(GT_Underscore), '_', (TAG_DONE),
};

// The compute font sizing stuff has been changed
static UWORD ComputeX( UWORD value )
{
	return(( UWORD )((( FontX * value ) + 3 ) / 6 ));
}

static UWORD ComputeY( UWORD value )
{
	return(( UWORD )((( FontY * value ) + 5 ) / 10 ));
}

static void ComputeFont( UWORD width, UWORD height )
{
	Font = &Attr;
	Font->ta_Name = (STRPTR)Scr->RastPort.Font->tf_Message.mn_Node.ln_Name;
	Font->ta_YSize = FontY = Scr->RastPort.Font->tf_YSize;
	FontX = Scr->RastPort.Font->tf_XSize;

	OffX = Scr->WBorLeft;
	OffY = Scr->RastPort.TxHeight + Scr->WBorTop + 1;

	if ( width && height ) {
		if (( ComputeX( width ) + OffX + Scr->WBorRight ) > Scr->Width )
			goto UseTopaz;
		if (( ComputeY( height ) + OffY + Scr->WBorBottom ) > Scr->Height )
			goto UseTopaz;
	}
	return;

UseTopaz:
	Font->ta_Name = (STRPTR)"topaz.font";
	FontX = FontY = Font->ta_YSize = 8;
}

int SetupScreen( void )
{
	struct Image *i;
	struct DrawInfo *dri;
	if ( ! ( Scr = LockPubScreen( PubScreenName )))
		return( 1L );

// Is screen low or hires (this check is not really the correct method
// but there does not appear to be a correct method - How does Workbench
// do it?
	if (!(Scr->ViewPort.Modes & (HIRES | SUPERHIRES))) {
	    n=GS_LOWRES;
	}
   	else {
		n=GS_MEDRES;
   	}
// Get various gadgets to store the size...
   if (dri = GetScreenDrawInfo(Scr)) {
		if (i = (struct Image *)NewObject(NULL,"sysiclass",
										SYSIA_DrawInfo,	dri,
										SYSIA_Which,		SIZEIMAGE,
										SYSIA_Size,			SYSISIZE(n),
										TAG_END)) {
			SIZEIMAGE_W(n) = i->Width;
			SIZEIMAGE_H(n) = i->Height;
			DisposeObject(i);
		}
		if (i = (struct Image *)NewObject(NULL,"sysiclass",
										SYSIA_DrawInfo,	dri,
										SYSIA_Which,		LEFTIMAGE,
										SYSIA_Size,			SYSISIZE(n),
										TAG_END)) {
			LEFTIMAGE_W(n) = i->Width;
			LEFTIMAGE_H(n) = i->Height;
			DisposeObject(i);
		}
		if (i = (struct Image *)NewObject(NULL,"sysiclass",
										SYSIA_DrawInfo,	dri,
										SYSIA_Which,		DOWNIMAGE,
										SYSIA_Size,			SYSISIZE(n),
										TAG_END)) {
			DOWNIMAGE_W(n) = i->Width;
			DOWNIMAGE_H(n) = i->Height;
			DisposeObject(i);
		}
		if (i = (struct Image *)NewObject(NULL,"sysiclass",
										SYSIA_DrawInfo,	dri,
										SYSIA_Which,		UPIMAGE,
										SYSIA_Size,			SYSISIZE(n),
										TAG_END)) {
			UPIMAGE_W(n) = i->Width;
			UPIMAGE_H(n) = i->Height;
			DisposeObject(i);
		}
		if (i = (struct Image *)NewObject(NULL,"sysiclass",
										SYSIA_DrawInfo,	dri,
										SYSIA_Which,		RIGHTIMAGE,
										SYSIA_Size,			SYSISIZE(n),
										TAG_END)) {
			RIGHTIMAGE_W(n) = i->Width;
			RIGHTIMAGE_H(n) = i->Height;
			DisposeObject(i);
		}
		if (i = (struct Image *)NewObject(NULL,"sysiclass",
										SYSIA_DrawInfo,	dri,
										SYSIA_Which,		CLOSEIMAGE,
										SYSIA_Size,			SYSISIZE(n),
										TAG_END)) {
			CLOSEIMAGE_W(n) = i->Width;
			DisposeObject(i);
		}
		if (i = (struct Image *)NewObject(NULL,"sysiclass",
										SYSIA_DrawInfo,	dri,
										SYSIA_Which,		ZOOMIMAGE,
										SYSIA_Size,			SYSISIZE(n),
										TAG_END)) {
			ZOOMIMAGE_W(n) = i->Width;
			DisposeObject(i);
		}
		if (i = (struct Image *)NewObject(NULL,"sysiclass",
										SYSIA_DrawInfo,	dri,
										SYSIA_Which,		DEPTHIMAGE,
										SYSIA_Size,			SYSISIZE(n),
										TAG_END)) {
			DEPTHIMAGE_W(n) = i->Width;
			DisposeObject(i);
		}
		if (n == GS_LOWRES) {
			VSCROLL_W(n) = SIZEIMAGE_W(n) - 6;
			VSCROLL_L(n) = SIZEIMAGE_W(n) - 4;
		}
		else {
			VSCROLL_W(n) = SIZEIMAGE_W(n) - 8;
			VSCROLL_L(n) = SIZEIMAGE_W(n) - 5;
		}
		Check = (struct Image *)NewObject(NULL,"sysiclass",
										SYSIA_DrawInfo,	dri,
										SYSIA_Which,		MENUCHECK,
										SYSIA_Size,			SYSISIZE(n),
//										SYSIA_ReferenceFont,	Scr->RastPort.Font,
										IA_Width,			TextLength(&(Scr->RastPort),"M",1)+2,
										IA_Height,			Scr->RastPort.Font->tf_YSize,
										TAG_END);
		Amiga = (struct Image *)NewObject(NULL,"sysiclass",
										SYSIA_DrawInfo,	dri,
										SYSIA_Which,		AMIGAKEY,
										SYSIA_Size,			SYSISIZE(n),
//										SYSIA_ReferenceFont,	Scr->RastPort.Font,
										IA_Width,			TextLength(&(Scr->RastPort),"M",1)+4,
										IA_Height,			Scr->RastPort.Font->tf_YSize,
										TAG_END);
		FreeScreenDrawInfo(Scr,dri);
	}

	ComputeFont( 0, 0 );

	if ( ! ( VisualInfo = GetVisualInfo( Scr, TAG_DONE )))
		return( 2L );

	return( 0L );
}

void CloseDownScreen( void )
{

	if ( VisualInfo ) {
		FreeVisualInfo( VisualInfo );
		VisualInfo = NULL;
	}

	if ( Scr        ) {
		UnlockPubScreen( NULL, Scr );
		Scr = NULL;
	}
	if (Amiga) {
		DisposeObject(Amiga);
		Amiga = NULL;
	}
	if (Check) {
		DisposeObject(Check);
		Check = NULL;
	}
}
typedef int (FPTR(void));
int HandleMPMorphIDCMP( void )
{
	struct IntuiMessage	*m;
	struct MenuItem		*n;
	int						t1;
	int			(*func)(void);
	BOOL			running = TRUE;
	ULONG HNum;

	while( m = GT_GetIMsg( MPMorphWnd->UserPort )) {

		CopyMem(( char * )m, ( char * )&MPMorphMsg, (long)sizeof( struct IntuiMessage ));

		GT_ReplyIMsg( m );

		switch ( MPMorphMsg.Class ) {

			case	IDCMP_REFRESHWINDOW:
				GT_BeginRefresh( MPMorphWnd );
				GT_EndRefresh( MPMorphWnd, TRUE );
				break;

			case	IDCMP_CLOSEWINDOW:
				running = MPMorphCloseWindow();
				break;

			case	IDCMP_MENUHELP:
				running = MPMorphMenuHelp();
				break;

			case	IDCMP_VANILLAKEY:
				running = MPMorphVanillaKey();
				break;

			case	IDCMP_RAWKEY:
				running = MPMorphRawKey();
				break;

			case	IDCMP_GADGETUP:
				func = (FPTR *)(( struct Gadget * )MPMorphMsg.IAddress )->UserData;
				running = (*func)();
				break;

// special case - settings/user use no GadToolsBox method
			case	IDCMP_MENUPICK:
				while( MPMorphMsg.Code != MENUNULL ) {
					n = ItemAddress( MPMorphMenus, MPMorphMsg.Code );
					t1 = n->NextSelect;
					if (func = (FPTR *)(GTMENUITEM_USERDATA( n ))) {
						running = (*func)();
					}
					else {
						if (MENUNUM(MPMorphMsg.Code) == M_M_SETTINGS) {
							HandleSettings(MPMorphMsg.Code,NULL);
						}
						else {
							UserMenu(MPMorphMsg.Code);
						}
					}
					MPMorphMsg.Code = t1;
				}
				break;

// special case GadgetHelp
// see the amigaguide distribution for some of how
// this stuff works
			case	IDCMP_GADGETHELP:
 				if ((MPMorphMsg.IAddress == NULL) ||
 					 (MPMorphMsg.IAddress == MPMorphWnd)) {
 					HNum = H_IWindow;
 				}
 				else {
					if (((struct Gadget *)MPMorphMsg.IAddress)->GadgetType & GTYP_SYSGADGET) {
						switch (((struct Gadget *)MPMorphMsg.IAddress)->GadgetType & GTYP_SYSTYPEMASK) {
 						case GTYP_WDRAGGING:
							HNum = H_IDrag;
							break;
						case GTYP_WUPFRONT:
							HNum = H_IDepth;
							break;
						case GTYP_WDOWNBACK:
 							HNum = H_IZoom;
							break;
						case GTYP_CLOSE:
							HNum = H_IClose;
							break;
						default:
		 					HNum = H_IWindow;
		 					break;
 						}
 					}
 					else {
						switch (((struct Gadget *)MPMorphMsg.IAddress)->GadgetID) {
						case GD_Help:
							HNum = H_HelpGad;
 							break;
 						case GD_GetFile1:
 							HNum = H_G24File1;
 							break;
 						case GD_GetFile2:
 							HNum = H_G24File2;
 							break;
 						case GD_Width:
 							HNum = H_Width;
 							break;
 						case GD_Height:
 							HNum = H_Height;
 							break;
 						case GD_GetFileOne:
 							HNum = H_GFileOne;
 							break;
 						case GD_GetFileTwo:
 							HNum = H_GFileTwo;
 							break;
 						case GD_EditPoints:
 							HNum = H_EPoints;
 							break;
 						case GD_SinglePicture:
 							HNum = H_Single;
 							break;
 						case GD_GetSaveName:
 							HNum = H_GName;
 							break;
 						case GD_FileOne:
 							HNum = H_FileOne;
 							break;
 						case GD_FileTwo:
 							HNum = H_FileTwo;
 							break;
 						case GD_File241:
 							HNum = H_24File1;
 							break;
 						case GD_File242:
 							HNum = H_24File2;
 							break;
 						case GD_Frames:
 							HNum = H_Frames;
 							break;
 						case GD_Start:
 							HNum = H_Start;
 							break;
 						case GD_Name:
 							HNum = H_Name;
 							break;
 						case GD_SetSize:
 							HNum = H_SetSize;
 							break;
 						case GD_Scale:
 							HNum = H_Scale;
 							break;
 						default:
 							HNum = H_IWindow;
 							break;
						}
 					}
 				}
 				MPHnum = HNum;
				// display full or short help
				if (GHelp && HNum) {
 					help(HNum);
 				}
 				else {
	 				ihelp(HNum);
 				}
				break;
		}
	}
	return( (int) running );
}

static char MUser2[108];
static char MUser3[108];
static char MUser4[108];
static char MUser5[108];
static char MUser6[108];
static char MUser7[108];
static char MUser8[108];
static char MUser9[108];

static void
SetMenu(int men,int msg) {
	char *x;
	x = MyGetMsg(msg);
	if (*x != ' ') {
		if (!MPMorphNewMenu[men].nm_CommKey) {
			MPMorphNewMenu[men].nm_CommKey = x;
		}
	}
	if (x[2]) {
		if (!MPMorphNewMenu[men].nm_Label) {
			MPMorphNewMenu[men].nm_Label = &(x[2]);
		}
	}
}

static void
SetMenu1(int men,int msg) {
	char *x;
	x = MyGetMsg(msg);
	if (*x != ' ') {
		if (!MyNewMenu[men].nm_CommKey) {
			MyNewMenu[men].nm_CommKey = x;
		}
	}
	if (x[2]) {
		if (!MyNewMenu[men].nm_Label) {
			MyNewMenu[men].nm_Label = &(x[2]);
		}
	}
}

int OpenMPMorphWindow( void )
{
	struct NewGadget	ng;
	struct Gadget	*g;
	UWORD		lc, tc;
	UWORD		wleft = MPMorphLeft, wtop, ww, wh;
	char drive[108];
	char path[256];
	char node[108];
	char ext[108];

	SetMenu(M_NM_PROJECT,MSG_M_NM_PROJECT);
	SetMenu(M_NM_NEW,MSG_M_NM_NEW);
	SetMenu(M_NM_OPEN,MSG_M_NM_OPEN);
	SetMenu(M_NM_RECENT,MSG_M_NM_RECENT);
	SetMenu(M_NM_RECENT1,MSG_M_NM_RECENT1);
	MPMorphNewMenu[M_NM_RECENT1].nm_Label = FilePart(Recent1);
	SetMenu(M_NM_RECENT2,MSG_M_NM_RECENT2);
	MPMorphNewMenu[M_NM_RECENT2].nm_Label = FilePart(Recent2);
	SetMenu(M_NM_RECENT3,MSG_M_NM_RECENT3);
	MPMorphNewMenu[M_NM_RECENT3].nm_Label = FilePart(Recent3);
	SetMenu(M_NM_RECENT4,MSG_M_NM_RECENT4);
	MPMorphNewMenu[M_NM_RECENT4].nm_Label = FilePart(Recent4);
	SetMenu(M_NM_RECENT5,MSG_M_NM_RECENT5);
	MPMorphNewMenu[M_NM_RECENT5].nm_Label = FilePart(Recent5);
	SetMenu(M_NM_SAVE,MSG_M_NM_SAVE);
	SetMenu(M_NM_SAVEAS,MSG_M_NM_SAVEAS);
	SetMenu(M_NM_DELETE,MSG_M_NM_DELETE);
	SetMenu(M_NM_ABOUT,MSG_M_NM_ABOUT);
	SetMenu(M_NM_EDITPOINTS,MSG_M_NM_EDITPOINTS);
	SetMenu(M_NM_QUIT,MSG_M_NM_QUIT);
	SetMenu(M_NM_SETTINGS,MSG_M_NM_SETTINGS);
	SetMenu(M_NM_CREATEICONS,MSG_M_NM_CREATEICONS);
	SetMenu(M_NM_ZOOM,MSG_M_NM_ZOOM);
	SetMenu(M_NM_SCREEN,MSG_M_NM_SCREEN);
	SetMenu(M_NM_CUSTOM,MSG_M_NM_CUSTOM);
	SetMenu(M_NM_SPREVIEW,MSG_M_NM_SPREVIEW);
	SetMenu(M_NM_ICONSP,MSG_M_NM_ICONSP);
	SetMenu(M_NM_KEEPS,MSG_M_NM_KEEPS);
	SetMenu(M_NM_LOADS,MSG_M_NM_LOADS);
	SetMenu(M_NM_SAVES,MSG_M_NM_SAVES);
	SetMenu(M_NM_SAVESAS,MSG_M_NM_SAVESAS);
	SetMenu(M_NM_RESETD,MSG_M_NM_RESETD);
	SetMenu(M_NM_LASTS,MSG_M_NM_LASTS);
	SetMenu(M_NM_RESTORE,MSG_M_NM_RESTORE);
	SetMenu(M_NM_HELP,MSG_M_NM_HELP);
	SetMenu(M_NM_USER,MSG_M_NM_USER);
	SetMenu(M_NM_UPREVIEW,MSG_M_NM_UPREVIEW);
	SetMenu(M_NM_USER2,MSG_M_NM_USER2);
	if (*User2) {
		strsfn(User2,drive,path,node,ext);
		if (*node) {
			strcpy(MUser2,node);
			MPMorphNewMenu[M_NM_USER2].nm_Label = MUser2;
	      MPMorphNewMenu[M_NM_USER2].nm_Flags &= ~NM_ITEMDISABLED;
			MyNewMenu[NM_USER2].nm_Label = MUser2;
	      MyNewMenu[NM_USER2].nm_Flags &= ~NM_ITEMDISABLED;
		}
	}
	SetMenu(M_NM_USER3,MSG_M_NM_USER3);
	if (*User3) {
		strsfn(User3,drive,path,node,ext);
		if (*node) {
			strcpy(MUser3,node);
			MPMorphNewMenu[M_NM_USER3].nm_Label = MUser3;
	      MPMorphNewMenu[M_NM_USER3].nm_Flags &= ~NM_ITEMDISABLED;
			MyNewMenu[NM_USER3].nm_Label = MUser3;
	      MyNewMenu[NM_USER3].nm_Flags &= ~NM_ITEMDISABLED;
		}
	}
	SetMenu(M_NM_USER4,MSG_M_NM_USER4);
	if (*User4) {
		strsfn(User4,drive,path,node,ext);
		if (*node) {
			strcpy(MUser4,node);
			MPMorphNewMenu[M_NM_USER4].nm_Label = MUser4;
	      MPMorphNewMenu[M_NM_USER4].nm_Flags &= ~NM_ITEMDISABLED;
			MyNewMenu[NM_USER4].nm_Label = MUser4;
	      MyNewMenu[NM_USER4].nm_Flags &= ~NM_ITEMDISABLED;
		}
	}
	SetMenu(M_NM_USER5,MSG_M_NM_USER5);
	if (*User5) {
		strsfn(User5,drive,path,node,ext);
		if (*node) {
			strcpy(MUser5,node);
			MPMorphNewMenu[M_NM_USER5].nm_Label = MUser5;
	      MPMorphNewMenu[M_NM_USER5].nm_Flags &= ~NM_ITEMDISABLED;
			MyNewMenu[NM_USER5].nm_Label = MUser5;
	      MyNewMenu[NM_USER5].nm_Flags &= ~NM_ITEMDISABLED;
		}
	}
	SetMenu(M_NM_USER6,MSG_M_NM_USER6);
	if (*User6) {
		strsfn(User6,drive,path,node,ext);
		if (*node) {
			strcpy(MUser6,node);
			MPMorphNewMenu[M_NM_USER6].nm_Label = MUser6;
	      MPMorphNewMenu[M_NM_USER6].nm_Flags &= ~NM_ITEMDISABLED;
			MyNewMenu[NM_USER6].nm_Label = MUser6;
	      MyNewMenu[NM_USER6].nm_Flags &= ~NM_ITEMDISABLED;
		}
	}
	SetMenu(M_NM_USER7,MSG_M_NM_USER7);
	if (*User7) {
		strsfn(User7,drive,path,node,ext);
		if (*node) {
			strcpy(MUser7,node);
			MPMorphNewMenu[M_NM_USER7].nm_Label = MUser7;
	      MPMorphNewMenu[M_NM_USER7].nm_Flags &= ~NM_ITEMDISABLED;
			MyNewMenu[NM_USER7].nm_Label = MUser7;
	      MyNewMenu[NM_USER7].nm_Flags &= ~NM_ITEMDISABLED;
		}
	}
	SetMenu(M_NM_USER8,MSG_M_NM_USER8);
	if (*User8) {
		strsfn(User8,drive,path,node,ext);
		if (*node) {
			strcpy(MUser8,node);
			MPMorphNewMenu[M_NM_USER8].nm_Label = MUser8;
	      MPMorphNewMenu[M_NM_USER8].nm_Flags &= ~NM_ITEMDISABLED;
			MyNewMenu[NM_USER8].nm_Label = MUser8;
	      MyNewMenu[NM_USER8].nm_Flags &= ~NM_ITEMDISABLED;
		}
	}
	SetMenu(M_NM_USER9,MSG_M_NM_USER9);
	if (*User9) {
		strsfn(User9,drive,path,node,ext);
		if (*node) {
			strcpy(MUser9,node);
			MPMorphNewMenu[M_NM_USER9].nm_Label = MUser9;
	      MPMorphNewMenu[M_NM_USER9].nm_Flags &= ~NM_ITEMDISABLED;
			MyNewMenu[NM_USER9].nm_Label = MUser9;
	      MyNewMenu[NM_USER9].nm_Flags &= ~NM_ITEMDISABLED;
		}
	}
	SetMenu(M_NM_STARTLEARNING,MSG_M_NM_STARTLEARNING);
	SetMenu(M_NM_STOPLEARNING,MSG_M_NM_STOPLEARNING);
	SetMenu(M_NM_MACRO,MSG_M_NM_MACRO);

	SetMenu1(NM_PROJECT,MSG_M_NM_PROJECT);
	SetMenu1(NM_NEWPOINTS,MSG_NM_NEWPOINTS);
	SetMenu1(NM_OPENPOINTS,MSG_NM_OPENPOINTS);
	SetMenu1(NM_SAVE,MSG_M_NM_SAVE);
	SetMenu1(NM_SAVEAS,MSG_M_NM_SAVEAS);
	SetMenu1(NM_ABOUT,MSG_M_NM_ABOUT);
	SetMenu1(NM_EXITPOINTS,MSG_NM_EXITPOINTS);
	SetMenu1(NM_QUIT,MSG_M_NM_QUIT);
	SetMenu1(NM_EDIT,MSG_NM_EDIT);
	SetMenu1(NM_ADDGRID,MSG_NM_ADDGRID);
	SetMenu1(NM_TRIANGULATE,MSG_NM_TRIANGULATE);
	SetMenu1(NM_FRAME,MSG_NM_FRAME);
	SetMenu1(NM_FIRST,MSG_NM_FIRST);
	SetMenu1(NM_PREVIOUS,MSG_NM_PREVIOUS);
	SetMenu1(NM_GOTO,MSG_NM_GOTO);
	SetMenu1(NM_NEXT,MSG_NM_NEXT);
	SetMenu1(NM_LAST,MSG_NM_LAST);
	SetMenu1(NM_EMODE,MSG_NM_EMODE);
	SetMenu1(NM_M_ONE,MSG_NM_M_ONE);
	SetMenu1(NM_M_TWO,MSG_NM_M_TWO);
	SetMenu1(NM_M_REL,MSG_NM_M_REL);
	SetMenu1(NM_M_ADD,MSG_NM_M_ADD);
	SetMenu1(NM_M_DEL,MSG_NM_M_DEL);
	SetMenu1(NM_M_LNK,MSG_NM_M_LNK);
	SetMenu1(NM_M_UNL,MSG_NM_M_UNL);
	SetMenu1(NM_M_MOV,MSG_NM_M_MOV);
	SetMenu1(NM_SETTINGS,MSG_M_NM_SETTINGS);
	SetMenu1(NM_CREATEICONS,MSG_M_NM_CREATEICONS);
	SetMenu1(NM_ZOOM,MSG_M_NM_ZOOM);
	SetMenu1(NM_SCREEN,MSG_M_NM_SCREEN);
	SetMenu1(NM_CUSTOM,MSG_M_NM_CUSTOM);
	SetMenu1(NM_SPREVIEW,MSG_M_NM_SPREVIEW);
	SetMenu1(NM_ICONSP,MSG_M_NM_ICONSP);
	SetMenu1(NM_KEEPS,MSG_M_NM_KEEPS);
	SetMenu1(NM_LOADS,MSG_M_NM_LOADS);
	SetMenu1(NM_SAVES,MSG_M_NM_SAVES);
	SetMenu1(NM_SAVESAS,MSG_M_NM_SAVESAS);
	SetMenu1(NM_RESETD,MSG_M_NM_RESETD);
	SetMenu1(NM_LASTS,MSG_M_NM_LASTS);
	SetMenu1(NM_RESTORE,MSG_M_NM_RESTORE);
	SetMenu1(NM_HELP,MSG_M_NM_HELP);
	SetMenu1(NM_USER,MSG_M_NM_USER);
	SetMenu1(NM_UPREVIEW,MSG_M_NM_UPREVIEW);
	SetMenu1(NM_USER2,MSG_M_NM_USER2);
	SetMenu1(NM_USER3,MSG_M_NM_USER3);
	SetMenu1(NM_USER4,MSG_M_NM_USER4);
	SetMenu1(NM_USER5,MSG_M_NM_USER5);
	SetMenu1(NM_USER6,MSG_M_NM_USER6);
	SetMenu1(NM_USER7,MSG_M_NM_USER7);
	SetMenu1(NM_USER8,MSG_M_NM_USER8);
	SetMenu1(NM_USER9,MSG_M_NM_USER9);
	SetMenu1(NM_STARTLEARNING,MSG_M_NM_STARTLEARNING);
	SetMenu1(NM_STOPLEARNING,MSG_M_NM_STOPLEARNING);
	SetMenu1(NM_MACRO,MSG_M_NM_MACRO);

	MPMorphNGad[GD_Width].ng_GadgetText = MyGetMsg(MSG_GD_Width) + 2;
	MPMorphNGad[GD_Height].ng_GadgetText = MyGetMsg(MSG_GD_Height) + 2;
	MPMorphNGad[GD_EditPoints].ng_GadgetText = MyGetMsg(MSG_GD_EditPoints) + 2;
	MPMorphNGad[GD_FileOne].ng_GadgetText = MyGetMsg(MSG_GD_FileOne) + 2;
	MPMorphNGad[GD_FileTwo].ng_GadgetText = MyGetMsg(MSG_GD_FileTwo) + 2;
	MPMorphNGad[GD_File241].ng_GadgetText = MyGetMsg(MSG_GD_File241) + 2;
	MPMorphNGad[GD_File242].ng_GadgetText = MyGetMsg(MSG_GD_File242) + 2;
	MPMorphNGad[GD_Name].ng_GadgetText = MyGetMsg(MSG_GD_Name) + 2;
	MPMorphNGad[GD_Frames].ng_GadgetText = MyGetMsg(MSG_GD_Frames) + 2;
	MPMorphNGad[GD_Start].ng_GadgetText = MyGetMsg(MSG_GD_Start) + 2;
	MPMorphNGad[GD_SetSize].ng_GadgetText = MyGetMsg(MSG_GD_SetSize) + 2;
	MPMorphNGad[GD_Scale].ng_GadgetText = MyGetMsg(MSG_GD_Scale) + 2;

	SinglePictureLabels[0]=MyGetMsg(MSG_GD_S0);
	SinglePictureLabels[1]=MyGetMsg(MSG_GD_S1);
	SinglePictureLabels[2]=MyGetMsg(MSG_GD_S2);
	SinglePictureLabels[3]=MyGetMsg(MSG_GD_S3);

	MPMorphTop = Scr->BarHeight + 1;
	wtop = MPMorphTop;
	ComputeFont( MPMorphWidth, MPMorphHeight );

	ww = ComputeX( MPMorphWidth );
	wh = ComputeY( MPMorphHeight );

	if (( wleft + ww + OffX + Scr->WBorRight ) > Scr->Width ) wleft = Scr->Width - ww;
	if (( wtop + wh + OffY + Scr->WBorBottom ) > Scr->Height ) wtop = Scr->Height - wh;

	if ( ! ( g = CreateContext( &MPMorphGList )))
		return( 1L );

	for( lc = 0, tc = 0; lc < MPMorph_CNT; lc++ ) {

		CopyMem((char * )&MPMorphNGad[ lc ], (char * )&ng, (long)sizeof( struct NewGadget ));

		ng.ng_VisualInfo = VisualInfo;
		ng.ng_TextAttr   = Font;
		ng.ng_LeftEdge   = OffX + ComputeX( ng.ng_LeftEdge );
		ng.ng_TopEdge    = OffY + ComputeY( ng.ng_TopEdge );
		ng.ng_Width      = ComputeX( ng.ng_Width );
		ng.ng_Height     = ComputeY( ng.ng_Height);

		// Store bottom of help gadget
		if (lc == GD_Help) {
			BottomHelp = ng.ng_TopEdge + ng.ng_Height;
			HelpTop = ng.ng_TopEdge+1;
			HelpLeft = ng.ng_LeftEdge;
			HelpWidth = ng.ng_Width-2;
			HelpHeight = ng.ng_Height-3;
		}

		MPMorphGadgets[ lc ] = g = CreateGadgetA((ULONG)MPMorphGTypes[ lc ], g, &ng, ( struct TagItem * )&MPMorphGTags[ tc ] );

		while( MPMorphGTags[ tc ] ) tc += 2;
		tc++;

		if ( NOT g )
			return( 2L );
	}

// update menus based on current settings
	UpdateMenuDefs();

	if ( ! ( MPMorphMenus = CreateMenus( MPMorphNewMenu, 
													GTMN_FullMenu,TRUE,
													TAG_DONE )))
		return( 3L );

	LayoutMenus( MPMorphMenus, VisualInfo, 
				GTMN_NewLookMenus,TRUE,
				Amiga ? GTMN_AmigaKey : TAG_IGNORE, Amiga,
				Check ? GTMN_Checkmark : TAG_IGNORE, Check,
				TAG_DONE );

	MPMorphZoom[0] = MPMorphZoom[1] = (USHORT)~0;
	MPMorphZoom[2]  = ww + OffX + Scr->WBorRight;
	MPMorphZoom[3] = BottomHelp + Scr->WBorBottom + 2;
	if ( ! ( MPMorphWnd = OpenWindowTags( NULL,
				WA_Left,	wleft,
				WA_Top,		wtop,
				WA_Width,	ww + OffX + Scr->WBorRight,
				WA_Height,	wh + OffY + Scr->WBorBottom,
				WA_IDCMP,	IDCMP_GADGETUP|NUMBERIDCMP|BUTTONIDCMP|CHECKBOXIDCMP|STRINGIDCMP|
							INTEGERIDCMP|IDCMP_MENUPICK|IDCMP_CLOSEWINDOW|IDCMP_RAWKEY|IDCMP_VANILLAKEY|
							IDCMP_MENUHELP|IDCMP_REFRESHWINDOW|IDCMP_GADGETHELP|IDCMP_MOUSEMOVE,
				WA_Flags,	WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH,
				WA_Gadgets,	MPMorphGList,
				WA_Title,	&(Version[6]),
//								MPMorphWdt,
				WA_ScreenTitle,	MyGetMsg(MSG_SCRTITLE),
				WA_PubScreen,	Scr,
				WA_Zoom,	MPMorphZoom,
				WA_AutoAdjust,	TRUE,
				WA_PubScreenFallBack,	TRUE,
				WA_MenuHelp,	TRUE,
				WA_NewLookMenus,TRUE,
				Check ? WA_Checkmark: TAG_IGNORE,	Check,
				Amiga ? WA_AmigaKey : TAG_IGNORE,	Amiga,
	 	      WA_HelpGroup,	HelpGroup,
				TAG_DONE )))
	return( 4L );

	AppWindow = AddAppWindow(0,(ULONG)MPMorphWnd,MPMorphWnd,AMsgPortp,
                  			TAG_END);
	// switch on gadget help
	HelpControl(MPMorphWnd,HC_GADGETHELP);

	SetMenuStrip( MPMorphWnd, MPMorphMenus );
	GT_RefreshWindow( MPMorphWnd, NULL );

	ScreenToFront(Scr);

	// !! Do not set earlier - there is no text
	MPMorphNGad[GD_SinglePicture].ng_GadgetText = MyGetMsg(MSG_GD_SinglePicture) + 2;

	return( 0L );
}

void CloseMPMorphWindow( void )
{
	if ( MPMorphMenus      ) {
		if (MPMorphWnd) {
			ClearMenuStrip( MPMorphWnd );
		}
		FreeMenus( MPMorphMenus );
		MPMorphMenus = NULL;
	}

	if (AppWindow) {
		RemoveAppWindow(AppWindow);
		AppWindow = NULL;
	}
	if ( MPMorphWnd        ) {
		CloseWindow( MPMorphWnd );
		MPMorphWnd = NULL;
	}

	if ( MPMorphGList      ) {
		FreeGadgets( MPMorphGList );
		MPMorphGList = NULL;
	}
}
