#include <stdlib.h>
#include <math.h>
+namespace JSBSim {
+
static const char *IdSrc = "$Id$";
static const char *IdHdr = ID_CONFIGFILE;
#endif
else Opened = false;
- if (debug_lvl & 2) cout << "Instantiated: FGConfigFile" << endl;
+ Debug(0);
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
FGConfigFile::~FGConfigFile()
{
cfgfile.close();
- if (debug_lvl & 2) cout << "Destroyed: FGConfigFile" << endl;
+ Debug(1);
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
string FGConfigFile::GetNextConfigLine(void)
{
-
int comment_starts_at;
int comment_ends_at;
int comment_length;
comment_length = comment_ends_at + 2 - comment_starts_at + 1;
LineComment = CurrentLine.substr(comment_starts_at+4, comment_length-4-3);
CurrentLine.erase(comment_starts_at, comment_length);
+ if (CurrentLine.find_first_not_of(" ") == string::npos) {
+ CurrentLine.erase();
+ }
} else if ( start_comment && !end_comment) { // <!-- ...
CommentsOn = true;
comment_length = line_length - comment_starts_at;
CommentString += CommentStringTemp + "\r\n";
CurrentLine.erase(0, comment_length);
}
-
} while (CommentsOn);
- if (CurrentLine.length() == 0) GetNextConfigLine();
CurrentIndex = 0;
+ if (CurrentLine.length() == 0) {
+ GetNextConfigLine();
+ }
return CurrentLine;
}
string FGConfigFile::GetValue(string val)
{
- unsigned int pos, p1, p2, ptest;
+ string::size_type pos, p1, p2, ptest;
if (val == "") { // this call is to return the tag value
pos = CurrentLine.find("<");
}
}
}
+
+ int index = scratch.find_last_not_of(" ");
+ if (index != string::npos && index < (scratch.size()-1)) {
+ scratch = scratch.substr(0,index+1);
+ }
+
if (cfgfile.eof() && scratch.empty()) return string("EOF");
return scratch;
}
FGConfigFile& FGConfigFile::operator>>(double& val)
{
- unsigned int pos, end;
+ string::size_type pos, end;
pos = CurrentLine.find_first_not_of(", ",CurrentIndex);
if (pos == CurrentLine.npos) pos = CurrentLine.length();
FGConfigFile& FGConfigFile::operator>>(int& val)
{
- unsigned int pos, end;
+ string::size_type pos, end;
pos = CurrentLine.find_first_not_of(", ",CurrentIndex);
if (pos == CurrentLine.npos) pos = CurrentLine.length();
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-FGConfigFile& FGConfigFile::operator>>(eParam& val)
-{
- unsigned int pos, end;
-
- pos = CurrentLine.find_first_not_of(", ",CurrentIndex);
- if (pos == CurrentLine.npos) pos = CurrentLine.length();
- end = CurrentLine.find_first_of(", ",pos+1);
- if (end == CurrentLine.npos) end = CurrentLine.length();
- string str = CurrentLine.substr(pos, end - pos);
- val = (eParam)atoi(str.c_str());
- CurrentIndex = end+1;
- if (end == pos) {
- GetNextConfigLine();
- *this >> val;
- } else {
- if (CurrentIndex >= CurrentLine.length()) GetNextConfigLine();
- }
- return *this;
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
FGConfigFile& FGConfigFile::operator>>(string& str)
{
- unsigned int pos, end;
+ string::size_type pos, end;
pos = CurrentLine.find_first_not_of(", ",CurrentIndex);
if (pos == CurrentLine.npos) pos = CurrentLine.length();
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-void FGConfigFile::Debug(void)
+// The bitmasked value choices are as follows:
+// unset: In this case (the default) JSBSim would only print
+// out the normally expected messages, essentially echoing
+// the config files as they are read. If the environment
+// variable is not set, debug_lvl is set to 1 internally
+// 0: This requests JSBSim not to output any messages
+// whatsoever.
+// 1: This value explicity requests the normal JSBSim
+// startup messages
+// 2: This value asks for a message to be printed out when
+// a class is instantiated
+// 4: When this value is set, a message is displayed when a
+// FGModel object executes its Run() method
+// 8: When this value is set, various runtime state variables
+// are printed out periodically
+// 16: When set various parameters are sanity checked and
+// a message is printed out when they go out of bounds
+
+void FGConfigFile::Debug(int from)
{
- //TODO: Add your source code here
-}
+ if (debug_lvl <= 0) return;
+ if (debug_lvl & 1) { // Standard console startup message output
+ }
+ if (debug_lvl & 2 ) { // Instantiation/Destruction notification
+ if (from == 0) cout << "Instantiated: FGConfigFile" << endl;
+ if (from == 1) cout << "Destroyed: FGConfigFile" << endl;
+ }
+ if (debug_lvl & 4 ) { // Run() method entry print for FGModel-derived objects
+ }
+ if (debug_lvl & 8 ) { // Runtime state variables
+ }
+ if (debug_lvl & 16) { // Sanity checking
+ }
+ if (debug_lvl & 64) {
+ if (from == 0) { // Constructor
+ cout << IdSrc << endl;
+ cout << IdHdr << endl;
+ }
+ }
+}
+}