/*
 * main ( int argc, char *argv[] )
 *
 * VersCheckGUI
 *
 * Copyright 1999 by Michaela Prüß
 *
 */

#include "main.h"

int main(int argc, char *argv[])
{
	if (argc==2 && argv[1][0]=='?') {
		PRINT_VERSION;
		exit(0);
	}

	if(!verscheck_init())
	{
		verscheck_close();
		return(1L);
	}

	IDisplayBorders(ri, win, &verscheck_border_data[0], 0, 0);
	IDisplayGadgets(win,gl);

	verscheck_action();

	verscheck_close();

	return(0L);
}

BOOL verscheck_init( void )
{
	if (!(IntuiSupBase = (struct Library*)OpenLibrary(IntuiSupName,IntuiSupVersion)) )
		return FALSE;

	if (!(ri = IGetRenderInfo(NULL, RENDER_INFO_FLAGS)) )
		return FALSE;

  	if (!(win = IOpenWindow(ri, &verscheck_new_window,OPEN_WINDOW_FLAGS)) )
		return FALSE;

	if (!(gl = ICreateGadgets(ri,&verscheck_gadget_data[0], 0, 0, NULL)) )
		return FALSE;

	verscheck_defaults(0);

	return TRUE;
}

void verscheck_close( void )
{
	if (gl)				IRemoveGadgets(gl);
	if (gl)				IFreeGadgets(gl);
	if (win)			ICloseWindow(win, FALSE);
	if (ri)				IFreeRenderInfo(ri);
	if (IntuiSupBase)	CloseLibrary(IntuiSupBase);
}

void verscheck_action( void )
{
	UBYTE   exestr[512];
	UBYTE   tmpstr[512];
	BOOL	keepon	=TRUE;
	int		start	=0;
	int 	libcheck=0;
	int 	all		=1;
	int 	sysinfo	=1;
	int 	fullpath=1;
	int 	merge	=0;
	int 	noreq	=0;
	int 	html	=1;
	int 	verbose	=1;
	int 	ppc		=0;
	int 	images	=0;

	do
	{
		struct IntuiMessage  *msg;

		WaitPort(win->UserPort);
		while (msg = IGetMsg(win->UserPort))
		{
			ULONG	Class=msg->Class;
			USHORT	Code=msg->Code;
			LONG	IAddress=(LONG)msg->IAddress;

			IReplyMsg(msg);

			switch(Class)
			{
				case CLOSEWINDOW:
					keepon = FALSE;
					break;

				case ISUP_ID:
					switch(Code)
					{
						case VERSCHECK_GADGET_LIBCHECK:
							libcheck=IAddress;
							verscheck_defaults(libcheck);
							break;

						case VERSCHECK_GADGET_ALL:
							all=IAddress;
							break;

						case VERSCHECK_GADGET_SYSINFO:
							sysinfo=IAddress;
							break;

						case VERSCHECK_GADGET_FULLPATH:
							fullpath=IAddress;
							break;

						case VERSCHECK_GADGET_MERGE:
							merge=IAddress;
							break;

						case VERSCHECK_GADGET_NOREQ:
							noreq=IAddress;
							break;

						case VERSCHECK_GADGET_HTML:
							html=IAddress;
							break;

						case VERSCHECK_GADGET_VERBOSE:
							verbose=IAddress;
							break;

						case VERSCHECK_GADGET_POWEREXE:
							ppc=IAddress;
							break;

						case VERSCHECK_GADGET_IMAGES:
							images=IAddress;
							break;

						case VERSCHECK_GADGET_SUFFIX:
							sprintf(suffix,"%s",(char *)IAddress);
							break;

						case VERSCHECK_GADGET_LIST:
							sprintf(chklst,"%s",(char *)IAddress);
							break;

						case VERSCHECK_GADGET_OUTFILE:
							sprintf(ofname,"%s",(char *)IAddress);
							break;

						case VERSCHECK_GADGET_FILEDIR:
							sprintf(dirnam,"%s",(char *)IAddress);
							break;

						case VERSCHECK_GADGET_START:
							keepon=FALSE;
							start=1;		/* start ONE check */
							break;

						case VERSCHECK_GADGET_STARTALL:
							keepon=FALSE;
							libcheck=0;
							start=2;		/* start ALL checks */
							break;

					}
			}
		}
	} while (keepon == TRUE);

	while(start)
	{
		if (start==2)
		{
			verscheck_defaults(libcheck);
			sysinfo=1;
			images=0;
			noreq=1;
		}

		strcpy(exestr,"VersCheck ");
        switch(libcheck)
		{
			case 1:
				strcat(exestr,"-2 ");
				break;
			case 2:
				strcat(exestr,"-3 ");
				break;
			case 3:
				strcat(exestr,"-4 ");
				break;
			case 4:
				strcat(exestr,"-5 ");
				break;
			case 5:
			case 6:
			case 7:
			case 8:
			case 9:
				sprintf(tmpstr, "-0s %s -0l %s -0n %s ", suffix, chklst, ofname);
				strcat(exestr,tmpstr);
				strcpy(dirnam,"Sys:Classes");
				merge=2;
				sysinfo=0;
				break;
			case 10:
				break;
			default:
				strcat(exestr,"-1 ");
				break;
		}

		if (all)		strcat(exestr,"-a ");
		if (sysinfo)	strcat(exestr,"-s ");
		if (fullpath)	strcat(exestr,"-f ");
		if (merge)		strcat(exestr,"-m ");
		if (noreq)		strcat(exestr,"-n ");
		if (html)		strcat(exestr,"-o ");
		if (verbose)	strcat(exestr,"-v ");

		switch(ppc)
		{
			case 1:
				strcat(exestr,"-x1 ");
				break;
			case 2:
				strcat(exestr,"-x2 ");
				break;
			case 3:
				strcat(exestr,"-x3 ");
				break;
			default:
				break;
		}

		switch(images)
		{
			case 1:
				strcat(exestr,"-p ");
				break;
			case 2:
				strcat(exestr,"-P ");
				break;
			default:
				break;
		}
		if (merge==2)
		{
			sprintf(tmpstr,"%s -s MUI: >CON:0/0/640/250/VersCheckGUI",exestr);
			Execute(tmpstr,0L,0L);
		}
		sprintf(tmpstr,"\"%s\"",dirnam);	/* make shure that blank in filename will work */
		strcat(exestr,tmpstr);
		strcat(exestr," >CON:0/0/640/250/VersCheckGUI");
		Execute(exestr,0L,0L);

		if (start==1) break;

		libcheck++;
		if (libcheck>9) start=0;
	};
}

