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);
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);


+ 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;
}

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_find_driver_descriptor (JSList * drivers, const char * name)
{


+ 2
- 3
common/JackNetManager.cpp View File

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

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);


+ 109
- 35
common/JackTools.cpp View File

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

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

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

//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++;
}

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

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

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

int JackArgParser::GetArgc() {
int JackArgParser::GetArgc()
{
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 )
{
//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;
}



+ 4
- 3
common/JackTools.h View File

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

public:
JackArgParser(const char* arg);
@@ -72,7 +71,9 @@ class EXPORT JackArgParser
std::string GetArgString();
int GetNumArgv();
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 );
};



+ 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_internal_client_params (jack_driver_desc_t * desc, int argc, char* argv[], JSList ** param_ptr);

#ifdef __cplusplus
}


Loading…
Cancel
Save