/* Compile me to get full executable. */

#include <stdio.h>
#include "ControlGUI.c"

/* Menu Processing for CtrlMenu */
/* Just pass the code field from an IDCMP_MENUPICK or IDCMP_MENUHELP message. */

void ProcessMenuIDCMPCtrlMenu( UWORD MenuNumber)
{
UWORD MenuNum;
UWORD ItemNumber;
UWORD SubNumber;
int Done=0;						/* Set Done to 1 to forget rest of next selects. */
struct MenuItem *item;
while ((MenuNumber != MENUNULL) && (Done == 0))
	{
	item = ItemAddress( CtrlMenu, MenuNumber);
	MenuNum = MENUNUM(MenuNumber);
	ItemNumber = ITEMNUM(MenuNumber);
	SubNumber = SUBNUM(MenuNumber);
	switch ( MenuNum )
		{
		case NOMENU :
			/* No Menu Selected. */
			break;
		case Menu_1 :
			switch ( ItemNumber )
				{
				case NOITEM :
					/* No Item selcted. */
					break;
				case CtrlMenu_About :
					/* Item Text : About */
					break;
				case CtrlMenu_ScreenMode :
					/* Item Text : Screen Mode */
					break;
				case bar :
					/* Item Text : bar */
					break;
				case CtrlMenu_Qui :
					/* Item Text : Quit! */
					break;
				}
			break;
		}
	MenuNumber = item->NextSelect;
	}
}

/* Cut the core out of this function and edit it suitably. */

void ProcessWindowCtrl( LONG Class, UWORD Code, APTR IAddress )
{
struct Gadget *gad;
switch ( Class )
	{
	case IDCMP_GADGETUP :
		/* Gadget message, gadget = gad. */
		gad = (struct Gadget *)IAddress;
		switch ( gad->GadgetID ) 
			{
			case Ctrl_LV1 :
				/* ListView pressed, Text of gadget :  */
				break;
			case Ctrl_LV1_Cycle :
				/* Cycle changed   , Text of gadget :  */
				break;
			case Ctrl_LV2_Nodes :
				/* ListView pressed, Text of gadget :  */
				break;
			case Ctrl_Window :
				/* Button pressed  , Text of gadget : Window */
				break;
			case Ctrl_Screen :
				/* Button pressed  , Text of gadget : Watch */
				break;
			case Ctrl_Stop :
				/* Button pressed  , Text of gadget : Stop */
				break;
			case Ctrl_Start :
				/* Button pressed  , Text of gadget : Start */
				break;
			case Ctrl_Config :
				/* Button pressed  , Text of gadget : Config */
				break;
			case Ctrl_Device :
				/* Button pressed  , Text of gadget : Device */
				break;
			case Ctrl_Configure :
				/* Button pressed  , Text of gadget : Configure */
				break;
			case Ctrl_Shutdown :
				/* Button pressed  , Text of gadget : Stop All */
				break;
			case Ctrl_LV3_Commands :
				/* ListView pressed, Text of gadget :  */
				break;
			}
		break;
	case IDCMP_CLOSEWINDOW :
		/* CloseWindow Now */
		break;
	case IDCMP_MENUPICK :
		/* Menu Selected */
		ProcessMenuIDCMPCtrlMenu( Code );
		break;
	case IDCMP_REFRESHWINDOW :
		GT_BeginRefresh( Ctrl);
		/* Refresh window. */
	RendWindowCtrl( Ctrl, CtrlVisualInfo );
		GT_EndRefresh( Ctrl, TRUE);
	GT_RefreshWindow( Ctrl, NULL);
	RefreshGList( CtrlGList, Ctrl, NULL, ~0);
		break;
	case IDCMP_VANILLAKEY :
		/* Processed key press */
		/* gadgets need processing perhaps. */
		break;
	case IDCMP_RAWKEY :
		/* Raw keyboard keypress */
		break;
	}
}

/* Cut the core out of this function and edit it suitably. */

void ProcessWindowCtrlCfg( LONG Class, UWORD Code, APTR IAddress )
{
struct Gadget *gad;
switch ( Class )
	{
	case IDCMP_GADGETUP :
		/* Gadget message, gadget = gad. */
		gad = (struct Gadget *)IAddress;
		switch ( gad->GadgetID ) 
			{
			case CtrlCfg_ScreenMode :
				/* Button pressed  , Text of gadget : Screen Mode */
				break;
			case CtrlCfg_Save :
				/* Button pressed  , Text of gadget : Save */
				break;
			case CtrlCfg_EditBBSConfig :
				/* Button pressed  , Text of gadget : BBSGlobal */
				break;
			}
		break;
	case IDCMP_CLOSEWINDOW :
		/* CloseWindow Now */
		break;
	case IDCMP_REFRESHWINDOW :
		GT_BeginRefresh( CtrlCfg);
		/* Refresh window. */
	RendWindowCtrlCfg( CtrlCfg, CtrlCfgVisualInfo );
		GT_EndRefresh( CtrlCfg, TRUE);
	GT_RefreshWindow( CtrlCfg, NULL);
	RefreshGList( CtrlCfgGList, CtrlCfg, NULL, ~0);
		break;
	case IDCMP_RAWKEY :
		/* Raw keyboard keypress */
		break;
	}
}

/* Cut the core out of this function and edit it suitably. */

void ProcessWindowLoading( LONG Class, UWORD Code, APTR IAddress )
{
struct Gadget *gad;
switch ( Class )
	{
	case IDCMP_GADGETUP :
		/* Gadget message, gadget = gad. */
		gad = (struct Gadget *)IAddress;
		break;
	case IDCMP_CLOSEWINDOW :
		/* CloseWindow Now */
		break;
	case IDCMP_REFRESHWINDOW :
		GT_BeginRefresh( Loading);
		/* Refresh window. */
		GT_EndRefresh( Loading, TRUE);
		break;
	}
}


int main(void)
{
int done=0;
ULONG class;
UWORD code;
struct Gadget *pgsel;
struct IntuiMessage *imsg;
struct Screen *Scr=NULL;
if (OpenLibs()==0)
	{
	if (MakeImages()==0)
		{
		Scr = OpenCtrlScrnScreen();
		if (Scr != NULL)
			{
			if (OpenCtrlWindow()==0)
				{
				while(done==0)
					{
					Wait(1L << Ctrl->UserPort->mp_SigBit);
					imsg=GT_GetIMsg(Ctrl->UserPort);
					while (imsg != NULL )
						{
						class=imsg->Class;
						code=imsg->Code;
						pgsel=(struct Gadget *)imsg->IAddress; /* Only reference if it is a gadget message */
						GT_ReplyIMsg(imsg);
						ProcessWindowCtrl(class, code, pgsel);
						/* The next line is just so you can quit, remove when proper method implemented. */
						if (class==IDCMP_CLOSEWINDOW)
							done=1;
						imsg=GT_GetIMsg(Ctrl->UserPort);
						}
					}
				
				CloseCtrlWindow();
				}
			else
				printf("Cannot open window.\n");
			CloseScreen(Scr);
			}
		else
			printf("Cannot Open Screen.\n");
		FreeImages();
		}
	else
		printf("Cannot make images.\n");
	CloseLibs();
	}
else
	printf("Cannot open libraries.\n");
}
