annotate parser-mpcmd.c @ 34458:1e84148527ab

Add user event evMenu. (Unless the skin definable menu can't be properly handled with mouse over and cursor keys, only the default menu will show up.)
author ib
date Thu, 12 Jan 2012 14:21:55 +0000
parents 131d0e04a50b
children 389d43c448b3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
30429
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29850
diff changeset
1 /*
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29850
diff changeset
2 * This file is part of MPlayer.
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29850
diff changeset
3 *
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29850
diff changeset
4 * MPlayer is free software; you can redistribute it and/or modify
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29850
diff changeset
5 * it under the terms of the GNU General Public License as published by
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29850
diff changeset
6 * the Free Software Foundation; either version 2 of the License, or
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29850
diff changeset
7 * (at your option) any later version.
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29850
diff changeset
8 *
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29850
diff changeset
9 * MPlayer is distributed in the hope that it will be useful,
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29850
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29850
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29850
diff changeset
12 * GNU General Public License for more details.
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29850
diff changeset
13 *
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29850
diff changeset
14 * You should have received a copy of the GNU General Public License along
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29850
diff changeset
15 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29850
diff changeset
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
c1a3f1bbba26 Add license header to all top-level files missing them.
diego
parents: 29850
diff changeset
17 */
18265
1a14fde7680d Doxygen Attack! - Chapter 3
albeu
parents: 18209
diff changeset
18
1a14fde7680d Doxygen Attack! - Chapter 3
albeu
parents: 18209
diff changeset
19 /// \file
1a14fde7680d Doxygen Attack! - Chapter 3
albeu
parents: 18209
diff changeset
20 /// \ingroup ConfigParsers Playtree
1a14fde7680d Doxygen Attack! - Chapter 3
albeu
parents: 18209
diff changeset
21
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
22 #include "config.h"
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
23
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
24 #include <stdio.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
25 #include <stdlib.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
26 #include <string.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
27 #include <errno.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
28
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
29 #ifdef MP_DEBUG
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
30 #include <assert.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
31 #endif
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
32
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
33 #include "mp_msg.h"
21312
d78e7d5bc6d5 localization of parser-m*cmd.c messages
ptt
parents: 18265
diff changeset
34 #include "help_mp.h"
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
35 #include "m_option.h"
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
36 #include "m_config.h"
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
37 #include "playtree.h"
26263
65d1238b3631 Include some .h files in corresponding .c files
uau
parents: 25227
diff changeset
38 #include "parser-mpcmd.h"
30675
059153d06619 Add header for macosx_finder_args() instead of forward declaring it.
diego
parents: 30429
diff changeset
39 #include "osdep/macosx_finder_args.h"
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
40
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
41 static int mode = 0;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
42
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
43 #define GLOBAL 0
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
44 #define LOCAL 1
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
45 #define DROP_LOCAL 2
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
46
12543
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
47 #define dvd_range(a) (a>0 && a<256)
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
48 #define UNSET_GLOBAL (mode = LOCAL)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
49 // Use this 1 if you want to have only global option (no per file option)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
50 // #define UNSET_GLOBAL (mode = GLOBAL)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
51
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
52
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
53 static int is_entry_option(char *opt, char *param, play_tree_t** ret) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
54 play_tree_t* entry = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
55
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
56 *ret = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
57
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
58 if(strcasecmp(opt,"playlist") == 0) { // We handle playlist here
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
59 if(!param)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
60 return M_OPT_MISSING_PARAM;
12267
14bdbd687113 Fail if empty or nonexitant playlist
rtognimp
parents: 10595
diff changeset
61
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
62 entry = parse_playlist_file(param);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
63 if(!entry)
12267
14bdbd687113 Fail if empty or nonexitant playlist
rtognimp
parents: 10595
diff changeset
64 return -1;
14bdbd687113 Fail if empty or nonexitant playlist
rtognimp
parents: 10595
diff changeset
65 else {
14bdbd687113 Fail if empty or nonexitant playlist
rtognimp
parents: 10595
diff changeset
66 *ret=entry;
14bdbd687113 Fail if empty or nonexitant playlist
rtognimp
parents: 10595
diff changeset
67 return 1;
14bdbd687113 Fail if empty or nonexitant playlist
rtognimp
parents: 10595
diff changeset
68 }
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
69 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
70 return 0;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
71 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
72
10542
928c02fa9949 fix the bug where only the last file of the command line is found
pl
parents: 10513
diff changeset
73 static inline void add_entry(play_tree_t **last_parentp,
928c02fa9949 fix the bug where only the last file of the command line is found
pl
parents: 10513
diff changeset
74 play_tree_t **last_entryp, play_tree_t *entry) {
928c02fa9949 fix the bug where only the last file of the command line is found
pl
parents: 10513
diff changeset
75 if(*last_entryp == NULL)
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28051
diff changeset
76 play_tree_set_child(*last_parentp,entry);
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28051
diff changeset
77 else
10542
928c02fa9949 fix the bug where only the last file of the command line is found
pl
parents: 10513
diff changeset
78 play_tree_append_entry(*last_entryp,entry);
928c02fa9949 fix the bug where only the last file of the command line is found
pl
parents: 10513
diff changeset
79 *last_entryp = entry;
10513
b3f144efb724 c vs c++ syntax
alex
parents: 10397
diff changeset
80 }
b3f144efb724 c vs c++ syntax
alex
parents: 10397
diff changeset
81
18265
1a14fde7680d Doxygen Attack! - Chapter 3
albeu
parents: 18209
diff changeset
82 /// Setup the \ref Config from command line arguments and build a playtree.
1a14fde7680d Doxygen Attack! - Chapter 3
albeu
parents: 18209
diff changeset
83 /** \ingroup ConfigParsers
1a14fde7680d Doxygen Attack! - Chapter 3
albeu
parents: 18209
diff changeset
84 */
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
85 play_tree_t*
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
86 m_config_parse_mp_command_line(m_config_t *config, int argc, char **argv)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
87 {
12543
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
88 int i,j,start_title=-1,end_title=-1;
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
89 char *opt,*splitpos=NULL;
29850
93947ce0e2cb Support the range syntax (like dvd://2-5) also for dvdnav.
reimar
parents: 29263
diff changeset
90 char entbuf[15];
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
91 int no_more_opts = 0;
16345
feb16d0117c8 allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents: 15742
diff changeset
92 int opt_exit = 0; // flag indicating whether mplayer should exit without playing anything
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
93 play_tree_t *last_parent, *last_entry = NULL, *root;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
94
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
95 #ifdef MP_DEBUG
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
96 assert(config != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
97 assert(argv != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
98 assert(argc >= 1);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
99 #endif
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
100
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
101 config->mode = M_COMMAND_LINE;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
102 mode = GLOBAL;
27397
d47744b95b78 Give a CONFIG_ prefix to preprocessor directives that lacked one and
diego
parents: 27394
diff changeset
103 #ifdef CONFIG_MACOSX_FINDER
13909
07dadc3066f3 add support for macosx finder argument support (let you bundle mplayer to be a finder compliant .app) patch by Chris Roccati <roccati@pobox.com>
nplourde
parents: 12816
diff changeset
104 root=macosx_finder_args(config, argc, argv);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28051
diff changeset
105 if(root)
13909
07dadc3066f3 add support for macosx finder argument support (let you bundle mplayer to be a finder compliant .app) patch by Chris Roccati <roccati@pobox.com>
nplourde
parents: 12816
diff changeset
106 return root;
07dadc3066f3 add support for macosx finder argument support (let you bundle mplayer to be a finder compliant .app) patch by Chris Roccati <roccati@pobox.com>
nplourde
parents: 12816
diff changeset
107 #endif
07dadc3066f3 add support for macosx finder argument support (let you bundle mplayer to be a finder compliant .app) patch by Chris Roccati <roccati@pobox.com>
nplourde
parents: 12816
diff changeset
108
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
109 last_parent = root = play_tree_new();
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
110
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
111 for (i = 1; i < argc; i++) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
112 //next:
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
113 opt = argv[i];
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
114 /* check for -- (no more options id.) except --help! */
15245
4fdfe0860cc5 Make "mplayer -- --a" play the file --a instead of bailing out with a useless
reimar
parents: 14541
diff changeset
115 if ((*opt == '-') && (*(opt+1) == '-') && (*(opt+2) == 0))
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
116 {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
117 no_more_opts = 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
118 if (i+1 >= argc)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
119 {
21312
d78e7d5bc6d5 localization of parser-m*cmd.c messages
ptt
parents: 18265
diff changeset
120 mp_msg(MSGT_CFGPARSER, MSGL_ERR, MSGTR_NoFileGivenOnCommandLine);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
121 goto err_out;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
122 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
123 continue;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
124 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
125 if((opt[0] == '{') && (opt[1] == '\0'))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
126 {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
127 play_tree_t* entry = play_tree_new();
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
128 UNSET_GLOBAL;
8175
bf5d1da56ecd Basic support for random playing (-rnd and -nornd)
albeu
parents: 8164
diff changeset
129 if(last_parent->flags & PLAY_TREE_RND)
bf5d1da56ecd Basic support for random playing (-rnd and -nornd)
albeu
parents: 8164
diff changeset
130 entry->flags |= PLAY_TREE_RND;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
131 if(last_entry == NULL) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
132 play_tree_set_child(last_parent,entry);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
133 } else {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
134 play_tree_append_entry(last_entry,entry);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
135 last_entry = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
136 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
137 last_parent = entry;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
138 continue;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
139 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
140
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
141 if((opt[0] == '}') && (opt[1] == '\0'))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
142 {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
143 if( ! last_parent || ! last_parent->parent) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
144 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "too much }-\n");
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
145 goto err_out;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
146 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
147 last_entry = last_parent;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
148 last_parent = last_entry->parent;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
149 continue;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
150 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28051
diff changeset
151
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
152 if ((no_more_opts == 0) && (*opt == '-') && (*(opt+1) != 0)) /* option */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
153 {
13932
f845791e2823 fix: when doing -loop 0 -shuffle, the arg after shuffle was skipped
reimar
parents: 13909
diff changeset
154 int tmp = 0;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
155 /* remove trailing '-' */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
156 opt++;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
157
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
158 mp_msg(MSGT_CFGPARSER, MSGL_DBG3, "this_opt = option: %s\n", opt);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
159 // We handle here some specific option
17472
526abfe30498 Make -list-options work in both MPlayer and MEncoder.
albeu
parents: 16345
diff changeset
160 // Loop option when it apply to a group
526abfe30498 Make -list-options work in both MPlayer and MEncoder.
albeu
parents: 16345
diff changeset
161 if(strcasecmp(opt,"loop") == 0 &&
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
162 (! last_entry || last_entry->child) ) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
163 int l;
18097
df9633d451dc avoid crash when running "mplayer -loop" (dereferencing uninitialize pointer).
reimar
parents: 17472
diff changeset
164 char* end = NULL;
8400
587b62cd4119 10l noticed by "Puk Madick" <pingy@swirvemail.com>
arpi
parents: 8175
diff changeset
165 l = (i+1<argc) ? strtol(argv[i+1],&end,0) : 0;
18097
df9633d451dc avoid crash when running "mplayer -loop" (dereferencing uninitialize pointer).
reimar
parents: 17472
diff changeset
166 if(!end || *end != '\0') {
21312
d78e7d5bc6d5 localization of parser-m*cmd.c messages
ptt
parents: 18265
diff changeset
167 mp_msg(MSGT_CFGPARSER, MSGL_ERR, MSGTR_TheLoopOptionMustBeAnInteger, argv[i+1]);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
168 tmp = ERR_OUT_OF_RANGE;
9106
2c1aee5bb754 Ok, firstly fixed the bug in parser-mpcmd.c where it
arpi
parents: 8458
diff changeset
169 } else {
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
170 play_tree_t* pt = last_entry ? last_entry : last_parent;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
171 l = l <= 0 ? -1 : l;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
172 pt->loop = l;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
173 tmp = 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
174 }
8452
418b0017a8d2 -rnd --> -shuffle
diego
parents: 8426
diff changeset
175 } else if(strcasecmp(opt,"shuffle") == 0) {
8175
bf5d1da56ecd Basic support for random playing (-rnd and -nornd)
albeu
parents: 8164
diff changeset
176 if(last_entry && last_entry->child)
bf5d1da56ecd Basic support for random playing (-rnd and -nornd)
albeu
parents: 8164
diff changeset
177 last_entry->flags |= PLAY_TREE_RND;
bf5d1da56ecd Basic support for random playing (-rnd and -nornd)
albeu
parents: 8164
diff changeset
178 else
bf5d1da56ecd Basic support for random playing (-rnd and -nornd)
albeu
parents: 8164
diff changeset
179 last_parent->flags |= PLAY_TREE_RND;
8452
418b0017a8d2 -rnd --> -shuffle
diego
parents: 8426
diff changeset
180 } else if(strcasecmp(opt,"noshuffle") == 0) {
8175
bf5d1da56ecd Basic support for random playing (-rnd and -nornd)
albeu
parents: 8164
diff changeset
181 if(last_entry && last_entry->child)
bf5d1da56ecd Basic support for random playing (-rnd and -nornd)
albeu
parents: 8164
diff changeset
182 last_entry->flags &= ~PLAY_TREE_RND;
bf5d1da56ecd Basic support for random playing (-rnd and -nornd)
albeu
parents: 8164
diff changeset
183 else
bf5d1da56ecd Basic support for random playing (-rnd and -nornd)
albeu
parents: 8164
diff changeset
184 last_parent->flags &= ~PLAY_TREE_RND;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
185 } else {
25227
75837c33484b Mark more m_option_t uses as const
reimar
parents: 21312
diff changeset
186 const m_option_t* mp_opt = NULL;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
187 play_tree_t* entry = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
188
8458
92a7bf835d98 2*10l=20l
arpi
parents: 8452
diff changeset
189 tmp = is_entry_option(opt,(i+1<argc) ? argv[i + 1] : NULL,&entry);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
190 if(tmp > 0) { // It's an entry
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
191 if(entry) {
10542
928c02fa9949 fix the bug where only the last file of the command line is found
pl
parents: 10513
diff changeset
192 add_entry(&last_parent,&last_entry,entry);
8175
bf5d1da56ecd Basic support for random playing (-rnd and -nornd)
albeu
parents: 8164
diff changeset
193 if((last_parent->flags & PLAY_TREE_RND) && entry->child)
bf5d1da56ecd Basic support for random playing (-rnd and -nornd)
albeu
parents: 8164
diff changeset
194 entry->flags |= PLAY_TREE_RND;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
195 UNSET_GLOBAL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
196 } else if(mode == LOCAL) // Entry is empty we have to drop his params
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
197 mode = DROP_LOCAL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
198 } else if(tmp == 0) { // 'normal' options
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
199 mp_opt = m_config_get_option(config,opt);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
200 if (mp_opt != NULL) { // Option exist
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
201 if(mode == GLOBAL || (mp_opt->flags & M_OPT_GLOBAL))
8426
ca2813aafb35 more i+1<argc checks
arpi
parents: 8400
diff changeset
202 tmp = (i+1<argc) ? m_config_set_option(config, opt, argv[i + 1])
ca2813aafb35 more i+1<argc checks
arpi
parents: 8400
diff changeset
203 : m_config_set_option(config, opt, NULL);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
204 else {
8458
92a7bf835d98 2*10l=20l
arpi
parents: 8452
diff changeset
205 tmp = m_config_check_option(config, opt, (i+1<argc) ? argv[i + 1] : NULL);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
206 if(tmp >= 0 && mode != DROP_LOCAL) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
207 play_tree_t* pt = last_entry ? last_entry : last_parent;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
208 play_tree_set_param(pt,opt, argv[i + 1]);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
209 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
210 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
211 } else {
10595
522afd56703c 100l to albeu for his english grammar, and 10l to me becouse I noticed that lately (my backward compatibilty macro uses M_OPT_UNKNOWN)
alex
parents: 10594
diff changeset
212 tmp = M_OPT_UNKNOWN;
21312
d78e7d5bc6d5 localization of parser-m*cmd.c messages
ptt
parents: 18265
diff changeset
213 mp_msg(MSGT_CFGPARSER, MSGL_ERR, MSGTR_UnknownOptionOnCommandLine, opt);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
214 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
215 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
216 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
217
16345
feb16d0117c8 allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents: 15742
diff changeset
218 if (tmp <= M_OPT_EXIT) {
feb16d0117c8 allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents: 15742
diff changeset
219 opt_exit = 1;
feb16d0117c8 allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents: 15742
diff changeset
220 tmp = M_OPT_EXIT - tmp;
feb16d0117c8 allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents: 15742
diff changeset
221 } else
9792
4c34dc17e43d Exit when the option parser return M_OPT_EXIT
albeu
parents: 9747
diff changeset
222 if (tmp < 0) {
21312
d78e7d5bc6d5 localization of parser-m*cmd.c messages
ptt
parents: 18265
diff changeset
223 mp_msg(MSGT_CFGPARSER, MSGL_FATAL, MSGTR_ErrorParsingOptionOnCommandLine, opt);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
224 goto err_out;
9792
4c34dc17e43d Exit when the option parser return M_OPT_EXIT
albeu
parents: 9747
diff changeset
225 }
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
226 i += tmp;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
227 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
228 else /* filename */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
229 {
29850
93947ce0e2cb Support the range syntax (like dvd://2-5) also for dvdnav.
reimar
parents: 29263
diff changeset
230 int is_dvdnav = strstr(argv[i],"dvdnav://") != NULL;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
231 play_tree_t* entry = play_tree_new();
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
232 mp_msg(MSGT_CFGPARSER, MSGL_DBG2,"Adding file %s\n",argv[i]);
12543
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
233 // if required expand DVD filename entries like dvd://1-3 into component titles
29850
93947ce0e2cb Support the range syntax (like dvd://2-5) also for dvdnav.
reimar
parents: 29263
diff changeset
234 if ( strstr(argv[i],"dvd://") != NULL || is_dvdnav)
12543
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
235 {
29850
93947ce0e2cb Support the range syntax (like dvd://2-5) also for dvdnav.
reimar
parents: 29263
diff changeset
236 int offset = is_dvdnav ? 9 : 6;
93947ce0e2cb Support the range syntax (like dvd://2-5) also for dvdnav.
reimar
parents: 29263
diff changeset
237 splitpos=strstr(argv[i]+offset,"-");
12543
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
238 if(splitpos != NULL)
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
239 {
29850
93947ce0e2cb Support the range syntax (like dvd://2-5) also for dvdnav.
reimar
parents: 29263
diff changeset
240 start_title=strtol(argv[i]+offset,NULL,10);
12543
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
241 if (start_title<0) { //entries like dvd://-2 start title implied 1
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
242 end_title=abs(start_title);
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
243 start_title=1;
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
244 } else {
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
245 end_title=strtol(splitpos+1,NULL,10);
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
246 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28051
diff changeset
247
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28051
diff changeset
248 if (dvd_range(start_title) && dvd_range(end_title) && (start_title<end_title))
12543
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
249 {
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
250 for (j=start_title;j<=end_title;j++)
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
251 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28051
diff changeset
252 if (j!=start_title)
12543
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
253 entry=play_tree_new();
29850
93947ce0e2cb Support the range syntax (like dvd://2-5) also for dvdnav.
reimar
parents: 29263
diff changeset
254 snprintf(entbuf,sizeof(entbuf),is_dvdnav ? "dvdnav://%d" : "dvd://%d",j);
12543
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
255 play_tree_add_file(entry,entbuf);
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
256 add_entry(&last_parent,&last_entry,entry);
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
257 last_entry = entry;
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
258 }
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
259 } else {
21312
d78e7d5bc6d5 localization of parser-m*cmd.c messages
ptt
parents: 18265
diff changeset
260 mp_msg(MSGT_CFGPARSER, MSGL_ERR, MSGTR_InvalidPlayEntry, argv[i]);
12543
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
261 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 28051
diff changeset
262
12543
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
263 } else { // dvd:// or dvd://x entry
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
264 play_tree_add_file(entry,argv[i]);
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
265 }
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
266 } else {
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
267 play_tree_add_file(entry,argv[i]);
12543
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
268 }
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
269
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
270 // Lock stdin if it will be used as input
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
271 if(strcasecmp(argv[i],"-") == 0)
12816
fba780800efe -use-stdin renamed to -noconsolecontrols.
diego
parents: 12543
diff changeset
272 m_config_set_option(config,"noconsolecontrols",NULL);
10542
928c02fa9949 fix the bug where only the last file of the command line is found
pl
parents: 10513
diff changeset
273 add_entry(&last_parent,&last_entry,entry);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
274 UNSET_GLOBAL; // We start entry specific options
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
275
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
276 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
277 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
278
16345
feb16d0117c8 allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents: 15742
diff changeset
279 if (opt_exit)
feb16d0117c8 allow multiple help clauses on the command line, Patch by kiriuja " mplayer-patches AH en-directo POUM net "
gpoirier
parents: 15742
diff changeset
280 goto err_out;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
281 if(last_parent != root)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
282 mp_msg(MSGT_CFGPARSER, MSGL_ERR,"Missing }- ?\n");
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
283 return root;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
284
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
285 err_out:
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
286 play_tree_free(root,1);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
287 return NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
288 }