要顯示字符了,本着一切從簡的原則,採用點陣字:一是簡單,二是字庫免費,三是速度快。數組
把每個字符都當作是一個大方塊圖形,把這個大方塊看做是若干足夠小的小方塊拼起來的,把每一個小方塊看作一個像素點。字符中每一個空白的像素點就用一個空白小方塊表示,每個字符佔用的像素點就用一個有色小方塊表示,把所有小方塊都畫出來,就是點陣字了。點陣字體就是由一個二進制的二維數組組成的,數組中每個元素(就是一個比特位))值表明一個小方塊:0 表明空白,1 表明有色。按照這個數組的行列排列,把數組中每一個元素的值按照 0 空白、1 着色做爲一個像素點,所有畫出來,就顯示成一個點陣字了。編輯器
下面這個就是個點陣字:測試
放到電腦顯示器上是這樣的:字體
先不考慮漢字,先把鍵盤上的字符都實現了再說。實際的 ASCII 字符的點陣字庫都是按照 ASCII 編碼的順序排列,即從 0 到 255,咱們先截取可打印字符出來試驗下。可打印字符從空格開始,到 ~ 結束,對應 ASCII 碼就是從 0x20 到 0x7E。編碼
具體制做字庫的步驟:spa
一、找到須要的點陣字庫(我用的 ASCII16);code
二、用能 16 進制顯示的編輯器打開,選中可打印字符部分(對應文件偏移就是 0x200 到 0x7E0):orm
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。it
三、以 16 進制視圖複製粘貼到新文件中,而後去頭去尾(列模式):io
四、每一個數字前面加個 0x,數字間加逗號(搜索替換):
五、把這些數放到一個數組裏面,造成一個專門的字庫了。下面代碼裏的數組就是了。
六、來測試下效果:
#include <stdio.h> // 寬 八、高 16 的 ASCII 可打印字符點陣字庫(從空格開始,共 95 個),按照 ASCII 編碼順序 unsigned char FontASCII_8X16[] = { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // 空格 0x00,0x00,0x18,0x3C,0x3C,0x3C,0x18,0x18,0x18,0x00,0x18,0x18,0x00,0x00,0x00,0x00, // ! 0x00,0x63,0x63,0x63,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // " 0x00,0x00,0x00,0x36,0x36,0x7F,0x36,0x36,0x36,0x7F,0x36,0x36,0x00,0x00,0x00,0x00, // # 0x0C,0x0C,0x3E,0x63,0x61,0x60,0x3E,0x03,0x03,0x43,0x63,0x3E,0x0C,0x0C,0x00,0x00, // $ 0x00,0x00,0x00,0x00,0x00,0x61,0x63,0x06,0x0C,0x18,0x33,0x63,0x00,0x00,0x00,0x00, // % 0x00,0x00,0x00,0x1C,0x36,0x36,0x1C,0x3B,0x6E,0x66,0x66,0x3B,0x00,0x00,0x00,0x00, // & 0x00,0x30,0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ' 0x00,0x00,0x0C,0x18,0x18,0x30,0x30,0x30,0x30,0x18,0x18,0x0C,0x00,0x00,0x00,0x00, // ( 0x00,0x00,0x18,0x0C,0x0C,0x06,0x06,0x06,0x06,0x0C,0x0C,0x18,0x00,0x00,0x00,0x00, // ) 0x00,0x00,0x00,0x00,0x42,0x66,0x3C,0xFF,0x3C,0x66,0x42,0x00,0x00,0x00,0x00,0x00, // * 0x00,0x00,0x00,0x00,0x18,0x18,0x18,0xFF,0x18,0x18,0x18,0x00,0x00,0x00,0x00,0x00, // + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x18,0x30,0x00,0x00, // , 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00, // . 0x00,0x00,0x01,0x03,0x07,0x0E,0x1C,0x38,0x70,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00, // 0x00,0x00,0x3E,0x63,0x63,0x63,0x6B,0x6B,0x63,0x63,0x63,0x3E,0x00,0x00,0x00,0x00, // 0 0x00,0x00,0x0C,0x1C,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3F,0x00,0x00,0x00,0x00, // 1 0x00,0x00,0x3E,0x63,0x03,0x06,0x0C,0x18,0x30,0x61,0x63,0x7F,0x00,0x00,0x00,0x00, // 2 0x00,0x00,0x3E,0x63,0x03,0x03,0x1E,0x03,0x03,0x03,0x63,0x3E,0x00,0x00,0x00,0x00, // 3 0x00,0x00,0x06,0x0E,0x1E,0x36,0x66,0x66,0x7F,0x06,0x06,0x0F,0x00,0x00,0x00,0x00, // 4 0x00,0x00,0x7F,0x60,0x60,0x60,0x7E,0x03,0x03,0x63,0x73,0x3E,0x00,0x00,0x00,0x00, // 5 0x00,0x00,0x1C,0x30,0x60,0x60,0x7E,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,0x00,0x00, // 6 0x00,0x00,0x7F,0x63,0x03,0x06,0x06,0x0C,0x0C,0x18,0x18,0x18,0x00,0x00,0x00,0x00, // 7 0x00,0x00,0x3E,0x63,0x63,0x63,0x3E,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,0x00,0x00, // 8 0x00,0x00,0x3E,0x63,0x63,0x63,0x63,0x3F,0x03,0x03,0x06,0x3C,0x00,0x00,0x00,0x00, // 9 0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00, // : 0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x18,0x18,0x18,0x30,0x00,0x00, // ; 0x00,0x00,0x00,0x06,0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x06,0x00,0x00,0x00,0x00, // < 0x00,0x00,0x00,0x00,0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00,0x00,0x00,0x00,0x00, // = 0x00,0x00,0x00,0x60,0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x60,0x00,0x00,0x00,0x00, // > 0x00,0x00,0x3E,0x63,0x63,0x06,0x0C,0x0C,0x0C,0x00,0x0C,0x0C,0x00,0x00,0x00,0x00, // ? 0x00,0x00,0x3E,0x63,0x63,0x6F,0x6B,0x6B,0x6E,0x60,0x60,0x3E,0x00,0x00,0x00,0x00, // @ 0x00,0x00,0x08,0x1C,0x36,0x63,0x63,0x63,0x7F,0x63,0x63,0x63,0x00,0x00,0x00,0x00, // A 0x00,0x00,0x7E,0x33,0x33,0x33,0x3E,0x33,0x33,0x33,0x33,0x7E,0x00,0x00,0x00,0x00, // B 0x00,0x00,0x1E,0x33,0x61,0x60,0x60,0x60,0x60,0x61,0x33,0x1E,0x00,0x00,0x00,0x00, // C 0x00,0x00,0x7C,0x36,0x33,0x33,0x33,0x33,0x33,0x33,0x36,0x7C,0x00,0x00,0x00,0x00, // D 0x00,0x00,0x7F,0x33,0x31,0x34,0x3C,0x34,0x30,0x31,0x33,0x7F,0x00,0x00,0x00,0x00, // E 0x00,0x00,0x7F,0x33,0x31,0x34,0x3C,0x34,0x30,0x30,0x30,0x78,0x00,0x00,0x00,0x00, // F 0x00,0x00,0x1E,0x33,0x61,0x60,0x60,0x6F,0x63,0x63,0x37,0x1D,0x00,0x00,0x00,0x00, // G 0x00,0x00,0x63,0x63,0x63,0x63,0x7F,0x63,0x63,0x63,0x63,0x63,0x00,0x00,0x00,0x00, // H 0x00,0x00,0x3C,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, // I 0x00,0x00,0x0F,0x06,0x06,0x06,0x06,0x06,0x06,0x66,0x66,0x3C,0x00,0x00,0x00,0x00, // J 0x00,0x00,0x73,0x33,0x36,0x36,0x3C,0x36,0x36,0x33,0x33,0x73,0x00,0x00,0x00,0x00, // K 0x00,0x00,0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x33,0x7F,0x00,0x00,0x00,0x00, // L 0x00,0x00,0x63,0x77,0x7F,0x6B,0x63,0x63,0x63,0x63,0x63,0x63,0x00,0x00,0x00,0x00, // M 0x00,0x00,0x63,0x63,0x73,0x7B,0x7F,0x6F,0x67,0x63,0x63,0x63,0x00,0x00,0x00,0x00, // N 0x00,0x00,0x1C,0x36,0x63,0x63,0x63,0x63,0x63,0x63,0x36,0x1C,0x00,0x00,0x00,0x00, // O 0x00,0x00,0x7E,0x33,0x33,0x33,0x3E,0x30,0x30,0x30,0x30,0x78,0x00,0x00,0x00,0x00, // P 0x00,0x00,0x3E,0x63,0x63,0x63,0x63,0x63,0x63,0x6B,0x6F,0x3E,0x06,0x07,0x00,0x00, // Q 0x00,0x00,0x7E,0x33,0x33,0x33,0x3E,0x36,0x36,0x33,0x33,0x73,0x00,0x00,0x00,0x00, // R 0x00,0x00,0x3E,0x63,0x63,0x30,0x1C,0x06,0x03,0x63,0x63,0x3E,0x00,0x00,0x00,0x00, // S 0x00,0x00,0xFF,0xDB,0x99,0x18,0x18,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, // T 0x00,0x00,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,0x00,0x00, // U 0x00,0x00,0x63,0x63,0x63,0x63,0x63,0x63,0x63,0x36,0x1C,0x08,0x00,0x00,0x00,0x00, // V 0x00,0x00,0x63,0x63,0x63,0x63,0x63,0x6B,0x6B,0x7F,0x36,0x36,0x00,0x00,0x00,0x00, // W 0x00,0x00,0xC3,0xC3,0x66,0x3C,0x18,0x18,0x3C,0x66,0xC3,0xC3,0x00,0x00,0x00,0x00, // X 0x00,0x00,0xC3,0xC3,0xC3,0x66,0x3C,0x18,0x18,0x18,0x18,0x3C,0x00,0x00,0x00,0x00, // Y 0x00,0x00,0x7F,0x63,0x43,0x06,0x0C,0x18,0x30,0x61,0x63,0x7F,0x00,0x00,0x00,0x00, // Z 0x00,0x00,0x3C,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x3C,0x00,0x00,0x00,0x00, // [ 0x00,0x00,0x80,0xC0,0xE0,0x70,0x38,0x1C,0x0E,0x07,0x03,0x01,0x00,0x00,0x00,0x00, // / 0x00,0x00,0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00,0x00,0x00,0x00, // ] 0x08,0x1C,0x36,0x63,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ^ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00, // _ 0x18,0x18,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ` 0x00,0x00,0x00,0x00,0x00,0x3C,0x46,0x06,0x3E,0x66,0x66,0x3B,0x00,0x00,0x00,0x00, // a 0x00,0x00,0x70,0x30,0x30,0x3C,0x36,0x33,0x33,0x33,0x33,0x6E,0x00,0x00,0x00,0x00, // b 0x00,0x00,0x00,0x00,0x00,0x3E,0x63,0x60,0x60,0x60,0x63,0x3E,0x00,0x00,0x00,0x00, // c 0x00,0x00,0x0E,0x06,0x06,0x1E,0x36,0x66,0x66,0x66,0x66,0x3B,0x00,0x00,0x00,0x00, // d 0x00,0x00,0x00,0x00,0x00,0x3E,0x63,0x63,0x7E,0x60,0x63,0x3E,0x00,0x00,0x00,0x00, // e 0x00,0x00,0x1C,0x36,0x32,0x30,0x7C,0x30,0x30,0x30,0x30,0x78,0x00,0x00,0x00,0x00, // f 0x00,0x00,0x00,0x00,0x00,0x3B,0x66,0x66,0x66,0x66,0x3E,0x06,0x66,0x3C,0x00,0x00, // g 0x00,0x00,0x70,0x30,0x30,0x36,0x3B,0x33,0x33,0x33,0x33,0x73,0x00,0x00,0x00,0x00, // h 0x00,0x00,0x0C,0x0C,0x00,0x1C,0x0C,0x0C,0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00,0x00, // i 0x00,0x00,0x06,0x06,0x00,0x0E,0x06,0x06,0x06,0x06,0x06,0x66,0x66,0x3C,0x00,0x00, // j 0x00,0x00,0x70,0x30,0x30,0x33,0x33,0x36,0x3C,0x36,0x33,0x73,0x00,0x00,0x00,0x00, // k 0x00,0x00,0x1C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00,0x00, // l 0x00,0x00,0x00,0x00,0x00,0x6E,0x7F,0x6B,0x6B,0x6B,0x6B,0x6B,0x00,0x00,0x00,0x00, // m 0x00,0x00,0x00,0x00,0x00,0x6E,0x33,0x33,0x33,0x33,0x33,0x33,0x00,0x00,0x00,0x00, // n 0x00,0x00,0x00,0x00,0x00,0x3E,0x63,0x63,0x63,0x63,0x63,0x3E,0x00,0x00,0x00,0x00, // o 0x00,0x00,0x00,0x00,0x00,0x6E,0x33,0x33,0x33,0x33,0x3E,0x30,0x30,0x78,0x00,0x00, // p 0x00,0x00,0x00,0x00,0x00,0x3B,0x66,0x66,0x66,0x66,0x3E,0x06,0x06,0x0F,0x00,0x00, // q 0x00,0x00,0x00,0x00,0x00,0x6E,0x3B,0x33,0x30,0x30,0x30,0x78,0x00,0x00,0x00,0x00, // r 0x00,0x00,0x00,0x00,0x00,0x3E,0x63,0x38,0x0E,0x03,0x63,0x3E,0x00,0x00,0x00,0x00, // s 0x00,0x00,0x08,0x18,0x18,0x7E,0x18,0x18,0x18,0x18,0x1B,0x0E,0x00,0x00,0x00,0x00, // t 0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x3B,0x00,0x00,0x00,0x00, // u 0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x36,0x36,0x1C,0x1C,0x08,0x00,0x00,0x00,0x00, // v 0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x63,0x6B,0x6B,0x7F,0x36,0x00,0x00,0x00,0x00, // w 0x00,0x00,0x00,0x00,0x00,0x63,0x36,0x1C,0x1C,0x1C,0x36,0x63,0x00,0x00,0x00,0x00, // x 0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x63,0x63,0x63,0x3F,0x03,0x06,0x3C,0x00,0x00, // y 0x00,0x00,0x00,0x00,0x00,0x7F,0x66,0x0C,0x18,0x30,0x63,0x7F,0x00,0x00,0x00,0x00, // z 0x00,0x00,0x0E,0x18,0x18,0x18,0x70,0x18,0x18,0x18,0x18,0x0E,0x00,0x00,0x00,0x00, // { 0x00,0x00,0x18,0x18,0x18,0x18,0x18,0x00,0x18,0x18,0x18,0x18,0x18,0x00,0x00,0x00, // | 0x00,0x00,0x70,0x18,0x18,0x18,0x0E,0x18,0x18,0x18,0x18,0x70,0x00,0x00,0x00,0x00, // } 0x00,0x00,0x76,0xDC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ~ }; void putc_8X16(char ch) { int i, j, k; k = 16 * (ch - ' '); // 在字庫中的偏移 for(i = 0; i < 16; i++) { for(j = 0; j < 8; j++) if(FontASCII_8X16[k + i] & (1 << (7 - j))) printf("*"); else printf("."); printf("\n"); } } void main() { unsigned char i; for (i = ' '; i <= '~'; i++) { printf("\nchar = %c\n", i); putc_8X16(i); } }
顯示效果是這樣的
char = ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ char = ! ........ ........ ...**... ..****.. ..****.. ..****.. ...**... ...**... ...**... ........ ...**... ...**... ........ ........ ........ ........ char = " ........ .**...** .**...** .**...** ..*...*. ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ char = # ........ ........ ........ ..**.**. ..**.**. .******* ..**.**. ..**.**. ..**.**. .******* ..**.**. ..**.**. ........ ........ ........ ........ char = $ ....**.. ....**.. ..*****. .**...** .**....* .**..... ..*****. ......** ......** .*....** .**...** ..*****. ....**.. ....**.. ........ ........ char = % ........ ........ ........ ........ ........ .**....* .**...** .....**. ....**.. ...**... ..**..** .**...** ........ ........ ........ ........ char = & ........ ........ ........ ...***.. ..**.**. ..**.**. ...***.. ..***.** .**.***. .**..**. .**..**. ..***.** ........ ........ ........ ........ char = ' ........ ..**.... ..**.... ..**.... .**..... ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ char = ( ........ ........ ....**.. ...**... ...**... ..**.... ..**.... ..**.... ..**.... ...**... ...**... ....**.. ........ ........ ........ ........ char = ) ........ ........ ...**... ....**.. ....**.. .....**. .....**. .....**. .....**. ....**.. ....**.. ...**... ........ ........ ........ ........ char = * ........ ........ ........ ........ .*....*. .**..**. ..****.. ******** ..****.. .**..**. .*....*. ........ ........ ........ ........ ........ char = + ........ ........ ........ ........ ...**... ...**... ...**... ******** ...**... ...**... ...**... ........ ........ ........ ........ ........ char = , ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ...**... ...**... ...**... ..**.... ........ ........ char = - ........ ........ ........ ........ ........ ........ ........ ******** ........ ........ ........ ........ ........ ........ ........ ........ char = . ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ...**... ...**... ........ ........ ........ ........ char = / ........ ........ .......* ......** .....*** ....***. ...***.. ..***... .***.... ***..... **...... *....... ........ ........ ........ ........ char = 0 ........ ........ ..*****. .**...** .**...** .**...** .**.*.** .**.*.** .**...** .**...** .**...** ..*****. ........ ........ ........ ........ char = 1 ........ ........ ....**.. ...***.. ..****.. ....**.. ....**.. ....**.. ....**.. ....**.. ....**.. ..****** ........ ........ ........ ........ char = 2 ........ ........ ..*****. .**...** ......** .....**. ....**.. ...**... ..**.... .**....* .**...** .******* ........ ........ ........ ........ char = 3 ........ ........ ..*****. .**...** ......** ......** ...****. ......** ......** ......** .**...** ..*****. ........ ........ ........ ........ char = 4 ........ ........ .....**. ....***. ...****. ..**.**. .**..**. .**..**. .******* .....**. .....**. ....**** ........ ........ ........ ........ char = 5 ........ ........ .******* .**..... .**..... .**..... .******. ......** ......** .**...** .***..** ..*****. ........ ........ ........ ........ char = 6 ........ ........ ...***.. ..**.... .**..... .**..... .******. .**...** .**...** .**...** .**...** ..*****. ........ ........ ........ ........ char = 7 ........ ........ .******* .**...** ......** .....**. .....**. ....**.. ....**.. ...**... ...**... ...**... ........ ........ ........ ........ char = 8 ........ ........ ..*****. .**...** .**...** .**...** ..*****. .**...** .**...** .**...** .**...** ..*****. ........ ........ ........ ........ char = 9 ........ ........ ..*****. .**...** .**...** .**...** .**...** ..****** ......** ......** .....**. ..****.. ........ ........ ........ ........ char = : ........ ........ ........ ........ ........ ...**... ...**... ........ ........ ........ ...**... ...**... ........ ........ ........ ........ char = ; ........ ........ ........ ........ ........ ...**... ...**... ........ ........ ........ ...**... ...**... ...**... ..**.... ........ ........ char = < ........ ........ ........ .....**. ....**.. ...**... ..**.... .**..... ..**.... ...**... ....**.. .....**. ........ ........ ........ ........ char = = ........ ........ ........ ........ ........ ........ .******. ........ ........ .******. ........ ........ ........ ........ ........ ........ char = > ........ ........ ........ .**..... ..**.... ...**... ....**.. .....**. ....**.. ...**... ..**.... .**..... ........ ........ ........ ........ char = ? ........ ........ ..*****. .**...** .**...** .....**. ....**.. ....**.. ....**.. ........ ....**.. ....**.. ........ ........ ........ ........ char = @ ........ ........ ..*****. .**...** .**...** .**.**** .**.*.** .**.*.** .**.***. .**..... .**..... ..*****. ........ ........ ........ ........ char = A ........ ........ ....*... ...***.. ..**.**. .**...** .**...** .**...** .******* .**...** .**...** .**...** ........ ........ ........ ........ char = B ........ ........ .******. ..**..** ..**..** ..**..** ..*****. ..**..** ..**..** ..**..** ..**..** .******. ........ ........ ........ ........ char = C ........ ........ ...****. ..**..** .**....* .**..... .**..... .**..... .**..... .**....* ..**..** ...****. ........ ........ ........ ........ char = D ........ ........ .*****.. ..**.**. ..**..** ..**..** ..**..** ..**..** ..**..** ..**..** ..**.**. .*****.. ........ ........ ........ ........ char = E ........ ........ .******* ..**..** ..**...* ..**.*.. ..****.. ..**.*.. ..**.... ..**...* ..**..** .******* ........ ........ ........ ........ char = F ........ ........ .******* ..**..** ..**...* ..**.*.. ..****.. ..**.*.. ..**.... ..**.... ..**.... .****... ........ ........ ........ ........ char = G ........ ........ ...****. ..**..** .**....* .**..... .**..... .**.**** .**...** .**...** ..**.*** ...***.* ........ ........ ........ ........ char = H ........ ........ .**...** .**...** .**...** .**...** .******* .**...** .**...** .**...** .**...** .**...** ........ ........ ........ ........ char = I ........ ........ ..****.. ...**... ...**... ...**... ...**... ...**... ...**... ...**... ...**... ..****.. ........ ........ ........ ........ char = J ........ ........ ....**** .....**. .....**. .....**. .....**. .....**. .....**. .**..**. .**..**. ..****.. ........ ........ ........ ........ char = K ........ ........ .***..** ..**..** ..**.**. ..**.**. ..****.. ..**.**. ..**.**. ..**..** ..**..** .***..** ........ ........ ........ ........ char = L ........ ........ .****... ..**.... ..**.... ..**.... ..**.... ..**.... ..**.... ..**...* ..**..** .******* ........ ........ ........ ........ char = M ........ ........ .**...** .***.*** .******* .**.*.** .**...** .**...** .**...** .**...** .**...** .**...** ........ ........ ........ ........ char = N ........ ........ .**...** .**...** .***..** .****.** .******* .**.**** .**..*** .**...** .**...** .**...** ........ ........ ........ ........ char = O ........ ........ ...***.. ..**.**. .**...** .**...** .**...** .**...** .**...** .**...** ..**.**. ...***.. ........ ........ ........ ........ char = P ........ ........ .******. ..**..** ..**..** ..**..** ..*****. ..**.... ..**.... ..**.... ..**.... .****... ........ ........ ........ ........ char = Q ........ ........ ..*****. .**...** .**...** .**...** .**...** .**...** .**...** .**.*.** .**.**** ..*****. .....**. .....*** ........ ........ char = R ........ ........ .******. ..**..** ..**..** ..**..** ..*****. ..**.**. ..**.**. ..**..** ..**..** .***..** ........ ........ ........ ........ char = S ........ ........ ..*****. .**...** .**...** ..**.... ...***.. .....**. ......** .**...** .**...** ..*****. ........ ........ ........ ........ char = T ........ ........ ******** **.**.** *..**..* ...**... ...**... ...**... ...**... ...**... ...**... ..****.. ........ ........ ........ ........ char = U ........ ........ .**...** .**...** .**...** .**...** .**...** .**...** .**...** .**...** .**...** ..*****. ........ ........ ........ ........ char = V ........ ........ .**...** .**...** .**...** .**...** .**...** .**...** .**...** ..**.**. ...***.. ....*... ........ ........ ........ ........ char = W ........ ........ .**...** .**...** .**...** .**...** .**...** .**.*.** .**.*.** .******* ..**.**. ..**.**. ........ ........ ........ ........ char = X ........ ........ **....** **....** .**..**. ..****.. ...**... ...**... ..****.. .**..**. **....** **....** ........ ........ ........ ........ char = Y ........ ........ **....** **....** **....** .**..**. ..****.. ...**... ...**... ...**... ...**... ..****.. ........ ........ ........ ........ char = Z ........ ........ .******* .**...** .*....** .....**. ....**.. ...**... ..**.... .**....* .**...** .******* ........ ........ ........ ........ char = [ ........ ........ ..****.. ..**.... ..**.... ..**.... ..**.... ..**.... ..**.... ..**.... ..**.... ..****.. ........ ........ ........ ........ char = \ ........ ........ *....... **...... ***..... .***.... ..***... ...***.. ....***. .....*** ......** .......* ........ ........ ........ ........ char = ] ........ ........ ..****.. ....**.. ....**.. ....**.. ....**.. ....**.. ....**.. ....**.. ....**.. ..****.. ........ ........ ........ ........ char = ^ ....*... ...***.. ..**.**. .**...** ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ char = _ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ******** ........ ........ ........ char = ` ...**... ...**... ....**.. ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ char = a ........ ........ ........ ........ ........ ..****.. .*...**. .....**. ..*****. .**..**. .**..**. ..***.** ........ ........ ........ ........ char = b ........ ........ .***.... ..**.... ..**.... ..****.. ..**.**. ..**..** ..**..** ..**..** ..**..** .**.***. ........ ........ ........ ........ char = c ........ ........ ........ ........ ........ ..*****. .**...** .**..... .**..... .**..... .**...** ..*****. ........ ........ ........ ........ char = d ........ ........ ....***. .....**. .....**. ...****. ..**.**. .**..**. .**..**. .**..**. .**..**. ..***.** ........ ........ ........ ........ char = e ........ ........ ........ ........ ........ ..*****. .**...** .**...** .******. .**..... .**...** ..*****. ........ ........ ........ ........ char = f ........ ........ ...***.. ..**.**. ..**..*. ..**.... .*****.. ..**.... ..**.... ..**.... ..**.... .****... ........ ........ ........ ........ char = g ........ ........ ........ ........ ........ ..***.** .**..**. .**..**. .**..**. .**..**. ..*****. .....**. .**..**. ..****.. ........ ........ char = h ........ ........ .***.... ..**.... ..**.... ..**.**. ..***.** ..**..** ..**..** ..**..** ..**..** .***..** ........ ........ ........ ........ char = i ........ ........ ....**.. ....**.. ........ ...***.. ....**.. ....**.. ....**.. ....**.. ....**.. ...****. ........ ........ ........ ........ char = j ........ ........ .....**. .....**. ........ ....***. .....**. .....**. .....**. .....**. .....**. .**..**. .**..**. ..****.. ........ ........ char = k ........ ........ .***.... ..**.... ..**.... ..**..** ..**..** ..**.**. ..****.. ..**.**. ..**..** .***..** ........ ........ ........ ........ char = l ........ ........ ...***.. ....**.. ....**.. ....**.. ....**.. ....**.. ....**.. ....**.. ....**.. ...****. ........ ........ ........ ........ char = m ........ ........ ........ ........ ........ .**.***. .******* .**.*.** .**.*.** .**.*.** .**.*.** .**.*.** ........ ........ ........ ........ char = n ........ ........ ........ ........ ........ .**.***. ..**..** ..**..** ..**..** ..**..** ..**..** ..**..** ........ ........ ........ ........ char = o ........ ........ ........ ........ ........ ..*****. .**...** .**...** .**...** .**...** .**...** ..*****. ........ ........ ........ ........ char = p ........ ........ ........ ........ ........ .**.***. ..**..** ..**..** ..**..** ..**..** ..*****. ..**.... ..**.... .****... ........ ........ char = q ........ ........ ........ ........ ........ ..***.** .**..**. .**..**. .**..**. .**..**. ..*****. .....**. .....**. ....**** ........ ........ char = r ........ ........ ........ ........ ........ .**.***. ..***.** ..**..** ..**.... ..**.... ..**.... .****... ........ ........ ........ ........ char = s ........ ........ ........ ........ ........ ..*****. .**...** ..***... ....***. ......** .**...** ..*****. ........ ........ ........ ........ char = t ........ ........ ....*... ...**... ...**... .******. ...**... ...**... ...**... ...**... ...**.** ....***. ........ ........ ........ ........ char = u ........ ........ ........ ........ ........ .**..**. .**..**. .**..**. .**..**. .**..**. .**..**. ..***.** ........ ........ ........ ........ char = v ........ ........ ........ ........ ........ .**...** .**...** ..**.**. ..**.**. ...***.. ...***.. ....*... ........ ........ ........ ........ char = w ........ ........ ........ ........ ........ .**...** .**...** .**...** .**.*.** .**.*.** .******* ..**.**. ........ ........ ........ ........ char = x ........ ........ ........ ........ ........ .**...** ..**.**. ...***.. ...***.. ...***.. ..**.**. .**...** ........ ........ ........ ........ char = y ........ ........ ........ ........ ........ .**...** .**...** .**...** .**...** .**...** ..****** ......** .....**. ..****.. ........ ........ char = z ........ ........ ........ ........ ........ .******* .**..**. ....**.. ...**... ..**.... .**...** .******* ........ ........ ........ ........ char = { ........ ........ ....***. ...**... ...**... ...**... .***.... ...**... ...**... ...**... ...**... ....***. ........ ........ ........ ........ char = | ........ ........ ...**... ...**... ...**... ...**... ...**... ........ ...**... ...**... ...**... ...**... ...**... ........ ........ ........ char = } ........ ........ .***.... ...**... ...**... ...**... ....***. ...**... ...**... ...**... ...**... .***.... ........ ........ ........ ........ char = ~ ........ ........ ..***.** .**.***. ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........ ........