Next is the very-very simple Tcl utility to convert glyph bytes into console image of symbol and vice-verse.
# parsing and loading font
#------------------------------------------------------------------------------
proc parsesymb str {
# Parse one symbol in notation like:
# "0x06,0x08,0x08,0x00,0x00,0x00,0x00,0x00"
set bytes [regexp -all -inline {0[xX][0-9a-fA-F]{2}} $str]
return $bytes
}
proc putsymbline byte {
# put on screen one line of a symbol
set mask 0b10000000
for {set i 0} {$i<8 data-blogger-escaped-bit="bit" data-blogger-escaped-byte="byte" data-blogger-escaped-expr="expr" data-blogger-escaped-i="i" data-blogger-escaped-incr="incr" data-blogger-escaped-mask="mask" data-blogger-escaped-set="set">>1}]
if $bit {
puts -nonewline "#"
} else {
puts -nonewline " "
}
}
}
proc putsymb symb_bytes {
# put on screen all symbol (all it's lines)
puts "+--------+"
foreach sb $symb_bytes {
puts -nonewline "|"
putsymbline $sb
puts "|"
}
puts "+--------+"
}
# Compile glyphs to font in C format
#-------------------------------------------------------------------------------
proc compsymbline line {
# Compile line like "# # # # " to 0xAA
set bits [string map { " " 0 # 1} $line]
return [format 0x%02X "0b$bits"]
}
proc compsymb symb_lines {
# Compile lines of symbol (what out 'putsymb')
set read 0
set res {}
foreach line $symb_lines {
if {0 == $read} {
if {$line eq "+--------+"} {
set read 1
}
} else {
if {$line eq "+--------+"} {
break
} else {
set line [string trim $line "|"]
lappend res [compsymbline $line]
}
}
}
return [join $res ","]
}
proc getlines {} {
set lines {}
while {[gets stdin line] >= 0} {
lappend lines $line
}
return $lines
}
proc main args {
global argc argv
if {$argc} {
set argv0 [lindex $argv 0]
if {$argv0 eq "comp"} {
set lines [getlines]
puts [compsymb $lines]
return
} elseif {$argv0 eq "put"} {
set line [gets stdin]
puts [putsymb [parsesymb $line]]
return
}
}
puts {\
Syntax on Linux:
1. cat file|PRG comp
2. cat file|PRG put
Syntax on Windows:
1. more file|PRG comp
2. more file|PRG put
This means:
1. Compile glyph image into C hex array
2. Put glyph hex array on the screen as glyph image
Glyph images and its' hex arrays are inverse}
}
main
}
Example of usage:
$echo 0x20,0x78,0xA0,0x70,0x28,0xF0,0x20,0x00|tclkitsh font.tcl put +--------+ | # | | #### | |# # | | ### | | # # | |#### | | # | | | +--------+ $This is the "$" symbol. It's bytes I get from et024006dhu.c (see const unsigned char FONT6x8[97][8]) From another hand, you can save this glyph (with ASCII-box!) in some file and then call:
$cat somefile.txt|tclkitsh font.tcl comp 0x20,0x78,0xA0,0x70,0x28,0xF0,0x20,0x00 $to get bytes of the glyph.
Комментариев нет:
Отправить комментарий
Thanks for your posting!