#include "/Mailbox.h"

enum { ARG_CONFIG, ARGS };

struct ExecBase	*SysBase;
struct DosLibrary	*DOSBase;

struct Config NewConfig;
struct Status NewStatus;

struct OldConfig
{
	char system[41];
	char user[41];
	char text[41];
	char mail[41];
	char pmail[41];
	char bulletin[41];
	char door[41];
	char capture[41];
	char log[41];
	char temp[41];
	char receive[41];
	char scripts[41];

	char device[41];
	LONG unit;
	LONG baud;
	LONG ser_read_size;
	BOOL lock_baud;
	BOOL dtr_drop;
	BOOL rts_cts;
	char init[41];
	char reset[41];
	char busy[41];
	char answer[41];
	char hangup[41];

	char box_name[41];
	char netz_name[41];
	char sysop_name[41];
	char system_passwort[41];
	char fontname[41];
	LONG fontsize;
	LONG priority;
	LONG chat_level;
	BOOL bell;
	BOOL screen_front;
	BOOL backdrop;
	BOOL interlaced;

	char fax_command[81];
	char ansi_colors[12][10];

	LONG reserved1;
	LONG reserved2;
	LONG reserved3;

	char reserved4[81];
	char reserved5[81];
	char reserved6[81];
} OldConfig;

struct OldStatus
{
	LONG calls;
	LONG calls_today;
	LONG users;
	LONG users_new;
	LONG b_2400;
	LONG b_9600;
	LONG b_19200;
	LONG online;
	LONG online_today;
	LONG time_on;
	LONG mail_counter;
	LONG mails_today;
	LONG protocol;
	BOOL sysop;
	BOOL window;

	UWORD colors[16];
	char wartung_date[LEN_DATSTRING];

	LONG reserved1;
	LONG reserved2;
	LONG reserved3;

	char reserved4[81];
	char reserved5[81];
	char reserved6[81];
} OldStatus;



