Tool to create computer-readable settings. More...
#include "../stdafx.h"
#include "../string_func.h"
#include "../strings_type.h"
#include "../misc/getoptdata.h"
#include "../ini_type.h"
#include "../core/smallvec_type.hpp"
#include <stdarg.h>
#include <unistd.h>
#include <sys/stat.h>
Go to the source code of this file.
Data Structures | |
class | OutputBuffer |
Output buffer for a block of data. More... | |
class | OutputStore |
Temporarily store output. More... | |
struct | SettingsIniFile |
Derived class for loading INI files without going through Fio stuff. More... | |
Functions | |
void NORETURN CDECL | error (const char *s,...) |
Report a fatal error. | |
static IniLoadFile * | LoadIniFile (const char *filename) |
Load the INI file. | |
static void | DumpGroup (IniLoadFile *ifile, const char *const group_name) |
Dump a IGT_SEQUENCE group into _stored_output. | |
static const char * | FindItemValue (const char *name, IniGroup *grp, IniGroup *defaults) |
Find the value of a template variable. | |
static void | DumpSections (IniLoadFile *ifile) |
Output all non-special sections through the template / template variable expansion system. | |
static void | CopyFile (const char *fname, FILE *out_fp) |
Copy a file to the output. | |
static bool | CompareFiles (const char *n1, const char *n2) |
Compare two files for identity. | |
static void | ProcessIniFile (const char *fname) |
Process a single INI file. | |
int CDECL | main (int argc, char *argv[]) |
And the main program (what else?). | |
Variables | |
static const int | OUTPUT_BLOCK_SIZE = 16000 |
Block size of the buffer in OutputBuffer. | |
OutputStore | _stored_output |
Temporary storage of the output, until all processing is done. | |
static const char * | PREAMBLE_GROUP_NAME = "pre-amble" |
Name of the group containing the pre amble. | |
static const char * | POSTAMBLE_GROUP_NAME = "post-amble" |
Name of the group containing the post amble. | |
static const char * | TEMPLATES_GROUP_NAME = "templates" |
Name of the group containing the templates. | |
static const char * | DEFAULTS_GROUP_NAME = "defaults" |
Name of the group containing default values for the template variables. | |
static const OptionData | _opts [] |
Options of settingsgen. |
Tool to create computer-readable settings.
Definition in file settingsgen.cpp.
static bool CompareFiles | ( | const char * | n1, | |
const char * | n2 | |||
) | [static] |
Compare two files for identity.
n1 | First file. | |
n2 | Second file. |
Definition at line 366 of file settingsgen.cpp.
References error().
Referenced by main().
static void CopyFile | ( | const char * | fname, | |
FILE * | out_fp | |||
) | [static] |
Copy a file to the output.
fname | Filename of file to copy. | |
out_fp | Output stream to write to. |
Definition at line 337 of file settingsgen.cpp.
References lengthof.
Referenced by main().
static void DumpGroup | ( | IniLoadFile * | ifile, | |
const char *const | group_name | |||
) | [static] |
Dump a IGT_SEQUENCE group into _stored_output.
ifile | Loaded INI data. | |
group_name | Name of the group to copy. |
Definition at line 222 of file settingsgen.cpp.
References OutputStore::Add(), IniLoadFile::GetGroup(), IGT_SEQUENCE, IniGroup::item, IniItem::next, and IniGroup::type.
Referenced by ProcessIniFile().
static void DumpSections | ( | IniLoadFile * | ifile | ) | [static] |
Output all non-special sections through the template / template variable expansion system.
ifile | Loaded INI data. |
Definition at line 254 of file settingsgen.cpp.
References OutputStore::Add(), DEFAULTS_GROUP_NAME, FindItemValue(), IniLoadFile::GetGroup(), IniGroup::GetItem(), IniLoadFile::group, IniGroup::next, POSTAMBLE_GROUP_NAME, PREAMBLE_GROUP_NAME, TEMPLATES_GROUP_NAME, and IniItem::value.
Referenced by ProcessIniFile().
void NORETURN CDECL error | ( | const char * | s, | |
... | ||||
) |
Report a fatal error.
s | Format string. |
Definition at line 38 of file settingsgen.cpp.
References lengthof.
static const char* FindItemValue | ( | const char * | name, | |
IniGroup * | grp, | |||
IniGroup * | defaults | |||
) | [static] |
Find the value of a template variable.
name | Name of the item to find. | |
grp | Group currently being expanded (searched first). | |
defaults | Fallback group to search, NULL skips the search. |
NULL
. Definition at line 242 of file settingsgen.cpp.
References IniGroup::GetItem(), and IniItem::value.
Referenced by DumpSections().
static IniLoadFile* LoadIniFile | ( | const char * | filename | ) | [static] |
Load the INI file.
filename | Name of the file to load. |
Definition at line 208 of file settingsgen.cpp.
References IniLoadFile::LoadFromDisk(), POSTAMBLE_GROUP_NAME, and PREAMBLE_GROUP_NAME.
Referenced by ProcessIniFile().
int CDECL main | ( | int | argc, | |
char * | argv[] | |||
) |
And the main program (what else?).
argc | Number of command-line arguments including the program name itself. | |
argv | Vector of the command-line arguments. |
Definition at line 438 of file settingsgen.cpp.
References GetOptData::argv, OutputStore::Clear(), CompareFiles(), CopyFile(), error(), GetOptData::GetOpt(), GetOptData::numleft, GetOptData::opt, ProcessIniFile(), and OutputStore::Write().
static void ProcessIniFile | ( | const char * | fname | ) | [static] |
Process a single INI file.
The file should have a [templates] group, where each item is one template. Variables in a template have the form '$[_a-z0-9]+' (a literal '$' followed by one or more '_', lowercase letters, or lowercase numbers).
After loading, the [pre-amble] group is copied verbatim if it exists.
For every group with a name that matches a template name the template is written. It starts with a optional 'if' line if an 'if' item exists in the group. The item value is used as condition. Similarly, 'ifdef' and 'ifndef' lines are also written. Below the macro processor directives, the value of the template is written at a line with its variables replaced by item values of the group being written. If the group has no item for the variable, the [defaults] group is tried as fall back. Finally, 'endif' lines are written to match the macro processor lines.
Last but not least, the [post-amble] group is copied verbatim.
fname | Ini file to process. |
Definition at line 424 of file settingsgen.cpp.
References DumpGroup(), DumpSections(), LoadIniFile(), POSTAMBLE_GROUP_NAME, and PREAMBLE_GROUP_NAME.
Referenced by main().
const OptionData _opts[] [static] |
{ GETOPT_NOVAL( 'v', "--version"), GETOPT_NOVAL( 'h', "--help"), GETOPT_GENERAL('h', '?', NULL, ODF_NO_VALUE), GETOPT_VALUE( 'o', "--output"), GETOPT_VALUE( 'b', "--before"), GETOPT_VALUE( 'a', "--after"), GETOPT_END(), }
Options of settingsgen.
Definition at line 394 of file settingsgen.cpp.