change the parameters on the command line and make the shape driver accept things given to it dynamically

This commit is contained in:
cnlohr 2015-01-07 00:41:29 -05:00
parent 79a422c2cf
commit 614c26da92
5 changed files with 38 additions and 14 deletions

View file

@ -145,13 +145,16 @@ static void DPOUpdate(void * id, struct NoteFinder*nf)
static void DPOParams(void * id ) static void DPOParams(void * id )
{ {
struct DPODriver * d = (struct DPODriver*)id; struct DPODriver * d = (struct DPODriver*)id;
d->xn = GetParameterI( "lightx", 160 ); d->xn = 160; RegisterValue( "lightx", PINT, &d->xn, sizeof( d->xn ) ); printf( "XN: %d\n", d->xn );
d->yn = GetParameterI( "lighty", 90 ); d->yn = 90; RegisterValue( "lighty", PINT, &d->yn, sizeof( d->yn ) );
d->cutoff = GetParameterF( "cutoff", .01 ); d->cutoff = .01; RegisterValue( "cutoff", PFLOAT, &d->cutoff, sizeof( d->cutoff ) );
d->satamp = GetParameterF( "satamp", 5 ); d->satamp = 5; RegisterValue( "satamp", PFLOAT, &d->satamp, sizeof( d->satamp ) );
d->amppow = GetParameterF( "amppow", 2.51 );
d->distpow = GetParameterF( "distpow", 1.5 ); d->amppow = 2.51; RegisterValue( "amppow", PFLOAT, &d->amppow, sizeof( d->amppow ) );
d->from_sides = GetParameterI( "fromsides", 1 ); //If 0, will make sources random locations. d->distpow = 1.5; RegisterValue( "distpow", PFLOAT, &d->distpow, sizeof( d->distpow ) );
d->from_sides = 1.5;RegisterValue( "fromsides", PINT, &d->from_sides, sizeof( d->from_sides ) );
d->note_peaks = 0; d->note_peaks = 0;
} }

View file

@ -13,8 +13,8 @@ displayname = DisplayShapeDriver
#Display Shape Driver parameters #Display Shape Driver parameters
fromsides = 1 fromsides = 1
lightx = 160 lightx = 80
lighty = 90 lighty = 45
cutoff = 0.010 cutoff = 0.010
satamp = 5.000 satamp = 5.000
amppow = 2.510 amppow = 2.510

20
main.c
View file

@ -15,6 +15,8 @@
#include "parameters.h" #include "parameters.h"
short screenx, screeny; short screenx, screeny;
int gargc;
char ** gargv;
int set_screenx = 640; REGISTER_PARAM( set_screenx, PINT ); int set_screenx = 640; REGISTER_PARAM( set_screenx, PINT );
int set_screeny = 480; REGISTER_PARAM( set_screeny, PINT ); int set_screeny = 480; REGISTER_PARAM( set_screeny, PINT );
@ -86,6 +88,7 @@ void LoadFile( const char * filename )
{ {
char * buffer; char * buffer;
int r; int r;
int i;
FILE * f = fopen( filename, "rb" ); FILE * f = fopen( filename, "rb" );
if( !f ) if( !f )
@ -111,6 +114,16 @@ void LoadFile( const char * filename )
} }
free( buffer ); free( buffer );
} }
if( gargc > 2 )
{
for( i = 2; i < gargc; i++ )
{
printf( "AP: %s\n", gargv[i] );
SetParametersFromString( gargv[i] );
}
}
} }
int main(int argc, char ** argv) int main(int argc, char ** argv)
@ -120,6 +133,9 @@ int main(int argc, char ** argv)
int i; int i;
double LastFileTime; double LastFileTime;
gargc = argc;
gargv = argv;
if( argc > 1 ) if( argc > 1 )
{ {
InitialFile = argv[1]; InitialFile = argv[1];
@ -130,10 +146,6 @@ int main(int argc, char ** argv)
LoadFile( InitialFile ); LoadFile( InitialFile );
} }
if( argc > 2 )
{
SetParametersFromString( argv[1] );
}
//Initialize Rawdraw //Initialize Rawdraw
int frames = 0; int frames = 0;

View file

@ -97,6 +97,9 @@ static int SetParameter( struct Param * p, const char * str )
((char*)p->ptr)[p->size-1]= '\0'; ((char*)p->ptr)[p->size-1]= '\0';
break; break;
case PSTRING: case PSTRING:
free( p->ptr );
p->ptr = strdup( str );
break;
default: default:
return -1; return -1;
} }
@ -197,16 +200,17 @@ void SetParametersFromString( const char * string )
{ {
name[lastnamenowhite] = 0; name[lastnamenowhite] = 0;
value[lastvaluenowhite] = 0; value[lastvaluenowhite] = 0;
// printf( "Break: %s %s %d\n", name, value, lastvaluenowhite );
struct Param * p = (struct Param*)HashGetEntry( parameters, name ); struct Param * p = (struct Param*)HashGetEntry( parameters, name );
if( p ) if( p )
{ {
printf( "Set: %s %s\n", name, value );
SetParameter( p, value ); SetParameter( p, value );
} }
else else
{ {
//p is an orphan. //p is an orphan.
printf( "Orp: %s %s\n", name, value );
struct Param ** n = (struct Param **)HashTableInsert( parameters, name, 0 ); struct Param ** n = (struct Param **)HashTableInsert( parameters, name, 0 );
*n = malloc( sizeof ( struct Param ) ); *n = malloc( sizeof ( struct Param ) );
(*n)->orphan = 1; (*n)->orphan = 1;

View file

@ -33,8 +33,13 @@ struct Param
struct ParamCallback * callback; struct ParamCallback * callback;
}; };
//This is the preferred method for getting settings, that way changes will be propogated
void RegisterValue( const char * name, enum ParamType, void * ptr, int size ); void RegisterValue( const char * name, enum ParamType, void * ptr, int size );
void DumpParameters(); void DumpParameters();
//Use these only if you really can't register your value.
float GetParameterF( const char * name, float defa ); float GetParameterF( const char * name, float defa );
int GetParameterI( const char * name, int defa ); int GetParameterI( const char * name, int defa );
const char * GetParameterS( const char * name, const char * defa ); const char * GetParameterS( const char * name, const char * defa );