Browse Source

Move jack_internal_client_parse_params to JackArgParser class

git-svn-id: http://subversion.jackaudio.org/jack/jack2/trunk/jackmp@2686 0c269be4-1314-0410-8aa9-9f06e86f4224
tags/1.90
moret 17 years ago
parent
commit
7918a9b62e
6 changed files with 117 additions and 117 deletions
  1. +2
    -2
      common/JackAudioAdapter.cpp
  2. +0
    -73
      common/JackDriverLoader.cpp
  3. +2
    -3
      common/JackNetManager.cpp
  4. +109
    -35
      common/JackTools.cpp
  5. +4
    -3
      common/JackTools.h
  6. +0
    -1
      common/driver_interface.h

+ 2
- 2
common/JackAudioAdapter.cpp View File

@@ -157,8 +157,8 @@ using namespace Jack;
JackArgParser parser(load_init); JackArgParser parser(load_init);
if (parser.GetArgc() > 0) { if (parser.GetArgc() > 0) {
if (jack_parse_internal_client_params(desc, parser.GetNumArgv(), (char**)parser.GetArgv(), &params) != 0)
jack_error("Internal client jack_parse_driver_params error");
if (parser.ParseParams(desc, &params) != 0)
jack_error("Internal client : JackArgParser::ParseParams error.");
} }
return jack_internal_initialize(jack_client, params); return jack_internal_initialize(jack_client, params);


+ 0
- 73
common/JackDriverLoader.cpp View File

@@ -370,79 +370,6 @@ jackctl_parse_driver_params (jackctl_driver *driver_ptr, int argc, char* argv[])
return 0; return 0;
} }


int
jack_parse_internal_client_params(jack_driver_desc_t* desc, int argc, char* argv[], JSList** param_ptr)
{
char* options_list;
unsigned long i = 0;
unsigned int param = 0;
unsigned int param_id = 0;
JSList* params = NULL;
jack_driver_param_t* intclient_param;

options_list = (char*) calloc ( desc->nparams + 1, sizeof ( char ) );

for ( i = 0; i < desc->nparams; i++ )
sprintf ( ( options_list + i ), "%c", desc->params[i].character );

for ( param = 0; param < argc; param++ )
{
if ( argv[param][0] == '-' )
{
//valid option
if ( strchr ( options_list, argv[param][1] ) != NULL )
{
//associated parameter
for ( param_id = 0; param_id < desc->nparams; param_id++ )
if ( argv[param][1] == options_list[param_id] )
break;

//allocate parameter
intclient_param = (jack_driver_param_t*) calloc ( 1, sizeof ( jack_driver_param_t ) );
intclient_param->character = desc->params[param_id].character;

switch ( desc->params[param_id].type )
{
case JackDriverParamInt:
intclient_param->value.i = atoi ( argv[param + 1] );
break;
case JackDriverParamUInt:
intclient_param->value.ui = strtoul ( argv[param + 1], NULL, 10 );
break;
case JackDriverParamChar:
intclient_param->value.c = argv[param + 1][0];
break;
case JackDriverParamString:
strncpy ( intclient_param->value.str, argv[param + 1], JACK_DRIVER_PARAM_STRING_MAX );
break;
case JackDriverParamBool:
if ( ( strcmp ( "false", argv[param + 1] ) == 0 ) ||
( strcmp ( "off", argv[param + 1] ) == 0 ) ||
( strcmp ( "no", argv[param + 1] ) == 0 ) ||
( strcmp ( "0", argv[param + 1] ) == 0 ) ||
( strcmp ( "(null)", argv[param + 1] ) == 0 ) )
intclient_param->value.i = false;
else
intclient_param->value.i = true;
break;
}
//add to the list
params = jack_slist_append ( params, intclient_param );
}
//invalid option
else
fprintf ( stderr, "Invalid option '%c'\n", argv[param][1] );
}
}

free ( options_list );

if ( param_ptr )
*param_ptr = params;

return 0;
}

