diff --git a/README.md b/README.md index d1a14f2..c02d404 100644 --- a/README.md +++ b/README.md @@ -70,6 +70,11 @@ eliminating the need for the user to press a key to start it. ls -l / | nms -a ``` +Use the `-f` option to set foreground color to either white, yellow, black, magenta, blue, green, or red - this is blue by default. +``` +ls -l / | nms -f green +``` + Using the Module in Your Program --------------------------------- @@ -129,6 +134,7 @@ typedef struct { int input_cursor_y; bool show_cursor; bool auto_decrypt; + int foreground_color; } NmsArgs; ``` * `char *src` @@ -144,6 +150,8 @@ Useful for displaying menus: * Set to `true` if you want the cursor to be visible during the text decryption effect. It is set to `false` by default. * `bool auto_decrypt` * Set to `true` to automatically start the decryption effect, eliminating the need for the user to press a key to start it. + * `int foreground_color` + * Use this to assign a default (ncurses) color to the foreground Assign values to the structure members as needed. Then simply pass a pointer to the structure to the nms_exec() function: diff --git a/src/main.c b/src/main.c index 77dfc8d..119d554 100644 --- a/src/main.c +++ b/src/main.c @@ -13,8 +13,11 @@ int main(int argc, char *argv[]) { NmsArgs args = INIT_NMSARGS; // Processing command arguments - while ((o = getopt(argc, argv, "av")) != -1) { + while ((o = getopt(argc, argv, "f:av")) != -1) { switch (o) { + case 'f': + args.foreground_color = getColorByName(optarg, args.foreground_color); + break; case 'a': args.auto_decrypt = true; break; diff --git a/src/nms.c b/src/nms.c index 4de277c..7bfbd05 100644 --- a/src/nms.c +++ b/src/nms.c @@ -86,7 +86,7 @@ char nms_exec(NmsArgs *args) { // Setting up and starting colors if terminal supports them if (has_colors()) { start_color(); - init_pair(1, COLOR_BLUE, COLOR_BLACK); + init_pair(1, args->foreground_color, COLOR_BLACK); } // Get terminal window size @@ -284,3 +284,43 @@ char getMaskChar(void) { return maskChars[rand() % strlen(maskChars)]; } + +/* + * char getColorByName(char *string, int fallback) + * + * DESCR: + * Returns an ncurses color by its name. + * + */ +int getColorByName(char *string, int fallback) { + + if(strcmp("white", string) == 0) { + return COLOR_WHITE; + } + + if(strcmp("yellow", string) == 0) { + return COLOR_YELLOW; + } + + if(strcmp("black", string) == 0) { + return COLOR_BLACK; + } + + if(strcmp("magenta", string) == 0) { + return COLOR_MAGENTA; + } + + if(strcmp("blue", string) == 0) { + return COLOR_BLUE; + } + + if(strcmp("green", string) == 0) { + return COLOR_GREEN; + } + + if(strcmp("red", string) == 0) { + return COLOR_RED; + } + + return fallback; +} diff --git a/src/nms.h b/src/nms.h index e614aff..d8bec85 100644 --- a/src/nms.h +++ b/src/nms.h @@ -3,9 +3,10 @@ #include #include +#include // Default arguments for nms_exec() -#define INIT_NMSARGS { NULL, NULL, -1, -1, false, false } +#define INIT_NMSARGS { NULL, NULL, -1, -1, false, false , COLOR_BLUE } // Argument structure for nms_exec() typedef struct { @@ -15,9 +16,12 @@ typedef struct { int input_cursor_y; bool show_cursor; bool auto_decrypt; + int foreground_color; } NmsArgs; // Display the characters stored in the display queue char nms_exec(NmsArgs *); +int getColorByName(char *string, int fallback); + #endif