diff options
| author | fig02 <fig02srl@gmail.com> | 2025-04-23 19:31:49 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-23 19:31:49 -0400 |
| commit | de59ad3db71a7e1d0134fa8be0c047c4cb1efacd (patch) | |
| tree | 687a4e8c76366dcc2bca16cb159c9c64400ecaaa /include | |
| parent | 680ba667c71fb3df952345527726be20a9b40c93 (diff) | |
macros.h 1/?: `PRINTF` and `T` (#2509)
* create printf and translation headers
* non-overlays complete
* printf finished
* move T macro
* edit comment
* fix error
* fix bss
* remove is_64
* fix bss
Diffstat (limited to 'include')
| -rw-r--r-- | include/macros.h | 52 | ||||
| -rw-r--r-- | include/printf.h | 51 | ||||
| -rw-r--r-- | include/translation.h | 16 |
3 files changed, 67 insertions, 52 deletions
diff --git a/include/macros.h b/include/macros.h index 813ceb6f2..0cb1b4285 100644 --- a/include/macros.h +++ b/include/macros.h @@ -1,7 +1,6 @@ #ifndef MACROS_H #define MACROS_H -#include "terminal.h" #include "versions.h" #define SCREEN_WIDTH 320 @@ -13,13 +12,6 @@ #define BAD_RETURN(type) void #endif -/** - * The T macro holds translations in English for original debug strings written in Japanese. - * The translated strings match the original debug strings, they are only direct translations. - * For example, any original name is left as is rather than being replaced with the name in the codebase. - */ -#define T(jp, en) jp - #define ARRAY_COUNT(arr) (s32)(sizeof(arr) / sizeof(arr[0])) #define ARRAY_COUNTU(arr) (u32)(sizeof(arr) / sizeof(arr[0])) #define ARRAY_COUNT_2D(arr) (s32)(sizeof(arr) / sizeof(arr[0][0])) @@ -45,50 +37,6 @@ #define CHECK_FLAG_ALL(flags, mask) (((flags) & (mask)) == (mask)) -// IDO doesn't support variadic macros, but it merely throws a warning for the -// number of arguments not matching the definition (warning 609) instead of -// throwing an error. We suppress this warning and rely on GCC to catch macro -// argument errors instead. -// Note some tools define __sgi but preprocess with a modern cpp implementation, -// ensure that these do not use the IDO workaround to avoid errors. -#define IDO_PRINTF_WORKAROUND (__sgi && !__GNUC__ && !M2CTX) - -#if DEBUG_FEATURES -#define PRINTF osSyncPrintf -#elif defined(EGCS) -#define PRINTF(format, args...) while (0) osSyncPrintf(format, ##args) -#elif IDO_PRINTF_WORKAROUND -#define PRINTF(args) (void)0 -#else -#define PRINTF(format, ...) (void)0 -#endif - -#if DEBUG_FEATURES -#define PRINTF_COLOR_BLACK() PRINTF(VT_FGCOL(BLACK)) -#define PRINTF_COLOR_RED() PRINTF(VT_FGCOL(RED)) -#define PRINTF_COLOR_GREEN() PRINTF(VT_FGCOL(GREEN)) -#define PRINTF_COLOR_YELLOW() PRINTF(VT_FGCOL(YELLOW)) -#define PRINTF_COLOR_BLUE() PRINTF(VT_FGCOL(BLUE)) -#define PRINTF_COLOR_MAGENTA() PRINTF(VT_FGCOL(MAGENTA)) -#define PRINTF_COLOR_CYAN() PRINTF(VT_FGCOL(CYAN)) -#define PRINTF_COLOR_WHITE() PRINTF(VT_FGCOL(WHITE)) -#define PRINTF_COLOR_WARNING() PRINTF(VT_COL(YELLOW, BLACK)) -#define PRINTF_COLOR_ERROR() PRINTF(VT_COL(RED, WHITE)) -#define PRINTF_RST() PRINTF(VT_RST) -#else -#define PRINTF_COLOR_BLACK() (void)0 -#define PRINTF_COLOR_RED() (void)0 -#define PRINTF_COLOR_GREEN() (void)0 -#define PRINTF_COLOR_YELLOW() (void)0 -#define PRINTF_COLOR_BLUE() (void)0 -#define PRINTF_COLOR_MAGENTA() (void)0 -#define PRINTF_COLOR_CYAN() (void)0 -#define PRINTF_COLOR_WHITE() (void)0 -#define PRINTF_COLOR_WARNING() (void)0 -#define PRINTF_COLOR_ERROR() (void)0 -#define PRINTF_RST() (void)0 -#endif - #if PLATFORM_N64 || DEBUG_FEATURES #define HUNGUP_AND_CRASH(file, line) Fault_AddHungupAndCrash(file, line) #else diff --git a/include/printf.h b/include/printf.h new file mode 100644 index 000000000..a2a31a39e --- /dev/null +++ b/include/printf.h @@ -0,0 +1,51 @@ +#ifndef PRINTF_H +#define PRINTF_H + +#include "terminal.h" +#include "ultra64.h" + +// IDO doesn't support variadic macros, but it merely throws a warning for the +// number of arguments not matching the definition (warning 609) instead of +// throwing an error. We suppress this warning and rely on GCC to catch macro +// argument errors instead. +// Note some tools define __sgi but preprocess with a modern cpp implementation, +// ensure that these do not use the IDO workaround to avoid errors. +#define IDO_PRINTF_WORKAROUND (__sgi && !__GNUC__ && !M2CTX) + +#if DEBUG_FEATURES +#define PRINTF osSyncPrintf +#elif defined(EGCS) +#define PRINTF(format, args...) while (0) osSyncPrintf(format, ##args) +#elif IDO_PRINTF_WORKAROUND +#define PRINTF(args) (void)0 +#else +#define PRINTF(format, ...) (void)0 +#endif + +#if DEBUG_FEATURES +#define PRINTF_COLOR_BLACK() PRINTF(VT_FGCOL(BLACK)) +#define PRINTF_COLOR_RED() PRINTF(VT_FGCOL(RED)) +#define PRINTF_COLOR_GREEN() PRINTF(VT_FGCOL(GREEN)) +#define PRINTF_COLOR_YELLOW() PRINTF(VT_FGCOL(YELLOW)) +#define PRINTF_COLOR_BLUE() PRINTF(VT_FGCOL(BLUE)) +#define PRINTF_COLOR_MAGENTA() PRINTF(VT_FGCOL(MAGENTA)) +#define PRINTF_COLOR_CYAN() PRINTF(VT_FGCOL(CYAN)) +#define PRINTF_COLOR_WHITE() PRINTF(VT_FGCOL(WHITE)) +#define PRINTF_COLOR_WARNING() PRINTF(VT_COL(YELLOW, BLACK)) +#define PRINTF_COLOR_ERROR() PRINTF(VT_COL(RED, WHITE)) +#define PRINTF_RST() PRINTF(VT_RST) +#else +#define PRINTF_COLOR_BLACK() (void)0 +#define PRINTF_COLOR_RED() (void)0 +#define PRINTF_COLOR_GREEN() (void)0 +#define PRINTF_COLOR_YELLOW() (void)0 +#define PRINTF_COLOR_BLUE() (void)0 +#define PRINTF_COLOR_MAGENTA() (void)0 +#define PRINTF_COLOR_CYAN() (void)0 +#define PRINTF_COLOR_WHITE() (void)0 +#define PRINTF_COLOR_WARNING() (void)0 +#define PRINTF_COLOR_ERROR() (void)0 +#define PRINTF_RST() (void)0 +#endif + +#endif diff --git a/include/translation.h b/include/translation.h new file mode 100644 index 000000000..658332670 --- /dev/null +++ b/include/translation.h @@ -0,0 +1,16 @@ +#ifndef TRANSLATION_H +#define TRANSLATION_H + +/** + * The "T" macro holds translations in English for original debug strings written in Japanese. + * The translated strings are only direct translations. Certain names or terms may not reflect + * their in-game localized counterparts. + * + * To use translated English strings in the build, change the definition below to "en". + * + * Note: This translation macro exists for quality of life purposes. + * The original game would not have had a macro like this. + */ +#define T(jp, en) jp + +#endif |
