/************************************************************************/
/*									*/
/*	af  Μ rbgμ vO				*/
/*									*/
/************************************************************************/
#include <stdio.h>

#define unchar	unsigned char

#define STATUS_NO	15	/* Xe[^XΪ	  */

#define NUKINO		0	/* kLJ[		  */
#define BG1TYP		1	/* afP^Cv		  */
#define BG1COL		2	/* afPJ[		  */
#define BG2TYP		3	/* afQXN[^Cv */
#define BG2COL		4	/* afQJ[		  */
#define BG3TYP		5	/* afR^Cv		  */
#define BG3COL		6	/* afRJ[		  */
#define OBJTYP		7	/* nai^Cv		  */
#define OBJCOL		8	/* naiJ[		  */
#define DSPMOD		9	/* ζΚ[h		  */
#define CHRTRP		10	/* L]^Cv	  */
#define COLTRP		11	/* J[]^Cv	  */
#define SCRLNO		12	/* XN[^Cv	  */
#define BGM_NO		13	/* afl mD	  */
#define CORSNO		14	/* R[XmD		  */


main()
{

	/****** ΟιΎ ******/
	FILE	*fp;
	char	fname_buf[256];
	int	n;

	/****** t@Cυ ******/
	fp = popen("ls -F *.dat","r");
	while (fgets(fname_buf, 256, fp) != NULL){
		n = strlen( fname_buf );
		fname_buf[n-1] = '\0';
		status_cnv( fname_buf );
	}
	pclose(fp);

}


