/*
** Source machine generated by the AREXX Interface Designer for EasyREXX
** which is (c) copyrighted 1995 to Ketil Hunn
** Set TAB=2 for best readability
**
*/

#ifndef AREXX_INTERFACE
#define AREXX_INTERFACE

extern UBYTE file[256], commandname[256], argumentname[256];

#include <libraries/easyrexx.h>
struct Library *EasyRexxBase=NULL;

#define	NOT_AVAILABLE	"<n/a>"

#define AREXX_ABOUT			1
#define AREXX_CUT				2
#define AREXX_GENERATE	3
#define AREXX_GETVAR		4
#define AREXX_MERGE			5
#define AREXX_MOVE			6
#define AREXX_NEW				7
#define AREXX_OPEN			8
#define AREXX_PASTE			9
#define AREXX_QUIT			10
#define AREXX_SAVE			11
#define AREXX_SETVAR		12
#define AREXX_SORT			13
#define AREXX_WINDOW		14
#define AREXX_SELECT		15


struct ARexxCommandTable commandTable[]=
{
	AREXX_ABOUT,		"ABOUT",		NULL,	NULL,
	AREXX_CUT,			"CUT",			"COMMAND/S,ARGUMENT/S",	NULL,
	AREXX_GENERATE,	"GENERATE",	"SOURCE/S,FILENAME/F",	NULL,
	AREXX_GETVAR,		"GETVAR",		"ALWAYS/S,ARGUMENT/S,AUTHOR/S,COMMAND/S,COPYRIGHT/S,FINAL/S,HANDLER/S,HANDLETYPE/S,KEYWORD/S,MAIN/S,MULTIPLE/S,NUMBER/S,PORTNAME/S,SWITCH/S,TEMPLATES/S,TOGGLE/S,VERSION/S",	NULL,
	AREXX_MERGE,		"MERGE",		"FILENAME/F",	NULL,
	AREXX_MOVE,			"MOVE",			"COMMAND/S,ARGUMENT/S,UP/S,DOWN/S",	NULL,
	AREXX_NEW,			"NEW",			"PROJECT/S,COMMAND/S,ARGUMENT/S,NAME/F",	NULL,
	AREXX_OPEN,			"OPEN",			"PROJECT/S,FILENAME/F",	NULL,
	AREXX_PASTE,		"PASTE",		"COMMAND/S,ARGUMENT/S",	NULL,
	AREXX_QUIT,			"QUIT",			NULL,	NULL,
	AREXX_SAVE,			"SAVE",			"PROJECT/S,AS/S,FILENAME/F",	NULL,
	AREXX_SETVAR,		"SETVAR",		"ALWAYS/N,ARGUMENT,AUTHOR,COMMAND,COPYRIGHT,FINAL/N,HANDLER/N,HANDLERTYPE/N,KEYWORD/N,MAIN/N,MULTIPLE/N,NUMBER/N,PORTNAME,SWITCH/N,TEMPLATES/N,TOGGLE/N,VERSION",	NULL,
	AREXX_SORT,			"SORT",			"COMMANDS/S,ARGUMENTS/S",	NULL,
	AREXX_WINDOW,		"WINDOW",		"MAIN/S,CODE/S,OPEN/S,CLOSE/S,ACTIVATE/S,ZOOM/S,TOFRONT/S,TOBACK/S",	NULL,
	AREXX_SELECT,		"SELECT",		"COMMAND/S,ARGUMENT/S,SELECT/N",	NULL,
	TABLE_END,
};


