annotate parser-mpcmd.c @ 14685:4b02f759f529

small reordering to make future 'multiple files' changes more modular, puts single file loading separate from global option loading in the begginning. patch by Oded Shimon
author reynaldo
date Sat, 12 Feb 2005 15:11:02 +0000
parents bef9d6dc2333
children 4fdfe0860cc5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
1 #include "config.h"
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
2
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
3 #include <stdio.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
4 #include <stdlib.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
5 #include <string.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
6 #include <errno.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
7
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
8 #ifdef MP_DEBUG
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
9 #include <assert.h>
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
10 #endif
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
11
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
12 #include "mp_msg.h"
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
13 #include "m_option.h"
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
14 #include "m_config.h"
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
15 #include "playtree.h"
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
16
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
17 static int recursion_depth = 0;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
18 static int mode = 0;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
19
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
20 #define GLOBAL 0
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
21 #define LOCAL 1
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
22 #define DROP_LOCAL 2
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
23
12543
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
24 #define dvd_range(a) (a>0 && a<256)
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
25 #define UNSET_GLOBAL (mode = LOCAL)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
26 // 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
27 // #define UNSET_GLOBAL (mode = GLOBAL)
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
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
30 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
31 play_tree_t* entry = NULL;
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 *ret = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
34
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
35 if(strcasecmp(opt,"playlist") == 0) { // We handle playlist here
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
36 if(!param)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
37 return M_OPT_MISSING_PARAM;
12267
14bdbd687113 Fail if empty or nonexitant playlist
rtognimp
parents: 10595
diff changeset
38
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
39 entry = parse_playlist_file(param);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
40 if(!entry)
12267
14bdbd687113 Fail if empty or nonexitant playlist
rtognimp
parents: 10595
diff changeset
41 return -1;
14bdbd687113 Fail if empty or nonexitant playlist
rtognimp
parents: 10595
diff changeset
42 else {
14bdbd687113 Fail if empty or nonexitant playlist
rtognimp
parents: 10595
diff changeset
43 *ret=entry;
14bdbd687113 Fail if empty or nonexitant playlist
rtognimp
parents: 10595
diff changeset
44 return 1;
14bdbd687113 Fail if empty or nonexitant playlist
rtognimp
parents: 10595
diff changeset
45 }
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
46 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
47 return 0;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
48 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
49
10542
928c02fa9949 fix the bug where only the last file of the command line is found
pl
parents: 10513
diff changeset
50 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
51 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
52 if(*last_entryp == NULL)
928c02fa9949 fix the bug where only the last file of the command line is found
pl
parents: 10513
diff changeset
53 play_tree_set_child(*last_parentp,entry);
10513
b3f144efb724 c vs c++ syntax
alex
parents: 10397
diff changeset
54 else
10542
928c02fa9949 fix the bug where only the last file of the command line is found
pl
parents: 10513
diff changeset
55 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
56 *last_entryp = entry;
10513
b3f144efb724 c vs c++ syntax
alex
parents: 10397
diff changeset
57 }
b3f144efb724 c vs c++ syntax
alex
parents: 10397
diff changeset
58
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
59 play_tree_t*
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
60 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
61 {
12543
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
62 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
63 char *opt,*splitpos=NULL;
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
64 char entbuf[10];
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
65 int no_more_opts = 0;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
66 play_tree_t *last_parent, *last_entry = NULL, *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
67 #ifdef MACOSX_FINDER_SUPPORT
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
68 extern play_tree_t *macosx_finder_args(m_config_t *, int , char **);
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
69 #endif
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
70
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
71 #ifdef MP_DEBUG
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
72 assert(config != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
73 assert(argv != NULL);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
74 assert(argc >= 1);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
75 #endif
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
76
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
77 config->mode = M_COMMAND_LINE;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
78 mode = GLOBAL;
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
79 #ifdef MACOSX_FINDER_SUPPORT
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
80 root=macosx_finder_args(config, argc, argv);
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
81 if(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
82 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
83 #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
84
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
85 last_parent = root = play_tree_new();
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
86 /* in order to work recursion detection properly in parse_config_file */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
87 ++recursion_depth;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
88
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
89 for (i = 1; i < argc; i++) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
90 //next:
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
91 opt = argv[i];
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
92 /* check for -- (no more options id.) except --help! */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
93 if ((*opt == '-') && (*(opt+1) == '-') && (*(opt+2) != 'h'))
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 no_more_opts = 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
96 if (i+1 >= argc)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
97 {
14541
bef9d6dc2333 Clarify confusing error message.
diego
parents: 13932
diff changeset
98 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "'--' indicates no more options, but no filename was given on the command line.\n");
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
99 goto err_out;
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 continue;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
102 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
103 if((opt[0] == '{') && (opt[1] == '\0'))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
104 {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
105 play_tree_t* entry = play_tree_new();
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
106 UNSET_GLOBAL;
8175
bf5d1da56ecd Basic support for random playing (-rnd and -nornd)
albeu
parents: 8164
diff changeset
107 if(last_parent->flags & PLAY_TREE_RND)
bf5d1da56ecd Basic support for random playing (-rnd and -nornd)
albeu
parents: 8164
diff changeset
108 entry->flags |= PLAY_TREE_RND;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
109 if(last_entry == NULL) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
110 play_tree_set_child(last_parent,entry);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
111 } else {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
112 play_tree_append_entry(last_entry,entry);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
113 last_entry = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
114 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
115 last_parent = entry;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
116 continue;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
117 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
118
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
119 if((opt[0] == '}') && (opt[1] == '\0'))
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
120 {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
121 if( ! last_parent || ! last_parent->parent) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
122 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "too much }-\n");
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
123 goto err_out;
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 last_entry = last_parent;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
126 last_parent = last_entry->parent;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
127 continue;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
128 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
129
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
130 if ((no_more_opts == 0) && (*opt == '-') && (*(opt+1) != 0)) /* option */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
131 {
13932
f845791e2823 fix: when doing -loop 0 -shuffle, the arg after shuffle was skipped
reimar
parents: 13909
diff changeset
132 int tmp = 0;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
133 /* remove trailing '-' */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
134 opt++;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
135
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
136 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
137 // We handle here some specific option
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
138 if(strcasecmp(opt,"list-options") == 0) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
139 m_config_print_option_list(config);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
140 exit(1);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
141 // Loop option when it apply to a group
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
142 } else if(strcasecmp(opt,"loop") == 0 &&
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
143 (! last_entry || last_entry->child) ) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
144 int l;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
145 char* end;
8400
587b62cd4119 10l noticed by "Puk Madick" <pingy@swirvemail.com>
arpi
parents: 8175
diff changeset
146 l = (i+1<argc) ? strtol(argv[i+1],&end,0) : 0;
9106
2c1aee5bb754 Ok, firstly fixed the bug in parser-mpcmd.c where it
arpi
parents: 8458
diff changeset
147 if(*end != '\0') {
2c1aee5bb754 Ok, firstly fixed the bug in parser-mpcmd.c where it
arpi
parents: 8458
diff changeset
148 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "The loop option must be an integer: %s\n",argv[i+1]);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
149 tmp = ERR_OUT_OF_RANGE;
9106
2c1aee5bb754 Ok, firstly fixed the bug in parser-mpcmd.c where it
arpi
parents: 8458
diff changeset
150 } else {
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
151 play_tree_t* pt = last_entry ? last_entry : last_parent;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
152 l = l <= 0 ? -1 : l;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
153 pt->loop = l;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
154 tmp = 1;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
155 }
8452
418b0017a8d2 -rnd --> -shuffle
diego
parents: 8426
diff changeset
156 } else if(strcasecmp(opt,"shuffle") == 0) {
8175
bf5d1da56ecd Basic support for random playing (-rnd and -nornd)
albeu
parents: 8164
diff changeset
157 if(last_entry && last_entry->child)
bf5d1da56ecd Basic support for random playing (-rnd and -nornd)
albeu
parents: 8164
diff changeset
158 last_entry->flags |= PLAY_TREE_RND;
bf5d1da56ecd Basic support for random playing (-rnd and -nornd)
albeu
parents: 8164
diff changeset
159 else
bf5d1da56ecd Basic support for random playing (-rnd and -nornd)
albeu
parents: 8164
diff changeset
160 last_parent->flags |= PLAY_TREE_RND;
8452
418b0017a8d2 -rnd --> -shuffle
diego
parents: 8426
diff changeset
161 } else if(strcasecmp(opt,"noshuffle") == 0) {
8175
bf5d1da56ecd Basic support for random playing (-rnd and -nornd)
albeu
parents: 8164
diff changeset
162 if(last_entry && last_entry->child)
bf5d1da56ecd Basic support for random playing (-rnd and -nornd)
albeu
parents: 8164
diff changeset
163 last_entry->flags &= ~PLAY_TREE_RND;
bf5d1da56ecd Basic support for random playing (-rnd and -nornd)
albeu
parents: 8164
diff changeset
164 else
bf5d1da56ecd Basic support for random playing (-rnd and -nornd)
albeu
parents: 8164
diff changeset
165 last_parent->flags &= ~PLAY_TREE_RND;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
166 } else {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
167 m_option_t* mp_opt = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
168 play_tree_t* entry = NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
169
8458
92a7bf835d98 2*10l=20l
arpi
parents: 8452
diff changeset
170 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
171 if(tmp > 0) { // It's an entry
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
172 if(entry) {
10542
928c02fa9949 fix the bug where only the last file of the command line is found
pl
parents: 10513
diff changeset
173 add_entry(&last_parent,&last_entry,entry);
8175
bf5d1da56ecd Basic support for random playing (-rnd and -nornd)
albeu
parents: 8164
diff changeset
174 if((last_parent->flags & PLAY_TREE_RND) && entry->child)
bf5d1da56ecd Basic support for random playing (-rnd and -nornd)
albeu
parents: 8164
diff changeset
175 entry->flags |= PLAY_TREE_RND;
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
176 UNSET_GLOBAL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
177 } 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
178 mode = DROP_LOCAL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
179 } else if(tmp == 0) { // 'normal' options
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
180 mp_opt = m_config_get_option(config,opt);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
181 if (mp_opt != NULL) { // Option exist
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
182 if(mode == GLOBAL || (mp_opt->flags & M_OPT_GLOBAL))
8426
ca2813aafb35 more i+1<argc checks
arpi
parents: 8400
diff changeset
183 tmp = (i+1<argc) ? m_config_set_option(config, opt, argv[i + 1])
ca2813aafb35 more i+1<argc checks
arpi
parents: 8400
diff changeset
184 : m_config_set_option(config, opt, NULL);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
185 else {
8458
92a7bf835d98 2*10l=20l
arpi
parents: 8452
diff changeset
186 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
187 if(tmp >= 0 && mode != DROP_LOCAL) {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
188 play_tree_t* pt = last_entry ? last_entry : last_parent;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
189 play_tree_set_param(pt,opt, argv[i + 1]);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
190 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
191 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
192 } 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
193 tmp = M_OPT_UNKNOWN;
10397
6180d7558f75 output typo fixes: unknow --> unknown
diego
parents: 9792
diff changeset
194 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "Unknown option on the command line: %s\n",opt);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
195 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
196 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
197 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
198
9792
4c34dc17e43d Exit when the option parser return M_OPT_EXIT
albeu
parents: 9747
diff changeset
199 if (tmp < 0) {
4c34dc17e43d Exit when the option parser return M_OPT_EXIT
albeu
parents: 9747
diff changeset
200 if (tmp == M_OPT_EXIT)
4c34dc17e43d Exit when the option parser return M_OPT_EXIT
albeu
parents: 9747
diff changeset
201 exit(0);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
202 goto err_out;
9792
4c34dc17e43d Exit when the option parser return M_OPT_EXIT
albeu
parents: 9747
diff changeset
203 }
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
204 i += tmp;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
205 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
206 else /* filename */
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
207 {
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
208 play_tree_t* entry = play_tree_new();
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
209 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
210 // if required expand DVD filename entries like dvd://1-3 into component titles
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
211 if ( strstr(argv[i],"dvd://") != NULL )
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
212 {
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
213 splitpos=strstr(argv[i]+6,"-");
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
214 if(splitpos != NULL)
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
215 {
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
216 start_title=strtol(argv[i]+6,NULL,10);
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
217 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
218 end_title=abs(start_title);
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
219 start_title=1;
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
220 } else {
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
221 end_title=strtol(splitpos+1,NULL,10);
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
222 }
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
223
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
224 if (dvd_range(start_title) && dvd_range(end_title) && (start_title<end_title))
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
225 {
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
226 for (j=start_title;j<=end_title;j++)
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
227 {
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
228 if (j!=start_title)
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
229 entry=play_tree_new();
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
230 snprintf(entbuf,9,"dvd://%d",j);
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
231 play_tree_add_file(entry,entbuf);
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
232 add_entry(&last_parent,&last_entry,entry);
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
233 last_entry = entry;
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
234 }
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
235 } else {
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
236 mp_msg(MSGT_CFGPARSER, MSGL_ERR,"Invalid play entry %s\n",argv[i]);
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
237 }
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
238
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
239 } else { // dvd:// or dvd://x entry
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
240 play_tree_add_file(entry,argv[i]);
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
241 }
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
242 } else {
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
243 play_tree_add_file(entry,argv[i]);
12543
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
244 }
2cbc9f1f728f Support dvd://start_title-end_title as requested on wishlist
rtognimp
parents: 12267
diff changeset
245
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
246 // Lock stdin if it will be used as input
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
247 if(strcasecmp(argv[i],"-") == 0)
12816
fba780800efe -use-stdin renamed to -noconsolecontrols.
diego
parents: 12543
diff changeset
248 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
249 add_entry(&last_parent,&last_entry,entry);
8164
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
250 UNSET_GLOBAL; // We start entry specific options
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
251
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
252 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
253 }
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
254
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
255 --recursion_depth;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
256 if(last_parent != root)
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
257 mp_msg(MSGT_CFGPARSER, MSGL_ERR,"Missing }- ?\n");
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
258 return root;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
259
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
260 err_out:
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
261 --recursion_depth;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
262 play_tree_free(root,1);
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
263 return NULL;
487cfc28525d New config system + cleanup of header inter dependency
albeu
parents:
diff changeset
264 }