Revision: 8256
http://playerstage.svn.sourceforge.net/playerstage/?rev=8256&view=rev
Author: rtv
Date: 2009-09-09 22:25:27 +0000 (Wed, 09 Sep 2009)
Log Message:
-----------
controllers now get their worldfile argument string
Modified Paths:
--------------
code/stage/trunk/examples/ctrl/fasr.cc
code/stage/trunk/examples/ctrl/wander.cc
code/stage/trunk/libstage/blockgroup.cc
code/stage/trunk/libstage/model_load.cc
code/stage/trunk/libstage/stage.hh
code/stage/trunk/libstage/worldfile.cc
code/stage/trunk/libstage/worldfile.hh
code/stage/trunk/libstage/worldgui.cc
Modified: code/stage/trunk/examples/ctrl/fasr.cc
===================================================================
--- code/stage/trunk/examples/ctrl/fasr.cc 2009-09-08 06:48:32 UTC (rev
8255)
+++ code/stage/trunk/examples/ctrl/fasr.cc 2009-09-09 22:25:27 UTC (rev
8256)
@@ -493,7 +493,7 @@
};
// Stage calls this when the model starts up
-extern "C" int Init( Model* mod )
+extern "C" int Init( Model* mod, char* str )
{
#if 1
// example using the model rasterizer
Modified: code/stage/trunk/examples/ctrl/wander.cc
===================================================================
--- code/stage/trunk/examples/ctrl/wander.cc 2009-09-08 06:48:32 UTC (rev
8255)
+++ code/stage/trunk/examples/ctrl/wander.cc 2009-09-09 22:25:27 UTC (rev
8256)
@@ -20,8 +20,14 @@
int PositionUpdate( Model* mod, robot_t* robot );
// Stage calls this when the model starts up
-extern "C" int Init( Model* mod )
+extern "C" int Init( Model* mod, char* argstr )
{
+ // local arguments
+ printf( "\nWander controller initialised with argument string \"%s\"",
argstr );
+ // global arguments
+ for( unsigned int i=0; i< World::args.size(); i++ )
+ printf( "\nWorld argument %d is %s", i, World::args[i].c_str() );
+
robot_t* robot = new robot_t;
robot->avoidcount = 0;
@@ -34,8 +40,6 @@
robot->laser->Subscribe(); // starts the laser updates
robot->pos->Subscribe(); // starts the position updates
- for( unsigned int i=0; i< World::args.size(); i++ )
- printf( "\nargument %d is %s", i, World::args[i].c_str() );
return 0; //ok
}
Modified: code/stage/trunk/libstage/blockgroup.cc
===================================================================
--- code/stage/trunk/libstage/blockgroup.cc 2009-09-08 06:48:32 UTC (rev
8255)
+++ code/stage/trunk/libstage/blockgroup.cc 2009-09-09 22:25:27 UTC (rev
8256)
@@ -258,7 +258,7 @@
strcpy( full, bitmapfile );
else
{
- char *tmp = strdup(wf->filename);
+ char *tmp = strdup(wf->filename.c_str());
snprintf( full, _POSIX_PATH_MAX,
"%s/%s", dirname(tmp), bitmapfile );
free(tmp);
Modified: code/stage/trunk/libstage/model_load.cc
===================================================================
--- code/stage/trunk/libstage/model_load.cc 2009-09-08 06:48:32 UTC (rev
8255)
+++ code/stage/trunk/libstage/model_load.cc 2009-09-09 22:25:27 UTC (rev
8256)
@@ -73,39 +73,39 @@
//PRINT_WARN1( "%s::Load", token );
- //if( wf->PropertyExists( wf_entity, "origin" ) )
+ if( wf->PropertyExists( wf_entity, "origin" ) )
+ {
+ Geom geom = GetGeom();
+ geom.pose.Load( wf, wf_entity, "origin" );
+ SetGeom( geom );
+ }
+
+ if( wf->PropertyExists( wf_entity, "size" ) )
{
Geom geom = GetGeom();
- geom.pose.Load( wf, wf_entity, "origin" );
- SetGeom( geom );
- }
-
- //if( wf->PropertyExists( wf_entity, "size" ) )
- {
- Geom geom = GetGeom();
geom.size.Load( wf, wf_entity, "size" );
SetGeom( geom );
}
- //if( wf->PropertyExists( wf_entity, "pose" ))
+ if( wf->PropertyExists( wf_entity, "pose" ))
{
Pose pose = GetPose();
- pose.Load( wf, wf_entity, "pose" );
+ pose.Load( wf, wf_entity, "pose" );
SetPose( pose );
}
-
- //if( wf->PropertyExists( wf_entity, "velocity" ))
+
+ if( wf->PropertyExists( wf_entity, "velocity" ))
{
Velocity vel = GetVelocity();
- vel.Load( wf, wf_entity, "velocity" );
+ vel.Load( wf, wf_entity, "velocity" );
SetVelocity( vel );
}
-
- if( wf->PropertyExists( wf_entity, "color" ))
- {
- Color col( 1,0,0 ); // red;
- const char* colorstr = wf->ReadString(
wf_entity, "color", NULL );
- if( colorstr )
+
+ if( wf->PropertyExists( wf_entity, "color" ))
+ {
+ Color col( 1,0,0 ); // red;
+ const char* colorstr = wf->ReadString( wf_entity, "color", NULL
);
+ if( colorstr )
{
if( strcmp( colorstr, "random"
) == 0 )
col = Color( drand48(),
drand48(), drand48() );
@@ -207,9 +207,6 @@
if( wf->PropertyExists( wf_entity, "ctrl" ))
{
char* lib = (char*)wf->ReadString(wf_entity, "ctrl", NULL );
-
- //char* argstr = (char*)wf->ReadString(wf_entity, "ctrl_argstr", NULL );
-
if( !lib )
printf( "Error - NULL library name specified for model %s\n",
token );
@@ -305,8 +302,12 @@
lt_dlsetsearchpath( FileManager::stagePath().c_str() );
lt_dlhandle handle = NULL;
-
- if(( handle = lt_dlopenext( lib ) ))
+
+ // the library name is the first word in the string
+ char libname[256];
+ sscanf( lib, "%s %*s", libname );
+
+ if(( handle = lt_dlopenext( libname ) ))
{
//printf( "]" );
@@ -320,7 +321,7 @@
exit(-1);
}
//else
- AddCallback( &hooks.init, initfunc, NULL );
+ AddCallback( &hooks.init, initfunc, lib ); // pass complete
string into initfunc
}
else
{
Modified: code/stage/trunk/libstage/stage.hh
===================================================================
--- code/stage/trunk/libstage/stage.hh 2009-09-08 06:48:32 UTC (rev 8255)
+++ code/stage/trunk/libstage/stage.hh 2009-09-09 22:25:27 UTC (rev 8256)
@@ -1713,7 +1713,6 @@
/** unique process-wide identifier for this model */
uint32_t id;
- // ctrlinit_t* initfunc;
stg_usec_t interval; ///< time between updates in usec
stg_usec_t interval_energy; ///< time between updates of powerpack in
usec
stg_usec_t interval_pose; ///< time between updates of pose due to
velocity in usec
Modified: code/stage/trunk/libstage/worldfile.cc
===================================================================
--- code/stage/trunk/libstage/worldfile.cc 2009-09-08 06:48:32 UTC (rev
8255)
+++ code/stage/trunk/libstage/worldfile.cc 2009-09-09 22:25:27 UTC (rev
8256)
@@ -1,6 +1,6 @@
/*
* Stage : a multi-robot simulator.
- * Copyright (C) 2001, 2002 Richard Vaughan, Andrew Howard and Brian Gerkey.
+ * Copyright (C) 2001-2009 Richard Vaughan, Andrew Howard and Brian Gerkey.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -53,9 +53,9 @@
///////////////////////////////////////////////////////////////////////////
// Useful macros for dumping parser errors
#define TOKEN_ERR(z, l) \
- PRINT_ERR2("%s:%d : " z, this->filename, l)
+ PRINT_ERR2("%s:%d : " z, this->filename.c_str(), l)
#define PARSE_ERR(z, l) \
- PRINT_ERR2("%s:%d : " z, this->filename, l)
+ PRINT_ERR2("%s:%d : " z, this->filename.c_str(), l)
///////////////////////////////////////////////////////////////////////////
@@ -65,7 +65,7 @@
macros(),
entities(),
properties(),
- filename( NULL),
+ filename(),
unit_length( 1.0 ),
unit_angle( M_PI / 180.0 )
{
@@ -80,9 +80,6 @@
ClearMacros();
ClearEntities();
ClearTokens();
-
- if (this->filename)
- free(this->filename);
}
FILE *Worldfile::FileOpen(const char *filename, const char* method)
@@ -125,22 +122,15 @@
// Load world from file
bool Worldfile::Load(const char *filename)
{
- // Shouldnt call load more than once,
- // so this should be null.
+ this->filename = filename;
- if(this->filename == NULL)
- {
- this->filename = strdup(filename);
- }
-
-
// Open the file
//FILE *file = fopen(this->filename, "r");
- FILE *file = FileOpen(this->filename, "r");
+ FILE *file = FileOpen(this->filename.c_str(), "r");
if (!file)
{
PRINT_ERR2("unable to open world file %s : %s",
- this->filename, strerror(errno));
+ this->filename.c_str(),
strerror(errno));
return false;
}
@@ -203,7 +193,7 @@
// If no filename is supplied, use default
if (!filename)
- filename = this->filename;
+ filename = this->filename.c_str();
// Open file
FILE *file = fopen(filename, "w+");
@@ -240,7 +230,7 @@
if( ! it->second->used )
{
PRINT_WARN3("worldfile %s:%d : property
[%s] is defined but not used",
-
this->filename, it->second->line, it->second->name.c_str());
+
this->filename.c_str(), it->second->line, it->second->name.c_str());
unused = true;
}
}
@@ -481,7 +471,7 @@
// Note that dirname() modifies the contents, so
// we need to make a copy of the filename.
// There's no bounds-checking, but what the heck.
- char *tmp = strdup(this->filename);
+ char *tmp = strdup(this->filename.c_str());
fullpath = new char[PATH_MAX];
memset(fullpath, 0, PATH_MAX);
strcat( fullpath, dirname(tmp));
@@ -495,7 +485,7 @@
// Note that dirname() modifies the contents, so
// we need to make a copy of the filename.
// There's no bounds-checking, but what the heck.
- char *tmp = strdup(this->filename);
+ char *tmp = strdup(this->filename.c_str());
fullpath = new char[PATH_MAX];
char* dummy = getcwd(fullpath, PATH_MAX);
if (!dummy)
@@ -1312,21 +1302,31 @@
{
char key[128];
snprintf( key, 127, "%d%s", entity, name );
-
+
//printf( "looking up key %s for entity %d name %s\n", key, entity, name );
+
+ static char cache_key[128] = { 0 };
+ static CProperty* cache_property = NULL;
+
+ if( strncmp( key, cache_key, 128 ) != 0 ) // different to last time
+ {
+ strncpy( cache_key, key, 128 ); // remember for next time
+
+ std::map<std::string,CProperty*>::iterator it =
properties.find( key );
+ if( it == properties.end() ) // not found
+ cache_property = NULL;
+ else
+ cache_property = it->second;
+ }
+ //else
+ // printf( "cache hit with %s\n", cache_key );
- std::map<std::string,CProperty*>::iterator it = properties.find( key );
-
- if( it == properties.end() ) // not found
- return NULL;
- else
- return it->second;
- }
+ return cache_property;
+}
-
bool Worldfile::PropertyExists( int section, const char* token )
{
- return( this->GetProperty( section, token ) ? true : false );
+ return (bool)GetProperty( section, token );
}
@@ -1343,7 +1343,6 @@
SetTokenValue( property->values[index], value);
}
-
///////////////////////////////////////////////////////////////////////////
// Get the value of an property
const char *Worldfile::GetPropertyValue(CProperty* property, int index)
@@ -1482,46 +1481,7 @@
return atof(GetPropertyValue(property, 0)) * this->unit_angle;
}
-/* REMOVE?
///////////////////////////////////////////////////////////////////////////
-// Read a boolean
-bool Worldfile::ReadBool(int entity, const char *name, bool value)
-{
-//return (bool) ReadInt(entity, name, value);
-CProperty* property = GetProperty(entity, name);
-if (property < 0)
-return value;
-const char *v = GetPropertyValue(property, 0);
-if (strcmp(v, "true") == 0 || strcmp(v, "yes") == 0)
-return true;
-else if (strcmp(v, "false") == 0 || strcmp(v, "no") == 0)
-return false;
-CProperty *pproperty = this->properties + property;
-PRINT_WARN3("worldfile %s:%d : '%s' is not a valid boolean value; assuming
'false'",
-this->filename, pproperty->line, v);
-return false;
-}
-*/
-
- ///////////////////////////////////////////////////////////////////////////
- // Read a color (included text -> RGB conversion).
- // We look up the color in one of the common color databases.
-// uint32_t Worldfile::ReadColor(int entity, const char *name, uint32_t value)
-// {
-// CProperty* property;
-// const char *color;
-
-// property = GetProperty(entity, name);
-// if (property == NULL )
-// return value;
-// color = GetPropertyValue(property, 0);
-
-// // TODO: Hmmm, should do something with the default color here.
-// return stg_lookup_color(color);
-// }
-
-
-///////////////////////////////////////////////////////////////////////////
// Read a file name
// Always returns an absolute path.
// If the filename is entered as a relative path, we prepend
@@ -1543,7 +1503,7 @@
// Note that dirname() modifies the contents, so
// we need to make a copy of the filename.
// There's no bounds-checking, but what the heck.
- char *tmp = strdup(this->filename);
+ char *tmp = strdup(this->filename.c_str());
char* fullpath = new char[PATH_MAX];
memset(fullpath, 0, PATH_MAX);
strcat( fullpath, dirname(tmp));
@@ -1559,7 +1519,7 @@
// Note that dirname() modifies the contents, so
// we need to make a copy of the filename.
// There's no bounds-checking, but what the heck.
- char *tmp = strdup(this->filename);
+ char *tmp = strdup(this->filename.c_str());
char* fullpath = new char[PATH_MAX];
char* dummy = getcwd(fullpath, PATH_MAX);
if (!dummy)
Modified: code/stage/trunk/libstage/worldfile.hh
===================================================================
--- code/stage/trunk/libstage/worldfile.hh 2009-09-08 06:48:32 UTC (rev
8255)
+++ code/stage/trunk/libstage/worldfile.hh 2009-09-09 22:25:27 UTC (rev
8256)
@@ -33,18 +33,18 @@
namespace Stg {
- /// Private property class
-class CProperty
+ /// Property class
+ class CProperty
{
- public:
+ public:
/// Index of entity this property belongs to
int entity;
/// Name of property
- std::string name;
+ std::string name;
/// A list of token indexes
- std::vector<int> values;
+ std::vector<int> values;
/// Line this property came from
int line;
@@ -52,325 +52,328 @@
/// Flag set if property has been used
bool used;
- CProperty( int entity, const char* name, int line ) :
- entity(entity),
- name(name),
- values(),
- line(line),
- used(false) {}
+ CProperty( int entity, const char* name, int line ) :
+ entity(entity),
+ name(name),
+ values(),
+ line(line),
+ used(false) {}
};
-// Class for loading/saving world file. This class hides the syntax
-// of the world file and provides an 'entity.property = value' style
-// interface. Global settings go in entity 0; every other entity
-// refers to a specific entity. Parent/child relationships are
-// encoded in the form of entity/subentity relationships.
-class Worldfile
-{
- // Standard constructors/destructors
-public: Worldfile();
-public: ~Worldfile();
+ // Class for loading/saving world file. This class hides the syntax
+ // of the world file and provides an 'entity.property = value' style
+ // interface. Global settings go in entity 0; every other entity
+ // refers to a specific entity. Parent/child relationships are
+ // encoded in the form of entity/subentity relationships.
+ class Worldfile
+ {
+ // Standard constructors/destructors
+ public: Worldfile();
+ public: ~Worldfile();
- // replacement for fopen() that checks STAGEPATH dirs for the named file
- // (thanks to Douglas S. Blank <[email protected]>)
-protected: FILE* FileOpen(const char *filename, const char* method);
+ // replacement for fopen() that checks STAGEPATH dirs for the named
file
+ // (thanks to Douglas S. Blank <[email protected]>)
+ protected: FILE* FileOpen(const char *filename, const char* method);
- // Load world from file
+ // Load world from file
public: bool Load(const char *filename);
- // Save world back into file
- // Set filename to NULL to save back into the original file
+ // Save world back into file
+ // Set filename to NULL to save back into the original file
public: bool Save(const char *filename);
- // Check for unused properties and print warnings
+ // Check for unused properties and print warnings
public: bool WarnUnused();
- // Read a string
+ // Read a string
public: const char *ReadString(int entity, const char *name, const char
*value);
- // Write a string
+ // Write a string
public: void WriteString(int entity, const char *name, const char *value);
- // Read an integer
+ // Read an integer
public: int ReadInt(int entity, const char *name, int value);
- // Write an integer
+ // Write an integer
public: void WriteInt(int entity, const char *name, int value);
- // Read a float
+ // Read a float
public: double ReadFloat(int entity, const char *name, double value);
- // Write a float
+ // Write a float
public: void WriteFloat(int entity, const char *name, double value);
- // Read a length (includes unit conversion)
+ // Read a length (includes unit conversion)
public: double ReadLength(int entity, const char *name, double value);
- // Write a length (includes units conversion)
+ // Write a length (includes units conversion)
public: void WriteLength(int entity, const char *name, double value);
- // Read an angle (includes unit conversion)
+ // Read an angle (includes unit conversion)
public: double ReadAngle(int entity, const char *name, double value);
- // Read a boolean
- // REMOVE? public: bool ReadBool(int entity, const char *name, bool value);
+ // Read a boolean
+ // REMOVE? public: bool ReadBool(int entity, const char *name, bool
value);
- // Read a color (includes text to RGB conversion)
+ // Read a color (includes text to RGB conversion)
public: uint32_t ReadColor(int entity, const char *name, uint32_t value);
- // Read a file name. Always returns an absolute path. If the
- // filename is entered as a relative path, we prepend the world
- // files path to it.
+ // Read a file name. Always returns an absolute path. If the
+ // filename is entered as a relative path, we prepend the world
+ // files path to it.
public: const char *ReadFilename(int entity, const char *name, const char
*value);
- // Read a string from a tuple
+ // Read a string from a tuple
public: const char *ReadTupleString(int entity, const char *name,
int index, const char *value);
- // Write a string to a tuple
+ // Write a string to a tuple
public: void WriteTupleString(int entity, const char *name,
int index, const char *value);
- // Read a float from a tuple
+ // Read a float from a tuple
public: double ReadTupleFloat(int entity, const char *name,
int index, double value);
- // Write a float to a tuple
+ // Write a float to a tuple
public: void WriteTupleFloat(int entity, const char *name,
int index, double value);
- // Read a length from a tuple (includes units conversion)
+ // Read a length from a tuple (includes units conversion)
public: double ReadTupleLength(int entity, const char *name,
int index, double value);
- // Write a to a tuple length (includes units conversion)
+ // Write a to a tuple length (includes units conversion)
public: void WriteTupleLength(int entity, const char *name,
int index, double value);
- // Read an angle form a tuple (includes units conversion)
+ // Read an angle form a tuple (includes units conversion)
public: double ReadTupleAngle(int entity, const char *name,
int index, double value);
- // Write an angle to a tuple (includes units conversion)
+ // Write an angle to a tuple (includes units conversion)
public: void WriteTupleAngle(int entity, const char *name,
int index, double value);
- ////////////////////////////////////////////////////////////////////////////
- // Private methods used to load stuff from the world file
+
////////////////////////////////////////////////////////////////////////////
+ // Private methods used to load stuff from the world file
- // Load tokens from a file.
+ // Load tokens from a file.
private: bool LoadTokens(FILE *file, int include);
- // Read in a comment token
+ // Read in a comment token
private: bool LoadTokenComment(FILE *file, int *line, int include);
- // Read in a word token
+ // Read in a word token
private: bool LoadTokenWord(FILE *file, int *line, int include);
- // Load an include token; this will load the include file.
+ // Load an include token; this will load the include file.
private: bool LoadTokenInclude(FILE *file, int *line, int include);
- // Read in a number token
+ // Read in a number token
private: bool LoadTokenNum(FILE *file, int *line, int include);
- // Read in a string token
+ // Read in a string token
private: bool LoadTokenString(FILE *file, int *line, int include);
- // Read in a whitespace token
+ // Read in a whitespace token
private: bool LoadTokenSpace(FILE *file, int *line, int include);
- // Save tokens to a file.
+ // Save tokens to a file.
private: bool SaveTokens(FILE *file);
- // Clear the token list
+ // Clear the token list
private: void ClearTokens();
- // Add a token to the token list
+ // Add a token to the token list
private: bool AddToken(int type, const char *value, int include);
- // Set a token in the token list
+ // Set a token in the token list
private: bool SetTokenValue(int index, const char *value);
- // Get the value of a token
+ // Get the value of a token
private: const char *GetTokenValue(int index);
- // Dump the token list (for debugging).
+ // Dump the token list (for debugging).
private: void DumpTokens();
- // Parse a line
+ // Parse a line
private: bool ParseTokens();
- // Parse an include statement
+ // Parse an include statement
private: bool ParseTokenInclude(int *index, int *line);
- // Parse a macro definition
+ // Parse a macro definition
private: bool ParseTokenDefine(int *index, int *line);
- // Parse an word (could be a entity or an property) from the token list.
+ // Parse an word (could be a entity or an property) from the token
list.
private: bool ParseTokenWord(int entity, int *index, int *line);
- // Parse a entity from the token list.
+ // Parse a entity from the token list.
private: bool ParseTokenEntity(int entity, int *index, int *line);
- // Parse an property from the token list.
+ // Parse an property from the token list.
private: bool ParseTokenProperty(int entity, int *index, int *line);
- // Parse a tuple.
+ // Parse a tuple.
private: bool ParseTokenTuple( CProperty* property, int *index, int *line);
- // Clear the macro list
+ // Clear the macro list
private: void ClearMacros();
- // Add a macro
+ // Add a macro
private: void AddMacro(const char *macroname, const char *entityname,
- int line, int starttoken, int endtoken);
+ int line, int
starttoken, int endtoken);
- // Lookup a macro by name
+ // Lookup a macro by name
- // Returns a pointer to a macro with this name, or NULL if there is none..
- class CMacro;
+ // Returns a pointer to a macro with this name, or NULL if there is
none..
+ class CMacro;
private: CMacro* LookupMacro(const char *macroname);
- // Dump the macro list for debugging
+ // Dump the macro list for debugging
private: void DumpMacros();
- // Clear the entity list
+ // Clear the entity list
private: void ClearEntities();
- // Add a entity
+ // Add a entity
private: int AddEntity(int parent, const char *type);
// Get the number of entities.
public: int GetEntityCount();
- // Get a entity (returns the entity type value)
+ // Get a entity (returns the entity type value)
public: const char *GetEntityType(int entity);
- // Lookup a entity number by type name
- // Returns -1 if there is entity with this type
+ // Lookup a entity number by type name
+ // Returns -1 if there is entity with this type
public: int LookupEntity(const char *type);
- // Get a entity's parent entity.
- // Returns -1 if there is no parent.
+ // Get a entity's parent entity.
+ // Returns -1 if there is no parent.
public: int GetEntityParent(int entity);
- // Dump the entity list for debugging
+ // Dump the entity list for debugging
private: void DumpEntities();
- // Clear the property list
+ // Clear the property list
private: void ClearProperties();
- // Add an property
+ // Add an property
private: CProperty* AddProperty(int entity, const char *name, int line);
- // Add an property value.
+ // Add an property value.
private: void AddPropertyValue( CProperty* property, int index, int
value_token);
- // Get an property
+ // Get an property
public: CProperty* GetProperty(int entity, const char *name);
- // returns true iff the property exists in the file, so that you can
- // be sure that GetProperty() will work
- bool PropertyExists( int section, const char* token );
+ // returns true iff the property exists in the file, so that you can
+ // be sure that GetProperty() will work
+ bool PropertyExists( int section, const char* token );
- // Set the value of an property.
+ // Set the value of an property.
private: void SetPropertyValue( CProperty* property, int index, const char
*value);
- // Get the value of an property.
+ // Get the value of an property.
public: const char *GetPropertyValue( CProperty* property, int index);
- // Dump the property list for debugging
+ // Dump the property list for debugging
private: void DumpProperties();
- // Token types.
+ // Token types.
private: enum
- {
- TokenComment,
- TokenWord, TokenNum, TokenString,
- TokenOpenEntity, TokenCloseEntity,
- TokenOpenTuple, TokenCloseTuple,
- TokenSpace, TokenEOL
- };
+ {
+ TokenComment,
+ TokenWord, TokenNum, TokenString,
+ TokenOpenEntity, TokenCloseEntity,
+ TokenOpenTuple, TokenCloseTuple,
+ TokenSpace, TokenEOL
+ };
- // Token structure.
-private: class CToken
- {
- public:
- // Non-zero if token is from an include file.
- int include;
-
- // Token type (enumerated value).
- int type;
-
- // Token value
+ // Token structure.
+ private:
+ class CToken
+ {
+ public:
+ // Non-zero if token is from an include file.
+ int include;
+
+ // Token type (enumerated value).
+ int type;
+
+ // Token value
std::string value;
-
+
CToken( int include, int type, const char* value ) :
- include(include), type(type), value(value) {}
- };
+ include(include), type(type), value(value) {}
+ };
+
+ // A list of tokens loaded from the file.
+ // Modified values are written back into the token list.
+ //private: int token_size, token_count;
+ private: std::vector<CToken> tokens;
- // A list of tokens loaded from the file.
- // Modified values are written back into the token list.
- //private: int token_size, token_count;
-private: std::vector<CToken> tokens;
-
- // Private macro class
-private: class CMacro
- {
- public:
- // Name of macro
+ // Private macro class
+ private:
+ class CMacro
+ {
+ public:
+ // Name of macro
std::string macroname;
-
- // Name of entity
+
+ // Name of entity
std::string entityname;
-
- // Line the macro definition starts on.
- int line;
-
- // Range of tokens in the body of the macro definition.
- int starttoken, endtoken;
-
+
+ // Line the macro definition starts on.
+ int line;
+
+ // Range of tokens in the body of the macro definition.
+ int starttoken, endtoken;
+
CMacro(const char *macroname, const char *entityname,
- int line, int starttoken, int
endtoken) :
- macroname(macroname),
- entityname(entityname),
- line(line),
- starttoken(starttoken),
- endtoken(endtoken) {}
- };
-
- // Macro table
+ int line, int starttoken, int endtoken) :
+ macroname(macroname),
+ entityname(entityname),
+ line(line),
+ starttoken(starttoken),
+ endtoken(endtoken) {}
+ };
+
+ // Macro table
private: std::map<std::string,CMacro> macros;
-
- // Private entity class
- private: class CEntity
- {
- public:
- // Parent entity
- int parent;
-
- // Type of entity (i.e. position, laser, etc).
+
+ // Private entity class
+ private:
+ class CEntity
+ {
+ public:
+ // Parent entity
+ int parent;
+
+ // Type of entity (i.e. position, laser, etc).
std::string type;
-
+
CEntity( int parent, const char* type ) : parent(parent),
type(type) {}
+ };
+
+ // Entity list
+ private: std::vector<CEntity> entities;
+
+ // Property list
+ private: std::map<std::string,CProperty*> properties;
+
+ // Name of the file we loaded
+ public: std::string filename;
+
+ // Conversion units
+ public: double unit_length;
+ public: double unit_angle;
+
};
- // Entity list
-private: std::vector<CEntity> entities;
-
- // Property list
-private: std::map<std::string,CProperty*> properties;
-
- // Name of the file we loaded
-public: char *filename;
-
- // Conversion units
-public: double unit_length;
-public: double unit_angle;
-
};
-
-};
#endif
Modified: code/stage/trunk/libstage/worldgui.cc
===================================================================
--- code/stage/trunk/libstage/worldgui.cc 2009-09-08 06:48:32 UTC (rev
8255)
+++ code/stage/trunk/libstage/worldgui.cc 2009-09-09 22:25:27 UTC (rev
8256)
@@ -288,7 +288,7 @@
wf->WarnUnused();
std::string title = PROJECT;
- if ( wf->filename ) {
+ if ( wf->filename.size() ) {
// improve the title bar to say "Stage: <worldfile name>"
title += ": ";
title += wf->filename;
@@ -763,7 +763,7 @@
bool success = false;
const char* pattern = "World Files (*.world)";
- Fl_File_Chooser fc( wf->filename, pattern, Fl_File_Chooser::CREATE, "Save
File As..." );
+ Fl_File_Chooser fc( wf->filename.c_str(), pattern, Fl_File_Chooser::CREATE,
"Save File As..." );
fc.ok_label( "Save" );
fc.show();
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
trial. Simplify your report design, integration and deployment - and focus on
what you do best, core application coding. Discover what's new with
Crystal Reports now. http://p.sf.net/sfu/bobj-july
_______________________________________________
Playerstage-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/playerstage-commit