C++ Utilities 5.27.0
Useful C++ classes and routines such as argument parser, IO and conversion utilities
Loading...
Searching...
No Matches
commandlineutils.h
Go to the documentation of this file.
1#ifndef APPLICATION_UTILITIES_COMMANDLINEUTILS_H
2#define APPLICATION_UTILITIES_COMMANDLINEUTILS_H
3
4#include "../global.h"
5
6#include <optional>
7#include <ostream>
8
9#ifdef PLATFORM_WINDOWS
10#include <memory>
11#include <vector>
12#endif
13
14namespace CppUtilities {
15
19enum class Response { None, Yes, No };
20
21CPP_UTILITIES_EXPORT bool confirmPrompt(const char *message, Response defaultResponse = Response::None);
22CPP_UTILITIES_EXPORT std::optional<bool> isEnvVariableSet(const char *variableName);
23
24#ifdef PLATFORM_WINDOWS
25CPP_UTILITIES_EXPORT bool handleVirtualTerminalProcessing();
26CPP_UTILITIES_EXPORT void startConsole();
27CPP_UTILITIES_EXPORT std::pair<std::vector<std::unique_ptr<char[]>>, std::vector<char *>> convertArgsToUtf8();
28#define CMD_UTILS_START_CONSOLE ::CppUtilities::startConsole();
29#define CMD_UTILS_CONVERT_ARGS_TO_UTF8 \
30 auto utf8Args = ::CppUtilities::convertArgsToUtf8(); \
31 argv = utf8Args.second.data(); \
32 argc = static_cast<int>(utf8Args.second.size());
33#define CMD_UTILS_HANDLE_VIRTUAL_TERMINAL_PROCESSING ::CppUtilities::handleVirtualTerminalProcessing();
34#else
35#define CMD_UTILS_START_CONSOLE
36#define CMD_UTILS_CONVERT_ARGS_TO_UTF8
37#define CMD_UTILS_HANDLE_VIRTUAL_TERMINAL_PROCESSING
38#endif
39
46 TerminalSize(unsigned short rows = 0, unsigned short columns = 0, unsigned short width = 0, unsigned short height = 0);
47
49 unsigned short rows;
51 unsigned short columns;
53 unsigned short width;
55 unsigned short height;
56};
57
58inline TerminalSize::TerminalSize(unsigned short rows, unsigned short columns, unsigned short width, unsigned short height)
59 : rows(rows)
60 , columns(columns)
61 , width(width)
62 , height(height)
63{
64}
65
67
72public:
73 Indentation(unsigned char level = 4, char character = ' ')
74 : level(level)
75 , character(character)
76 {
77 }
78
79 Indentation operator+(unsigned char level)
80 {
81 return Indentation(this->level + level, character);
82 }
83
84 unsigned char level;
86};
87
88inline CPP_UTILITIES_EXPORT std::ostream &operator<<(std::ostream &out, Indentation indentation)
89{
90 for (unsigned char i = 0; i < indentation.level; ++i) {
91 out << indentation.character;
92 }
93 return out;
94}
95
96} // namespace CppUtilities
97
98#endif // APPLICATION_UTILITIES_COMMANDLINEUTILS_H
The Indentation class allows printing indentation conveniently, eg.
Indentation(unsigned char level=4, char character=' ')
Indentation operator+(unsigned char level)
#define CPP_UTILITIES_EXPORT
Marks the symbol to be exported by the c++utilities library.
Definition global.h:14
Contains all utilities provides by the c++utilities library.
CPP_UTILITIES_EXPORT TerminalSize determineTerminalSize()
Returns the current size of the terminal.
CPP_UTILITIES_EXPORT std::ostream & operator<<(std::ostream &out, Indentation indentation)
Response
The Response enum is used to specify the default response for the confirmPrompt() method.
CPP_UTILITIES_EXPORT bool confirmPrompt(const char *message, Response defaultResponse=Response::None)
Prompts for confirmation displaying the specified message.
CPP_UTILITIES_EXPORT std::optional< bool > isEnvVariableSet(const char *variableName)
Returns whether the specified env variable is set to a non-zero and non-white-space-only value.
The TerminalSize struct describes a terminal size.
unsigned short width
width in pixel
unsigned short height
height in pixel
TerminalSize(unsigned short rows=0, unsigned short columns=0, unsigned short width=0, unsigned short height=0)
unsigned short columns
number of columns
unsigned short rows
number of rows
constexpr int i