Split termcolour implementations by platform and simplify the API
This commit is contained in:
		
							
								
								
									
										34
									
								
								src/common/shell/termcolour/posix/termcolour_posix.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								src/common/shell/termcolour/posix/termcolour_posix.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | |||||||
|  | #include "aliases.h" | ||||||
|  | #include "platform.h" | ||||||
|  |  | ||||||
|  | #ifdef WAPP_PLATFORM_POSIX | ||||||
|  |  | ||||||
|  | #include "terminal_colours.h" | ||||||
|  | #include "termcolour_posix.h" | ||||||
|  | #include <stdio.h> | ||||||
|  |  | ||||||
|  | internal const char *colours[COUNT_TERM_COLOUR] = { | ||||||
|  |     [WAPP_TERM_COLOUR_FG_BLACK]      = "\033[30m", | ||||||
|  |     [WAPP_TERM_COLOUR_FG_RED]        = "\033[31m", | ||||||
|  |     [WAPP_TERM_COLOUR_FG_GREEN]      = "\033[32m", | ||||||
|  |     [WAPP_TERM_COLOUR_FG_BLUE]       = "\033[34m", | ||||||
|  |     [WAPP_TERM_COLOUR_FG_CYAN]       = "\033[36m", | ||||||
|  |     [WAPP_TERM_COLOUR_FG_MAGENTA]    = "\033[35m", | ||||||
|  |     [WAPP_TERM_COLOUR_FG_YELLOW]     = "\033[33m", | ||||||
|  |     [WAPP_TERM_COLOUR_FG_WHITE]      = "\033[37m", | ||||||
|  |     [WAPP_TERM_COLOUR_FG_BR_BLACK]   = "\033[90m", | ||||||
|  |     [WAPP_TERM_COLOUR_FG_BR_RED]     = "\033[91m", | ||||||
|  |     [WAPP_TERM_COLOUR_FG_BR_GREEN]   = "\033[92m", | ||||||
|  |     [WAPP_TERM_COLOUR_FG_BR_BLUE]    = "\033[94m", | ||||||
|  |     [WAPP_TERM_COLOUR_FG_BR_CYAN]    = "\033[96m", | ||||||
|  |     [WAPP_TERM_COLOUR_FG_BR_MAGENTA] = "\033[95m", | ||||||
|  |     [WAPP_TERM_COLOUR_FG_BR_YELLOW]  = "\033[93m", | ||||||
|  |     [WAPP_TERM_COLOUR_FG_BR_WHITE]   = "\033[97m", | ||||||
|  |     [WAPP_TERM_COLOUR_CLEAR]         = "\033[0m", | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | void print_coloured_text(const char *text, TerminalColour colour) { | ||||||
|  |   printf("%s%s", colours[colour], text); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #endif // !WAPP_PLATFORM_POSIX | ||||||
							
								
								
									
										22
									
								
								src/common/shell/termcolour/posix/termcolour_posix.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/common/shell/termcolour/posix/termcolour_posix.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | |||||||
|  | #ifndef TERM_COLOUR_POSIX_H | ||||||
|  | #define TERM_COLOUR_POSIX_H | ||||||
|  |  | ||||||
|  | #include "platform.h" | ||||||
|  |  | ||||||
|  | #ifdef WAPP_PLATFORM_POSIX | ||||||
|  |  | ||||||
|  | #include "terminal_colours.h" | ||||||
|  |  | ||||||
|  | #ifdef __cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif // __cplusplus | ||||||
|  |  | ||||||
|  | void print_coloured_text(const char *text, TerminalColour colour); | ||||||
|  |  | ||||||
|  | #ifdef __cplusplus | ||||||
|  | } | ||||||
|  | #endif // __cplusplus | ||||||
|  |  | ||||||
|  | #endif // !WAPP_PLATFORM_POSIX | ||||||
|  |  | ||||||
|  | #endif // !TERM_COLOUR_POSIX_H | ||||||
| @@ -1,101 +1,23 @@ | |||||||
| #include "termcolour.h" | #include "termcolour.h" | ||||||
| #include "aliases.h" | #include "terminal_colours.h" | ||||||
| #include "platform.h" | #include "platform.h" | ||||||
| #include <stdio.h> |  | ||||||
|  |  | ||||||
| internal void print_coloured_text(const TerminalColourist *colourist, |  | ||||||
|                                   const char *text); |  | ||||||
|  |  | ||||||
| #ifdef WAPP_PLATFORM_WINDOWS | #ifdef WAPP_PLATFORM_WINDOWS | ||||||
| #define WIN32_LEAN_AND_MEAN |   #include "termcolour_win.h" | ||||||
| #include <Windows.h> | #elif defined(WAPP_PLATFORM_POSIX) | ||||||
|  |   #include "termcolour_posix.h" | ||||||
| internal WORD colours[COUNT_TERM_COLOUR] = { |  | ||||||
|     [WAPP_TERM_COLOUR_FG_BLACK] = 0, |  | ||||||
|     [WAPP_TERM_COLOUR_FG_RED] = FOREGROUND_RED, |  | ||||||
|     [WAPP_TERM_COLOUR_FG_GREEN] = FOREGROUND_GREEN, |  | ||||||
|     [WAPP_TERM_COLOUR_FG_BLUE] = FOREGROUND_BLUE, |  | ||||||
|     [WAPP_TERM_COLOUR_FG_CYAN] = FOREGROUND_GREEN | FOREGROUND_BLUE, |  | ||||||
|     [WAPP_TERM_COLOUR_FG_MAGENTA] = FOREGROUND_RED | FOREGROUND_BLUE, |  | ||||||
|     [WAPP_TERM_COLOUR_FG_YELLOW] = FOREGROUND_RED | FOREGROUND_GREEN, |  | ||||||
|     [WAPP_TERM_COLOUR_FG_WHITE] = |  | ||||||
|         FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, |  | ||||||
|     [WAPP_TERM_COLOUR_FG_BR_BLACK] = FOREGROUND_INTENSITY, |  | ||||||
|     [WAPP_TERM_COLOUR_FG_BR_RED] = FOREGROUND_RED | FOREGROUND_INTENSITY, |  | ||||||
|     [WAPP_TERM_COLOUR_FG_BR_GREEN] = FOREGROUND_GREEN | FOREGROUND_INTENSITY, |  | ||||||
|     [WAPP_TERM_COLOUR_FG_BR_BLUE] = FOREGROUND_BLUE | FOREGROUND_INTENSITY, |  | ||||||
|     [WAPP_TERM_COLOUR_FG_BR_CYAN] = |  | ||||||
|         FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY, |  | ||||||
|     [WAPP_TERM_COLOUR_FG_BR_MAGENTA] = |  | ||||||
|         FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY, |  | ||||||
|     [WAPP_TERM_COLOUR_FG_BR_YELLOW] = |  | ||||||
|         FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY, |  | ||||||
|     [WAPP_TERM_COLOUR_FG_BR_WHITE] = FOREGROUND_RED | FOREGROUND_GREEN | |  | ||||||
|                                      FOREGROUND_BLUE | FOREGROUND_INTENSITY, |  | ||||||
| }; |  | ||||||
| #else | #else | ||||||
| internal const char *colours[COUNT_TERM_COLOUR] = { |   #error "Unrecognised platform" | ||||||
|     [WAPP_TERM_COLOUR_FG_BLACK] = "\033[30m", | #endif | ||||||
|     [WAPP_TERM_COLOUR_FG_RED] = "\033[31m", |  | ||||||
|     [WAPP_TERM_COLOUR_FG_GREEN] = "\033[32m", |  | ||||||
|     [WAPP_TERM_COLOUR_FG_BLUE] = "\033[34m", |  | ||||||
|     [WAPP_TERM_COLOUR_FG_CYAN] = "\033[36m", |  | ||||||
|     [WAPP_TERM_COLOUR_FG_MAGENTA] = "\033[35m", |  | ||||||
|     [WAPP_TERM_COLOUR_FG_YELLOW] = "\033[33m", |  | ||||||
|     [WAPP_TERM_COLOUR_FG_WHITE] = "\033[37m", |  | ||||||
|     [WAPP_TERM_COLOUR_FG_BR_BLACK] = "\033[90m", |  | ||||||
|     [WAPP_TERM_COLOUR_FG_BR_RED] = "\033[91m", |  | ||||||
|     [WAPP_TERM_COLOUR_FG_BR_GREEN] = "\033[92m", |  | ||||||
|     [WAPP_TERM_COLOUR_FG_BR_BLUE] = "\033[94m", |  | ||||||
|     [WAPP_TERM_COLOUR_FG_BR_CYAN] = "\033[96m", |  | ||||||
|     [WAPP_TERM_COLOUR_FG_BR_MAGENTA] = "\033[95m", |  | ||||||
|     [WAPP_TERM_COLOUR_FG_BR_YELLOW] = "\033[93m", |  | ||||||
|     [WAPP_TERM_COLOUR_FG_BR_WHITE] = "\033[97m", |  | ||||||
| }; |  | ||||||
| #endif /* ifdef WAPP_PLATFORM_WINDOWS */ |  | ||||||
|  |  | ||||||
| TerminalColourist wapp_shell_termcolour_get_colourist(void) { | void wapp_shell_termcolour_print_text(const char *text, TerminalColour colour) { | ||||||
|   TerminalColourist colourist; |   if (colour < WAPP_TERM_COLOUR_FG_BLACK || colour > WAPP_TERM_COLOUR_FG_BR_WHITE) { | ||||||
|  |  | ||||||
| #ifdef WAPP_PLATFORM_WINDOWS |  | ||||||
|   // create handle |  | ||||||
|   colourist.handle = GetStdHandle(STD_OUTPUT_HANDLE); |  | ||||||
|  |  | ||||||
|   // get console colour information |  | ||||||
|   CONSOLE_SCREEN_BUFFER_INFO csbi; |  | ||||||
|   GetConsoleScreenBufferInfo(colourist.handle, &csbi); |  | ||||||
|   colourist.default_colour = csbi.wAttributes; |  | ||||||
| #else |  | ||||||
|   colourist.default_colour = "\033[0m"; |  | ||||||
| #endif // ifdef WAPP_PLATFORM_WINDOWS |  | ||||||
|  |  | ||||||
|   colourist.current_colour = colourist.default_colour; |  | ||||||
|  |  | ||||||
|   return colourist; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void wapp_shell_termcolour_print_text(TerminalColourist *colourist, |  | ||||||
|                                       const char *text, TerminalColour colour) { |  | ||||||
|   if (colour < WAPP_TERM_COLOUR_FG_BLACK || |  | ||||||
|       colour > WAPP_TERM_COLOUR_FG_BR_WHITE) { |  | ||||||
|     return; |     return; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   colourist->current_colour = colours[colour]; |   print_coloured_text(text, colour); | ||||||
|   print_coloured_text(colourist, text); |  | ||||||
| } | } | ||||||
|  |  | ||||||
| void wapp_shell_termcolour_clear_colour(TerminalColourist *colourist) { | void wapp_shell_termcolour_clear_colour(void) { | ||||||
|   colourist->current_colour = colourist->default_colour; |   print_coloured_text("", WAPP_TERM_COLOUR_CLEAR); | ||||||
|   print_coloured_text(colourist, ""); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| internal void print_coloured_text(const TerminalColourist *colourist, |  | ||||||
|                                   const char *text) { |  | ||||||
| #ifdef WAPP_PLATFORM_WINDOWS |  | ||||||
|   SetConsoleTextAttribute(colourist->handle, colourist->current_colour); |  | ||||||
|   printf("%s", text); |  | ||||||
| #else |  | ||||||
|   printf("%s%s", colourist->current_colour, text); |  | ||||||
| #endif // ifdef WAPP_PLATFORM_WINDOWS |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -1,61 +1,14 @@ | |||||||
| #ifndef TERM_COLOUR_H | #ifndef TERM_COLOUR_H | ||||||
| #define TERM_COLOUR_H | #define TERM_COLOUR_H | ||||||
|  |  | ||||||
| #include "aliases.h" | #include "terminal_colours.h" | ||||||
| #include "misc_utils.h" |  | ||||||
| #include "platform.h" |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| extern "C" { | extern "C" { | ||||||
| #endif // __cplusplus | #endif // __cplusplus | ||||||
|  |  | ||||||
| typedef enum { | void wapp_shell_termcolour_print_text(const char *text, TerminalColour colour); | ||||||
|   WAPP_TERM_COLOUR_FG_BLACK, | void wapp_shell_termcolour_clear_colour(void); | ||||||
|   WAPP_TERM_COLOUR_FG_RED, |  | ||||||
|   WAPP_TERM_COLOUR_FG_GREEN, |  | ||||||
|   WAPP_TERM_COLOUR_FG_BLUE, |  | ||||||
|   WAPP_TERM_COLOUR_FG_CYAN, |  | ||||||
|   WAPP_TERM_COLOUR_FG_MAGENTA, |  | ||||||
|   WAPP_TERM_COLOUR_FG_YELLOW, |  | ||||||
|   WAPP_TERM_COLOUR_FG_WHITE, |  | ||||||
|   WAPP_TERM_COLOUR_FG_BR_BLACK, |  | ||||||
|   WAPP_TERM_COLOUR_FG_BR_RED, |  | ||||||
|   WAPP_TERM_COLOUR_FG_BR_GREEN, |  | ||||||
|   WAPP_TERM_COLOUR_FG_BR_BLUE, |  | ||||||
|   WAPP_TERM_COLOUR_FG_BR_CYAN, |  | ||||||
|   WAPP_TERM_COLOUR_FG_BR_MAGENTA, |  | ||||||
|   WAPP_TERM_COLOUR_FG_BR_YELLOW, |  | ||||||
|   WAPP_TERM_COLOUR_FG_BR_WHITE, |  | ||||||
|  |  | ||||||
|   COUNT_TERM_COLOUR, |  | ||||||
| } TerminalColour; |  | ||||||
|  |  | ||||||
| typedef struct terminal_colourist TerminalColourist; |  | ||||||
|  |  | ||||||
| // clang-format off |  | ||||||
| #ifdef WAPP_PLATFORM_WINDOWS |  | ||||||
| #define WIN32_LEAN_AND_MEAN |  | ||||||
| #include <Windows.h> |  | ||||||
| #include <WinCon.h> |  | ||||||
|  |  | ||||||
| struct terminal_colourist { |  | ||||||
|   HANDLE handle; |  | ||||||
|   WORD default_colour; |  | ||||||
|   WORD current_colour; |  | ||||||
|   wapp_misc_utils_padding_size(sizeof(HANDLE) + sizeof(WORD) + sizeof(WORD)); |  | ||||||
| }; |  | ||||||
| #else |  | ||||||
| struct terminal_colourist { |  | ||||||
|   const char *default_colour; |  | ||||||
|   const char *current_colour; |  | ||||||
| }; |  | ||||||
| #endif // WAPP_PLATFORM_WINDOWS |  | ||||||
| // clang-format on |  | ||||||
|  |  | ||||||
| TerminalColourist wapp_shell_termcolour_get_colourist(void); |  | ||||||
| void wapp_shell_termcolour_print_text(TerminalColourist *colourist, |  | ||||||
|                                       const char *text, TerminalColour colour); |  | ||||||
| void wapp_shell_termcolour_clear_colour(TerminalColourist *colourist); |  | ||||||
|  |  | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										34
									
								
								src/common/shell/termcolour/terminal_colours.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								src/common/shell/termcolour/terminal_colours.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | |||||||
|  | #ifndef TERMINAL_COLOURS_H | ||||||
|  | #define TERMINAL_COLOURS_H | ||||||
|  |  | ||||||
|  | #ifdef __cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif // __cplusplus | ||||||
|  |  | ||||||
|  | typedef enum { | ||||||
|  |   WAPP_TERM_COLOUR_FG_BLACK, | ||||||
|  |   WAPP_TERM_COLOUR_FG_RED, | ||||||
|  |   WAPP_TERM_COLOUR_FG_GREEN, | ||||||
|  |   WAPP_TERM_COLOUR_FG_BLUE, | ||||||
|  |   WAPP_TERM_COLOUR_FG_CYAN, | ||||||
|  |   WAPP_TERM_COLOUR_FG_MAGENTA, | ||||||
|  |   WAPP_TERM_COLOUR_FG_YELLOW, | ||||||
|  |   WAPP_TERM_COLOUR_FG_WHITE, | ||||||
|  |   WAPP_TERM_COLOUR_FG_BR_BLACK, | ||||||
|  |   WAPP_TERM_COLOUR_FG_BR_RED, | ||||||
|  |   WAPP_TERM_COLOUR_FG_BR_GREEN, | ||||||
|  |   WAPP_TERM_COLOUR_FG_BR_BLUE, | ||||||
|  |   WAPP_TERM_COLOUR_FG_BR_CYAN, | ||||||
|  |   WAPP_TERM_COLOUR_FG_BR_MAGENTA, | ||||||
|  |   WAPP_TERM_COLOUR_FG_BR_YELLOW, | ||||||
|  |   WAPP_TERM_COLOUR_FG_BR_WHITE, | ||||||
|  |   WAPP_TERM_COLOUR_CLEAR, | ||||||
|  |  | ||||||
|  |   COUNT_TERM_COLOUR, | ||||||
|  | } TerminalColour; | ||||||
|  |  | ||||||
|  | #ifdef __cplusplus | ||||||
|  | } | ||||||
|  | #endif // __cplusplus | ||||||
|  |  | ||||||
|  | #endif // !TERMINAL_COLOURS_H | ||||||
							
								
								
									
										72
									
								
								src/common/shell/termcolour/win/termcolour_win.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								src/common/shell/termcolour/win/termcolour_win.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,72 @@ | |||||||
|  | #include "aliases.h" | ||||||
|  | #include "platform.h" | ||||||
|  |  | ||||||
|  | #ifdef WAPP_PLATFORM_WINDOWS | ||||||
|  |  | ||||||
|  | #include "misc_utils.h" | ||||||
|  | #include "termcolour_win.h" | ||||||
|  | #include "terminal_colours.h" | ||||||
|  | #include <stdio.h> | ||||||
|  |  | ||||||
|  | #define WIN32_LEAN_AND_MEAN | ||||||
|  | #include <Windows.h> | ||||||
|  |  | ||||||
|  | typedef struct termcolour_data TermcolourData; | ||||||
|  | struct termcolour_data { | ||||||
|  |   HANDLE handle; | ||||||
|  |   WORD   default_colour; | ||||||
|  |   WORD   current_colour; | ||||||
|  |  | ||||||
|  |   wapp_misc_utils_padding_size(sizeof(HANDLE) + sizeof(WORD) + sizeof(WORD)); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | internal TermcolourData init_data(void); | ||||||
|  |  | ||||||
|  | internal WORD colours[COUNT_TERM_COLOUR] = { | ||||||
|  |     [WAPP_TERM_COLOUR_FG_BLACK]      = 0, | ||||||
|  |     [WAPP_TERM_COLOUR_FG_RED]        = FOREGROUND_RED, | ||||||
|  |     [WAPP_TERM_COLOUR_FG_GREEN]      = FOREGROUND_GREEN, | ||||||
|  |     [WAPP_TERM_COLOUR_FG_BLUE]       = FOREGROUND_BLUE, | ||||||
|  |     [WAPP_TERM_COLOUR_FG_CYAN]       = FOREGROUND_GREEN | FOREGROUND_BLUE, | ||||||
|  |     [WAPP_TERM_COLOUR_FG_MAGENTA]    = FOREGROUND_RED | FOREGROUND_BLUE, | ||||||
|  |     [WAPP_TERM_COLOUR_FG_YELLOW]     = FOREGROUND_RED | FOREGROUND_GREEN, | ||||||
|  |     [WAPP_TERM_COLOUR_FG_WHITE]      = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE, | ||||||
|  |     [WAPP_TERM_COLOUR_FG_BR_BLACK]   = FOREGROUND_INTENSITY, | ||||||
|  |     [WAPP_TERM_COLOUR_FG_BR_RED]     = FOREGROUND_RED | FOREGROUND_INTENSITY, | ||||||
|  |     [WAPP_TERM_COLOUR_FG_BR_GREEN]   = FOREGROUND_GREEN | FOREGROUND_INTENSITY, | ||||||
|  |     [WAPP_TERM_COLOUR_FG_BR_BLUE]    = FOREGROUND_BLUE | FOREGROUND_INTENSITY, | ||||||
|  |     [WAPP_TERM_COLOUR_FG_BR_CYAN]    = FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY, | ||||||
|  |     [WAPP_TERM_COLOUR_FG_BR_MAGENTA] = FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY, | ||||||
|  |     [WAPP_TERM_COLOUR_FG_BR_YELLOW]  = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY, | ||||||
|  |     [WAPP_TERM_COLOUR_FG_BR_WHITE]   = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY, | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | void print_coloured_text(const char *text, TerminalColour colour) { | ||||||
|  |   persistent TermcolourData data = init_data(); | ||||||
|  |  | ||||||
|  |   if (color == WAPP_TERM_COLOUR_CLEAR) { | ||||||
|  |     data->current_colour = data->default_colour; | ||||||
|  |   } else { | ||||||
|  |     data->current_colour = colours[colour]; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   SetConsoleTextAttribute(data->handle, data->current_colour); | ||||||
|  |   printf("%s", text); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | internal TermcolourData init_data(void) { | ||||||
|  |   TermcolourData data = {0}; | ||||||
|  |  | ||||||
|  |   // create handle | ||||||
|  |   data.handle = GetStdHandle(STD_OUTPUT_HANDLE); | ||||||
|  |  | ||||||
|  |   // get console colour information | ||||||
|  |   CONSOLE_SCREEN_BUFFER_INFO csbi; | ||||||
|  |   GetConsoleScreenBufferInfo(data.handle, &csbi); | ||||||
|  |   data.default_colour = csbi.wAttributes; | ||||||
|  |   data.current_colour = data.default_colour; | ||||||
|  |  | ||||||
|  |   return data; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #endif // !WAPP_PLATFORM_WINDOWS | ||||||
							
								
								
									
										26
									
								
								src/common/shell/termcolour/win/termcolour_win.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								src/common/shell/termcolour/win/termcolour_win.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | |||||||
|  | #ifndef TERM_COLOUR_WIN_H | ||||||
|  | #define TERM_COLOUR_WIN_H | ||||||
|  |  | ||||||
|  | #include "platform.h" | ||||||
|  |  | ||||||
|  | #ifdef WAPP_PLATFORM_WINDOWS | ||||||
|  |  | ||||||
|  | #include "terminal_colours.h" | ||||||
|  |  | ||||||
|  | #define WIN32_LEAN_AND_MEAN | ||||||
|  | #include <Windows.h> | ||||||
|  | #include <WinCon.h> | ||||||
|  |  | ||||||
|  | #ifdef __cplusplus | ||||||
|  | extern "C" { | ||||||
|  | #endif // __cplusplus | ||||||
|  |  | ||||||
|  | void print_coloured_text(const char *text, TerminalColour colour); | ||||||
|  |  | ||||||
|  | #ifdef __cplusplus | ||||||
|  | } | ||||||
|  | #endif // __cplusplus | ||||||
|  |  | ||||||
|  | #endif // !WAPP_PLATFORM_WINDOWS | ||||||
|  |  | ||||||
|  | #endif // !TERM_COLOUR_WIN_H | ||||||
| @@ -1,20 +1,16 @@ | |||||||
| #include "tester.h" | #include "tester.h" | ||||||
| #include "aliases.h" | #include "aliases.h" | ||||||
| #include "platform.h" |  | ||||||
| #include "termcolour.h" | #include "termcolour.h" | ||||||
| #include <stdarg.h> | #include <stdarg.h> | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
|  |  | ||||||
| internal void handle_test_result(TerminalColourist *colourist, | internal void handle_test_result(TestFuncResult result); | ||||||
|                                  TestFuncResult result); |  | ||||||
|  |  | ||||||
| void run_tests(TestFunc *func1, ...) { | void run_tests(TestFunc *func1, ...) { | ||||||
|   TerminalColourist colourist = wapp_shell_termcolour_get_colourist(); |  | ||||||
|  |  | ||||||
|   printf("\n"); |   printf("\n"); | ||||||
|  |  | ||||||
|   handle_test_result(&colourist, func1()); |   handle_test_result(func1()); | ||||||
|  |  | ||||||
|   va_list args; |   va_list args; | ||||||
|   va_start(args, func1); |   va_start(args, func1); | ||||||
| @@ -23,7 +19,7 @@ void run_tests(TestFunc *func1, ...) { | |||||||
|  |  | ||||||
|   while (func) { |   while (func) { | ||||||
|     TestFuncResult result = func(); |     TestFuncResult result = func(); | ||||||
|     handle_test_result(&colourist, result); |     handle_test_result(result); | ||||||
|  |  | ||||||
|     func = va_arg(args, TestFunc *); |     func = va_arg(args, TestFunc *); | ||||||
|   } |   } | ||||||
| @@ -33,8 +29,7 @@ void run_tests(TestFunc *func1, ...) { | |||||||
|   printf("\n"); |   printf("\n"); | ||||||
| } | } | ||||||
|  |  | ||||||
| internal void handle_test_result(TerminalColourist *colourist, | internal void handle_test_result(TestFuncResult result) { | ||||||
|                                  TestFuncResult result) { |  | ||||||
|   TerminalColour colour; |   TerminalColour colour; | ||||||
|   const char *result_text; |   const char *result_text; | ||||||
|  |  | ||||||
| @@ -47,8 +42,8 @@ internal void handle_test_result(TerminalColourist *colourist, | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   printf("["); |   printf("["); | ||||||
|   wapp_shell_termcolour_print_text(colourist, result_text, colour); |   wapp_shell_termcolour_print_text(result_text, colour); | ||||||
|   wapp_shell_termcolour_clear_colour(colourist); |   wapp_shell_termcolour_clear_colour(); | ||||||
|   printf("] %s\n", result.name); |   printf("] %s\n", result.name); | ||||||
|  |  | ||||||
|   if (!result.passed) { |   if (!result.passed) { | ||||||
|   | |||||||
| @@ -9,8 +9,7 @@ | |||||||
| extern "C" { | extern "C" { | ||||||
| #endif // __cplusplus | #endif // __cplusplus | ||||||
|  |  | ||||||
| #define wapp_tester_result(PASSED)                                             \ | #define wapp_tester_result(PASSED) ((TestFuncResult){.name = __func__, .passed = PASSED}) | ||||||
|   ((TestFuncResult){.name = __func__, .passed = PASSED}) |  | ||||||
| #define wapp_tester_run_tests(...) run_tests(__VA_ARGS__, NULL) | #define wapp_tester_run_tests(...) run_tests(__VA_ARGS__, NULL) | ||||||
|  |  | ||||||
| typedef struct test_func_result TestFuncResult; | typedef struct test_func_result TestFuncResult; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user