00001 /************************************************************************************************** 00002 Title : FONTX2 Driver 00003 Programmer : Yosuke FURUSAWA 00004 Copyright : Copyright (C) 2010 Yosuke FURUSAWA. 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 #include "font/shnhn16.txt" /* 東雲フォント */ 00077 //#include "font/8x16rk.txt" /* X11フォント */ 00078 }; 00079 00080 const pFONTX2_HEADER_ASCII_T fontx2_ascii = (pFONTX2_HEADER_ASCII_T)&fontx2_ascii_data; 00081 00082 00083 /************************************************************************************************** 00084 初期化 00085 **************************************************************************************************/ 00086 BOOL FONTX2_init(void) 00087 { 00088 /* 内蔵フォントデータを確認する. strcmp()相当 */ 00089 if(fontx2_ident[0] != fontx2_ascii->ident[0]) return(FALSE); 00090 if(fontx2_ident[1] != fontx2_ascii->ident[1]) return(FALSE); 00091 if(fontx2_ident[2] != fontx2_ascii->ident[2]) return(FALSE); 00092 if(fontx2_ident[3] != fontx2_ascii->ident[3]) return(FALSE); 00093 if(fontx2_ident[4] != fontx2_ascii->ident[4]) return(FALSE); 00094 if(fontx2_ident[5] != fontx2_ascii->ident[5]) return(FALSE); 00095 00096 00097 /* フォントサイズが高速化マクロの処理と合っているか確認する */ 00098 #ifdef FONT_FAST8 00099 if(FONTX2_get_ascii_width() != 8) return(FALSE); 00100 #endif 00101 00102 00103 return(TRUE); 00104 } 00105 00106 00107 /************************************************************************************************** 00108 1文字の横幅pxを取得する 00109 **************************************************************************************************/ 00110 unsigned char FONTX2_get_ascii_width(void) 00111 { 00112 return(fontx2_ascii->width); 00113 } 00114 unsigned char FONTX2_get_ascii_width_byte(void) 00115 { 00116 return((((fontx2_ascii->width - 1) >> 3) + 1)); 00117 } 00118 00119 00120 /************************************************************************************************** 00121 1文字の縦幅pxを取得する 00122 **************************************************************************************************/ 00123 unsigned char FONTX2_get_ascii_height(void) 00124 { 00125 return(fontx2_ascii->height); 00126 } 00127 unsigned char FONTX2_get_ascii_height_byte(void) 00128 { 00129 return(fontx2_ascii->height); 00130 } 00131 00132 00133 /************************************************************************************************** 00134 1文字のフォントサイズ(byte)を取得する 00135 **************************************************************************************************/ 00136 unsigned char FONTX2_get_ascii_size(void) 00137 { 00138 return( FONTX2_get_ascii_width_byte() * FONTX2_get_ascii_height_byte() ); 00139 } 00140 00141 00142 /************************************************************************************************** 00143 1文字のフォントデータのポインタを取得する 00144 **************************************************************************************************/ 00145 unsigned char *FONTX2_get_ascii_font(const unsigned char ascii) 00146 { 00147 return(&fontx2_ascii_data[ sizeof(FONTX2_HEADER_ASCII_T) 00148 + FONTX2_get_ascii_size() * ascii 00149 ]); 00150 } 00151 00152 00153 /************************************************************************************************** 00154 1文字のフォントデータのグリフを得る 00155 **************************************************************************************************/ 00156 unsigned char FONTX2_get_ascii_font_data(const unsigned char ascii, unsigned char x, unsigned char y) 00157 { 00158 return( fontx2_ascii_data[ sizeof(FONTX2_HEADER_ASCII_T) 00159 + FONTX2_get_ascii_size() * ascii 00160 + x 00161 + FONTX2_get_ascii_width_byte() * y 00162 ]); 00163 } 00164 00165