+# boolean(CMD, SUMMARY, DETAIL, [[NAME,DESCR], [NAME,DESCR], ...], [RETURN, DESCR])
+#
+# Response is yes/no or failure
+sub boolean {
+ my $cmd = shift;
+ my $summary = shift;
+ my $detail = shift;
+ my $args = shift;
+ my $return = shift;
+
+ my $cmdc = $cmd;
+ $cmdc =~ s/-/_/g;
+ # Synchronous C API
+ push(@h, "/** \@brief $summary\n",
+ " *\n",
+ " * $detail\n",
+ " *\n",
+ map(" * \@param $_->[0] $_->[1]\n", @$args),
+ " * \@param $return->[0] $return->[1]\n",
+ " * \@return 0 on success, non-0 on error\n",
+ " */\n",
+ "int disorder_$cmdc(disorder_client *c",
+ map(", const char *$_->[0]", @$args),
+ ", int *$return->[0]);\n",
+ "\n");
+ push(@c, "int disorder_$cmdc(disorder_client *c",
+ map(", const char *$_->[0]", @$args),
+ ", int *$return->[0]) {\n",
+ " char *v;\n",
+ " int rc = disorder_simple(c, &v, \"$cmd\"",
+ map(", $_->[0]", @$args),
+ ", (char *)0);\n",
+ " if(rc) return rc;\n",
+ " if(!strcmp(v, \"yes\")) *$return->[0] = 1;\n",
+ " if(!strcmp(v, \"no\")) *$return->[0] = 0;\n",
+ " else {\n",
+ " disorder_error(0, \"malformed response to '$cmd' command\");\n",
+ " rc = -1;\n",
+ " }\n",
+ " xfree(v);\n",
+ " return 0;\n",
+ "}\n\n");
+
+ # Asynchronous C API
+ # TODO
+
+ # Python API
+ # TODO
+
+ # Java API
+ # TODO
+}
+