void verscheck_set_gadgets(int check)
{
	if (check<3)
	{
		ISetGadgetAttributes(gl, VERSCHECK_GADGET_HTML,
			GADGET_DATA_FLAG_DISABLED, 0,
			USE_CURRENT_VALUE, 1,
			(void *) USE_CURRENT_VALUE);
	}
	else
	{
		ISetGadgetAttributes(gl, VERSCHECK_GADGET_HTML,
			GADGET_DATA_FLAG_DISABLED, GADGET_DATA_FLAG_DISABLED,
			USE_CURRENT_VALUE, 0,
			(void *) USE_CURRENT_VALUE);
	}

	if (check<5)
	{
		ISetGadgetAttributes(gl, VERSCHECK_GADGET_MERGE,
			GADGET_DATA_FLAG_DISABLED, 0,
			USE_CURRENT_VALUE, USE_CURRENT_VALUE,
			(void *) USE_CURRENT_VALUE);

		ISetGadgetAttributes(gl, VERSCHECK_GADGET_IMAGES,
			GADGET_DATA_FLAG_DISABLED, GADGET_DATA_FLAG_DISABLED,
			USE_CURRENT_VALUE, 0,
			(void *) USE_CURRENT_VALUE);

		ISetGadgetAttributes(gl, VERSCHECK_GADGET_SUFFIX,
			GADGET_DATA_FLAG_DISABLED, GADGET_DATA_FLAG_DISABLED,
			USE_CURRENT_VALUE, USE_CURRENT_VALUE,
			suffix);

		ISetGadgetAttributes(gl, VERSCHECK_GADGET_LIST,
			GADGET_DATA_FLAG_DISABLED, GADGET_DATA_FLAG_DISABLED,
			USE_CURRENT_VALUE, USE_CURRENT_VALUE,
			chklst);

		ISetGadgetAttributes(gl, VERSCHECK_GADGET_OUTFILE,
			GADGET_DATA_FLAG_DISABLED, GADGET_DATA_FLAG_DISABLED,
			USE_CURRENT_VALUE, USE_CURRENT_VALUE,
			ofname);

		ISetGadgetAttributes(gl, VERSCHECK_GADGET_FILEDIR,
			GADGET_DATA_FLAG_DISABLED, 0,
			USE_CURRENT_VALUE, USE_CURRENT_VALUE,
			dirnam);
	}
	else if (check>4 && check<10)
	{
		ISetGadgetAttributes(gl, VERSCHECK_GADGET_MERGE,
			GADGET_DATA_FLAG_DISABLED, GADGET_DATA_FLAG_DISABLED,
			USE_CURRENT_VALUE, 1,
			(void *) USE_CURRENT_VALUE);

		ISetGadgetAttributes(gl, VERSCHECK_GADGET_IMAGES,
			GADGET_DATA_FLAG_DISABLED, GADGET_DATA_FLAG_DISABLED,
			USE_CURRENT_VALUE, 0,
			(void *) USE_CURRENT_VALUE);

		ISetGadgetAttributes(gl, VERSCHECK_GADGET_SUFFIX,
			GADGET_DATA_FLAG_DISABLED, GADGET_DATA_FLAG_DISABLED,
			USE_CURRENT_VALUE, USE_CURRENT_VALUE,
			suffix);

		ISetGadgetAttributes(gl, VERSCHECK_GADGET_LIST,
			GADGET_DATA_FLAG_DISABLED, GADGET_DATA_FLAG_DISABLED,
			USE_CURRENT_VALUE, USE_CURRENT_VALUE,
			chklst);

		ISetGadgetAttributes(gl, VERSCHECK_GADGET_OUTFILE,
			GADGET_DATA_FLAG_DISABLED, GADGET_DATA_FLAG_DISABLED,
			USE_CURRENT_VALUE, USE_CURRENT_VALUE,
			ofname);

		ISetGadgetAttributes(gl, VERSCHECK_GADGET_FILEDIR,
			GADGET_DATA_FLAG_DISABLED, GADGET_DATA_FLAG_DISABLED,
			USE_CURRENT_VALUE, USE_CURRENT_VALUE,
			dirnam);
	}
	else if (check==10)
	{
		ISetGadgetAttributes(gl, VERSCHECK_GADGET_MERGE,
			GADGET_DATA_FLAG_DISABLED, 0,
			USE_CURRENT_VALUE, USE_CURRENT_VALUE,
			(void *) USE_CURRENT_VALUE);

		ISetGadgetAttributes(gl, VERSCHECK_GADGET_IMAGES,
			GADGET_DATA_FLAG_DISABLED, 0,
			USE_CURRENT_VALUE, USE_CURRENT_VALUE,
			(void *) USE_CURRENT_VALUE);

		ISetGadgetAttributes(gl, VERSCHECK_GADGET_SUFFIX,
			GADGET_DATA_FLAG_DISABLED, 0,
			USE_CURRENT_VALUE, USE_CURRENT_VALUE,
			suffix);

		ISetGadgetAttributes(gl, VERSCHECK_GADGET_LIST,
			GADGET_DATA_FLAG_DISABLED, 0,
			USE_CURRENT_VALUE, USE_CURRENT_VALUE,
			chklst);

		ISetGadgetAttributes(gl, VERSCHECK_GADGET_OUTFILE,
			GADGET_DATA_FLAG_DISABLED, 0,
			USE_CURRENT_VALUE, USE_CURRENT_VALUE,
			ofname);

		ISetGadgetAttributes(gl, VERSCHECK_GADGET_FILEDIR,
			GADGET_DATA_FLAG_DISABLED, 0,
			USE_CURRENT_VALUE, USE_CURRENT_VALUE,
			dirnam);
	}
	else if (check>10)
	{
		ISetGadgetAttributes(gl, VERSCHECK_GADGET_MERGE,
			GADGET_DATA_FLAG_DISABLED, 0,
			USE_CURRENT_VALUE, USE_CURRENT_VALUE,
			(void *) USE_CURRENT_VALUE);

		ISetGadgetAttributes(gl, VERSCHECK_GADGET_IMAGES,
			GADGET_DATA_FLAG_DISABLED, 0,
			USE_CURRENT_VALUE, USE_CURRENT_VALUE,
			(void *) USE_CURRENT_VALUE);

		ISetGadgetAttributes(gl, VERSCHECK_GADGET_SUFFIX,
			GADGET_DATA_FLAG_DISABLED, GADGET_DATA_FLAG_DISABLED,
			USE_CURRENT_VALUE, USE_CURRENT_VALUE,
			suffix);

		ISetGadgetAttributes(gl, VERSCHECK_GADGET_LIST,
			GADGET_DATA_FLAG_DISABLED, GADGET_DATA_FLAG_DISABLED,
			USE_CURRENT_VALUE, USE_CURRENT_VALUE,
			chklst);

		ISetGadgetAttributes(gl, VERSCHECK_GADGET_OUTFILE,
			GADGET_DATA_FLAG_DISABLED, GADGET_DATA_FLAG_DISABLED,
			USE_CURRENT_VALUE, USE_CURRENT_VALUE,
			ofname);

		ISetGadgetAttributes(gl, VERSCHECK_GADGET_FILEDIR,
			GADGET_DATA_FLAG_DISABLED, 0,
			USE_CURRENT_VALUE, USE_CURRENT_VALUE,
			dirnam);
	}
}

