ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
too_small.c
Go to the documentation of this file.
1
2/* Storage capacities in elements; text buffers include the terminating NUL. */
3#define TUI_TOO_SMALL_DIMENSIONS_BUFFER_SIZE 96
4#define TUI_TOO_SMALL_OUTPUT_BUFFER_SIZE 512
5
7#include <stdio.h>
8#include <string.h>
9
10bool ui_too_small(terminal_size_t actual, terminal_size_t minimum) {
11 return actual.cols > 0 && actual.rows > 0 && (actual.cols < minimum.cols || actual.rows < minimum.rows);
12}
13
14size_t ui_too_small_format(char *output, size_t capacity, terminal_size_t actual, terminal_size_t minimum) {
15 if (!output || !capacity || actual.cols <= 0 || actual.rows <= 0)
16 return 0;
18 snprintf(dimensions, sizeof(dimensions), "%dx%d / need %dx%d", actual.cols, actual.rows, minimum.cols, minimum.rows);
19 const char *lines[] = {"Terminal too small", dimensions, "Resize to continue"};
20 int count = actual.rows >= 5 ? 3 : 1;
21 int row = (actual.rows - count) / 2 + 1;
22 int written = snprintf(output, capacity, "\033[0m\033[2J\033[?25l");
23 size_t used = (size_t)written < capacity ? (size_t)written : capacity - 1;
24 for (int i = 0; i < count; ++i) {
25 int width = (int)strlen(lines[i]);
26 // Leave the last column unused to avoid the terminal's auto-wrap state.
27 int available = actual.cols > 1 ? actual.cols - 1 : 1;
28 if (width > available)
29 width = available;
30 int col = (actual.cols - width) / 2 + 1;
31 written = snprintf(output + used, capacity - used, "\033[%d;%dH%.*s", row + i, col, width, lines[i]);
32 if (written > 0)
33 used += (size_t)written < capacity - used ? (size_t)written : capacity - used - 1;
34 }
35 return used;
36}
37
38void ui_too_small_render(frame_buffer_t *buffer, terminal_size_t actual, terminal_size_t minimum) {
40 size_t length = ui_too_small_format(output, sizeof(output), actual, minimum);
41 frame_buffer_append(buffer, output, length);
42}
unsigned int width
Definition fft.c:23
void frame_buffer_append(frame_buffer_t *buf, const char *str, size_t len)
Append raw bytes to the buffer.
struct frame_buffer frame_buffer_t
Opaque frame buffer handle.
🔤 String Manipulation and Shell Escaping Utilities
#define TUI_TOO_SMALL_OUTPUT_BUFFER_SIZE
Definition too_small.c:4
size_t ui_too_small_format(char *output, size_t capacity, terminal_size_t actual, terminal_size_t minimum)
Definition too_small.c:14
#define TUI_TOO_SMALL_DIMENSIONS_BUFFER_SIZE
Definition too_small.c:3
void ui_too_small_render(frame_buffer_t *buffer, terminal_size_t actual, terminal_size_t minimum)
Definition too_small.c:38
bool ui_too_small(terminal_size_t actual, terminal_size_t minimum)
Definition too_small.c:10