コード例 #1
0
mxArray *
dbfield2mxArray( Dbptr db )
{
    mxArray	*result;
    long	type;
    Dbvalue	value;
    char	warning[STRSZ];

    dbquery( db, dbFIELD_TYPE, &type );
    antelope_mex_clear_register( 1 );

    if( dbget( db, value.s ) < 0 )
    {
        antelope_mex_clear_register( 1 );
        return (mxArray *) NULL;
    }

    switch( type )
    {
    case dbDBPTR:
        result = CreateDbptrStructFromDbptr( value.db );
        break;
    case dbSTRING:
        copystrip( value.s, value.s, strlen( value.s ) );
        result = mxCreateString( value.s );
        break;
    case dbBOOLEAN:
    case dbINTEGER:
    case dbYEARDAY:
        copystrip( value.s, value.s, strlen( value.s ) );
        result = CreateDouble( (double) atol( value.s ) );
        break;
    case dbREAL:
    case dbTIME:
        copystrip( value.s, value.s, strlen( value.s ) );
        result = CreateDouble( (double) atof( value.s ) );
        break;
    default:
        sprintf( warning,
                 "Can't interpret field of type %s",
                 xlatnum( type, Dbxlat, NDbxlat ) );
        mexWarnMsgTxt( warning );
        result = (mxArray *) NULL;
        break;
    }

    return result;
}
コード例 #2
0
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
	double	orbfd;
	int	version;

	if( nrhs != 1 )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
	if( ! get_scalar( prhs[0], &orbfd ) )
	{
		mexErrMsgTxt( "orbping: bad orb file descriptor\n" );
	}

	if( mex_orbping( (int) orbfd, &version ) ) {
		antelope_mex_clear_register( 1 );
		mexErrMsgTxt ( "orbping: failed\n" );
	}

	plhs[0] = CreateDouble( (double) version );
	if( plhs[0] == NULL )
	{
		mexErrMsgTxt( "orbping: failed to create return value" );
	}
}
コード例 #3
0
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
	double	orbfd;

	if( nlhs > 0 ) 
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}

	if( nrhs != 1 )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
	if( ! get_scalar( prhs[0], &orbfd ) )
	{
		mexErrMsgTxt( "orbclose: bad orb file descriptor\n" );
	}

	if( mex_orbclose( (int) orbfd ) ) {
		antelope_mex_clear_register( 1 );
		mexErrMsgTxt ( "orbclose: failed\n" );
	}
}
コード例 #4
0
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
	char	*filename;
	FILE	*fp;
	Response *response;

	if( nlhs > 1 ) 
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}

	if( nrhs != 1 )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
        else if( ! get_trimmed_string( prhs[0], &filename ) )
        {
                antelope_mexUsageMsgTxt ( USAGE );
		return;
        }

	if( ( fp = fopen( filename, "r" ) ) == NULL ) {
		perror( "dbresponse" );
		mxFree( filename );
		mexErrMsgTxt( "Failed to open response file." );
	} else {
		mxFree( filename );
	}

	if( read_response( fp, &response ) != 0 ) {
		fclose( fp );
		antelope_mex_clear_register( 1 );
		mexErrMsgTxt( "Failed to read response file." );
	} else {
		antelope_mex_clear_register( 1 );
		fclose( fp );
	}

	plhs[0] = Response2mxArray( response );

	if( ! plhs[0] )
	{
		mexErrMsgTxt( "Failed to create an object of class dbresponse");
	}
}
コード例 #5
0
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
	Dbptr	db;
	float	*data = NULL;
	double	*doublep;
	mwSize	*dims;
	int	nsamp;
	int	rc;
	int	i;

	mexWarnMsgTxt ( "\ntrputwf is DEPRECATED; switch to trsave_wf\n" );

	if( nrhs != 2 )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
        else if( ! get_dbptr( prhs[0], &db ) )
        {
                antelope_mexUsageMsgTxt ( USAGE );
		return;
        }
        else if( mxGetClassID( prhs[1] ) != mxDOUBLE_CLASS )
        {
                antelope_mexUsageMsgTxt ( USAGE );
		return;
        }
        else if( mxGetNumberOfDimensions( prhs[1] ) != 2 )
        {
                antelope_mexUsageMsgTxt ( USAGE );
		return;
        }

	dims = (mwSize *) mxGetDimensions( prhs[1] );
	if( dims[1] != 1 && dims[0] != 1 ) 
		mexErrMsgTxt ( "trputwf: DATA must have dimensions Nx1 or 1xN\n" );
	if( dims[1] == 1 ) nsamp = dims[0];
	else nsamp = dims[1];

	doublep = mxGetPr( prhs[1] );

	data = mxCalloc( nsamp, sizeof( float ) );
	for( i=0; i<nsamp; i++ )
	{
		data[i] = (float) doublep[i];
	}

	rc = trputwf( db, data );
	antelope_mex_clear_register( 1 );

	mxFree( data );

	if( rc == dbINVALID )
	{
		mexErrMsgTxt( "trputwf: failed\n" );
	}
}
コード例 #6
0
ファイル: dbgroup.c プロジェクト: nimanshr/antelope_contrib
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
    Dbptr	db;
    Tbl	*groupfields = 0;
    char	errmsg[STRSZ];
    int	rhs_index;
    long	type = 1;
    double 	type_fp = 1;

    if( nrhs < 2 || nrhs > 3  )
    {
        antelope_mexUsageMsgTxt ( USAGE );
        return;
    }
    else if( ! get_dbptr( prhs[0], &db ) )
    {
        antelope_mexUsageMsgTxt ( USAGE );
        return;
    }
    else if( ! get_stringtbl( prhs[1], &groupfields ) )
    {
        antelope_mexUsageMsgTxt ( USAGE );
        return;
    }

    if( nrhs == 3 ) {

        if( ! get_scalar( prhs[2], &type_fp ) ) {

            antelope_mexUsageMsgTxt ( USAGE );
            return;

        } else {

            type = (long) type_fp;
        }
    }

    db = dbgroup( db, groupfields, NULL, type );
    antelope_mex_clear_register( 1 );

    freetbl( groupfields, 0 );

    if( db.table == dbINVALID )
    {
        mexErrMsgTxt( "dbgroup: group failed" );
    }

    plhs[0] = CreateDbptrStructFromDbptr( db );

    if( plhs[0] == NULL )
    {
        sprintf( errmsg, "dbgroup: failed to create database-pointer " );
        strcat( errmsg, "structure for result" );
        mexErrMsgTxt( errmsg );
    }
}
コード例 #7
0
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
	Dbptr	db;
	char	*tablename = 0;
	char	filename[FILENAME_MAX];
	char	status[STRSZ];
	int	rc;

	if( nrhs != 2 )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
        else if( ! get_dbptr( prhs[0], &db ) )
        {
                antelope_mexUsageMsgTxt ( USAGE );
		return;
        }
	else if( ! mtlb_get_string( prhs[1], &tablename ) )
        {
                antelope_mexUsageMsgTxt ( USAGE );
		return;
        }

	rc = dbextfile( db, tablename, filename );
	antelope_mex_clear_register( 1 );
	switch( rc ) {
	case 2:
		sprintf( status, "file exists, is compressed, and is readable" );
		break;
	case 1:
		sprintf( status, "file exists and is readable" );
		break;
	case 0:
		sprintf( status, "file does not exist, but directory is writeable" );
		break;
	case -1:
		sprintf( status, "file does not exist; directory is not writeable" );
		break;
	default:
		sprintf( status, "file status unknown" );
		break;
	}

	mxFree( tablename );

	plhs[0] = mxCreateString( filename );
	plhs[1] = mxCreateString( status );
}
コード例 #8
0
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
    Dbptr	tr;
    char	*newchan[3];
    Tbl	*newchan_tbl;
    int	rc;
    int	i;

    if( nrhs != 2 )
    {
        antelope_mexUsageMsgTxt ( USAGE );
        return;
    }
    else if( ! get_dbptr( prhs[0], &tr ) )
    {
        antelope_mexUsageMsgTxt ( USAGE );
        return;
    }
    else if( ! get_stringtbl( prhs[1], &newchan_tbl ) )
    {
        antelope_mexUsageMsgTxt ( USAGE );
        return;
    }

    if( maxtbl( newchan_tbl ) != 3 )
    {
        freetbl( newchan_tbl, 0 );
        mexErrMsgTxt( "NEWCHANS array must have three channel names" );
    }
    else
    {
        for( i = 0; i < 3; i++ )
        {
            newchan[i] = gettbl( newchan_tbl, i );
        }
    }

    rc = rotate_to_standard( tr, newchan );

    antelope_mex_clear_register( 1 );

    freetbl( newchan_tbl, 0 );

    plhs[0] = CreateDouble( (double) rc );
    if( plhs[0] == NULL )
    {
        mexErrMsgTxt( "trrotate_to_standard: failed to create return value" );
    }
}
コード例 #9
0
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
	Dbptr	db;
	char	*record;
	int	use_dbscratch = 0;
	int	rc;

	if( nrhs != 2  )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
	else if( ! get_dbptr( prhs[0], &db ) )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
	else if( ! mtlb_get_string( prhs[1], &record ) )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}

	if( STREQ( record, "dbSCRATCH" ) )
	{
		mxFree( record );
		record = 0;
	}

	rc = dbadd( db, record );
	antelope_mex_clear_register( 1 );

	if( record ) mxFree( record );

	if( rc < 0 )
	{
		mexErrMsgTxt( "dbadd: failed to add record" );
	}
	else
	{
		plhs[0] = CreateDouble( (double) rc );
		if( plhs[0] == NULL )
		{
			mexErrMsgTxt( "dbadd: failed to create return value" );
		}
	}
}
コード例 #10
0
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
	Pf 	*pf;
	char	*name;
	char	*mystring;
	mxArray	*input[1];

	if( nlhs > 1 ) 
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}

	if( nrhs != 2 )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
        else if( ! get_pf( prhs[0], &pf ) )
        {
                antelope_mexUsageMsgTxt ( USAGE );
		return;
        }
	else if( ! mtlb_get_string( prhs[1], &name ) )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}

	pfconfig( "ask", (void *) matlabPfprompt );

	mystring = pfget_string( pf, name );	
	antelope_mex_clear_register( 1 );

	mxFree( name );

	if( mystring == NULL )
	{
		mexErrMsgTxt( "pfget_num: Couldn't get specified value" );
	}
	else
	{
		input[0] = mxCreateString( mystring );
		mexCallMATLAB( 1, plhs, 1, input, "str2double" );
		mxDestroyArray( input[0] );
	}
}
コード例 #11
0
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
	int	type;
	char	*string;
	int	printflag;
	double	*doublep;
	int	*intp;
	int	i;
	char	**messages;
	int	*count;
	int	NMAX;
	int	next, wrapflag;
	char	s[STRSZ];

	if( nrhs > 1 )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}

	if( nrhs == 1 )
	{
		if( ! mtlb_get_string( prhs[0], &string ) )
		{
			antelope_mexUsageMsgTxt ( USAGE );
			return;
		} 
		else if( ! STREQ( string, "print" ) )
		{
			antelope_mexUsageMsgTxt ( USAGE );
			return;
		} 
		else
		{
			mxFree( string );
			printflag = 1;
		}

	}
	else
	{
		printflag = 0;
	}

	antelope_mex_clear_register ( printflag );
}
コード例 #12
0
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
	Dbptr	tr;

	if( nrhs != 1 )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
        else if( ! get_dbptr( prhs[0], &tr ) )
        {
                antelope_mexUsageMsgTxt ( USAGE );
		return;
        }

	trdestroy( &tr );
	antelope_mex_clear_register( 1 );
}
コード例 #13
0
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
	Dbptr	tr;
	char	*tr_path = 0;
	char 	*schema_name = 0;
	char	errmsg[STRSZ];

	if( nrhs > 2 )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
        else if( nrhs >= 1 && ! get_trimmed_string( prhs[0], &tr_path ) )
        {
                antelope_mexUsageMsgTxt ( USAGE );
		return;
        }
	else if( nrhs == 2 && ! mtlb_get_string( prhs[1], &schema_name ) )
        {
		mxFree( tr_path );
                antelope_mexUsageMsgTxt ( USAGE );
		return;
        }

	tr = trnew( tr_path, schema_name ); 
	antelope_mex_clear_register( 1 );

	if( tr_path ) mxFree( tr_path );
	if( schema_name ) mxFree( schema_name );

	if( tr.database == dbINVALID ) 
	{
		mexErrMsgTxt( "trnew: failed to create new trace database" );
	}

	plhs[0] = CreateDbptrStructFromDbptr( tr );

	if( plhs[0] == NULL )
	{
		sprintf( errmsg, "trnew: failed to create database-pointer " );
		strcat( errmsg, "structure for result" );
		mexErrMsgTxt( errmsg );
	}
}
コード例 #14
0
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
	Dbptr	db;
	char	*table;
	char	errmsg[STRSZ];

	if( nrhs != 2 )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
	else if( ! get_dbptr( prhs[0], &db ) )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
	else if( ! mtlb_get_string( prhs[1], &table ) )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}

	db = dbseparate( db, table );
	antelope_mex_clear_register( 1 );
	if( db.table == dbINVALID ) 
	{
		mexErrMsgTxt( "dbseparate: returned invalid database pointer" );
	}

	mxFree( table );

	plhs[0] = CreateDbptrStructFromDbptr( db );

	if( plhs[0] == NULL )
	{
		sprintf( errmsg, "dbseparate: failed to create " );
		strcat( errmsg, "database-pointer structure for result" );
		mexErrMsgTxt( errmsg );
	}
}
コード例 #15
0
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
	double	orbfd;
	double	time;
	int	nselected;
	int	pktid;

	if( nlhs > 1 )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}

	if( nrhs != 2 )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
	if( ! get_scalar( prhs[0], &orbfd ) )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		mexErrMsgTxt( "orbafter: bad orb file descriptor\n" );
	}
	if( ! get_scalar( prhs[1], &time ) )
	{
		antelope_mexUsageMsgTxt ( USAGE );
	}

	pktid = mex_orbafter( (int) orbfd, time );
	antelope_mex_clear_register ( 1 );

	plhs[0] = CreateDouble( (double) pktid );
	if( plhs[0] == NULL )
	{
		mexErrMsgTxt( "orbafter: failed to create return value" );
	}
}
コード例 #16
0
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
	Dbptr	tr;
	double	tolerance;

	if( nrhs != 2 )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
        else if( ! get_dbptr( prhs[0], &tr ) )
        {
                antelope_mexUsageMsgTxt ( USAGE );
		return;
        }
	else if( ! get_scalar( prhs[1], &tolerance ) )
	{
                antelope_mexUsageMsgTxt ( USAGE );
		return;
	}

	trsplice( tr, tolerance, 0, 0 ); 
	antelope_mex_clear_register( 1 );
}
コード例 #17
0
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
	char	*formatstring;
	char	*timestring;
	mxArray	*timestr;
	double	*epoch;
	int	M, N;
	int	nsubs = 2;
	int	subs[2];
	int	cell_index;
	int	i, j;

	if( nrhs != 2 )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
        else if( mxGetClassID( prhs[0] ) != mxDOUBLE_CLASS )
        {
                antelope_mexUsageMsgTxt ( USAGE );
		return;
        }
        else if( ! mtlb_get_string( prhs[1], &formatstring ) )
        {
                antelope_mexUsageMsgTxt ( USAGE );
		return;
        }

	epoch = mxGetPr( prhs[0] );

	M = mxGetM( prhs[0] );
	N = mxGetN( prhs[0] );

	if( M == 1 && N == 1 ) 
	{
		timestring = epoch2str( *epoch, formatstring );
		antelope_mex_clear_register( 1 );
		plhs[0] = mxCreateString( timestring );
		free( timestring );
	}
	else 
	{

		plhs[0] = mxCreateCellMatrix( M, N );

		for( i = 0; i < M; i++ ) 
		{
	   	   for( j = 0; j < N; j++ ) 
	   	   {

			timestring = epoch2str( *(epoch + i*N + j),
						 formatstring );
			antelope_mex_clear_register( 1 );
			timestr = mxCreateString( timestring );
			free( timestring );

			subs[0] = i; 
			subs[1] = j;

			cell_index = mxCalcSingleSubscript( plhs[0],
							    nsubs, subs );

			mxSetCell( plhs[0], cell_index, timestr );
	   	   }
		}
	}

	mxFree( formatstring );
}
コード例 #18
0
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
	Dbptr	db;
	Dbptr	tr;
	int	type;
	char	*table = NULL;
	char	*time_str = NULL, *endtime_str = NULL;
	double	scalar;
	double	*doublep;
	float	*floatp;
	int	*intp;
	char	*s;
	char	errmsg[STRSZ];
	int	rc;

	if( nrhs < 3 || nrhs > 5 )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
        else if( ! get_dbptr( prhs[0], &db ) )
        {
                antelope_mexUsageMsgTxt ( USAGE );
		return;
        }
	else if( nrhs == 4 )
	{
		if( ! mtlb_get_string( prhs[3], &table ) )
		{
			if( ! get_dbptr( prhs[3], &tr ) )
			{
				antelope_mexUsageMsgTxt ( USAGE );
				return;
			}
		}
	}
	else if( nrhs == 5 )
	{
		if( ! get_dbptr( prhs[3], &tr ) )
		{
			antelope_mexUsageMsgTxt ( USAGE );
			return;
		}

		if( ! mtlb_get_string( prhs[4], &table ) )
		{
			antelope_mexUsageMsgTxt ( USAGE );
			return;
		}
	}

	if( ! mtlb_get_string( prhs[1], &time_str ) )
	{
		if( ! get_scalar( prhs[1], &scalar ) )
		{
			if( table ) mxFree( table );
                	antelope_mexUsageMsgTxt ( USAGE );
			return;
		}
		else
		{
			s = epoch2str( scalar, "%E\0" );
			antelope_mex_clear_register( 1 );
			
			time_str = mxCalloc( STRSZ, sizeof( char ) );
			strcpy( time_str, s );
			free( s );
		}
	}

	if( ! mtlb_get_string( prhs[2], &endtime_str ) )
	{
		if( ! get_scalar( prhs[2], &scalar ) )
		{
			if( table ) mxFree( table );
                	antelope_mexUsageMsgTxt ( USAGE );
			return;
		}
		else
		{
			s = epoch2str( scalar, "%E\0" );
			antelope_mex_clear_register( 1 );
			
			endtime_str = mxCalloc( STRSZ, sizeof( char ) );
			strcpy( endtime_str, s );
			free( s );
		}
	}

	if( nrhs <= 3 || ( nrhs == 4 && table != NULL ) ) 
	{
		tr.database = dbINVALID;
	}

	rc = trload_css( db, time_str, endtime_str, &tr, table, 0 );
	antelope_mex_clear_register( 1 );

	if( table ) mxFree( table );
	mxFree( time_str );
	mxFree( endtime_str );

	if( rc < 0 )
	{
		mexPrintf( "trload_css: No matching data were found\n" );
	}
	else if( rc > 0 )
	{
		mexErrMsgTxt( "trload_css failed\n" );
	}
	else  /* Success */
	{
		plhs[0] = CreateDbptrStructFromDbptr( tr );

		if( plhs[0] == NULL )
		{
			sprintf( errmsg, "trload_css: failed to create " );
			strcat( errmsg, "database-pointer structure " );
			strcat( errmsg, "for result" );
			mexErrMsgTxt( errmsg );
		}
	}
}
コード例 #19
0
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
	Dbptr	db;
	char	*database;
	char	*table;
	char	*field;
	char	*record;
	char	errmsg[STRSZ];

	if( nrhs != 5  )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
	else if( ! get_dbptr( prhs[0], &db ) )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
	else if( ! mtlb_get_string( prhs[1], &database ) )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
	else if( ! mtlb_get_string( prhs[2], &table ) )
	{
		mxFree( database );
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
	else if( ! mtlb_get_string( prhs[3], &field ) )
	{
		mxFree( database );
		mxFree( table );
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
	else if( ! mtlb_get_string( prhs[4], &record ) )
	{
		mxFree( database );
		mxFree( table );
		mxFree( field );
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}

	if( ! STREQ( record, "" ) &&
	    ! STREQ( record, "dbSCRATCH" ) &&
	    ! STREQ( record, "dbNULL" ) && 
	    ! STREQ( record, "dbALL" ) )
	{
		/* We're trying to match a record... */

		if( STREQ( field, "dbALL" ) ||
		    ( STREQ( field, "" ) && db.field < 0 ) )
		{
			/* But we don't know which field to look at */

			mxFree( database );
			mxFree( table );
			mxFree( field );
			mxFree( record );
			mexErrMsgTxt(
			  "dblookup: Specify field before matching records" );
		}

	}

	db = dblookup( db, database, table, field, record );
	antelope_mex_clear_register( 1 );

	mxFree( database );
	mxFree( table );
	mxFree( field );
	mxFree( record );

	plhs[0] = CreateDbptrStructFromDbptr( db );

	if( plhs[0] == NULL )
	{
		sprintf( errmsg, "dblookup: failed to create " );
		strcat( errmsg, "database-pointer structure for result" );
		mexErrMsgTxt( errmsg );
	}
}
コード例 #20
0
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
	Dbptr	db;
	Point	*polygon;
	int 	nrec;
	int 	single_record;
	double 	NaN;
	double	*lat;
	double	*lon;
	int		nvertices;
	int 	nsaved,closed;
	int		i,j;
	double  *lat_pr, *lon_pr;
	Expression	*expr;
	int		maxneeded;
	int		sumpoints;
	int		*nanindices;
	char 	closedstr[2];

	
	NaN=mxGetNaN();

	if ( nrhs != 1 ) {
		antelope_mexUsageMsgTxt ( USAGE ); return;
	} else if ( ! get_dbptr( prhs[0], &db ) ) {
		antelope_mexUsageMsgTxt ( USAGE ); return;
	} else if ( nlhs != 2 ) {
		antelope_mexUsageMsgTxt ( USAGE ); return;
	}

	if (dbquery( db, dbRECORD_COUNT, &nrec) < 0) {
		antelope_mex_clear_register( 1 );
		mexErrMsgTxt("readpolygon: dbquery(recordcount) failed\n");
	}
	if (nrec <= 0 ) {
		mexErrMsgTxt("readpolygon: no rows in database view\n");
	}
	if (db.record == dbALL) {
		if (nrec == 1) {
			single_record= 1;
			db.record=0;
			dbgetv(db,0,"npoints",&sumpoints,0);
			maxneeded= (nrec*2) + sumpoints;
		} else {
			single_record=0;
			db.record=0;
			dbex_compile(db,"sum(npoints)",&expr,dbINTEGER);
			dbex_eval(db,expr,0,&sumpoints);
			dbex_free(expr);
			maxneeded= (nrec*2) + sumpoints;
			nanindices=mxCalloc(nrec,sizeof(int));
		}
	} else {
		if (db.record >= 0) {
			single_record= 1;
			dbgetv(db,0,"npoints",&sumpoints,"closed",&closedstr,0);
			maxneeded= (nrec*2) + sumpoints;
		} else {
			mexErrMsgTxt("readpolygon: unspecified subset?!?\n");
		}
	}
	
	nsaved= 0;
	nvertices= readPolygon(db,&polygon);
	lat= mxCalloc(maxneeded+1, sizeof(double));
	lon= mxCalloc(maxneeded+1, sizeof(double));
	for (j= 0; j < nvertices; j++) {
		lat[j]= polygon[j].lat;
		lon[j]= polygon[j].lon;
	}
	nsaved += nvertices;
	free(polygon);
	/* eventually close polygon*/
	if (strncmp(closedstr,"y",1)==0) {
		if ( (lat[nvertices-1] != lat[0]) || (lon[nvertices-1] != lon[0]) ) {
			nsaved++;
			lat[nsaved-1]= lat[0];
			lon[nsaved-1]= lon[0];
		}
	}
	if ( (single_record == 0) && (nrec > 1) ) {
		for (i= 1; i < nrec; i++) {
			db.record=i;
			dbgetv(db,0,"closed",&closedstr,0);
			nvertices= readPolygon(db,&polygon);
			/* separate (sub)polygons by NaN */
			lat[nsaved + 1]=NaN;
			lon[nsaved + 1]=NaN;
			nanindices[i-1]= nsaved+1;
			nsaved++;
			for (j= 0; j < nvertices; j++) {
				lat[j+nsaved]= polygon[j].lat;
				lon[j+nsaved]= polygon[j].lon;
			}
			nsaved += nvertices;
			/* eventually close polygon*/
			if (strncmp(closedstr,"y",1)==0) {
				if ( (lat[nvertices-1] != lat[0]) || (lon[nvertices-1] != lon[0]) ) {
					lat[nsaved]= lat[nsaved-nvertices];
					lon[nsaved]= lon[nsaved-nvertices];
					nsaved++;
				}
			}	
			free(polygon);
		}
	}
	plhs[0] = mxCreateDoubleMatrix(nsaved,1,mxREAL);
	lat_pr=(double *)mxGetPr(plhs[0]);
	memcpy(lat_pr, lat, nsaved*sizeof(double));	
	
	plhs[1] = mxCreateDoubleMatrix(nsaved,1,mxREAL);
	lon_pr=(double *)mxGetPr(plhs[1]);
	memcpy(lon_pr, lon, nsaved*sizeof(double));	
	/* NaN does NOT pass the memcpy */
	if (single_record == 0) {
		for (i=0; i < nrec-1; i++) {
			lat_pr[nanindices[i]-1]=NaN;
			lon_pr[nanindices[i]-1]=NaN;
		}
		mxFree(nanindices);
	}

	mxFree(lat);
	mxFree(lon);
}
コード例 #21
0
ファイル: dbgetv.c プロジェクト: vonseg/antelope_contrib
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
	Dbptr	db;
	int	single_row;
	int	nrows;
	int	nfields;
	char	*field_name;
	int	arg_index;
	int	rc;
	int	i;

	if( nrhs < 2 )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
        else if( ! get_dbptr( prhs[0], &db ) )
        {
                antelope_mexUsageMsgTxt ( USAGE );
		return;
        }

	nfields = nrhs - 1;
	for( i=0; i< nfields; i++ )
	{
		arg_index = i + 1;
		if( mxGetClassID( prhs[arg_index] ) != mxCHAR_CLASS )
		{
			antelope_mexUsageMsgTxt ( USAGE );
			return;
		}
	}

	rc = dbquery( db, dbRECORD_COUNT, &nrows );
	antelope_mex_clear_register( 1 );
	if( rc == dbINVALID ) 
	{
		mexErrMsgTxt( "dbgetv: query for number of records failed" );
	}

	if( nrows <= 0 ) 
	{
		mexErrMsgTxt( "dbgetv: no rows in database view" );
	}

	if( db.record == dbALL ) {
		if( nrows == 1 ) {
			single_row = 1;
			db.record = 0;
		} else {
			single_row = 0;
		}
	} else {
		single_row = 1;
	}

	for( i = 0; i < nfields; i++ )
	{
		arg_index = i + 1;

		get_malloced_string( prhs[arg_index], &field_name );

		db = dblookup ( db, 0, 0, field_name, 0 );
		antelope_mex_clear_register( 1 );

		if( db.field < 0 ) 
		{
			cleanup_and_bail( plhs, field_name, i );
		}

		if( single_row )
		{
			plhs[i] = dbfield2mxArray( db );
		}
		else
		{
			plhs[i] = dbcolumn2mxArray( db );
		}

		if( plhs[i] == (mxArray *) NULL )
		{
			cleanup_and_bail( plhs, field_name, i );
		}

		mxFree( field_name );
	}
}
コード例 #22
0
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
	Dbptr	db;
	Tbl	*tbl;
	char	**sortfields;
	char	errmsg[STRSZ];
	int	i, arg_index, nvarargs;
	int	flags = 0;
	int	rc;

	if( nrhs < 1 )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
        else if( ! get_dbptr( prhs[0], &db ) )
        {
                antelope_mexUsageMsgTxt ( USAGE );
		return;
        }

	nvarargs = nrhs - 1;
	for( i = 0; i<nvarargs; i++) 
	{
		arg_index = i + 1;
		if( mxGetClassID( prhs[arg_index] ) != mxCHAR_CLASS )
		{
			antelope_mexUsageMsgTxt ( USAGE );
			return;
		}
	}

	if( nvarargs > 0 )
	{
		tbl = newtbl( nvarargs );
		sortfields = (char **) mxCalloc( nvarargs, sizeof( char * ) );
		for( i = 0; i < nvarargs; i++ )
		{
			arg_index = i + 1;
			get_malloced_string( prhs[arg_index], &sortfields[i] );

			if( STREQ( sortfields[i], "dbSORT_UNIQUE" ) ) {

				flags |= dbSORT_UNIQUE;

			} else if( STREQ( sortfields[i], "dbSORT_REVERSE" ) ) {

				flags |= dbSORT_REVERSE;

			} else {

				pushtbl( tbl, sortfields[i] );
			}
		}
	}
	else
	{
		rc = dbquery ( db, dbPRIMARY_KEY, &tbl );
		antelope_mex_clear_register( 1 );
		if( rc == dbINVALID ) 
		{
			mexErrMsgTxt( "dbsort: query for primary keys failed" );
		}
	}

	db = dbsort ( db, tbl, flags, 0) ;
	antelope_mex_clear_register( 1 );

	if( nvarargs > 0 )
	{
		for( i = 0; i < nvarargs; i++ )
		{
			mxFree( sortfields[i] );
		}
		mxFree( sortfields );
		freetbl( tbl, 0 );
	}

	if( db.table == dbINVALID )
	{
		mexErrMsgTxt( "dbsort failed" );
	}

	plhs[0] = CreateDbptrStructFromDbptr( db );

	if( plhs[0] == NULL )
	{
		sprintf( errmsg, "dbsort: failed to create database-pointer " );
		strcat( errmsg, "structure for result" );
		mexErrMsgTxt( errmsg );
	}
}
コード例 #23
0
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
	Response *response;
	double 	*real_ptr, *imag_ptr; 
	double	*omega_ptr;
	int	M, N;
	int	nelements;
	int	rc;
	int	i;

	if( nlhs > 1 ) 
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}

	if( nrhs != 2 )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
        else if( ! mtlb_get_response( prhs[0], &response ) )
        {
                antelope_mexUsageMsgTxt ( USAGE );
		return;
        }
	else if( mxGetClassID( prhs[1] ) != mxDOUBLE_CLASS )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
	else if( mxGetNumberOfDimensions( prhs[1] ) != 2 )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
	
	M = mxGetM( prhs[1] );
	N = mxGetN( prhs[1] );

	plhs[0] = mxCreateDoubleMatrix( M, N, mxCOMPLEX );

	nelements = M * N;

	omega_ptr = (double *) mxGetPr( prhs[1] );
	real_ptr = (double *) mxGetPr( plhs[0] );
	imag_ptr = (double *) mxGetPi( plhs[0] );

	for( i = 0; i < nelements; i++ ) 
	{
		rc = eval_response( *omega_ptr++, response,
					real_ptr++, imag_ptr++ );
		
		if( rc ) {
			mxDestroyArray( plhs[0] );
			antelope_mex_clear_register( 1 );
			mexErrMsgTxt( "eval_response failed" );

		}
	}
}
コード例 #24
0
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
	double	orbfd;
	char	*orbstring_code;
	char	*nodelay_string;
	int	nodelay = 0;
	char	errmsg[STRSZ];
	int	pktid;
	char	srcname[STRSZ];
	char	pkttype[STRSZ];
	double	time;
	char	*packet = 0;
	int	nbytes = 0;
	int	bufsize = 0;
	int	rc;		

	if( nrhs < 1 || nrhs > 2  )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
        else if( ! get_scalar( prhs[0], &orbfd ) )
        {
                antelope_mexUsageMsgTxt ( USAGE );
		return;
        }

        if( nrhs == 2 )
	{
		if( ! mtlb_get_string( prhs[1], &nodelay_string ) || ! STREQ( nodelay_string, "nodelay" ) )
		{
                	antelope_mexUsageMsgTxt ( USAGE );
			return;
		}
		else
		{
			mxFree( nodelay_string );
			nodelay = 1;
		}
        }

	if( nodelay )
	{
		rc = mex_orbreap_nd( (int) orbfd, &pktid, &srcname[0], &time,
			      &packet, &nbytes, &bufsize );
	} 
	else
	{
		rc = mex_orbreap( (int) orbfd, &pktid, &srcname[0], &time,
			      &packet, &nbytes, &bufsize );
	}
	antelope_mex_clear_register( 1 );

	if( rc < 0 )
	{
		return;
	}

	plhs[0] = orbpkt2mxArray( srcname, time, packet, nbytes, pkttype );
	plhs[1] = CreateDouble( time );
	plhs[2] = mxCreateString( srcname );
	plhs[3] = CreateDouble( (double) pktid );
	plhs[4] = mxCreateString( pkttype );

	free( packet );
}
コード例 #25
0
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
	Dbptr	db;
	Point	*polygon;
	char 	*pname;
	char	*ptype;
	char	*auth;
	char	*dir;
	char	*dfile;
	char	*s_pcode;
	int		pcode;
	double	*lat;
	double	*lon;
	long		nsamp;
	mwSize 	nlat,nlon;
	const mwSize		*dimensions;
	int	i;
	int retcode;
	char *dbfile_name;
	char *dbschema_name;
	char errmsg[STRSZ];


	if ( nrhs != 9 ) {
		antelope_mexUsageMsgTxt ( USAGE ); return;
	} else if ( ! get_dbptr( prhs[0], &db ) ) {
		antelope_mexUsageMsgTxt ( USAGE ); return;
	} else if ( !mxIsDouble( prhs[1] ) ) {
		antelope_mexUsageMsgTxt ( USAGE ); return;
	} else if ( !mxIsDouble( prhs[2] ) ) {
		antelope_mexUsageMsgTxt ( USAGE ); return;
	} else if ( !mxIsChar( prhs[3] ) ) {
		antelope_mexUsageMsgTxt ( USAGE ); return;
	} else if ( !mxIsChar( prhs[4] ) ) {
		antelope_mexUsageMsgTxt ( USAGE ); return;
	} else if ( !mxIsChar( prhs[5] ) ) {
		antelope_mexUsageMsgTxt ( USAGE ); return;
	} else if ( !mxIsChar( prhs[6] ) ) {
		antelope_mexUsageMsgTxt ( USAGE ); return;
	} else if ( !mxIsChar( prhs[7] ) ) {
		antelope_mexUsageMsgTxt ( USAGE ); return;
	} else if ( !mxIsChar( prhs[8] ) ) {
		antelope_mexUsageMsgTxt ( USAGE ); return;
	}
	dimensions= (mwSize*) mxGetDimensions( prhs[1] );
	if (dimensions[1] != 1 && dimensions[0] != 1) {
		mexErrMsgTxt("writepolygondata: LAT must have dimensions Nx1 or 1xN\n");
	}
	if (dimensions[1] == 1) {
		nlat= dimensions[0];
	} else {
		nlat= dimensions[1];
	}
	dimensions= (mwSize *)mxGetDimensions( prhs[2] );
	if (dimensions[1] != 1 && dimensions[0] != 1) {
		mexErrMsgTxt("writepolygondata: LON must have dimensions Nx1 or 1xN\n");
	}
	if (dimensions[1] == 1) {
		nlon= dimensions[0];
	} else {
		nlon= dimensions[1];
	}
	if (nlat != nlon) {
		mexErrMsgTxt("writepolygondata: LAT and LON must be of same size\n");
	}
	if( ( retcode = dbquery(db, dbDATABASE_FILENAME, &dbfile_name) ) < 0 ) {
			mexErrMsgTxt("writepolygondata: problem getting descriptor filename\n");
	}
	if ( is_file(dbfile_name)==1 ) {
		if( ( retcode = dbquery(db, dbSCHEMA_NAME, &dbschema_name) ) < 0 ) {
				mexErrMsgTxt("writepolygondata: problem getting schema name\n");
		} else {
				if (strmatches(dbschema_name,"polygon1.2.*", 0) != 1) {
						sprintf(errmsg, "writepolygondata: wrong schema '%s' for output database '%s'\n",dbschema_name,dbfile_name);
						mexErrMsgTxt(errmsg);
				}
		}
	} else {
		sprintf(errmsg, "writepolygondata: please create database schema '%s' with schema polygon1.2\n",dbfile_name);
		mexErrMsgTxt(errmsg);
			//there might be a fix, but for the moment this simply does NOT work
		if (dbcreate(dbfile_name,"polygon1.2",0, 0, 0) != 0 ) {
				mexErrMsgTxt("writepolygondata: problem with dbcreate\n");
		}
	}


	
	nsamp= (long) nlat;

	lat= mxGetPr(prhs[1]);
	lon= mxGetPr(prhs[2]);
	polygon= mxCalloc(nsamp+1,sizeof(Point));
	
	for (i= 0; i < nsamp; i++) {
		polygon[i].lat=lat[i];
		polygon[i].lon=lon[i];
	}

	get_malloced_string(prhs[3],&pname);
	get_malloced_string(prhs[4],&ptype);
	get_malloced_string(prhs[5],&auth);
	get_malloced_string(prhs[6],&dir);
	get_malloced_string(prhs[7],&dfile);
	get_malloced_string(prhs[8],&s_pcode);

	pcode= polycode(s_pcode);

	/*maybe nsamp -1, check later...*/
	writePolygonData(db,polygon,nsamp,pname,1,1,ptype,auth,dir,dfile,pcode);

	antelope_mex_clear_register(1);

	mxFree(polygon);
	mxFree(s_pcode);
	mxFree(dfile);
	mxFree(dir);
	mxFree(auth);
	mxFree(ptype);
	mxFree(pname);
}
コード例 #26
0
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
	Dbptr	db;
	Dbvalue	*value;
	char	errmsg[STRSZ];
	char	*field_name;
	int	nfields;
	int	retcode = 0;
	int	rc;
	long	type;
	int	fieldname_index;
	int	fieldval_index;
	int	i;

	if( nrhs < 3 )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
	else if( ( nrhs - 1 ) % 2 != 0 )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
        else if( ! get_dbptr( prhs[0], &db ) )
        {
                antelope_mexUsageMsgTxt ( USAGE );
		return;
        }

	nfields = ( nrhs - 1 ) / 2;

	for( i = 0; i < nfields; i++ )
	{
		fieldname_index = i * 2 + 1;
		if( mxGetClassID( prhs[fieldname_index] ) != mxCHAR_CLASS )
		{
			antelope_mexUsageMsgTxt ( USAGE );
			return;
		}
	}

	for( i=0; i<nfields; i++ )
	{
		fieldname_index = i * 2 + 1;
		fieldval_index = fieldname_index + 1;

		get_malloced_string( prhs[fieldname_index], &field_name );

		db = dblookup ( db, 0, 0, field_name, 0 );
		antelope_mex_clear_register( 1 );

		rc = dbquery ( db, dbFIELD_TYPE, &type );
		antelope_mex_clear_register( 1 );
		if( rc == dbINVALID )
		{
			sprintf( errmsg,
				 "dbputv: dbquery failed for field %s",
				 field_name );
			mxFree( field_name );
			mexErrMsgTxt( errmsg );
		}

		value = mxArray2dbvalue( prhs[fieldval_index], type );
		if( value == (Dbvalue *) NULL )
		{
			sprintf( errmsg,
				 "dbputv: failed to convert field %s",
				 field_name );
			mxFree( field_name );
			mexErrMsgTxt( errmsg );
		}

		switch (type ) {
		case dbDBPTR:
			retcode |= dbputv( db, 0, field_name, value->db, NULL );
			break;
		case dbSTRING:
			retcode |= dbputv( db, 0, field_name, value->s, NULL );
			break;
		case dbBOOLEAN:
		case dbYEARDAY:
		case dbINTEGER:
			retcode |= dbputv( db, 0, field_name, value->i, NULL );
			break;
		case dbREAL:
		case dbTIME:
			retcode |= dbputv( db, 0, field_name, value->d, NULL );
			break;
		default:
			retcode = -1;
			break;
		}
		antelope_mex_clear_register( 1 );

		mxFree( value );
		mxFree( field_name );
	}

	if( retcode != 0 )
	{
		mexErrMsgTxt( "dbputv failed" );
	}
}
コード例 #27
0
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
	Dbptr	db;
	mxArray	*array_ptr;
	char	errmsg[STRSZ];
	char	*dbstring_code;
	int	dbcode;
	int	retcode;
	char	*string;
	Tbl	*tbl;
	long	n;
	int	i;

	if( nrhs != 2  )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
        else if( ! get_dbptr( prhs[0], &db ) )
        {
                antelope_mexUsageMsgTxt ( USAGE );
		return;
        }
        else if( ! mtlb_get_string( prhs[1], &dbstring_code ) )
        {
                antelope_mexUsageMsgTxt ( USAGE );
		return;
        }

	dbcode = xlatname( dbstring_code, Dbxlat, NDbxlat );

	switch( dbcode )
	{
	case dbSCHEMA_DEFAULT:
	case dbDATABASE_FILENAME:
	case dbIDSERVER:
	case dbLOCKS:
        case dbSCHEMA_DESCRIPTION:
        case dbTIMEDATE_NAME:
        case dbDATABASE_DESCRIPTION:
        case dbTABLE_DESCRIPTION:
        case dbFIELD_DESCRIPTION:
        case dbSCHEMA_DETAIL:
        case dbDATABASE_DETAIL:
        case dbTABLE_DETAIL:
        case dbFIELD_DETAIL:
        case dbSCHEMA_NAME:
        case dbDATABASE_NAME:
        case dbTABLE_NAME:
        case dbFIELD_NAME:
        case dbTABLE_FILENAME:
        case dbTABLE_DIRNAME:
        case dbFIELD_RANGE:
        case dbFIELD_FORMAT:
        case dbDBPATH:
        case dbFORMAT:
        case dbFIELD_UNITS:
        case dbFIELD_BASE_TABLE:
        case dbUNIQUE_ID_NAME:
		if( ( retcode = dbquery(db, dbcode, &string) ) >= 0 )
		{
			plhs[0] = mxCreateString( string );
		}
		antelope_mex_clear_register( 1 );
		break;

        case dbDATABASE_COUNT:
        case dbTABLE_COUNT:
        case dbFIELD_COUNT:
        case dbRECORD_COUNT:
        case dbTABLE_SIZE:
        case dbFIELD_SIZE:
        case dbFIELD_INDEX:
        case dbVIEW_TABLE_COUNT:
        case dbRECORD_SIZE:
        case dbTABLE_IS_WRITEABLE:
        case dbTABLE_IS_VIEW:
	case dbDATABASE_IS_WRITABLE:
	case dbTABLE_PRESENT:
	case dbTABLE_IS_TRANSIENT:
		if( ( retcode = dbquery(db, dbcode, &n) ) >= 0 )
		{
			antelope_mex_clear_register( 1 );
			plhs[0] = CreateDouble( (double) n );
			if( plhs[0] == NULL )
			{
				mxFree( dbstring_code );
				mexErrMsgTxt( 
				   "dbquery: failed to create return value" );
			}
		}
		else
		{
			antelope_mex_clear_register( 1 );
		}
                break;  

        case dbFIELD_TYPE:
		if( ( retcode = dbquery(db, dbcode, &n) ) >= 0 )
		{
			antelope_mex_clear_register( 1 );
			plhs[0] = mxCreateString( xlatnum( n, Dbxlat, NDbxlat ) );
		}
		else
		{
			antelope_mex_clear_register( 1 );
		}
                break;  
 
        case dbLINK_FIELDS:
        case dbSCHEMA_FIELDS:
	case dbSCHEMA_TABLES:
        case dbFIELD_TABLES:
        case dbVIEW_TABLES:
        case dbTABLE_FIELDS:
        case dbPRIMARY_KEY:
        case dbALTERNATE_KEY:
        case dbFOREIGN_KEYS:
		if( ( retcode = dbquery(db, dbcode, &tbl) ) >= 0 )
		{
			antelope_mex_clear_register( 1 );
			plhs[0] = stringtbl2cellstr( tbl );
		}
		else
		{
			antelope_mex_clear_register( 1 );
		}
                break;  
 
        default:
		sprintf( errmsg, "dbquery: bad code '%s'", dbstring_code );
		mxFree( dbstring_code );
		mexErrMsgTxt( errmsg );
		break ;
	}

	mxFree( dbstring_code );
}
コード例 #28
0
int pfput_mxArray( Pf *pf, char *name, const mxArray *array )
{
	Pf	*sub_pf;
	double	number;
	char	*string;
	mxArray *in[2], *out[1];
	char	warning[STRSZ];
	char	*fieldname;
	mxArray	*mxfield;
	mxArray	*mxcell;
	int	M,N;
	int	rc;
	int	i;

	if( mxIsClass( array, "dbpf" ) )
	{
		if( ! get_pf( array, &sub_pf ) )
		{
			return PFINVALID;
		}

		if( sub_pf->type == PFFILE) 
		{
			/* Don't embed a PFFILE in something else */
			sub_pf->type = PFARR;
		}

    		switch (pf->type) {
        	case PFFILE:
        	case PFARR:
            		setarr ( pf->value.arr, name, sub_pf ) ;
            		break ;

        	case PFTBL:
            		settbl ( pf->value.tbl, (int) name, sub_pf ) ;
            		break ;
	
        	default :
			return PFINVALID;
        	}
		antelope_mex_clear_register( 1 );
	}
	else if( mxIsDouble( array ) )
	{
		if( ! get_scalar( array, &number ) )
		{
			return PFINVALID;
		}
	
		in[0] = (mxArray *) array; /* Input scalar */
		mexCallMATLAB( 1, out, 1, in, "floor" );
		in[1] = out[0];  /* floor( Input scalar ) */
		mexCallMATLAB( 1, out, 2, in, "eq" );
		mxDestroyArray( in[1] );
	
		if( mxIsLogicalScalarTrue( out[0] ) ) 
		{
			pfput_int( pf, name, (int) number );
		} 
		else 
		{
			pfput_double( pf, name, number );
		}
		antelope_mex_clear_register( 1 );

		mxDestroyArray( out[0] );
	}
	else if( mxIsChar( array ) )
	{
		if( ! mtlb_get_string( array, &string ) )
		{
			sprintf( warning, 
			  "failed to extract string for parameter %s\n",
			  name );
			mexWarnMsgTxt( warning );
			return PFINVALID;
		}

		pfput_string( pf, name, string );

		antelope_mex_clear_register( 1 );

		mxFree( string );
	}
	else if( mxIsStruct( array ) )
	{
		if( mxGetNumberOfDimensions( array ) > 2 ) 
		{
			sprintf( warning,
			  "structure has too many dimensions for parameter %s\n",
			  name );
			mexWarnMsgTxt( warning );
			return PFINVALID;
		}
		else if( mxGetM( array ) != 1 || mxGetN( array ) != 1 )
		{
			sprintf( warning,
			  "structure has too many elements for parameter %s\n",
			  name );
			mexWarnMsgTxt( warning );
			return PFINVALID;
		}
		N = mxGetNumberOfFields( array );

		sub_pf = pfnew( PFARR );

		for( i = 0; i < N; i++ ) 
		{
			fieldname = (char *) mxGetFieldNameByNumber( array, i );
			mxfield = mxGetFieldByNumber( array, 0, i );
			rc = pfput_mxArray( sub_pf, fieldname, mxfield );

			if( rc == PFINVALID )
			{
				pffree( sub_pf );
				return PFINVALID;
			}
		}

    		switch (pf->type) {
        	case PFFILE:
        	case PFARR:
            		setarr ( pf->value.arr, name, sub_pf ) ;
            		break ;

        	case PFTBL:
            		settbl ( pf->value.tbl, (int) name, sub_pf ) ;
            		break ;
	
        	default :
            		pffree( sub_pf );
			return PFINVALID;
        	}
		antelope_mex_clear_register( 1 );
	}
	else if( mxIsCell( array ) )
	{
                if( mxGetNumberOfDimensions( array ) > 2 )
                {
                        sprintf( warning,
                          "cell array has too many dimensions for parameter %s\n",
                          name );
                        mexWarnMsgTxt( warning );
                        return PFINVALID;
                }
                M = mxGetM( array );
                N = mxGetN( array );

		sub_pf = pfnew( PFTBL );
		for( i = 0; i < M * N; i++ ) 
		{
			mxcell = mxGetCell( array, i );
			rc = pfput_mxArray( sub_pf, (char *) i, mxcell );

			if( rc == PFINVALID )
			{
				pffree( sub_pf );
				return PFINVALID;
			}
		} 
    		switch (pf->type) {
        	case PFFILE:
        	case PFARR:
            		setarr ( pf->value.arr, name, sub_pf ) ;
            		break ;

        	case PFTBL:
            		settbl ( pf->value.tbl, (int) name, sub_pf ) ;
            		break ;
	
        	default :
            		pffree( sub_pf );
			return PFINVALID;
        	}
		antelope_mex_clear_register( 1 );
	}
	else 
	{
		return PFINVALID;
	}
	
	return 0;
}
コード例 #29
0
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
	Dbptr	db;
	char	*result = NULL;
	char	*dbscratch_string;
	int	use_dbscratch = 0;
	long	n;
	int	rc;
	double	*doublep;
	int	*intp;

	if( nrhs < 1 || nrhs > 2 )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
        else if( ! get_dbptr( prhs[0], &db ) )
        {
                antelope_mexUsageMsgTxt ( USAGE );
		return;
        }
	else if( nrhs == 2 ) 
        {
		if( ! mtlb_get_string( prhs[1], &dbscratch_string ) )
		{
                	antelope_mexUsageMsgTxt ( USAGE );
			return;
		}
		else if( ! STREQ( dbscratch_string, "dbSCRATCH" ) )
		{
			mxFree( dbscratch_string );
                	antelope_mexUsageMsgTxt ( USAGE );
			return;
		}
		else
		{
			mxFree( dbscratch_string );
			use_dbscratch = 1;
		}
        }

	if( use_dbscratch )
	{
		if( dbget( db, NULL ) < 0 )
		{
			antelope_mex_clear_register( 1 );
			mexErrMsgTxt( "dbget into scratch record failed" );
		}
	}
	else
	{
		rc = dbquery(db, dbSIZE, &n);
		antelope_mex_clear_register( 1 );
		if( rc == dbINVALID )
		{
			mexErrMsgTxt( "dbget: dbquery failed" );
		}

		result = (char *) mxCalloc( n+3, sizeof( char ) );

		if( dbget( db, result ) < 0 )
		{

			antelope_mex_clear_register( 1 );

			mxFree( result );
			mexErrMsgTxt( "dbget failed\n" );

		}
		else
		{
			if ( db.field != dbALL )
			{
				copystrip( result, result, n );
			}
			plhs[0] = mxCreateString( result );
			mxFree( result );
		}
	}

	antelope_mex_clear_register( 1 );
}
コード例 #30
0
void mexFunction ( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )
{
	Dbptr	tr;
	Dbptr	db;
	char	*datatype;
	char	*wfname;
	int	rc;
	int	flags = 0;
	char 	*flag_string;

	if( nrhs < 4 || nrhs > 5 )
	{
		antelope_mexUsageMsgTxt ( USAGE );
		return;
	}
        else if( ! get_dbptr( prhs[0], &tr ) )
        {
                antelope_mexUsageMsgTxt ( USAGE );
		return;
        }
        else if( ! get_dbptr( prhs[1], &db ) )
        {
                antelope_mexUsageMsgTxt ( USAGE );
		return;
        }
        else if( ! mtlb_get_string( prhs[2], &datatype ) )
        {
                antelope_mexUsageMsgTxt ( USAGE );
		return;
        }
        else if( ! mtlb_get_string( prhs[3], &wfname ) )
        {
                antelope_mexUsageMsgTxt ( USAGE );
		return;
        }

	if( nrhs == 5 )
	{
		if( ! mtlb_get_string( prhs[4], &flag_string ) ) 
		{
			antelope_mexUsageMsgTxt ( USAGE );
			return;
		}

		if( STREQ( flag_string, "overwrite" ) )
		{
			flags |= trOVERWRITE;
		}
		else if( STREQ( flag_string, "append" ) )
		{
			flags |= trAPPEND;
		}
		else
		{
			antelope_mexUsageMsgTxt ( USAGE );
			return;
		}
	}

	rc = trsave_wf( tr, db, datatype, wfname, flags );
	antelope_mex_clear_register( 1 );

	mxFree( datatype );
	mxFree( wfname );

	if( rc & TR_CLIPPED || rc & TR_TRUNCATED )
	{
		mexWarnMsgTxt( 
			"trsave_wf: clipping occurred during conversion\n" );
	}
	if( rc < 0 ) mexErrMsgTxt( "trsave_wf failed\n" );
}