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

#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 "Monitor.h"

struct Screen         *Scr = NULL;
APTR                   VisualInfo = NULL;
struct Window         *Main_ViewWnd = NULL;
struct Window         *Input_ValueWnd = NULL;
struct Window         *Vectors_WindowWnd = NULL;
struct Window         *Tasks_WindowWnd = NULL;
struct Gadget         *Main_ViewGList = NULL;
struct Gadget         *Input_ValueGList = NULL;
struct Gadget         *Vectors_WindowGList = NULL;
struct Gadget         *Tasks_WindowGList = NULL;
struct TextFont       *Font       = NULL;
struct Gadget         *Main_ViewGadgets[3];
struct Gadget         *Input_ValueGadgets[3];
struct Gadget         *Vectors_WindowGadgets[60];
struct Gadget         *Tasks_WindowGadgets[4];
UWORD                  Main_ViewLeft = 0;
UWORD                  Main_ViewTop = 0;
UWORD                  Main_ViewWidth = 648;
UWORD                  Main_ViewHeight = 244;
UWORD                  Input_ValueLeft = 178;
UWORD                  Input_ValueTop = 87;
UWORD                  Input_ValueWidth = 299;
UWORD                  Input_ValueHeight = 77;
UWORD                  Vectors_WindowLeft = 0;
UWORD                  Vectors_WindowTop = 12;
UWORD                  Vectors_WindowWidth = 648;
UWORD                  Vectors_WindowHeight = 193;
UWORD                  Tasks_WindowLeft = 0;
UWORD                  Tasks_WindowTop = 12;
UWORD                  Tasks_WindowWidth = 648;
UWORD                  Tasks_WindowHeight = 193;
UBYTE                 *Main_ViewWdt = NULL;
UBYTE                 *Input_ValueWdt = (UBYTE *)"Input Requester";
UBYTE                 *Vectors_WindowWdt = (UBYTE *)"System Vectors";
UBYTE                 *Tasks_WindowWdt = (UBYTE *)"Tasks Window";

struct TextAttr XEN9 = {
	( STRPTR )"XEN.font", 9, 0x00, 0x00 };

struct IntuiText Vectors_WindowIText[] = {
	2, 0, JAM1,380, 2, &XEN9, (UBYTE *)"Error Exceptions", &Vectors_WindowIText[1],
	2, 0, JAM1,108, 108, &XEN9, (UBYTE *)"Interupt Exceptions", &Vectors_WindowIText[2],
	2, 0, JAM1,113, 28, &XEN9, (UBYTE *)"ExecBase Vectors", &Vectors_WindowIText[3],
	3, 0, JAM1,543, 1, &XEN9, (UBYTE *)"Minimize", &Vectors_WindowIText[4],
	3, 3, JAM1,555, 180, &XEN9, (UBYTE *)"Exit", NULL };

struct IntuiText Tasks_WindowIText[] = {
	1, 0, JAM1,19, 4, &XEN9, (UBYTE *)"Task Name", &Tasks_WindowIText[1],
	1, 0, JAM1,109, 3, &XEN9, (UBYTE *)"Task Address", &Tasks_WindowIText[2],
	1, 0, JAM1,249, 3, &XEN9, (UBYTE *)"Other Stuff", NULL };

UWORD Main_ViewGTypes[] = {
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND
};

UWORD Input_ValueGTypes[] = {
	STRING_KIND,
	TEXT_KIND,
	TEXT_KIND
};

UWORD Vectors_WindowGTypes[] = {
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	TEXT_KIND,
	TEXT_KIND,
	TEXT_KIND,
	TEXT_KIND,
	TEXT_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	TEXT_KIND,
	TEXT_KIND,
	TEXT_KIND,
	TEXT_KIND,
	TEXT_KIND,
	TEXT_KIND,
	TEXT_KIND,
	TEXT_KIND,
	TEXT_KIND,
	TEXT_KIND,
	TEXT_KIND,
	TEXT_KIND,
	TEXT_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	TEXT_KIND,
	TEXT_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	TEXT_KIND,
	TEXT_KIND,
	BUTTON_KIND,
	TEXT_KIND,
	BUTTON_KIND,
	TEXT_KIND
};

UWORD Tasks_WindowGTypes[] = {
	BUTTON_KIND,
	BUTTON_KIND,
	BUTTON_KIND,
	SCROLLER_KIND
};

