X-Git-Url: http://git.tuebingen.mpg.de/?a=blobdiff_plain;f=play.c;h=cab2504d263629f78c2703556d5f23331779cc5e;hb=c39cef35d2b96b224a5071ffa2dbb30e31cae5a0;hp=ce10a56bb9001f6675c18d06ce60323bbfeccf7e;hpb=639f0dd92d1fc446eaa7c4747a7b132be5741f7e;p=paraslash.git diff --git a/play.c b/play.c index ce10a56b..cab2504d 100644 --- a/play.c +++ b/play.c @@ -7,7 +7,6 @@ /** \file play.c Paraslash's standalone player. */ #include -#include #include #include #include @@ -794,14 +793,13 @@ static int com_help(struct play_task *pt, struct lls_parse_result *lpr) } EXPORT_PLAY_CMD_HANDLER(help); -static int com_info(struct play_task *pt, int argc, __a_unused char **argv) +static int com_info(struct play_task *pt, + __a_unused struct lls_parse_result *lpr) { char *buf; size_t sz; static char dflt[] = "[no information available]"; - if (argc != 1) - return -E_PLAY_SYNTAX; sz = xasprintf(&buf, "playlist_pos: %u\npath: %s\n", pt->current_file, conf.inputs[pt->current_file]); btr_add_output(buf, sz, pt->btrn); @@ -809,6 +807,7 @@ static int com_info(struct play_task *pt, int argc, __a_unused char **argv) btr_add_output_dont_free(buf, strlen(buf), pt->btrn); return 0; } +EXPORT_PLAY_CMD_HANDLER(info); static void list_file(struct play_task *pt, int num) { @@ -837,35 +836,32 @@ static int com_tasks(struct play_task *pt, int argc, __a_unused char **argv) return 0; } -static int com_ls(struct play_task *pt, int argc, char **argv) +static int com_ls(struct play_task *pt, + __a_unused struct lls_parse_result *lpr) { - int i, j, ret; + int i; - if (argc == 1) { - FOR_EACH_PLAYLIST_FILE(i) - list_file(pt, i); - return 0; - } - for (j = 1; j < argc; j++) { - FOR_EACH_PLAYLIST_FILE(i) { - ret = fnmatch(argv[j], conf.inputs[i], 0); - if (ret == 0) /* match */ - list_file(pt, i); - } - } + FOR_EACH_PLAYLIST_FILE(i) + list_file(pt, i); return 0; } +EXPORT_PLAY_CMD_HANDLER(ls); -static int com_play(struct play_task *pt, int argc, char **argv) +static int com_play(struct play_task *pt, struct lls_parse_result *lpr) { int32_t x; int ret; - char state; + char state, *errctx; - if (argc > 2) - return -E_PLAY_SYNTAX; + ret = lls(lls_check_arg_count(lpr, 0, 1, &errctx)); + if (ret < 0) { + if (errctx) + PARA_ERROR_LOG("%s\n", errctx); + free(errctx); + return ret; + } state = get_playback_state(pt); - if (argc == 1) { + if (lls_num_inputs(lpr) == 0) { if (state == 'P') return 0; pt->next_file = pt->current_file; @@ -873,7 +869,7 @@ static int com_play(struct play_task *pt, int argc, char **argv) pt->playing = true; return 0; } - ret = para_atoi32(argv[1], &x); + ret = para_atoi32(lls_input(0, lpr), &x); if (ret < 0) return ret; if (x < 0 || x >= conf.inputs_num) @@ -883,14 +879,14 @@ static int com_play(struct play_task *pt, int argc, char **argv) pt->rq = CRT_FILE_CHANGE; return 0; } +EXPORT_PLAY_CMD_HANDLER(play); -static int com_pause(struct play_task *pt, int argc, __a_unused char **argv) +static int com_pause(struct play_task *pt, + __a_unused struct lls_parse_result *lpr) { char state; long unsigned seconds, ss; - if (argc != 1) - return -E_PLAY_SYNTAX; state = get_playback_state(pt); pt->playing = false; if (state != 'P') @@ -906,14 +902,13 @@ static int com_pause(struct play_task *pt, int argc, __a_unused char **argv) kill_stream(pt); return 0; } +EXPORT_PLAY_CMD_HANDLER(pause); -static int com_prev(struct play_task *pt, int argc, __a_unused char **argv) - +static int com_prev(struct play_task *pt, + __a_unused struct lls_parse_result *lpr) { int ret; - if (argc != 1) - return -E_PLAY_SYNTAX; ret = previous_valid_file(pt); if (ret < 0) return ret; @@ -923,6 +918,7 @@ static int com_prev(struct play_task *pt, int argc, __a_unused char **argv) pt->start_chunk = 0; return 0; } +EXPORT_PLAY_CMD_HANDLER(prev); static int com_next(struct play_task *pt, __a_unused struct lls_parse_result *lpr) @@ -948,22 +944,28 @@ static int com_fg(struct play_task *pt, } EXPORT_PLAY_CMD_HANDLER(fg); -static int com_bg(struct play_task *pt, int argc, __a_unused char **argv) +static int com_bg(struct play_task *pt, + __a_unused struct lls_parse_result *lpr) { - if (argc != 1) - return -E_PLAY_SYNTAX; pt->background = true; return 0; } +EXPORT_PLAY_CMD_HANDLER(bg); -static int com_jmp(struct play_task *pt, int argc, char **argv) +static int com_jmp(struct play_task *pt, struct lls_parse_result *lpr) { int32_t percent; int ret; + char *errctx; - if (argc != 2) - return -E_PLAY_SYNTAX; - ret = para_atoi32(argv[1], &percent); + ret = lls(lls_check_arg_count(lpr, 1, 1, &errctx)); + if (ret < 0) { + if (errctx) + PARA_ERROR_LOG("%s\n", errctx); + free(errctx); + return ret; + } + ret = para_atoi32(lls_input(0, lpr), &percent); if (ret < 0) return ret; if (percent < 0 || percent > 100) @@ -979,15 +981,22 @@ static int com_jmp(struct play_task *pt, int argc, char **argv) kill_stream(pt); return 0; } +EXPORT_PLAY_CMD_HANDLER(jmp); -static int com_ff(struct play_task *pt, int argc, char **argv) +static int com_ff(struct play_task *pt, struct lls_parse_result *lpr) { int32_t seconds; + char *errctx; int ret; - if (argc != 2) - return -E_PLAY_SYNTAX; - ret = para_atoi32(argv[1], &seconds); + ret = lls(lls_check_arg_count(lpr, 1, 1, &errctx)); + if (ret < 0) { + if (errctx) + PARA_ERROR_LOG("%s\n", errctx); + free(errctx); + return ret; + } + ret = para_atoi32(lls_input(0, lpr), &seconds); if (ret < 0) return ret; if (pt->playing && !pt->fn.btrn) @@ -1004,6 +1013,7 @@ static int com_ff(struct play_task *pt, int argc, char **argv) kill_stream(pt); return 0; } +EXPORT_PLAY_CMD_HANDLER(ff); static int run_command(char *line, struct play_task *pt) {