Version 2 of curses banners

Updated 2004-10-13 05:47:52

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

 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