Sophie

Sophie

distrib > Fedora > 14 > x86_64 > media > updates > by-pkgid > 727fa15453fcace956b835e2377d4269 > files > 102

player-doc-3.0.2-5.fc14.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "http://www.w3.org/TR/html4/strict.dtd">

<html>
<!-- $Id: header.html 8799 2010-06-28 04:12:42Z jpgr87 $ -->

<HEAD>


<meta HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=utf-8">
<meta name="keywords" content="stage, robot, simulation, player, player/stage">
<link href="doxygen.css" rel="stylesheet" type="text/css">

<style type="text/css">

.floatright { float: right; margin: 0 0 1em 1em; }

body {
  font-family: sans-serif;
  #font-family: Geneva, Verdana, Helvetica, Arial, sans-serif;
  background-color: #FFF;
  color:#000;
}


a:link { 
	color: #A00;
}

a:visited { 
	color: #800;
}

a { text-decoration: none; }
a:hover { text-decoration: underline; }


.timestamp { text-align:right; background-color: #DDD; font-size:75%;}

h1 { 
  font-size:160%; 
}

h2 {
  font-size:110%;
  #color: #FFF;
  #background-color: #666;
  #padding:3px;
}

h3 { text-align:left; }

img {
  border: 0;
}

ul.menu { 
    position:relative;
    left:-2.5em;
    margin-bottom:0px;
    margin-top:0px;
}

ul.menu1 { 
    position:relative;
    left:-2.1em;
    margin-bottom:0px;
    margin-top:0px;
}

li.menu { 
    list-style-type: none;
    position:relative;
    #left:-0.5em;
}


#sidebar { position: absolute; left:0px; padding:2em; top:0em; width:12em;}

#content { position: absolute; left:12em; top:0em; padding-left:3em; padding-right:3em; padding-bottom:2em; margin-top:1em; margin-right:2em; }

div.box { background-color:#EEE; border: 1px solid #000; padding: 0.5ex 0.4em 0.5ex 0.6em; margin:1em;  }
div.title { font-weight:bold; background-color:#eee; margin-bottom:2px;}

div.topbar { position: absolute; top:0px; left:9em; margin:1em; }

</style>

<TITLE>Player Manual</TITLE>

</HEAD>

<body>

<div id="sidebar"> 

<h2 style="text-align:center;">
<a href="index.html">
<img width=140 src="http://playerstage.sourceforge.net/images/player_button_v3.png" alt="Player logo"><br></a>
</h2>



<div class="box">
<div class=title>Player</div>

<ul class=menu>
<li class=menu><a href="index.html">Frontpage</a>
<li class=menu><a href="modules.html">Contents</a>
</ul>
</div>

<div class="box">
<div class=title>User</div>

<ul class=menu>
<li class=menu><a href="install.html">Installation</a>
<li class=menu><a href="start.html">Quick start</a>
<li class=menu><a href="supported_hardware.html">Supported&nbsp;devices</a>
<li class=menu><a href="group__tutorials.html">Tutorials</a>
<li class=menu><a href="group__utils.html">Utilities</a>
<li class=menu><a href="group__clientlibs.html">Client&nbsp;libraries</a>
<li class=menu><a href="http://playerstage.sourceforge.net/wiki/Basic_FAQ">FAQ</a>
<li class=menu><a href="help.html">Help</a>

</ul>
</div>

<div class=box>
<div class="title">Developer</div>
<ul class=menu>
<li class=menu><a href="architecture.html">Architecture</a>
<li class=menu><a href="group__libplayercore.html">libplayercore</a>
<ul class=menu1>
<li class=menu><a href="group__interfaces.html">interfaces</a></li>
</ul>
<li class=menu><a href="group__libplayerdrivers.html">libplayerdrivers</a>
<ul class=menu1>
<li class=menu><a href="group__drivers.html">drivers</a></li>
</ul>
<li class=menu><a href="group__libplayercommon.html">libplayercommon</a>
<li class=menu><a href="group__libplayerutils.html">libplayerutils</a>
<li class=menu><a href="group__libplayersd.html">libplayersd</a>
<li class=menu><a href="group__libplayertcp.html">libplayertcp</a>
<li class=menu><a href="group__libplayerxdr.html">libplayerxdr</a>
<li class=menu><a href="todo.html">TODO</a>
</ul>
</div>

<div class=box>
<!-- <a href="http://sourceforge.net"><img border=0 src="http://sourceforge.net/sflogo.php?group_id=42445&type=1"></a> -->
<div class="title">Online</div>
<a href="http://playerstage.sourceforge.net">Homepage</a><br>
<a href="http://sourceforge.net/project/showfiles.php?group_id=42445">Download</a><br>
<a href="http://sourceforge.net/projects/playerstage">Project</a><br>
<a href="http://sourceforge.net/tracker/?group_id=42445">Bugs</a><br>
<a href="http://sourceforge.net/mail/?group_id=42445">Help</a>
</div>


</div>

<div id="content" >
<!-- Generated by Doxygen 1.7.1 -->
<div class="header">
  <div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pub-attribs">Public Attributes</a> &#124;
<a href="#pri-types">Private Types</a> &#124;
<a href="#pri-methods">Private Member Functions</a> &#124;
<a href="#pri-attribs">Private Attributes</a>  </div>
  <div class="headertitle">
<h1>ConfigFile Class Reference</h1>  </div>
</div>
<div class="contents">
<!-- doxytag: class="ConfigFile" -->
<p>Class for loading configuration file information.  
<a href="#_details">More...</a></p>

<p><code>#include &lt;<a class="el" href="configfile_8h_source.html">configfile.h</a>&gt;</code></p>

<p><a href="classConfigFile-members.html">List of all members.</a></p>
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structConfigFile_1_1CMacro.html">CMacro</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structConfigFile_1_1Field.html">Field</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structConfigFile_1_1Section.html">Section</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="structConfigFile_1_1Token.html">Token</a></td></tr>
<tr><td colspan="2"><h2><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a69ac768b67645f853f79637211793f30"></a><!-- doxytag: member="ConfigFile::ConfigFile" ref="a69ac768b67645f853f79637211793f30" args="(uint32_t _default_host, uint32_t _default_robot)" -->
&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#a69ac768b67645f853f79637211793f30">ConfigFile</a> (uint32_t _default_host, uint32_t _default_robot)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Standard constructor. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af33c23ece0fa133d1ee9d2897bc8dae2"></a><!-- doxytag: member="ConfigFile::ConfigFile" ref="af33c23ece0fa133d1ee9d2897bc8dae2" args="(const char *_default_host, uint32_t _default_robot)" -->
&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#af33c23ece0fa133d1ee9d2897bc8dae2">ConfigFile</a> (const char *_default_host, uint32_t _default_robot)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Alternate constructor, to specify the host as a string. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9ce259defdfaabeedb2455849ca6bd1e"></a><!-- doxytag: member="ConfigFile::ConfigFile" ref="a9ce259defdfaabeedb2455849ca6bd1e" args="()" -->
&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#a9ce259defdfaabeedb2455849ca6bd1e">ConfigFile</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Alternate constructor, used when not loading from a file. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae73765f7f0320bb6422da1cebe866f31"></a><!-- doxytag: member="ConfigFile::~ConfigFile" ref="ae73765f7f0320bb6422da1cebe866f31" args="()" -->
&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#ae73765f7f0320bb6422da1cebe866f31">~ConfigFile</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Standard destructor. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#a727a4495a175e4763297a3c08e13575a">Load</a> (const char *<a class="el" href="classConfigFile.html#a2dbe5243361ce326eb44fd3412298565">filename</a>)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Load config from file.  <a href="#a727a4495a175e4763297a3c08e13575a"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#a71828c4e3dd90da8472963382d5499ad">InsertFieldValue</a> (int index, const char *name, const char *value)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Add a (name,value) pair directly into the database, without reading from a file.  <a href="#a71828c4e3dd90da8472963382d5499ad"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#aa16c6bdb2a16a2490af249782a4e3d44">WarnUnused</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Check for unused fields and print warnings.  <a href="#aa16c6bdb2a16a2490af249782a4e3d44"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#ad53021137b439b8dd8148b3654a4c7e5">ReadBool</a> (int section, const char *name, bool value)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read a boolean value (one of: yes, no, true, false, 1, 0).  <a href="#ad53021137b439b8dd8148b3654a4c7e5"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">const char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#a5b8c497335c1036b9a865d4c784625c9">ReadString</a> (int section, const char *name, const char *value)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read a string value.  <a href="#a5b8c497335c1036b9a865d4c784625c9"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#a75f0dc55992cf33d5c63c864fbbd5510">ReadInt</a> (int section, const char *name, int value)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read an integer value.  <a href="#a75f0dc55992cf33d5c63c864fbbd5510"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#a3b8039e2bd5feca4e13cc7337bb963fd">ReadFloat</a> (int section, const char *name, double value)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read a floating point (double) value.  <a href="#a3b8039e2bd5feca4e13cc7337bb963fd"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#ade134d301468477227368842f3965cd4">ReadLength</a> (int section, const char *name, double value)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read a length (includes unit conversion, if any).  <a href="#ade134d301468477227368842f3965cd4"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#a6943cb2b881a5730aa5ce140d33cc5b2">ReadAngle</a> (int section, const char *name, double value)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read an angle (includes unit conversion).  <a href="#a6943cb2b881a5730aa5ce140d33cc5b2"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#a7f559ca0c3bba329d282317fe49a642f">ReadColor</a> (int section, const char *name, uint32_t value)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read a color (includes text to RGB conversion).  <a href="#a7f559ca0c3bba329d282317fe49a642f"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">const char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#aebb20344a10b41981d3ce7786768a836">ReadFilename</a> (int section, const char *name, const char *value)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read a filename.  <a href="#aebb20344a10b41981d3ce7786768a836"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#aa0dd5b68d66761635c43607f4c97bc4f">GetTupleCount</a> (int section, const char *name)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the number of values in a tuple.  <a href="#aa0dd5b68d66761635c43607f4c97bc4f"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">const char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#a1b18b6cabc15d86d5eb2930803faba68">ReadTupleString</a> (int section, const char *name, int index, const char *value)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read a string from a tuple field.  <a href="#a1b18b6cabc15d86d5eb2930803faba68"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#a32b7e8338e52e05a7c3e0286d2683aed">ReadTupleInt</a> (int section, const char *name, int index, int value)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read an integer from a tuple field.  <a href="#a32b7e8338e52e05a7c3e0286d2683aed"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#a2c06d1bd93c06e4692c521f2ad57ac0c">ReadTupleFloat</a> (int section, const char *name, int index, double value)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read a float (double) from a tuple field.  <a href="#a2c06d1bd93c06e4692c521f2ad57ac0c"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#ad6c6380b2f40a7865518e791cab17348">ReadTupleLength</a> (int section, const char *name, int index, double value)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read a length from a tuple (includes units conversion).  <a href="#ad6c6380b2f40a7865518e791cab17348"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">double&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#a04bf3b1b117595cfc7a9e5f34a8430d3">ReadTupleAngle</a> (int section, const char *name, int index, double value)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read an angle form a tuple (includes units conversion).  <a href="#a04bf3b1b117595cfc7a9e5f34a8430d3"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#af23e0d48bb3aad36a2c5a64792125f1a">ReadTupleColor</a> (int section, const char *name, int index, uint32_t value)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read a color (includes text to RGB conversion).  <a href="#af23e0d48bb3aad36a2c5a64792125f1a"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#ab3f2b1557d97d5460a3d0ce83def74c8">ReadDeviceAddr</a> (<a class="el" href="structplayer__devaddr.html">player_devaddr_t</a> *addr, int section, const char *name, int code, int index, const char *key)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Read a device id.  <a href="#ab3f2b1557d97d5460a3d0ce83def74c8"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a98197c318b583b2d3e0636d35847a2cf"></a><!-- doxytag: member="ConfigFile::ParseDriver" ref="a98197c318b583b2d3e0636d35847a2cf" args="(int section)" -->
bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>ParseDriver</b> (int section)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a439114f244ddef67038fd4fca81428af"></a><!-- doxytag: member="ConfigFile::ParseInterface" ref="a439114f244ddef67038fd4fca81428af" args="(int section)" -->
bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>ParseInterface</b> (int section)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a23acaf9cda46fc047c4b9074d7831ab4"></a><!-- doxytag: member="ConfigFile::ParseAllDrivers" ref="a23acaf9cda46fc047c4b9074d7831ab4" args="()" -->
bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>ParseAllDrivers</b> ()</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a14d042ef739a19a36172708c43f9794c"></a><!-- doxytag: member="ConfigFile::ParseAllInterfaces" ref="a14d042ef739a19a36172708c43f9794c" args="()" -->
bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>ParseAllInterfaces</b> ()</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab3a704a6c5c2ac91ae254fd5b259718a"></a><!-- doxytag: member="ConfigFile::GetSectionCount" ref="ab3a704a6c5c2ac91ae254fd5b259718a" args="()" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#ab3a704a6c5c2ac91ae254fd5b259718a">GetSectionCount</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the number of sections. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afbe5433c002dd51273085cd0e2135ca9"></a><!-- doxytag: member="ConfigFile::GetSectionType" ref="afbe5433c002dd51273085cd0e2135ca9" args="(int section)" -->
const char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#afbe5433c002dd51273085cd0e2135ca9">GetSectionType</a> (int section)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get a section type name. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#a2c8b4db58d45e97384cc5683517fe9a6">LookupSection</a> (const char *type)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Lookup a section number by section type name.  <a href="#a2c8b4db58d45e97384cc5683517fe9a6"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#af963f1d6e9625b6e1788ac76c4a7d61f">GetSectionParent</a> (int section)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get a section's parent section.  <a href="#af963f1d6e9625b6e1788ac76c4a7d61f"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a82eed12885baba08149dde4b23ef4695"></a><!-- doxytag: member="ConfigFile::DumpTokens" ref="a82eed12885baba08149dde4b23ef4695" args="()" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#a82eed12885baba08149dde4b23ef4695">DumpTokens</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Dump the token list (for debugging). <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab205bd52bd34c57d50419053f6081077"></a><!-- doxytag: member="ConfigFile::DumpSections" ref="ab205bd52bd34c57d50419053f6081077" args="()" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#ab205bd52bd34c57d50419053f6081077">DumpSections</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Dump the section list for debugging. <br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afdc7515c5b5ee5c815f251043c880918"></a><!-- doxytag: member="ConfigFile::DumpFields" ref="afdc7515c5b5ee5c815f251043c880918" args="()" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#afdc7515c5b5ee5c815f251043c880918">DumpFields</a> ()</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Dump the field list for debugging. <br/></td></tr>
<tr><td colspan="2"><h2><a name="pub-attribs"></a>
Public Attributes</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2dbe5243361ce326eb44fd3412298565"></a><!-- doxytag: member="ConfigFile::filename" ref="a2dbe5243361ce326eb44fd3412298565" args="" -->
char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#a2dbe5243361ce326eb44fd3412298565">filename</a></td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Name of the file we loaded. <br/></td></tr>
<tr><td colspan="2"><h2><a name="pri-types"></a>
Private Types</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom">{ <br/>
&nbsp;&nbsp;<b>TokenComment</b>, 
<b>TokenWord</b>, 
<b>TokenNum</b>, 
<b>TokenString</b>, 
<br/>
&nbsp;&nbsp;<b>TokenBool</b>, 
<b>TokenOpenSection</b>, 
<b>TokenCloseSection</b>, 
<b>TokenOpenTuple</b>, 
<br/>
&nbsp;&nbsp;<b>TokenCloseTuple</b>, 
<b>TokenSpace</b>, 
<b>TokenEOL</b>
<br/>
 }</td></tr>
<tr><td colspan="2"><h2><a name="pri-methods"></a>
Private Member Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classConfigFile.html#a83867c68d787072516c793b215eebbbb">InitFields</a> ()</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a789bca3199a3869f9d5970e0449a53d6"></a><!-- doxytag: member="ConfigFile::Save" ref="a789bca3199a3869f9d5970e0449a53d6" args="(const char *filename)" -->
bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>Save</b> (const char *<a class="el" href="classConfigFile.html#a2dbe5243361ce326eb44fd3412298565">filename</a>)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7d5a1f05901412200d14b0f899d74a07"></a><!-- doxytag: member="ConfigFile::WriteBool" ref="a7d5a1f05901412200d14b0f899d74a07" args="(int section, const char *name, bool value)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><b>WriteBool</b> (int section, const char *name, bool value)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a55ecafbca36c03cf79411863ee814792"></a><!-- doxytag: member="ConfigFile::WriteBool_Compat" ref="a55ecafbca36c03cf79411863ee814792" args="(int section, const char *name, bool value)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><b>WriteBool_Compat</b> (int section, const char *name, bool value)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa2d7d103d947121c13bf52f25dfb51dc"></a><!-- doxytag: member="ConfigFile::WriteString" ref="aa2d7d103d947121c13bf52f25dfb51dc" args="(int section, const char *name, const char *value)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><b>WriteString</b> (int section, const char *name, const char *value)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4c596c9faf40bf376287190071958483"></a><!-- doxytag: member="ConfigFile::WriteInt" ref="a4c596c9faf40bf376287190071958483" args="(int section, const char *name, int value)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><b>WriteInt</b> (int section, const char *name, int value)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab31b552a4239bb04d430d8b7a1eac0ed"></a><!-- doxytag: member="ConfigFile::WriteFloat" ref="ab31b552a4239bb04d430d8b7a1eac0ed" args="(int section, const char *name, double value)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><b>WriteFloat</b> (int section, const char *name, double value)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afa763eb52cd8cf30baeb2800f13d0a9d"></a><!-- doxytag: member="ConfigFile::WriteLength" ref="afa763eb52cd8cf30baeb2800f13d0a9d" args="(int section, const char *name, double value)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><b>WriteLength</b> (int section, const char *name, double value)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac05a1557b2f31024d0305203c3d2de85"></a><!-- doxytag: member="ConfigFile::WriteTupleString" ref="ac05a1557b2f31024d0305203c3d2de85" args="(int section, const char *name, int index, const char *value)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><b>WriteTupleString</b> (int section, const char *name, int index, const char *value)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad0f23a62e6ab3daeddbf3f34e946faa9"></a><!-- doxytag: member="ConfigFile::WriteTupleInt" ref="ad0f23a62e6ab3daeddbf3f34e946faa9" args="(int section, const char *name, int index, int value)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><b>WriteTupleInt</b> (int section, const char *name, int index, int value)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0c6b51c11067d9968449d51ced924400"></a><!-- doxytag: member="ConfigFile::WriteTupleFloat" ref="a0c6b51c11067d9968449d51ced924400" args="(int section, const char *name, int index, double value)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><b>WriteTupleFloat</b> (int section, const char *name, int index, double value)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a66223c01b1fa70c5a0f0a690b70f4c61"></a><!-- doxytag: member="ConfigFile::WriteTupleLength" ref="a66223c01b1fa70c5a0f0a690b70f4c61" args="(int section, const char *name, int index, double value)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><b>WriteTupleLength</b> (int section, const char *name, int index, double value)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3d77b6a161f43cf98e45c0fdad745d32"></a><!-- doxytag: member="ConfigFile::WriteTupleAngle" ref="a3d77b6a161f43cf98e45c0fdad745d32" args="(int section, const char *name, int index, double value)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><b>WriteTupleAngle</b> (int section, const char *name, int index, double value)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3913a6ca671ed2e30f70aa58a8896c90"></a><!-- doxytag: member="ConfigFile::LoadTokens" ref="a3913a6ca671ed2e30f70aa58a8896c90" args="(FILE *file, int include)" -->
bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>LoadTokens</b> (FILE *file, int include)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a72a5438ff9c7017556ef1ea0544d18bf"></a><!-- doxytag: member="ConfigFile::LoadTokenComment" ref="a72a5438ff9c7017556ef1ea0544d18bf" args="(FILE *file, int *line, int include)" -->
bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>LoadTokenComment</b> (FILE *file, int *line, int include)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae53d1c7dbccb18ad7f8c7c59ada2d0ec"></a><!-- doxytag: member="ConfigFile::LoadTokenWord" ref="ae53d1c7dbccb18ad7f8c7c59ada2d0ec" args="(FILE *file, int *line, int include)" -->
bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>LoadTokenWord</b> (FILE *file, int *line, int include)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6860b3cf97c7f2b7c183ba07b4a22a6a"></a><!-- doxytag: member="ConfigFile::LoadTokenInclude" ref="a6860b3cf97c7f2b7c183ba07b4a22a6a" args="(FILE *file, int *line, int include)" -->
bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>LoadTokenInclude</b> (FILE *file, int *line, int include)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4f685feaabffbb472b35506db4f2668d"></a><!-- doxytag: member="ConfigFile::LoadTokenNum" ref="a4f685feaabffbb472b35506db4f2668d" args="(FILE *file, int *line, int include)" -->
bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>LoadTokenNum</b> (FILE *file, int *line, int include)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a36be9d79c9ab813a073f2df98c0fc2db"></a><!-- doxytag: member="ConfigFile::LoadTokenString" ref="a36be9d79c9ab813a073f2df98c0fc2db" args="(FILE *file, int *line, int include)" -->
bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>LoadTokenString</b> (FILE *file, int *line, int include)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a68fdeba7d5f15832ba85436adb25c39b"></a><!-- doxytag: member="ConfigFile::LoadTokenSpace" ref="a68fdeba7d5f15832ba85436adb25c39b" args="(FILE *file, int *line, int include)" -->
bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>LoadTokenSpace</b> (FILE *file, int *line, int include)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a65609bf268e6998b923917c40740dd33"></a><!-- doxytag: member="ConfigFile::SaveTokens" ref="a65609bf268e6998b923917c40740dd33" args="(FILE *file)" -->
bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>SaveTokens</b> (FILE *file)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6f1bfd14fd248f18e65af870d27b311e"></a><!-- doxytag: member="ConfigFile::ClearTokens" ref="a6f1bfd14fd248f18e65af870d27b311e" args="()" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><b>ClearTokens</b> ()</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3455c243ced9f50c528d1fbd567fc3e9"></a><!-- doxytag: member="ConfigFile::AddToken" ref="a3455c243ced9f50c528d1fbd567fc3e9" args="(int type, const char *value, int include)" -->
bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>AddToken</b> (int type, const char *value, int include)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afef4e3e377c4435885c8256dd8cb3bc6"></a><!-- doxytag: member="ConfigFile::SetTokenValue" ref="afef4e3e377c4435885c8256dd8cb3bc6" args="(int index, const char *value)" -->
bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>SetTokenValue</b> (int index, const char *value)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a38932331c8cf8e90ed7d030d1e488858"></a><!-- doxytag: member="ConfigFile::GetTokenValue" ref="a38932331c8cf8e90ed7d030d1e488858" args="(int index)" -->
const char *&nbsp;</td><td class="memItemRight" valign="bottom"><b>GetTokenValue</b> (int index)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4bcaad271ae92f83b7b752241bde0386"></a><!-- doxytag: member="ConfigFile::ParseTokens" ref="a4bcaad271ae92f83b7b752241bde0386" args="()" -->
bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>ParseTokens</b> ()</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="accfd7d6b19ad9302455b78b3a6c5f9a5"></a><!-- doxytag: member="ConfigFile::ParseTokenInclude" ref="accfd7d6b19ad9302455b78b3a6c5f9a5" args="(int *index, int *line)" -->
bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>ParseTokenInclude</b> (int *index, int *line)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a17789fc1d09c0ee925e94650c63da80e"></a><!-- doxytag: member="ConfigFile::ParseTokenDefine" ref="a17789fc1d09c0ee925e94650c63da80e" args="(int *index, int *line)" -->
bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>ParseTokenDefine</b> (int *index, int *line)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a04caaf7f59c80af6c6c80e4cc5473483"></a><!-- doxytag: member="ConfigFile::ParseTokenPlugin" ref="a04caaf7f59c80af6c6c80e4cc5473483" args="(int *index, int *line)" -->
bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>ParseTokenPlugin</b> (int *index, int *line)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac9bbd393773ea5b3c6b4636606d7531a"></a><!-- doxytag: member="ConfigFile::ParseTokenWord" ref="ac9bbd393773ea5b3c6b4636606d7531a" args="(int section, int *index, int *line)" -->
bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>ParseTokenWord</b> (int section, int *index, int *line)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a02f5938469f08b687f3fd46f4a8a774b"></a><!-- doxytag: member="ConfigFile::ParseTokenSection" ref="a02f5938469f08b687f3fd46f4a8a774b" args="(int section, int *index, int *line)" -->
bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>ParseTokenSection</b> (int section, int *index, int *line)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afac3b2586b090b1487d2d047440e60dd"></a><!-- doxytag: member="ConfigFile::ParseTokenField" ref="afac3b2586b090b1487d2d047440e60dd" args="(int section, int *index, int *line)" -->
bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>ParseTokenField</b> (int section, int *index, int *line)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="afda8b90bcec5c7eb9b2518b110ae6c4e"></a><!-- doxytag: member="ConfigFile::ParseTokenTuple" ref="afda8b90bcec5c7eb9b2518b110ae6c4e" args="(int section, int field, int *index, int *line)" -->
bool&nbsp;</td><td class="memItemRight" valign="bottom"><b>ParseTokenTuple</b> (int section, int field, int *index, int *line)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4fe99eb254e6aa787d1d0dff86e19996"></a><!-- doxytag: member="ConfigFile::ClearMacros" ref="a4fe99eb254e6aa787d1d0dff86e19996" args="()" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><b>ClearMacros</b> ()</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aef552fd30f29a09f72fc48151256d514"></a><!-- doxytag: member="ConfigFile::AddMacro" ref="aef552fd30f29a09f72fc48151256d514" args="(const char *macroname, const char *sectionname, int line, int starttoken, int endtoken)" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><b>AddMacro</b> (const char *macroname, const char *sectionname, int line, int starttoken, int endtoken)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1246ada7c14d3cfa90ff17d0579e8928"></a><!-- doxytag: member="ConfigFile::LookupMacro" ref="a1246ada7c14d3cfa90ff17d0579e8928" args="(const char *macroname)" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><b>LookupMacro</b> (const char *macroname)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ab78385d93879fe142ae2f0c97e7280ec"></a><!-- doxytag: member="ConfigFile::DumpMacros" ref="ab78385d93879fe142ae2f0c97e7280ec" args="()" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><b>DumpMacros</b> ()</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1ea1def743459b519a2ccc412ef18405"></a><!-- doxytag: member="ConfigFile::ClearSections" ref="a1ea1def743459b519a2ccc412ef18405" args="()" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><b>ClearSections</b> ()</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a68795a8a828fd81b6d88bfd1d8faa4c5"></a><!-- doxytag: member="ConfigFile::AddSection" ref="a68795a8a828fd81b6d88bfd1d8faa4c5" args="(int parent, const char *type)" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><b>AddSection</b> (int parent, const char *type)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a22c340f9560fb431c11b1abd1c71af96"></a><!-- doxytag: member="ConfigFile::ClearFields" ref="a22c340f9560fb431c11b1abd1c71af96" args="()" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><b>ClearFields</b> ()</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ace34c7ac4d67be5517c4d392e2016287"></a><!-- doxytag: member="ConfigFile::AddField" ref="ace34c7ac4d67be5517c4d392e2016287" args="(int section, const char *name, int line)" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><b>AddField</b> (int section, const char *name, int line)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a164f4d9648f66b5bf530bc9cc1507477"></a><!-- doxytag: member="ConfigFile::AddFieldValue" ref="a164f4d9648f66b5bf530bc9cc1507477" args="(int field, int index, int value_token)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><b>AddFieldValue</b> (int field, int index, int value_token)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a462e258631a805b9a654539a41a7f59b"></a><!-- doxytag: member="ConfigFile::GetField" ref="a462e258631a805b9a654539a41a7f59b" args="(int section, const char *name)" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><b>GetField</b> (int section, const char *name)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a66bca617f80e61a67eade184ff3423e2"></a><!-- doxytag: member="ConfigFile::GetFieldValueCount" ref="a66bca617f80e61a67eade184ff3423e2" args="(int field)" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><b>GetFieldValueCount</b> (int field)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1e33358b99a4a8aad7ad3f92e8267ca6"></a><!-- doxytag: member="ConfigFile::GetFieldValue" ref="a1e33358b99a4a8aad7ad3f92e8267ca6" args="(int field, int index, bool flag_used=true)" -->
const char *&nbsp;</td><td class="memItemRight" valign="bottom"><b>GetFieldValue</b> (int field, int index, bool flag_used=true)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5f18c2536165630addb8089ad6b1f5cb"></a><!-- doxytag: member="ConfigFile::SetFieldValue" ref="a5f18c2536165630addb8089ad6b1f5cb" args="(int field, int index, const char *value)" -->
void&nbsp;</td><td class="memItemRight" valign="bottom"><b>SetFieldValue</b> (int field, int index, const char *value)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac95c164522239d8069c6a38f4684c4de"></a><!-- doxytag: member="ConfigFile::LookupColor" ref="ac95c164522239d8069c6a38f4684c4de" args="(const char *name)" -->
uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>LookupColor</b> (const char *name)</td></tr>
<tr><td colspan="2"><h2><a name="pri-attribs"></a>
Private Attributes</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4a0dbfaaafe0559f1139f32f244bde1a"></a><!-- doxytag: member="ConfigFile::token_size" ref="a4a0dbfaaafe0559f1139f32f244bde1a" args="" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><b>token_size</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a7bbd6d84aa433323e1778652e62df9d8"></a><!-- doxytag: member="ConfigFile::token_count" ref="a7bbd6d84aa433323e1778652e62df9d8" args="" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><b>token_count</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af4da4d4be75d76ea5ff83096215088e7"></a><!-- doxytag: member="ConfigFile::tokens" ref="af4da4d4be75d76ea5ff83096215088e7" args="" -->
<a class="el" href="structConfigFile_1_1Token.html">Token</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><b>tokens</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a92b4a606bd84c793db10362092c1b168"></a><!-- doxytag: member="ConfigFile::macro_size" ref="a92b4a606bd84c793db10362092c1b168" args="" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><b>macro_size</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acb9ca86f7573b819ae2435204a7d9b66"></a><!-- doxytag: member="ConfigFile::macro_count" ref="acb9ca86f7573b819ae2435204a7d9b66" args="" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><b>macro_count</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a77635bd1252152516bb2fdd4c90a98ba"></a><!-- doxytag: member="ConfigFile::macros" ref="a77635bd1252152516bb2fdd4c90a98ba" args="" -->
<a class="el" href="structConfigFile_1_1CMacro.html">CMacro</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><b>macros</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a413b7a0e41f402981ac33d8136cc19e2"></a><!-- doxytag: member="ConfigFile::section_size" ref="a413b7a0e41f402981ac33d8136cc19e2" args="" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><b>section_size</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae119ef3f81db1eb456983bb141be415a"></a><!-- doxytag: member="ConfigFile::section_count" ref="ae119ef3f81db1eb456983bb141be415a" args="" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><b>section_count</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a0f854a97f00e5bcf2b443af492fd3345"></a><!-- doxytag: member="ConfigFile::sections" ref="a0f854a97f00e5bcf2b443af492fd3345" args="" -->
<a class="el" href="structConfigFile_1_1Section.html">Section</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><b>sections</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a67c9d12b9780cdb38243fb23139a3cf9"></a><!-- doxytag: member="ConfigFile::field_size" ref="a67c9d12b9780cdb38243fb23139a3cf9" args="" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><b>field_size</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae93e574f580fa341950b7be6b5a64c11"></a><!-- doxytag: member="ConfigFile::field_count" ref="ae93e574f580fa341950b7be6b5a64c11" args="" -->
int&nbsp;</td><td class="memItemRight" valign="bottom"><b>field_count</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8ffe78d79cd0598ae56176183f01cdb5"></a><!-- doxytag: member="ConfigFile::fields" ref="a8ffe78d79cd0598ae56176183f01cdb5" args="" -->
<a class="el" href="structConfigFile_1_1Field.html">Field</a> *&nbsp;</td><td class="memItemRight" valign="bottom"><b>fields</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac5e3fe691df40073b4a8cb81426102a0"></a><!-- doxytag: member="ConfigFile::default_host" ref="ac5e3fe691df40073b4a8cb81426102a0" args="" -->
uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>default_host</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2e1398088cc661561127397744464b7f"></a><!-- doxytag: member="ConfigFile::default_robot" ref="a2e1398088cc661561127397744464b7f" args="" -->
uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><b>default_robot</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a9e825656a61f1d7d08c83da3bd5ed80e"></a><!-- doxytag: member="ConfigFile::unit_length" ref="a9e825656a61f1d7d08c83da3bd5ed80e" args="" -->
double&nbsp;</td><td class="memItemRight" valign="bottom"><b>unit_length</b></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5f88a85e145874c84781fc221bfcfe53"></a><!-- doxytag: member="ConfigFile::unit_angle" ref="a5f88a85e145874c84781fc221bfcfe53" args="" -->
double&nbsp;</td><td class="memItemRight" valign="bottom"><b>unit_angle</b></td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<p>Class for loading configuration file information. </p>
<p>This class is used to load and configure drivers from a configuration text file. This file is divided into sections, with section having a set of key/value fields.</p>
<p>Example file format is as follows: </p>
<div class="fragment"><pre class="fragment"><span class="preprocessor"># This is a comment</span>
<span class="preprocessor"></span>
<span class="preprocessor"># The keyword &#39;driver&#39; begins a section</span>
<span class="preprocessor"></span>driver
(
  # This line is used to identify which driver to
  # instantiate
  name <span class="stringliteral">&quot;mydriver&quot;</span>

  # This line lists the interfaces that the driver
  # will support
  provides [<span class="stringliteral">&quot;position2d:0&quot;</span> <span class="stringliteral">&quot;laser:0&quot;</span>]

  # This line lists the devices to which the driver
  # will subscribe
  requires [<span class="stringliteral">&quot;ptz:0&quot;</span>]

  # An integer
  key1  0             
  # A <span class="keywordtype">string</span>
  key2 <span class="stringliteral">&quot;foo&quot;</span>          
  # A tuple of strings
  key3 [<span class="stringliteral">&quot;foo&quot;</span> <span class="stringliteral">&quot;bar&quot;</span>]  
  # A tuple of multiple types
  key4 [<span class="stringliteral">&quot;foo&quot;</span> 3.14 42]
)
</pre></div><p>The most common use of this class is for a driver to extract configuration file options. All drivers are passed a <a class="el" href="classConfigFile.html" title="Class for loading configuration file information.">ConfigFile</a> pointer <b>cf</b> and an integer <b>section</b> in their contructor (see <a class="el" href="classDriver.html#ad232705313cf9168f763b1d70ee60235" title="Constructor for single-interface drivers.">Driver::Driver</a>). The driver code can use this information to retrieve key/value information that was given inside the appropriate <b>driver()</b> section in the configuration file. For example: </p>
<div class="fragment"><pre class="fragment">  <span class="keywordtype">int</span> maximum_speed = cf-&gt;<a class="code" href="classConfigFile.html#a75f0dc55992cf33d5c63c864fbbd5510" title="Read an integer value.">ReadInt</a>(section, <span class="stringliteral">&quot;max_speed&quot;</span>, -1);
  <span class="keywordflow">if</span>(maximum_speed == -1)
  {
    <span class="comment">// Since the default value of -1 was assigned,</span>
    <span class="comment">// no &quot;max_speed&quot; key/value was given in the configuration</span>
    <span class="comment">// file.</span>
  }
</pre></div><p>For each type Foo, there is a method ReadFoo() that looks for a key/value pair in the indicated section and with the type Foo. The last argument specifies a default value to return if the given key is not found. The default should either be a reasonable value or a recognizably invalid value (so that you can determine when the user did not specify a value).</p>
<p>Always use ReadLength for linear dimensions, positions, and time derivatives (velocities, accelerations, etc.) ; this method will return values in meters, regardless of what local units are being used in the configuration file. Similarly, always use ReadAngle for angular quanities; this method will always return values in radians.</p>
<p>Always use ReadFilename for filenames; this method will return absolute paths, appropriately converting any relative paths that are given in the configuration file. Non-absolute paths in the configuration file are assumed to be relative to the directory in which the configuration file itself resides.</p>
<p>Always use ReadColor for packed 24-bit color values.</p>
<p>Drivers that support multiple interfaces must use ReadDeviceAddr to find out which interfaces they have been asked to support (single-interface drivers specify their one interface in the <a class="el" href="classDriver.html" title="Base class for all drivers.">Driver</a> constructor). For example, to check whether the driver has been asked to support a <a class="el" href="group__interface__position2d.html">position2d</a> interface, and if so, to add that interface: </p>
<div class="fragment"><pre class="fragment">  <a class="code" href="structplayer__devaddr.html" title="A device address.">player_devaddr_t</a> position_addr;
  <span class="keywordflow">if</span>(cf-&gt;<a class="code" href="classConfigFile.html#ab3f2b1557d97d5460a3d0ce83def74c8" title="Read a device id.">ReadDeviceAddr</a>(&amp;position_addr, section, <span class="stringliteral">&quot;provides&quot;</span>,
                        PLAYER_POSITION2D_CODE, -1, NULL) == 0)
  {
    <span class="keywordflow">if</span>(this-&gt;AddInterface(position_addr) != 0)
    {
      this-&gt;SetError(-1);
      <span class="keywordflow">return</span>;
    }
  }
</pre></div><p> A driver can support more than interface of the same type. For example, the <a class="el" href="group__driver__p2os.html">p2os</a> driver supports 3 <a class="el" href="group__interface__position2d.html">position2d</a> interfaces: one for wheelmotors/odometry, one for compass, and one for gyro. In this case, the last argument to ReadDeviceAddr is used to differentiate them, according to key that was given in the "provides" line. For example, if in the configuration file we have: </p>
<div class="fragment"><pre class="fragment">driver
(
  name <span class="stringliteral">&quot;mydriver&quot;</span>
  provides [<span class="stringliteral">&quot;odometry:::position2d:0&quot;</span> <span class="stringliteral">&quot;gyro:::position2d:1&quot;</span>]
)
</pre></div><p> then in the driver code we can do something like this: </p>
<div class="fragment"><pre class="fragment">  <a class="code" href="structplayer__devaddr.html" title="A device address.">player_devaddr_t</a> odom_addr, gyro_addr;

  <span class="comment">// Do we create an odometry position interface?</span>
  <span class="keywordflow">if</span>(cf-&gt;<a class="code" href="classConfigFile.html#ab3f2b1557d97d5460a3d0ce83def74c8" title="Read a device id.">ReadDeviceAddr</a>(&amp;odom_addr, section, <span class="stringliteral">&quot;provides&quot;</span>,
                        PLAYER_POSITION2D_CODE, -1, <span class="stringliteral">&quot;odometry&quot;</span>) == 0)
  {
    <span class="keywordflow">if</span>(this-&gt;AddInterface(odom_addr) != 0)
    {
      this-&gt;SetError(-1);
      <span class="keywordflow">return</span>;
    }
  }

  <span class="comment">// Do we create a gyro position interface?</span>
  <span class="keywordflow">if</span>(cf-&gt;<a class="code" href="classConfigFile.html#ab3f2b1557d97d5460a3d0ce83def74c8" title="Read a device id.">ReadDeviceAddr</a>(&amp;gyro_addr, section, <span class="stringliteral">&quot;provides&quot;</span>,
                        PLAYER_POSITION2D_CODE, -1, <span class="stringliteral">&quot;gyro&quot;</span>) == 0)
  {
    <span class="keywordflow">if</span>(this-&gt;AddInterface(gyro_addr) != 0)
    {
      this-&gt;SetError(-1);
      <span class="keywordflow">return</span>;
    }
  }
</pre></div><p>Drivers that subscribe to other devices use ReadDeviceAddr in the same way to retrieve information from the "requires" line of the configuration file. </p>
<hr/><h2>Member Function Documentation</h2>
<a class="anchor" id="af963f1d6e9625b6e1788ac76c4a7d61f"></a><!-- doxytag: member="ConfigFile::GetSectionParent" ref="af963f1d6e9625b6e1788ac76c4a7d61f" args="(int section)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int ConfigFile::GetSectionParent </td>
          <td>(</td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>section</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Get a section's parent section. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>Returns -1 if there is no parent. </dd></dl>

</div>
</div>
<a class="anchor" id="aa0dd5b68d66761635c43607f4c97bc4f"></a><!-- doxytag: member="ConfigFile::GetTupleCount" ref="aa0dd5b68d66761635c43607f4c97bc4f" args="(int section, const char *name)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int ConfigFile::GetTupleCount </td>
          <td>(</td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>section</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>name</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Get the number of values in a tuple. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>section</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Section.html">Section</a> to read. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Field.html">Field</a> name. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a83867c68d787072516c793b215eebbbb"></a><!-- doxytag: member="ConfigFile::InitFields" ref="a83867c68d787072516c793b215eebbbb" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void ConfigFile::InitFields </td>
          <td>(</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [private]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p><b>For internal use only.</b></p>
<p>Intitialization helper </p>

</div>
</div>
<a class="anchor" id="a71828c4e3dd90da8472963382d5499ad"></a><!-- doxytag: member="ConfigFile::InsertFieldValue" ref="a71828c4e3dd90da8472963382d5499ad" args="(int index, const char *name, const char *value)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void ConfigFile::InsertFieldValue </td>
          <td>(</td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>index</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>value</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Add a (name,value) pair directly into the database, without reading from a file. </p>
<p>The (name,value) goes into the "global" section. Can be called multiple times with different index to create a tuple field. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>index</em>&nbsp;</td><td>Index of the value within the field (0 unless the field is a tuple) </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>Name of the field </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>value</em>&nbsp;</td><td>Value to be assigned </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="a727a4495a175e4763297a3c08e13575a"></a><!-- doxytag: member="ConfigFile::Load" ref="a727a4495a175e4763297a3c08e13575a" args="(const char *filename)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool ConfigFile::Load </td>
          <td>(</td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>filename</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Load config from file. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>filename</em>&nbsp;</td><td>Name of file; can be relative or fully qualified path. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Returns true on success. </dd></dl>

</div>
</div>
<a class="anchor" id="a2c8b4db58d45e97384cc5683517fe9a6"></a><!-- doxytag: member="ConfigFile::LookupSection" ref="a2c8b4db58d45e97384cc5683517fe9a6" args="(const char *type)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int ConfigFile::LookupSection </td>
          <td>(</td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>type</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Lookup a section number by section type name. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>Returns -1 if there is no section with this type. </dd></dl>

</div>
</div>
<a class="anchor" id="a6943cb2b881a5730aa5ce140d33cc5b2"></a><!-- doxytag: member="ConfigFile::ReadAngle" ref="a6943cb2b881a5730aa5ce140d33cc5b2" args="(int section, const char *name, double value)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">double ConfigFile::ReadAngle </td>
          <td>(</td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>section</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&nbsp;</td>
          <td class="paramname"> <em>value</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Read an angle (includes unit conversion). </p>
<p>In the configuration file, angles are specified in degrees; this method will convert them to radians.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>section</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Section.html">Section</a> to read. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Field.html">Field</a> name </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>value</em>&nbsp;</td><td>Default value if the field is not present in the file (radians). </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Returns the field value. </dd></dl>

</div>
</div>
<a class="anchor" id="ad53021137b439b8dd8148b3654a4c7e5"></a><!-- doxytag: member="ConfigFile::ReadBool" ref="ad53021137b439b8dd8148b3654a4c7e5" args="(int section, const char *name, bool value)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool ConfigFile::ReadBool </td>
          <td>(</td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>section</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">bool&nbsp;</td>
          <td class="paramname"> <em>value</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Read a boolean value (one of: yes, no, true, false, 1, 0). </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>section</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Section.html">Section</a> to read. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Field.html">Field</a> name </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>value</em>&nbsp;</td><td>Default value if this field is not present in the file </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Returns the field value </dd></dl>

</div>
</div>
<a class="anchor" id="a7f559ca0c3bba329d282317fe49a642f"></a><!-- doxytag: member="ConfigFile::ReadColor" ref="a7f559ca0c3bba329d282317fe49a642f" args="(int section, const char *name, uint32_t value)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">uint32_t ConfigFile::ReadColor </td>
          <td>(</td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>section</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t&nbsp;</td>
          <td class="paramname"> <em>value</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Read a color (includes text to RGB conversion). </p>
<p>In the configuration file colors may be specified with sybolic names; e.g., "blue" and "red". This function will convert them to an RGB value using the X11 rgb.txt file.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>section</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Section.html">Section</a> to read. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Field.html">Field</a> name </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>value</em>&nbsp;</td><td>Default value if the field is not present in the file (RGB). </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Returns the field value. </dd></dl>

</div>
</div>
<a class="anchor" id="ab3f2b1557d97d5460a3d0ce83def74c8"></a><!-- doxytag: member="ConfigFile::ReadDeviceAddr" ref="ab3f2b1557d97d5460a3d0ce83def74c8" args="(player_devaddr_t *addr, int section, const char *name, int code, int index, const char *key)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int ConfigFile::ReadDeviceAddr </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="structplayer__devaddr.html">player_devaddr_t</a> *&nbsp;</td>
          <td class="paramname"> <em>addr</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>section</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>code</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>index</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>key</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Read a device id. </p>
<p>Reads a device id from the named field of the given section. The returned id will match the given code, index and key values. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>addr</em>&nbsp;</td><td>address field to be filled in. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>section</em>&nbsp;</td><td>File section. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Field.html">Field</a> name. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>code</em>&nbsp;</td><td>Interface type code (use 0 to match all interface types). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>index</em>&nbsp;</td><td>Tuple index (use -1 to match all indices). </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>key</em>&nbsp;</td><td><a class="el" href="classDevice.html" title="Encapsulates a device (i.e., a driver bound to an interface).">Device</a> key value (use NULL to match all key vales). </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Non-zero on error. </dd></dl>

<p>Referenced by <a class="el" href="classSegwayRMP400.html#acb6a15335d0c3af344f7dd183f844767">SegwayRMP400::SegwayRMP400()</a>, and <a class="el" href="classSphereDriver.html#aae00afd6dde3191c6393252f037fb178">SphereDriver::SphereDriver()</a>.</p>

</div>
</div>
<a class="anchor" id="aebb20344a10b41981d3ce7786768a836"></a><!-- doxytag: member="ConfigFile::ReadFilename" ref="aebb20344a10b41981d3ce7786768a836" args="(int section, const char *name, const char *value)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const char* ConfigFile::ReadFilename </td>
          <td>(</td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>section</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>value</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Read a filename. </p>
<p>Always returns an absolute path. If the filename is entered as a relative path, we prepend the config file's path to it.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>section</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Section.html">Section</a> to read. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Field.html">Field</a> name </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>value</em>&nbsp;</td><td>Default value if the field is not present in the file. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Returns the field value. </dd></dl>

</div>
</div>
<a class="anchor" id="a3b8039e2bd5feca4e13cc7337bb963fd"></a><!-- doxytag: member="ConfigFile::ReadFloat" ref="a3b8039e2bd5feca4e13cc7337bb963fd" args="(int section, const char *name, double value)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">double ConfigFile::ReadFloat </td>
          <td>(</td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>section</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&nbsp;</td>
          <td class="paramname"> <em>value</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Read a floating point (double) value. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>section</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Section.html">Section</a> to read. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Field.html">Field</a> name </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>value</em>&nbsp;</td><td>Default value if the field is not present in the file. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Returns the field value. </dd></dl>

</div>
</div>
<a class="anchor" id="a75f0dc55992cf33d5c63c864fbbd5510"></a><!-- doxytag: member="ConfigFile::ReadInt" ref="a75f0dc55992cf33d5c63c864fbbd5510" args="(int section, const char *name, int value)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int ConfigFile::ReadInt </td>
          <td>(</td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>section</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>value</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Read an integer value. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>section</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Section.html">Section</a> to read. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Field.html">Field</a> name </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>value</em>&nbsp;</td><td>Default value if the field is not present in the file. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Returns the field value. </dd></dl>

<p>Referenced by <a class="el" href="classSegwayRMP400.html#acb6a15335d0c3af344f7dd183f844767">SegwayRMP400::SegwayRMP400()</a>, and <a class="el" href="classSphereDriver.html#aae00afd6dde3191c6393252f037fb178">SphereDriver::SphereDriver()</a>.</p>

</div>
</div>
<a class="anchor" id="ade134d301468477227368842f3965cd4"></a><!-- doxytag: member="ConfigFile::ReadLength" ref="ade134d301468477227368842f3965cd4" args="(int section, const char *name, double value)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">double ConfigFile::ReadLength </td>
          <td>(</td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>section</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&nbsp;</td>
          <td class="paramname"> <em>value</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Read a length (includes unit conversion, if any). </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>section</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Section.html">Section</a> to read. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Field.html">Field</a> name </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>value</em>&nbsp;</td><td>Default value if the field is not present in the file. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Returns the field value. </dd></dl>

</div>
</div>
<a class="anchor" id="a5b8c497335c1036b9a865d4c784625c9"></a><!-- doxytag: member="ConfigFile::ReadString" ref="a5b8c497335c1036b9a865d4c784625c9" args="(int section, const char *name, const char *value)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const char* ConfigFile::ReadString </td>
          <td>(</td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>section</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>value</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Read a string value. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>section</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Section.html">Section</a> to read. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Field.html">Field</a> name </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>value</em>&nbsp;</td><td>Default value if the field is not present in the file. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Returns the field value. </dd></dl>

<p>Referenced by <a class="el" href="classSphereDriver.html#aae00afd6dde3191c6393252f037fb178">SphereDriver::SphereDriver()</a>.</p>

</div>
</div>
<a class="anchor" id="a04bf3b1b117595cfc7a9e5f34a8430d3"></a><!-- doxytag: member="ConfigFile::ReadTupleAngle" ref="a04bf3b1b117595cfc7a9e5f34a8430d3" args="(int section, const char *name, int index, double value)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">double ConfigFile::ReadTupleAngle </td>
          <td>(</td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>section</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>index</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&nbsp;</td>
          <td class="paramname"> <em>value</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Read an angle form a tuple (includes units conversion). </p>
<p>In the configuration file, angles are specified in degrees; this method will convert them to radians.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>section</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Section.html">Section</a> to read. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Field.html">Field</a> name </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>index</em>&nbsp;</td><td>Tuple index (zero-based) </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>value</em>&nbsp;</td><td>Default value if the field is not present in the file. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Returns the tuple element value. </dd></dl>

</div>
</div>
<a class="anchor" id="af23e0d48bb3aad36a2c5a64792125f1a"></a><!-- doxytag: member="ConfigFile::ReadTupleColor" ref="af23e0d48bb3aad36a2c5a64792125f1a" args="(int section, const char *name, int index, uint32_t value)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">uint32_t ConfigFile::ReadTupleColor </td>
          <td>(</td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>section</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>index</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">uint32_t&nbsp;</td>
          <td class="paramname"> <em>value</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Read a color (includes text to RGB conversion). </p>
<p>In the configuration file colors may be specified with sybolic names; e.g., "blue" and "red". This function will convert them to an RGB value using the X11 rgb.txt file.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>section</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Section.html">Section</a> to read. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Field.html">Field</a> name </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>index</em>&nbsp;</td><td>Tuple index (zero-based) </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>value</em>&nbsp;</td><td>Default value if the field is not present in the file (RGB). </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Returns the field value. </dd></dl>

</div>
</div>
<a class="anchor" id="a2c06d1bd93c06e4692c521f2ad57ac0c"></a><!-- doxytag: member="ConfigFile::ReadTupleFloat" ref="a2c06d1bd93c06e4692c521f2ad57ac0c" args="(int section, const char *name, int index, double value)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">double ConfigFile::ReadTupleFloat </td>
          <td>(</td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>section</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>index</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&nbsp;</td>
          <td class="paramname"> <em>value</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Read a float (double) from a tuple field. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>section</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Section.html">Section</a> to read. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Field.html">Field</a> name </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>index</em>&nbsp;</td><td>Tuple index (zero-based) </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>value</em>&nbsp;</td><td>Default value if the field is not present in the file. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Returns the tuple element value. </dd></dl>

</div>
</div>
<a class="anchor" id="a32b7e8338e52e05a7c3e0286d2683aed"></a><!-- doxytag: member="ConfigFile::ReadTupleInt" ref="a32b7e8338e52e05a7c3e0286d2683aed" args="(int section, const char *name, int index, int value)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int ConfigFile::ReadTupleInt </td>
          <td>(</td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>section</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>index</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>value</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Read an integer from a tuple field. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>section</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Section.html">Section</a> to read. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Field.html">Field</a> name </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>index</em>&nbsp;</td><td>Tuple index (zero-based) </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>value</em>&nbsp;</td><td>Default value if the field is not present in the file. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Returns the tuple element value. </dd></dl>

<p>Referenced by <a class="el" href="classSphereDriver.html#aae00afd6dde3191c6393252f037fb178">SphereDriver::SphereDriver()</a>.</p>

</div>
</div>
<a class="anchor" id="ad6c6380b2f40a7865518e791cab17348"></a><!-- doxytag: member="ConfigFile::ReadTupleLength" ref="ad6c6380b2f40a7865518e791cab17348" args="(int section, const char *name, int index, double value)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">double ConfigFile::ReadTupleLength </td>
          <td>(</td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>section</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>index</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">double&nbsp;</td>
          <td class="paramname"> <em>value</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Read a length from a tuple (includes units conversion). </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>section</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Section.html">Section</a> to read. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Field.html">Field</a> name </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>index</em>&nbsp;</td><td>Tuple index (zero-based) </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>value</em>&nbsp;</td><td>Default value if the field is not present in the file. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Returns the tuple element value. </dd></dl>

</div>
</div>
<a class="anchor" id="a1b18b6cabc15d86d5eb2930803faba68"></a><!-- doxytag: member="ConfigFile::ReadTupleString" ref="a1b18b6cabc15d86d5eb2930803faba68" args="(int section, const char *name, int index, const char *value)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">const char* ConfigFile::ReadTupleString </td>
          <td>(</td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>section</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>name</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>index</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const char *&nbsp;</td>
          <td class="paramname"> <em>value</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Read a string from a tuple field. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>section</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Section.html">Section</a> to read. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td><a class="el" href="structConfigFile_1_1Field.html">Field</a> name </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>index</em>&nbsp;</td><td>Tuple index (zero-based) </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>value</em>&nbsp;</td><td>Default value if the field is not present in the file. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Returns the tuple element value. </dd></dl>

</div>
</div>
<a class="anchor" id="aa16c6bdb2a16a2490af249782a4e3d44"></a><!-- doxytag: member="ConfigFile::WarnUnused" ref="aa16c6bdb2a16a2490af249782a4e3d44" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool ConfigFile::WarnUnused </td>
          <td>(</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Check for unused fields and print warnings. </p>
<dl class="return"><dt><b>Returns:</b></dt><dd>Returns true if there are unused fields. </dd></dl>

</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li><a class="el" href="configfile_8h_source.html">configfile.h</a></li>
</ul>
</div>
<!-- render the modification time of the source file -->


<div class="timestamp">
<hr>

<table style="width:100%;">
<tr>
<td style="text-align:left;">
Last updated 12 September 2005 21:38:45
<!--
<td style="text-align:right;">
<a href="http://validator.w3.org/check/referer"><img style="vertical-align:middle;border:0;width:88px;height:31px"
          src="http://www.w3.org/Icons/valid-html401"
          alt="Valid HTML 4.01!"></a>

 <a href="http://jigsaw.w3.org/css-validator/">
  <img style="vertical-align:middle;border:0;width:88px;height:31px"
       src="http://jigsaw.w3.org/css-validator/images/vcss"
       alt="Valid CSS!">
 </a>
-->
</tr>
</table>
</div>


</tr>
</table>

</BODY>
</HTML>