//
// Fursin Program - Class CFGGCfg for configurations
//
#include <iostream.h>
#include <fstream.h>

#include <string.h>

#include "FGGCfg.h"

CFGGCfg::CFGGCfg(int NumbOfParams, int MaxSTRLen, char *NameOfFile)
{
	CFG=new char[NumbOfParams*MaxSTRLen-1];
	FNameOfFile=new char[strlen(NameOfFile)];
	strcpy(FNameOfFile, NameOfFile);
	FNumbOfParams=NumbOfParams;
	FMaxSTRLen=MaxSTRLen;
}

int CFGGCfg::Load(void)
{
	char c;
	int cfg_l;
	int cfg_b;

	cfg_l=0;
	cfg_b=0;
	
	ifstream fin(FNameOfFile,ios::nocreate);

	if (!fin) return 1;

	while ((fin.get(c)) && (cfg_l<FNumbOfParams))
	{
		if (c!='\n') 
		{
			CFG[(cfg_l*FMaxSTRLen)+cfg_b]=c;
			++cfg_b;
			if (cfg_b>=FMaxSTRLen)
			{
				fin.close();
				return 2;
			}
		}
		else
		{
			CFG[(cfg_l*FMaxSTRLen)+cfg_b]='\0';
			cfg_b=0;
			++cfg_l;
		}
	}
	fin.close();
	if (cfg_l<FNumbOfParams) return 3;
	return 0;
}

int CFGGCfg::Save(void)
{
	ofstream fout(FNameOfFile);

	if (!fout) return 1;

	for (int i=0;i<FNumbOfParams;++i)
	{
		int jq=i*FMaxSTRLen;
		int jl=strlen(&CFG[jq]);
		for (int j=0;j<jl;++j)
		{
			fout << CFG[jq+j];
		}
		fout << '\n';
	}
	fout.close();
	return 0;
}

void CFGGCfg::Change(int Param, char *Addr) 
{
	strcpy(&CFG[(Param-1)*FMaxSTRLen],Addr);
}
