#include <string.h>
#include <stdlib.h>
#include <stdio .h>
#include <egb.h>
#include <fmcfrb.h>

#include "calc   .h"
#include "graphic.h"
#include "sound  .h"

int font_bc = 0x8000 ;

/***  •¶Žš•\Ž¦  ***/

LCARD font_pat[64*3] = {
	0x00000000,0x00000000,0x08080800,0x00080008,
	0x00502800,0x00000000,0x247E2400,0x00247E24,
	0x3C523C00,0x003C5212,0x68640000,0x004C2C10,
	0x38443800,0x003A444A,0x00100800,0x00000000,
	0x10100800,0x00081010,0x08081000,0x00100808,
	0x2A080000,0x00082A1C,0x08080000,0x0008083E,
	0x00000000,0x20100000,0x7E000000,0x00000000,
	0x00000000,0x00100000,0x08040000,0x00402010,
	0x00423C00,0x003C4242,0x00080800,0x00080808,
	0x3C023C00,0x003C4040,0x3C023C00,0x003C0202,
	0x38444400,0x00040404,0x3C403C00,0x003C0202,
	0x3C403C00,0x003C4242,0x00023C00,0x00020202,
	0x3C423C00,0x003C4242,0x3C423C00,0x003C0202,
	0x00080000,0x00000800,0x00080000,0x00100800,
	0x10080400,0x00040810,0x003C0000,0x00003C00,
	0x08102000,0x00201008,0x04423C00,0x00100018,
	0x5A423C00,0x003C425A,0x24181800,0x005E4224,
	0x7C047800,0x007C4202,0x40403E00,0x003E4040,
	0x42027C00,0x007C4242,0x7C007E00,0x007E4040,
	0x7C007E00,0x00404040,0x40403E00,0x003E404E,
	0x7E404200,0x00424202,0x08080800,0x00080808,
	0x02020200,0x003C4202,0x20584600,0x00465860,
	0x40404000,0x007E4040,0x5A664200,0x00424242,
	0x52624200,0x0042464A,0x42423C00,0x003C4242,
	0x7C027C00,0x00404040,0x42423C00,0x003A444A,
	0x7C027C00,0x00424242,0x3C403E00,0x007C0202,
	0x10007C00,0x00101010,0x42424200,0x003C4242,
	0x24424200,0x00181824,0x42424200,0x0024245A,
	0x18244200,0x00422418,0x08142200,0x00080808,
	0x08047E00,0x007E2010,0x20203800,0x00382020,
	0x3E083600,0x00083E08,0x08083800,0x00380808,
	0x24241800,0x00000000,0x00000000,0x007E0000,
	0x000C1800,0x00000000,0x44380000,0x00324444,
	0x44584000,0x00784444,0x403C0000,0x003C4040,
	0x44340400,0x003C4444,0x44380000,0x003C405C,
	0x10101800,0x00101038,0x44380000,0x38043444,
	0x44584000,0x00444444,0x08000800,0x00080808,
	0x04000400,0x00384404,0x44404000,0x005C6058,
	0x08081800,0x00080808,0x4A340000,0x004A4A4A,
	0x44580000,0x00444444,0x44380000,0x00384444,
	0x44780000,0x40405844,0x443C0000,0x04043444,
	0x504C0000,0x00404020,0x403C0000,0x00780438,
	0x3C100000,0x0C121000,0x44440000,0x00384044,
	0x44440000,0x00102828,0x42420000,0x0024245A,
	0x28440000,0x00442810,0x44440000,0x38043444,
	0x087C0000,0x007C2010,0x20201800,0x00182060,
	0x08080800,0x00080808,0x08083000,0x0030080C,
	0x00007E00,0x00000000,0x50506000,0x000E0868,
};

int put_string( int x, int y, char *p, int col )
{
	int c ;

	if( *p != '\0' ){
		for( c = 0 ; p[c] != '\0' && p[c] != '\n' ; c++ );
		box_fill( x+1, y+1, c * 8 - 1, 7, PSET, font_bc, font_bc );
	}
	for( ; *p != '\0' && *p != '\n' ; p++, x += 8 ){
		if( 0x20 <= *p && *p <= 0x7f ){
			put_dotplane( x,y, 8,8, PSET, font_pat + ( *p - 0x20 )*2, col,0 );
		}
	}
	return( y += 8 );
}

int put_string_s( int x, int y, char *p, int fc, int bc )
{
	int len ;

	len = strlen( p );
	if( 0 < len ) box_fill( x, y, len * 8, 8, PSET, font_bc, font_bc );

	for( ; *p != '\0' && *p != '\n' ; p++, x += 8 ){
		if( 0x20 <= *p && *p <= 0x7f ){
			put_dotplane( x  ,y  , 8,8, PSET, font_pat + (*p-0x20)*2, bc,0 );
			put_dotplane( x-1,y-1, 8,8, PSET, font_pat + (*p-0x20)*2, fc,0 );
		}
	}
	return( y += 8 );
}

void disp_str( int x, int y, register char *p, int col, int mode )
{
	for( ; *p != '\0' ; p++, x += 8 ){
		if( 0x20 <= *p && *p <= 0x7f ){
			put_dotplane( x,y, 8,8, mode, font_pat + ( *p - 0x20 )*2, col,0 );
		}
	}
}

void put_ch( int x, int y, int ch, int fc )
{
	box_fill( x + 1, y + 1, 6, 6, PSET, font_bc, font_bc );
	if( 0x20 <= ch && ch <= 0x7f ){
		put_dotplane( x,y, 8,8, PSET, font_pat + ( ch - 0x20 )*2, fc,0 );
	}
}
