-static void exp_prefs(int attribute((unused)) nargs,
- char **args,
- cgi_sink *output,
- void *u) {
- dcgi_state *ds = u;
- dcgi_state substate;
- struct kvp *k;
- const char *file = expandarg(args[0], ds);
-
- memset(&substate, 0, sizeof substate);
- substate.g = ds->g;
- substate.first = 1;
- if(disorder_prefs(ds->g->client, file, &k)) return;
- while(k) {
- substate.last = !k->next;
- substate.pref = k;
- expandstring(output, args[1], &substate);
- ++substate.index;
- k = k->next;
- substate.first = 0;
- }
-}
-
-static void exp_pref(int attribute((unused)) nargs,
- char **args,
- cgi_sink *output,
- void *u) {
- char *value;
- dcgi_state *ds = u;
-
- if(!disorder_get(ds->g->client, args[0], args[1], &value))
- cgi_output(output, "%s", value);
-}
-
-static void exp_if(int nargs,
- char **args,
- cgi_sink *output,
- void *u) {
- dcgi_state *ds = u;
- int n = str2bool(expandarg(args[0], ds)) ? 1 : 2;
-
- if(n < nargs)
- expandstring(output, args[n], ds);
-}
-
-static void exp_and(int nargs,
- char **args,
- cgi_sink *output,
- void *u) {
- dcgi_state *ds = u;
- int n, result = 1;
-
- for(n = 0; n < nargs; ++n)
- if(!str2bool(expandarg(args[n], ds))) {
- result = 0;
- break;
- }
- sink_printf(output->sink, "%s", bool2str(result));
-}
-
-static void exp_or(int nargs,
- char **args,
- cgi_sink *output,
- void *u) {
- dcgi_state *ds = u;
- int n, result = 0;
-
- for(n = 0; n < nargs; ++n)
- if(str2bool(expandarg(args[n], ds))) {
- result = 1;
- break;
- }
- sink_printf(output->sink, "%s", bool2str(result));
-}
-
-static void exp_not(int attribute((unused)) nargs,
- char **args,
- cgi_sink *output,
- void attribute((unused)) *u) {
- sink_printf(output->sink, "%s", bool2str(!str2bool(args[0])));
-}
-
-static void exp_isplaying(int attribute((unused)) nargs,
- char attribute((unused)) **args,
- cgi_sink *output,
- void *u) {
- dcgi_state *ds = u;
-
- lookups(ds, DC_PLAYING);
- sink_printf(output->sink, "%s", bool2str(!!ds->g->playing));
-}
-
-static void exp_isqueue(int attribute((unused)) nargs,
- char attribute((unused)) **args,
- cgi_sink *output,
- void *u) {
- dcgi_state *ds = u;
-
- lookups(ds, DC_QUEUE);
- sink_printf(output->sink, "%s", bool2str(!!ds->g->queue));
-}
-
-static void exp_isrecent(int attribute((unused)) nargs,
- char attribute((unused)) **args,
- cgi_sink *output,
- void *u) {
- dcgi_state *ds = u;
-
- lookups(ds, DC_RECENT);
- sink_printf(output->sink, "%s", bool2str(!!ds->g->recent));
-}
-
-static void exp_isnew(int attribute((unused)) nargs,
- char attribute((unused)) **args,
- cgi_sink *output,
- void *u) {
- dcgi_state *ds = u;
-
- lookups(ds, DC_NEW);
- sink_printf(output->sink, "%s", bool2str(!!ds->g->nnew));
-}
-
-static void exp_id(int attribute((unused)) nargs,
- char attribute((unused)) **args,
- cgi_sink *output,
- void *u) {
- dcgi_state *ds = u;
-
- if(ds->track)
- cgi_output(output, "%s", ds->track->id);
-}
-
-static void exp_track(int attribute((unused)) nargs,
- char attribute((unused)) **args,
- cgi_sink *output,
- void *u) {
- dcgi_state *ds = u;
-
- if(ds->track)
- cgi_output(output, "%s", ds->track->track);
-}
-
-static void exp_parity(int attribute((unused)) nargs,
- char attribute((unused)) **args,
- cgi_sink *output,
- void *u) {
- dcgi_state *ds = u;
-
- cgi_output(output, "%s", ds->index % 2 ? "odd" : "even");
-}
-
-static void exp_comment(int attribute((unused)) nargs,
- char attribute((unused)) **args,
- cgi_sink attribute((unused)) *output,
- void attribute((unused)) *u) {
- /* do nothing */
-}
-
-static void exp_prefname(int attribute((unused)) nargs,
- char attribute((unused)) **args,
- cgi_sink *output,
- void *u) {
- dcgi_state *ds = u;
-
- if(ds->pref && ds->pref->name)
- cgi_output(output, "%s", ds->pref->name);
-}
-
-static void exp_prefvalue(int attribute((unused)) nargs,
- char attribute((unused)) **args,
- cgi_sink *output,
- void *u) {
- dcgi_state *ds = u;
-
- if(ds->pref && ds->pref->value)
- cgi_output(output, "%s", ds->pref->value);
-}
-