summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorfig02 <fig02srl@gmail.com>2025-04-23 19:31:49 -0400
committerGitHub <noreply@github.com>2025-04-23 19:31:49 -0400
commitde59ad3db71a7e1d0134fa8be0c047c4cb1efacd (patch)
tree687a4e8c76366dcc2bca16cb159c9c64400ecaaa /include
parent680ba667c71fb3df952345527726be20a9b40c93 (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.h52
-rw-r--r--include/printf.h51
-rw-r--r--include/translation.h16
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