struct NewGadget Main_ViewNGad[] = {
	4, 226, 136, 15, (UBYTE *)"Vectors", NULL, GD_VECTORS, PLACETEXT_IN, NULL, NULL,
	621, 1, 23, 12, (UBYTE *)"X", NULL, GD_EXIT, PLACETEXT_IN, NULL, NULL,
	146, 226, 136, 15, (UBYTE *)"Tasks", NULL, GD_TASKS, PLACETEXT_IN, NULL, NULL
};

struct NewGadget Input_ValueNGad[] = {
	90, 52, 187, 14, (UBYTE *)"New Value", NULL, GD_NEW_VALUE, PLACETEXT_LEFT, NULL, NULL,
	91, 36, 183, 12, (UBYTE *)"Old Value", NULL, GD_OLD_VALUE, PLACETEXT_LEFT, NULL, NULL,
	93, 6, 183, 12, (UBYTE *)"Vector Name:", NULL, GD_ITEM, PLACETEXT_LEFT, NULL, NULL
};

struct NewGadget Vectors_WindowNGad[] = {
	524, 77, 107, 13, (UBYTE *)"Change", NULL, GD_CHANGE, PLACETEXT_IN, NULL, NULL,
	524, 62, 106, 13, (UBYTE *)"Explain", NULL, GD_EXPLAIN, PLACETEXT_IN, NULL, NULL,
	621, 179, 19, 12, (UBYTE *)"X", NULL, GD_CANCEL, PLACETEXT_IN, NULL, NULL,
	524, 92, 107, 14, (UBYTE *)"Dissassemble", NULL, GD_DISSASSEMBLE, PLACETEXT_IN, NULL, NULL,
	524, 46, 106, 14, (UBYTE *)"Run Code", NULL, GD_RUN_CODE, PLACETEXT_IN, NULL, NULL,
	524, 31, 106, 14, (UBYTE *)"Save Executable", NULL, GD_SAVE_EXE, PLACETEXT_IN, NULL, NULL,
	524, 17, 106, 13, (UBYTE *)"Flush", NULL, GD_FLUSH, PLACETEXT_IN, NULL, NULL,
	173, 62, 90, 15, (UBYTE *)"Cold Capture", NULL, GD_COLDCAPTURE, PLACETEXT_IN, NULL, NULL,
	173, 46, 89, 15, (UBYTE *)"Cool Capture", NULL, GD_COOLCAPTURE, PLACETEXT_IN, NULL, NULL,
	173, 78, 90, 14, (UBYTE *)"Warm Capture", NULL, GD_WARMCAPTURE, PLACETEXT_IN, NULL, NULL,
	16, 46, 91, 14, (UBYTE *)"KickMemPtr", NULL, GD_KICKMEMPTR, PLACETEXT_IN, NULL, NULL,
	16, 62, 91, 14, (UBYTE *)"KickTagPtr", NULL, GD_KICKTAGPTR, PLACETEXT_IN, NULL, NULL,
	16, 78, 91, 14, (UBYTE *)"KickCheckSum", NULL, GD_KICKCHECKSUM, PLACETEXT_IN, NULL, NULL,
	267, 46, 57, 14, NULL, NULL, GD_COOLCAPTURE_VIEW, 0, NULL, NULL,
	111, 46, 57, 14, NULL, NULL, GD_KICKMEMPTR_VIEW, 0, NULL, NULL,
	267, 62, 57, 14, NULL, NULL, GD_COLDCAPTURE_VIEW, 0, NULL, NULL,
	111, 62, 57, 14, NULL, NULL, GD_KICKTAGPTR_VIEW, 0, NULL, NULL,
	111, 78, 57, 14, NULL, NULL, GD_KICKCHECKSUM_VIEW, 0, NULL, NULL,
	622, 0, 18, 12, (UBYTE *)"X", NULL, GD_X, PLACETEXT_IN, NULL, NULL,
	8, 138, 95, 14, (UBYTE *)"Level 3 Handler", NULL, GD_3_HANDLER, PLACETEXT_IN, NULL, NULL,
	8, 122, 95, 14, (UBYTE *)"Level 1 Handler", NULL, GD_1_HANDLER, PLACETEXT_IN, NULL, NULL,
	348, 13, 95, 14, (UBYTE *)"Bus Error", NULL, GD_BUS_ERROR, PLACETEXT_IN, NULL, NULL,
	348, 29, 95, 14, (UBYTE *)"Address Error", NULL, GD_ADDRESS_ERROR, PLACETEXT_IN, NULL, NULL,
	348, 45, 95, 14, (UBYTE *)"Illegal Command", NULL, GD_ILLEGAL_COMMAND, PLACETEXT_IN, NULL, NULL,
	348, 61, 95, 14, (UBYTE *)"Division By 0", NULL, GD_DIV_BY_0, PLACETEXT_IN, NULL, NULL,
	348, 77, 95, 14, (UBYTE *)"CHK Command", NULL, GD_CHK_COMMAND, PLACETEXT_IN, NULL, NULL,
	348, 93, 95, 14, (UBYTE *)"TrapV Command", NULL, GD_TRAPV_COMMAND, PLACETEXT_IN, NULL, NULL,
	348, 109, 95, 14, (UBYTE *)"Priv. Violation", NULL, GD_PRIV_VIOLATION, PLACETEXT_IN, NULL, NULL,
	348, 141, 95, 14, (UBYTE *)"Axx Emulation", NULL, GD_AXX_EMULATION, PLACETEXT_IN, NULL, NULL,
	348, 157, 95, 14, (UBYTE *)"Fxx Emulation", NULL, GD_FXX_EMULATION, PLACETEXT_IN, NULL, NULL,
	348, 173, 95, 14, (UBYTE *)"? Interupt", NULL, GD___INTERUPT, PLACETEXT_IN, NULL, NULL,
	525, 108, 107, 14, (UBYTE *)"Insert Code", NULL, GD_INSERT_CODE, PLACETEXT_IN, NULL, NULL,
	524, 159, 107, 14, NULL, NULL, GD_NOTHING3, 0, NULL, NULL,
	525, 125, 107, 14, NULL, NULL, GD_NOTHING1, 0, NULL, NULL,
	524, 142, 107, 14, NULL, NULL, GD_NOTHING2, 0, NULL, NULL,
	447, 78, 57, 14, NULL, NULL, GD_CHK_COMMAND_VIEW, 0, NULL, NULL,
	447, 14, 57, 14, NULL, NULL, GD_BUS_ERROR_VIEW, 0, NULL, NULL,
	447, 30, 57, 14, NULL, NULL, GD_ADDRESS_ERROR_VIEW, 0, NULL, NULL,
	447, 46, 57, 14, NULL, NULL, GD_ILLEGAL_COMMAND_VIEW, 0, NULL, NULL,
	447, 62, 57, 14, NULL, NULL, GD_DIV_BY_0_VIEW, 0, NULL, NULL,
	447, 94, 57, 14, NULL, NULL, GD_TRAPV_COMMAND_VIEW, 0, NULL, NULL,
	447, 110, 57, 14, NULL, NULL, GD_PRIV_VIOLATION_VIEW, 0, NULL, NULL,
	447, 142, 57, 14, NULL, NULL, GD_AXX_EMULATION_VIEW, 0, NULL, NULL,
	447, 158, 57, 14, NULL, NULL, GD_FXX_EMULATION_VIEW, 0, NULL, NULL,
	447, 174, 57, 14, NULL, NULL, GD___INTERUPT_VIEW, 0, NULL, NULL,
	267, 78, 56, 14, NULL, NULL, GD_WARMCAPTURE_VIEW, 0, NULL, NULL,
	106, 122, 57, 14, NULL, NULL, GD_1_HANDLER_VIEW, 0, NULL, NULL,
	106, 138, 57, 14, NULL, NULL, GD_3_HANDLER_VIEW, 0, NULL, NULL,
	167, 138, 95, 14, (UBYTE *)"Level 4 Handler", NULL, GD_4_HANDLER, PLACETEXT_IN, NULL, NULL,
	167, 122, 95, 14, (UBYTE *)"Level 2 Handler", NULL, GD_2_HANDLER, PLACETEXT_IN, NULL, NULL,
	266, 122, 57, 14, NULL, NULL, GD_2_HANDLER_VIEW, 0, NULL, NULL,
	266, 138, 57, 14, NULL, NULL, GD_4_HANDLER_VIEW, 0, NULL, NULL,
	8, 170, 95, 14, (UBYTE *)"Level 7 Handler", NULL, GD_7_HANDLER, PLACETEXT_IN, NULL, NULL,
	8, 154, 95, 14, (UBYTE *)"Level 5 Handler", NULL, GD_5_HANDLER, PLACETEXT_IN, NULL, NULL,
	106, 154, 57, 14, NULL, NULL, GD_5_HANDLER_VIEW, 0, NULL, NULL,
	106, 170, 57, 14, NULL, NULL, GD_7_HANDLER_VIEW, 0, NULL, NULL,
	167, 154, 95, 14, (UBYTE *)"Level 6 Handler", NULL, GD_6_HANDLER, PLACETEXT_IN, NULL, NULL,
	266, 154, 57, 14, NULL, NULL, GD_6_HANDLER_VIEW, 0, NULL, NULL,
	347, 125, 95, 14, (UBYTE *)"Trace", NULL, GD_TRACE, PLACETEXT_IN, NULL, NULL,
	446, 126, 57, 14, NULL, NULL, GD_TRACE_VIEW, 0, NULL, NULL
};

