diff options
author | alberth <alberth@openttd.org> | 2011-02-18 20:14:30 +0000 |
---|---|---|
committer | alberth <alberth@openttd.org> | 2011-02-18 20:14:30 +0000 |
commit | 9d0ff9d69202fccc6414f7356faa1ab22c7a14b7 (patch) | |
tree | 67a546e6bac6f2d2462c2a07783c24ca18e8bbcd | |
parent | bca5159951386f8b0c2e1c19fa3268af056ee81d (diff) | |
download | openttd-9d0ff9d69202fccc6414f7356faa1ab22c7a14b7.tar.xz |
(svn r22096) -Codechange: Move openttd getopt implementation to its own file.
-rw-r--r-- | projects/openttd_vs100.vcxproj | 2 | ||||
-rw-r--r-- | projects/openttd_vs100.vcxproj.filters | 6 | ||||
-rw-r--r-- | projects/openttd_vs80.vcproj | 8 | ||||
-rw-r--r-- | projects/openttd_vs90.vcproj | 8 | ||||
-rw-r--r-- | source.list | 2 | ||||
-rw-r--r-- | src/openttd.cpp | 72 |
6 files changed, 29 insertions, 69 deletions
diff --git a/projects/openttd_vs100.vcxproj b/projects/openttd_vs100.vcxproj index edfda1945..98a1be706 100644 --- 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" /> diff --git a/projects/openttd_vs100.vcxproj.filters b/projects/openttd_vs100.vcxproj.filters index 5e009c208..dece30451 100644 --- 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> diff --git a/projects/openttd_vs80.vcproj b/projects/openttd_vs80.vcproj index 8b531142a..ca82ba786 100644 --- 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> diff --git a/projects/openttd_vs90.vcproj b/projects/openttd_vs90.vcproj index 4df272e64..634330007 100644 --- 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> diff --git a/source.list b/source.list index 3370af3cf..aa56688bd 100644 --- a/source.list +++ b/source.list @@ -815,6 +815,8 @@ misc/countedptr.hpp misc/dbg_helpers.cpp misc/dbg_helpers.h misc/fixedsizearray.hpp +misc/getoptdata.cpp +misc/getoptdata.h misc/hashtable.hpp misc/str.hpp diff --git a/src/openttd.cpp b/src/openttd.cpp index c0780241c..f331aab7a 100644 --- 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 @@ 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 * it in the 'res' parameter. @@ -452,9 +386,9 @@ int ttd_main(int argc, char *argv[]) #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; |