LONG __regargs __saveds main(STRPTR clistring, ULONG len)
{
	STATIC UBYTE *Template= "C=CONFIG/K";
	UBYTE **ArgArray;
	BPTR FH;
	char file[256], config[256];

	SysBase = *(struct ExecBase **)4;

	if(!(DOSBase = (struct DosLibrary *)OpenLibrary("dos.library", NULL)))
	{
		Printf("couldn't open dos.library.\n");
		return(100);
	}

	if(ArgArray = (UBYTE **)AllocVec(sizeof(UBYTE *) * ARGS, MEMF_PUBLIC | MEMF_CLEAR))
	{
		struct RDArgs *ArgsPtr;
		if(ArgsPtr = (struct RDArgs *)AllocVec(sizeof(struct RDArgs),MEMF_PUBLIC|MEMF_CLEAR))
		{
			if(ReadArgs(Template, (LONG *)ArgArray, ArgsPtr))
			{
				strcpy(config, (ArgArray[ARG_CONFIG] ? ArgArray[ARG_CONFIG] : "BBS:Config"));
				FreeArgs(ArgsPtr);
			}
			FreeVec(ArgsPtr);
		}
		FreeVec(ArgArray);
	}

	if(FH = Open(config, MODE_OLDFILE))
	{
		Seek(FH, 0, OFFSET_END);
		if(Seek(FH, 0, OFFSET_BEGINNING) == sizeof(struct OldConfig))
		{
			Printf("reading %ls\n", config);
			Read(FH, (UBYTE *)&OldConfig, sizeof(struct OldConfig));
		}
		else
		{
			Printf("\nerror: %ls is not a valid config file.\n", config);
			Close(FH);
			return(30);
		}
		Close(FH);
	}
	else
	{
		Printf("\n\ncould't open %ls !\nUSAGE: converter c=configfile\n\n", config);
		return(40);
	}

	SPrintf(file, "%lsStatus", OldConfig.system);
	if(FH = Open(file, MODE_OLDFILE))
	{
		Seek(FH, 0, OFFSET_END);
		if(Seek(FH, 0, OFFSET_BEGINNING) == sizeof(struct OldStatus))
		{
			Printf("reading %ls\n", file);
			Read(FH, (UBYTE *)&OldStatus, sizeof(struct OldStatus));
		}
		else
		{
			Printf("\nerror: %ls is not a valid status file.\n", file);
			Close(FH);
			return(30);
		}
		Close(FH);
	}

	Printf("converting\n");

	strcpy(NewConfig.system,				OldConfig.system);
	strcpy(NewConfig.user,					OldConfig.user);
	strcpy(NewConfig.text,					OldConfig.text);
	strcpy(NewConfig.mail,					OldConfig.mail);
	strcpy(NewConfig.pmail,					OldConfig.pmail);
	strcpy(NewConfig.bulletin,				OldConfig.bulletin);
	strcpy(NewConfig.door,					OldConfig.door);
	strcpy(NewConfig.capture,				OldConfig.capture);
	strcpy(NewConfig.log,					OldConfig.log);
	strcpy(NewConfig.temp,					OldConfig.temp);
	strcpy(NewConfig.receive,				OldConfig.receive);
	strcpy(NewConfig.scripts,				OldConfig.scripts);

	strcpy(NewConfig.device,				OldConfig.device);
	NewConfig.unit							=  OldConfig.unit;
	NewConfig.baud							=  OldConfig.baud;
	NewConfig.ser_read_size				=	OldConfig.ser_read_size;
	NewConfig.lock_baud					=  OldConfig.lock_baud;
	NewConfig.dtr_drop					=  OldConfig.dtr_drop;
	NewConfig.rts_cts						=  OldConfig.rts_cts;
	strcpy(NewConfig.init,					OldConfig.init);
	strcpy(NewConfig.reset,					OldConfig.reset);
	strcpy(NewConfig.busy,					OldConfig.busy);
	strcpy(NewConfig.answer,				OldConfig.answer);
	strcpy(NewConfig.hangup,				OldConfig.hangup);

	strcpy(NewConfig.box_name,				OldConfig.box_name);
	strcpy(NewConfig.netz_name,			OldConfig.netz_name);
	strcpy(NewConfig.sysop_name,			OldConfig.sysop_name);
	strcpy(NewConfig.system_passwort,	OldConfig.system_passwort);
	strcpy(NewConfig.fontname,				OldConfig.fontname);
	NewConfig.fontsize					=  OldConfig.fontsize;
	NewConfig.priority					=  OldConfig.priority;
	NewConfig.chat_level					=  OldConfig.chat_level;
	NewConfig.bell							=  OldConfig.bell;
	NewConfig.screen_front				=  OldConfig.screen_front;
	NewConfig.backdrop					=  OldConfig.backdrop;
	NewConfig.interlaced					=  OldConfig.interlaced;

	strcpy(NewConfig.fax_command,			OldConfig.fax_command);
	strcpy(NewConfig.ansi_colors[0]	,	OldConfig.ansi_colors[0]);
	strcpy(NewConfig.ansi_colors[1]	,	OldConfig.ansi_colors[1]);
	strcpy(NewConfig.ansi_colors[2]	,	OldConfig.ansi_colors[2]);
	strcpy(NewConfig.ansi_colors[3]	,	OldConfig.ansi_colors[3]);
	strcpy(NewConfig.ansi_colors[4]	,	OldConfig.ansi_colors[4]);
	strcpy(NewConfig.ansi_colors[5]	,	OldConfig.ansi_colors[5]);
	strcpy(NewConfig.ansi_colors[6]	,	OldConfig.ansi_colors[6]);
	strcpy(NewConfig.ansi_colors[7]	,	OldConfig.ansi_colors[7]);
	strcpy(NewConfig.ansi_colors[8]	,	OldConfig.ansi_colors[8]);
	strcpy(NewConfig.ansi_colors[9]	,	OldConfig.ansi_colors[9]);
	strcpy(NewConfig.ansi_colors[10]	,	OldConfig.ansi_colors[10]);
	strcpy(NewConfig.ansi_colors[11]	,	OldConfig.ansi_colors[11]);



	NewStatus.calls						=	OldStatus.calls;
	NewStatus.calls_today				=	OldStatus.calls_today;
	NewStatus.users						=	OldStatus.users;
	NewStatus.users_new					=	OldStatus.users_new;
	NewStatus.b_2400						=	OldStatus.b_2400;
	NewStatus.b_9600						=	OldStatus.b_9600;
	NewStatus.b_19200						=	OldStatus.b_19200;
	NewStatus.online						=	OldStatus.online;
	NewStatus.online_today				=	OldStatus.online_today;
	NewStatus.time_on						=	OldStatus.time_on;
	NewStatus.mail_counter				=	OldStatus.mail_counter;
	NewStatus.mails_today				=	OldStatus.mails_today;
	NewStatus.protocol					=	OldStatus.protocol;
	NewStatus.sysop						=	OldStatus.sysop;
	NewStatus.window						=	OldStatus.window;

	NewStatus.colors[0]					=	OldStatus.colors[0];
	NewStatus.colors[1]					=	OldStatus.colors[1];
	NewStatus.colors[2]					=	OldStatus.colors[2];
	NewStatus.colors[3]					=	OldStatus.colors[3];
	NewStatus.colors[4]					=	OldStatus.colors[4];
	NewStatus.colors[5]					=	OldStatus.colors[5];
	NewStatus.colors[6]					=	OldStatus.colors[6];
	NewStatus.colors[7]					=	OldStatus.colors[7];
	NewStatus.colors[8]					=	OldStatus.colors[8];
	NewStatus.colors[9]					=	OldStatus.colors[9];
	NewStatus.colors[10]					=	OldStatus.colors[10];
	NewStatus.colors[11]					=	OldStatus.colors[11];
	NewStatus.colors[12]					=	OldStatus.colors[12];
	NewStatus.colors[13]					=	OldStatus.colors[13];
	NewStatus.colors[14]					=	OldStatus.colors[14];
	NewStatus.colors[15]					=	OldStatus.colors[15];
	strcpy(NewStatus.wartung_date		,	OldStatus.wartung_date);


	Printf("renaming %ls to %ls.bak\n", config, config);
	SPrintf(file, "%ls.bak", config);
	DeleteFile(file);
	Rename(config, file);
	if(FH = Open(config, MODE_NEWFILE))
	{
		Printf("writing %ls\n", config);
		Write(FH, (UBYTE *)&NewConfig, sizeof(struct Config));
		Close(FH);
	}
	else
	{
		Printf("couldn't write new config file\n");
		return(40);
	}

	SPrintf(config, "%lsStatus", NewConfig.system);
	Printf("renaming %ls to %ls.bak\n", config, config);
	SPrintf(file, "%ls.bak", config);
	DeleteFile(file);
	Rename(config, file);
	if(FH = Open(config, MODE_NEWFILE))
	{
		Printf("writing %ls\n", file);
		Write(FH, (UBYTE *)&NewStatus, sizeof(struct Status));
		Close(FH);
	}
	else
	{
		Printf("couldn't write new status file\n");
		return(40);
	}

	Printf("finished.\n");
}
