blob: e2c520877d71169de03e5ea30b4dfe64af9f1580 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
#! /bin/sh
#
# Transform text (.ps, .tcl,...) into a C string
#
# 1997/10 -- dl
#
# restart with tclsh \
exec tclsh "$0" ${1+"$@"}
# 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 writable 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);
}
*/"
}
|