From 21f56c54887f82e2fd33b59cae0633d3721d1106 Mon Sep 17 00:00:00 2001 From: Paul Beckingham Date: Tue, 1 Mar 2016 20:14:47 -0500 Subject: [PATCH] init: Added helper functions --- src/CMakeLists.txt | 3 +- src/init.cpp | 82 ++++++++++++++++++++++++++++++++++++++++++++++ src/timew.h | 35 ++++++++++++++++++++ 3 files changed, 119 insertions(+), 1 deletion(-) create mode 100644 src/init.cpp create mode 100644 src/timew.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index cd3856f4..3fa397cc 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -10,7 +10,8 @@ set (timew_SRCS Database.cpp Database.h Interval.cpp Interval.h Lexer.cpp Lexer.h LR0.cpp LR0.h - Rules.cpp Rules.h) + Rules.cpp Rules.h + init.cpp) add_library (timew STATIC ${timew_SRCS}) include_directories(${CMAKE_INSTALL_PREFIX}/include) diff --git a/src/init.cpp b/src/init.cpp new file mode 100644 index 00000000..d7d1d5d7 --- /dev/null +++ b/src/init.cpp @@ -0,0 +1,82 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Copyright 2015 - 2016, Paul Beckingham, Federico Hernandez. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// +// http://www.opensource.org/licenses/mit-license.php +// +//////////////////////////////////////////////////////////////////////////////// + +#include +#include +#include +#include +#include +#include // TODO Remove + +//////////////////////////////////////////////////////////////////////////////// +int dispatchCommand (int argc, const char** argv) +{ + int status {0}; + + if (argc > 1) + { + std::vector allCommands = + { + "help", "clear", "define", "export", "import", + "report", "start", "stop", "track" + }; + + std::vector matches; + autoComplete (argv[1], allCommands, matches); + if (matches.size () == 1) + { + // These signatures are æxpected to be all different, therefore no + // command to fn mapping. + if (closeEnough (allCommands[0], argv[1], 2)) status = CmdHelp (); + else if (closeEnough (allCommands[1], argv[1], 2)) status = CmdClear (); + else if (closeEnough (allCommands[2], argv[1], 2)) status = CmdDefine (); + else if (closeEnough (allCommands[3], argv[1], 2)) status = CmdExport (); + else if (closeEnough (allCommands[4], argv[1], 2)) status = CmdImport (); + else if (closeEnough (allCommands[5], argv[1], 2)) status = CmdReport (); + else if (closeEnough (allCommands[6], argv[1], 2)) status = CmdStart (); + else if (closeEnough (allCommands[7], argv[1], 2)) status = CmdStop (); + else if (closeEnough (allCommands[8], argv[1], 2)) status = CmdTrack (); + } + else if (matches.size () == 0) + { + // TODO usage. + std::cout << "# usage\n"; + } + else + { + // TODO ambiguous. + std::cout << "# ambiguous\n"; + } + } + else if (argc == 1) + { + status = CmdDefault (); + } + + return status; +} + +//////////////////////////////////////////////////////////////////////////////// diff --git a/src/timew.h b/src/timew.h new file mode 100644 index 00000000..adf9eb61 --- /dev/null +++ b/src/timew.h @@ -0,0 +1,35 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// Copyright 2015 - 2016, Paul Beckingham, Federico Hernandez. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// +// http://www.opensource.org/licenses/mit-license.php +// +//////////////////////////////////////////////////////////////////////////////// + +#ifndef INCLUDED_TIMEW +#define INCLUDED_TIMEW + +// init.cpp +int dispatchCommand (int, const char**); + +#endif + +////////////////////////////////////////////////////////////////////////////////