struct NewGadget Tasks_WindowNGad[] = {
	8, 171, 101, 17, (UBYTE *)"Kill Task", NULL, GD_TASK_KILL, PLACETEXT_IN, NULL, NULL,
	112, 171, 101, 17, (UBYTE *)"Freeze Task", NULL, GD_TASK_FREEZE, PLACETEXT_IN, NULL, NULL,
	619, 0, 21, 13, (UBYTE *)"X", NULL, GD_TASK_X, PLACETEXT_IN, NULL, NULL,
	612, 15, 22, 152, NULL, NULL, GD_TASK_SLIDER, 0, NULL, NULL
};

ULONG Main_ViewGTags[] = {
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE)
};

ULONG Input_ValueGTags[] = {
	(GTST_MaxChars), 256, (TAG_DONE),
	(GTTX_Border), TRUE, (TAG_DONE),
	(GTTX_Border), TRUE, (TAG_DONE)
};

ULONG Vectors_WindowGTags[] = {
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(GTTX_Border), TRUE, (TAG_DONE),
	(GTTX_Border), TRUE, (TAG_DONE),
	(GTTX_Border), TRUE, (TAG_DONE),
	(GTTX_Border), TRUE, (TAG_DONE),
	(GTTX_Border), TRUE, (TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(GTTX_Border), TRUE, (TAG_DONE),
	(GTTX_Border), TRUE, (TAG_DONE),
	(GTTX_Border), TRUE, (TAG_DONE),
	(GTTX_Border), TRUE, (TAG_DONE),
	(GTTX_Border), TRUE, (TAG_DONE),
	(GTTX_Border), TRUE, (TAG_DONE),
	(GTTX_Border), TRUE, (TAG_DONE),
	(GTTX_Border), TRUE, (TAG_DONE),
	(GTTX_Border), TRUE, (TAG_DONE),
	(GTTX_Border), TRUE, (TAG_DONE),
	(GTTX_Border), TRUE, (TAG_DONE),
	(GTTX_Border), TRUE, (TAG_DONE),
	(GTTX_Border), TRUE, (TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(GTTX_Border), TRUE, (TAG_DONE),
	(GTTX_Border), TRUE, (TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(GTTX_Border), TRUE, (TAG_DONE),
	(GTTX_Border), TRUE, (TAG_DONE),
	(TAG_DONE),
	(GTTX_Border), TRUE, (TAG_DONE),
	(TAG_DONE),
	(GTTX_Border), TRUE, (TAG_DONE)
};

ULONG Tasks_WindowGTags[] = {
	(TAG_DONE),
	(TAG_DONE),
	(TAG_DONE),
	(GTSC_Arrows), 8, (PGA_Freedom), LORIENT_VERT, (GA_RelVerify), TRUE, (TAG_DONE)
};

struct ColorSpec ScreenColors[] = {
	 0, 0x09, 0x09, 0x09,
	 1, 0x00, 0x00, 0x00,
	 2, 0x0F, 0x0F, 0x0F,
	 3, 0x05, 0x07, 0x0A,
	 4, 0x08, 0x08, 0x08,
	 5, 0x0A, 0x0A, 0x0A,
	 6, 0x0A, 0x09, 0x08,
	 7, 0x0E, 0x0A, 0x09,
	(unsigned short)~0, 0x00, 0x00, 0x00 };

UWORD DriPens[] = {
	0,1,1,2,1,3,1,0,2,1,2,1,(unsigned short)~0 };

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

	if ( ! ( Scr = OpenScreenTags( NULL, SA_Left,	0,
					SA_Top,		0,
					SA_Width,	648,
					SA_Height,	256,
					SA_Depth,	3,
					SA_Colors,	&ScreenColors[0],
					SA_Font,	&XEN9,
					SA_Type,	CUSTOMSCREEN,
					SA_DisplayID,	HIRES_KEY,
					SA_AutoScroll,	TRUE,
					SA_Overscan,	OSCAN_TEXT,
					SA_Pens,	&DriPens[0],
					SA_Title,	"Cray-1's Custom Screen",
					TAG_DONE )))
		return( 1L );

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

	return( 0L );
}

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

	if ( Scr        ) {
		CloseScreen( Scr );
		Scr = NULL;
	}

	if ( Font       ) {
		CloseFont( Font );
		Font = NULL;
	}
}

void Main_ViewRender( void )
{
	UWORD		offx, offy;

	offx = 0;
	offy = Scr->WBorTop + Scr->Font->ta_YSize + 1;


	DrawBevelBox( Main_ViewWnd->RPort, offx + 3, offy + 2, 613, 220, GT_VisualInfo, VisualInfo, TAG_DONE );
}

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

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

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

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

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

		Main_ViewGadgets[ lc ] = g = CreateGadgetA((ULONG)Main_ViewGTypes[ lc ], g, &ng, ( struct TagItem * )&Main_ViewGTags[ tc ] );

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

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

	if ( ! ( Main_ViewWnd = OpenWindowTags( NULL,
				WA_Left,	Main_ViewLeft,
				WA_Top,		Main_ViewTop,
				WA_Width,	Main_ViewWidth,
				WA_Height,	Main_ViewHeight + offy,
				WA_IDCMP,	BUTTONIDCMP|IDCMP_REFRESHWINDOW,
				WA_Flags,	WFLG_SMART_REFRESH|WFLG_BACKDROP|WFLG_BORDERLESS|WFLG_ACTIVATE|WFLG_RMBTRAP,
				WA_Gadgets,	Main_ViewGList,
				WA_ScreenTitle,	"System Monitor",
				WA_CustomScreen,	Scr,
				TAG_DONE )))
	return( 4L );

	GT_RefreshWindow( Main_ViewWnd, NULL );

	Main_ViewRender();

	return( 0L );
}

