fx.term: convert to new assembly build system

This commit is contained in:
2026-05-03 16:49:23 +01:00
parent 0c53974ac9
commit 44fed67d43
11 changed files with 254 additions and 116 deletions
+9 -1
View File
@@ -14,7 +14,8 @@ set(fx_all_assemblies
fx.collections fx.collections
fx.compression fx.compression
fx.io fx.io
fx.serial) fx.serial
fx.term)
if (NOT DEFINED fx_assemblies) if (NOT DEFINED fx_assemblies)
set(fx_assemblies ${fx_all_assemblies}) set(fx_assemblies ${fx_all_assemblies})
@@ -75,4 +76,11 @@ if ("fx.serial" IN_LIST fx_assemblies)
DEPENDENCIES fx.runtime fx.collections) DEPENDENCIES fx.runtime fx.collections)
endif () endif ()
if ("fx.term" IN_LIST fx_assemblies)
add_fx_assembly(
NAME fx.term
NAMESPACES fx.term
DEPENDENCIES fx.runtime fx.collections)
endif ()
add_executable(dynamic-test test/dynamic-test.c) add_executable(dynamic-test test/dynamic-test.c)
+7
View File
@@ -0,0 +1,7 @@
#include <fx/macros.h>
#include <fx/reflection/assembly.h>
FX_ASSEMBLY_BEGIN()
FX_ASSEMBLY_NAME("fx.term");
FX_ASSEMBLY_VERSION(1, 0, 0, 0);
FX_ASSEMBLY_END()
+1 -3
View File
@@ -1,3 +1 @@
include(../cmake/Templates.cmake) export_fx_namespace_details(fx.term)
add_fx_module(NAME term DEPENDENCIES core ds)
+49 -23
View File
@@ -1,11 +1,13 @@
#include <fx/core/error.h> #include <fx/error.h>
#include <fx/core/stringstream.h> #include <fx/stringstream.h>
#include <fx/term/tty.h> #include <fx/term/tty.h>
#include <inttypes.h> #include <inttypes.h>
static void get_error_id( static void get_error_id(
const struct fx_error_vendor *vendor, const struct fx_error *error, const struct fx_error_vendor *vendor,
char *out, size_t max) const struct fx_error *error,
char *out,
size_t max)
{ {
const char *vendor_name = NULL; const char *vendor_name = NULL;
const char *error_name = NULL; const char *error_name = NULL;
@@ -38,7 +40,8 @@ static void get_error_id(
} }
static void print_template_parameter( static void print_template_parameter(
const struct fx_error_template_parameter *params, size_t nr_params, const struct fx_error_template_parameter *params,
size_t nr_params,
const char *param_name) const char *param_name)
{ {
const struct fx_error_template_parameter *param = NULL; const struct fx_error_template_parameter *param = NULL;
@@ -122,7 +125,8 @@ static void print_template_parameter(
} }
static void print_content( static void print_content(
const struct fx_error_template_parameter *params, size_t nr_params, const struct fx_error_template_parameter *params,
size_t nr_params,
const char *s) const char *s)
{ {
if (!s) { if (!s) {
@@ -214,13 +218,16 @@ static void print_content(
static void print_submsg(const struct fx_error *error) static void print_submsg(const struct fx_error *error)
{ {
const struct fx_error_definition *error_def = fx_error_get_definition(error); const struct fx_error_definition *error_def
= fx_error_get_definition(error);
const struct fx_error_submsg *submsg = fx_error_get_first_submsg(error); const struct fx_error_submsg *submsg = fx_error_get_first_submsg(error);
while (submsg) { while (submsg) {
enum fx_error_submsg_type type = fx_error_submsg_get_type(submsg); enum fx_error_submsg_type type
= fx_error_submsg_get_type(submsg);
const char *content = fx_error_submsg_get_content(submsg); const char *content = fx_error_submsg_get_content(submsg);
const struct fx_error_msg *msg = fx_error_submsg_get_msg(submsg); const struct fx_error_msg *msg
= fx_error_submsg_get_msg(submsg);
const struct fx_error_template_parameter *params const struct fx_error_template_parameter *params
= fx_error_submsg_get_template_parameters(submsg); = fx_error_submsg_get_template_parameters(submsg);
@@ -229,16 +236,21 @@ static void print_submsg(const struct fx_error *error)
switch (type) { switch (type) {
case FX_ERROR_SUBMSG_ERROR: case FX_ERROR_SUBMSG_ERROR:
fx_tty_printf( fx_tty_printf(
fx_stdtty_err, 0, "[bright_red,bold]>[reset] "); fx_stdtty_err,
0,
"[bright_red,bold]>[reset] ");
break; break;
case FX_ERROR_SUBMSG_WARNING: case FX_ERROR_SUBMSG_WARNING:
fx_tty_printf( fx_tty_printf(
fx_stdtty_err, 0, fx_stdtty_err,
0,
"[bright_yellow,bold]>[reset] "); "[bright_yellow,bold]>[reset] ");
break; break;
case FX_ERROR_SUBMSG_INFO: case FX_ERROR_SUBMSG_INFO:
fx_tty_printf( fx_tty_printf(
fx_stdtty_err, 0, "[bright_cyan,bold]>[reset] "); fx_stdtty_err,
0,
"[bright_cyan,bold]>[reset] ");
break; break;
default: default:
break; break;
@@ -246,11 +258,14 @@ static void print_submsg(const struct fx_error *error)
if (msg) { if (msg) {
print_content( print_content(
params, FX_ERROR_TEMPLATE_PARAMETER_MAX, params,
FX_ERROR_TEMPLATE_PARAMETER_MAX,
fx_error_msg_get_content(msg)); fx_error_msg_get_content(msg));
} else if (content) { } else if (content) {
print_content( print_content(
params, FX_ERROR_TEMPLATE_PARAMETER_MAX, content); params,
FX_ERROR_TEMPLATE_PARAMETER_MAX,
content);
} }
fx_tty_printf(fx_stdtty_err, 0, "\n"); fx_tty_printf(fx_stdtty_err, 0, "\n");
@@ -293,8 +308,11 @@ static void print_stack_trace(const struct fx_error *error)
file = get_short_filepath(file); file = get_short_filepath(file);
fx_tty_printf( fx_tty_printf(
fx_stdtty_err, 0, fx_stdtty_err,
" [dark_grey]at %s() (%s:%u)[reset]\n", func, file, 0,
" [dark_grey]at %s() (%s:%u)[reset]\n",
func,
file,
line); line);
frame = fx_error_get_next_stack_frame(error, frame); frame = fx_error_get_next_stack_frame(error, frame);
@@ -302,14 +320,17 @@ static void print_stack_trace(const struct fx_error *error)
} }
static void report_error( static void report_error(
const fx_error *error, fx_error_report_flags flags, bool caused_by) const fx_error *error,
fx_error_report_flags flags,
bool caused_by)
{ {
const fx_error_vendor *vendor = fx_error_get_vendor(error); const fx_error_vendor *vendor = fx_error_get_vendor(error);
char error_id[128]; char error_id[128];
get_error_id(vendor, error, error_id, sizeof error_id); get_error_id(vendor, error, error_id, sizeof error_id);
const struct fx_error_definition *error_def = fx_error_get_definition(error); const struct fx_error_definition *error_def
= fx_error_get_definition(error);
fx_error_status_code code = fx_error_get_status_code(error); fx_error_status_code code = fx_error_get_status_code(error);
const char *description = fx_error_get_description(error); const char *description = fx_error_get_description(error);
const struct fx_error_template_parameter *params const struct fx_error_template_parameter *params
@@ -317,12 +338,14 @@ static void report_error(
if (!description && vendor) { if (!description && vendor) {
description = fx_error_vendor_get_status_code_description( description = fx_error_vendor_get_status_code_description(
vendor, code); vendor,
code);
} }
if (caused_by) { if (caused_by) {
fx_tty_printf( fx_tty_printf(
fx_stdtty_err, 0, fx_stdtty_err,
0,
" [green]->[reset] caused by [bright_red,bold]ERROR "); " [green]->[reset] caused by [bright_red,bold]ERROR ");
} else { } else {
fx_tty_printf(fx_stdtty_err, 0, "[bright_red,bold]==> ERROR "); fx_tty_printf(fx_stdtty_err, 0, "[bright_red,bold]==> ERROR ");
@@ -339,12 +362,14 @@ static void report_error(
if (msg) { if (msg) {
fx_tty_printf(fx_stdtty_err, 0, ": "); fx_tty_printf(fx_stdtty_err, 0, ": ");
print_content( print_content(
params, FX_ERROR_TEMPLATE_PARAMETER_MAX, params,
FX_ERROR_TEMPLATE_PARAMETER_MAX,
fx_error_msg_get_content(msg)); fx_error_msg_get_content(msg));
} else if (description) { } else if (description) {
fx_tty_printf(fx_stdtty_err, 0, ": "); fx_tty_printf(fx_stdtty_err, 0, ": ");
print_content( print_content(
params, FX_ERROR_TEMPLATE_PARAMETER_MAX, params,
FX_ERROR_TEMPLATE_PARAMETER_MAX,
description); description);
} }
} }
@@ -366,7 +391,8 @@ static void report_error(
} }
void fx_enhanced_error_reporter( void fx_enhanced_error_reporter(
const struct fx_error *error, fx_error_report_flags flags) const struct fx_error *error,
fx_error_report_flags flags)
{ {
report_error(error, flags, false); report_error(error, flags, false);
} }
-10
View File
@@ -1,10 +0,0 @@
#ifndef FX_TERM_H_
#define FX_TERM_H_
#include <fx/core/status.h>
#include <stdio.h>
#include <fx/term/tty.h>
#include <fx/term/print.h>
#endif
+7 -4
View File
@@ -1,8 +1,8 @@
#ifndef FX_TERM_PRINT_H_ #ifndef FX_TERM_PRINT_H_
#define FX_TERM_PRINT_H_ #define FX_TERM_PRINT_H_
#include <fx/core/misc.h> #include <fx/misc.h>
#include <fx/core/status.h> #include <fx/status.h>
#include <fx/term/tty.h> #include <fx/term/tty.h>
#include <stdarg.h> #include <stdarg.h>
@@ -40,13 +40,16 @@ typedef enum fx_print_format {
FX_API fx_status fx_print(fx_print_format format, const char *str, ...); FX_API fx_status fx_print(fx_print_format format, const char *str, ...);
FX_API fx_status fx_print_paragraph( FX_API fx_status fx_print_paragraph(
const char *str, struct fx_tty *tty, fx_paragraph_format *format); const char *str,
struct fx_tty *tty,
fx_paragraph_format *format);
FX_API int fx_putc(char c); FX_API int fx_putc(char c);
FX_API int fx_puts(const char *s); FX_API int fx_puts(const char *s);
FX_API int fx_printf(const char *format, ...); FX_API int fx_printf(const char *format, ...);
FX_API void fx_enhanced_error_reporter( FX_API void fx_enhanced_error_reporter(
const struct fx_error *, enum fx_error_report_flags flags); const struct fx_error *,
enum fx_error_report_flags flags);
#endif #endif
+39 -22
View File
@@ -1,38 +1,35 @@
#ifndef FX_TERM_TTY_H_ #ifndef FX_TERM_TTY_H_
#define FX_TERM_TTY_H_ #define FX_TERM_TTY_H_
#include <fx/core/misc.h> #include <fx/misc.h>
#include <fx/core/status.h> #include <fx/status.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdbool.h> #include <stdbool.h>
#include <stdint.h> #include <stdint.h>
#define fx_stdtty (z__fx_tty_get_std()) #define fx_stdtty (z__fx_tty_get_std())
#define fx_stdtty_err (z__fx_tty_get_err()) #define fx_stdtty_err (z__fx_tty_get_err())
#define FX_TTY_CTRL_KEY(c) ((c) | FX_MOD_CTRL) #define FX_TTY_CTRL_KEY(c) ((c) | FX_MOD_CTRL)
#define FX_MAKE_VMODE(fg, bg, a) \ #define FX_MAKE_VMODE(fg, bg, a) {.v_fg = fg, .v_bg = bg, .v_attrib = (a)}
{ \
.v_fg = fg, .v_bg = bg, .v_attrib = (a) \
}
#define FX_MAKE_COLOUR_DEFAULT(v) \ #define FX_MAKE_COLOUR_DEFAULT(v) \
{ \ { \
.c_mode = TTY_COLOUR_NONE, \ .c_mode = TTY_COLOUR_NONE, \
} }
#define FX_MAKE_COLOUR_16(v) \ #define FX_MAKE_COLOUR_16(v) \
{ \ { \
.c_mode = TTY_COLOUR_16, .c_16 = {.value = (v) } \ .c_mode = TTY_COLOUR_16, .c_16 = {.value = (v) } \
} }
#define FX_MAKE_COLOUR_256(v) \ #define FX_MAKE_COLOUR_256(v) \
{ \ { \
.c_mode = TTY_COLOUR_256, .c_256 = {.value = (v) } \ .c_mode = TTY_COLOUR_256, .c_256 = {.value = (v) } \
} }
#define FX_MAKE_COLOUR_TRUE(cr, cg, cb) \ #define FX_MAKE_COLOUR_TRUE(cr, cg, cb) \
{ \ { \
.c_mode = TTY_COLOUR_TRUE, .c_true \ .c_mode = TTY_COLOUR_TRUE, .c_true \
= {.r = (cr), \ = {.r = (cr), \
@@ -152,29 +149,49 @@ static inline unsigned int fx_keycode_get_key(fx_keycode v)
FX_API bool fx_tty_is_interactive(const struct fx_tty *tty); FX_API bool fx_tty_is_interactive(const struct fx_tty *tty);
FX_API void fx_tty_set_mode(struct fx_tty *tty, enum fx_tty_mode mode); FX_API void fx_tty_set_mode(struct fx_tty *tty, enum fx_tty_mode mode);
FX_API void fx_tty_set_vmode(struct fx_tty *tty, const struct fx_tty_vmode *vmode); FX_API void fx_tty_set_vmode(
struct fx_tty *tty,
const struct fx_tty_vmode *vmode);
FX_API void fx_tty_reset_vmode(struct fx_tty *tty); FX_API void fx_tty_reset_vmode(struct fx_tty *tty);
FX_API enum fx_status fx_tty_get_dimensions( FX_API enum fx_status fx_tty_get_dimensions(
struct fx_tty *tty, unsigned int *w, unsigned int *h); struct fx_tty *tty,
unsigned int *w,
unsigned int *h);
FX_API enum fx_status fx_tty_get_cursor_position( FX_API enum fx_status fx_tty_get_cursor_position(
struct fx_tty *tty, unsigned int *x, unsigned int *y); struct fx_tty *tty,
unsigned int *x,
unsigned int *y);
FX_API fx_keycode fx_tty_read_key(struct fx_tty *tty); FX_API fx_keycode fx_tty_read_key(struct fx_tty *tty);
FX_API void fx_tty_move_cursor_x( FX_API void fx_tty_move_cursor_x(
struct fx_tty *tty, enum fx_tty_position_base base, int pos); struct fx_tty *tty,
enum fx_tty_position_base base,
int pos);
FX_API void fx_tty_move_cursor_y( FX_API void fx_tty_move_cursor_y(
struct fx_tty *tty, enum fx_tty_position_base base, int pos); struct fx_tty *tty,
enum fx_tty_position_base base,
int pos);
FX_API void fx_tty_clear(struct fx_tty *tty, enum fx_tty_clear_mode mode); FX_API void fx_tty_clear(struct fx_tty *tty, enum fx_tty_clear_mode mode);
FX_API int fx_tty_putc(struct fx_tty *tty, enum fx_tty_print_flags flags, char c); FX_API int fx_tty_putc(
struct fx_tty *tty,
enum fx_tty_print_flags flags,
char c);
FX_API int fx_tty_puts( FX_API int fx_tty_puts(
struct fx_tty *tty, enum fx_tty_print_flags flags, const char *s); struct fx_tty *tty,
enum fx_tty_print_flags flags,
const char *s);
FX_API int fx_tty_printf( FX_API int fx_tty_printf(
struct fx_tty *tty, enum fx_tty_print_flags flags, const char *s, ...); struct fx_tty *tty,
enum fx_tty_print_flags flags,
const char *s,
...);
FX_API int fx_tty_vprintf( FX_API int fx_tty_vprintf(
struct fx_tty *tty, enum fx_tty_print_flags flags, const char *s, struct fx_tty *tty,
enum fx_tty_print_flags flags,
const char *s,
va_list args); va_list args);
#endif #endif
+19 -8
View File
@@ -1,6 +1,6 @@
#include <fx/ds/string.h>
#include <fx/term/print.h>
#include <ctype.h> #include <ctype.h>
#include <fx/string.h>
#include <fx/term/print.h>
#include <stdbool.h> #include <stdbool.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@@ -9,7 +9,9 @@
#define DEFAULT_PARAGRAPH_WIDTH 160 #define DEFAULT_PARAGRAPH_WIDTH 160
static void indent( static void indent(
struct fx_paragraph_format *format, struct fx_tty *tty, unsigned int margin) struct fx_paragraph_format *format,
struct fx_tty *tty,
unsigned int margin)
{ {
unsigned int x = 0; unsigned int x = 0;
while (x < margin) { while (x < margin) {
@@ -19,7 +21,9 @@ static void indent(
} }
static unsigned int extract_line( static unsigned int extract_line(
const char **sp, unsigned int line_length, fx_string *out, const char **sp,
unsigned int line_length,
fx_string *out,
struct fx_paragraph_format *format) struct fx_paragraph_format *format)
{ {
const char *start = *sp; const char *start = *sp;
@@ -95,7 +99,9 @@ static unsigned int extract_line(
} }
static fx_status print_paragraph_tty( static fx_status print_paragraph_tty(
const char *str, struct fx_tty *tty, struct fx_paragraph_format *format) const char *str,
struct fx_tty *tty,
struct fx_paragraph_format *format)
{ {
unsigned int w = 0, h = 0; unsigned int w = 0, h = 0;
fx_tty_get_dimensions(tty, &w, &h); fx_tty_get_dimensions(tty, &w, &h);
@@ -134,7 +140,8 @@ static fx_status print_paragraph_tty(
need_indent = true; need_indent = true;
while (*str == '\n') { while (*str == '\n') {
if (format->p_flags & FX_PARAGRAPH_MULTI_LINE_BREAK) { if (format->p_flags
& FX_PARAGRAPH_MULTI_LINE_BREAK) {
fx_tty_putc(tty, 0, '\n'); fx_tty_putc(tty, 0, '\n');
} }
@@ -164,13 +171,17 @@ static fx_status print_paragraph_tty(
} }
static fx_status print_paragraph_file( static fx_status print_paragraph_file(
const char *str, FILE *fp, struct fx_paragraph_format *format) const char *str,
FILE *fp,
struct fx_paragraph_format *format)
{ {
return FX_SUCCESS; return FX_SUCCESS;
} }
fx_status fx_print_paragraph( fx_status fx_print_paragraph(
const char *str, struct fx_tty *fp, struct fx_paragraph_format *format) const char *str,
struct fx_tty *fp,
struct fx_paragraph_format *format)
{ {
return print_paragraph_tty(str, fp, format); return print_paragraph_tty(str, fp, format);
} }
+9 -6
View File
@@ -1,8 +1,8 @@
#include "print.h" #include "print.h"
#include <fx/core/hash.h>
#include <fx/term/print.h>
#include <ctype.h> #include <ctype.h>
#include <fx/hash.h>
#include <fx/term/print.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdbool.h> #include <stdbool.h>
#include <stdio.h> #include <stdio.h>
@@ -131,17 +131,20 @@ int fx_putc(char c)
return fx_tty_putc(fx_stdtty, 0, c); return fx_tty_putc(fx_stdtty, 0, c);
} }
int fx_puts(const char* s) int fx_puts(const char *s)
{ {
return fx_tty_puts(fx_stdtty, 0, s); return fx_tty_puts(fx_stdtty, 0, s);
} }
int fx_printf(const char* format, ...) int fx_printf(const char *format, ...)
{ {
va_list arg; va_list arg;
va_start(arg, format); va_start(arg, format);
int x = fx_tty_vprintf( int x = fx_tty_vprintf(
fx_stdtty, FX_TTY_DISABLE_INTERPOLATED_FORMATTING, format, arg); fx_stdtty,
FX_TTY_DISABLE_INTERPOLATED_FORMATTING,
format,
arg);
va_end(arg); va_end(arg);
return x; return x;
} }
+13 -11
View File
@@ -1,8 +1,7 @@
#ifndef _FX_PRINT_H_ #ifndef _FX_PRINT_H_
#define _FX_PRINT_H_ #define _FX_PRINT_H_
#include <fx/core/misc.h> #include <fx/misc.h>
#include <fx/term.h>
#include <stdio.h> #include <stdio.h>
enum z__fx_stream_modifier { enum z__fx_stream_modifier {
@@ -26,28 +25,31 @@ enum z__fx_stream_modifier {
Z__FX_STREAM_MOD_RESET = 0x4000, Z__FX_STREAM_MOD_RESET = 0x4000,
}; };
#define Z__FX_STREAM_MOD_GET_FG_COLOUR(x) \ #define Z__FX_STREAM_MOD_GET_FG_COLOUR(x) \
((x) \ ((x) \
& (Z__FX_STREAM_MOD_BLACK | Z__FX_STREAM_MOD_RED \ & (Z__FX_STREAM_MOD_BLACK | Z__FX_STREAM_MOD_RED \
| Z__FX_STREAM_MOD_GREEN | Z__FX_STREAM_MOD_FX)) | Z__FX_STREAM_MOD_GREEN | Z__FX_STREAM_MOD_FX))
#define Z__FX_STREAM_MOD_CLEAR_FG_COLOUR(x) \ #define Z__FX_STREAM_MOD_CLEAR_FG_COLOUR(x) \
((x) \ ((x) \
& ~(Z__FX_STREAM_MOD_BLACK | Z__FX_STREAM_MOD_RED \ & ~(Z__FX_STREAM_MOD_BLACK | Z__FX_STREAM_MOD_RED \
| Z__FX_STREAM_MOD_GREEN | Z__FX_STREAM_MOD_FX)) | Z__FX_STREAM_MOD_GREEN | Z__FX_STREAM_MOD_FX))
#define Z__FX_STREAM_MOD_GET_BG_COLOUR(x) \ #define Z__FX_STREAM_MOD_GET_BG_COLOUR(x) \
((x) \ ((x) \
& (Z__FX_STREAM_MOD_BG_BLACK | Z__FX_STREAM_MOD_BG_RED \ & (Z__FX_STREAM_MOD_BG_BLACK | Z__FX_STREAM_MOD_BG_RED \
| Z__FX_STREAM_MOD_BG_GREEN | Z__FX_STREAM_MOD_BG_FX)) | Z__FX_STREAM_MOD_BG_GREEN | Z__FX_STREAM_MOD_BG_FX))
#define Z__FX_STREAM_MOD_CLEAR_BG_COLOUR(x) \ #define Z__FX_STREAM_MOD_CLEAR_BG_COLOUR(x) \
((x) \ ((x) \
& ~(Z__FX_STREAM_MOD_BG_BLACK | Z__FX_STREAM_MOD_BG_RED \ & ~(Z__FX_STREAM_MOD_BG_BLACK | Z__FX_STREAM_MOD_BG_RED \
| Z__FX_STREAM_MOD_BG_GREEN | Z__FX_STREAM_MOD_BG_FX)) | Z__FX_STREAM_MOD_BG_GREEN | Z__FX_STREAM_MOD_BG_FX))
FX_API int z__fx_stream_is_tty(FILE *fp); FX_API int z__fx_stream_is_tty(FILE *fp);
FX_API int z__fx_stream_dimensions(FILE *fp, unsigned int *w, unsigned int *h); FX_API int z__fx_stream_dimensions(FILE *fp, unsigned int *w, unsigned int *h);
FX_API int z__fx_stream_cursorpos( FX_API int z__fx_stream_cursorpos(
FILE *in, FILE *out, unsigned int *x, unsigned int *y); FILE *in,
FILE *out,
unsigned int *x,
unsigned int *y);
FX_API int z__fx_stream_set_modifier(FILE *fp, unsigned int mod); FX_API int z__fx_stream_set_modifier(FILE *fp, unsigned int mod);
#endif #endif
+101 -28
View File
@@ -1,6 +1,6 @@
#include "tty.h" #include "tty.h"
#include <fx/core/hash.h> #include <fx/hash.h>
#include <fx/term/tty.h> #include <fx/term/tty.h>
#include <string.h> #include <string.h>
@@ -8,7 +8,7 @@
#define MOD_HASH_RED 0x89e9be1960f4c21c #define MOD_HASH_RED 0x89e9be1960f4c21c
#define MOD_HASH_GREEN 0x0f40f029637fecbc #define MOD_HASH_GREEN 0x0f40f029637fecbc
#define MOD_HASH_YELLOW 0x8346a574925e75a9 #define MOD_HASH_YELLOW 0x8346a574925e75a9
#define MOD_HASH_FX 0xc5ccd29bc2dda64d #define MOD_HASH_FX 0xc5ccd29bc2dda64d
#define MOD_HASH_MAGENTA 0x6c90e772edbc8708 #define MOD_HASH_MAGENTA 0x6c90e772edbc8708
#define MOD_HASH_CYAN 0x70ae2e90c1bce27a #define MOD_HASH_CYAN 0x70ae2e90c1bce27a
#define MOD_HASH_WHITE 0xced973885856e206 #define MOD_HASH_WHITE 0xced973885856e206
@@ -17,7 +17,7 @@
#define MOD_HASH_BRIGHT_RED 0xbad8e3fe841b9385 #define MOD_HASH_BRIGHT_RED 0xbad8e3fe841b9385
#define MOD_HASH_BRIGHT_GREEN 0x11cc5e579bdd2fb9 #define MOD_HASH_BRIGHT_GREEN 0x11cc5e579bdd2fb9
#define MOD_HASH_BRIGHT_YELLOW 0xfd579007fe8579f6 #define MOD_HASH_BRIGHT_YELLOW 0xfd579007fe8579f6
#define MOD_HASH_BRIGHT_FX 0x57c76bf18badb6d6 #define MOD_HASH_BRIGHT_FX 0x57c76bf18badb6d6
#define MOD_HASH_BRIGHT_MAGENTA 0xf6ecc6d3fdfec129 #define MOD_HASH_BRIGHT_MAGENTA 0xf6ecc6d3fdfec129
#define MOD_HASH_BRIGHT_CYAN 0x03df73fd4e12ec6d #define MOD_HASH_BRIGHT_CYAN 0x03df73fd4e12ec6d
#define MOD_HASH_BRIGHT_WHITE 0xb5ebc3323f57d7fb #define MOD_HASH_BRIGHT_WHITE 0xb5ebc3323f57d7fb
@@ -26,7 +26,7 @@
#define MOD_HASH_BG_RED 0x145b1e4366c7d7aa #define MOD_HASH_BG_RED 0x145b1e4366c7d7aa
#define MOD_HASH_BG_GREEN 0xa00b8541d3b1e55a #define MOD_HASH_BG_GREEN 0xa00b8541d3b1e55a
#define MOD_HASH_BG_YELLOW 0x98b030fd86e3b3cf #define MOD_HASH_BG_YELLOW 0x98b030fd86e3b3cf
#define MOD_HASH_BG_FX 0xa15529109506b5df #define MOD_HASH_BG_FX 0xa15529109506b5df
#define MOD_HASH_BG_MAGENTA 0x86dbda99bcc86222 #define MOD_HASH_BG_MAGENTA 0x86dbda99bcc86222
#define MOD_HASH_BG_CYAN 0xf16a3104cf61a098 #define MOD_HASH_BG_CYAN 0xf16a3104cf61a098
#define MOD_HASH_BG_WHITE 0x3408c46ab5836674 #define MOD_HASH_BG_WHITE 0x3408c46ab5836674
@@ -35,7 +35,7 @@
#define MOD_HASH_BRIGHT_BG_RED 0x144f5dc138087701 #define MOD_HASH_BRIGHT_BG_RED 0x144f5dc138087701
#define MOD_HASH_BRIGHT_BG_GREEN 0xc4d88c6426ffe355 #define MOD_HASH_BRIGHT_BG_GREEN 0xc4d88c6426ffe355
#define MOD_HASH_BRIGHT_BG_YELLOW 0xf7bb000a4a792602 #define MOD_HASH_BRIGHT_BG_YELLOW 0xf7bb000a4a792602
#define MOD_HASH_BRIGHT_BG_FX 0x9b5c16d6807a1002 #define MOD_HASH_BRIGHT_BG_FX 0x9b5c16d6807a1002
#define MOD_HASH_BRIGHT_BG_MAGENTA 0xc59fb2196cdba3fd #define MOD_HASH_BRIGHT_BG_MAGENTA 0xc59fb2196cdba3fd
#define MOD_HASH_BRIGHT_BG_CYAN 0x46feb6dc999a6f09 #define MOD_HASH_BRIGHT_BG_CYAN 0x46feb6dc999a6f09
#define MOD_HASH_BRIGHT_BG_WHITE 0xa3e7d1da08826f5f #define MOD_HASH_BRIGHT_BG_WHITE 0xa3e7d1da08826f5f
@@ -93,53 +93,83 @@ static void apply_code_to_vmode(struct tty_format_buf *fmt)
fmt->vmode.v_fg.c_16.value = FX_TTY_COLOUR16_WHITE; fmt->vmode.v_fg.c_16.value = FX_TTY_COLOUR16_WHITE;
} }
if (COMPARE_MOD_NAME(modifier, "dark_grey", mod_hash, MOD_HASH_DARK_GREY)) { if (COMPARE_MOD_NAME(
modifier,
"dark_grey",
mod_hash,
MOD_HASH_DARK_GREY)) {
fmt->vmode.v_fg.c_mode = FX_TTY_COLOUR_16; fmt->vmode.v_fg.c_mode = FX_TTY_COLOUR_16;
fmt->vmode.v_fg.c_16.value = FX_TTY_COLOUR16_BRIGHT_BLACK; fmt->vmode.v_fg.c_16.value = FX_TTY_COLOUR16_BRIGHT_BLACK;
} }
if (COMPARE_MOD_NAME(modifier, "bright_red", mod_hash, MOD_HASH_BRIGHT_RED)) { if (COMPARE_MOD_NAME(
modifier,
"bright_red",
mod_hash,
MOD_HASH_BRIGHT_RED)) {
fmt->vmode.v_fg.c_mode = FX_TTY_COLOUR_16; fmt->vmode.v_fg.c_mode = FX_TTY_COLOUR_16;
fmt->vmode.v_fg.c_16.value = FX_TTY_COLOUR16_BRIGHT_RED; fmt->vmode.v_fg.c_16.value = FX_TTY_COLOUR16_BRIGHT_RED;
} }
if (COMPARE_MOD_NAME( if (COMPARE_MOD_NAME(
modifier, "bright_green", mod_hash, MOD_HASH_BRIGHT_GREEN)) { modifier,
"bright_green",
mod_hash,
MOD_HASH_BRIGHT_GREEN)) {
fmt->vmode.v_fg.c_mode = FX_TTY_COLOUR_16; fmt->vmode.v_fg.c_mode = FX_TTY_COLOUR_16;
fmt->vmode.v_fg.c_16.value = FX_TTY_COLOUR16_BRIGHT_GREEN; fmt->vmode.v_fg.c_16.value = FX_TTY_COLOUR16_BRIGHT_GREEN;
} }
if (COMPARE_MOD_NAME( if (COMPARE_MOD_NAME(
modifier, "bright_yellow", mod_hash, MOD_HASH_BRIGHT_YELLOW)) { modifier,
"bright_yellow",
mod_hash,
MOD_HASH_BRIGHT_YELLOW)) {
fmt->vmode.v_fg.c_mode = FX_TTY_COLOUR_16; fmt->vmode.v_fg.c_mode = FX_TTY_COLOUR_16;
fmt->vmode.v_fg.c_16.value = FX_TTY_COLOUR16_BRIGHT_YELLOW; fmt->vmode.v_fg.c_16.value = FX_TTY_COLOUR16_BRIGHT_YELLOW;
} }
if (COMPARE_MOD_NAME( if (COMPARE_MOD_NAME(
modifier, "bright_blue", mod_hash, MOD_HASH_BRIGHT_FX)) { modifier,
"bright_blue",
mod_hash,
MOD_HASH_BRIGHT_FX)) {
fmt->vmode.v_fg.c_mode = FX_TTY_COLOUR_16; fmt->vmode.v_fg.c_mode = FX_TTY_COLOUR_16;
fmt->vmode.v_fg.c_16.value = FX_TTY_COLOUR16_BRIGHT_FX; fmt->vmode.v_fg.c_16.value = FX_TTY_COLOUR16_BRIGHT_FX;
} }
if (COMPARE_MOD_NAME( if (COMPARE_MOD_NAME(
modifier, "bright_magenta", mod_hash, MOD_HASH_BRIGHT_MAGENTA)) { modifier,
"bright_magenta",
mod_hash,
MOD_HASH_BRIGHT_MAGENTA)) {
fmt->vmode.v_fg.c_mode = FX_TTY_COLOUR_16; fmt->vmode.v_fg.c_mode = FX_TTY_COLOUR_16;
fmt->vmode.v_fg.c_16.value = FX_TTY_COLOUR16_BRIGHT_MAGENTA; fmt->vmode.v_fg.c_16.value = FX_TTY_COLOUR16_BRIGHT_MAGENTA;
} }
if (COMPARE_MOD_NAME( if (COMPARE_MOD_NAME(
modifier, "bright_cyan", mod_hash, MOD_HASH_BRIGHT_CYAN)) { modifier,
"bright_cyan",
mod_hash,
MOD_HASH_BRIGHT_CYAN)) {
fmt->vmode.v_fg.c_mode = FX_TTY_COLOUR_16; fmt->vmode.v_fg.c_mode = FX_TTY_COLOUR_16;
fmt->vmode.v_fg.c_16.value = FX_TTY_COLOUR16_BRIGHT_CYAN; fmt->vmode.v_fg.c_16.value = FX_TTY_COLOUR16_BRIGHT_CYAN;
} }
if (COMPARE_MOD_NAME( if (COMPARE_MOD_NAME(
modifier, "bright_white", mod_hash, MOD_HASH_BRIGHT_WHITE)) { modifier,
"bright_white",
mod_hash,
MOD_HASH_BRIGHT_WHITE)) {
fmt->vmode.v_fg.c_mode = FX_TTY_COLOUR_16; fmt->vmode.v_fg.c_mode = FX_TTY_COLOUR_16;
fmt->vmode.v_fg.c_16.value = FX_TTY_COLOUR16_BRIGHT_WHITE; fmt->vmode.v_fg.c_16.value = FX_TTY_COLOUR16_BRIGHT_WHITE;
} }
if (COMPARE_MOD_NAME(modifier, "bg_black", mod_hash, MOD_HASH_BG_BLACK)) { if (COMPARE_MOD_NAME(
modifier,
"bg_black",
mod_hash,
MOD_HASH_BG_BLACK)) {
fmt->vmode.v_bg.c_mode = FX_TTY_COLOUR_16; fmt->vmode.v_bg.c_mode = FX_TTY_COLOUR_16;
fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_BLACK; fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_BLACK;
} }
@@ -149,12 +179,20 @@ static void apply_code_to_vmode(struct tty_format_buf *fmt)
fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_RED; fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_RED;
} }
if (COMPARE_MOD_NAME(modifier, "bg_green", mod_hash, MOD_HASH_BG_GREEN)) { if (COMPARE_MOD_NAME(
modifier,
"bg_green",
mod_hash,
MOD_HASH_BG_GREEN)) {
fmt->vmode.v_bg.c_mode = FX_TTY_COLOUR_16; fmt->vmode.v_bg.c_mode = FX_TTY_COLOUR_16;
fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_GREEN; fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_GREEN;
} }
if (COMPARE_MOD_NAME(modifier, "bg_yellow", mod_hash, MOD_HASH_BG_YELLOW)) { if (COMPARE_MOD_NAME(
modifier,
"bg_yellow",
mod_hash,
MOD_HASH_BG_YELLOW)) {
fmt->vmode.v_bg.c_mode = FX_TTY_COLOUR_16; fmt->vmode.v_bg.c_mode = FX_TTY_COLOUR_16;
fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_YELLOW; fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_YELLOW;
} }
@@ -164,7 +202,11 @@ static void apply_code_to_vmode(struct tty_format_buf *fmt)
fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_FX; fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_FX;
} }
if (COMPARE_MOD_NAME(modifier, "bg_magenta", mod_hash, MOD_HASH_BG_MAGENTA)) { if (COMPARE_MOD_NAME(
modifier,
"bg_magenta",
mod_hash,
MOD_HASH_BG_MAGENTA)) {
fmt->vmode.v_bg.c_mode = FX_TTY_COLOUR_16; fmt->vmode.v_bg.c_mode = FX_TTY_COLOUR_16;
fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_MAGENTA; fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_MAGENTA;
} }
@@ -174,58 +216,82 @@ static void apply_code_to_vmode(struct tty_format_buf *fmt)
fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_CYAN; fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_CYAN;
} }
if (COMPARE_MOD_NAME(modifier, "bg_white", mod_hash, MOD_HASH_BG_WHITE)) { if (COMPARE_MOD_NAME(
modifier,
"bg_white",
mod_hash,
MOD_HASH_BG_WHITE)) {
fmt->vmode.v_bg.c_mode = FX_TTY_COLOUR_16; fmt->vmode.v_bg.c_mode = FX_TTY_COLOUR_16;
fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_WHITE; fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_WHITE;
} }
if (COMPARE_MOD_NAME( if (COMPARE_MOD_NAME(
modifier, "bg_dark_grey", mod_hash, MOD_HASH_BG_DARK_GREY)) { modifier,
"bg_dark_grey",
mod_hash,
MOD_HASH_BG_DARK_GREY)) {
fmt->vmode.v_bg.c_mode = FX_TTY_COLOUR_16; fmt->vmode.v_bg.c_mode = FX_TTY_COLOUR_16;
fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_BRIGHT_BLACK; fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_BRIGHT_BLACK;
} }
if (COMPARE_MOD_NAME( if (COMPARE_MOD_NAME(
modifier, "bright_bg_red", mod_hash, MOD_HASH_BRIGHT_BG_RED)) { modifier,
"bright_bg_red",
mod_hash,
MOD_HASH_BRIGHT_BG_RED)) {
fmt->vmode.v_bg.c_mode = FX_TTY_COLOUR_16; fmt->vmode.v_bg.c_mode = FX_TTY_COLOUR_16;
fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_BRIGHT_RED; fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_BRIGHT_RED;
} }
if (COMPARE_MOD_NAME( if (COMPARE_MOD_NAME(
modifier, "bright_bg_green", mod_hash, modifier,
"bright_bg_green",
mod_hash,
MOD_HASH_BRIGHT_BG_GREEN)) { MOD_HASH_BRIGHT_BG_GREEN)) {
fmt->vmode.v_bg.c_mode = FX_TTY_COLOUR_16; fmt->vmode.v_bg.c_mode = FX_TTY_COLOUR_16;
fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_BRIGHT_GREEN; fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_BRIGHT_GREEN;
} }
if (COMPARE_MOD_NAME( if (COMPARE_MOD_NAME(
modifier, "bright_bg_yellow", mod_hash, modifier,
"bright_bg_yellow",
mod_hash,
MOD_HASH_BRIGHT_BG_YELLOW)) { MOD_HASH_BRIGHT_BG_YELLOW)) {
fmt->vmode.v_bg.c_mode = FX_TTY_COLOUR_16; fmt->vmode.v_bg.c_mode = FX_TTY_COLOUR_16;
fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_BRIGHT_YELLOW; fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_BRIGHT_YELLOW;
} }
if (COMPARE_MOD_NAME( if (COMPARE_MOD_NAME(
modifier, "bright_bg_blue", mod_hash, MOD_HASH_BRIGHT_BG_FX)) { modifier,
"bright_bg_blue",
mod_hash,
MOD_HASH_BRIGHT_BG_FX)) {
fmt->vmode.v_bg.c_mode = FX_TTY_COLOUR_16; fmt->vmode.v_bg.c_mode = FX_TTY_COLOUR_16;
fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_BRIGHT_FX; fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_BRIGHT_FX;
} }
if (COMPARE_MOD_NAME( if (COMPARE_MOD_NAME(
modifier, "bright_bg_magenta", mod_hash, modifier,
"bright_bg_magenta",
mod_hash,
MOD_HASH_BRIGHT_BG_MAGENTA)) { MOD_HASH_BRIGHT_BG_MAGENTA)) {
fmt->vmode.v_bg.c_mode = FX_TTY_COLOUR_16; fmt->vmode.v_bg.c_mode = FX_TTY_COLOUR_16;
fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_BRIGHT_MAGENTA; fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_BRIGHT_MAGENTA;
} }
if (COMPARE_MOD_NAME( if (COMPARE_MOD_NAME(
modifier, "bright_bg_cyan", mod_hash, MOD_HASH_BRIGHT_BG_CYAN)) { modifier,
"bright_bg_cyan",
mod_hash,
MOD_HASH_BRIGHT_BG_CYAN)) {
fmt->vmode.v_bg.c_mode = FX_TTY_COLOUR_16; fmt->vmode.v_bg.c_mode = FX_TTY_COLOUR_16;
fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_BRIGHT_CYAN; fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_BRIGHT_CYAN;
} }
if (COMPARE_MOD_NAME( if (COMPARE_MOD_NAME(
modifier, "bright_bg_white", mod_hash, modifier,
"bright_bg_white",
mod_hash,
MOD_HASH_BRIGHT_BG_WHITE)) { MOD_HASH_BRIGHT_BG_WHITE)) {
fmt->vmode.v_bg.c_mode = FX_TTY_COLOUR_16; fmt->vmode.v_bg.c_mode = FX_TTY_COLOUR_16;
fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_BRIGHT_WHITE; fmt->vmode.v_bg.c_16.value = FX_TTY_COLOUR16_BRIGHT_WHITE;
@@ -328,7 +394,10 @@ int fx_tty_putc(struct fx_tty *tty, enum fx_tty_print_flags flags, char c)
return c; return c;
} }
int fx_tty_puts(struct fx_tty *tty, enum fx_tty_print_flags flags, const char *s) int fx_tty_puts(
struct fx_tty *tty,
enum fx_tty_print_flags flags,
const char *s)
{ {
int r = 0; int r = 0;
@@ -340,7 +409,11 @@ int fx_tty_puts(struct fx_tty *tty, enum fx_tty_print_flags flags, const char *s
return r; return r;
} }
int fx_tty_printf(struct fx_tty *tty, enum fx_tty_print_flags flags, const char *s, ...) int fx_tty_printf(
struct fx_tty *tty,
enum fx_tty_print_flags flags,
const char *s,
...)
{ {
va_list arg; va_list arg;
va_start(arg, s); va_start(arg, s);