/*
	ワイバーンネット用ログカッター　ＷＶＮ．ＥＸＥ　　Ｖ０．０４

　　　　　　　　　　　　　　　　　　　　(c)1995 MASAYA FUJIMOTO(Ｐｕｐｐｉ☆)
*/

#include	<stdio.h>
#include	<string.h>
#include	<stdlib.h>
#include	<time.h>
#include	<ctype.h>

void fg(void);
void strmid(char *in,char *out,int s,int l);
void time_put(void);
void fil_fil(char *in);
void ok(void);
void option(void);


int	nt_flag=0;
int esc=0;
int ne_flag=0;
char dirname[80]="WVN";
char opt[80];
char fn[256];

char ver[]="Ver 0.05";
char s[256];
char m[256];
char f[256];
FILE *fin,*fout;
struct tm *ltime;
time_t jikoku;

main(int argc,	char *argv[])
{

	int i;
	int bord_no[100];
	char bord_name[100][9];
	int	bord_max;
	int	k;
	char dam[255];
	char dam2[255];

	printf("ワイバーンネット用ログカッター　ＷＶＮ．ＥＸＥ　");
	printf("%s\n",ver);
	printf("　　　　　　　　　　　　　　　　　　　");
	puts("(c)1995 MASAYA FUJIMOTO (Ｐｕｐｐｉ☆)\n\n");

	if(argc<2){
		puts("　　使い方：WVN [-nt][-ne][-dDirname] Filename\n");
		puts("　　option：-nt タイムスタンプを抑制します");
		puts("　　        -ne 自動削除を抑制します");
		puts("            -d  保存先のディレクトリを指定します\n");
		puts("　　内　容：ワイバーンネットの圧縮ログを解凍して出来たログを");
		puts("　　　　　　ボード毎に分けて保存\n");
		puts("　　注　意：入力ファイルはデフォルトでは自動消滅します(^^;");
		puts("            消去しない場合は-neオプションで抑制してください\n");
		exit(0);
	}else{
		for(i=1;i<argc;i++){
			strcpy(opt,argv[i]);
			option();
		}
	}

	strcpy(dam,"");
	strcat(dam,dirname);
	strcat(dam,"\\tmp.$$$");
	if((fout=fopen(dam,"a"))==NULL){
		printf(dirname);
		puts("<dir>が無いもしくは、その他のライトエラー");
		exit(1);
	}
	fclose(fout);
	
	strcpy(dam,"");
	strcat(dam,dirname);
	strcat(dam,"\\tmp.$$$");
	strcpy(dam2,"del ");
	strcat(dam2,dam);
	system(dam2);

	if((fin=fopen(fn,"r"))==NULL){
		printf("入力ファイル %s がありません。\n",fn);
		exit(1);
	}
	
	fg();
	if(s[0]==0x1b){
		esc=1;
	}
	while(s[0]!='N'){
		if(s[esc*7+18]=='#'){
			printf("	\aメールが同封されています(^_^)/\n");
			printf("	");
			printf("    MAIL.LOG ･･･ 処理中 ");
			strcpy(dam,"");
			strcat(dam,dirname);
			strcat(dam,"\\MAIL.LOG");
			
			if((fout=fopen(dam,"a"))==NULL){
				printf("出力ファイルが開けませんのら！\n");
				exit(1);
			}
			strcpy(m,s);
			time_put();
			strcpy(s,m);
			while(strcmp(m,"あなたが読めるボ")!=0){
				if(fputs(s,fout)==EOF){
					printf("出力エラー発生なのれす☆\n");
					exit(1);
				}
				fg();
				strmid(s,m,5,16);
			}

			fclose(fout);
			puts("[できましたぁ☆彡]");
		}
		fg();
	}
	while(s[esc*7]!='-'){
		fg();
	}

	i=0;
	fg();
	while(s[esc*7]!='-'){
		strmid(s,m,1,2);
		bord_no[i]=atoi(m);
		strmid(s,m,13,8);
		fil_fil(m);
		strcpy(bord_name[bord_no[i]],m);
		fg();
		i++;
	}

	bord_max=i-1;

	k=0;
	
	for(;;){
		if(fgets(s,256,fin)==NULL){
			break;
		}
		strmid(s,m,15+esc*7,4);
		if(strcmp(m,"★☆")==0){
			fclose(fout);
			if(k!=0)
				puts("[できましたぁ☆彡]");

			printf("        FILEBORD.LOG ･･･ 処理中 ");
			strcpy(dam,"");
			strcat(dam,dirname);
			strcat(dam,"\\FILEBORD.LOG");
			
			if((fout=fopen(dam,"a"))==NULL){
				printf("出力ファイルが開けませんのら！\n");
				exit(1);
			}
			strcpy(m,s);
			time_put();
			strcpy(s,m);
			while(strcmp(m,"全")!=0){
				if(fputs(s,fout)==EOF){
					printf("出力エラー発生なのれす☆\n");
					exit(1);
				}
				fg();
				strmid(s,m,15,2);
			}

			fclose(fout);
			puts("[できましたぁ☆彡]");
			break;
		}
		strmid(s,m,4+esc*14,4);
		if(s[0]=='#' && strcmp(m,"★☆")==0){
			if(k==1){
				fclose(fout);
				puts("[できましたぁ☆彡]");
			}
			strmid(s,m,2+esc*7,2);
			i=atoi(m);

			strcpy(f,dirname);
			strcat(f,"\\");
			strcat(f,bord_name[i]);
			strcat(f,".log");

			if((fout=fopen(f,"a"))==NULL){
				printf("出力ファイルが開けませんのら！\n");
				exit(1);
			}

			time_put();

			if(fgets(s,256,fin)==NULL){
				break;
			}
			if(fgets(s,256,fin)==NULL){
				break;
			}

			printf("	%8s",bord_name[i]);
			printf(".LOG ･･･ 処理中 ");
			k=1;
		}
		if(k==1){
			if(fputs(s,fout)==EOF){
				printf("出力エラー発生なのれす☆\n");
				exit(1);
			}
		}
	}

	if(ne_flag==0){
		strcpy(s,"del ");
		strcat(s,fn);
		system(s);
	}
	puts("\n\nみ〜んな終わりましたぁ☆\n");
}

