Commit 94e7f534cf6c70e9122bbce6578f6a8768248bf5
1 parent
4fc024b7
Display help file if --help option is given (#572).
Showing
2 changed files
with
51 additions
and
0 deletions
src/support/ctool.cpp
| @@ -49,6 +49,7 @@ | @@ -49,6 +49,7 @@ | ||
| 49 | /* __ Method name definitions ____________________________________________ */ | 49 | /* __ Method name definitions ____________________________________________ */ |
| 50 | #define G_GET_MEAN_POINTING "ctool::get_mean_pointing(GObservations&)" | 50 | #define G_GET_MEAN_POINTING "ctool::get_mean_pointing(GObservations&)" |
| 51 | #define G_CREATE_EBOUNDS "ctool::create_ebounds()" | 51 | #define G_CREATE_EBOUNDS "ctool::create_ebounds()" |
| 52 | +#define G_PROVIDE_HELP "ctool::provide_help()" | ||
| 52 | 53 | ||
| 53 | /* __ Debug definitions __________________________________________________ */ | 54 | /* __ Debug definitions __________________________________________________ */ |
| 54 | 55 | ||
| @@ -109,6 +110,12 @@ ctool::ctool(const std::string& name, const std::string& version, | @@ -109,6 +110,12 @@ ctool::ctool(const std::string& name, const std::string& version, | ||
| 109 | int argc, char *argv[]) : | 110 | int argc, char *argv[]) : |
| 110 | GApplication(name, version, argc, argv) | 111 | GApplication(name, version, argc, argv) |
| 111 | { | 112 | { |
| 113 | + // Catch --help option before doing anything else | ||
| 114 | + if (need_help()) { | ||
| 115 | + provide_help(); | ||
| 116 | + exit(0); | ||
| 117 | + } | ||
| 118 | + | ||
| 112 | // Initialise members | 119 | // Initialise members |
| 113 | init_members(); | 120 | init_members(); |
| 114 | 121 | ||
| @@ -978,3 +985,43 @@ size_t ctool::get_current_rss(void) | @@ -978,3 +985,43 @@ size_t ctool::get_current_rss(void) | ||
| 978 | // Return resident set size | 985 | // Return resident set size |
| 979 | return rss; | 986 | return rss; |
| 980 | } | 987 | } |
| 988 | + | ||
| 989 | + | ||
| 990 | +/***********************************************************************//** | ||
| 991 | + * @brief Dumps help text in the console | ||
| 992 | + ***************************************************************************/ | ||
| 993 | +void ctool::provide_help(void) const | ||
| 994 | +{ | ||
| 995 | + // Allocate line buffer | ||
| 996 | + const int n = 1000; | ||
| 997 | + char line[n]; | ||
| 998 | + | ||
| 999 | + // Build help file name | ||
| 1000 | + std::string helpfile = name()+".txt"; | ||
| 1001 | + | ||
| 1002 | + // Get ctools environment variable | ||
| 1003 | + char* ptr = std::getenv("CTOOLS"); | ||
| 1004 | + if (ptr == NULL) { | ||
| 1005 | + std::string msg = "CTOOLS environment variable not set, cannot " | ||
| 1006 | + "display help file. Please define CTOOLS " | ||
| 1007 | + "environment variable."; | ||
| 1008 | + throw GException::invalid_value(G_PROVIDE_HELP, msg); | ||
| 1009 | + } | ||
| 1010 | + | ||
| 1011 | + // If help file exists then display it, otherwise notify that no | ||
| 1012 | + // help is available | ||
| 1013 | + std::string fname = std::string(ptr) + "/share/help/" + helpfile; | ||
| 1014 | + FILE* fptr = fopen(fname.c_str(), "r"); | ||
| 1015 | + if (fptr != NULL) { | ||
| 1016 | + while (fgets(line, n, fptr) != NULL) { | ||
| 1017 | + std::cout << std::string(line); | ||
| 1018 | + } | ||
| 1019 | + fclose(fptr); | ||
| 1020 | + } | ||
| 1021 | + else { | ||
| 1022 | + std::cout << "No help available for "+name()+"." << std::endl; | ||
| 1023 | + } | ||
| 1024 | + | ||
| 1025 | + // Return | ||
| 1026 | + return; | ||
| 1027 | +} |
src/support/ctool.hpp
| @@ -89,6 +89,10 @@ protected: | @@ -89,6 +89,10 @@ protected: | ||
| 89 | GSkyDir get_mean_pointing(const GObservations& obs); | 89 | GSkyDir get_mean_pointing(const GObservations& obs); |
| 90 | size_t get_current_rss(void); | 90 | size_t get_current_rss(void); |
| 91 | 91 | ||
| 92 | +protected: | ||
| 93 | + // Protected methods | ||
| 94 | + void provide_help(void) const; | ||
| 95 | + | ||
| 92 | // Protected members | 96 | // Protected members |
| 93 | bool m_read_ahead; //!< Read ahead parameters | 97 | bool m_read_ahead; //!< Read ahead parameters |
| 94 | bool m_use_xml; //!< Use XML file instead of FITS file for observations | 98 | bool m_use_xml; //!< Use XML file instead of FITS file for observations |