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

#include <exec/types.h>
#include <intuition/intuition.h>
#include <intuition/classes.h>
#include <intuition/classusr.h>
#include <intuition/imageclass.h>
#include <intuition/gadgetclass.h>
#include <libraries/gadtools.h>
#include <graphics/displayinfo.h>
#include <graphics/gfxbase.h>
#include <clib/exec_protos.h>
#include <clib/intuition_protos.h>
#include <clib/gadtools_protos.h>
#include <clib/graphics_protos.h>
#include <clib/utility_protos.h>
#include <string.h>
#include <clib/diskfont_protos.h>

#include "contact97Gui.h"

struct Screen         *Scr = NULL;
UBYTE                 *PubScreenName = NULL;
APTR                   VisualInfo = NULL;
struct Window         *Project0Wnd = NULL;
struct Window         *Project1Wnd = NULL;
struct Window         *Project2Wnd = NULL;
struct Window         *Project3Wnd = NULL;
struct Gadget         *Project0GList = NULL;
struct Gadget         *Project1GList = NULL;
struct Gadget         *Project2GList = NULL;
struct Gadget         *Project3GList = NULL;
struct Menu           *Project0Menus = NULL;
struct IntuiMessage    Project0Msg;
struct IntuiMessage    Project1Msg;
struct IntuiMessage    Project2Msg;
struct IntuiMessage    Project3Msg;
struct TextFont       *Font       = NULL;
struct Gadget         *Project0Gadgets[7];
struct Gadget         *Project1Gadgets[18];
struct Gadget         *Project2Gadgets[13];
struct Gadget         *Project3Gadgets[1];
UWORD                  Project0Left = 136;
UWORD                  Project0Top = 36;
UWORD                  Project0Width = 406;
UWORD                  Project0Height = 177;
UWORD                  Project1Left = 62;
UWORD                  Project1Top = 16;
UWORD                  Project1Width = 559;
UWORD                  Project1Height = 220;
UWORD                  Project2Left = 97;
UWORD                  Project2Top = 26;
UWORD                  Project2Width = 523;
UWORD                  Project2Height = 208;
UWORD                  Project3Left = 139;
UWORD                  Project3Top = 27;
UWORD                  Project3Width = 405;
UWORD                  Project3Height = 195;
UBYTE                 *Project0Wdt = (UBYTE *)"Contact Name";
UBYTE                 *Project1Wdt = (UBYTE *)"Contact Details";
UBYTE                 *Project2Wdt = (UBYTE *)"Find Contact";
UBYTE                 *Project3Wdt = (UBYTE *)"About";

struct TextAttr XHelvetica11 = {
	( STRPTR )"XHelvetica.font", 11, 0x00, 0x62 };

struct IntuiText Project3IText[] = {
	1, 22, JAM2,155, 38, &XHelvetica11, (UBYTE *)"  Contact 97  ", &Project3IText[1],
	1, 19, JAM2,118, 77, &XHelvetica11, (UBYTE *)" Giftware (c) 1997 Steve Boxall  ", &Project3IText[2],
	1, 3, JAM2,100, 119, &XHelvetica11, (UBYTE *)"  Written Using GadToolsBox & Dice 'C'  ", NULL };

struct NewMenu Project0NewMenu[] = {
	NM_TITLE, (STRPTR)"Contact", NULL, 0, NULL, NULL,
	NM_ITEM, (STRPTR)"Add Name", (STRPTR)"a", 0, 0L, (APTR)Project0Item0,
	NM_ITEM, (STRPTR)"Edit Name", (STRPTR)"e", 0, 0L, (APTR)Project0Edit01,
	NM_ITEM, (STRPTR)"Delete Name", NULL, 0, 0L, (APTR)Project0Delete01,
	NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
	NM_ITEM, (STRPTR)"Find", (STRPTR)"f", 0, 0L, (APTR)Project0Find01,
	NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
	NM_ITEM, (STRPTR)"About", NULL, 0, 0L, (APTR)Project0About01,
	NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
	NM_ITEM, (STRPTR)"Quit", NULL, 0, 0L, (APTR)Project0Quit01,
	NM_TITLE, (STRPTR)"Print", NULL, 0, NULL, NULL,
	NM_ITEM, (STRPTR)"Names + Numbers", NULL, 0, 0L, (APTR)Project0Item1,
	NM_ITEM, (STRPTR)NM_BARLABEL, NULL, 0, 0L, NULL,
	NM_ITEM, (STRPTR)"Names + Addresses", NULL, 0, 0L, (APTR)Project0Item2,
	NM_END, NULL, NULL, 0, 0L, NULL };

