/* Copyright (C) 1998 Andre Noll <maan@tuebingen.mpg.de>, see file COPYING. */
-/** \file mixer.c A volume fader and alarm clock for OSS. */
+/** \file mixer.c A volume fader and alarm clock. */
#include <regex.h>
#include <lopsub.h>
#include "mixer.lsg.h"
#include "para.h"
+#include "lsu.h"
#include "fd.h"
#include "string.h"
#include "mix.h"
client_cmd("stop");
if (!fit || !fi_mood) /* nothing to do */
return 1;
- change_afs_mode(fi_mood);
for (;;) {
time(&t1);
if (wake_time_epoch <= t1 + fit)
(delay % 3600) / 60);
sleep(delay);
}
- client_cmd("play");
+ change_afs_mode(fi_mood);
+ if (sleep_mood) /* currently playing */
+ client_cmd("next");
+ else /* currently stopped */
+ client_cmd("play");
ret = fade(m, h, fiv, fit);
PARA_INFO_LOG("fade complete, returning\n");
return ret;
static int parse_and_merge_config_file(const struct lls_command *cmd)
{
int ret;
- int cf_argc;
- char **cf_argv;
- char *cf, *errctx = NULL;
- struct lls_parse_result **lprp, *cf_lpr, *merged_lpr;
- void *map;
- size_t sz;
- const char *subcmd_name;
-
- if (cmd == lls_cmd(0, mixer_suite)) {
- lprp = &lpr;
- subcmd_name = NULL;
- } else {
- lprp = &sub_lpr;
- subcmd_name = lls_command_name(cmd);
- }
- if (OPT_GIVEN(PARA_MIXER, CONFIG_FILE))
- cf = para_strdup(OPT_STRING_VAL(PARA_MIXER, CONFIG_FILE));
- else {
- char *home = para_homedir();
- cf = make_message("%s/.paraslash/mixer.conf", home);
- free(home);
- }
- ret = mmap_full_file(cf, O_RDONLY, &map, &sz, NULL);
- if (ret < 0) {
- if (ret != -E_EMPTY && ret != -ERRNO_TO_PARA_ERROR(ENOENT))
- goto free_cf;
- if (ret == -ERRNO_TO_PARA_ERROR(ENOENT) &&
- OPT_GIVEN(PARA_MIXER, CONFIG_FILE))
- goto free_cf;
- } else {
- ret = lls(lls_convert_config(map, sz, subcmd_name, &cf_argv, &errctx));
- para_munmap(map, sz);
- if (ret < 0)
- goto free_cf;
- cf_argc = ret;
- ret = lls(lls_parse(cf_argc, cf_argv, cmd, &cf_lpr, &errctx));
- lls_free_argv(cf_argv);
- if (ret < 0)
- goto free_cf;
- ret = lls(lls_merge(*lprp, cf_lpr, cmd, &merged_lpr, &errctx));
- lls_free_parse_result(cf_lpr, cmd);
- if (ret < 0)
- goto free_cf;
- lls_free_parse_result(*lprp, cmd);
- *lprp = merged_lpr;
- loglevel = OPT_UINT32_VAL(PARA_MIXER, LOGLEVEL);
- }
- ret = 1;
-free_cf:
- free(cf);
- if (errctx)
- PARA_ERROR_LOG("%s\n", errctx);
- free(errctx);
- return ret;
+ struct lls_parse_result **lprp = (cmd == lls_cmd(0, mixer_suite))?
+ &lpr : &sub_lpr;
+
+ ret = lsu_merge_config_file_options(OPT_STRING_VAL(PARA_MIXER,
+ CONFIG_FILE), "mixer.conf", lprp, cmd, mixer_suite,
+ 0 /* flags */);
+ if (ret < 0)
+ return ret;
+ loglevel = OPT_UINT32_VAL(PARA_MIXER, LOGLEVEL);
+ return 1;
}
/**
}
if (ret < 0)
goto close_mixer;
- ret = (*(mixer_subcommand_handler_t *)(lls_user_data(cmd)))(m ,h);
+ ret = (*(mixer_subcommand_handler_t *)(lls_user_data(cmd)))(m, h);
close_mixer:
m->close(&h);
free_sub_lpr: