# Tcl_ObjCmdProc *func;
# and the generated .c will contain
# const C-ENTRY-TYPE C-ARRAY-NAME[];
-# where C-ARRAY-NAME is C-ENTRY-TYPE lowercased, with
-# `s' appended. The entries are indented one level (one
+# where C-ARRAY-NAME is TABLENAME, with `_entries' appended
+# and `cht_' prepended. The entries are indented one level (one
# or more spaces) and look like this:
# ENTRYNAME
# FORMALARGNAME TYPE
undef $c_of;
}
+sub enumargs ($) {
+ my ($a) = @_;
+ $a =~ m:/(.*),: or die "invalid enum type \`$a'\n";
+ my ($a_tab, $ee_type, $estr) = ($`,$1,$');
+ if ($ee_type !~ m/^[^_]/) {
+ $ee_type= $a_tab.$ee_type;
+ $a_tab= lc($a_tab).'_entries';
+ }
+ return ($a_tab, $ee_type, $estr);
+}
+
sub parse ($$) {
my ($wh,$f) = @_;
while (defined($_= $f->getline)) {
unshift @i, $this_indent;
}
- if (@i==0 && m/^Table\s+(\*toplevel\*|\w+)\s+(\w+)$/) {
+ if (@i==0 && m/^Table\s+(\w+)\s+(\w+)$/) {
zilch();
$c_table= $1;
$table_x{$c_table}{C}= $2;
$pa_vars .= " const void *v_$n= 0;\n";
$paarg= "&v_$n";
$pafin= "\n a_$n= v_$n; ";
- $a =~ m/\,/ or die "invalid enum type \`$a'\n";
- $a_tab = lc($`).'s';
- $a = "$a_tab, sizeof($`), $'";
- o('h', 210, "extern const $` $a_tab".'[]'.";\n");
+ ($a_tab, $ee_type, $estr) = enumargs($a);
+ $a = "cht_$a_tab, sizeof($ee_type), $estr";
+ o('h', 210, "extern const $ee_type cht_$a_tab".'[]'.";\n");
}
if (exists $type_fini{$t}) {
$pa_fini .= ' '.subst_in("a_$n", $type_fini{$t})."\n";
$pa_vars .= " const char *e;\n";
$pa_fini .= "\n";
$pa_fini .= "e_err:\n";
- $pa_fini .= " setstringresult(ip,e);\n";
+ $pa_fini .= " cht_setstringresult(ip,e);\n";
$pa_fini .= " rc= TCL_ERROR; goto rc_err;\n";
}
$pa_vars .= "\n";
$r_entry->{I});
}
if (length $c_table) {
- $decl= "const $x_table->{C} ".lc($x_table->{C}).'s[]';
+ $decl= "const $x_table->{C} cht_${c_table}_entries[]";
o('h', 500, "extern $decl;\n");
o('c', 100,
"$decl = {\n".
my ($n, $t, $ta, $why) = @_;
my ($type);
if ($t eq 'enum') {
- $ta =~ m/\,/ or die "invalid enum type \`$t' ($why)\n";
- $c= "const $` *@";
+ ($a_tab, $ee_type, $estr) = enumargs($ta);
+ $c= "const $ee_type* @";
} else {
defined $types{$t} or die "unknown type $t ($why)\n";
$c= $types{$t}{C};