51#ifndef _CRT_SECURE_NO_WARNINGS
52#define _CRT_SECURE_NO_WARNINGS
61#ifndef PLATFORM_ABSTRACTION_H
171char *
ascii_convert(
image_t *original,
const ssize_t width,
const ssize_t height,
const bool color,
172 const bool aspect_ratio,
const bool stretch,
const char *palette_chars,
173 const char luminance_palette[256]);
214 const bool stretch,
const char *palette_chars,
const char luminance_palette[256]);
427#define ASCII_LUMINANCE_LEVELS 256
440#define ASCII_SLEEP_NS 50000L
458#define ANSI_FG_PREFIX "\033[38;2;"
471#define ANSI_BG_PREFIX "\033[48;2;"
485#define ANSI_COLOR_SUFFIX "m"
505#define print(s) fwrite(s, 1, sizeof(s) / sizeof((s)[0]), stdout)
524#define console_clear(fd) (terminal_clear_screen(), terminal_cursor_home(fd))
535#define cursor_reset(fd) terminal_cursor_home(fd)
546#define ascii_clear_screen(fd) terminal_clear_screen()
557#define cursor_hide(fd) terminal_hide_cursor(fd, true)
568#define cursor_show(fd) terminal_hide_cursor(fd, false)
586static const struct timespec ASCII_SLEEP_START = {.tv_sec = 0, .tv_nsec = 500},
587 ASCII_SLEEP_STOP = {.tv_sec = 0, .tv_nsec = 0};
602#define ascii_zzz() nanosleep((struct timespec *)&ASCII_SLEEP_START, (struct timespec *)&ASCII_SLEEP_STOP)
🔌 Cross-platform abstraction layer umbrella header for ascii-chat
asciichat_error_t
Error and exit codes - unified status values (0-255)
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.
asciichat_error_t ascii_write_init(int fd, bool reset_terminal)
Initialize ASCII write subsystem.
void ascii_read_destroy(void)
Destroy ASCII read subsystem.
void ascii_write_destroy(int fd, bool reset_terminal)
Destroy ASCII write subsystem.
asciichat_error_t ascii_write(const char *frame)
Write ASCII frame to terminal.
char * ascii_pad_frame_width(const char *frame, size_t pad)
Add leading spaces (left-padding) to each line of a frame.
char * ascii_pad_frame_height(const char *frame, size_t pad_top)
Add blank lines (vertical padding) to center a frame vertically.
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.
asciichat_error_t ascii_read_init(unsigned short int webcam_index)
Initialize ASCII read subsystem (e.g., webcam)
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.
char ascii_palette[]
Default ASCII palette characters.
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, const char luminance_palette[256])
Convert image to ASCII art with terminal capability awareness.
Frame source structure for grid layout.
size_t frame_size
Frame data size in bytes (length of frame string)
const char * frame_data
Frame data pointer (ASCII frame string, not owned)
Complete terminal capabilities structure.
🖥️ Cross-platform terminal interface for ascii-chat
⏱️ High-precision timing utilities using sokol_time.h and uthash
Image Data Structures and Operations.
Common SIMD utilities and structures.