ascii-chat 0.6.0
Real-time terminal-based video chat with ASCII art conversion
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>
58#include "simd/common.h"
59
60// Include platform abstraction for write function mapping and deprecation suppression
61#ifndef PLATFORM_ABSTRACTION_H
63#endif
64
65/* ============================================================================
66 * Data Structures and Constants
67 * ============================================================================
68 */
69
82extern char ascii_palette[];
83
84// Include image.h for image_t type definition
85#include "image.h"
86
87/* ============================================================================
88 * Subsystem Initialization Functions
89 * @{
90 */
91
109asciichat_error_t ascii_read_init(unsigned short int webcam_index);
110
133asciichat_error_t ascii_write_init(int fd, bool reset_terminal);
134
137/* ============================================================================
138 * Image-to-ASCII Conversion Functions
139 * @{
140 */
141
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]);
174
175/* ============================================================================
176 * Capability-Aware Conversion Functions
177 * @{
178 */
179
180// Capability-aware ASCII conversion using terminal detection
181#include "platform/terminal.h"
182
212char *ascii_convert_with_capabilities(image_t *original, const ssize_t width, const ssize_t height,
213 const terminal_capabilities_t *caps, const bool use_aspect_ratio,
214 const bool stretch, const char *palette_chars, const char luminance_palette[256]);
215
218/* ============================================================================
219 * Frame Output Functions
220 * @{
221 */
222
239asciichat_error_t ascii_write(const char *frame);
240
243/* ============================================================================
244 * Subsystem Cleanup Functions
245 * @{
246 */
247
260void ascii_read_destroy(void);
261
283void ascii_write_destroy(int fd, bool reset_terminal);
284
287/* ============================================================================
288 * Frame Layout and Padding Functions
289 * @{
290 */
291
309char *ascii_pad_frame_width(const char *frame, size_t pad);
310
328char *ascii_pad_frame_height(const char *frame, size_t pad_top);
329
342typedef struct {
343 const char *frame_data;
344 size_t frame_size;
346
384char *ascii_create_grid(ascii_frame_source_t *sources, int source_count, int width, int height, size_t *out_size);
385
388/* ============================================================================
389 * Palette Utility Functions
390 * @{
391 */
392
407char *get_lum_palette(void);
408
411/* ============================================================================
412 * ASCII Conversion Constants
413 * ============================================================================
414 */
415
427#define ASCII_LUMINANCE_LEVELS 256
428
440#define ASCII_SLEEP_NS 50000L
441
442/* ============================================================================
443 * ANSI Escape Sequence Constants
444 * ============================================================================
445 */
446
458#define ANSI_FG_PREFIX "\033[38;2;"
459
471#define ANSI_BG_PREFIX "\033[48;2;"
472
485#define ANSI_COLOR_SUFFIX "m"
486
487/* ============================================================================
488 * Utility Macros
489 * ============================================================================
490 */
491
505#define print(s) fwrite(s, 1, sizeof(s) / sizeof((s)[0]), stdout)
506
507/* ============================================================================
508 * Terminal Operation Macros
509 * ============================================================================
510 *
511 * Convenience macros for terminal operations using platform abstraction
512 * layer functions. These macros simplify common terminal operations.
513 */
514
524#define console_clear(fd) (terminal_clear_screen(), terminal_cursor_home(fd))
525
535#define cursor_reset(fd) terminal_cursor_home(fd)
536
546#define ascii_clear_screen(fd) terminal_clear_screen()
547
557#define cursor_hide(fd) terminal_hide_cursor(fd, true)
558
568#define cursor_show(fd) terminal_hide_cursor(fd, false)
569
570/* ============================================================================
571 * Frame Rate Limiting
572 * ============================================================================
573 */
574
586static const struct timespec ASCII_SLEEP_START = {.tv_sec = 0, .tv_nsec = 500},
587 ASCII_SLEEP_STOP = {.tv_sec = 0, .tv_nsec = 0};
588
602#define ascii_zzz() nanosleep((struct timespec *)&ASCII_SLEEP_START, (struct timespec *)&ASCII_SLEEP_STOP)
603
🔌 Cross-platform abstraction layer umbrella header for ascii-chat
asciichat_error_t
Error and exit codes - unified status values (0-255)
Definition error_codes.h:46
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.
Definition ascii.c:40
void ascii_read_destroy(void)
Destroy ASCII read subsystem.
Definition ascii.c:355
void ascii_write_destroy(int fd, bool reset_terminal)
Destroy ASCII write subsystem.
Definition ascii.c:334
asciichat_error_t ascii_write(const char *frame)
Write ASCII frame to terminal.
Definition ascii.c:312
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:375
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:738
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:67
asciichat_error_t ascii_read_init(unsigned short int webcam_index)
Initialize ASCII read subsystem (e.g., webcam)
Definition ascii.c:34
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:450
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.
Definition ascii.c:188
Frame source structure for grid layout.
Definition ascii.h:342
size_t frame_size
Frame data size in bytes (length of frame string)
Definition ascii.h:344
const char * frame_data
Frame data pointer (ASCII frame string, not owned)
Definition ascii.h:343
Image structure.
Complete terminal capabilities structure.
Definition terminal.h:485
🖥️ 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.