return len;
}
-/** @brief Marker for a command body */
const char disorder__body[1];
-
-/** @brief Marker for a list of args */
const char disorder__list[1];
+const char disorder__integer[1];
+const char disorder__time[1];
/*
Local Variables:
/** @brief Marker for a list of args */
extern const char disorder__list[1];
+/** @brief Marker for an integer */
+extern const char disorder__integer[1];
+
+/** @brief Marker for a timestamp */
+extern const char disorder__time[1];
+
#endif /* CLIENT_COMMON_H */
/*
}
int disorder_move(disorder_client *c, const char *track, long delta) {
- char buf_delta[16];
- byte_snprintf(buf_delta, sizeof buf_delta, "%ld", delta);
- return disorder_simple(c, NULL, "move", track, buf_delta, (char *)NULL);
+ return disorder_simple(c, NULL, "move", track, disorder__integer, delta, (char *)NULL);
}
int disorder_moveafter(disorder_client *c, const char *target, char **ids, int nids) {
}
int disorder_new_tracks(disorder_client *c, long max, char ***tracksp, int *ntracksp) {
- char buf_max[16];
- byte_snprintf(buf_max, sizeof buf_max, "%ld", max);
- int rc = disorder_simple(c, NULL, "new", buf_max, (char *)NULL);
+ int rc = disorder_simple(c, NULL, "new", disorder__integer, max, (char *)NULL);
if(rc)
return rc;
if(readlist(c, tracksp, ntracksp))
}
int disorder_schedule_add_play(disorder_client *c, time_t when, const char *priority, const char *track) {
- char buf_when[16];
- byte_snprintf(buf_when, sizeof buf_when, "%lld", (long long)when);
- return disorder_simple(c, NULL, "schedule-add", buf_when, priority, "play", track, (char *)NULL);
+ return disorder_simple(c, NULL, "schedule-add", disorder__time, when, priority, "play", track, (char *)NULL);
}
int disorder_schedule_add_set_global(disorder_client *c, time_t when, const char *priority, const char *pref, const char *value) {
- char buf_when[16];
- byte_snprintf(buf_when, sizeof buf_when, "%lld", (long long)when);
- return disorder_simple(c, NULL, "schedule-add", buf_when, priority, "set-global", pref, value, (char *)NULL);
+ return disorder_simple(c, NULL, "schedule-add", disorder__time, when, priority, "set-global", pref, value, (char *)NULL);
}
int disorder_schedule_add_unset_global(disorder_client *c, time_t when, const char *priority, const char *pref) {
- char buf_when[16];
- byte_snprintf(buf_when, sizeof buf_when, "%lld", (long long)when);
- return disorder_simple(c, NULL, "schedule-add", buf_when, priority, "set-global", pref, (char *)NULL);
+ return disorder_simple(c, NULL, "schedule-add", disorder__time, when, priority, "set-global", pref, (char *)NULL);
}
int disorder_schedule_del(disorder_client *c, const char *event) {
}
int disorder_set_volume(disorder_client *c, long left, long right) {
- char buf_left[16];
- byte_snprintf(buf_left, sizeof buf_left, "%ld", left);
- char buf_right[16];
- byte_snprintf(buf_right, sizeof buf_right, "%ld", right);
- return disorder_simple(c, NULL, "volume", buf_left, buf_right, (char *)NULL);
+ return disorder_simple(c, NULL, "volume", disorder__integer, left, disorder__integer, right, (char *)NULL);
}
int disorder_get_volume(disorder_client *c, long *leftp, long *rightp) {
* then the list is assumed to be NULL-terminated. This may be used
* any number of times.
*
+ * Put @ref disorder__integer in the argument list followed by a long to
+ * send its value in decimal. This may be used any number of times.
+ *
+ * Put @ref disorder__time in the argument list followed by a time_t
+ * to send its value in decimal. This may be used any number of
+ * times.
+ *
* Usually you would call this via one of the following interfaces:
* - disorder_simple()
*/
dynstr_append(&d, ' ');
dynstr_append_string(&d, quoteutf8(arg));
}
+ } else if(arg == disorder__integer) {
+ long n = va_arg(ap, long);
+ char buffer[16];
+ snprintf(buffer, sizeof buffer, "%ld", n);
+ dynstr_append(&d, ' ');
+ dynstr_append_string(&d, buffer);
+ } else if(arg == disorder__time) {
+ time_t n = va_arg(ap, time_t);
+ char buffer[16];
+ snprintf(buffer, sizeof buffer, "%lld", (long long)n);
+ dynstr_append(&d, ' ');
+ dynstr_append_string(&d, buffer);
} else {
dynstr_append(&d, ' ');
dynstr_append_string(&d, quoteutf8(arg));
}
int disorder_eclient_move(disorder_eclient *c, disorder_eclient_no_response *completed, const char *track, long delta, void *v) {
- char buf_delta[16];
- byte_snprintf(buf_delta, sizeof buf_delta, "%ld", delta);
- return simple(c, no_response_opcallback, (void (*)())completed, v, "move", track, buf_delta, (char *)0);
+ return simple(c, no_response_opcallback, (void (*)())completed, v, "move", track, disorder__integer, delta, (char *)0);
}
int disorder_eclient_moveafter(disorder_eclient *c, disorder_eclient_no_response *completed, const char *target, char **ids, int nids, void *v) {
}
int disorder_eclient_new_tracks(disorder_eclient *c, disorder_eclient_list_response *completed, long max, void *v) {
- char buf_max[16];
- byte_snprintf(buf_max, sizeof buf_max, "%ld", max);
- return simple(c, list_response_opcallback, (void (*)())completed, v, "new", buf_max, (char *)0);
+ return simple(c, list_response_opcallback, (void (*)())completed, v, "new", disorder__integer, max, (char *)0);
}
int disorder_eclient_nop(disorder_eclient *c, disorder_eclient_no_response *completed, void *v) {
}
int disorder_eclient_schedule_add_play(disorder_eclient *c, disorder_eclient_no_response *completed, time_t when, const char *priority, const char *track, void *v) {
- char buf_when[16];
- byte_snprintf(buf_when, sizeof buf_when, "%lld", (long long)when);
- return simple(c, no_response_opcallback, (void (*)())completed, v, "schedule-add", buf_when, priority, "play", track, (char *)0);
+ return simple(c, no_response_opcallback, (void (*)())completed, v, "schedule-add", disorder__time, when, priority, "play", track, (char *)0);
}
int disorder_eclient_schedule_add_set_global(disorder_eclient *c, disorder_eclient_no_response *completed, time_t when, const char *priority, const char *pref, const char *value, void *v) {
- char buf_when[16];
- byte_snprintf(buf_when, sizeof buf_when, "%lld", (long long)when);
- return simple(c, no_response_opcallback, (void (*)())completed, v, "schedule-add", buf_when, priority, "set-global", pref, value, (char *)0);
+ return simple(c, no_response_opcallback, (void (*)())completed, v, "schedule-add", disorder__time, when, priority, "set-global", pref, value, (char *)0);
}
int disorder_eclient_schedule_add_unset_global(disorder_eclient *c, disorder_eclient_no_response *completed, time_t when, const char *priority, const char *pref, void *v) {
- char buf_when[16];
- byte_snprintf(buf_when, sizeof buf_when, "%lld", (long long)when);
- return simple(c, no_response_opcallback, (void (*)())completed, v, "schedule-add", buf_when, priority, "set-global", pref, (char *)0);
+ return simple(c, no_response_opcallback, (void (*)())completed, v, "schedule-add", disorder__time, when, priority, "set-global", pref, (char *)0);
}
int disorder_eclient_schedule_del(disorder_eclient *c, disorder_eclient_no_response *completed, const char *event, void *v) {
}
int disorder_eclient_set_volume(disorder_eclient *c, disorder_eclient_no_response *completed, long left, long right, void *v) {
- char buf_left[16];
- byte_snprintf(buf_left, sizeof buf_left, "%ld", left);
- char buf_right[16];
- byte_snprintf(buf_right, sizeof buf_right, "%ld", right);
- return simple(c, no_response_opcallback, (void (*)())completed, v, "volume", buf_left, buf_right, (char *)0);
+ return simple(c, no_response_opcallback, (void (*)())completed, v, "volume", disorder__integer, left, disorder__integer, right, (char *)0);
}
int disorder_eclient_get_volume(disorder_eclient *c, disorder_eclient_pair_integer_response *completed, void *v) {
} else if(arg == disorder__body) {
body = va_arg(ap, char **);
nbody = va_arg(ap, int);
+ } else if(arg == disorder__integer) {
+ long n = va_arg(ap, long);
+ char buffer[16];
+ snprintf(buffer, sizeof buffer, "%ld", n);
+ vector_append(&vec, xstrdup(buffer));
+ } else if(arg == disorder__time) {
+ time_t n = va_arg(ap, time_t);
+ char buffer[16];
+ snprintf(buffer, sizeof buffer, "%lld", (long long)n);
+ vector_append(&vec, xstrdup(buffer));
} else
vector_append(&vec, arg);
}
$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 {
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(",
"disorder_eclient_$variant *completed",
map(c_in_decl($_), @$args),
"void *v"),
- ") {\n",
- @conversions);
+ ") {\n");
push(@ac, " return simple(",
join(", ",
"c",