/************************************************************************/
/*	FILE : sample2.c						*/
/*									*/
/************************************************************************/
#include			<stdio.h>
#include			<locale.h>
#include			"xwins.h"
#include			"app_glob.c"
#include			"dir_glob.c"

#define				unchar			unsigned char

FILE				*fpw0, *fpw1, *fpw2, *fpw3, *fpw4, *fpw5, *fpw6, *fpw7, *fpw8, *fpw9;

char				pure_data[100];
char				d0_dat[20];
char				d1_dat[20];
char				d2_dat[20];
char				d3_dat[20];
char				gpow_dat[3];
char				gmax_dat[5];
char				mode7_dat[5];

int				data_sum,i,j,k;

struct	values{
	char				enemy_name[12];
	char				enemy_name0[7];

	char				init_value,move_value,fail_value,nose_value;

	char				objsize_value;
	char				throw_value;
	char				eat_value;
	char				enen_value;
	char				plen_value;
	char				enen0_value;
	char				enen1_value;
	char				plen0_value;
	char				plen1_value;

	char				bgsize_value;
	char				yclear_value;
	char				yoko_value;
	char				tate_value;
	char				xrev_value;
	char				eat2_value;

	char				oamset_value;
	char				clrsize_value;
	char				tama_value;
	char				item_value;
	char				enmy_value;
	char				point_value;
	char				objsum_value;

	char				attr_value;
	char				flip_value;
	char				attr2_value;
	char				color_value;

	char				gpow_value;
	int				gmax_value;

	int				mode7_value;

	struct	values			*next_ptr;
	struct	values			*previous_ptr;
};

	struct	values	*first_ptr;
	struct	values	*now_ptr;
	struct	values	*before_ptr = NULL;
	struct	values	*after_ptr = NULL;
	struct	values	*new_ptr;
	struct	values	*save_ptr;

static	char			*moji[]		= {"‚O","‚P","‚Q","‚R","‚S","‚T","‚U","‚V","‚W","‚X",
						   "‚`","‚a","‚b","‚c","‚d","‚e","‚f","‚g","‚h","‚i",
						   "‚j","‚k","‚l","‚m","‚n","‚o","‚p","‚q","‚r","‚s",
						   "‚t","‚u","‚v","‚w","‚x","‚y"};

/********************************************************/
/*	Main						*/
/********************************************************/
main(int argc, char **argv)
{
	data_sum = 0;

	/****** read file open ******/
	fpw0=fopen("name.dat","r");
	fgets(&pure_data, 40, fpw0);
	name_trans0();
	first_ptr = new_ptr;
	new_ptr->previous_ptr = NULL;
	now_ptr = new_ptr;

	while((fgets(&pure_data, 40, fpw0))!=NULL){
		name_trans0();
		new_ptr->previous_ptr = now_ptr;
		now_ptr->next_ptr = new_ptr;
		now_ptr = new_ptr;
	}

	now_ptr->next_ptr = NULL;

	 /****** read file close ******/
	 fclose(fpw0);

	now_ptr = first_ptr;
	fpw0=fopen("init.dat","r");
	fpw1=fopen("move.dat","r");
	fpw2=fopen("fail.dat","r");
	fpw3=fopen("nose.dat","r");
	fpw4=fopen("enmode0.dat","r");
	fpw5=fopen("enmode1.dat","r");
	fpw6=fopen("enmode2.dat","r");
	fpw7=fopen("endata0.dat","r");
	fpw8=fopen("endata1.dat","r");
	fpw9=fopen("rot.dat","r");
	for(i=data_sum;i>=0;i--){
		data_trans();
		now_ptr = now_ptr->next_ptr;
	}
	/****** read file close ******/
	fclose(fpw0);
	fclose(fpw1);
	fclose(fpw2);
	fclose(fpw3);
	fclose(fpw4);
	fclose(fpw5);
	fclose(fpw6);
	fclose(fpw7);
	fclose(fpw8);
	fclose(fpw9);

	data_sum--;

	/****** write file open ******/
	if((fpw0=fopen("sample.dat","wb")) != 0){
		fwrite(&data_sum, 1, sizeof(data_sum), fpw0);
		now_ptr = first_ptr;
		for(i=data_sum;i>=0;i--){
			fwrite(now_ptr, 1, sizeof(struct values), fpw0);
			now_ptr = now_ptr->next_ptr;
		}
		/****** write file close ******/
		fclose(fpw0);
	}

	exit(0);
}

