Next: Interprocess Communication
Up: Some Useful Programs
Previous: Find me something big
  Contents
To not leave the software side out in the cold here's swlopue
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "GAT.h"
static void printGATList_GATResource( GATList_GATResource resources );
static GATResult addNameValue( GATTable table, const char *name, const char *value );
int main(int argc, char *argv[])
{
int counter;
char *name;
char *value;
int returnValue;
GATTable table;
GATResult result;
GATString string;
GATContext context;
GATList_GATResource resources;
GATResourceBroker resourceBroker;
GATSoftwareResourceDescription softwareResDes
/* Check command line arguments */
if( argc < 2 )
{
/* Print out error message */
printf( "Usage: hwloupe virtualorg [name=value]*\n" );
/* Return to OS */
return 1;
}
/* Set result to a memory failure */
result = GAT_MEMORYFAILURE;
/* Create GATContext */
context = GATContext_Create( );
/* Check GATContext creation */
if( NULL != context )
{
/* Create GATString */
string = GATString_Create( argv[1], strlen( argv[1] ) + 1, "ASCII" );
/* Check GATString creation */
if( NULL != string )
{
/* Create GATResourceBroker */
resourceBroker = GATResourceBroker_Create( context, NULL, string );
/* Check GATResourceBroker creation */
if( NULL != resourceBroker )
{
/* Create GATTable */
table = GATTable_Create();
/* Check GATTable creation */
if( NULL != GATTable)
{
/* Loop over command line arguments */
for( count = 2; count < argc; count++ )
{
/* Obtain name */
name = strtok( argv[count], "=" );
/* Obtain value */
if( NULL != name )
value = strtok( NULL, "=" );
/* Place name and value in GATTable */
result = addNameValue( table, name, value );
/* Print out addition error */
if( GAT_FAILED( result ) )
printf( "Error in adding the name/value pair: %s/%s\n", name, value );
}
/* Set result to a memory failure */
result = GAT_MEMORYFAILURE;
/* Create GATSoftwareResourceDescription *
softwareResDes =
GATSoftwareResourceDescription_Create( table );
/* Check GATSoftwareResourceDescription creation */
if( NULL != softwareResDes )
{
/* Find Resources */
result =
GATResourceBroker_FindResources( resourceBroker,
softwareResDes,
&resources );
/* Check success of last call */
if( GAT_SUCCEEDED( result ) )
{
/* Print resources */
printGATList_GATResource( resources );
/* Destroy GATList_GATResource */
GATList_GATResource_Destroy( &resources );
}
/* Destroy GATSoftwareResourceDescription */
GATSoftwareResourceDescription_Destroy( &softwareResDes );
}
/* Destroy GATTable */
GATTable_Destroy( &table );
}
/* Destroy GATResourceBroker */
GATResourceBroker_Destroy( &resourceBroker );
}
/* Destroy GATString */
GATString_Destroy( &string );
}
/* Destroy GATContext */
GATContext_Destroy( &context );
}
/* Return to OS */
return returnValue;
}
static GATResult addNameValue( GATTable table, const char *name, const char *value )
{
GATResult result;
GATfloat32 floatValue;
/* Set result to an invalid parameter */
result = GAT_INVALID_PARAMETER;
/* Check parameters */
if( (NULL != table) && (NULL != name) & (NULL != value) )
{
/* Add all as string values */
result = GATTable_Add_String( table, (const void *) name, value );
}
/* Return to caller */
return result;
}
static void printGATList_GATResource( GATList_GATResource resources )
{
int counter;
void **keys;
float nextFloat;
GATResult result;
GATType nextType;
char nextString[2048];
GATTable_const table;
GATResource resource;
GATList_GATResource_Iterator end;
GATList_GATResource_Iterator current;
GATSoftwareResource softwareResource;
GATSoftwareResourceDescription softwareResDes;
/* Check parameters */
if( NULL != resources )
{
/* Obtain Beginning Iterator */
current = GATList_GATResource_Begin( resources );
/* Check last call */
if( NULL != current )
{
/* Obtain Ending Iterator */
end = GATList_GATResource_End( resources );
/* Check last call */
if( NULL != end )
{
/* Loop over resources */
while( (NULL != current) && (current != end) )
{
/* Obtain next GATResource */
resource = GATList_GATResource_Get( current );
/* Check last call */
if( NULL != resource )
{
/* Convert the GATResource to a GATSoftwareResource
softwareResource = GATResource_ToGATSoftwareResource( resource );
/* Obtain the GATSoftwareResourceDescription */
result =
GATSoftwareResource_GetResourceDescription( softwareResource,
&softwareResDes );
/* Check last call */
if( GAT_SUCCEEDED( result ) )
{
/* Obtain GATTable */
table =
GATSoftwareResourceDescription_GetDescription( softwareResDes );
/* Check last call */
if( NULL != table )
{
/* Obtain keys */
keys = GATTable_GetKeys( table );
/* Check last call */
if( NULL != keys )
{
/* Set counter */
counter = 0;
/* Loop over keys */
while( NULL != keys[counter] )
{
/* Obtain value's type */
nextType = GATTable_Get_ElementType( table, keys[counter]);
/* Check type */
if( GATfloat32 == nextType )
{
/* Obtain float */
result =
GATTable_Get_float( table, keys[counter], &nextFloat );
/* Check last call */
if( GAT_SUCCEEDED( result ) )
{
/* Print name=value */
printf( "%s=%f\n", (char *) keys[counter], nextFloat );
}
}
/* Check type */
if( GATType_String == nextType )
{
/* Obtain string */
result =
GATTable_Get_String( table, keys[counter],
nextString, 2048 );
/* Check last call */
if( GAT_SUCCEEDED( result ) )
{
/* Print name=value */
printf( "%s=%s\n", (char *) keys[counter], nextString );
}
}
/* Increament counter */
counter = counter + 1;
}
/* Print blank line to separate resources */
printf( "\n" );
/* Destroy keys */
GATTable_ReleaseKeys( table, keys );
}
}
/* Destroy GATSoftwareResourceDescription */
GATSoftwareResourceDescription_Destroy( &softwareResDes );
}
}
/* Obtain Next Iterator */
current = GATList_GATResource_Next( current );
}
}
}
}
}
Andre Merzky
2004-05-13
|