Changeset 114
- Timestamp:
- 04/15/07 05:11:26 (6 years ago)
- Location:
- branches/grand
- Files:
-
- 5 edited
-
core/conf.c (modified) (1 diff)
-
core/gui.c (modified) (4 diffs)
-
include/conf.h (modified) (1 diff)
-
include/font.h (modified) (2 diffs)
-
lib/font/rbf_font.c (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/grand/core/conf.c
r113 r114 103 103 CONF_INFO( 44, conf.reader_autoscroll_delay, CONF_DEF_VALUE, i:5, NULL), 104 104 CONF_INFO( 45, conf.reader_rbf_file, CONF_DEF_PTR, ptr:"", NULL), 105 CONF_INFO( 46, conf.reader_codepage, CONF_DEF_VALUE, i:FONT_CP_WIN, NULL), 105 106 }; 106 107 #define CONF_NUM (sizeof(conf_info)/sizeof(conf_info[0])) -
branches/grand/core/gui.c
r113 r114 58 58 static const char* gui_raw_prefix_enum(int change, int arg); 59 59 static const char* gui_raw_ext_enum(int change, int arg); 60 static const char* gui_reader_codepage_enum(int change, int arg); 60 61 61 62 // Menu callbacks … … 98 99 {"Open new file...", MENUITEM_PROC, (int*)gui_draw_read }, 99 100 {"Open last opened file", MENUITEM_PROC, (int*)gui_draw_read_last }, 101 {"Select RBF font", MENUITEM_PROC, (int*)gui_draw_load_rbf }, 102 {"Codepage", MENUITEM_ENUM, (int*)gui_reader_codepage_enum }, 100 103 {"Enable autoscroll", MENUITEM_BOOL, &conf.reader_autoscroll }, 101 104 {"Autoscroll delay (sec)", MENUITEM_INT|MENUITEM_F_UNSIGNED|MENUITEM_F_MINMAX, &conf.reader_autoscroll_delay, MENU_MINMAX(0, 60) }, 102 {"Select RBF font", MENUITEM_PROC, (int*)gui_draw_load_rbf },103 105 {"<- Back", MENUITEM_UP }, 104 106 {0} … … 328 330 329 331 return exts[conf.raw_ext]; 332 } 333 334 //------------------------------------------------------------------- 335 const char* gui_reader_codepage_enum(int change, int arg) { 336 static const char* cps[]={ "Win1251", "DOS"}; 337 338 conf.reader_codepage+=change; 339 if (conf.reader_codepage<0) 340 conf.reader_codepage=(sizeof(cps)/sizeof(cps[0]))-1; 341 else if (conf.reader_codepage>=(sizeof(cps)/sizeof(cps[0]))) 342 conf.reader_codepage=0; 343 344 return cps[conf.reader_codepage]; 330 345 } 331 346 … … 858 873 if (!rbf_load(conf.reader_rbf_file)) 859 874 rbf_load_from_8x16(current_font); 875 rbf_set_codepage(conf.reader_codepage); 860 876 gui_mode = GUI_MODE_READ; 861 877 gui_read_init(fn); -
branches/grand/include/conf.h
r113 r114 56 56 57 57 char reader_file[100]; 58 int reader_pos;59 int reader_autoscroll;60 int reader_autoscroll_delay;58 int reader_pos; 59 int reader_autoscroll; 60 int reader_autoscroll_delay; 61 61 char reader_rbf_file[100]; 62 int reader_codepage; 62 63 63 64 int sokoban_level; -
branches/grand/include/font.h
r113 r114 10 10 #define FONT_KEYRUS 3 11 11 12 #define FONT_CP_WIN 0 13 #define FONT_CP_DOS 1 14 12 15 //------------------------------------------------------------------- 13 16 extern const unsigned char *current_font; … … 20 23 extern int rbf_font_height(); 21 24 extern int rbf_char_width(int ch); 25 extern void rbf_set_codepage(int codepage); 22 26 extern int rbf_draw_char(int x, int y, int ch, color cl); 23 27 -
branches/grand/lib/font/rbf_font.c
r113 r114 1 1 #include "stdlib.h" 2 2 #include "gui.h" 3 #include "font.h" 3 4 4 5 //------------------------------------------------------------------- … … 8 9 //------------------------------------------------------------------- 9 10 const char *RBF_HDR_MAGIC = "\xE0\x0E\xF0\x0D\x03\x00\x00\x00"; 10 11 /* 12 const char tbl_dos2win[] = { 13 192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207, 14 208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223, 15 224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239, 16 136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151, 17 152,153,154,129,156,157,158,159,160,161,162,163,164,165,166,167, 18 168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183, 19 240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255, 20 130,132,135,134,128,133,131,155,184,185,186,187,188,189,190,191 21 }; 22 */ 11 23 static struct { 12 24 char name[RBF_MAX_NAME]; … … 25 37 int _unknown4; 26 38 } rbf_font; 27 static int need_free=0;; 39 static int need_free = 0; 40 static int rbf_codepage = FONT_CP_WIN; 28 41 29 42 //------------------------------------------------------------------- 30 43 static int win2dos(int ch) { 31 if (ch>=192 && ch<=255) { 32 if (ch<=239) ch-=64; 33 else ch-=16; 34 } 35 return ch; 44 switch (ch) { 45 case 0xAA: return 0xF2; // ò 46 case 0xBA: return 0xF3; // ó 47 case 0xAF: return 0xF4; // ô 48 case 0xBF: return 0xF5; // õ 49 default: 50 if (ch>=192 && ch<=255) { 51 if (ch<=239) ch-=64; 52 else ch-=16; 53 } 54 return ch; 55 } 56 } 57 58 //------------------------------------------------------------------- 59 static int dos2win(int ch) { 60 switch (ch) { 61 case 0xF2: return 0xAA; // ò 62 case 0xF3: return 0xBA; // ó 63 case 0xF4: return 0xAF; // ô 64 case 0xF5: return 0xBF; // õ 65 default: 66 if (ch>=128 && ch<=175) { 67 ch+=64; 68 } else if (ch>=224 && ch<=239) { 69 ch+=16; 70 } 71 return ch; 72 } 36 73 } 37 74 … … 89 126 lseek(fd, rbf_font._wmapAddr, SEEK_SET); 90 127 for (i=rbf_font.charFirst; i<=rbf_font.charLast; ++i) { 91 read(fd, &rbf_font.wTable[ win2dos(i)], 1);128 read(fd, &rbf_font.wTable[i], 1); 92 129 } 93 130 94 131 lseek(fd, rbf_font._cmapAddr, SEEK_SET); 95 132 for (i=rbf_font.charFirst; i<=rbf_font.charLast; ++i) { 96 rbf_font.cTable[ win2dos(i)]=malloc(rbf_font.charSize);97 read(fd, rbf_font.cTable[ win2dos(i)], rbf_font.charSize);133 rbf_font.cTable[i]=malloc(rbf_font.charSize); 134 read(fd, rbf_font.cTable[i], rbf_font.charSize); 98 135 } 99 136 need_free = 1; … … 129 166 130 167 for (i=rbf_font.charFirst; i<=rbf_font.charLast; ++i) { 131 rbf_font.cTable[ i]=malloc(rbf_font.charSize);132 memcpy(rbf_font.cTable[ i], font+i*rbf_font.charSize, rbf_font.charSize);168 rbf_font.cTable[dos2win(i)]=malloc(rbf_font.charSize); 169 memcpy(rbf_font.cTable[dos2win(i)], font+i*rbf_font.charSize, rbf_font.charSize); 133 170 } 134 171 need_free = 1; 172 } 173 174 //------------------------------------------------------------------- 175 void rbf_set_codepage(int codepage) { 176 rbf_codepage = codepage; 135 177 } 136 178 … … 142 184 //------------------------------------------------------------------- 143 185 int rbf_char_width(int ch) { 186 switch (rbf_codepage) { 187 case FONT_CP_WIN: 188 break; 189 case FONT_CP_DOS: 190 ch = dos2win(ch); 191 break; 192 } 144 193 return rbf_font.wTable[ch]; 145 194 } … … 149 198 int xx, yy; 150 199 151 for (yy=0; yy<rbf_font.height; ++yy){ 152 for (xx=0; xx<rbf_font.wTable[ch]; ++xx){ 200 switch (rbf_codepage) { 201 case FONT_CP_WIN: 202 break; 203 case FONT_CP_DOS: 204 ch = dos2win(ch); 205 break; 206 } 207 208 for (yy=0; yy<rbf_font.height; ++yy) { 209 for (xx=0; xx<rbf_font.wTable[ch]; ++xx) { 153 210 draw_pixel(x+xx ,y+yy, (rbf_font.cTable[ch][yy*rbf_font.width/8+xx/8] & (1<<(xx%8)))? cl&0xff : cl>>8); 154 211 } 155 212 } 156 return rbf_ char_width(ch);157 } 158 159 //------------------------------------------------------------------- 213 return rbf_font.wTable[ch]; 214 } 215 216 //-------------------------------------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.