14#include <ascii-chat/options/options.h>
15#include <ascii-chat/options/strings.h>
16#include <ascii-chat/options/levenshtein.h>
17#include <ascii-chat/options/enums.h>
18#include <ascii-chat/platform/terminal.h>
19#include <ascii-chat/video/palette.h>
20#include <ascii-chat/common.h>
45 {MODE_SERVER,
"server",
"Multi-client video chat server"},
46 {MODE_CLIENT,
"client",
"Connect to ascii-chat server"},
47 {MODE_MIRROR,
"mirror",
"Local webcam preview (no networking)"},
48 {MODE_DISCOVERY_SERVICE,
"discovery-service",
"Session discovery server (ACDS)"},
49 {MODE_DISCOVERY_SERVICE,
"acds",
"Alias for discovery-service"},
50 {MODE_INVALID, NULL, NULL}
55 if (mode == MODE_DISCOVERY) {
59 for (
size_t i = 0; mode_registry[i].
name != NULL; i++) {
60 if (mode_registry[i].mode == mode) {
61 return mode_registry[i].
name;
72 for (
size_t i = 0; mode_registry[i].
name != NULL; i++) {
73 if (strcmp(mode_registry[i].name, str) == 0) {
74 return mode_registry[i].
mode;
86 static const char *names[32];
89 for (
size_t i = 0; mode_registry[i].
name != NULL && count < 32; i++) {
91 bool duplicate =
false;
92 for (
size_t j = 0; j < count; j++) {
93 if (strcmp(names[j], mode_registry[i].name) == 0) {
99 names[count++] = mode_registry[i].
name;
114 const char **names = NULL;
118 static const char *null_terminated[33];
119 for (
size_t i = 0; i < count && i < 32; i++) {
120 null_terminated[i] = names[i];
122 null_terminated[count] = NULL;
133 case TERM_COLOR_AUTO:
135 case TERM_COLOR_NONE:
141 case TERM_COLOR_TRUECOLOR:
154 case RENDER_MODE_FOREGROUND:
156 case RENDER_MODE_BACKGROUND:
158 case RENDER_MODE_HALF_BLOCK:
171 case PALETTE_STANDARD:
175 case PALETTE_DIGITAL:
177 case PALETTE_MINIMAL:
193 if (!option_name || !input) {
197 size_t value_count = 0;
200 if (!values || value_count == 0) {
205 static const char *null_terminated[64];
206 for (
size_t i = 0; i < value_count && i < 63; i++) {
207 null_terminated[i] = values[i];
209 null_terminated[value_count] = NULL;
const char ** options_get_enum_values(const char *option_name, size_t *value_count)
const char * levenshtein_find_similar(const char *unknown, const char *const *candidates)
const char * color_mode_to_string(terminal_color_mode_t mode)
asciichat_mode_t asciichat_string_to_mode(const char *str)
const char * render_mode_to_string(render_mode_t mode)
const char * asciichat_mode_to_string(asciichat_mode_t mode)
const char * asciichat_suggest_mode(const char *input)
bool asciichat_is_valid_mode_string(const char *str)
size_t asciichat_get_all_mode_strings(const char ***out_names)
const char * palette_type_to_string(palette_type_t type)
const char * asciichat_suggest_enum_value(const char *option_name, const char *input)
Mode descriptor for string conversion.