blob: c151c0f53613cbc5b1eb3da47968b0402481e026 (
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
60
61
|
#! /bin/sh
#
# Transform text (.ps, .tcl,...) into a C string
#
# 1997/10 -- dl
#
# $Id: str2c,v 1.3 2009/03/25 23:22:37 nijtmans Exp $
#
# 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 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);
}
*/"
}
|