1 /** 2 * Copyright © 2017 IBM Corporation 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 #include <iostream> 17 #include <iterator> 18 #include <algorithm> 19 #include <cassert> 20 #include "argument.hpp" 21 22 namespace witherspoon 23 { 24 namespace power 25 { 26 27 ArgumentParser::ArgumentParser(int argc, char** argv) 28 { 29 auto option = 0; 30 while (-1 != (option = getopt_long(argc, argv, optionStr, options, NULL))) 31 { 32 if ((option == '?') || (option == 'h')) 33 { 34 usage(argv); 35 exit(-1); 36 } 37 38 auto i = &options[0]; 39 while ((i->val != option) && (i->val != 0)) 40 { 41 ++i; 42 } 43 44 if (i->val) 45 { 46 arguments[i->name] = (i->has_arg ? optarg : trueString); 47 } 48 } 49 } 50 51 const std::string& ArgumentParser::operator[](const std::string& opt) 52 { 53 auto i = arguments.find(opt); 54 if (i == arguments.end()) 55 { 56 return emptyString; 57 } 58 else 59 { 60 return i->second; 61 } 62 } 63 64 void ArgumentParser::usage(char** argv) 65 { 66 std::cerr << "Usage: " << argv[0] << " [options]\n"; 67 std::cerr << "Options:\n"; 68 std::cerr << " --help print this menu\n"; 69 std::cerr << " --path=<objpath> path to location to " 70 "monitor\n"; 71 std::cerr << " --instance=<instance number> Instance number for this" 72 " power supply\n"; 73 std::cerr << " --inventory=<inventory path> Inventory path for this" 74 " power supply\n"; 75 std::cerr << std::flush; 76 } 77 78 const option ArgumentParser::options[] = 79 { 80 { "path", required_argument, NULL, 'p' }, 81 { "instance", required_argument, NULL, 'n' }, 82 { "inventory", required_argument, NULL, 'i' }, 83 { "help", no_argument, NULL, 'h' }, 84 { 0, 0, 0, 0}, 85 }; 86 87 const char* ArgumentParser::optionStr = "p:n:i:h"; 88 89 const std::string ArgumentParser::trueString = "true"; 90 const std::string ArgumentParser::emptyString = ""; 91 92 } 93 } 94