#include "/Mailbox.h"
#include "/protos.h"
#include <libraries/zbbs.h>
#include "globals.c"

enum { GD_red, GD_green, GD_yellow, GD_blue, GD_violet, GD_cyan, GD_white,
		GD_normal, GD_bold, GD_underscore, GD_blink, GD_reverse, GD_zurueck };

VOID Ansi()
{
	struct IntuiText	ansiIText[] = {1, 0, JAM1, 270, 12, NULL, "Ansi - Codes", NULL};
	struct Gadget		*ansiGadgets[14];

	if(glist)
	{
		RemoveGList(Win, glist, -1);
		FreeGadgets(glist);
		glist = NULL;
		SetRast(Win->RPort, 0);
	}

	if(!(g = CreateContext(&glist)))
	{
		MyEasyRequest("Konnte Gadget-Context nicht generieren.", "Okay");
		return;
	}

	ng.ng_LeftEdge		= 100;
	ng.ng_TopEdge		= 44;
	ng.ng_Width			= 160;
	ng.ng_Height		= 14;
	ng.ng_GadgetText	= "Rot...:";
	ng.ng_GadgetID		= GD_red;
	ng.ng_Flags			= PLACETEXT_LEFT | NG_HIGHLABEL;
	ng.ng_TextAttr		= &FontAttr,
	ng.ng_VisualInfo	= VisualInfo;

	ansiGadgets[GD_red] =
	g = CreateGadget(STRING_KIND, g, &ng,
		GTST_String,	Config.ansi_colors[0],
		GTST_MaxChars,	9,
		TAG_DONE);

	ng.ng_TopEdge		= 60;
	ng.ng_GadgetText	= "Grün..:";
	ng.ng_GadgetID		= GD_green;

	ansiGadgets[GD_green] =
	g = CreateGadget(STRING_KIND, g, &ng,
		GTST_String,	Config.ansi_colors[1],
		GTST_MaxChars,	9,
		TAG_DONE);

	ng.ng_TopEdge		= 76;
	ng.ng_GadgetText	= "Gelb..:";
	ng.ng_GadgetID		= GD_yellow;

	ansiGadgets[GD_yellow] =
	g = CreateGadget(STRING_KIND, g, &ng,
		GTST_String,	Config.ansi_colors[2],
		GTST_MaxChars,	9,
		TAG_DONE);

	ng.ng_TopEdge		= 92;
	ng.ng_GadgetText	= "Blau..:";
	ng.ng_GadgetID		= GD_blue;

	ansiGadgets[GD_blue] =
	g = CreateGadget(STRING_KIND, g, &ng,
		GTST_String,	Config.ansi_colors[3],
		GTST_MaxChars,	9,
		TAG_DONE);

	ng.ng_TopEdge		= 108;
	ng.ng_GadgetText	= "Violet:";
	ng.ng_GadgetID		= GD_violet;

	ansiGadgets[GD_violet] =
	g = CreateGadget(STRING_KIND, g, &ng,
		GTST_String,	Config.ansi_colors[4],
		GTST_MaxChars,	9,
		TAG_DONE);

	ng.ng_TopEdge		= 124;
	ng.ng_GadgetText	= "Cyan..:";
	ng.ng_GadgetID		= GD_cyan;

	ansiGadgets[GD_cyan] =
	g = CreateGadget(STRING_KIND, g, &ng,
		GTST_String,	Config.ansi_colors[5],
		GTST_MaxChars,	9,
		TAG_DONE);

	ng.ng_TopEdge		= 140;
	ng.ng_GadgetText	= "Weiss.:";
	ng.ng_GadgetID		= GD_white;

	ansiGadgets[GD_white] =
	g = CreateGadget(STRING_KIND, g, &ng,
		GTST_String,	Config.ansi_colors[6],
		GTST_MaxChars,	9,
		TAG_DONE);

	ng.ng_LeftEdge		= 400;
	ng.ng_TopEdge		= 44;
	ng.ng_GadgetText	= "Normal....:";
	ng.ng_GadgetID		= GD_normal;

	ansiGadgets[GD_normal] =
	g = CreateGadget(STRING_KIND, g, &ng,
		GTST_String,	Config.ansi_colors[7],
		GTST_MaxChars,	9,
		TAG_DONE);

	ng.ng_TopEdge		= 60;
	ng.ng_GadgetText	= "Bold......:";
	ng.ng_GadgetID		= GD_bold;

	ansiGadgets[GD_bold] =
	g = CreateGadget(STRING_KIND, g, &ng,
		GTST_String,	Config.ansi_colors[8],
		GTST_MaxChars,	9,
		TAG_DONE);

	ng.ng_TopEdge		= 76;
	ng.ng_GadgetText	= "Underscore:";
	ng.ng_GadgetID		= GD_underscore;

	ansiGadgets[GD_underscore] =
	g = CreateGadget(STRING_KIND, g, &ng,
		GTST_String,	Config.ansi_colors[9],
		GTST_MaxChars,	9,
		TAG_DONE);

	ng.ng_TopEdge		= 92;
	ng.ng_GadgetText	= "Blink.....:";
	ng.ng_GadgetID		= GD_blink;

	ansiGadgets[GD_blink] =
	g = CreateGadget(STRING_KIND, g, &ng,
		GTST_String,	Config.ansi_colors[10],
		GTST_MaxChars,	9,
		TAG_DONE);

	ng.ng_TopEdge		= 108;
	ng.ng_GadgetText	= "Reverse...:";
	ng.ng_GadgetID		= GD_reverse;

	ansiGadgets[GD_reverse] =
	g = CreateGadget(STRING_KIND, g, &ng,
		GTST_String,	Config.ansi_colors[11],
		GTST_MaxChars,	9,
		TAG_DONE);

	ng.ng_LeftEdge		= 540;
	ng.ng_TopEdge		= 210;
	ng.ng_Width			= 66;
	ng.ng_Height		= 16;
	ng.ng_GadgetText	= "Zurück";
	ng.ng_GadgetID		= GD_zurueck;
	ng.ng_Flags			= PLACETEXT_IN;

	ansiGadgets[GD_zurueck] =
	g = CreateGadget(BUTTON_KIND, g, &ng, TAG_DONE);

	if(!g)
	{
		MyEasyRequest("Konnte Gadgets nicht generieren.", "Okay");
		return;
	}

	AddGList(Win, glist, 0, -1, NULL);
	RefreshGList(glist, Win, NULL, -1);
	GT_RefreshWindow(Win, NULL);

	PrintIText(Win->RPort, ansiIText, Win->BorderLeft, Win->BorderTop);
	ActivateGadget(ansiGadgets[GD_red], Win, NULL);

	while(TRUE)
	{
		Wait(1L << Win->UserPort->mp_SigBit);

		while(imsg = (struct IntuiMessage *)GT_GetIMsg(Win->UserPort))
		{
			class	= imsg->Class;
			code	= imsg->Code;
			g		= imsg->IAddress;

			GT_ReplyIMsg(imsg);

			if(class == IDCMP_GADGETUP)
			{
				switch(g->GadgetID)
				{
					case GD_red:
						strcpy(Config.ansi_colors[0], ((struct StringInfo *)g->SpecialInfo)->Buffer);
						ActivateGadget(ansiGadgets[GD_green], Win, NULL);
						break;

					case GD_green:
						strcpy(Config.ansi_colors[1], ((struct StringInfo *)g->SpecialInfo)->Buffer);
						ActivateGadget(ansiGadgets[GD_yellow], Win, NULL);
						break;

					case GD_yellow:
						strcpy(Config.ansi_colors[2], ((struct StringInfo *)g->SpecialInfo)->Buffer);
						ActivateGadget(ansiGadgets[GD_blue], Win, NULL);
						break;

					case GD_blue:
						strcpy(Config.ansi_colors[3], ((struct StringInfo *)g->SpecialInfo)->Buffer);
						ActivateGadget(ansiGadgets[GD_violet], Win, NULL);
						break;

					case GD_violet:
						strcpy(Config.ansi_colors[4], ((struct StringInfo *)g->SpecialInfo)->Buffer);
						ActivateGadget(ansiGadgets[GD_cyan], Win, NULL);
						break;

					case GD_cyan:
						strcpy(Config.ansi_colors[5], ((struct StringInfo *)g->SpecialInfo)->Buffer);
						ActivateGadget(ansiGadgets[GD_white], Win, NULL);
						break;

					case GD_white:
						strcpy(Config.ansi_colors[6], ((struct StringInfo *)g->SpecialInfo)->Buffer);
						ActivateGadget(ansiGadgets[GD_normal], Win, NULL);
						break;

					case GD_normal:
						strcpy(Config.ansi_colors[7], ((struct StringInfo *)g->SpecialInfo)->Buffer);
						ActivateGadget(ansiGadgets[GD_bold], Win, NULL);
						break;

					case GD_bold:
						strcpy(Config.ansi_colors[8], ((struct StringInfo *)g->SpecialInfo)->Buffer);
						ActivateGadget(ansiGadgets[GD_underscore], Win, NULL);
						break;

					case GD_underscore:
						strcpy(Config.ansi_colors[9], ((struct StringInfo *)g->SpecialInfo)->Buffer);
						ActivateGadget(ansiGadgets[GD_blink], Win, NULL);
						break;

					case GD_blink:
						strcpy(Config.ansi_colors[10], ((struct StringInfo *)g->SpecialInfo)->Buffer);
						ActivateGadget(ansiGadgets[GD_reverse], Win, NULL);
						break;

					case GD_reverse:
						strcpy(Config.ansi_colors[11], ((struct StringInfo *)g->SpecialInfo)->Buffer);
						ActivateGadget(ansiGadgets[GD_red], Win, NULL);
						break;

					case GD_zurueck:
						return;
						break;
				}
			}
		}
	}
}
