#! /bin/sh # # Transform text (.ps, .tcl,...) into a C string # # 1997/10 -- dl # # restart with tclsh \ exec tclsh8.0 "$0" "$@" # Max string length # (some C compiler have a 2048 chars limits (so 2047 real chars with # the tariling 0) so we use 2000 to make the count nice) set MAX 2000 if {$argc} { puts stderr "Usage: [file tail [info script]] < text > text.c" exit 1 } set r [read stdin] proc translate {what} { regsub -all {\\} $what {\\\\} what regsub -all {"} $what {\\"} what regsub -all "\n" $what "\\\\n\\\\\n" what; return $what; } set lg [string length $r] if {$lg<$MAX} { puts "/* * Single part writeable string generated by str2c */ static char data\[\]=\"[translate $r]\";" } else { puts "/* * Multi parts read only string generated by str2c */ static CONST char * CONST data\[\]= {" set n 1 for {set i 0} {$i<$lg} {incr i $MAX} { set part [string range $r $i [expr $i+$MAX-1]] set len [string length $part]; puts "\t/* Start of part $n ($len characters) */" puts "\t\"[translate $part]\"," puts "\t/* End of part $n */\n" incr n } puts "\tNULL\t/* End of data marker */\n};" puts "\n/* use for instance with: CONST char * CONST *chunk; for (chunk=data; *chunk; chunk++) { Tcl_AppendResult(interp, *chunk, (char *) NULL); } */" }