comparison stream/tvi_vbi.c @ 24276:e8b635a55781

Implement Hold/Release graphics (showing control chars as graphics instead of spaces).
author voroshil
date Wed, 29 Aug 2007 17:43:13 +0000
parents a12f357e8bd0
children 298578b37f21
comparison
equal deleted inserted replaced
24275:a12f357e8bd0 24276:e8b635a55781
571 int fg_color=0; 571 int fg_color=0;
572 int bg_color=0; 572 int bg_color=0;
573 int row,col; 573 int row,col;
574 int separated=0; 574 int separated=0;
575 int conceal; 575 int conceal;
576 int hold;
577 tt_char tt_held;
576 578
577 for(row=0;row<VBI_ROWS;row++) { 579 for(row=0;row<VBI_ROWS;row++) {
578 lat=(lang==0); 580 lat=(lang==0);
579 gfx=0; 581 gfx=0;
580 fg_color=7; 582 fg_color=7;
581 bg_color=0; 583 bg_color=0;
582 separated=0; 584 separated=0;
583 conceal=0; 585 conceal=0;
586 hold=0;
587 tt_held=tt_space;
584 for(col=0;col<VBI_COLUMNS;col++){ 588 for(col=0;col<VBI_COLUMNS;col++){
585 i=row*VBI_COLUMNS+col; 589 i=row*VBI_COLUMNS+col;
586 c=raw[i]; 590 c=raw[i];
587 p[i].raw=c; 591 p[i].raw=c;
588 if(c&0x80){ //damaged char 592 if(c&0x80){ //damaged char
608 }else if(c>=0x0a && c<=0x0f){ 612 }else if(c>=0x0a && c<=0x0f){
609 }else if (c<=0x17){ //colors 613 }else if (c<=0x17){ //colors
610 fg_color=c&0x0f; 614 fg_color=c&0x0f;
611 gfx=c>>4; 615 gfx=c>>4;
612 conceal=0; 616 conceal=0;
617 if(!gfx) hold=0;
613 }else if (c<=0x18){ 618 }else if (c<=0x18){
614 conceal=1; 619 conceal=1;
615 }else if (c<=0x1a){ //Contiguous/Separated gfx 620 }else if (c<=0x1a){ //Contiguous/Separated gfx
616 separated=!(c&1); 621 separated=!(c&1);
617 }else if (c<=0x1b){ 622 }else if (c<=0x1b){
618 lat=!lat; 623 lat=!lat;
619 }else if (c<=0x1d){ 624 }else if (c<=0x1d){
620 bg_color=(c&1)?fg_color:0; 625 bg_color=(c&1)?fg_color:0;
621 p[i].bg=bg_color; 626 p[i].bg=bg_color;
627 }else{ //Hold/Release Graphics
628 hold=!(c&1);
622 } 629 }
623 p[i].ctl=1; 630 p[i].ctl=1;
631 if(hold || c==0x1f){
632 p[i]=tt_held;
633 p[i].fg=fg_color;
634 p[i].bg=bg_color;
635 }else
624 p[i].unicode=p[i].gfx?0:' '; 636 p[i].unicode=p[i].gfx?0:' ';
625 continue; 637 continue;
626 } 638 }
627 639
628 if(conceal){ 640 if(conceal){
629 p[i].gfx=0; 641 p[i].gfx=0;
630 p[i].unicode=' '; 642 p[i].unicode=' ';
631 }else if(gfx){ 643 }else if(gfx){
632 p[i].unicode=c-0x20; 644 p[i].unicode=c-0x20;
633 if (p[i].unicode>0x3f) p[i].unicode-=0x20; 645 if (p[i].unicode>0x3f) p[i].unicode-=0x20;
646 tt_held=p[i];
634 }else 647 }else
635 p[i].unicode=conv2uni(c,p[i].lng); 648 p[i].unicode=conv2uni(c,p[i].lng);
636 649
637 p[i].fg=fg_color; 650 p[i].fg=fg_color;
638 p[i].bg=bg_color; 651 p[i].bg=bg_color;