UWORD Project0GTypes[] = {
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	STRING_KIND,
	LISTVIEW_KIND,
	BUTTON_KIND,
	BUTTON_KIND
};

UWORD Project1GTypes[] = {
	TEXT_KIND,
	TEXT_KIND,
	TEXT_KIND,
	TEXT_KIND,
	TEXT_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	TEXT_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	STRING_KIND,
	STRING_KIND,
	STRING_KIND,
	LISTVIEW_KIND,
	STRING_KIND,
	STRING_KIND,
	STRING_KIND,
	BUTTON_KIND
};

UWORD Project2GTypes[] = {
	BUTTON_KIND,
	BUTTON_KIND,
	LISTVIEW_KIND,
	TEXT_KIND,
	STRING_KIND,
	TEXT_KIND,
	CHECKBOX_KIND,
	CHECKBOX_KIND,
	CHECKBOX_KIND,
	CHECKBOX_KIND,
	CHECKBOX_KIND,
	TEXT_KIND,
	CHECKBOX_KIND
};

UWORD Project3GTypes[] = {
	BUTTON_KIND
};

struct NewGadget Project0NGad[] = {
	9, 138, 69, 20, (UBYTE *)"Add", NULL, GD_Add01, PLACETEXT_IN, NULL, (APTR)Add01Clicked,
	87, 138, 69, 20, (UBYTE *)"Edit", NULL, GD_Edit01, PLACETEXT_IN, NULL, (APTR)Edit01Clicked,
	321, 138, 69, 20, (UBYTE *)"Quit", NULL, GD_Quit01, PLACETEXT_IN, NULL, (APTR)Quit01Clicked,
	26, 116, 342, 15, NULL, NULL, GD_Name01, 0, NULL, (APTR)Name01Clicked,
	26, 16, 342, 99, NULL, NULL, GD_NameList01, 0, NULL, (APTR)NameList01Clicked,
	165, 138, 69, 20, (UBYTE *)"Find", NULL, GD_Find01, PLACETEXT_IN, NULL, (APTR)Find01Clicked,
	243, 138, 69, 20, (UBYTE *)"Delete", NULL, GD_Delete01, PLACETEXT_IN, NULL, (APTR)Delete01Clicked
};

struct NewGadget Project1NGad[] = {
	37, 6, 123, 18, NULL, NULL, GD_ContactText01, 0, NULL, NULL,
	37, 29, 123, 18, NULL, NULL, GD_CompanyName01, 0, NULL, NULL,
	37, 127, 123, 18, NULL, NULL, GD_Email01, 0, NULL, NULL,
	37, 150, 123, 18, NULL, NULL, GD_Phone01, 0, NULL, NULL,
	38, 57, 123, 18, NULL, NULL, GD_Address, 0, NULL, NULL,
	196, 107, 150, 14, (UBYTE *)"+", NULL, GD_AddAddress01, PLACETEXT_IN, NULL, (APTR)AddAddress01Clicked,
	345, 107, 154, 14, (UBYTE *)"-", NULL, GD_DelAddress01, PLACETEXT_IN, NULL, (APTR)DelAddress01Clicked,
	38, 173, 123, 18, NULL, NULL, GD_FaxNo01, 0, NULL, NULL,
	23, 199, 144, 14, (UBYTE *)"Ok", NULL, GD_OkNew01, PLACETEXT_IN, NULL, (APTR)OkNew01Clicked,
	389, 199, 144, 14, (UBYTE *)"Cancel", NULL, GD_AddCancel01, PLACETEXT_IN, NULL, (APTR)AddCancel01Clicked,
	196, 7, 306, 15, NULL, NULL, GD_ContactName01, 0, NULL, (APTR)ContactName01Clicked,
	196, 31, 306, 15, NULL, NULL, GD_CompanyName01, 0, NULL, (APTR)CompanyName01Clicked,
	197, 91, 303, 15, NULL, NULL, GD_AddressText01, 0, NULL, (APTR)AddressText01Clicked,
	197, 54, 303, 55, NULL, NULL, GD_Address01, 0, NULL, (APTR)Address01Clicked,
	196, 128, 185, 15, NULL, NULL, GD_EmailEntry01, 0, NULL, (APTR)EmailEntry01Clicked,
	196, 151, 185, 15, NULL, NULL, GD_PhoneEntry01, 0, NULL, (APTR)PhoneEntry01Clicked,
	196, 174, 185, 15, NULL, NULL, GD_FaxEntry01, 0, NULL, (APTR)FaxEntry01Clicked,
	206, 199, 144, 14, (UBYTE *)"Print", NULL, GD_PrintIt01, PLACETEXT_IN, NULL, (APTR)PrintIt01Clicked
};