void CloseMain_ViewWindow( void )
{
	if ( Main_ViewWnd        ) {
		CloseWindow( Main_ViewWnd );
		Main_ViewWnd = NULL;
	}

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

void Input_ValueRender( void )
{
	UWORD		offx, offy;

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


	DrawBevelBox( Input_ValueWnd->RPort, offx + 3, offy + 21, 285, 8, GT_VisualInfo, VisualInfo, TAG_DONE );
	DrawBevelBox( Input_ValueWnd->RPort, offx + 0, offy + 0, 291, 75, GT_VisualInfo, VisualInfo, TAG_DONE );
}

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

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

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

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

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

		Input_ValueGadgets[ lc ] = g = CreateGadgetA((ULONG)Input_ValueGTypes[ lc ], g, &ng, ( struct TagItem * )&Input_ValueGTags[ tc ] );

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

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

	if ( ! ( Input_ValueWnd = OpenWindowTags( NULL,
				WA_Left,	Input_ValueLeft,
				WA_Top,		Input_ValueTop,
				WA_Width,	Input_ValueWidth,
				WA_Height,	Input_ValueHeight + offy,
				WA_IDCMP,	STRINGIDCMP|TEXTIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
				WA_Flags,	WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_SMART_REFRESH,
				WA_Gadgets,	Input_ValueGList,
				WA_Title,	Input_ValueWdt,
				WA_ScreenTitle,	"Gimmie Some INput!",
				WA_CustomScreen,	Scr,
				TAG_DONE )))
	return( 4L );

	GT_RefreshWindow( Input_ValueWnd, NULL );

	Input_ValueRender();

	return( 0L );
}

