/*************************************************************************
*	ライブラリ
*************************************************************************/

#ifndef	DLGPOS_CENTER_OF_POS
	/* 指定の座標を中心に	*/
#	define	DLGPOS_CENTER_OF_POS(_p)	(0x20000+((_p)&0xFFFF))
#endif

char	StartPath[256];
int		DlgX0 = DLGPOS_CENTER_OF_POS(320);
int		DlgY0 = DLGPOS_CENTER_OF_POS(320);

/*************************************************************************
*	サイズを示す文字列を返す
*************************************************************************/

char	*getSizMsg( char *buf, unsigned int siz )
{
	static char	tmp[32];
	float		f;

	if ( buf == NULL )
		buf = tmp;

	if ( siz == 0 )
	{
		strcpy( buf, "0");
	} else if ( siz < 1024 )
	{
		sprintf( buf, "%u", siz );
	} else if ( siz < 1024*1024 )
	{
		f = siz / 1024.0;
		sprintf( buf, "%.1fK", f );
	} else
	{
		f = siz / (1024.0 * 1024.0);
		sprintf( buf, "%.1fM", f );
	}

	return (buf);
}

/*************************************************************************
*	画面
*************************************************************************/

int		dsp_init(char **msg)
{
	int		i, len, x, y;
	char	*p;

	DSP_writePage(0);
	DSP_boxf(0,24,639,463,PSET,COLMIX(5,6));

	if ( msg )
	{
		i = 0;
		while ( (p = msg[i++]) != NULL )
		{
			len = strlen(p);
			x = (640 - len * 8)/2;
			y = 32 + ((i-1) * 18);
			DSP_str(x,y,C_MBLACK,5,16,p);
		}
	}
}

int		MsgPosY = 0;
int		MsgPosX = 0;
int		MsgDtY  = 18;

int		dspmsg_home()
{
	MsgPosY = 32;
	MsgPosX = 32;
}

int		dspmsg_setpos(int x, int y,int dty)
{
	MsgPosX = x;
	MsgPosY = y;
	MsgDtY  = dty;
}

int		dspmsg_puts(char *s)
{
	int		x, y, x1, y1, x2, y2;

	DSP_writePage(0);
	x1 = MsgPosX;
	x2 = 639 - x1;
	x = x1 + 8;
	if ( MsgDtY > 16 )
		y = MsgPosY + (MsgDtY - 16 + 1) / 2;
	else
		y = MsgPosY;
	if ( MsgDtY < 20 )
	{
		y1 = y;
		y2 = y + 15;
	} else
	{
		y1 = y - 1;
		y2 = y + 16;
	}
	DSP_boxf(x1,y1,x2,y2,PSET,5);
	DSP_str(x,y,C_MBLACK,5,16,"%s", s);
	MsgPosY += MsgDtY;
}

/*************************************************************************
*	ディレクトリの作成
*************************************************************************/

int		MakeDir(char *path)
{
	char	tmp[256], *p;
	int		ret;

	if ( path[0] == '@' )
		path[0] = DrvDef + 'A';
	p = tmp + 2;
	for(;;)
	{
		FS_dos2unix(tmp,path);	/* '/' に変更	*/
		++p;
		if ( (p = strchr(p,'/')) == NULL )
			break;
		*p = '\0';
		ret = FS_isFileExist(tmp);
		if ( ret == FS_EXIST_FILE )
		{
			DSP_writePage(1);
			DLG_tmpMsgBox( DlgX0, DlgY0,
			    C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY),
			    "%s : \n    ディレクトリの作成に失敗しました。  \n  同名のファイルが存在します。 \n", tmp );
			return (ERR);	/* error */
		}
		if ( ret != FS_EXIST_DIR )
		{	/* ディレクトリ作成	*/
			FS_mkdir(tmp);
		}
	}

	FS_mkdir(path);
	if ( FS_isFileExist(path) != FS_EXIST_DIR )
	{
		DSP_writePage(1);
		DLG_tmpMsgBox( DlgX0, DlgY0,
		    C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY),
		    "%s : \n    ディレクトリの作成に失敗しました。  ", path );
		return (ERR);
	}
	return (NORMAL);
}
