2 * This file is part of MPlayer.
4 * MPlayer is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * MPlayer is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License along
15 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 /// \ingroup ConfigParsers MEntry
36 #include "parser-mecmd.h"
39 m_entry_list_free(m_entry_t
* lst
) {
42 for(i
= 0 ; lst
[i
].name
!= NULL
; i
++){
44 for(j
= 0 ; lst
[i
].opts
[2*j
] != NULL
; j
++) {
45 free(lst
[i
].opts
[2*j
]);
46 free(lst
[i
].opts
[2*j
+1]);
54 m_entry_set_options(m_config_t
*config
, m_entry_t
* entry
) {
57 for(i
= 0 ; entry
->opts
[2*i
] != NULL
; i
++){
58 r
= m_config_set_option(config
,entry
->opts
[2*i
],entry
->opts
[2*i
+1]);
69 m_config_parse_me_command_line(m_config_t
*config
, int argc
, char **argv
)
76 m_entry_t
*lst
= NULL
, *entry
= NULL
;
79 assert(config
!= NULL
);
84 config
->mode
= M_COMMAND_LINE
;
86 lst
= calloc(1,sizeof(m_entry_t
));
88 for (i
= 1; i
< argc
; i
++) {
91 /* check for -- (no more options id.) except --help! */
92 if ((*opt
== '-') && (*(opt
+1) == '-') && (*(opt
+2) == 0))
97 mp_tmsg(MSGT_CFGPARSER
, MSGL_ERR
, "'--' indicates no more options, but no filename was given on the command line.\n");
103 if ((no_more_opts
== 0) && (*opt
== '-') && (*(opt
+1) != 0)) /* option */
105 const m_option_t
* mp_opt
= NULL
;
106 /* remove trailing '-' */
108 mp_msg(MSGT_CFGPARSER
, MSGL_DBG3
, "this_opt = option: %s\n", opt
);
109 mp_opt
= m_config_get_option(config
,opt
);
112 mp_tmsg(MSGT_CFGPARSER
, MSGL_ERR
, "-%s is not an MEncoder option\n", opt
);
115 if(!entry
|| (mp_opt
->flags
& M_OPT_GLOBAL
)){
116 tmp
= m_config_set_option(config
, opt
, argv
[i
+ 1]);
117 if (tmp
<= M_OPT_EXIT
) {
119 tmp
= M_OPT_EXIT
- tmp
;
123 // mp_msg(MSGT_CFGPARSER, MSGL_ERR, "m_config_set_option() failed (%d)\n",tmp);
124 mp_tmsg(MSGT_CFGPARSER
, MSGL_FATAL
, "Error parsing option on the command line: -%s\n", opt
);
128 tmp
= m_config_check_option(config
, opt
, argv
[i
+ 1]);
129 if (tmp
<= M_OPT_EXIT
) {
131 tmp
= M_OPT_EXIT
- tmp
;
134 entry
->opts
= realloc(entry
->opts
,(no
+2)*2*sizeof(char*));
135 entry
->opts
[2*no
] = strdup(opt
);
136 entry
->opts
[2*no
+1] = argv
[i
+ 1] ? strdup(argv
[i
+ 1]) : NULL
;
137 entry
->opts
[2*no
+2] = entry
->opts
[2*no
+3] = NULL
;
140 // mp_msg(MSGT_CFGPARSER, MSGL_ERR, "m_config_set_option() failed (%d)\n",tmp);
145 } else {/* filename */
146 mp_msg(MSGT_CFGPARSER
, MSGL_DBG2
,"Adding file %s\n",argv
[i
]);
147 lst
= realloc(lst
,(nf
+2)*sizeof(m_entry_t
));
148 lst
[nf
].name
= strdup(argv
[i
]);
149 lst
[nf
].opts
= calloc(2,sizeof(char*));
152 memset(&lst
[nf
+1],0,sizeof(m_entry_t
));
160 m_entry_list_free(lst
);
161 mp_tmsg(MSGT_CFGPARSER
, MSGL_ERR
, "No file given\n");
167 m_entry_list_free(lst
);