void fg(void)
{
	if(fgets(s,256,fin)==NULL){
		puts("作業途中にファイルが終わりました。\n");
		exit(1);
	}
}

void strmid(char *in,char *out,int s,int l)
{
	int i;
	char *p;
	p=in+s-1;
	for(i=0;i<=l-1;i++){
		*out=*p;
		out++;
		p++;
	}
	*out='\0';
}

void time_put(void)
{
	if(nt_flag==1){
		return;
	}
	time(&jikoku);
	ltime=localtime(&jikoku);
	strftime(s,256,"\nﾛﾛﾛﾛﾛﾛﾛﾛﾛﾛ %x(%a) %X ログアペンド ﾛﾛﾛﾛﾛﾛﾛﾛﾛﾛ WVN.EXE ",ltime);
	strcat(s,ver);
	strcat(s," ﾛﾛﾛ\n");
	fputs(s,fout);
}

void fil_fil(char *in)
{
	int i;
	char *or;
	char *ar;
	or=in;
	ar=in;

	for(i=0;i<=7;i++){
		if(*or!=' '){
			*ar=*or;
			ar++;
		}
		or++;
	}
	*ar='\0';
}

void ok(void)
{
	printf("ＯＫ！\n");
	exit(0);
}

void option(void)
{
	int i;
	char c;
	int endflag=0;
	char opt2[80];
	int enflag=0;

	for(i=1;i<=strlen(opt);i++){
		c=opt[i];
		opt[i]=toupper(c);
	}
	
	if(strcmp(opt,"-NT")==0){
		nt_flag=1;
		endflag=1;
	}
	if(strcmp(opt,"-NE")==0){
		ne_flag=1;
		endflag=1;
	}
	if(endflag==0){
		strmid(opt,opt2,1,2);
		if(strcmp(opt2,"-D")==0){
			if(opt[strlen(opt)-1]==92)
				enflag=1;
			strmid(opt,dirname,3,strlen(opt)-2-enflag);
			endflag=1;
		}
	}
	if(endflag==0){
		strcpy(fn,opt);
	}

}
