/***************
*
* txm\txminfo.c
*/
#include "txm.h"

/* ログファイル1行目を読み込み */
char *preopen(char *buf)
{
	FILE *fp;
	char *ret;
	long fsize;
#if 0
	struct sbuf;
	/* ここで突然ファイルサイズチェック */
	if (stat(logfile, &sbuf) {
		return NULL;
	}
	/* ログファイルが指定条件より小さければ何もしない */
	if (sbuf.st_size < ((long)maxrun * 1024)) {
		return NULL;
	}
#endif

/*	printf("preopen()\n");	*/
	if ((fp = fopen(logfile, "rb")) == NULL) {
		return NULL;
	}

	/* ここで突然ファイルサイズチェック */
	fsize = filelength(fileno(fp));

	/* ログファイルが指定条件より小さければ何もしない */
	if (fsize < ((long)maxrun * 1024)) {
		fclose(fp);
		return NULL;
	}

	ret = fgets(buf, 80, fp);
	fclose(fp);
	return (ret);
}

/* ヘッダチェック(Merged by FAPX) */
int chkheader(char *buf)
{
/*	printf("chkheader()\n");	*/
	if (strstr(buf, "Merged") == NULL) {
		return FALSE;
	}
	return TRUE;
}

/* 情報ファイル名作成 & 会議室番号読み取り */
int makeinfofilename(char *buf)
{
	char fname[16];
	int no;

/*	printf("makeinfofilename()\n");	*/

	hpflg = FALSE;
	strcpy(infofile, txmdir);
	if (jstrrchr(infofile, '\\') != (infofile + strlen(infofile) - 1)) {
		strcat(infofile, "\\");
	}

	if (strncmp(buf, "FORUM:", 6) == 0) {
		if (sscanf(buf, "FORUM:%8s MES:%2d", fname, &no) < 2) {
			return FALSE;
		}
	}
	else if (strncmp(buf, "HP:", 3) == 0) {
		hpflg = TRUE;
		no = 2;
		if (sscanf(buf, "HP:%8s ", fname) < 1) {
			return FALSE;
		}
	}
	else if (strncmp(buf, "PATIO:", 6) == 0) {
		no = 1;
		if (sscanf(buf, "PATIO:%8s ", fname) < 1) {
			return FALSE;
		}
	}
	else {
		return FALSE;
	}
	if (no == 0) {
		return FALSE;
	}
	mesno = no;
	nowinfo = &(info.mes[mesno]);

	strcat(infofile, fname);
	strcat(infofile, ".TXM");
/*	printf("infofile:%s\n", infofile);	*/

	return TRUE;
}

/* 情報ファイル新規作成 */
void makenewinfo()
{
	int i;

/*	printf("makenewinfo()\n");	*/
	for (i = 0; i < 20; i++) {
		info.mes[i].version = 0x01;	/* バージョン現在はチェック無し */
		info.mes[i].ext = 1;
		info.mes[i].art = 0;
		info.mes[i].ltime.x = 0;
		info.mes[i].reserve1 = 0;
		info.mes[i].reserve2 = 0;
		info.mes[i].reserve3 = 0;
	}
}

/* 情報ファイルチェック(無ければ作成) */
int chkinfo()
{
	char *kind;
	FILE *fp;

/*	printf("chkinfo()\n");	*/
	if ((kind = preopen(line1)) == NULL) {
		return FALSE;
	}
	if (chkheader(kind) == FALSE) {
		return FALSE;
	}
	if (makeinfofilename(kind) == FALSE) {
		return FALSE;
	}

	if (fp = fopen(infofile, "rb")) {
		if (fread((char *)(&info), sizeof(TXM), 1, fp) < 1) {
			makenewinfo();
		}
		fclose(fp);
	}
	else {
		makenewinfo();
	}

	return TRUE;
}

/* 情報ファイル保存 */
int saveinfo()
{
	FILE *fp;

/*	printf("saveinfo()\n");	*/
	accessdir(txmdir);
	if ((fp = fopen(infofile, "wb")) == NULL) {
		return FALSE;
	}
	if (fwrite((char *)(&info), sizeof(TXM), 1, fp) < 1) {
		fclose(fp);
		return FALSE;
	}
	fclose(fp);
	return TRUE;
}

