ascii-chat 0.11.33
Video chat in your terminal
Loading...
Searching...
No Matches
ascii.h
Go to the documentation of this file.
1#pragma once
2
50#ifdef _WIN32
51#ifndef _CRT_SECURE_NO_WARNINGS
52#define _CRT_SECURE_NO_WARNINGS
53#endif
54#endif
55
56#include <stdio.h>
57#include <time.h>
60
61// Include platform abstraction for write function mapping and deprecation suppression
62#ifndef PLATFORM_ABSTRACTION_H
64#endif
65
66/* ============================================================================
67 * Data Structures and Constants
68 * ============================================================================
69 */
70
83extern char ascii_palette[];
84
85// Include image.h for image_t type definition
87
88/* ============================================================================
89 * Subsystem Initialization Functions
90 * @{
91 */
92
115asciichat_error_t ascii_write_init(int fd, bool reset_terminal);
116
119/* ============================================================================
120 * Image-to-ASCII Conversion Functions
121 * @{
122 */
123
153char *ascii_convert(image_t *original, const ssize_t width, const ssize_t height, const bool color,
154 const bool aspect_ratio, const bool stretch, const char *palette_chars,
155 const char luminance_palette[256]);
156
157/* ============================================================================
158 * Capability-Aware Conversion Functions
159 * @{
160 */
161
162// Capability-aware ASCII conversion using terminal detection
164
194char *ascii_convert_with_capabilities(image_t *original, const ssize_t width, const ssize_t height,
195 const terminal_capabilities_t *caps, const bool use_aspect_ratio,
196 const bool stretch, const char *palette_chars);
197
211char *image_print_with_capabilities(const image_t *image, const terminal_capabilities_t *caps, const char *palette);
212
215/* ============================================================================
216 * Frame Output Functions
217 * @{
218 */
219
237
240/* ============================================================================
241 * Subsystem Cleanup Functions
242 * @{
243 */
244
266void ascii_write_destroy(int fd, bool reset_terminal);
267
270/* ============================================================================
271 * Frame Layout and Padding Functions
272 * @{
273 */
274
292char *ascii_pad_frame_width(const char *frame, size_t pad);
293
311char *ascii_pad_frame_height(const char *frame, size_t pad_top);
312
325typedef struct {
326 const char *frame_data;
327 size_t frame_size;
329
367char *ascii_create_grid(ascii_frame_source_t *sources, int source_count, int width, int height, size_t *out_size);
368
371/* ============================================================================
372 * Palette Utility Functions
373 * @{
374 */
375
390char *get_lum_palette(void);
391
394/* ============================================================================
395 * ASCII Conversion Constants
396 * ============================================================================
397 */
398
410#define ASCII_LUMINANCE_LEVELS 256
411
423#define ASCII_SLEEP_NS 50000L
424
425/* ============================================================================
426 * ANSI Escape Sequence Constants
427 * ============================================================================
428 */
429
441#define ANSI_FG_PREFIX "\033[38;2;"
442
454#define ANSI_BG_PREFIX "\033[48;2;"
455
468#define ANSI_COLOR_SUFFIX "m"
469
470/* ============================================================================
471 * Utility Macros
472 * ============================================================================
473 */
474
488#define print(s) fwrite(s, 1, sizeof(s) / sizeof((s)[0]), stdout)
489
490/* ============================================================================
491 * Terminal Operation Macros
492 * ============================================================================
493 *
494 * Convenience macros for terminal operations using platform abstraction
495 * layer functions. These macros simplify common terminal operations.
496 */
497
507#define console_clear(fd) (terminal_clear_screen(), terminal_cursor_home(fd))
508
518#define cursor_reset(fd) terminal_cursor_home(fd)
519
529#define ascii_clear_screen(fd) terminal_clear_screen()
530
531/* ============================================================================
532 * Frame Rate Limiting
533 * ============================================================================
534 */
535
548#define ascii_zzz() time_sleep_ns(ASCII_SLEEP_NS)
549
Platform abstraction layer umbrella header providing unified cross-platform API.
asciichat_error_t
Error and exit codes - unified status values (0-255)
Definition error_codes.h:49
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:233
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:978
asciichat_error_t ascii_write_init(int fd, bool reset_terminal)
Initialize ASCII write subsystem.
Definition ascii.c:83
void ascii_write_destroy(int fd, bool reset_terminal)
Destroy ASCII write subsystem.
Definition ascii.c:442
asciichat_error_t ascii_write(const char *frame)
Write ASCII frame to terminal.
Definition ascii.c:420
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:480
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:925
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[256])
Convert image to ASCII art.
Definition ascii.c:111
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:625
char ascii_palette[]
Default ASCII palette characters.
int frame
Definition splash.c:99
Frame source structure for grid layout.
Definition ascii.h:325
size_t frame_size
Frame data size in bytes (length of frame string)
Definition ascii.h:327
const char * frame_data
Frame data pointer (ASCII frame string, not owned)
Definition ascii.h:326
Image structure.
Complete terminal capabilities structure.
Definition terminal.h:709
🖥️ Cross-platform terminal interface for ascii-chat
⏱️ High-precision timing utilities using sokol_time.h and uthash
SIMD-optimized ASCII conversion interface.