chiark / gitweb /
writeable wip
[chiark-tcl.git] / base / tcmdifgen
index d5e662234ddba0951fb59b300469b22a3e9821d3..bd972454147bb0151f7aacd889f55cf14c458628 100755 (executable)
@@ -56,7 +56,7 @@
 #     Arranges for generated .h files to #include the specified
 #     file.  C-INCLUDE-SPECIFIER should include the <..> or "..".
 #
-#  Table TABLENAME C-ENTRY-TYPE
+#  Table [*]TABLENAME C-ENTRY-TYPE
 #     Starts a table of commands or subcommands.  The generated .h
 #     will contain a definition of C-ENTRY-TYPE containing
 #         const char *name;
@@ -66,7 +66,7 @@
 #     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
+#        ENTRYNAME [ C-EXTRA-ENTRY-VALUES ]
 #            FORMALARGNAME   TYPE
 #            ...
 #          [ =>  RESULT-TYPE ]
 #     arguments, processes the command, and sets any result, as
 #     applicable.
 #
-#  ExtraEntry C-ENTRY-TYPE
+#     `*' should be used if the table name is not useful for error
+#     messages.  It suppresses `TABLENAME ' from the front of the
+#     autogenerated argument parsing error strings.
+#
+#  EntryExtra C-ENTRY-TYPE
 #     Introduces a section of additional C code which will be inserted
 #     into the definition of C-ENTRY-TYPE by `Table'.  The C
 #     code, which follows on several indented lines, should be
 #     structure member definitions.
 #
-#     When ExtraEntry is used, in the corresponding Table, each
+#     When EntryExtra is used, in the corresponding Table, each
 #     ENTRYNAME should be followed on the same line by whitespace and
 #     EXTRA-VALUES; the EXTRA-VALUES are used as initialisers for the
 #     additional structure elements.
@@ -178,11 +182,12 @@ sub parse ($$) {
            unshift @i, $this_indent;
        }
 
-       if (@i==0 && m/^Table\s+(\w+)\s+(\w+)$/) {
+       if (@i==0 && m/^Table\s+(\*?)(\w+)\s+(\w+)$/) {
            zilch();
-           $c_table= $1;
-           $table_x{$c_table}{C}= $2;
-           $entrytype_x{$2}= '' unless exists $entrytype_x{$2};
+           $c_table= $2;
+           $table_x{$c_table}{T}= $1;
+           $table_x{$c_table}{C}= $3;
+           $entrytype_x{$3}= '' unless exists $entrytype_x{$3};
        } elsif (@i==0 && m/^Untabled$/) {
            zilch();
            $c_table= '';
@@ -291,7 +296,8 @@ foreach $c_table (sort keys %tables) {
        $any_eerr= 0;
        $any_eargc= 0;
        $pa_hint= '';
-       $pa_hint .= "$c_table " if length $c_table;
+       $pa_hint .= "$c_table " if length $c_table &&
+           !length $table_x{$c_table}{T};
        $pa_hint.= $c_entry;
        foreach $arg (@{ $r_entry->{A} }) {
            $n= $arg->{N};