/************************************************************************
*									*
*	スクリーンファイル分割						*
*									*
************************************************************************/

#include <stdio.h>

#define unchar	unsigned char
#define unshort unsigned short

#define ON	1
#define OFF	0

FILE *fpr,*fpw;

void	scrcnv( char *, int, char * );

void main( int argc, char **argv )
{

	/****** 変数宣言 ******/
	char	SCR_name[100];
	int	sel_no;
	char	scr_name[100];

	/****** 引数チェック ******/
	if ( argc != 4 ) {
		printf( "Usage: ys_scrcnv (SCR_file) (Sel No.) (Output File)\n" );
		exit(1);
	}
	sel_no = atoi( argv[2] );
	if ( sel_no < 0 || sel_no > 3 ) {
		printf( "Sel No. Error !! ( 0-3 )\n" );
	}

	/****** スクリーンファイルＯＰＥＮ ******/
	strcpy( SCR_name, argv[1] );
	strcat( SCR_name, ".SCR" );
	if ( !(fpr = fopen( SCR_name,"r" )) ) {
		printf( "can't read open (%s) !!\n", SCR_name );
		exit(1);
	}
	/****** 出力ファイルＯＰＥＮ ******/
	strcpy( scr_name, argv[3] );
	strcat( scr_name, ".scr" );
	if ( !(fpw = fopen( scr_name,"w" )) ) {
		printf( "can't read open (%s) !!\n", scr_name );
		exit(1);
	}

	/****** スクリーンデータ変換 ******/
	scrcnv( SCR_name, sel_no, scr_name );


	/****** ファイルＣＬＯＳＥ ******/
	fclose( fpw );

}

/****************************************************************
*	スクリーンデータ変換					*
****************************************************************/
void scrcnv( char *SCR_name, int sel_no, char *scr_name )
{

	/****** 変数宣言 ******/
	unchar	SCR_buf[0x3000];
	unchar	scr_buf[0x800];
	int	scr_p;
	int	sel_pt;

	int	i, j, k, l;

	/****** スクリーンファイル読み込み ******/
	if ( fread( SCR_buf, sizeof( unchar ), 0x3000, fpr ) < 0x2000 ){
		printf( "can't read (%s) !!\n", SCR_name );
		exit(1);
	}
	fclose( fpr );

	/****** スクリーンデータ分割 ******/
	sel_pt = sel_no * 0x800;

	scr_p = 0;
	for ( i=sel_pt; i<sel_pt+(32*32*2); i+=(32*16*2) ) {
		for ( j=i; j<i+(32*2); j+=(16*2) ) {
			for ( k=j; k<j+(32*16*2); k+=32*2 ) {
				for ( l=k; l<k+(16*2); l++ ) {
					scr_buf[scr_p++] = SCR_buf[l];
				}
			}
		}
	}

	/****** 出力ファイル書き込み ******/
	if( fwrite( scr_buf, sizeof( unchar ), 0x800, fpw ) != 0x800 ){
		printf( "can't write (%s) !!\n", scr_name );
		exit(1);
	}

}
