2004-03-05
VI A bitmapped font (from a BIOS listing) 8x8 and a
minimalist curses based font displayer. You need a relatively big window - say 124x55 to see this well.
2004-10-12
VI Changed to support changes in
minimalist curses No more getch or timeout
set fontmap {
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x7E 0x81 0xA5 0x81 0xBD 0x99
0x81 0x7E 0x7E 0xFF 0xDB 0xFF 0xC3 0xE7 0xFF 0x7E 0x6C 0xFE 0xFE 0xFE
0x7C 0x38 0x10 0x00 0x10 0x38 0x7C 0xFE 0x7C 0x38 0x10 0x00 0x38 0x7C
0x38 0xFE 0xFE 0x92 0x10 0x7C 0x00 0x10 0x38 0x7C 0xFE 0x7C 0x38 0x7C
0x00 0x00 0x18 0x3C 0x3C 0x18 0x00 0x00 0xFF 0xFF 0xE7 0xC3 0xC3 0xE7
0xFF 0xFF 0x00 0x3C 0x66 0x42 0x42 0x66 0x3C 0x00 0xFF 0xC3 0x99 0xBD
0xBD 0x99 0xC3 0xFF 0x0F 0x07 0x0F 0x7D 0xCC 0xCC 0xCC 0x78 0x3C 0x66
0x66 0x66 0x3C 0x18 0x7E 0x18 0x3F 0x33 0x3F 0x30 0x30 0x70 0xF0 0xE0
0x7F 0x63 0x7F 0x63 0x63 0x67 0xE6 0xC0 0x99 0x5A 0x3C 0xE7 0xE7 0x3C
0x5A 0x99 0x80 0xE0 0xF8 0xFE 0xF8 0xE0 0x80 0x00 0x02 0x0E 0x3E 0xFE
0x3E 0x0E 0x02 0x00 0x18 0x3C 0x7E 0x18 0x18 0x7E 0x3C 0x18 0x66 0x66
0x66 0x66 0x66 0x00 0x66 0x00 0x7F 0xDB 0xDB 0x7B 0x1B 0x1B 0x1B 0x00
0x3E 0x63 0x38 0x6C 0x6C 0x38 0x86 0xFC 0x00 0x00 0x00 0x00 0x7E 0x7E
0x7E 0x00 0x18 0x3C 0x7E 0x18 0x7E 0x3C 0x18 0xFF 0x18 0x3C 0x7E 0x18
0x18 0x18 0x18 0x00 0x18 0x18 0x18 0x18 0x7E 0x3C 0x18 0x00 0x00 0x18
0x0C 0xFE 0x0C 0x18 0x00 0x00 0x00 0x30 0x60 0xFE 0x60 0x30 0x00 0x00
0x00 0x00 0xC0 0xC0 0xC0 0xFE 0x00 0x00 0x00 0x24 0x66 0xFF 0x66 0x24
0x00 0x00 0x00 0x18 0x3C 0x7E 0xFF 0xFF 0x00 0x00 0x00 0xFF 0xFF 0x7E
0x3C 0x18 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x18 0x3C
0x3C 0x18 0x18 0x00 0x18 0x00 0x6C 0x6C 0x6C 0x00 0x00 0x00 0x00 0x00
0x6C 0x6C 0xFE 0x6C 0xFE 0x6C 0x6C 0x00 0x18 0x7E 0xC0 0x7C 0x06 0xFC
0x18 0x00 0x00 0xC6 0xCC 0x18 0x30 0x66 0xC6 0x00 0x38 0x6C 0x38 0x76
0xDC 0xCC 0x76 0x00 0x30 0x30 0x60 0x00 0x00 0x00 0x00 0x00 0x18 0x30
0x60 0x60 0x60 0x30 0x18 0x00 0x60 0x30 0x18 0x18 0x18 0x30 0x60 0x00
0x00 0x66 0x3C 0xFF 0x3C 0x66 0x00 0x00 0x00 0x18 0x18 0x7E 0x18 0x18
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x18 0x18 0x30 0x00 0x00 0x00 0x7E
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x18 0x18 0x00 0x06 0x0C
0x18 0x30 0x60 0xC0 0x80 0x00 0x7C 0xCE 0xDE 0xF6 0xE6 0xC6 0x7C 0x00
0x30 0x70 0x30 0x30 0x30 0x30 0xFC 0x00 0x78 0xCC 0x0C 0x38 0x60 0xCC
0xFC 0x00 0x78 0xCC 0x0C 0x38 0x0C 0xCC 0x78 0x00 0x1C 0x3C 0x6C 0xCC
0xFE 0x0C 0x1E 0x00 0xFC 0xC0 0xF8 0x0C 0x0C 0xCC 0x78 0x00 0x38 0x60
0xC0 0xF8 0xCC 0xCC 0x78 0x00 0xFC 0xCC 0x0C 0x18 0x30 0x30 0x30 0x00
0x78 0xCC 0xCC 0x78 0xCC 0xCC 0x78 0x00 0x78 0xCC 0xCC 0x7C 0x0C 0x18
0x70 0x00 0x00 0x18 0x18 0x00 0x00 0x18 0x18 0x00 0x00 0x18 0x18 0x00
0x00 0x18 0x18 0x30 0x18 0x30 0x60 0xC0 0x60 0x30 0x18 0x00 0x00 0x00
0x7E 0x00 0x7E 0x00 0x00 0x00 0x60 0x30 0x18 0x0C 0x18 0x30 0x60 0x00
0x3C 0x66 0x0C 0x18 0x18 0x00 0x18 0x00 0x7C 0xC6 0xDE 0xDE 0xDC 0xC0
0x7C 0x00 0x30 0x78 0xCC 0xCC 0xFC 0xCC 0xCC 0x00 0xFC 0x66 0x66 0x7C
0x66 0x66 0xFC 0x00 0x3C 0x66 0xC0 0xC0 0xC0 0x66 0x3C 0x00 0xF8 0x6C
0x66 0x66 0x66 0x6C 0xF8 0x00 0xFE 0x62 0x68 0x78 0x68 0x62 0xFE 0x00
0xFE 0x62 0x68 0x78 0x68 0x60 0xF0 0x00 0x3C 0x66 0xC0 0xC0 0xCE 0x66
0x3A 0x00 0xCC 0xCC 0xCC 0xFC 0xCC 0xCC 0xCC 0x00 0x78 0x30 0x30 0x30
0x30 0x30 0x78 0x00 0x1E 0x0C 0x0C 0x0C 0xCC 0xCC 0x78 0x00 0xE6 0x66
0x6C 0x78 0x6C 0x66 0xE6 0x00 0xF0 0x60 0x60 0x60 0x62 0x66 0xFE 0x00
0xC6 0xEE 0xFE 0xFE 0xD6 0xC6 0xC6 0x00 0xC6 0xE6 0xF6 0xDE 0xCE 0xC6
0xC6 0x00 0x38 0x6C 0xC6 0xC6 0xC6 0x6C 0x38 0x00 0xFC 0x66 0x66 0x7C
0x60 0x60 0xF0 0x00 0x7C 0xC6 0xC6 0xC6 0xD6 0x7C 0x0E 0x00 0xFC 0x66
0x66 0x7C 0x6C 0x66 0xE6 0x00 0x7C 0xC6 0xE0 0x78 0x0E 0xC6 0x7C 0x00
0xFC 0xB4 0x30 0x30 0x30 0x30 0x78 0x00 0xCC 0xCC 0xCC 0xCC 0xCC 0xCC
0xFC 0x00 0xCC 0xCC 0xCC 0xCC 0xCC 0x78 0x30 0x00 0xC6 0xC6 0xC6 0xC6
0xD6 0xFE 0x6C 0x00 0xC6 0xC6 0x6C 0x38 0x6C 0xC6 0xC6 0x00 0xCC 0xCC
0xCC 0x78 0x30 0x30 0x78 0x00 0xFE 0xC6 0x8C 0x18 0x32 0x66 0xFE 0x00
0x78 0x60 0x60 0x60 0x60 0x60 0x78 0x00 0xC0 0x60 0x30 0x18 0x0C 0x06
0x02 0x00 0x78 0x18 0x18 0x18 0x18 0x18 0x78 0x00 0x10 0x38 0x6C 0xC6
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0x30 0x30
0x18 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x78 0x0C 0x7C 0xCC 0x76 0x00
0xE0 0x60 0x60 0x7C 0x66 0x66 0xDC 0x00 0x00 0x00 0x78 0xCC 0xC0 0xCC
0x78 0x00 0x1C 0x0C 0x0C 0x7C 0xCC 0xCC 0x76 0x00 0x00 0x00 0x78 0xCC
0xFC 0xC0 0x78 0x00 0x38 0x6C 0x64 0xF0 0x60 0x60 0xF0 0x00 0x00 0x00
0x76 0xCC 0xCC 0x7C 0x0C 0xF8 0xE0 0x60 0x6C 0x76 0x66 0x66 0xE6 0x00
0x30 0x00 0x70 0x30 0x30 0x30 0x78 0x00 0x0C 0x00 0x1C 0x0C 0x0C 0xCC
0xCC 0x78 0xE0 0x60 0x66 0x6C 0x78 0x6C 0xE6 0x00 0x70 0x30 0x30 0x30
0x30 0x30 0x78 0x00 0x00 0x00 0xCC 0xFE 0xFE 0xD6 0xD6 0x00 0x00 0x00
0xB8 0xCC 0xCC 0xCC 0xCC 0x00 0x00 0x00 0x78 0xCC 0xCC 0xCC 0x78 0x00
0x00 0x00 0xDC 0x66 0x66 0x7C 0x60 0xF0 0x00 0x00 0x76 0xCC 0xCC 0x7C
0x0C 0x1E 0x00 0x00 0xDC 0x76 0x62 0x60 0xF0 0x00 0x00 0x00 0x7C 0xC0
0x70 0x1C 0xF8 0x00 0x10 0x30 0xFC 0x30 0x30 0x34 0x18 0x00 0x00 0x00
0xCC 0xCC 0xCC 0xCC 0x76 0x00 0x00 0x00 0xCC 0xCC 0xCC 0x78 0x30 0x00
0x00 0x00 0xC6 0xC6 0xD6 0xFE 0x6C 0x00 0x00 0x00 0xC6 0x6C 0x38 0x6C
0xC6 0x00 0x00 0x00 0xCC 0xCC 0xCC 0x7C 0x0C 0xF8 0x00 0x00 0xFC 0x98
0x30 0x64 0xFC 0x00 0x1C 0x30 0x30 0xE0 0x30 0x30 0x1C 0x00 0x18 0x18
0x18 0x00 0x18 0x18 0x18 0x00 0xE0 0x30 0x30 0x1C 0x30 0x30 0xE0 0x00
0x76 0xDC 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x10 0x38 0x6C 0xC6 0xC6
0xFE 0x00
}
package require curses
proc boxscreen {} {
set cols [curses info cols]
set lines [curses info lines]
curses attr off underline
curses attr on reverse
for {set i 0} {$i < $cols } {incr i} {
curses move 0 $i
curses puts " "
curses move [expr $lines - 1] $i
curses puts " "
}
for {set i 0} {$i < $lines} {incr i} {
curses move $i 0
curses puts " "
curses move $i [expr $cols - 1]
curses puts " "
}
}
proc bigstr {str row col} {
curses attr off reverse
set reverse 0
set charno 0
set fo [open debug a]
foreach char [split $str {}] {
puts $fo "Char: $char"
binary scan $char c f
set index [expr $f * 8]
puts $fo "Index: $index"
for {set line 0} {$line < 8} {incr line} {
set bitline [lindex $::fontmap [expr $index + $line]]
puts $fo "Bitline: $bitline"
binary scan [binary format c $bitline] B8 charline
set cix 0
foreach c [split $charline {}] {
if {$c} {
curses attr on reverse
curses move [expr $row + $line] [expr $col + $charno * 8 + $cix]
curses puts " "
}
incr cix
}
}
incr charno
}
close $fo
}
proc dolow off {
curses erase
boxscreen
for {set i 0} {$i < 6} {incr i} {
for {set j 0} {$j < 14} {incr j} {
bigstr [binary format c [expr $off + $i * 14 + $j]] [expr 2 + $i * 8] [expr 2 + $j * 8]
}
}
curses refresh
read stdin 1
}
fconfigure stdin -buffering none
dolow 0
dolow 44