void CloseInput_ValueWindow( void )
{
	if ( Input_ValueWnd        ) {
		CloseWindow( Input_ValueWnd );
		Input_ValueWnd = NULL;
	}

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

void Vectors_WindowRender( void )
{
	UWORD		offx, offy;

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


	DrawBevelBox( Vectors_WindowWnd->RPort, offx + 517, offy + 0, 101, 11, GT_VisualInfo, VisualInfo, TAG_DONE );
	DrawBevelBox( Vectors_WindowWnd->RPort, offx + 517, offy + 179, 102, 11, GT_VisualInfo, VisualInfo, TAG_DONE );
	DrawBevelBox( Vectors_WindowWnd->RPort, offx + 0, offy + 0, 333, 20, GT_VisualInfo, VisualInfo, TAG_DONE );
	DrawBevelBox( Vectors_WindowWnd->RPort, offx + 516, offy + 12, 124, 166, GT_VisualInfo, VisualInfo, TAG_DONE );
	DrawBevelBox( Vectors_WindowWnd->RPort, offx + 1, offy + 21, 332, 81, GT_VisualInfo, VisualInfo, TAG_DONE );
	DrawBevelBox( Vectors_WindowWnd->RPort, offx + 0, offy + 103, 334, 87, GT_VisualInfo, VisualInfo, TAG_DONE );
	DrawBevelBox( Vectors_WindowWnd->RPort, offx + 336, offy + 0, 178, 191, GT_VisualInfo, VisualInfo, TAG_DONE );
	PrintIText( Vectors_WindowWnd->RPort, Vectors_WindowIText, offx, offy );
}

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

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

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

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

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

		Vectors_WindowGadgets[ lc ] = g = CreateGadgetA((ULONG)Vectors_WindowGTypes[ lc ], g, &ng, ( struct TagItem * )&Vectors_WindowGTags[ tc ] );

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

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

	if ( ! ( Vectors_WindowWnd = OpenWindowTags( NULL,
				WA_Left,	Vectors_WindowLeft,
				WA_Top,		Vectors_WindowTop,
				WA_Width,	Vectors_WindowWidth,
				WA_Height,	Vectors_WindowHeight + offy,
				WA_IDCMP,	BUTTONIDCMP|TEXTIDCMP|IDCMP_MOUSEMOVE|IDCMP_IDCMPUPDATE|IDCMP_REFRESHWINDOW,
				WA_Flags,	WFLG_SMART_REFRESH|WFLG_REPORTMOUSE|WFLG_ACTIVATE|WFLG_RMBTRAP,
				WA_Gadgets,	Vectors_WindowGList,
				WA_Title,	Vectors_WindowWdt,
				WA_ScreenTitle,	"System Monitor",
				WA_CustomScreen,	Scr,
				TAG_DONE )))
	return( 4L );

	GT_RefreshWindow( Vectors_WindowWnd, NULL );

	Vectors_WindowRender();

	return( 0L );
}

