20 #include "JackDriverLoader.h"
21 #include "JackArgParser.h"
31 JackArgParser::JackArgParser (
const char* arg )
33 jack_log (
"JackArgParser::JackArgParser, arg_string : '%s'", arg );
37 if ( strlen(arg) == 0 )
39 fArgString = string(arg);
41 const size_t arg_len = fArgString.length();
45 size_t copy_start = 0;
46 size_t copy_length = 0;
52 start = fArgString.find_first_not_of (
' ', start );
54 pos = fArgString.find_first_of (
" \"" , start );
56 if ( pos == string::npos )
59 if ( fArgString[pos] ==
'\"' ) {
62 copy_start = start + 1;
63 pos = fArgString.find (
'\"', ++pos );
64 copy_length = pos - copy_start;
70 copy_length = pos - copy_start;
75 if ( fArgString[pos] ==
' ' ) {
77 if ( ( fArgString[start] ==
'-' ) && ( fArgString[start + 1] !=
'-' ) ) {
85 copy_length = pos - copy_start;
90 fArgv.push_back ( fArgString.substr ( copy_start, copy_length ) );
91 jack_log (
"JackArgParser::JackArgParser, add : '%s'", (*fArgv.rbegin()).c_str() );
92 }
while ( start < arg_len );
95 for ( i = 0; i < fArgv.size(); i++ )
96 if ( fArgv[i].at(0) ==
'-' )
100 JackArgParser::~JackArgParser()
103 string JackArgParser::GetArgString()
108 int JackArgParser::GetNumArgv()
113 int JackArgParser::GetArgc()
118 int JackArgParser::GetArgv ( vector<string>& argv )
124 int JackArgParser::GetArgv (
char** argv )
130 argv = (
char**)calloc (fArgv.size(),
sizeof(
char*));
135 for (
unsigned int i = 0; i < fArgv.size(); i++ )
137 argv[i] = (
char*)calloc(fArgv[i].length(),
sizeof(char));
138 fill_n ( argv[i], fArgv[i].length() + 1, 0 );
139 fArgv[i].copy ( argv[i], fArgv[i].length() );
144 void JackArgParser::DeleteArgv (
const char** argv )
147 for ( i = 0; i < fArgv.size(); i++ )
148 free((
void*)argv[i]);
156 unsigned int param = 0;
161 for ( i = 0; i < desc->
nparams; i++ )
164 for ( param = 0; param < fArgv.size(); param++ )
166 if ( fArgv[param][0] ==
'-' )
169 if ( ( param_id = options_list.find_first_of ( fArgv[param].at(1) ) ) != string::npos )
176 case JackDriverParamInt:
177 if (param + 1 < fArgv.size())
178 intclient_param->value.i = atoi ( fArgv[param + 1].c_str() );
181 case JackDriverParamUInt:
182 if (param + 1 < fArgv.size())
183 intclient_param->value.ui = strtoul ( fArgv[param + 1].c_str(), NULL, 10 );
186 case JackDriverParamChar:
187 if (param + 1 < fArgv.size())
188 intclient_param->value.c = fArgv[param + 1][0];
191 case JackDriverParamString:
192 if (param + 1 < fArgv.size())
193 fArgv[param + 1].copy ( intclient_param->value.str, min(static_cast<int>(fArgv[param + 1].length()), JACK_DRIVER_PARAM_STRING_MAX) );
196 case JackDriverParamBool:
197 intclient_param->value.i =
true;
201 params = jack_slist_append ( params, intclient_param );
205 if (fArgv[param][1] ==
'h') {
206 fprintf(stdout,
"Internal client parameters:\n");
207 jack_print_driver_options (desc, stdout);
210 jack_error (
"Invalid option '%c'", fArgv[param][1] );
217 *param_list = params;
221 void JackArgParser::FreeParams (
JSList* param_list )
223 JSList *node_ptr = param_list;
227 next_node_ptr = node_ptr->next;
228 free(node_ptr->data);
230 node_ptr = next_node_ptr;
SERVER_EXPORT void jack_error(const char *fmt,...)
jack_driver_param_type_t type
SERVER_EXPORT void jack_log(const char *fmt,...)
jack_driver_param_desc_t * params