name_trans0()
{
		new_ptr = (struct values *) malloc( sizeof(struct values));
		sscanf(pure_data, "%s %s %s", &new_ptr->enemy_name0, &d1_dat, &d2_dat);
		new_ptr->enemy_name[0] = '\0';
		for(j=0;j<=4;j++){
			k = (k = (new_ptr->enemy_name0[j]-0x30))<10 ? k: k-7;
			strcat(new_ptr->enemy_name, moji[k]);
		}

		data_sum++;
}
data_trans()
{
	if((fgets(&pure_data, 100, fpw0))!=NULL){
		sscanf(pure_data, "%s %s %s %s", &d0_dat, &d1_dat, &d2_dat, &d3_dat);
		now_ptr->init_value = (strlen(d2_dat)==6) ? 0: 1;
	}
	if((fgets(&pure_data, 100, fpw1))!=NULL){
		sscanf(pure_data, "%s %s %s", &d0_dat, &d1_dat, &d2_dat);
		now_ptr->move_value = (strlen(d1_dat)==6) ? 0: 1;
	}
	if((fgets(&pure_data, 100, fpw2))!=NULL){
		sscanf(pure_data, "%s %s %s", &d0_dat, &d1_dat, &d2_dat);
		now_ptr->fail_value = (strlen(d1_dat)==6) ? 0: 1;
	}
	if((fgets(&pure_data, 100, fpw3))!=NULL){
		sscanf(pure_data, "%s %s %s", &d0_dat, &d1_dat, &d2_dat);
		now_ptr->nose_value = (strlen(d1_dat)==6) ? 0: 1;
	}
	if((fgets(&pure_data, 100, fpw4))!=NULL){
		sscanf(pure_data, "%s %s %s", &d0_dat, &d1_dat, &d2_dat);
		for(j=0;j<=19;j++)	d1_dat[j] = d1_dat[j] - 0x30;
		now_ptr->plen1_value = d1_dat[0]*2+d1_dat[1];
		now_ptr->plen0_value = d1_dat[2]*4+d1_dat[3]*2+d1_dat[4];
		now_ptr->enen1_value = d1_dat[5];
		now_ptr->enen0_value = d1_dat[6];
		now_ptr->plen_value  = d1_dat[7];
		now_ptr->enen_value  = d1_dat[8];
		now_ptr->eat_value   = d1_dat[9];
		now_ptr->throw_value = d1_dat[10];
		now_ptr->objsize_value = d1_dat[11]*16+d1_dat[12]*8+d1_dat[13]*4+d1_dat[14]*2+d1_dat[15];
	}
	if((fgets(&pure_data, 100, fpw5))!=NULL){
		sscanf(pure_data, "%s %s %s", &d0_dat, &d1_dat, &d2_dat);
		for(j=0;j<=19;j++)	d1_dat[j] = d1_dat[j] - 0x30;
		now_ptr->eat2_value   = d1_dat[0]*8+d1_dat[1]*4+d1_dat[2]*2+d1_dat[3];
		now_ptr->xrev_value   = d1_dat[5];
		now_ptr->tate_value   = d1_dat[6]*2+d1_dat[7];
		now_ptr->yoko_value   = d1_dat[8]*2+d1_dat[9];
		now_ptr->yclear_value = d1_dat[10];
		now_ptr->bgsize_value = d1_dat[11]*16+d1_dat[12]*8+d1_dat[13]*4+d1_dat[14]*2+d1_dat[15];
	}
	if((fgets(&pure_data, 100, fpw6))!=NULL){
		sscanf(pure_data, "%s %s %s", &d0_dat, &d1_dat, &d2_dat);
		for(j=0;j<=19;j++)	d1_dat[j] = d1_dat[j] - 0x30;
		now_ptr->objsum_value  = d1_dat[0]*16+d1_dat[1]*8+d1_dat[2]*4+d1_dat[3]*2+d1_dat[4];
		now_ptr->point_value   = d1_dat[5]*4+d1_dat[6]*2+d1_dat[7];
		now_ptr->item_value    = d1_dat[8];
		now_ptr->enmy_value    = d1_dat[9];
		now_ptr->tama_value    = d1_dat[10]*2+d1_dat[11];
		now_ptr->clrsize_value = d1_dat[12]*2+d1_dat[13];
		now_ptr->oamset_value  = d1_dat[14]*2+d1_dat[15];
	}
	if((fgets(&pure_data, 100, fpw7))!=NULL){
		sscanf(pure_data, "%s %s %s", &d0_dat, &d1_dat, &d2_dat);
		for(j=0;j<=19;j++)	d1_dat[j] = d1_dat[j] - 0x30;
		now_ptr->attr_value   = (d1_dat[2] >= 10) ? -1: d1_dat[1]*16+d1_dat[2];
		now_ptr->flip_value   = d1_dat[5]*2+d1_dat[6];
		now_ptr->attr2_value  = d1_dat[7]*2+d1_dat[8];
		now_ptr->color_value  = d1_dat[9]*4+d1_dat[10]*2+d1_dat[11];
	}
	if((fgets(&pure_data, 100, fpw8))!=NULL){
		sscanf(pure_data, "%s %s %s", &d0_dat, &d1_dat, &d2_dat);
		strcpy(gpow_dat, d1_dat+1);
		gpow_dat[3] = '\0';
		now_ptr->gpow_value   = (char) strtol(gpow_dat, (char **)NULL, 16);

		strcpy(gmax_dat, d1_dat+6);
		gmax_dat[4] = '\0';
		now_ptr->gmax_value   = (int) strtol(gmax_dat, (char **)NULL, 16);
	}
	if((fgets(&pure_data, 100, fpw9))!=NULL){
		sscanf(pure_data, "%s %s %s", &d0_dat, &d1_dat, &d2_dat);
		if(strlen(d1_dat)==2)	now_ptr->mode7_value = 0;
		else{
			strcpy(mode7_dat, d1_dat+7);
			mode7_dat[4] = '\0';
			now_ptr->mode7_value   = (int) strtol(mode7_dat, (char **)NULL, 16);

		}
	}
}