void CloseVectors_WindowWindow( void )
{
	if ( Vectors_WindowWnd        ) {
		CloseWindow( Vectors_WindowWnd );
		Vectors_WindowWnd = NULL;
	}

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

void Tasks_WindowRender( void )
{
	UWORD		offx, offy;

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


	DrawBevelBox( Tasks_WindowWnd->RPort, offx + 8, offy + 15, 600, 152, GT_VisualInfo, VisualInfo, TAG_DONE );
	PrintIText( Tasks_WindowWnd->RPort, Tasks_WindowIText, offx, offy );
}

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

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

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

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

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

		Tasks_WindowGadgets[ lc ] = g = CreateGadgetA((ULONG)Tasks_WindowGTypes[ lc ], g, &ng, ( struct TagItem * )&Tasks_WindowGTags[ tc ] );

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

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

	if ( ! ( Tasks_WindowWnd = OpenWindowTags( NULL,
				WA_Left,	Tasks_WindowLeft,
				WA_Top,		Tasks_WindowTop,
				WA_Width,	Tasks_WindowWidth,
				WA_Height,	Tasks_WindowHeight + offy,
				WA_IDCMP,	BUTTONIDCMP|SCROLLERIDCMP|ARROWIDCMP|IDCMP_CLOSEWINDOW|IDCMP_REFRESHWINDOW,
				WA_Flags,	WFLG_CLOSEGADGET|WFLG_SMART_REFRESH,
				WA_Gadgets,	Tasks_WindowGList,
				WA_Title,	Tasks_WindowWdt,
				WA_ScreenTitle,	"By Cray-1",
				WA_CustomScreen,	Scr,
				TAG_DONE )))
	return( 4L );

	GT_RefreshWindow( Tasks_WindowWnd, NULL );

	Tasks_WindowRender();

	return( 0L );
}

void CloseTasks_WindowWindow( void )
{
	if ( Tasks_WindowWnd        ) {
		CloseWindow( Tasks_WindowWnd );
		Tasks_WindowWnd = NULL;
	}

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

