#include	<stdio.h>
#include	<stdlib.h>
#include	<string.h>

#include	"s_disk.h"


/* キャラクタデータ用構造体 */
typedef	struct
{
	short	top,x,y,pl;
} CHAR_DATA;




/* 使用法説明 */
void	usage()
{
	puts("使用法: run386 spp2ysp \"入力ファイル名\" [出力ファイル]");
	puts("");
	puts("入力ファイル名の拡張子は省略可。デフォルトは .SPP");
	puts("出力ファイル名は省略可。デフォルトは入力ファイル名の拡張子を.YSPに変えたもの");
	return;
}




int		convert(char *sppname,char *yspname)
{
	FILE	*spp,*ysp;
	short	ch,pl,pt;
	short	i;
	char	buf[128];
	CHAR_DATA	cd;
	
	spp=fopen(sppname,"wb");
	ysp=fopen(yspname,"rb");
	
	fread(&ch,2,1,ysp);		/* キャラクタ個数読みだし */
	fwrite(&ch,2,1,spp);	/* キャラクタ個数書き込み */
	fwrite(&pl,2,1,spp);	/* ダミーのパレット個数 */
	fwrite(&pt,2,1,spp);	/* ダミーのパターン個数 */
	
	/* キャラクタデータの読み書き */
	for (i=0;i<ch;i++)
	{
		fread(&cd,sizeof(CHAR_DATA),1,ysp);
		cd.pl+=32768+256;
		fwrite(&cd,sizeof(CHAR_DATA),1,spp);
	}
	
	fread(&pl,2,1,ysp);		/* パレット個数の読みだし */
	
	/* パレットデータの読み書き */
	for (i=0;i<pl;i++)
	{
		fread(buf,32,1,ysp);
		fwrite(buf,32,1,spp);
	}
	
	fread(&pt,2,1,ysp);		/* パターン個数の読みだし */
	
	/* パターンデータの読み書き */
	for (i=0;i<pt;i++)
	{
		fread(buf,128,1,ysp);
		fwrite(buf,128,1,spp);
	}
	
	/* パレット,パターン個数の書き込み */
	fseek(spp,2,SEEK_SET);
	fwrite(&pl,2,1,spp);
	fwrite(&pt,2,1,spp);
	
	return(0);
}





int		main(int argc,char **argv)
{
	char	yspname[80];
	char	sppname[80];
	char	ext[4];
	
	
	if (argc==1)
	{	usage();	exit(1);	}
	
	strcpy(yspname,argv[1]);
	DSK_tolowerFileName(yspname);
	DSK_getExtName(yspname,ext);
	if (ext[0]==0)
		DSK_changeExtName(yspname,"ysp");
	else if ( strcmp(ext,"ysp")!=0)
	{	puts("入力できるファイルはyspファイルだけですよ!");	exit(1);	}
	
	if (argc==2)
	{
		strcpy(sppname,yspname);
		DSK_changeExtName(sppname,"spp");
	}
	else if (argc==3)
	{
		strcpy(sppname,argv[2]);
		DSK_tolowerFileName(sppname);
		DSK_getExtName(yspname,ext);
		if (ext[0]==0)
			DSK_changeExtName(yspname,"spp");
		else if (strcmp(ext,"spp")!=0)
		{	puts("入力できるファイルはsppファイルだけですよ!");	exit(1);	}
	}
	
	
	convert(sppname,yspname);
	return(0);
}

