/**************************************************************************
	ファイル内容をドットーデータとして読み込み画面表示します．
	GNU C を使用しています.
****************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <string.h>	
#include <math.h>

int main(int argc, char *argv[])
{
struct stat 	*stbuf;
FILE		    *fp;
int				xdot,ydot,startx,starty,endx,endy;
int				num,li;
char			*buf,work[1540];

	if( argc < 2 ) 	{ printf(" run386 -nocrt rantif filename [ mono ] \n");
					  return(1);}

	stat( argv[1], stbuf);
	printf(" ファイルサイズは %iバイトです．\n",li=stbuf->st_size );

	if( li>153600 ) li=153600;
	if( li>=115200 ) 
		{ 
		  xdot=li/240; 				ydot=480; 
		  startx=(640-xdot)/2;		
		  starty=0;					
	}else 
		{ 
		  xdot=ydot=(int)sqrt( (double)(li*2) ); 
		  startx=80+(480-xdot)/2;	
		  starty=(480-ydot)/2;
		}  
	endx=startx+xdot;
	endy=starty+ydot;

	if( (buf=(char *)calloc( li,sizeof(char) ))==NULL )	
		{ printf("メモリ確保失敗\n"); return(1);}
	if( (fp=fopen( argv[1],"rb")) == NULL )
		{ printf("ファイルオープン失敗\n"); free(buf); return(1);}

	EGB_init(work,1536);

	if( strcmp( argv[2],"mono" )==0 )
	{	for(num=0; num<16; num++)	
		{
			EGB_setPalette( work,num, 17*num, 17*num, 17*num );	
		}
	}

	if( fread(buf,li,1,fp) < 1 )
		{printf("ファイル読み込み失敗\n"); free(buf); fclose(fp); return(-1);}

	EGB_putRect(work,0,buf,startx,starty,endx,endy);
	fclose(fp);
	free(buf);
}
