00001 /************************************************************************************************** 00002 Title : FONTX2 Driver 00003 Programmer : Yosuke FURUSAWA 00004 Copyright : Copyright (C) 2010 Yosuke FURUSAWA. (Imported OpenSSM Rev.A) 00005 License : 4-clause BSD License 00006 Since : 2010/05/08 00007 00008 Filename : libfontx2.c 00009 Last up date : 2010/05/13 00010 Kanji-Code : Shift-JIS 00011 TAB Space : 4 00012 00013 Note : In this version, do not support Kanji and Font Selector. 00014 **************************************************************************************************/ 00015 00016 00017 /*================================================================================================ 00018 ヘッダファイルをインクルード 00019 =================================================================================================*/ 00020 #include "types.h" 00021 00022 #include "libfontx2.h" 00023 00024 00025 /*================================================================================================= 00026 構造体 00027 =================================================================================================*/ 00028 /* ASCIIコード用半角文字フォントのヘッダ */ 00029 typedef struct FONTX2_HEADER_ASCII { 00030 char ident[6]; 00031 char fontname[8]; 00032 00033 unsigned char width; 00034 unsigned char height; 00035 unsigned char codetype; 00036 00037 } FONTX2_HEADER_ASCII_T; 00038 typedef FONTX2_HEADER_ASCII_T* pFONTX2_HEADER_ASCII_T; 00039 00040 00041 /*================================================================================================= 00042 グローバル変数 00043 =================================================================================================*/ 00044 const unsigned char fontx2_ident[] = "FONTX2"; 00045 00046 00047 /************************************************************************************************** 00048 ***** ***** 00049 ***** 製品組み込み時には、フォントのライセンスを十分に確認すること! ***** 00050 ***** ***** 00051 **************************************************************************************************/ 00052 00053 /* 1つだけインクルードすること */ 00054 const unsigned char fontx2_ascii_data[] = { 00055 //#include "font/4x8.txt" /* 美咲フォント */ 00056 //#include "font/akagi11a.txt" /* 赤城フォント */ 00057 //#include "font/gonhn12x.txt" /* 細ゴシック体「小伝馬町12」フォント */ 00058 //#include "font/gothn12x.txt" /* 細ゴシック体「小伝馬町12」フォント2 */ 00059 //#include "font/jpnhn8x.txt" /* NEC PC-98 8dot フォント (PC-9821As2から抜きました...) */ 00060 //#include "font/jpnhn16x.txt" /* NEC PC-98 16dot フォント (PC-9821As2から抜きました...) */ 00061 //#include "font/k6x10.txt" /* k12x10 (k6x10) フォント */ 00062 //#include "font/kyohn16x.txt" /* 教科書体「人形町16」フォント */ 00063 //#include "font/noho12a.txt" /* のほ 12dot フォント */ 00064 //#include "font/noho16a.txt" /* のほ 16dot フォント */ 00065 //#include "font/mgohn16x.txt" /* 丸ゴシック体「秋葉原16」フォント */ 00066 //#include "font/minhn12x.txt" /* 太明朝体「道玄坂 12」フォント */ 00067 //#include "font/minhn14x.txt" /* 太明朝体「道玄坂 14」フォント */ 00068 //#include "font/minhn16x.txt" /* 太明朝体「道玄坂 16」フォント */ 00069 //#include "font/mplhn10.txt" /* M+ BITMAP 10dot フォント */ 00070 //#include "font/mplhn11.txt" /* M+ BITMAP 11dot フォント */ 00071 //#include "font/mplhn12.txt" /* M+ BITMAP 12dot フォント */ 00072 //#include "font/mplhn13.txt" /* M+ BITMAP 13dot フォント */ 00073 #include "font/paw16a.txt" /* ぱうフォント */ 00074 //#include "font/reihn16x.txt" /* 隷書体「八丁堀 16」フォント */ 00075 //#include "font/xbghn16x.txt" /* ファンテール「兜町 16」フォント */ 00076 }; 00077 00078 const pFONTX2_HEADER_ASCII_T fontx2_ascii = (pFONTX2_HEADER_ASCII_T)&fontx2_ascii_data; 00079 00080 00081 /************************************************************************************************** 00082 初期化 00083 **************************************************************************************************/ 00084 BOOL FONTX2_init(void) 00085 { 00086 /* 内蔵フォントデータを確認する. strcmp()相当 */ 00087 if(fontx2_ident[0] != fontx2_ascii->ident[0]) return(FALSE); 00088 if(fontx2_ident[1] != fontx2_ascii->ident[1]) return(FALSE); 00089 if(fontx2_ident[2] != fontx2_ascii->ident[2]) return(FALSE); 00090 if(fontx2_ident[3] != fontx2_ascii->ident[3]) return(FALSE); 00091 if(fontx2_ident[4] != fontx2_ascii->ident[4]) return(FALSE); 00092 if(fontx2_ident[5] != fontx2_ascii->ident[5]) return(FALSE); 00093 00094 00095 /* フォントサイズが高速化マクロの処理と合っているか確認する */ 00096 #ifdef FONT_FAST8 00097 if(FONTX2_get_ascii_width() != 8) return(FALSE); 00098 #endif 00099 00100 00101 return(TRUE); 00102 } 00103 00104 00105 /************************************************************************************************** 00106 1文字の横幅pxを取得する 00107 **************************************************************************************************/ 00108 inline unsigned char FONTX2_get_ascii_width(void) 00109 { 00110 return(fontx2_ascii->width); 00111 } 00112 inline unsigned char FONTX2_get_ascii_width_byte(void) 00113 { 00114 return((((fontx2_ascii->width - 1) >> 3) + 1)); 00115 } 00116 00117 00118 /************************************************************************************************** 00119 1文字の縦幅pxを取得する 00120 **************************************************************************************************/ 00121 inline unsigned char FONTX2_get_ascii_height(void) 00122 { 00123 return(fontx2_ascii->height); 00124 } 00125 inline unsigned char FONTX2_get_ascii_height_byte(void) 00126 { 00127 return(fontx2_ascii->height); 00128 } 00129 00130 00131 /************************************************************************************************** 00132 1文字のフォントサイズ(byte)を取得する 00133 **************************************************************************************************/ 00134 inline unsigned char FONTX2_get_ascii_size(void) 00135 { 00136 return( FONTX2_get_ascii_width_byte() * FONTX2_get_ascii_height_byte() ); 00137 } 00138 00139 00140 /************************************************************************************************** 00141 1文字のフォントデータのポインタを取得する 00142 **************************************************************************************************/ 00143 inline unsigned char *FONTX2_get_ascii_font(const unsigned char ascii) 00144 { 00145 return(&fontx2_ascii_data[ sizeof(FONTX2_HEADER_ASCII_T) 00146 + FONTX2_get_ascii_size() * ascii 00147 ]); 00148 } 00149 00150 00151 /************************************************************************************************** 00152 1文字のフォントデータのグリフを得る 00153 **************************************************************************************************/ 00154 inline unsigned char FONTX2_get_ascii_font_data(const unsigned char ascii, unsigned char x, unsigned char y) 00155 { 00156 return( fontx2_ascii_data[ sizeof(FONTX2_HEADER_ASCII_T) 00157 + FONTX2_get_ascii_size() * ascii 00158 + x 00159 + FONTX2_get_ascii_width_byte() * y 00160 ]); 00161 } 00162 00163