BYTE myHandleARexx(struct ARexxContext *c)
{
	BYTE done=FALSE;
	UBYTE *resultstring=NULL;
	LONG	resultlong=~0, flags=(argumentnode ? argumentnode->ln_Pri:0L), value=TRUE;

	if(GetARexxMsg(c))
	{
		switch(c->id)
		{
				case AREXX_ABOUT:
					MainMENUABOUT();
					break;
				case AREXX_CUT:
					if(ARG(c,0))
					{
						if(commandnode)
							CUTCOMMANDClicked();
					}
					else if(ARG(c,1))
					{
						if(argumentnode)
							CUTARGUMENTClicked();
					}
					break;
				case AREXX_GENERATE:
					if(ARG(c,1))
						GenerateSource(ARGSTRING(c,1), commandlist);
					else
						MainMENUGENERATE();
					break;
				case AREXX_GETVAR:
					if(ARG(c,0))
						resultlong=(LONG)ISBITSET(flags, ALWAYS);
					else if(ARG(c,1))
						resultstring=(argumentnode ? argumentnode->ln_Name: NOT_AVAILABLE);
					else if(ARG(c,2))
						resultstring=config.author;
					else if(ARG(c,3))
						resultstring=(commandnode ? commandnode->nn_Node.ln_Name: NOT_AVAILABLE);
					else if(ARG(c,4))
						resultstring=config.copyright;
					else if(ARG(c,5))
						resultlong=(LONG)ISBITSET(flags, FINAL);
					else if(ARG(c,6))
						resultlong=(LONG)config.arexxhandler;
					else if(ARG(c,7))
						resultlong=(LONG)config.type;
					else if(ARG(c,8))
						resultlong=(LONG)ISBITSET(flags, KEYWORD);
					else if(ARG(c,9))
						resultlong=(LONG)config.main;
					else if(ARG(c,10))
						resultlong=(LONG)ISBITSET(flags, MULTIPLE);
					else if(ARG(c,11))
						resultlong=(LONG)ISBITSET(flags, NUMBER);
					else if(ARG(c,12))
						resultstring=config.portname;
					else if(ARG(c,13))
						resultlong=(LONG)ISBITSET(flags, SWITCH);
					else if(ARG(c,14))
						resultlong=(LONG)config.templates;
					else if(ARG(c,15))
						resultlong=(LONG)ISBITSET(flags, TOGGLE);
					else if(ARG(c,16))
						resultstring=config.version;
					break;
				case AREXX_MERGE:
					if(ARG(c,0))
					{
						strcpy(file, ARGSTRING(c,0));
						MergeProject(commandlist, file, FALSE);
					}
					else
						MainMENUMERGE();
					break;
				case AREXX_MOVE:
					if(ARG(c,1))
					{
						if(argumentnode)
						{
							if(ARG(c,2))
								ARGUMENTUPClicked();
							else if(ARG(c,3))
								ARGUMENTDOWNClicked();
						}
					}
					else
					{
						if(commandnode)
						{
							if(ARG(c,2))
								COMMANDUPClicked();
							else if(ARG(c,3))
								COMMANDDOWNClicked();
						}
					}
					break;
				case AREXX_NEW:
					if(ARG(c,1))
					{
						NEWCOMMANDClicked();
						GT_SetGadgetAttrs(MainGadgets[GD_COMMANDSTRING], MainWnd, NULL,
										GTST_String,	ARGSTRING(c,3),
										GA_Disabled,	FALSE,
										TAG_DONE);
						COMMANDSTRINGClicked();
					}
					else if(ARG(c,2))
					{
						NEWARGUMENTClicked();
						GT_SetGadgetAttrs(MainGadgets[GD_ARGUMENTSTRING], MainWnd, NULL,
										GTST_String,	ARGSTRING(c,3),
										GA_Disabled,	FALSE,
										TAG_DONE);
						ARGUMENTSTRINGClicked();
					}
					else
					{
						if(ARG(c,3))
							strcpy(file, ARGSTRING(c,3));
						MainMENUNEW();
					}
					break;
				case AREXX_OPEN:
					if(ARG(c,1))
					{
						strcpy(file, ARGSTRING(c,1));
						OpenProject(commandlist, file, FALSE);
					}
					else
						MainMENUOPEN();
					break;
				case AREXX_PASTE:
					if(ARG(c,0))
					{
						if(commandbuffer)
							PASTECOMMANDClicked();
					}
					else if(ARG(c,1))
					{
						if(argumentbuffer!=NULL & commandnode!=NULL)
							PASTEARGUMENTClicked();
					}
					break;
				case AREXX_QUIT:
					done=TRUE;
					break;
				case AREXX_SAVE:
					if(ARG(c,1))
					{
						if(ARG(c,2))
						{
							strcpy(file, ARGSTRING(c,2));
							WriteIFF(commandlist, file);
						}
						else
							SaveProjectAs(commandlist, file);
					}
					else
						MainMENUSAVE();
					break;
				case AREXX_SETVAR:
					if(ARG(c,0))
						IFTRUESETBIT(ARGNUMBER(c,0), flags, ALWAYS);
					if(ARG(c,1))
					{
						if(argumentnode!=NULL & ARGSTRING(c,1)!=NULL)
						{
							GT_SetGadgetAttrs(MainGadgets[GD_ARGUMENTSTRING], MainWnd, NULL,
											GTST_String,	ARGSTRING(c,1),
											TAG_DONE);
							ARGUMENTSTRINGClicked();
						}
					}
					if(ARG(c,2))
						strcpy(config.author, ARGSTRING(c,2));
					if(ARG(c,3))
					{
						if(commandnode!=NULL & ARGSTRING(c,3)!=NULL)
						{
							GT_SetGadgetAttrs(MainGadgets[GD_COMMANDSTRING], MainWnd, NULL,
											GTST_String,	ARGSTRING(c,3),
											TAG_DONE);
							COMMANDSTRINGClicked();
						}
					}
					if(ARG(c,4))
						strcpy(config.copyright, ARGSTRING(c,4));
					if(ARG(c,5))
						IFTRUESETBIT(ARGNUMBER(c,5), flags, FINAL);
					if(ARG(c,6))
						config.arexxhandler=(BYTE)ARGNUMBER(c,6);
					if(ARG(c,7))
						config.type=(BYTE)ARGNUMBER(c,7);
					if(ARG(c,8))
						IFTRUESETBIT(ARGNUMBER(c,8), flags, KEYWORD);
					if(ARG(c,9))
						config.main=(BYTE)value;
					if(ARG(c,10))
						IFTRUESETBIT(ARGNUMBER(c,10), flags, MULTIPLE);
					if(ARG(c,11))
						IFTRUESETBIT(ARGNUMBER(c,11), flags, NUMBER);
					if(ARG(c,12))
						strcpy(config.portname, ARGSTRING(c,12));
					if(ARG(c,13))
						IFTRUESETBIT(ARGNUMBER(c,13), flags, SWITCH);
					if(ARG(c,14))
						resultlong=(LONG)config.templates;
					if(ARG(c,15))
						IFTRUESETBIT(ARGNUMBER(c,15), flags, TOGGLE);
					if(ARG(c,16))
						strcpy(config.version, ARGSTRING(c,16));

					if(argumentnode)
					{
						argumentnode->ln_Pri=flags;
						PutFlags(argumentnode);
					}
					UpdateMainWindow();
					if(config.settings)
						UpdateSettingsWindow();
					break;
				case AREXX_SORT:
					if(ARG(c,0))
						SORTCOMMANDSClicked();
					else if(ARG(c,1))
						SORTARGUMENTSClicked();
					break;
				case AREXX_WINDOW:
					{
						register struct Window *win;

						if(ARG(c,1))
							win=(config.settings ? SettingsWnd:NULL);
						else
							win=MainWnd;

						if(ARG(c,2) & !win)
							MainMENUSETTINGS();
						if(win)
						{
							if(win==MainWnd)
							{
								if(ARG(c,3))
									done=TRUE;
							}
							else
							{
								if(ARG(c,3))
									SettingsCloseWindow();
							}
							if(ARG(c,4) | ARG(c,2))
								ActivateWindow(win);
							if(ARG(c,5))
								ZipWindow(win);
							if(ARG(c,6))
								WindowToFront(win);
							if(ARG(c,7))
								WindowToBack(win);
						}
					}
					break;
				case AREXX_SELECT:
					if(ARG(c,1)!=NULL & commandnode!=NULL)
					{
						MainMsg.Code=MIN(Count(arglist), ARGNUMBER(c,2));
						MainMsg.Code=MAX(0,MainMsg.Code-1);
						ARGUMENTSClicked();
					}
					else
					{
						MainMsg.Code=MIN(Count(commandlist), ARGNUMBER(c,2));
						MainMsg.Code=MAX(0,MainMsg.Code-1);
						COMMANDSClicked();
					}
					break;
		}
		ReplyARexxMsg(c,
									ER_ReturnCode,	RC_OK,
									(resultlong!=~0 ? ER_ResultLong:TAG_IGNORE),	resultlong,
									(resultstring ? ER_ResultString:TAG_IGNORE),	resultstring,
									TAG_DONE);
	}
	if(done)
		ARexxCommandShell(c,
											ER_Close, TRUE,
											TAG_DONE);
	return done;
}

#endif
