79 lines
3.8 KiB
C
79 lines
3.8 KiB
C
#include <stdio.h>
|
|
|
|
int cgatolinux( int col )
|
|
{
|
|
switch ( col )
|
|
{
|
|
case 0:
|
|
return 0;
|
|
case 1:
|
|
return 4;
|
|
case 2:
|
|
return 2;
|
|
case 3:
|
|
return 6;
|
|
case 4:
|
|
return 1;
|
|
case 5:
|
|
return 5;
|
|
case 6:
|
|
return 3;
|
|
case 7:
|
|
return 7;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
char cp437[256][8] =
|
|
{
|
|
// note: treat 0x00 and 0xFF as spaces, at least for the sake of printing
|
|
// _0 _1 _2 _3 _4 _5 _6 _7 _8 _9 _A _B _C _D _E _F
|
|
" " , "\u263A", "\u263B", "\u2665", "\u2666", "\u2663", "\u2660", "\u2022", "\u25CB", "\u25CB", "\u25D9", "\u2642", "\u2640", "\u266A", "\u266B", "\u263C", // 0_
|
|
"\u25BA", "\u25C4", "\u2195", "\u203C", "\u00B6", "\u00A7", "\u25AC", "\u21A8", "\u2191", "\u2193", "\u2192", "\u2190", "\u221F", "\u2194", "\u25B2", "\u25BC", // 1_
|
|
" " , "!" , "\"" , "#" , "$" , "%" , "&" , "'" , "(" , ")" , "*" , "+" , "," , "-" , "·" , "/" , // 2_
|
|
"0" , "1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" , ":" , ";" , "<" , "=" , ">" , "?" , // 3_
|
|
"@" , "A" , "B" , "C" , "D" , "E" , "F" , "G" , "H" , "I" , "J" , "K" , "L" , "M" , "N" , "O" , // 4_
|
|
"P" , "Q" , "R" , "S" , "T" , "U" , "V" , "W" , "X" , "Y" , "Z" , "[" , "\\" , "]" , "^" , "_" , // 5_
|
|
"`" , "a" , "b" , "c" , "d" , "e" , "f" , "g" , "h" , "i" , "j" , "k" , "l" , "m" , "n" , "o" , // 6_
|
|
"p" , "q" , "r" , "s" , "t" , "u" , "v" , "w" , "x" , "y" , "z" , "{" , "|" , "}" , "~" , "\u2302", // 7_
|
|
"\u00C7", "\u00FC", "\u00E9", "\u00E2", "\u00E4", "\u00E0", "\u00E5", "\u00E7", "\u00EA", "\u00EB", "\u00E8", "\u00EF", "\u00EE", "\u00EC", "\u00C4", "\u00C5", // 8_
|
|
"\u00C9", "\u00E6", "\u00C6", "\u00F4", "\u00F6", "\u00F2", "\u00FB", "\u00F9", "\u00FF", "\u00D6", "\u00DC", "\u00A2", "\u00A3", "\u00A5", "\u20A7", "\u0192", // 9_
|
|
"\u00E1", "\u00ED", "\u00F3", "\u00FA", "\u00F1", "\u00D1", "\u00AA", "\u00BA", "\u00BF", "\u2310", "\u00AC", "\u00BD", "\u00BC", "\u00A1", "\u00AB", "\u00BB", // A_
|
|
"\u2591", "\u2592", "\u2593", "\u2502", "\u2524", "\u2561", "\u2562", "\u2556", "\u2555", "\u2563", "\u2551", "\u2557", "\u255D", "\u255C", "\u255B", "\u2510", // B_
|
|
"\u2514", "\u2534", "\u252C", "\u251C", "\u2500", "\u253C", "\u255E", "\u255F", "\u255A", "\u2554", "\u2569", "\u2566", "\u2560", "\u2550", "\u256C", "\u2567", // C_
|
|
"\u2568", "\u2564", "\u2565", "\u2559", "\u2558", "\u2552", "\u2553", "\u256B", "\u256A", "\u2518", "\u250C", "\u2588", "\u2584", "\u258C", "\u2590", "\u2580", // D_
|
|
"\u03B1", "\u00DF", "\u0393", "\u03C0", "\u03A3", "\u03C3", "\u00B5", "\u03C4", "\u03A6", "\u0398", "\u03A9", "\u03B4", "\u221E", "\u03C6", "\u03B5", "\u2229", // E_
|
|
"\u2261", "\u00B1", "\u2265", "\u2264", "\u2320", "\u2321", "\u00F7", "\u2248", "\u00B0", "\u2219", "\u00B7", "\u221A", "\u207F", "\u00B2", "\u25A0", " " , // F_
|
|
};
|
|
|
|
int main( int argc, char **argv )
|
|
{
|
|
if ( argc < 2 )
|
|
{
|
|
fprintf(stderr,"usage: endoomview <file>\n");
|
|
return 1;
|
|
}
|
|
FILE *f = fopen(argv[1],"rb");
|
|
fseek(f,0,SEEK_END);
|
|
long sz = ftell(f);
|
|
if ( sz != 4000 )
|
|
{
|
|
fprintf(stderr,"4000 bytes expected, got %ld.\n",sz);
|
|
fclose(f);
|
|
return 2;
|
|
}
|
|
fseek(f,0,SEEK_SET);
|
|
for ( int i=0; i<2000; i++ )
|
|
{
|
|
int chr = fgetc(f);
|
|
int col = fgetc(f);
|
|
int fg = 30+cgatolinux(col&0x07);
|
|
int bold = !!(col&0x08);
|
|
int bg = 40+cgatolinux((col&0x70)>>4);
|
|
int blink = !!(col&0x80);
|
|
printf("\033[%d;%d;%d;%dm%s",bold?1:22,blink?5:25,fg,bg,cp437[chr]);
|
|
if ( !((i+1)%80) ) printf("\033[0m\n");
|
|
}
|
|
fclose(f);
|
|
return 0;
|
|
}
|