Цитата(Jenya7 @ Mar 12 2015, 14:08)

тогда возникает вопрос - а что у нас char_width()

Код
uint8_t char_width(uint8_t c)
{
uint8_t codepage_index, char_index = 0;
uint8_t codepage_count = font_pcodepage->cph.cprnum;
uint16_t index = 0;
pgsymbol_t p = font_psymbols;
for(codepage_index = 0; codepage_index < codepage_count; codepage_index++) //Выполнять для всех кодовых страниц
{
if((c >= font_pcodepage->cpr[codepage_index].min) &&
(c <= font_pcodepage->cpr[codepage_index].max)) //Если символ в кодовой странице, то
{
while(c > (font_pcodepage->cpr[codepage_index].min + index)) //Выполнять до нахождения символа
index++; //Увеличение индекса
break;
}
else //Иначе
char_index += font_pcodepage->cpr[codepage_index].max - font_pcodepage->cpr[codepage_index].min + 1;
}
char_index += index; //Индекс символа в шрифте
p += char_index * ((font_symsize + 4) / 4); //Указатель на символ
return ((pgcsymbol_t) p)->sh.cxpix; //Возврат ширины символа
}