struct NewGadget Project2NGad[] = {
	57, 179, 169, 16, (UBYTE *)"Find", NULL, GD_FindContact01, PLACETEXT_IN, NULL, (APTR)FindContact01Clicked,
	287, 179, 169, 16, (UBYTE *)"Cancel", NULL, GD_CancelFind01, PLACETEXT_IN, NULL, (APTR)CancelFind01Clicked,
	174, 94, 282, 66, NULL, NULL, GD_FindResult01, 0, NULL, (APTR)FindResult01Clicked,
	56, 5, 99, 18, NULL, NULL, GD_SearchText01, 0, NULL, NULL,
	175, 6, 284, 16, NULL, NULL, GD_FindEdit01, 0, NULL, (APTR)FindEdit01Clicked,
	57, 94, 99, 18, NULL, NULL, GD_ResultTitle01, 0, NULL, NULL,
	231, 55, 26, 11, (UBYTE *)"Company", NULL, GD_fndchk01, PLACETEXT_ABOVE, NULL, (APTR)fndchk01Clicked,
	278, 55, 26, 11, (UBYTE *)"Address", NULL, GD_fndchk02, PLACETEXT_ABOVE, NULL, (APTR)fndchk02Clicked,
	325, 55, 26, 11, (UBYTE *)"Email", NULL, GD_fndchk03, PLACETEXT_ABOVE, NULL, (APTR)fndchk03Clicked,
	372, 55, 26, 11, (UBYTE *)"Phone", NULL, GD_fndchk04, PLACETEXT_ABOVE, NULL, (APTR)fndchk04Clicked,
	422, 55, 26, 11, (UBYTE *)"Fax", NULL, GD_fndchk05, PLACETEXT_ABOVE, NULL, (APTR)fndchk05Clicked,
	56, 32, 99, 18, NULL, NULL, GD_fndchktext, 0, NULL, NULL,
	184, 55, 26, 11, (UBYTE *)"Name", NULL, GD_fndchk06, PLACETEXT_ABOVE, NULL, (APTR)fndchk06Clicked
};

struct NewGadget Project3NGad[] = {
	94, 157, 204, 21, (UBYTE *)"Continue", NULL, GD_AboutOk1, PLACETEXT_IN, NULL, (APTR)AboutOk1Clicked
};

ULONG Project0GTags[] = {
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(STRINGA_ExitHelp), TRUE, (GTST_MaxChars), 29, (TAG_DONE),
	(GTLV_ShowSelected), 1L, (TAG_DONE),
	(TAG_DONE),
	(TAG_DONE)
};

