mirror of https://github.com/OpenTTD/OpenTTD
(svn r22096) -Codechange: Move openttd getopt implementation to its own file.
parent
bca5159951
commit
9d0ff9d692
|
@ -1022,6 +1022,8 @@
|
||||||
<ClCompile Include="..\src\misc\dbg_helpers.cpp" />
|
<ClCompile Include="..\src\misc\dbg_helpers.cpp" />
|
||||||
<ClInclude Include="..\src\misc\dbg_helpers.h" />
|
<ClInclude Include="..\src\misc\dbg_helpers.h" />
|
||||||
<ClInclude Include="..\src\misc\fixedsizearray.hpp" />
|
<ClInclude Include="..\src\misc\fixedsizearray.hpp" />
|
||||||
|
<ClCompile Include="..\src\misc\getoptdata.cpp" />
|
||||||
|
<ClInclude Include="..\src\misc\getoptdata.h" />
|
||||||
<ClInclude Include="..\src\misc\hashtable.hpp" />
|
<ClInclude Include="..\src\misc\hashtable.hpp" />
|
||||||
<ClInclude Include="..\src\misc\str.hpp" />
|
<ClInclude Include="..\src\misc\str.hpp" />
|
||||||
<ClCompile Include="..\src\network\core\address.cpp" />
|
<ClCompile Include="..\src\network\core\address.cpp" />
|
||||||
|
|
|
@ -2286,6 +2286,12 @@
|
||||||
<ClInclude Include="..\src\misc\fixedsizearray.hpp">
|
<ClInclude Include="..\src\misc\fixedsizearray.hpp">
|
||||||
<Filter>Misc</Filter>
|
<Filter>Misc</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClCompile Include="..\src\misc\getoptdata.cpp">
|
||||||
|
<Filter>Misc</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClInclude Include="..\src\misc\getoptdata.h">
|
||||||
|
<Filter>Misc</Filter>
|
||||||
|
</ClInclude>
|
||||||
<ClInclude Include="..\src\misc\hashtable.hpp">
|
<ClInclude Include="..\src\misc\hashtable.hpp">
|
||||||
<Filter>Misc</Filter>
|
<Filter>Misc</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
|
|
@ -3438,6 +3438,14 @@
|
||||||
RelativePath=".\..\src\misc\fixedsizearray.hpp"
|
RelativePath=".\..\src\misc\fixedsizearray.hpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\..\src\misc\getoptdata.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\..\src\misc\getoptdata.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\..\src\misc\hashtable.hpp"
|
RelativePath=".\..\src\misc\hashtable.hpp"
|
||||||
>
|
>
|
||||||
|
|
|
@ -3435,6 +3435,14 @@
|
||||||
RelativePath=".\..\src\misc\fixedsizearray.hpp"
|
RelativePath=".\..\src\misc\fixedsizearray.hpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\..\src\misc\getoptdata.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\..\src\misc\getoptdata.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\..\src\misc\hashtable.hpp"
|
RelativePath=".\..\src\misc\hashtable.hpp"
|
||||||
>
|
>
|
||||||
|
|
|
@ -815,6 +815,8 @@ misc/countedptr.hpp
|
||||||
misc/dbg_helpers.cpp
|
misc/dbg_helpers.cpp
|
||||||
misc/dbg_helpers.h
|
misc/dbg_helpers.h
|
||||||
misc/fixedsizearray.hpp
|
misc/fixedsizearray.hpp
|
||||||
|
misc/getoptdata.cpp
|
||||||
|
misc/getoptdata.h
|
||||||
misc/hashtable.hpp
|
misc/hashtable.hpp
|
||||||
misc/str.hpp
|
misc/str.hpp
|
||||||
|
|
||||||
|
|
|
@ -59,6 +59,7 @@
|
||||||
#include "core/backup_type.hpp"
|
#include "core/backup_type.hpp"
|
||||||
#include "hotkeys.h"
|
#include "hotkeys.h"
|
||||||
#include "newgrf.h"
|
#include "newgrf.h"
|
||||||
|
#include "misc/getoptdata.h"
|
||||||
|
|
||||||
|
|
||||||
#include "town.h"
|
#include "town.h"
|
||||||
|
@ -215,73 +216,6 @@ static void ShowHelp()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
struct MyGetOptData {
|
|
||||||
char *opt;
|
|
||||||
int numleft;
|
|
||||||
char **argv;
|
|
||||||
const char *options;
|
|
||||||
char *cont;
|
|
||||||
|
|
||||||
MyGetOptData(int argc, char **argv, const char *options)
|
|
||||||
{
|
|
||||||
opt = NULL;
|
|
||||||
numleft = argc;
|
|
||||||
this->argv = argv;
|
|
||||||
this->options = options;
|
|
||||||
cont = NULL;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
static int MyGetOpt(MyGetOptData *md)
|
|
||||||
{
|
|
||||||
char *s = md->cont;
|
|
||||||
if (s != NULL) {
|
|
||||||
goto md_continue_here;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (;;) {
|
|
||||||
if (--md->numleft < 0) return -1;
|
|
||||||
|
|
||||||
s = *md->argv++;
|
|
||||||
if (*s == '-') {
|
|
||||||
md_continue_here:;
|
|
||||||
s++;
|
|
||||||
if (*s != 0) {
|
|
||||||
const char *r;
|
|
||||||
/* Found argument, try to locate it in options. */
|
|
||||||
if (*s == ':' || (r = strchr(md->options, *s)) == NULL) {
|
|
||||||
/* ERROR! */
|
|
||||||
return -2;
|
|
||||||
}
|
|
||||||
if (r[1] == ':') {
|
|
||||||
char *t;
|
|
||||||
/* Item wants an argument. Check if the argument follows, or if it comes as a separate arg. */
|
|
||||||
if (!*(t = s + 1)) {
|
|
||||||
/* It comes as a separate arg. Check if out of args? */
|
|
||||||
if (--md->numleft < 0 || *(t = *md->argv) == '-') {
|
|
||||||
/* Check if item is optional? */
|
|
||||||
if (r[2] != ':') return -2;
|
|
||||||
md->numleft++;
|
|
||||||
t = NULL;
|
|
||||||
} else {
|
|
||||||
md->argv++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
md->opt = t;
|
|
||||||
md->cont = NULL;
|
|
||||||
return *s;
|
|
||||||
}
|
|
||||||
md->opt = NULL;
|
|
||||||
md->cont = s;
|
|
||||||
return *s;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
/* This is currently not supported. */
|
|
||||||
return -2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extract the resolution from the given string and store
|
* Extract the resolution from the given string and store
|
||||||
* it in the 'res' parameter.
|
* it in the 'res' parameter.
|
||||||
|
@ -452,9 +386,9 @@ int ttd_main(int argc, char *argv[])
|
||||||
#endif
|
#endif
|
||||||
;
|
;
|
||||||
|
|
||||||
MyGetOptData mgo(argc - 1, argv + 1, optformat);
|
GetOptData mgo(argc - 1, argv + 1, optformat);
|
||||||
|
|
||||||
while ((i = MyGetOpt(&mgo)) != -1) {
|
while ((i = mgo.GetOpt()) != -1) {
|
||||||
switch (i) {
|
switch (i) {
|
||||||
case 'I': free(graphics_set); graphics_set = strdup(mgo.opt); break;
|
case 'I': free(graphics_set); graphics_set = strdup(mgo.opt); break;
|
||||||
case 'S': free(sounds_set); sounds_set = strdup(mgo.opt); break;
|
case 'S': free(sounds_set); sounds_set = strdup(mgo.opt); break;
|
||||||
|
|
Loading…
Reference in New Issue