#include <math.h>
#include <stdio.h>

#define	unchar	unsigned char 
#define	unshort	unsigned short

#define	ON	1
#define	OFF	0

FILE *fpr0,*fpr1,*fpw0;

main()
{
	/****** ram set ******/
	char	obj_name[50][20];
	int	obj_no[50][32];
	unchar	obj_data[50][32][6][4];

	int	f_max;
	int	i,j,k,l;

	/****** sprite file name table file open ******/
	if( (fpr0=fopen("ysobj.TBL","r")) == 0 ){
		printf("can't open (ysobj.TBL) !!\n");
		exit(1);
	}

	/******	obj file convert ******/
	f_max = 0;
	while( fgets(obj_name[f_max],20,fpr0) != NULL ){

		/****** sprite file open ******/
		i=0; while( obj_name[f_max][i] != '\n' && obj_name[f_max][i] != '\0'  ) i++;
		obj_name[f_max][i] = '\0';
		strcat( obj_name[f_max],".SPR" );
		if( !(fpr1=fopen(obj_name[f_max],"r")) ){
			printf( "can't open (%s) !!\n",obj_name[f_max] );
			exit(1);
		}
		
		/******	sprite file convert ******/
		for( i=0;i<32;i++ ){
			if( obj_no[f_max][i] = (int)fgetc( fpr1 ) ){
				if( obj_no[f_max][i] > 6 ){
					printf( "OBJ data 6 over !! (%s no.=%02X)\n", obj_name[f_max],i );
					exit(1);
				}
				for( j=0;j<obj_no[f_max][i];j++ ){
					fgetc( fpr1 );							/* X pos(H) 	*/
					obj_data[f_max][i][j][1] =  fgetc( fpr1 );			/* X  " (L) 	*/
					fgetc( fpr1 );							/* Y pos(H) 	*/	
					obj_data[f_max][i][j][2] =  fgetc( fpr1 );			/* Y  " (L) 	*/
					obj_data[f_max][i][j][0] =  fgetc( fpr1 );			/* chara no.(H) */
					obj_data[f_max][i][j][3] =  fgetc( fpr1 );			/*     "    (L) */
					obj_data[f_max][i][j][0] |= fgetc( fpr1 ) & 0xc0;		/* atr data	*/
					obj_data[f_max][i][j][0] |= ( fgetc( fpr1 ) & 0x02 ) << 4;	/* size 	*/
				}
			}
		}
		f_max++;

		/******	sprite file close ******/
		fclose( fpr1 );

	}

	/******	sprite file name table file close ******/
	fclose( fpr0 );


	/******	ys_pld.h make ******/
	if( !(fpw0=fopen("../sfc/ys_pld.h","w")) ){
		printf("can't open (../ys_asm/ys_pld.h) !!\n");
		exit(1);
	}

	fprintf( fpw0,"\t\tNOLIST\n" );
	fprintf( fpw0,";\n" );
	fprintf( fpw0,";************************************************************************\n" );
	fprintf( fpw0,";*\t\t\t\t\t\t\t\t\t*\n" );
	fprintf( fpw0,";*\ttitle name\t: \"yossy\"\t\t\t\t\t*\n" );
	fprintf( fpw0,";*\tproccess\t: player pattern name\t\t\t\t*\n" );
	fprintf( fpw0,";*\tfile name\t: ys_pld.h\t\t\t\t\t*\n" );
	fprintf( fpw0,";*\t\t\t\t\t\t\t\t\t*\n" );
	fprintf( fpw0,";************************************************************************\n" );
	fprintf( fpw0,";\n" );
	fprintf( fpw0,";\n" );

	for( i=0,k=0;i<f_max;i++ ){
		obj_name[i][2] = '\0';
		for( j=0;j<32;j++ ){
			if( obj_no[i][j] ){
				fprintf( fpw0,"%s%02X\t\tEQU\t%03XH\n",obj_name[i],j,k++ );	
			}
		}
		fprintf( fpw0,";\n" );
	}
	
	fprintf( fpw0,";\n" );
	fprintf( fpw0,";\n" );
	fprintf( fpw0,";\n" );
	fprintf( fpw0,";\n" );
	fprintf( fpw0,";\n" );
	fprintf( fpw0,"\t\tLIST\n" );

	fclose( fpr0 );

	/******	ys_pldt.asm make ******/
	if( !(fpw0=fopen("../sfc/ys_pldt.asm","w")) ){
		printf("can't open (../ys_asm/ys_pldt.asm) !!\n");
		exit(1);
	}

	fprintf( fpw0,";************************************************************************\n" );
	fprintf( fpw0,";*\t\t\t\t\t\t\t\t\t*\n" );
	fprintf( fpw0,";*\ttitle name\t: \"yossy\"\t\t\t\t\t*\n" );
	fprintf( fpw0,";*\tproccess\t: player pattern data\t\t\t\t*\n" );
	fprintf( fpw0,";*\tfile name\t: ys_pldt\t\t\t\t\t*\n" );
	fprintf( fpw0,";*\t\t\t\t\t\t\t\t\t*\n" );
	fprintf( fpw0,";************************************************************************\n" );
	fprintf( fpw0,";\n" );
	fprintf( fpw0,";\n" );
	fprintf( fpw0,";\n" );
	fprintf( fpw0,";\n" );
	fprintf( fpw0,";-------------------------------------------------------------------------\n" );
	fprintf( fpw0,";-\t\tglobal symbol\t\t\t\t\t\t-\n" );
	fprintf( fpw0,";-------------------------------------------------------------------------\n" );
	fprintf( fpw0,"\t\tGLB\tCHDTNO,CHDTIN,CHYPAD\n" );
	fprintf( fpw0,";\n" );
	fprintf( fpw0,";\n" );
	fprintf( fpw0,";************************************************************************\n" );
	fprintf( fpw0,";*\t\t\t\t\t\t\t\t\t*\n" );
	fprintf( fpw0,";*\t\tdata start\t\t\t\t\t\t*\n" );
	fprintf( fpw0,";*\t\t\t\t\t\t\t\t\t*\n" );
	fprintf( fpw0,";************************************************************************\n" );
	fprintf( fpw0,";\n" );
	fprintf( fpw0,";\n" );
	fprintf( fpw0,"\t\tORG\t07E000H\n" );
	fprintf( fpw0,";\n" );
	fprintf( fpw0,";\n" );
	fprintf( fpw0,"\t\tEXTEND\n" );
	fprintf( fpw0,";\n" );
	fprintf( fpw0,";\n" );

	fprintf( fpw0,";************************************************************************\n" );
	fprintf( fpw0,";*\t\tnumber of OBJ data\t\t\t\t\t*\n" );
	fprintf( fpw0,";************************************************************************\n" );
	fprintf( fpw0,"CHDTNO\t\tEQU\t$\n" );
	for( i=0,k=0;i<f_max;i++ ){
		for( j=0;j<32;j++ ){
			if( obj_no[i][j] ){
				fprintf( fpw0,"\t\tBYTE\t%03XH\t;[%03X] \t<%s%02X>\n",obj_no[i][j],k++,obj_name[i],j );	
			}
		}
		fprintf( fpw0,";\n" );
	}

	fprintf( fpw0,";************************************************************************\n" );
	fprintf( fpw0,";*\t\tOBJ data pointer data\t\t\t\t\t*\n" );
	fprintf( fpw0,";************************************************************************\n" );
	fprintf( fpw0,"CHDTIN\t\tEQU\t$\n" );
	for( i=0,k=0,l=0;i<f_max;i++ ){
		for( j=0;j<32;j++ ){
			if( obj_no[i][j] ){
				fprintf( fpw0,"\t\tWORD\t%05XH\t;[%03X] \t<%s%02X>\n",l,k++,obj_name[i],j );
				l += obj_no[i][j] * 4;
			}
		}
		fprintf( fpw0,";\n" );
	}

	fprintf( fpw0,";************************************************************************\n" );
	fprintf( fpw0,";*\t\tOBJ data\t\t\t\t\t\t*\n" );
	fprintf( fpw0,";************************************************************************\n" );
	fprintf( fpw0,"CHYPAD\t\tEQU\t$\n" );
	for( i=0,k=0;i<f_max;i++ ){
		for( j=0;j<32;j++ ){
			if( obj_no[i][j] ){
				for( l=0;l<obj_no[i][j];l++ ){
					fprintf( fpw0,"\t\tBYTE\t" );
					fprintf( fpw0, "%03XH",obj_data[i][j][l][0] );
					fprintf( fpw0,",%03XH",obj_data[i][j][l][1] );
					fprintf( fpw0,",%03XH",obj_data[i][j][l][2] );
					fprintf( fpw0,",%03XH",obj_data[i][j][l][3] );
					if( !l ) fprintf( fpw0,"\t;[%03X] \t<%s%02X>",k++,obj_name[i],j );
					fprintf( fpw0,"\n" );
				}
				fprintf( fpw0,";\n" );
			}
		}
		fprintf( fpw0,";\n" );
	}

	fprintf( fpw0,";\n" );
	fprintf( fpw0,";\n" );
	fprintf( fpw0,";\n" );
	fprintf( fpw0,";\n" );
	fprintf( fpw0,";\n" );
	fprintf( fpw0,"\t\tEND\n" );

}
