ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
output.h File Reference

Go to the source code of this file.

Typedefs

typedef asciichat_error_t(* ui_output_write_fn) (int fd, const char *data, size_t length)

Functions

void ui_output_set_writer (ui_output_write_fn writer)
asciichat_error_t ui_output_write (int fd, const char *data, size_t length)
asciichat_error_t ui_output_printf (int fd, const char *format,...)

Typedef Documentation

◆ ui_output_write_fn

typedef asciichat_error_t(* ui_output_write_fn) (int fd, const char *data, size_t length)

Definition at line 4 of file output.h.

Function Documentation

◆ ui_output_printf()

asciichat_error_t ui_output_printf ( int fd,
const char * format,
... )

Definition at line 26 of file output.c.

26 {
27 if (!format)
28 return SET_ERRNO(ERROR_INVALID_PARAM, "UI output format is NULL");
30 va_list args;
31 va_start(args, format);
32 int n = vsnprintf(text, sizeof(text), format, args);
33 va_end(args);
34 if (n < 0 || (size_t)n >= sizeof(text))
35 return SET_ERRNO(ERROR_BUFFER_OVERFLOW, "UI formatted output exceeds capacity");
36 return ui_output_write(fd, text, (size_t)n);
37}
action_args_t args
Definition actions.c:78
#define SET_ERRNO(code,...)
@ ERROR_INVALID_PARAM
@ ERROR_BUFFER_OVERFLOW
#define UI_OUTPUT_TEXT_BUFFER_SIZE
Definition output.c:3
asciichat_error_t ui_output_write(int fd, const char *data, size_t length)
Definition output.c:16

References args, ERROR_BUFFER_OVERFLOW, ERROR_INVALID_PARAM, SET_ERRNO, UI_OUTPUT_TEXT_BUFFER_SIZE, and ui_output_write().

Referenced by fps_counter_render().

◆ ui_output_set_writer()

void ui_output_set_writer ( ui_output_write_fn writer)

The presenter installs a sink; standalone widgets use platform output.

Definition at line 13 of file output.c.

13 {
14 atomic_ptr_store(&g_writer, (void *)writer);
15}

◆ ui_output_write()

asciichat_error_t ui_output_write ( int fd,
const char * data,
size_t length )

Definition at line 16 of file output.c.

16 {
17 if (fd < 0 || (!data && length))
18 return SET_ERRNO(ERROR_INVALID_PARAM, "Invalid UI output descriptor or text");
19 ui_output_write_fn writer = (ui_output_write_fn)atomic_ptr_load(&g_writer);
20 if (writer)
21 return writer(fd, data, length);
22 return platform_write_all(fd, data, length) == length
24 : SET_ERRNO_SYS(ERROR_FILE_OPERATION, "Cannot write complete UI output");
25}
#define SET_ERRNO_SYS(code,...)
@ ASCIICHAT_OK
Definition error_codes.h:46
@ ERROR_FILE_OPERATION
size_t platform_write_all(int fd, const void *buf, size_t count)
Write all bytes to a file descriptor, handling partial writes.
asciichat_error_t(* ui_output_write_fn)(int fd, const char *data, size_t length)
Definition output.h:4

References ASCIICHAT_OK, ERROR_FILE_OPERATION, ERROR_INVALID_PARAM, platform_write_all(), SET_ERRNO, and SET_ERRNO_SYS.

Referenced by frame_buffer_flush(), and ui_output_printf().