ascii-chat 0.6.0
Real-time terminal-based video chat with ASCII art conversion
Loading...
Searching...
No Matches
lib/options/client.c
Go to the documentation of this file.
1
16#include "options/client.h"
17#include "options/builder.h"
18#include "options/common.h"
19
20#include "asciichat_errno.h"
21#include "audio/audio.h"
22#include "common.h"
23#include "crypto/crypto.h"
24#include "log/logging.h"
25#include "options/levenshtein.h"
26#include "options/options.h"
27#include "options/validation.h"
28#include "platform/system.h"
29#include "util/ip.h"
30#include "util/parsing.h"
31#include "util/password.h"
32#include "video/ascii.h"
33#include "video/webcam/webcam.h"
34
35#ifdef _WIN32
36#include "platform/windows/getopt.h"
37#else
38#include <getopt.h>
39#endif
40
41#include <limits.h>
42#include <stdio.h>
43#include <stdlib.h>
44#include <string.h>
45
46// ============================================================================
47// Client Option Parsing
48// ============================================================================
49
50asciichat_error_t parse_client_options(int argc, char **argv, options_t *opts) {
51 const options_config_t *config = options_preset_client("ascii-chat client", "connect to an ascii-chat server");
52 int remaining_argc;
53 char **remaining_argv;
54
55 // Apply defaults from preset before parsing command-line args
56 asciichat_error_t defaults_result = options_config_set_defaults(config, opts);
57 if (defaults_result != ASCIICHAT_OK) {
59 return defaults_result;
60 }
61
62 asciichat_error_t result = options_config_parse(config, argc, argv, opts, &remaining_argc, &remaining_argv);
63 if (result != ASCIICHAT_OK) {
65 return result;
66 }
67
68 // Check for unexpected remaining arguments
69 if (remaining_argc > 0) {
70 (void)fprintf(stderr, "Error: Unexpected arguments after options:\n");
71 for (int i = 0; i < remaining_argc; i++) {
72 (void)fprintf(stderr, " %s\n", remaining_argv[i]);
73 }
75 return option_error_invalid();
76 }
77
79 return ASCIICHAT_OK;
80}
81
82// ============================================================================
83// Client Usage Text
84// ============================================================================
85
86void usage_client(FILE *desc) {
87 // Get config with program name and description
88 const options_config_t *config = options_preset_client("ascii-chat client", "connect to an ascii-chat server");
89 if (!config) {
90 (void)fprintf(desc, "Error: Failed to create options config\n");
91 return;
92 }
93
94 // Print custom address format help first
95 (void)fprintf(desc, "%s - %s\n\n", config->program_name, config->description);
96 (void)fprintf(desc, "USAGE:\n");
97 (void)fprintf(desc, " %s [address][:port] [options...]\n\n", config->program_name);
98
99 // Print positional argument examples programmatically
100 if (config->num_positional_args > 0) {
101 const positional_arg_descriptor_t *pos_arg = &config->positional_args[0];
102 if (pos_arg->section_heading && pos_arg->examples && pos_arg->num_examples > 0) {
103 (void)fprintf(desc, "%s:\n", pos_arg->section_heading);
104 for (size_t i = 0; i < pos_arg->num_examples; i++) {
105 (void)fprintf(desc, " %s\n", pos_arg->examples[i]);
106 }
107 (void)fprintf(desc, "\n");
108 }
109 }
110
111 // Generate options from builder configuration
112 options_config_print_usage(config, desc);
113
114 // Clean up the config
116}
🖼️ ASCII Art Conversion and Output Interface
⚠️‼️ Error and/or exit() when things go bad.
void options_config_print_usage(const options_config_t *config, FILE *stream)
Print usage/help text.
Definition builder.c:1236
asciichat_error_t options_config_set_defaults(const options_config_t *config, void *options_struct)
Set default values in options struct.
Definition builder.c:716
asciichat_error_t options_config_parse(const options_config_t *config, int argc, char **argv, void *options_struct, int *remaining_argc, char ***remaining_argv)
Parse command-line arguments.
Definition builder.c:1101
void options_config_destroy(options_config_t *config)
Free options config.
Definition builder.c:329
Options builder API for flexible command-line option configuration.
const options_config_t * options_preset_client(const char *program_name, const char *description)
Get client mode options preset.
Definition presets.c:398
asciichat_error_t
Error and exit codes - unified status values (0-255)
Definition error_codes.h:46
@ ASCIICHAT_OK
Definition error_codes.h:48
void usage_client(FILE *desc)
Print client mode usage/help text.
🌍 IP Address Parsing and Formatting Utilities
Levenshtein distance algorithm for fuzzy string matching.
🔊 Audio Capture and Playback Interface for ascii-chat
asciichat_error_t parse_client_options(int argc, char **argv, options_t *opts)
Parse client-specific command-line options.
Client mode option parsing.
Application limits and constraints.
📝 Logging API with multiple log levels and terminal output control
Common utilities and helpers for option parsing.
Validation functions for options parsing.
⚙️ Command-line options parsing and configuration management for ascii-chat
🔍 Safe Parsing Utilities
Password prompting utilities with secure input and formatting.
Options configuration.
Definition builder.h:165
positional_arg_descriptor_t * positional_args
Array of positional argument descriptors.
Definition builder.h:172
const char * program_name
For usage header.
Definition builder.h:176
size_t num_positional_args
Number of positional arguments.
Definition builder.h:173
const char * description
For usage header.
Definition builder.h:177
Consolidated options structure.
Definition options.h:439
Positional argument descriptor.
Definition builder.h:136
const char * section_heading
Section heading for examples (e.g., "ADDRESS FORMATS")
Definition builder.h:142
const char ** examples
Array of example strings with descriptions.
Definition builder.h:143
size_t num_examples
Number of examples.
Definition builder.h:144
Cross-platform system functions interface for ascii-chat.
Common SIMD utilities and structures.