You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
94 lines
2.3 KiB
94 lines
2.3 KiB
proc convert_bin_to_c {bin_file_name} {
|
|
|
|
# Get binary file size
|
|
|
|
if {[catch {file size $bin_file_name} bin_file_size]} {
|
|
puts stderr "Error: unable to get size of $bin_file_name"
|
|
exit
|
|
}
|
|
|
|
puts "$bin_file_name is $bin_file_size bytes long."
|
|
|
|
# Open binary file
|
|
|
|
if {[catch {open $bin_file_name r} bin_file_id]} {
|
|
puts stderr "Error: unable to open $bin_file_name"
|
|
exit
|
|
}
|
|
|
|
puts "$bin_file_name is open for reading."
|
|
|
|
# Read contents of binary file
|
|
|
|
fconfigure $bin_file_id -translation binary
|
|
|
|
if {[catch {read $bin_file_id} contents]} {
|
|
puts stderr "Error: unable to read contents of $bin_file_name"
|
|
exit
|
|
}
|
|
|
|
set contents_length [string length $contents]
|
|
puts "$bin_file_name contents is stored ($contents_length bytes)."
|
|
if {$contents_length != $bin_file_size} {
|
|
puts stderr "Error: file size does not match length of contents"
|
|
exit
|
|
}
|
|
|
|
# Close binary file
|
|
|
|
if {[catch {close $bin_file_id}]} {
|
|
puts stderr "Error: unable to close $bin_file_name"
|
|
}
|
|
|
|
puts "$bin_file_name is closed."
|
|
|
|
# Open C file
|
|
|
|
set bin_file_rootname [file rootname $bin_file_name]
|
|
set bin_file_tail [file tail $bin_file_rootname]
|
|
set c_file_name "${bin_file_rootname}.cxx"
|
|
|
|
if {[catch {open $c_file_name w} c_file_id]} {
|
|
puts stderr "Error: unable to open $c_file_name"
|
|
exit
|
|
}
|
|
|
|
puts "$c_file_name is open for writing."
|
|
|
|
# Convert bin to C
|
|
|
|
puts "$c_file_name is filled."
|
|
|
|
puts $c_file_id "size_t face_${bin_file_tail}_buffer_length = $contents_length;\n"
|
|
|
|
puts -nonewline $c_file_id "unsigned char face_${bin_file_tail}_buffer\[\] = {\n "
|
|
|
|
for {set i 0} {$i < $contents_length} {incr i} {
|
|
scan [string index $contents $i] "%c" byte
|
|
puts -nonewline $c_file_id [format "%3d, " $byte]
|
|
if {[expr $i % 14] == 13} {
|
|
puts -nonewline $c_file_id "\n "
|
|
}
|
|
}
|
|
|
|
puts $c_file_id "\n};"
|
|
|
|
# Close C file
|
|
|
|
if {[catch {close $c_file_id}]} {
|
|
puts stderr "Error: unable to close $c_file_name"
|
|
}
|
|
|
|
puts "$c_file_name is closed."
|
|
}
|
|
|
|
if {$argc < 1} {
|
|
puts stderr "Error: expecting name of the binary file to convert"
|
|
exit
|
|
}
|
|
|
|
foreach arg $argv {
|
|
foreach file [glob -nocomplain $arg] {
|
|
convert_bin_to_c $file
|
|
}
|
|
}
|
|
|