mirror of
https://github.com/gbdev/rgbds.git
synced 2026-08-19 05:14:31 +00:00
Support the COLUMNS environment variable for help/usage output
This commit is contained in:
@@ -177,6 +177,9 @@ or
|
||||
The defaults are 0123.
|
||||
.It Fl h , Fl \-help
|
||||
Print help text for the program and exit.
|
||||
(Help text wraps to the value of the
|
||||
.Dv COLUMNS
|
||||
environment variable if that is defined as nonzero; or else to the console window width if output is to a TTY.)
|
||||
.It Fl I Ar path , Fl \-include Ar path
|
||||
Add a new
|
||||
.Dq include path ;
|
||||
|
||||
@@ -152,6 +152,9 @@ Trash the global checksum.
|
||||
.El
|
||||
.It Fl h , Fl \-help
|
||||
Print help text for the program and exit.
|
||||
(Help text wraps to the value of the
|
||||
.Dv COLUMNS
|
||||
environment variable if that is defined as nonzero; or else to the console window width if output is to a TTY.)
|
||||
.It Fl i Ar game_id , Fl \-game-id Ar game_id
|
||||
Set the game ID string
|
||||
.Pq Ad 0x13F Ns \(en Ns Ad 0x142
|
||||
|
||||
@@ -257,6 +257,9 @@ Set the bit depth of the output tile data, in bits per pixel (bpp), either 1 or
|
||||
This changes how tile data is output, and the maximum number of colors per palette (2 and 4 respectively).
|
||||
.It Fl h , Fl \-help
|
||||
Print help text for the program and exit.
|
||||
(Help text wraps to the value of the
|
||||
.Dv COLUMNS
|
||||
environment variable if that is defined as nonzero; or else to the console window width if output is to a TTY.)
|
||||
.It Fl i Ar input_tiles , Fl \-input-tileset Ar input_tiles
|
||||
Use the specified input tiles in addition to having
|
||||
.Nm
|
||||
|
||||
@@ -152,6 +152,9 @@ This option automatically enables
|
||||
.Fl w .
|
||||
.It Fl h , Fl \-help
|
||||
Print help text for the program and exit.
|
||||
(Help text wraps to the value of the
|
||||
.Dv COLUMNS
|
||||
environment variable if that is defined as nonzero; or else to the console window width if output is to a TTY.)
|
||||
.It Fl l Ar linker_script , Fl \-linkerscript Ar linker_script
|
||||
Specify a linker script file that tells the linker how sections must be placed in the ROM.
|
||||
The attributes assigned in the linker script must be consistent with any assigned in the code.
|
||||
|
||||
+18
-13
@@ -10,6 +10,7 @@
|
||||
#include "helpers.hpp"
|
||||
#include "platform.hpp"
|
||||
#include "style.hpp"
|
||||
#include "util.hpp" // parseWholeNumber
|
||||
#include "version.hpp"
|
||||
|
||||
#if defined(_MSC_VER) || defined(__MINGW32__)
|
||||
@@ -24,20 +25,19 @@ void Usage::printVersion(bool error) const {
|
||||
}
|
||||
|
||||
void Usage::printAndExit(int code) const {
|
||||
FILE *file;
|
||||
bool isTerminal;
|
||||
if (code) {
|
||||
file = stderr;
|
||||
isTerminal = isatty(STDERR_FILENO);
|
||||
} else {
|
||||
file = stdout;
|
||||
isTerminal = isatty(STDOUT_FILENO);
|
||||
// Usage flags can be long lines, so wrap them at a maximum line length
|
||||
uint64_t maxLineLen = 0;
|
||||
// Use the conventional COLUMNS environment variable, if it is defined and nonzero
|
||||
if (char const *columnsStr = getenv("COLUMNS"); columnsStr) {
|
||||
if (std::optional<uint64_t> columns = parseWholeNumber(columnsStr, BASE_10);
|
||||
columns && *columns > 0) {
|
||||
maxLineLen = *columns;
|
||||
} else {
|
||||
warnx("Ignoring invalid `COLUMNS` value \"%s\"", columnsStr);
|
||||
}
|
||||
}
|
||||
|
||||
// Use the console window width minus 1 as the maximum line length for flags,
|
||||
// or the historically common 80 minus 1 if the output is not to a console TTY
|
||||
size_t maxLineLen = 79;
|
||||
if (isTerminal) {
|
||||
// Otherwise, use the console window width minus 1, if the output is to a console TTY
|
||||
if (maxLineLen == 0 && isatty(code ? STDERR_FILENO : STDOUT_FILENO)) {
|
||||
// LCOV_EXCL_START
|
||||
#if defined(_MSC_VER) || defined(__MINGW32__)
|
||||
CONSOLE_SCREEN_BUFFER_INFO csbi;
|
||||
@@ -54,8 +54,13 @@ void Usage::printAndExit(int code) const {
|
||||
#endif
|
||||
// LCOV_EXCL_STOP
|
||||
}
|
||||
// Otherwise, just use the historically common 80 minus 1
|
||||
if (maxLineLen == 0) {
|
||||
maxLineLen = 79;
|
||||
}
|
||||
|
||||
// Print "Usage: <program name>"
|
||||
FILE *file = code ? stderr : stdout;
|
||||
style_Set(file, STYLE_GREEN, true);
|
||||
fputs("Usage: ", file);
|
||||
style_Set(file, STYLE_CYAN, true);
|
||||
|
||||
Reference in New Issue
Block a user