Client mode option parsing and help text.
Client-specific command-line argument parsing with support for:
- Server connection (positional address[:port])
- Webcam configuration
- Audio capture/playback
- Display settings
- Cryptographic authentication
- Network compression
- Reconnection behavior
Definition in file lib/options/client.c.
Parse client-specific command-line options.
Parses all client mode options including:
- Positional argument:
[address][:port] for server connection
- Client-specific flags (webcam, audio, display, network options)
- Shared options (palette, encryption, output options)
Parsing Logic:
- getopt_long() loop processes all flags
- After loop, parse positional argument for server address
- Validate port conflicts (positional vs –port flag)
- Set default values for unspecified options
Error Handling:
- Invalid options: Prints error with typo suggestions
- Missing required arguments: Prints usage hint
- Port conflicts: Errors if both positional port and –port specified
- Returns ERROR_INVALID_PARAM on any validation failure
- Parameters
-
| argc | Argument count from main() |
| argv | Argument vector from main() |
- Returns
- ASCIICHAT_OK on success, ERROR_INVALID_PARAM on parse error
- Note
- Modifies global opt_* variables (opt_address, opt_port, opt_width, etc.)
-
Prints error messages to stderr on failure
-
Prints help text and exits if –help flag present
Positional Argument Parsing: After getopt_long() completes, optind points to first non-option argument. Format: [address][:port]
- IPv4:
192.168.1.100, 192.168.1.100:8080
- IPv6:
[::1], [2001:db8::1]:8080
- Hostname:
localhost, example.com:27224
Port conflicts:
./ascii-chat client localhost:8080 --port 9090
./ascii-chat client localhost:8080
./ascii-chat client localhost --port 8080
Example usage:
int main(
int argc,
char **argv) {
return 1;
}
}
int main(int argc, char **argv)
asciichat_error_t
Error and exit codes - unified status values (0-255)
#define log_info(...)
Log an INFO message.
asciichat_error_t options_init(int argc, char **argv)
Initialize options by parsing command-line arguments.
@ MODE_CLIENT
Client mode - network client options.
ASCIICHAT_API char opt_address[OPTIONS_BUFF_SIZE]
ASCIICHAT_API unsigned short int opt_height
ASCIICHAT_API char opt_port[OPTIONS_BUFF_SIZE]
ASCIICHAT_API unsigned short int opt_width
ASCIICHAT_API unsigned short int opt_audio_enabled
ASCIICHAT_API unsigned short int opt_webcam_index
- See also
- parse_server_options()
-
parse_mirror_options()
-
options_init()
Definition at line 50 of file lib/options/client.c.
50 {
52 int remaining_argc;
53 char **remaining_argv;
54
55
59 return defaults_result;
60 }
61
65 return result;
66 }
67
68
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
80}
asciichat_error_t options_config_set_defaults(const options_config_t *config, void *options_struct)
Set default values in options struct.
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.
void options_config_destroy(options_config_t *config)
Free options config.
const options_config_t * options_preset_client(const char *program_name, const char *description)
Get client mode options preset.
References ASCIICHAT_OK, options_config_destroy(), options_config_parse(), options_config_set_defaults(), and options_preset_client().
Referenced by options_init().