| Yifan Hong | a8bedc6 | 2017-09-08 18:00:31 -0700 | [diff] [blame] | 1 | /* | 
|  | 2 | * Copyright (C) 2017 The Android Open Source Project | 
|  | 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 |  | 
|  | 17 | #include "HelpCommand.h" | 
|  | 18 |  | 
|  | 19 | #include "Lshal.h" | 
|  | 20 |  | 
|  | 21 | namespace android { | 
|  | 22 | namespace lshal { | 
|  | 23 |  | 
| Yifan Hong | 795b6ec | 2017-09-13 11:25:28 -0700 | [diff] [blame] | 24 | std::string HelpCommand::GetName() { | 
|  | 25 | return "help"; | 
|  | 26 | } | 
|  | 27 |  | 
|  | 28 | std::string HelpCommand::getSimpleDescription() const { | 
|  | 29 | return "Print help message."; | 
|  | 30 | } | 
|  | 31 |  | 
| Yifan Hong | a8bedc6 | 2017-09-08 18:00:31 -0700 | [diff] [blame] | 32 | Status HelpCommand::main(const Arg &arg) { | 
|  | 33 | if (optind >= arg.argc) { | 
|  | 34 | // `lshal help` prints global usage. | 
|  | 35 | mLshal.usage(); | 
|  | 36 | return OK; | 
|  | 37 | } | 
|  | 38 | (void)usageOfCommand(arg.argv[optind]); | 
|  | 39 | return OK; | 
|  | 40 | } | 
|  | 41 |  | 
|  | 42 | Status HelpCommand::usageOfCommand(const std::string& c) const { | 
|  | 43 | if (c.empty()) { | 
|  | 44 | mLshal.usage(); | 
|  | 45 | return USAGE; | 
|  | 46 | } | 
|  | 47 | auto command = mLshal.selectCommand(c); | 
|  | 48 | if (command == nullptr) { | 
|  | 49 | // from HelpCommand::main, `lshal help unknown` | 
|  | 50 | mLshal.usage(); | 
|  | 51 | return USAGE; | 
|  | 52 | } | 
|  | 53 |  | 
|  | 54 | command->usage(); | 
|  | 55 | return USAGE; | 
|  | 56 |  | 
|  | 57 | } | 
|  | 58 |  | 
|  | 59 | void HelpCommand::usage() const { | 
| Yifan Hong | 795b6ec | 2017-09-13 11:25:28 -0700 | [diff] [blame] | 60 | mLshal.err() | 
|  | 61 | << "help:" << std::endl | 
|  | 62 | << "    lshal -h" << std::endl | 
|  | 63 | << "    lshal --help" << std::endl | 
|  | 64 | << "    lshal help" << std::endl | 
|  | 65 | << "        Print this help message" << std::endl; | 
|  | 66 | mLshal.forEachCommand([&](const Command* e) { | 
|  | 67 | mLshal.err() << "    lshal help " << e->getName() << std::endl | 
|  | 68 | << "        Print help message for " << e->getName() << std::endl; | 
|  | 69 | }); | 
| Yifan Hong | a8bedc6 | 2017-09-08 18:00:31 -0700 | [diff] [blame] | 70 |  | 
| Yifan Hong | a8bedc6 | 2017-09-08 18:00:31 -0700 | [diff] [blame] | 71 | } | 
|  | 72 |  | 
|  | 73 | }  // namespace lshal | 
|  | 74 | }  // namespace android | 
|  | 75 |  |