Mercurial > mplayer.hg
annotate parser-mecmd.c @ 14379:30d62dbb5520
lavc is reintegrated, just as it was before removal some commits ago
it hasn't been touched yet (no work done yet) so it's neither reformatted nor up to date
author | kraymer |
---|---|
date | Wed, 05 Jan 2005 23:32:38 +0000 |
parents | 522afd56703c |
children | bef9d6dc2333 |
rev | line source |
---|---|
8164 | 1 #include "config.h" |
2 | |
3 #include <stdio.h> | |
4 #include <stdlib.h> | |
5 #include <string.h> | |
6 #include <errno.h> | |
7 | |
8 #ifdef MP_DEBUG | |
9 #include <assert.h> | |
10 #endif | |
11 | |
12 #include "mp_msg.h" | |
13 #include "m_option.h" | |
14 #include "m_config.h" | |
15 #include "parser-mecmd.h" | |
16 | |
17 void | |
18 m_entry_list_free(m_entry_t* lst) { | |
19 int i,j; | |
20 | |
21 for(i = 0 ; lst[i].name != NULL ; i++){ | |
22 free(lst[i].name); | |
23 for(j = 0 ; lst[i].opts[2*j] != NULL ; j++) { | |
24 free(lst[i].opts[2*j]); | |
25 free(lst[i].opts[2*j+1]); | |
26 } | |
27 free(lst[i].opts); | |
28 } | |
29 free(lst); | |
30 } | |
31 | |
32 int | |
33 m_entry_set_options(m_config_t *config, m_entry_t* entry) { | |
34 int i,r; | |
35 | |
36 for(i = 0 ; entry->opts[2*i] != NULL ; i++){ | |
37 r = m_config_set_option(config,entry->opts[2*i],entry->opts[2*i+1]); | |
38 if(r < 0) | |
39 return 0; | |
40 } | |
41 return 1; | |
42 } | |
43 | |
44 | |
45 | |
46 | |
47 m_entry_t* | |
48 m_config_parse_me_command_line(m_config_t *config, int argc, char **argv) | |
49 { | |
50 int i,nf = 0,no = 0; | |
51 int tmp; | |
52 char *opt; | |
53 int no_more_opts = 0; | |
54 m_entry_t *lst = NULL, *entry = NULL; | |
55 | |
56 #ifdef MP_DEBUG | |
57 assert(config != NULL); | |
58 assert(argv != NULL); | |
59 assert(argc >= 1); | |
60 #endif | |
61 | |
62 config->mode = M_COMMAND_LINE; | |
63 | |
64 lst = calloc(1,sizeof(m_entry_t)); | |
65 | |
66 for (i = 1; i < argc; i++) { | |
67 //next: | |
68 opt = argv[i]; | |
69 /* check for -- (no more options id.) except --help! */ | |
70 if ((*opt == '-') && (*(opt+1) == '-') && (*(opt+2) != 'h')) | |
71 { | |
72 no_more_opts = 1; | |
73 if (i+1 >= argc) | |
74 { | |
75 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "You added '--' but no filenames presented!\n"); | |
76 goto err_out; | |
77 } | |
78 continue; | |
79 } | |
80 | |
81 if ((no_more_opts == 0) && (*opt == '-') && (*(opt+1) != 0)) /* option */ | |
82 { | |
83 m_option_t* mp_opt = NULL; | |
84 /* remove trailing '-' */ | |
85 opt++; | |
86 mp_msg(MSGT_CFGPARSER, MSGL_DBG3, "this_opt = option: %s\n", opt); | |
87 mp_opt = m_config_get_option(config,opt); | |
88 if(!mp_opt) { | |
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
|
89 tmp = M_OPT_UNKNOWN; |
9096 | 90 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "%s is not an MEncoder option\n",opt); |
8164 | 91 goto err_out; |
92 } | |
8893 | 93 if(!entry || (mp_opt->flags & M_OPT_GLOBAL)){ |
8164 | 94 tmp = m_config_set_option(config, opt, argv[i + 1]); |
8893 | 95 if(tmp < 0){ |
96 // mp_msg(MSGT_CFGPARSER, MSGL_ERR, "m_config_set_option() failed (%d)\n",tmp); | |
97 goto err_out; | |
98 } | |
99 } else { | |
8164 | 100 tmp = m_config_check_option(config, opt, argv[i + 1]); |
101 if(tmp >= 0) { | |
102 entry->opts = realloc(entry->opts,(no+2)*2*sizeof(char*)); | |
103 entry->opts[2*no] = strdup(opt); | |
104 entry->opts[2*no+1] = argv[i + 1] ? strdup(argv[i + 1]) : NULL; | |
105 entry->opts[2*no+2] = entry->opts[2*no+3] = NULL; | |
106 no++; | |
8893 | 107 } else { |
108 // mp_msg(MSGT_CFGPARSER, MSGL_ERR, "m_config_set_option() failed (%d)\n",tmp); | |
9792 | 109 if(tmp == M_OPT_EXIT) |
110 exit(0); | |
8893 | 111 goto err_out; |
8164 | 112 } |
113 } | |
114 i += tmp; | |
9747
264cb5f03131
Remove the hack used to pass -dvd, etc into the playlist
albeu
parents:
9096
diff
changeset
|
115 } else {/* filename */ |
264cb5f03131
Remove the hack used to pass -dvd, etc into the playlist
albeu
parents:
9096
diff
changeset
|
116 mp_msg(MSGT_CFGPARSER, MSGL_DBG2,"Adding file %s\n",argv[i]); |
264cb5f03131
Remove the hack used to pass -dvd, etc into the playlist
albeu
parents:
9096
diff
changeset
|
117 lst = realloc(lst,(nf+2)*sizeof(m_entry_t)); |
264cb5f03131
Remove the hack used to pass -dvd, etc into the playlist
albeu
parents:
9096
diff
changeset
|
118 lst[nf].name = strdup(argv[i]); |
264cb5f03131
Remove the hack used to pass -dvd, etc into the playlist
albeu
parents:
9096
diff
changeset
|
119 lst[nf].opts = calloc(2,sizeof(char*)); |
264cb5f03131
Remove the hack used to pass -dvd, etc into the playlist
albeu
parents:
9096
diff
changeset
|
120 entry = &lst[nf]; |
264cb5f03131
Remove the hack used to pass -dvd, etc into the playlist
albeu
parents:
9096
diff
changeset
|
121 no = 0; |
264cb5f03131
Remove the hack used to pass -dvd, etc into the playlist
albeu
parents:
9096
diff
changeset
|
122 memset(&lst[nf+1],0,sizeof(m_entry_t)); |
264cb5f03131
Remove the hack used to pass -dvd, etc into the playlist
albeu
parents:
9096
diff
changeset
|
123 nf++; |
264cb5f03131
Remove the hack used to pass -dvd, etc into the playlist
albeu
parents:
9096
diff
changeset
|
124 } |
8164 | 125 } |
126 | |
127 if(nf == 0) { | |
128 m_entry_list_free(lst); | |
129 mp_msg(MSGT_CFGPARSER, MSGL_ERR, "No file given\n"); | |
130 return NULL; | |
131 } | |
132 return lst; | |
133 | |
134 err_out: | |
135 m_entry_list_free(lst); | |
136 return NULL; | |
137 } |