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.c
Go to the documentation of this file.
1
2/* Storage capacities in elements; text buffers include the terminating NUL. */
3#define UI_OUTPUT_TEXT_BUFFER_SIZE 4096
4
6#include <libplatform/compiler.h>
7#include <libplatform/system.h>
8#include <libplatform/terminal.h>
9#include <libplatform/atomic.h>
10#include <stdarg.h>
11#include <stdio.h>
12static atomic_ptr_t g_writer;
14 atomic_ptr_store(&g_writer, (void *)writer);
15}
16asciichat_error_t ui_output_write(int fd, const char *data, size_t length) {
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}
26asciichat_error_t ui_output_printf(int fd, const char *format, ...) {
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,...)
#define SET_ERRNO_SYS(code,...)
asciichat_error_t
Error and exit codes - unified status values (0-255).
Definition error_codes.h:44
@ ASCIICHAT_OK
Definition error_codes.h:46
@ ERROR_FILE_OPERATION
@ ERROR_INVALID_PARAM
@ ERROR_BUFFER_OVERFLOW
size_t platform_write_all(int fd, const void *buf, size_t count)
Write all bytes to a file descriptor, handling partial writes.
void ui_output_set_writer(ui_output_write_fn writer)
Definition output.c:13
#define UI_OUTPUT_TEXT_BUFFER_SIZE
Definition output.c:3
asciichat_error_t ui_output_printf(int fd, const char *format,...)
Definition output.c:26
asciichat_error_t ui_output_write(int fd, const char *data, size_t length)
Definition output.c:16
asciichat_error_t(* ui_output_write_fn)(int fd, const char *data, size_t length)
Definition output.h:4