chiark / gitweb /
Lots of stuff seems to work
[chiark-tcl.git] / base / tcmdifgen
index 21833c1d1cdc415718eb508d313fcd813208f1e4..514dc019a113f50bc27db466e4b76bcc2b51830f 100755 (executable)
@@ -63,9 +63,9 @@ sub parse ($$) {
        } elsif (@i>=1 && defined $c_entryextra) {
            $entrytype_x{$c_entryextra} .= "  $_\n";
        } elsif (@i==1 && m/^[a-z].*$/ && defined $c_table) {
-           if (m/^\w+$/) {
+           if (m/^[-_0-9A-Za-z]+$/) {
                $c_entry= $_;
-           } elsif (m/^(\w+)\s+(\S.*)$/) {
+           } elsif (m/^([-_0-9A-Za-z]+)\s+(\S.*)$/) {
                $c_entry= $1;
                $tables{$c_table}{$c_entry}{I} .= ", $2";
            } else {
@@ -144,11 +144,12 @@ foreach $c_table (sort keys %tables) {
     $x_table= $table_x{$c_table};
     $op_tab= '';
 
-    foreach $c_entry (keys %$r_table) {
+    foreach $c_entry (sort keys %$r_table) {
+       $c_entry_c= $c_entry; $c_entry_c =~ y/-/_/;
        $r_entry= $r_table->{$c_entry};
-       $pa_decl= "int pa_${c_table}_${c_entry}(ClientData cd,".
+       $pa_decl= "int pa_${c_table}_${c_entry_c}(ClientData cd,".
            " Tcl_Interp *ip, int objc, Tcl_Obj *const *objv)";
-       $do_decl= "int do_${c_table}_${c_entry}(";
+       $do_decl= "int do_${c_table}_${c_entry_c}(";
        @do_al= ('ClientData cd', 'Tcl_Interp *ip');
        @do_aa= qw(cd ip);
        $pa_init= '';
@@ -226,7 +227,7 @@ foreach $c_table (sort keys %tables) {
            $pa_rslt .= "  Tcl_SetObjResult(ip, ret_$t(ip, result));\n";
        }
        $pa_body .= "\n";
-       $pa_body .= "  rc= do_${c_table}_${c_entry}(";
+       $pa_body .= "  rc= do_${c_table}_${c_entry_c}(";
        $pa_body .= join ', ', @do_aa;
        $pa_body .= ");\n";
        $pa_body .= "  if (rc) goto rc_err;\n";
@@ -268,7 +269,7 @@ foreach $c_table (sort keys %tables) {
 
        $op_tab .= sprintf("  { %-20s %-40s%s },\n",
                           "\"$c_entry\",",
-                          "pa_${c_table}_${c_entry}",
+                          "pa_${c_table}_${c_entry_c}",
                           $r_entry->{I});
     }
     if (length $c_table) {