jack_driver_desc_t * jack_driver_desc_t *
jack_find_driver_descriptor (JSList * drivers, const char * name) jack_find_driver_descriptor (JSList * drivers, const char * name)
{ {


+ 2
- 3
common/JackNetManager.cpp View File

@@ -456,7 +456,6 @@ fail:
switch ( param->character ) switch ( param->character )
{ {
case 'a' : case 'a' :
jack_info ( "ip : %s", param->value.str );
fMulticastIP = strdup ( param->value.str ); fMulticastIP = strdup ( param->value.str );
break; break;
case 'p': case 'p':
@@ -693,8 +692,8 @@ extern "C"


if ( parser.GetArgc() > 0) if ( parser.GetArgc() > 0)
{ {
if ( jack_parse_internal_client_params ( desc, parser.GetNumArgv(), (char**)parser.GetArgv(), &params) != 0 )
jack_error ( "Internal client jack_parse_driver_params error" );
if ( parser.ParseParams ( desc, &params) < 0 )
jack_error ( "Internal client JackArgParser::ParseParams error." );
} }


return jack_internal_initialize(jack_client, params); return jack_internal_initialize(jack_client, params);


+ 109
- 35
common/JackTools.cpp View File

@@ -204,25 +204,23 @@ namespace Jack {
new_name[i] = '\0'; new_name[i] = '\0';
} }


JackArgParser::JackArgParser ( const char* arg ) {
// class JackArgParser ***************************************************
JackArgParser::JackArgParser ( const char* arg )
{
jack_log ( "JackArgParser::JackArgParser, arg_string : '%s'", arg ); jack_log ( "JackArgParser::JackArgParser, arg_string : '%s'", arg );


fArgc = 0; fArgc = 0;
fNumArgv = 0;
fArgString = string(arg); fArgString = string(arg);
//if empty string //if empty string
if ( strlen(arg) == 0 ) {
fArgv = NULL;
if ( strlen(arg) == 0 )
return; return;
}
//else parse the arg string //else parse the arg string
const size_t arg_len = fArgString.length(); const size_t arg_len = fArgString.length();
int i = 0;
unsigned int i = 0;
size_t pos = 0; size_t pos = 0;
size_t start = 0; size_t start = 0;
size_t copy_start = 0; size_t copy_start = 0;
size_t copy_length = 0; size_t copy_length = 0;
vector<string> args;
//we need a 'space terminated' string //we need a 'space terminated' string
fArgString += " "; fArgString += " ";
//first fill a vector with args //first fill a vector with args
@@ -235,7 +233,7 @@ namespace Jack {
if ( pos == string::npos ) if ( pos == string::npos )
pos = arg_len; pos = arg_len;
//if double quote //if double quote
if ( fArgString.at(pos) == '\"' ) {
if ( fArgString[pos] == '\"' ) {
//first character : copy the substring //first character : copy the substring
if ( pos == start ) { if ( pos == start ) {
copy_start = start + 1; copy_start = start + 1;
@@ -251,13 +249,14 @@ namespace Jack {
} }
} }
//if space //if space
if ( fArgString.at(pos) == ' ' ) {
if ( fArgString[pos] == ' ' ) {
//short option descriptor //short option descriptor
if ( ( fArgString.at(start) == '-' ) && ( fArgString.at(start + 1) != '-' ) ) {
if ( ( fArgString[start] == '-' ) && ( fArgString[start + 1] != '-' ) ) {
copy_start = start; copy_start = start;
copy_length = 2; copy_length = 2;
start += copy_length; start += copy_length;
} }
//else copy all the space delimitated string
else { else {
copy_start = start; copy_start = start;
copy_length = pos - copy_start; copy_length = pos - copy_start;
@@ -265,50 +264,125 @@ namespace Jack {
} }
} }
//then push the substring to the args vector //then push the substring to the args vector
args.push_back ( fArgString.substr ( copy_start,copy_length ) );
fArgv.push_back ( fArgString.substr ( copy_start, copy_length ) );
jack_log ( "JackArgParser::JackArgParser, add : '%s'", (*fArgv.end()).c_str() );
} while ( start < arg_len ); } while ( start < arg_len );


//and then duplicate args into the argv array
fNumArgv = args.size();
fArgv = new char* [fNumArgv];
for ( i = 0; i < fNumArgv; i++ ) {
fArgv[i] = new char[args[i].length()];
fill_n ( fArgv[i],args[i].length() + 1, 0 );
args[i].copy ( fArgv[i], args[i].length() );
jack_log ( "JackArgParser::JackArgParser, adding : '%s'", fArgv[i] );
}

//finally count the 'real' options (the ones starting with a '-')
for ( i = 0; i < fNumArgv; i++ )
if ( fArgv[i][0] == '-' )
//finally count the options
for ( i = 0; i < fArgv.size(); i++ )
if ( fArgv[i].at(0) == '-' )
fArgc++; fArgc++;
} }


JackArgParser::~JackArgParser() {
for ( int i = 0; i < fNumArgv; i++ )
delete[] fArgv[i];
delete[] fArgv;
JackArgParser::~JackArgParser()
{
} }


string JackArgParser::GetArgString() {
string JackArgParser::GetArgString()
{
return fArgString; return fArgString;
} }


int JackArgParser::GetNumArgv() {
return fNumArgv;
int JackArgParser::GetNumArgv()
{
return fArgv.size();
} }


int JackArgParser::GetArgc() {
int JackArgParser::GetArgc()
{
return fArgc; return fArgc;
} }


const char** JackArgParser::GetArgv() {
return const_cast<const char**>(fArgv);
int JackArgParser::GetArgv ( vector<string>& argv )
{
argv = fArgv;
return 0;
}

int JackArgParser::GetArgv ( char** argv )
{
//argv must be NULL
if ( argv )
return -1;
//else allocate and fill it
argv = new char* [fArgv.size()];
for ( unsigned int i = 0; i < fArgv.size(); i++ )
{
argv[i] = new char[fArgv[i].length()];
fill_n ( argv[i], fArgv[i].length() + 1, 0 );
fArgv[i].copy ( argv[i], fArgv[i].length() );
}
return 0;
}

void JackArgParser::DeleteArgv ( const char** argv )
{
unsigned int i;
for ( i = 0; i < fArgv.size(); i++ )
delete[] argv[i];
delete[] argv;
} }


int JackArgParser::ParseParams ( jack_driver_desc_t* desc, JSList** param_list ) int JackArgParser::ParseParams ( jack_driver_desc_t* desc, JSList** param_list )
{ {
//TODO : fill the param_list
string options_list;
unsigned long i = 0;
unsigned int param = 0;
size_t param_id = 0;
JSList* params = NULL;
jack_driver_param_t* intclient_param;

for ( i = 0; i < desc->nparams; i++ )
options_list += desc->params[i].character;

for ( param = 0; param < fArgv.size(); param++ )
{
if ( fArgv[param][0] == '-' )
{
//valid option
if ( ( param_id = options_list.find_first_of ( fArgv[param].at(1) ) ) != string::npos )
{
//TODO : find if (and where) it's correctly deleted...
intclient_param = new jack_driver_param_t;
intclient_param->character = desc->params[param_id].character;

switch ( desc->params[param_id].type )
{
case JackDriverParamInt:
intclient_param->value.i = atoi ( fArgv[param + 1].c_str() );
break;
case JackDriverParamUInt:
intclient_param->value.ui = strtoul ( fArgv[param + 1].c_str(), NULL, 10 );
break;
case JackDriverParamChar:
intclient_param->value.c = fArgv[param + 1][0];
break;
case JackDriverParamString:
fArgv[param + 1].copy ( intclient_param->value.str, min(static_cast<int>(fArgv[param + 1].length()), JACK_DRIVER_PARAM_STRING_MAX) );
break;
case JackDriverParamBool:
if ( ( fArgv[param + 1].compare ( "false" ) == 0 ) ||
( fArgv[param + 1].compare ( "off" ) == 0 ) ||
( fArgv[param + 1].compare ( "no" ) == 0 ) ||
( fArgv[param + 1].compare ( "0" ) == 0 ) ||
( fArgv[param + 1].compare ( "(null)" ) == 0 ) )
intclient_param->value.i = false;
else
intclient_param->value.i = true;
break;
}
//add to the list
params = jack_slist_append ( params, intclient_param );
}
//invalid option
else
jack_error ( "Invalid option '%c'", fArgv[param][1] );
}
}

if ( param_list )
*param_list = params;

return 0; return 0;
} }




+ 4
- 3
common/JackTools.h View File

@@ -62,9 +62,8 @@ class EXPORT JackArgParser
{ {
private: private:
std::string fArgString; std::string fArgString;
int fNumArgv;
int fArgc; int fArgc;
char** fArgv;
std::vector<std::string> fArgv;


public: public:
JackArgParser(const char* arg); JackArgParser(const char* arg);
@@ -72,7 +71,9 @@ class EXPORT JackArgParser
std::string GetArgString(); std::string GetArgString();
int GetNumArgv(); int GetNumArgv();
int GetArgc(); int GetArgc();
const char** GetArgv();
int GetArgv ( std::vector<std::string>& argv );
int GetArgv ( char** argv );
void DeleteArgv ( const char** argv );
int ParseParams ( jack_driver_desc_t* desc, JSList** param_list ); int ParseParams ( jack_driver_desc_t* desc, JSList** param_list );
}; };




+ 0
- 1
common/driver_interface.h View File

@@ -90,7 +90,6 @@ extern "C"




EXPORT int jack_parse_driver_params (jack_driver_desc_t * desc, int argc, char* argv[], JSList ** param_ptr); EXPORT int jack_parse_driver_params (jack_driver_desc_t * desc, int argc, char* argv[], JSList ** param_ptr);
EXPORT int jack_parse_internal_client_params (jack_driver_desc_t * desc, int argc, char* argv[], JSList ** param_ptr);


#ifdef __cplusplus #ifdef __cplusplus
} }


Loading…
Cancel
Save