void verscheck_defaults(int check)
{

	switch(check)
	{
		case 1:
			strcpy(suffix,"<intern>");
			strcpy(chklst,"<intern>");
			strcpy(ofname,"<intern>");
			strcpy(dirnam,"Devs:");
			break;
		case 2:
			strcpy(suffix,"<intern>");
			strcpy(chklst,"<intern>");
			strcpy(ofname,"<intern>");
			strcpy(dirnam,"Sys:Classes/Datatypes");
			break;
		case 3:
			strcpy(suffix,"<intern>");
			strcpy(chklst,"<intern>");
			strcpy(ofname,"<intern>");
			strcpy(dirnam,"MUI:Libs/MUI");
			break;
		case 4:
			strcpy(suffix,"<intern>");
			strcpy(chklst,"<intern>");
			strcpy(ofname,"<intern>");
			strcpy(dirnam,"l:");
			break;
		case 5:
			strcpy(suffix,".class");
			strcpy(chklst,"ClassList");
			strcpy(ofname,"CLASS");
			strcpy(dirnam,"<intern>");
			break;
		case 6:
			strcpy(suffix,".image");
			strcpy(chklst,"ImageList");
			strcpy(ofname,"CLASSIMG");
			strcpy(dirnam,"<intern>");
			break;
		case 7:
			strcpy(suffix,".gadget");
			strcpy(chklst,"GadgetList");
			strcpy(ofname,"CLASSGAD");
			strcpy(dirnam,"<intern>");
			break;
		case 8:
			strcpy(suffix,".codec");
			strcpy(chklst,"CodecList");
			strcpy(ofname,"CLASSCOD");
			strcpy(dirnam,"<intern>");
			break;
		case 9:
			strcpy(suffix,".decoder");
			strcpy(chklst,"DecoderList");
			strcpy(ofname,"CLASSDEC");
			strcpy(dirnam,"<intern>");
			break;
		case 10:
			strcpy(suffix,"");
			strcpy(chklst,"");
			strcpy(ofname,"");
			strcpy(dirnam,"");
			break;
		case 11:
			strcpy(suffix,"<OFF>");
			strcpy(chklst,"<OFF>");
			strcpy(ofname,"<OFF>");
			strcpy(dirnam,"c:");
			break;
		default:
			strcpy(suffix,"<intern>");
			strcpy(chklst,"<intern>");
			strcpy(ofname,"<intern>");
			strcpy(dirnam,"Libs:");
			break;
	}
	verscheck_set_gadgets(check);
}
