play: Convert com_jmp() to lopsub.
authorAndre Noll <maan@tuebingen.mpg.de>
Mon, 28 Mar 2016 16:55:58 +0000 (16:55 +0000)
committerAndre Noll <maan@tuebingen.mpg.de>
Sun, 26 Mar 2017 09:02:28 +0000 (11:02 +0200)
The command handler needs to check that there is a single argument
which is an integer between 0 and 100. This check needs to be modified
to use the lopsub primitives rather than accessing the argument
vector directly.

Unfortunately we can not perform the conversion of the string argument
into an int value with lopsub since the given percentage is an unnamed
option rather than an argument of an option.

The patch also rewords the summary and the help text of the jmp
subcommand slightly to be more clear.

m4/lls/play_cmd.suite.m4
play.c
play.cmd

index d2f12a0..744e793 100644 (file)
@@ -33,3 +33,10 @@ caption = list of commands
                key bindings map the colon key to this command, so pressing : in
                command mode activates insert mode.
        [/description]
+
+[subcommand jmp]
+       purpose = change playback position
+       non-opts-name = percent
+       [description]
+               The percent argument must be an integer between 0 and 100, inclusively.
+       [/description]
diff --git a/play.c b/play.c
index 2b43f35..9527075 100644 (file)
--- a/play.c
+++ b/play.c
@@ -955,14 +955,20 @@ static int com_bg(struct play_task *pt,
 }
 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)
@@ -978,6 +984,7 @@ 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)
 {
index d6b1396..8e2fb6a 100644 (file)
--- a/play.cmd
+++ b/play.cmd
@@ -2,11 +2,6 @@ BN: play
 SF: play.c
 SN: list of commands
 ---
-N: jmp
-D: Jump to position in current file.
-U: jmp <percent>
-H: The <percent> argument should be an integer between 0 and 100.
----
 N: ff
 D: Jump forwards or backwards.
 U: ff <seconds>