/****************************************************************
*	Xe[^Xf[^Ο·					*
****************************************************************/
status_cnv( char *df_name )
{


	/****** naiJ[ΗΑpΟ·f[^ ******/
	unchar	objcol_data[32] = { 0x1,
				    0x1,
				    0x2,
				    0x3,
				    0x6,
				    0x6,
				    0x0,
				    0x8,
				    0x1,
				    0x1,
				    0x1,
				    0x1,
				    0x1,
				    0x1,
				    0x1,
				    0x1,
				    0x0,
				    0x1,
				    0x2,
				    0x3,
				    0x4,
				    0x5,
				    0x6,
				    0x7,
				    0x8,
				    0x9,
				    0xA,
				    0xB,
				    0xC,
				    0xD,
				    0xE,
				    0xF, };




	/****** ΟιΎ ******/
	unchar	old_bit_size[STATUS_NO] = { 5,	  /* kLJ[		    */
					    4,	  /* afP^Cv	    */
					    4,	  /* afPJ[	    */
					    5,	  /* afQXN[^Cv */
					    5,	  /* afQJ[	    */
					    6,	  /* afR^Cv	    */
					    5,	  /* afRJ[	    */
					    7,	  /* nai^Cv	    */
					    4,	  /* naiJ[	    */
					    5,	  /* ζΚ[h		    */
					    5,	  /* L]^Cv	    */
					    4,	  /* J[]^Cv	    */
					    4,	  /* XN[^Cv	    */
					    4,	  /* afl mD	    */
					    2, }; /* R[XmD	    */

	unchar	new_bit_size[STATUS_NO] = { 5,	  /* kLJ[		    */
					    4,	  /* afP^Cv	    */
					    5,	  /* afPJ[	    */
					    5,	  /* afQXN[^Cv */
					    6,	  /* afQJ[	    */
					    6,	  /* afR^Cv	    */
					    6,	  /* afRJ[	    */
					    7,	  /* nai^Cv	    */
					    4,	  /* naiJ[	    */
					    5,	  /* ζΚ[h		    */
					    6,	  /* L]^Cv	    */
					    5,	  /* J[]^Cv	    */
					    5,	  /* XN[^Cv	    */
					    4,	  /* afl mD	    */
					    2, }; /* R[XmD	    */

	FILE *fpr, *fpw;

	int	bgdt_size ;
	unchar	bgdt_buf[0x4000];
	unchar	bgdt_buf2[0x4000];

	unchar	status_data[STATUS_NO];

	int	old_buf_p, new_buf_p, bit_p, bit_no;
	unchar	byte_data;

	int	i, j, k, l ;

	/****** c`s t@CΗέέ ******/
	if( !( fpr = fopen( df_name,"r" ) ) ){
		printf( "can't read open (%s) !!\n", df_name );
		exit(1);
	}
	if( !(bgdt_size = fread( bgdt_buf, sizeof( unchar ), 0x4000, fpr ) ) ){
		printf( "can't read (%s) !!\n", df_name );
		exit(1);
	}
	fclose( fpr );

	/****************************************************************
	*	Xe[^Xf[^Ηέέ				*
	****************************************************************/

	old_buf_p = 0;
	bit_p	  = 0;

	for ( i=0; i<STATUS_NO; i++ ) {

		bit_no	       = old_bit_size[i];
		status_data[i] = 0;

		for ( j=0; j<bit_no; j++ ) {
			if ( bit_p <= 0 ) {
				byte_data = bgdt_buf[old_buf_p++];
				bit_p = 8;
			}
			status_data[i] <<= 1;
			if ( byte_data & 0x80 ) status_data[i]++;

			byte_data <<= 1;
			bit_p--;
		}
	}

	/********************************************************
	*	Xe[^Xf[^\¦				*
	********************************************************/
	printf("\n\ts Xe[^Xf[^ t\n");
	printf(" Η·ΆΧ-          [ %02X ]  ",status_data[NUKINO]);
	printf(" BG1ΐ²Μί        [ %02X ]\n",status_data[BG1TYP]);
	printf(" BG1ΆΧ-         [ %02X ]  ",status_data[BG1COL]);
	printf(" BG2½ΈΨ-έΐ²Μί   [ %02X ]\n",status_data[BG2TYP]);
	printf(" BG2ΆΧ-         [ %02X ]  ",status_data[BG2COL]);
	printf(" BG3ΐ²Μί        [ %02X ]\n",status_data[BG3TYP]);
	printf(" BG3ΆΧ-         [ %02X ]  ",status_data[BG3COL]);
	printf(" OBJΐ²Μί        [ %02X ]\n",status_data[OBJTYP]);
	printf(" OBJΆΧ°ί        [ %02X ]  ",status_data[OBJCOL]);
	printf(" GAMEN-MODE     [ %02X ]\n",status_data[DSPMOD]);
	printf(" CHR-TENSOΐ²Μί  [ %02X ]  ",status_data[CHRTRP]);
	printf(" COL-TENSOΐ²Μί  [ %02X ]\n",status_data[COLTRP]);
	printf(" ½ΈΫ-Ωΐ²Μί      [ %02X ]  ",status_data[SCRLNO]);
	printf(" BGM-NO.        [ %02X ]\n",status_data[BGM_NO]);
	printf(" Ί-½-NO.        [ %02X ]  ",status_data[CORSNO]);
	printf("\n");
	printf("\n");


	/****************************************************************
	*	Xe[^Xf[^ΟX					*
	****************************************************************/

	/*
	status_data[OBJCOL] = objcol_data[status_data[OBJTYP]];
	*/


	/****************************************************************
	*	VXe[^Xf[^«έ				*
	****************************************************************/

	new_buf_p = 0;
	bit_p	  = 0;

	for ( i=0; i<STATUS_NO; i++ ) {

		bit_no	       =   new_bit_size[i];
		status_data[i] <<= ( 8 - bit_no );

		for ( j=0; j<bit_no; j++ ) {
			bgdt_buf2[new_buf_p] <<= 1;
			if ( status_data[i] & 0x80 ) bgdt_buf2[new_buf_p]++;

			status_data[i] <<= 1;
			if ( ++bit_p >= 8 ) {
				new_buf_p++;
				bit_p = 0;
			}
		}
	}

	if ( bit_p != 0 ) bgdt_buf2[new_buf_p++] <<= ( 8 - bit_p );

	/********************************************************
	*	VXe[^Xf[^\¦				*
	********************************************************/
	printf("\n\ts Xe[^Xf[^ t\n");
	printf(" Η·ΆΧ-          [ %02X ]  ",status_data[NUKINO]);
	printf(" BG1ΐ²Μί        [ %02X ]\n",status_data[BG1TYP]);
	printf(" BG1ΆΧ-         [ %02X ]  ",status_data[BG1COL]);
	printf(" BG2½ΈΨ-έΐ²Μί   [ %02X ]\n",status_data[BG2TYP]);
	printf(" BG2ΆΧ-         [ %02X ]  ",status_data[BG2COL]);
	printf(" BG3ΐ²Μί        [ %02X ]\n",status_data[BG3TYP]);
	printf(" BG3ΆΧ-         [ %02X ]  ",status_data[BG3COL]);
	printf(" OBJΐ²Μί        [ %02X ]\n",status_data[OBJTYP]);
	printf(" OBJΆΧ°ί        [ %02X ]  ",status_data[OBJCOL]);
	printf(" GAMEN-MODE     [ %02X ]\n",status_data[DSPMOD]);
	printf(" CHR-TENSOΐ²Μί  [ %02X ]  ",status_data[CHRTRP]);
	printf(" COL-TENSOΐ²Μί  [ %02X ]\n",status_data[COLTRP]);
	printf(" ½ΈΫ-Ωΐ²Μί      [ %02X ]  ",status_data[SCRLNO]);
	printf(" BGM-NO.        [ %02X ]\n",status_data[BGM_NO]);
	printf(" Ί-½-NO.        [ %02X ]  ",status_data[CORSNO]);
	printf("\n");
	printf("\n");

	/****************************************************************
	*	R[Xf[^«έ					*
	****************************************************************/

	for ( i=( bgdt_size - old_buf_p); i>0; i-- ) {
		bgdt_buf2[new_buf_p++] = bgdt_buf[old_buf_p++];
	}


	if( !( fpw = fopen( df_name,"w" ) ) ){
		printf( "can't write open (%s) !!\n", df_name );
		exit(1);
	}
	if( fwrite( bgdt_buf2, sizeof( unchar ), new_buf_p, fpw ) != new_buf_p ){
		printf( "can't write (%s) !!\n", df_name );
		exit(1);
	}
	fclose( fpw );


}
