/* FONTX2 解析のテスト Coded by Yasuhiro ISHII(石井 康寛) */ #include #include #include #include void disp_8bit(unsigned char ); typedef struct S_FONTX_DATA { char Identifier[6]; // "FONTX2" char FontName[8]; // Font名 unsigned char XSize; unsigned char YSize; unsigned char CodeType; unsigned char Tnum; // テーブルのエントリ数 struct { unsigned short Start; // 領域の始まりの文字コード unsigned short End; // 領域の終わりの文字コード } Block[]; }; // FONTデータ用クラス class S_FONT { public: char* font_name; int width; int height; int size; // 1キャラ分のサイズ S_FONT(void); ~S_FONT(void); } sFont; /* class : S_FONT 内容 : コンストラクタ */ S_FONT::S_FONT(void){ font_name = new char [9]; width = 0; height = 0; } /* class : S_FONT 内容 : デストラクタ */ S_FONT::~S_FONT(void){ delete font_name; } int main(int argc,char **argv){ int i,j,k; const char* default_font_file = "elisa100.fon"; char* font_file; int FontStartOffset; int Tnum; unsigned char font[288]; FILE *fp; char *font_buffer = (char*)malloc(sizeof(char)*1024*1024); S_FONTX_DATA* sFontxData; int code; if (argc == 1){ puts ("デフォルトファイルを使用します。"); font_file = (char*)default_font_file; } else if (argc == 2){ font_file = argv[1]; } else { puts ("FONTX 実験ツール"); puts ("usage: fontx_ana [font name.fon]"); puts ("フォントファイル指定を省略すると、デフォルトファイルを"); puts ("参照します。"); exit(1); } sFontxData = (S_FONTX_DATA*)font_buffer; if ((fp = fopen(font_file,"rb")) == NULL){ printf ("File open error : file[%s]\n",font_file); exit(-1); } fread (font_buffer,sizeof(char),1024*1024,fp); strncpy(sFont.font_name,sFontxData->FontName,8); sFont.font_name[8] = '\0'; sFont.width = sFontxData->XSize; sFont.height = sFontxData->YSize; // 1フォントのサイズ算出 sFont.size = (sFont.width >> 3) * sFont.height; printf ("FontName : [%s]\n",sFont.font_name); printf ("フォントサイズ : %d * %d\n",sFont.width,sFont.height); printf ("(1フォント辺り%dバイトです)\n",sFont.size); Tnum = sFontxData->Tnum; printf ("Tnum = %d(%xh)\n",Tnum,Tnum); printf ("《文字コード一覧》\n"); for (i=0;i ",i,(sFontxData -> Block[i]).Start); printf ("BlockEnd%d = %x\n",i,(sFontxData -> Block[i]).End ); } FontStartOffset = 18 + Tnum * 4; printf ("FontStartOffset = %xh\n",FontStartOffset); fclose(fp); while(1){ printf ("Input offset : "); scanf ("%d",&code); for (i=0;i> 3;j++){ disp_8bit(font[(i*(sFont.width>>3)) + j]); } printf("\n"); } } } void disp_8bit(unsigned char data){ int i; for (i=0;i<8;i++){ if ((data >> (7-i)) & 0x01){ printf ("■"); } else { printf (" "); } } }