ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
ascii.h
Go to the documentation of this file.
1#pragma once
3
50
51#ifdef _WIN32
52#ifndef _CRT_SECURE_NO_WARNINGS
53#define _CRT_SECURE_NO_WARNINGS
54#endif
55#endif
56
57#include <stdio.h>
58#include <time.h>
61
62// Include platform abstraction for write function mapping and deprecation suppression
63#ifndef PLATFORM_ABSTRACTION_H
64#endif
65
66/* ============================================================================
67 * Data Structures and Constants
68 * ============================================================================
69 */
70
84extern char ascii_palette[];
85
86// Include image.h for image_t type definition
88
89/* ============================================================================
90 * Subsystem Initialization Functions
91 * @{
92 */
93
116asciichat_error_t ascii_write_init(int fd, bool reset_terminal);
117
119
120/* ============================================================================
121 * Image-to-ASCII Conversion Functions
122 * @{
123 */
124
154char *ascii_convert(image_t *original, const ssize_t width, const ssize_t height, const bool color,
155 const bool aspect_ratio, const bool stretch, const char *palette_chars,
156 const char luminance_palette[ASCII_LUMINANCE_LEVELS]);
157
158/* ============================================================================
159 * Capability-Aware Conversion Functions
160 * @{
161 */
162
163// Capability-aware ASCII conversion using terminal detection
164#include <libplatform/terminal.h>
165
195char *ascii_convert_with_capabilities(image_t *original, const ssize_t width, const ssize_t height,
196 const terminal_capabilities_t *caps, const bool use_aspect_ratio,
197 const bool stretch, const char *palette_chars);
198
200char *ascii_convert_with_capabilities_fit(image_t *original, const ssize_t width, const ssize_t height,
201 const terminal_capabilities_t *caps, const bool use_aspect_ratio,
202 const bool stretch, const char *palette_chars, const bool contain);
203
205
207char *ascii_convert_with_capabilities_workspace(image_t *original, const ssize_t width, const ssize_t height,
208 const terminal_capabilities_t *caps, const bool use_aspect_ratio,
209 const bool stretch, const char *palette_chars, const bool contain,
210 image_t **workspace);
211
215char *ascii_convert_with_buffers(image_t *original, const ssize_t width, const ssize_t height,
216 const terminal_capabilities_t *caps, const bool use_aspect_ratio, const bool stretch,
217 const char *palette_chars, const bool contain, image_t **workspace, outbuf_t *output);
218
220char *ascii_convert_with_buffers_stabilized(image_t *original, const ssize_t width, const ssize_t height,
221 const terminal_capabilities_t *caps, const bool use_aspect_ratio,
222 const bool stretch, const char *palette_chars, const bool contain,
223 image_t **workspace, outbuf_t *output, ascii_stabilizer_t *stabilizer);
224
238char *image_print_with_capabilities(const image_t *image, const terminal_capabilities_t *caps, const char *palette);
239
241
242/* ============================================================================
243 * Frame Output Functions
244 * @{
245 */
246
263asciichat_error_t ascii_write(const char *frame);
264
266
267/* ============================================================================
268 * Subsystem Cleanup Functions
269 * @{
270 */
271
293void ascii_write_destroy(int fd, bool reset_terminal);
294
296
297/* ============================================================================
298 * Frame Layout and Padding Functions
299 * @{
300 */
301
319char *ascii_pad_frame_width(const char *frame, size_t pad);
320
338char *ascii_pad_frame_height(const char *frame, size_t pad_top);
339
352typedef struct {
353 const char *frame_data;
354 size_t frame_size;
356
358asciichat_error_t ascii_grid_layout(int source_count, int width, int height, int *grid_cols, int *grid_rows);
359
397char *ascii_create_grid(ascii_frame_source_t *sources, int source_count, int width, int height, size_t *out_size);
398
400
401/* ============================================================================
402 * Palette Utility Functions
403 * @{
404 */
405
420char *get_lum_palette(void);
421
423
424/* ============================================================================
425 * ASCII Conversion Constants
426 * ============================================================================
427 */
428
440#define ASCII_LUMINANCE_LEVELS 256
441
453#define ASCII_SLEEP_NS 50000L
454
455/* ============================================================================
456 * ANSI Escape Sequence Constants
457 * ============================================================================
458 */
459
471#define ANSI_FG_PREFIX "\033[38;2;"
472
484#define ANSI_BG_PREFIX "\033[48;2;"
485
498#define ANSI_COLOR_SUFFIX "m"
499
500/* ============================================================================
501 * Utility Macros
502 * ============================================================================
503 */
504
518#define print(s) fwrite(s, 1, sizeof(s) / sizeof((s)[0]), stdout)
519
520/* ============================================================================
521 * Terminal Operation Macros
522 * ============================================================================
523 *
524 * Convenience macros for terminal operations using platform abstraction
525 * layer functions. These macros simplify common terminal operations.
526 */
527
537#define console_clear(fd) (terminal_clear_screen(), terminal_cursor_home(fd))
538
548#define cursor_reset(fd) terminal_cursor_home(fd)
549
559#define ascii_clear_screen(fd) terminal_clear_screen()
560
561/* ============================================================================
562 * Frame Rate Limiting
563 * ============================================================================
564 */
565
578#define ascii_zzz() time_sleep_ns(ASCII_SLEEP_NS)
579
char * ascii_convert_with_capabilities_workspace(image_t *original, const ssize_t width, const ssize_t height, const terminal_capabilities_t *caps, const bool use_aspect_ratio, const bool stretch, const char *palette_chars, const bool contain, image_t **workspace)
Definition ascii.c:277
char * ascii_convert_with_buffers(image_t *original, const ssize_t width, const ssize_t height, const terminal_capabilities_t *caps, const bool use_aspect_ratio, const bool stretch, const char *palette_chars, const bool contain, image_t **workspace, outbuf_t *output)
Definition ascii.c:286
char * ascii_convert_with_capabilities_fit(image_t *original, const ssize_t width, const ssize_t height, const terminal_capabilities_t *caps, const bool use_aspect_ratio, const bool stretch, const char *palette_chars, const bool contain)
Definition ascii.c:269
asciichat_error_t ascii_grid_layout(int source_count, int width, int height, int *grid_cols, int *grid_rows)
Definition ascii.c:659
char * ascii_convert_with_buffers_stabilized(image_t *original, const ssize_t width, const ssize_t height, const terminal_capabilities_t *caps, const bool use_aspect_ratio, const bool stretch, const char *palette_chars, const bool contain, image_t **workspace, outbuf_t *output, ascii_stabilizer_t *stabilizer)
Definition ascii.c:293
unsigned int height
Definition fft.c:23
unsigned int width
Definition fft.c:23
asciichat_error_t
Error and exit codes - unified status values (0-255).
Definition error_codes.h:44
void aspect_ratio(const ssize_t img_w, const ssize_t img_h, const ssize_t width, const ssize_t height, const bool stretch, ssize_t *out_width, ssize_t *out_height)
Calculate aspect ratio with terminal character correction.
char * get_lum_palette(void)
Get luminance palette for character mapping.
char * ascii_convert_with_capabilities(image_t *original, const ssize_t width, const ssize_t height, const terminal_capabilities_t *caps, const bool use_aspect_ratio, const bool stretch, const char *palette_chars)
Convert image to ASCII art with terminal capability awareness.
Definition ascii.c:261
char * image_print_with_capabilities(const image_t *image, const terminal_capabilities_t *caps, const char *palette)
Convert image to ASCII art with terminal capabilities.
Definition ascii.c:918
asciichat_error_t ascii_write_init(int fd, bool reset_terminal)
Initialize ASCII write subsystem.
Definition ascii.c:128
char * ascii_convert(image_t *original, const ssize_t width, const ssize_t height, const bool color, const bool aspect_ratio, const bool stretch, const char *palette_chars, const char luminance_palette[ASCII_LUMINANCE_LEVELS])
Convert image to ASCII art.
void ascii_write_destroy(int fd, bool reset_terminal)
Destroy ASCII write subsystem.
Definition ascii.c:559
asciichat_error_t ascii_write(const char *frame)
Write ASCII frame to terminal.
Definition ascii.c:538
#define ASCII_LUMINANCE_LEVELS
Number of luminance levels supported (256).
Definition ascii.h:440
char * ascii_pad_frame_width(const char *frame, size_t pad)
Add leading spaces (left-padding) to each line of a frame.
Definition ascii.c:597
char * ascii_pad_frame_height(const char *frame, size_t pad_top)
Add blank lines (vertical padding) to center a frame vertically.
Definition ascii.c:865
char * ascii_create_grid(ascii_frame_source_t *sources, int source_count, int width, int height, size_t *out_size)
Create a grid layout from multiple ASCII frames.
Definition ascii.c:742
char ascii_palette[]
Non-owning source reference used when laying out an ASCII frame. frame_data points to the source text...
Frame source structure for grid layout.
Definition ascii.h:352
size_t frame_size
Frame data size in bytes (length of frame string).
Definition ascii.h:354
const char * frame_data
Frame data pointer (ASCII frame string, not owned).
Definition ascii.h:353
SIMD-friendly storage for one RGB pixel. r, g, and b hold the color channels and padding keeps the la...
Dynamic output buffer (auto-expanding).
⏱️ High-precision timing utilities using sokol_time.h and uthash
SIMD-optimized ASCII conversion interface.