X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/ad131c2579b5e9fda58e5d76bdb20d5949a711ee..a2364abbe6ed9e8e4dd71b9410f985acbf20b18f:/scripts/protocol diff --git a/scripts/protocol b/scripts/protocol index 2362f63..dec33e2 100755 --- a/scripts/protocol +++ b/scripts/protocol @@ -194,6 +194,7 @@ sub c_param_docs { sub c_return_docs { my $returns = shift; return () unless defined $returns; + my @docs = (); for my $return (@$returns) { my $type = $return->[0]; my $name = $return->[1]; @@ -203,20 +204,25 @@ sub c_return_docs { or $type eq 'integer' or $type eq 'time' or $type eq 'boolean') { - return (" * \@param ${name}p $descr\n"); + push(@docs, + " * \@param ${name}p $descr\n"); } elsif($type eq 'list' or $type eq 'body') { - return (" * \@param ${name}p $descr\n", - " * \@param n${name}p Number of elements in ${name}p\n"); + push(@docs, + " * \@param ${name}p $descr\n", + " * \@param n${name}p Number of elements in ${name}p\n"); } elsif($type eq 'pair-list') { - return (" * \@param ${name}p $descr\n"); + push(@docs, + " * \@param ${name}p $descr\n"); } elsif($type eq 'queue' or $type eq 'queue-one') { - return (" * \@param ${name}p $descr\n"); + push(@docs, + " * \@param ${name}p $descr\n"); } elsif($type eq 'user') { - return (); + # nothing } else { die "$0: c_return_docs: unknown type '$type'\n"; } } + return @docs; } # simple(CMD, SUMMARY, DETAIL, @@ -242,24 +248,16 @@ sub simple { $cmdc =~ s/-/_/g; } print STDERR "Processing $cmd... "; - # C argument types and conversions + # C argument types my @cargs = (); - my @conversions = (); for my $arg (@$args) { if($arg->[0] eq 'body' or $arg->[0] eq 'list') { push(@cargs, "disorder__$arg->[0]", $arg->[1], "n$arg->[1]"); } elsif($arg->[0] eq 'string') { push(@cargs, $arg->[1]); - } elsif($arg->[0] eq 'integer') { - push(@cargs, "buf_$arg->[1]"); - push(@conversions, - " char buf_$arg->[1]\[16];\n", - " byte_snprintf(buf_$arg->[1], sizeof buf_$arg->[1], \"%ld\", $arg->[1]);\n"); - } elsif($arg->[0] eq 'time') { - push(@cargs, "buf_$arg->[1]"); - push(@conversions, - " char buf_$arg->[1]\[16];\n", - " byte_snprintf(buf_$arg->[1], sizeof buf_$arg->[1], \"%lld\", (long long)$arg->[1]);\n"); + } elsif($arg->[0] eq 'integer' + or $arg->[0] eq 'time') { + push(@cargs, "disorder__$arg->[0]", "$arg->[1]"); } elsif($arg->[0] eq 'literal') { push(@cargs, "\"$arg->[1]\""); } else { @@ -287,8 +285,7 @@ sub simple { join(", ", "disorder_client *c", map(c_in_decl($_), @$args), map(c_out_decl($_), @$returns)), - ") {\n", - @conversions); + ") {\n"); if(!defined $returns or scalar @$returns == 0) { # Simple case push(@c, " return disorder_simple(", @@ -427,8 +424,7 @@ sub simple { "disorder_eclient_$variant *completed", map(c_in_decl($_), @$args), "void *v"), - ") {\n", - @conversions); + ") {\n"); push(@ac, " return simple(", join(", ", "c", @@ -484,17 +480,33 @@ our @gpl = ("/*\n", push(@h, @generated, @gpl, "#ifndef CLIENT_STUBS_H\n", "#define CLIENT_STUBS_H\n", + "/** \@file lib/client-stubs.h\n", + " * \@brief Generated client API\n", + " *\n", + " * Don't include this file directly - use \@ref lib/client.h instead.\n", + " */\n", "\n"); push(@c, @generated, @gpl, + "/** \@file lib/client-stubs.c\n", + " * \@brief Generated client API implementation\n", + " */\n", "\n"); push(@ah, @generated, @gpl, "#ifndef ECLIENT_STUBS_H\n", "#define ECLIENT_STUBS_H\n", + "/** \@file lib/client-stubs.h\n", + " * \@brief Generated asynchronous client API\n", + " *\n", + " * Don't include this file directly - use \@ref lib/eclient.h instead.\n", + " */\n", "\n"); push(@ac, @generated, @gpl, + "/** \@file lib/client-stubs.c\n", + " * \@brief Generated asynchronous client API implementation\n", + " */\n", "\n"); # The protocol ----------------------------------------------------------------