our @h = ();
our @c = ();
+# Write(PATH, LINES)
+#
+# Write array ref LINES to file PATH.
sub Write {
my $path = shift;
my $lines = shift;
# Command classes -------------------------------------------------------------
+# c_in_decl([TYPE, NAME])
+#
+# Return the C declaration for an input parameter of type TYPE with
+# name NAME.
sub c_in_decl {
my $arg = shift;
}
}
+# c_out_decl([TYPE, NAME])
+#
+# Return the C declaration for an output (reference) parameter of type
+# TYPE with name NAME.
sub c_out_decl {
my $arg = shift;
}
}
+# c_param_docs([TYPE, NAME})
+#
+# Return the doc string for a C input parameter.
sub c_param_docs {
my $args = shift;
my @d = ();
return @d;
}
+# c_param_docs([TYPE, NAME})
+#
+# Return the doc string for a C output parameter.
sub c_return_docs {
my $return = shift;
return () unless defined $return;
join(", ", "c", 0, "\"$cmd\"", @cargs, "(char *)0"),
");\n");
} elsif($return->[0] eq 'string') {
- push(@c, " return dequote(disorder_simple(c, $return->[1]p, \"$cmd\"",
- map(", $_", @cargs),
- ", (char *)0), $return->[1]p);\n");
+ push(@c, " return dequote(disorder_simple(",
+ join(", ", "c", "$return->[1]p", "\"$cmd\"",
+ @cargs,
+ "(char *)0"),
+ "), $return->[1]p);\n");
} elsif($return->[0] eq 'boolean') {
push(@c, " char *v;\n",
" int rc;\n",
- " if((rc = disorder_simple(c, &v, \"$cmd\"",
- map(", $_", @cargs),
- ", (char *)0)))\n",
+ " if((rc = disorder_simple(",
+ join(", ", "c", "&v", "\"$cmd\"",
+ @cargs,
+ "(char *)0"),
+ ")))\n",
" return rc;\n",
" return boolean(\"$cmd\", v, $return->[1]p);\n");
} elsif($return->[0] eq 'integer') {
push(@c, " char *v;\n",
" int rc;\n",
"\n",
- " if((rc = disorder_simple(c, &v, \"$cmd\"",
- map(", $_", @cargs),
- ", (char *)0)))\n",
+ " if((rc = disorder_simple(",
+ join(", ", "c", "&v", "\"$cmd\"",
+ @cargs,
+ "(char *)0"),
+ ")))\n",
" return rc;\n",
" *$return->[1]p = atol(v);\n",
" xfree(v);\n",
} elsif($return->[0] eq 'user') {
push(@c, " char *u;\n",
" int rc;\n",
- " if((rc = disorder_simple(c, &u, \"$cmd\"",
- map(", $_", @cargs),
- " )))\n",
+ " if((rc = disorder_simple(",
+ join(", ", "c", "&u", "\"$cmd\"",
+ @cargs, "(char *)0"),
+ ")))\n",
" return rc;\n",
" c->user = u;\n",
" return 0;\n");
} elsif($return->[0] eq 'body') {
- push(@c, " return disorder_simple_list(c, $return->[1]p, n$return->[1]p, \"$cmd\"",
- map(", $_", @cargs),
- ", (char *)0);\n");
+ push(@c, " return disorder_simple_list(",
+ join(", ", "c", "$return->[1]p", "n$return->[1]p", "\"$cmd\"",
+ @cargs,
+ "(char *)0"),
+ ");\n");
} elsif($return->[0] eq 'queue') {
push(@c, " return somequeue(c, \"$cmd\", $return->[1]p);\n");
} elsif($return->[0] eq 'queue-one') {
push(@c, " return onequeue(c, \"$cmd\", $return->[1]p);\n");
} elsif($return->[0] eq 'pair-list') {
- push(@c, " return pairlist(c, $return->[1]p, \"$cmd\"",
- map(", $_", @cargs), ", (char *)0);\n");
+ push(@c, " return pairlist(",
+ join(", ", "c", "$return->[1]p", "\"$cmd\"",
+ @cargs,
+ "(char *)0"),
+ ");\n");
} else {
die "$0: C API: unknown type '$return->[0]' for '$cmd'\n";
}