Skip to content

Commit

Permalink
handle KDFONTOP response, set up copy range better #1726
Browse files Browse the repository at this point in the history
  • Loading branch information
dankamongmen committed Jun 22, 2021
1 parent 0e0b31f commit bb4a922
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 29 deletions.
5 changes: 2 additions & 3 deletions src/lib/termdesc.c
Original file line number Diff line number Diff line change
Expand Up @@ -246,9 +246,8 @@ apply_term_heuristics(tinfo* ti, const char* termname, int fd,
termname = "Linux console";
ti->caps.braille = false; // no caps.braille, no caps.sextants in linux console
// FIXME if the NCOPTION_NO_FONT_CHANGES, this isn't true
// FIXME we probably want to do this based off ioctl()s in linux.c
// FIXME until #1726 is fixed this definitely is not happening
ti->caps.quadrants = false; // we program caps.quadrants on the console
// FIXME we probably want to ID based off ioctl()s in linux.c
ti->caps.quadrants = true; // we program caps.quadrants on the console
}
// run a wcwidth(⣿) to guarantee libc Unicode 3 support, independent of term
if(wcwidth(L'⣿') < 0){
Expand Down
40 changes: 14 additions & 26 deletions src/poc/linuxconsole.c
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,10 @@ get_linux_colormap(int fd){
return 0;
}

// each row is laid out as bytes, one bit per pixel, rounded up to the
// lowest sufficient number of bytes. each character is thus
//
// height * rowbytes, where rowbytes = width + 7 / 8
static int
explode_glyph_row(const unsigned char** row, unsigned width){
unsigned char mask = 0x80;
Expand Down Expand Up @@ -103,33 +107,17 @@ get_linux_consolefont(int fd, unsigned showglyphs){
return -1;
}
if(showglyphs){
for(unsigned i = 0 ; i < cfo.charcount ; i += 7){
const unsigned char* g1 = (unsigned char*)cfo.data + 32 * i;
const unsigned char* g2 = g1 + 32;
const unsigned char* g3 = g2 + 32;
const unsigned char* g4 = g3 + 32;
const unsigned char* g5 = g4 + 32;
const unsigned char* g6 = g5 + 32;
const unsigned char* g7 = g6 + 32;
// FIXME get real screen width
const int atonce = 80 / (cfo.width + 1);
const int Bper = 64;
const unsigned char* g[atonce];
for(unsigned i = 0 ; i < cfo.charcount ; i += atonce){
for(int o = 0 ; o < atonce ; ++o){
g[o] = (unsigned char*)cfo.data + Bper * (i + o);
}
for(unsigned row = 0 ; row < cfo.height ; ++row){
explode_glyph_row(&g1, cfo.width);
if(i < cfo.charcount - 1u){
explode_glyph_row(&g2, cfo.width);
if(i < cfo.charcount - 2u){
explode_glyph_row(&g3, cfo.width);
if(i < cfo.charcount - 3u){
explode_glyph_row(&g4, cfo.width);
if(i < cfo.charcount - 4u){
explode_glyph_row(&g5, cfo.width);
if(i < cfo.charcount - 5u){
explode_glyph_row(&g6, cfo.width);
if(i < cfo.charcount - 6u){
explode_glyph_row(&g7, cfo.width);
}
}
}
}
}
for(int o = 0 ; o < atonce ; ++o){
explode_glyph_row(&g[o], cfo.width);
}
printf("\n");
}
Expand Down

0 comments on commit bb4a922

Please sign in to comment.