Mercurial > hg > openttd
changeset 17354:35ec1d5ef9d7 draft
(svn r22096) -Codechange: Move openttd getopt implementation to its own file.
author | alberth <alberth@openttd.org> |
---|---|
date | Fri, 18 Feb 2011 20:14:30 +0000 (2011-02-18) |
parents | 311c1caf7591 |
children | 12b8c43f633b |
files | projects/openttd_vs100.vcxproj projects/openttd_vs100.vcxproj.filters projects/openttd_vs80.vcproj projects/openttd_vs90.vcproj source.list src/openttd.cpp |
diffstat | 6 files changed, 29 insertions(+), 69 deletions(-) [+] |
line wrap: on
line diff
--- a/projects/openttd_vs100.vcxproj +++ b/projects/openttd_vs100.vcxproj @@ -1022,6 +1022,8 @@ <ClCompile Include="..\src\misc\dbg_helpers.cpp" /> <ClInclude Include="..\src\misc\dbg_helpers.h" /> <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\str.hpp" /> <ClCompile Include="..\src\network\core\address.cpp" />
--- a/projects/openttd_vs100.vcxproj.filters +++ b/projects/openttd_vs100.vcxproj.filters @@ -2286,6 +2286,12 @@ <ClInclude Include="..\src\misc\fixedsizearray.hpp"> <Filter>Misc</Filter> </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"> <Filter>Misc</Filter> </ClInclude>
--- a/projects/openttd_vs80.vcproj +++ b/projects/openttd_vs80.vcproj @@ -3439,6 +3439,14 @@ > </File> <File + RelativePath=".\..\src\misc\getoptdata.cpp" + > + </File> + <File + RelativePath=".\..\src\misc\getoptdata.h" + > + </File> + <File RelativePath=".\..\src\misc\hashtable.hpp" > </File>
--- a/projects/openttd_vs90.vcproj +++ b/projects/openttd_vs90.vcproj @@ -3436,6 +3436,14 @@ > </File> <File + RelativePath=".\..\src\misc\getoptdata.cpp" + > + </File> + <File + RelativePath=".\..\src\misc\getoptdata.h" + > + </File> + <File RelativePath=".\..\src\misc\hashtable.hpp" > </File>
--- a/source.list +++ b/source.list @@ -815,6 +815,8 @@ misc/dbg_helpers.cpp misc/dbg_helpers.h misc/fixedsizearray.hpp +misc/getoptdata.cpp +misc/getoptdata.h misc/hashtable.hpp misc/str.hpp
--- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -59,6 +59,7 @@ #include "core/backup_type.hpp" #include "hotkeys.h" #include "newgrf.h" +#include "misc/getoptdata.h" #include "town.h" @@ -215,73 +216,6 @@ } -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 * it in the 'res' parameter. @@ -452,9 +386,9 @@ #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) { case 'I': free(graphics_set); graphics_set = strdup(mgo.opt); break; case 'S': free(sounds_set); sounds_set = strdup(mgo.opt); break;