#include <dos/dos.h>
#include <exec/memory.h>

enum{ARG_CMP,ARG_TEXT,ARG_REPLACE,ARG_AFTER,ARG_BEFORE,ARG_COUNT};
#define ARGTMPL "CMP/A,TEXT/A,REPLACE/S,AFTER/S,BEFORE/S"

#define MD_REPLACE   0
#define MD_AFTER     1
#define MD_BEFORE    2

const char *version="$VER: ModStartUp V1.0 by Tinic Urou in 1996";

fail(char *messy)
{
	PutStr("*** ModStartUp: ");
	PutStr(messy);
	PutStr("\n");
}

int main(void)
{
	BPTR    *file1,*file2;
	ULONG   *ArgArray;
	ULONG   mode;
	BOOL    succ=FALSE;
	char    *token,*cmp,*text;

	if(ArgArray = (STRPTR *)AllocVec((sizeof(ULONG)*(ARG_COUNT)) + 16L,MEMF_CLEAR))
	{
		struct RDArgs *rd;
		if(rd=(struct RDArgs *)ReadArgs(ARGTMPL,(LONG *)ArgArray,NULL))
		{
			if(ArgArray[ARG_CMP])
			{
				cmp=(char *)ArgArray[ARG_CMP];
			}
			if(ArgArray[ARG_TEXT])
			{
				text=(char *)ArgArray[ARG_TEXT];
			}
			if(ArgArray[ARG_REPLACE])
			{
				mode=MD_REPLACE;
			}
			if(ArgArray[ARG_BEFORE])
			{
				mode=MD_BEFORE;
			}
			if(ArgArray[ARG_AFTER])
			{
				mode=MD_AFTER;
			}
		}
		if(token=(char *)AllocVec(1024,NULL))
		{
			if(ParsePatternNoCase(cmp,token,500))
			{
				if(file1=(BPTR *)Open("s:startup-sequence",MODE_OLDFILE))
				{
					if(file2=(BPTR *)Open("t:startup-sequence",MODE_NEWFILE))
					{
						char *line;
						if(line=(char *)AllocVec(4096L,NULL))
						{
							while(FGets(file1,line,4096L))
							{
								if(MatchPatternNoCase(token,line))
								{
									switch (mode)
									{
										case    MD_REPLACE:
												FPuts(file2,text);
												FPutC(file2,'\n');
												break;
										case    MD_BEFORE:
												FPuts(file2,text);
												FPutC(file2,'\n');
												FPuts(file2,line);
												break;
										case    MD_AFTER:
												FPuts(file2,line);
												FPuts(file2,text);
												FPutC(file2,'\n');
												break;
									}
								}
								else FPuts(file2,line);
							}
							succ=TRUE;
							FreeVec(line);
						}
						else fail("No memory!");
						Close(file2);
					}
					else fail("Could not create t:startup-sequence");
					Close(file1);
				}
				else fail("Could not open s:startup-sequence");
			}
			else fail("No memory!");
			FreeVec(token);
		}
		else fail("ReadArgs failes.");
		FreeArgs(rd);
	}
	else fail("No memory!");
	if(succ)
	{
		Execute("Copy t:startup-sequence s:startup-sequence",NULL,NULL);
	}
	else fail("Copying of the new startup-sequence failed. Please copy it manually from t:startup-sequence.");
	return(NULL);
}