ULONG Project1GTags[] = {
	(GTTX_Text), (ULONG)"Contact Name", (GTTX_Border), TRUE, (TAG_DONE),
	(GTTX_Text), (ULONG)"Company Name", (GTTX_Border), TRUE, (TAG_DONE),
	(GTTX_Text), (ULONG)"Email", (GTTX_Border), TRUE, (TAG_DONE),
	(GTTX_Text), (ULONG)"Telephone No", (GTTX_Border), TRUE, (TAG_DONE),
	(GTTX_Text), (ULONG)"Company Address", (GTTX_Border), TRUE, (TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(GTTX_Text), (ULONG)"Fax No", (GTTX_Border), TRUE, (TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(STRINGA_ExitHelp), TRUE, (GTST_MaxChars), 29, (TAG_DONE),
	(STRINGA_ExitHelp), TRUE, (GTST_String), (ULONG)" ", (GTST_MaxChars), 29, (TAG_DONE),
	(STRINGA_ExitHelp), TRUE, (GTST_MaxChars), 29, (TAG_DONE),
	(GTLV_ShowSelected), 1L, (TAG_DONE),
	(STRINGA_ExitHelp), TRUE, (GTST_String), (ULONG)" ", (GTST_MaxChars), 29, (TAG_DONE),
	(STRINGA_ExitHelp), TRUE, (GTST_String), (ULONG)" ", (GTST_MaxChars), 19, (TAG_DONE),
	(STRINGA_ExitHelp), TRUE, (GTST_String), (ULONG)" ", (GTST_MaxChars), 19, (TAG_DONE),
	(TAG_DONE)
};

ULONG Project2GTags[] = {
	(TAG_DONE),
	(TAG_DONE),
	(GTLV_ShowSelected), NULL, (TAG_DONE),
	(GTTX_Text), (ULONG)"Find Text", (GTTX_Border), TRUE, (TAG_DONE),
	(STRINGA_ExitHelp), TRUE, (GTST_MaxChars), 29, (TAG_DONE),
	(GTTX_Text), (ULONG)"Find Result", (GTTX_Border), TRUE, (TAG_DONE),
	(GTCB_Checked), TRUE, (TAG_DONE),
	(GTCB_Checked), TRUE, (TAG_DONE),
	(GTCB_Checked), TRUE, (TAG_DONE),
	(GTCB_Checked), TRUE, (TAG_DONE),
	(GTCB_Checked), TRUE, (TAG_DONE),
	(GTTX_Text), (ULONG)"Check Fields", (GTTX_Border), TRUE, (TAG_DONE),
	(GTCB_Checked), TRUE, (TAG_DONE)
};

ULONG Project3GTags[] = {
	(TAG_DONE)
};

int SetupScreen( void )
{
	if ( ! ( Font = OpenDiskFont( &XHelvetica11 )))
		return( 5L );

	if ( ! ( Scr = LockPubScreen( PubScreenName )))
		return( 1L );

	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 ( Font       ) {
		CloseFont( Font );
		Font = NULL;
	}
}

int HandleProject0IDCMP( void )
{
	struct IntuiMessage	*m;
	struct MenuItem		*n;
	int			(*func)();
	BOOL			running = TRUE;

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

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

		GT_ReplyIMsg( m );

		switch ( Project0Msg.Class ) {

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

			case	IDCMP_CLOSEWINDOW:
				running = Project0CloseWindow();
				break;

			case	IDCMP_RAWKEY:
				running = Project0RawKey();
				break;

			case	IDCMP_GADGETUP:
			case	IDCMP_GADGETDOWN:
				func = ( void * )(( struct Gadget * )Project0Msg.IAddress )->UserData;
				running = func();
				break;

			case	IDCMP_MENUPICK:
				while( Project0Msg.Code != MENUNULL ) {
					n = ItemAddress( Project0Menus, Project0Msg.Code );
					func = (void *)(GTMENUITEM_USERDATA( n ));
					running = func();
					Project0Msg.Code = n->NextSelect;
				}
				break;
		}
	}
	return( running );
}

int OpenProject0Window( void )
{
	struct NewGadget	ng;
	struct Gadget	*g;
	struct TagItem	*tmp;
	UWORD		lc, tc;
	UWORD		offx = Scr->WBorLeft, offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;

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

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

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

		ng.ng_VisualInfo = VisualInfo;
		ng.ng_TextAttr   = &XHelvetica11;
		ng.ng_LeftEdge  += offx;
		ng.ng_TopEdge   += offy;

		if ( Project0GTypes[ lc ] == LISTVIEW_KIND ) {
			if ( tmp = FindTagItem( GTLV_ShowSelected, ( struct TagItem * )&Project0GTags[ tc ] )) {
				if ( tmp->ti_Data ) tmp->ti_Data = (ULONG)g;
			}
		}

		Project0Gadgets[ lc ] = g = CreateGadgetA((ULONG)Project0GTypes[ lc ], g, &ng, ( struct TagItem * )&Project0GTags[ tc ] );

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

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

	if ( ! ( Project0Menus = CreateMenus( Project0NewMenu, GTMN_FrontPen, 0L, TAG_DONE )))
		return( 3L );

	LayoutMenus( Project0Menus, VisualInfo, GTMN_TextAttr, &XHelvetica11, TAG_DONE );

	if ( ! ( Project0Wnd = OpenWindowTags( NULL,
				WA_Left,	Project0Left,
				WA_Top,		Project0Top,
				WA_Width,	Project0Width,
				WA_Height,	Project0Height + offy,
				WA_IDCMP,	BUTTONIDCMP|STRINGIDCMP|LISTVIEWIDCMP|IDCMP_MENUPICK|IDCMP_CLOSEWINDOW|IDCMP_RAWKEY|IDCMP_REFRESHWINDOW,
				WA_Flags,	WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
				WA_Gadgets,	Project0GList,
				WA_Title,	Project0Wdt,
				WA_ScreenTitle,	"Contact 97",
				WA_PubScreen,	Scr,
				TAG_DONE )))
	return( 4L );

	SetMenuStrip( Project0Wnd, Project0Menus );
	GT_RefreshWindow( Project0Wnd, NULL );

	return( 0L );
}

void CloseProject0Window( void )
{
	if ( Project0Menus      ) {
		ClearMenuStrip( Project0Wnd );
		FreeMenus( Project0Menus );
		Project0Menus = NULL;	}

	if ( Project0Wnd        ) {
		CloseWindow( Project0Wnd );
		Project0Wnd = NULL;
	}

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

int HandleProject1IDCMP( void )
{
	struct IntuiMessage	*m;
	int			(*func)();
	BOOL			running = TRUE;

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

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

		GT_ReplyIMsg( m );

		switch ( Project1Msg.Class ) {

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

			case	IDCMP_CLOSEWINDOW:
				running = Project1CloseWindow();
				break;

			case	IDCMP_RAWKEY:
				running = Project1RawKey();
				break;

			case	IDCMP_GADGETUP:
			case	IDCMP_GADGETDOWN:
				func = ( void * )(( struct Gadget * )Project1Msg.IAddress )->UserData;
				running = func();
				break;
		}
	}
	return( running );
}

int OpenProject1Window( void )
{
	struct NewGadget	ng;
	struct Gadget	*g;
	struct TagItem	*tmp;
	UWORD		lc, tc;
	UWORD		offx = Scr->WBorLeft, offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;

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

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

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

		ng.ng_VisualInfo = VisualInfo;
		ng.ng_TextAttr   = &XHelvetica11;
		ng.ng_LeftEdge  += offx;
		ng.ng_TopEdge   += offy;

		if ( Project1GTypes[ lc ] == LISTVIEW_KIND ) {
			if ( tmp = FindTagItem( GTLV_ShowSelected, ( struct TagItem * )&Project1GTags[ tc ] )) {
				if ( tmp->ti_Data ) tmp->ti_Data = (ULONG)g;
			}
		}

		Project1Gadgets[ lc ] = g = CreateGadgetA((ULONG)Project1GTypes[ lc ], g, &ng, ( struct TagItem * )&Project1GTags[ tc ] );

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

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

	if ( ! ( Project1Wnd = OpenWindowTags( NULL,
				WA_Left,	Project1Left,
				WA_Top,		Project1Top,
				WA_Width,	Project1Width,
				WA_Height,	Project1Height + offy,
				WA_IDCMP,	TEXTIDCMP|BUTTONIDCMP|STRINGIDCMP|LISTVIEWIDCMP|IDCMP_CLOSEWINDOW|IDCMP_RAWKEY|IDCMP_REFRESHWINDOW,
				WA_Flags,	WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
				WA_Gadgets,	Project1GList,
				WA_Title,	Project1Wdt,
				WA_ScreenTitle,	"Contact 97",
				WA_PubScreen,	Scr,
				TAG_DONE )))
	return( 4L );

	GT_RefreshWindow( Project1Wnd, NULL );

	return( 0L );
}

void CloseProject1Window( void )
{
	if ( Project1Wnd        ) {
		CloseWindow( Project1Wnd );
		Project1Wnd = NULL;
	}

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

void Project2Render( void )
{
	UWORD		offx, offy;

	offx = Project2Wnd->BorderLeft;
	offy = Project2Wnd->BorderTop;


	DrawBevelBox( Project2Wnd->RPort, offx + 175, offy + 32, 282, 45, GT_VisualInfo, VisualInfo, TAG_DONE );
}

int HandleProject2IDCMP( void )
{
	struct IntuiMessage	*m;
	int			(*func)();
	BOOL			running = TRUE;

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

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

		GT_ReplyIMsg( m );

		switch ( Project2Msg.Class ) {

			case	IDCMP_REFRESHWINDOW:
				GT_BeginRefresh( Project2Wnd );
				Project2Render();
				GT_EndRefresh( Project2Wnd, TRUE );
				break;

			case	IDCMP_CLOSEWINDOW:
				running = Project2CloseWindow();
				break;

			case	IDCMP_RAWKEY:
				running = Project2RawKey();
				break;

			case	IDCMP_GADGETUP:
			case	IDCMP_GADGETDOWN:
				func = ( void * )(( struct Gadget * )Project2Msg.IAddress )->UserData;
				running = func();
				break;
		}
	}
	return( running );
}

int OpenProject2Window( void )
{
	struct NewGadget	ng;
	struct Gadget	*g;
/*	struct TagItem	*tmp;*/
	UWORD		lc, tc;
	UWORD		offx = Scr->WBorLeft, offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;

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

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

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

		ng.ng_VisualInfo = VisualInfo;
		ng.ng_TextAttr   = &XHelvetica11;
		ng.ng_LeftEdge  += offx;
		ng.ng_TopEdge   += offy;

		Project2Gadgets[ lc ] = g = CreateGadgetA((ULONG)Project2GTypes[ lc ], g, &ng, ( struct TagItem * )&Project2GTags[ tc ] );

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

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

	if ( ! ( Project2Wnd = OpenWindowTags( NULL,
				WA_Left,	Project2Left,
				WA_Top,		Project2Top,
				WA_Width,	Project2Width,
				WA_Height,	Project2Height + offy,
				WA_IDCMP,	BUTTONIDCMP|LISTVIEWIDCMP|TEXTIDCMP|STRINGIDCMP|CHECKBOXIDCMP|IDCMP_CLOSEWINDOW|IDCMP_RAWKEY|IDCMP_REFRESHWINDOW,
				WA_Flags,	WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
				WA_Gadgets,	Project2GList,
				WA_Title,	Project2Wdt,
				WA_ScreenTitle,	"Contact 97",
				WA_PubScreen,	Scr,
				TAG_DONE )))
	return( 4L );

	GT_RefreshWindow( Project2Wnd, NULL );

	Project2Render();

	return( 0L );
}

void CloseProject2Window( void )
{
	if ( Project2Wnd        ) {
		CloseWindow( Project2Wnd );
		Project2Wnd = NULL;
	}

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

void Project3Render( void )
{
	UWORD		offx, offy;

	offx = Project3Wnd->BorderLeft;
	offy = Project3Wnd->BorderTop;


	DrawBevelBox( Project3Wnd->RPort, offx + 30, offy + 13, 332, 136, GT_VisualInfo, VisualInfo, TAG_DONE );
	PrintIText( Project3Wnd->RPort, Project3IText, offx, offy );
}

int HandleProject3IDCMP( void )
{
	struct IntuiMessage	*m;
	int			(*func)();
	BOOL			running = TRUE;

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

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

		GT_ReplyIMsg( m );

		switch ( Project3Msg.Class ) {

			case	IDCMP_REFRESHWINDOW:
				GT_BeginRefresh( Project3Wnd );
				Project3Render();
				GT_EndRefresh( Project3Wnd, TRUE );
				break;

			case	IDCMP_CLOSEWINDOW:
				running = Project3CloseWindow();
				break;

			case	IDCMP_RAWKEY:
				running = Project3RawKey();
				break;

			case	IDCMP_GADGETUP:
				func = ( void * )(( struct Gadget * )Project3Msg.IAddress )->UserData;
				running = func();
				break;
		}
	}
	return( running );
}

int OpenProject3Window( void )
{
	struct NewGadget	ng;
	struct Gadget	*g;
/*	struct TagItem	*tmp;*/
	UWORD		lc, tc;
	UWORD		offx = Scr->WBorLeft, offy = Scr->WBorTop + Scr->RastPort.TxHeight + 1;

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

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

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

		ng.ng_VisualInfo = VisualInfo;
		ng.ng_TextAttr   = &XHelvetica11;
		ng.ng_LeftEdge  += offx;
		ng.ng_TopEdge   += offy;

		Project3Gadgets[ lc ] = g = CreateGadgetA((ULONG)Project3GTypes[ lc ], g, &ng, ( struct TagItem * )&Project3GTags[ tc ] );

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

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

	if ( ! ( Project3Wnd = OpenWindowTags( NULL,
				WA_Left,	Project3Left,
				WA_Top,		Project3Top,
				WA_Width,	Project3Width,
				WA_Height,	Project3Height + offy,
				WA_IDCMP,	BUTTONIDCMP|IDCMP_CLOSEWINDOW|IDCMP_RAWKEY|IDCMP_REFRESHWINDOW,
				WA_Flags,	WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_CLOSEGADGET|WFLG_SMART_REFRESH|WFLG_ACTIVATE,
				WA_Gadgets,	Project3GList,
				WA_Title,	Project3Wdt,
				WA_ScreenTitle,	"Contact 97",
				WA_PubScreen,	Scr,
				TAG_DONE )))
	return( 4L );

	GT_RefreshWindow( Project3Wnd, NULL );

	Project3Render();

	return( 0L );
}

void CloseProject3Window( void )
{
	if ( Project3Wnd        ) {
		CloseWindow( Project3Wnd );
		Project3Wnd = NULL;
	}

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

