ascii-chat 0.11.33
Video chat in your terminal
Loading...
Searching...
No Matches
builder.h
Go to the documentation of this file.
1
148#pragma once
149
150#include <stdbool.h>
151#include <stddef.h>
152#include <stdio.h>
153#include "../common.h"
154#include "../options/options.h" // For option_mode_bitmask_t
155
169
184
192typedef struct {
193 // Enum values with descriptions (null-terminated arrays)
194 const char *
196 const char *
199
200 // Numeric range
201 struct {
202 int min;
203 int max;
204 int step;
205 } numeric_range;
206
207 // Examples (must be null-terminated)
208 const char **examples;
209
210 // Default value (informational, may be duplicated from descriptor)
211 const char *default_value;
212
213 // Input type for completions
215
216 // Flags
217 bool is_list;
218
219 // Validation pattern (optional)
220 const char *validation_pattern;
222
233
241typedef struct {
242 // Identification
243 const char *long_name;
245
246 // Type and storage
248 size_t offset;
249
250 // Documentation
251 const char *help_text;
252 const char *group;
253 const char *arg_placeholder;
256
257 // Default and validation
258 const void *default_value;
259 bool required;
260 const char *env_var_name;
261
262 // Validation - receives full options struct for cross-field validation
263 bool (*validate)(const void *options_struct, char **error_msg);
264
265 // Custom parsing (for OPTION_TYPE_CALLBACK)
266 bool (*parse_fn)(const char *arg, void *dest, char **error_msg);
267
268 // Action callback (for OPTION_TYPE_ACTION)
269 void (*action_fn)(void);
270
271 // Memory management
273
274 // Optional argument support (for OPTION_TYPE_CALLBACK)
276
277 // Mode applicability
279
280 // Completion metadata (NEW - for smart shell completions)
282
283 // Mode-aware default getter (for options with mode-specific defaults)
284 const void *(*mode_default_getter)(
285 asciichat_mode_t mode);
287
296typedef struct {
297 const char *mode;
298 const char *positional;
300 const char *description;
302
317
321typedef struct {
322 const char *name;
323 const char *description;
325
331typedef struct {
332 const char *option_name;
334 const char *depends_on;
335 const char *error_message;
337
357typedef struct {
358 const char *name;
359 const char *help_text;
360 bool required;
361
362 // Programmatic help examples
363 const char *section_heading;
364 const char **examples;
366
377 int (*parse_fn)(const char *arg, void *config, char **remaining, int num_remaining, char **error_msg);
378
379 // Mode applicability
382
394
433
479
480// ============================================================================
481// Builder Lifecycle
482// ============================================================================
483
490options_builder_t *options_builder_create(size_t struct_size);
491
501
508
519
529
530// ============================================================================
531// Adding Options
532// ============================================================================
533
547void options_builder_add_bool(options_builder_t *builder, const char *long_name, char short_name, size_t offset,
548 bool default_value, const char *help_text, const char *group, bool required,
549 const char *env_var_name);
550
565void options_builder_add_int(options_builder_t *builder, const char *long_name, char short_name, size_t offset,
566 int default_value, const char *help_text, const char *group, bool required,
567 const char *env_var_name, bool (*validate)(const void *options_struct, char **error_msg));
568
576void options_builder_add_int_with_metadata(options_builder_t *builder, const char *long_name, char short_name,
577 size_t offset, int default_value, const char *help_text, const char *group,
578 bool required, const char *env_var_name,
579 bool (*validate)(const void *options_struct, char **error_msg),
580 const option_metadata_t *metadata);
581
598void options_builder_add_string(options_builder_t *builder, const char *long_name, char short_name, size_t offset,
599 const char *default_value, const char *help_text, const char *group, bool required,
600 const char *env_var_name,
601 bool (*validate)(const void *options_struct, char **error_msg));
602
617void options_builder_add_double(options_builder_t *builder, const char *long_name, char short_name, size_t offset,
618 double default_value, const char *help_text, const char *group, bool required,
619 const char *env_var_name,
620 bool (*validate)(const void *options_struct, char **error_msg), bool optional_arg);
621
622void options_builder_add_double_with_metadata(options_builder_t *builder, const char *long_name, char short_name,
623 size_t offset, double default_value, const char *help_text,
624 const char *group, bool required, const char *env_var_name,
625 bool (*validate)(const void *options_struct, char **error_msg),
626 const option_metadata_t *metadata, bool optional_arg);
627
643void options_builder_add_callback(options_builder_t *builder, const char *long_name, char short_name, size_t offset,
644 const void *default_value, size_t value_size,
645 bool (*parse_fn)(const char *arg, void *dest, char **error_msg),
646 const char *help_text, const char *group, bool required, const char *env_var_name);
647
666void options_builder_add_callback_optional(options_builder_t *builder, const char *long_name, char short_name,
667 size_t offset, const void *default_value, size_t value_size,
668 bool (*parse_fn)(const char *arg, void *dest, char **error_msg),
669 const char *help_text, const char *group, bool required,
670 const char *env_var_name, bool optional_arg);
671
692void options_builder_add_callback_with_metadata(options_builder_t *builder, const char *long_name, char short_name,
693 size_t offset, const void *default_value, size_t value_size,
694 bool (*parse_fn)(const char *arg, void *dest, char **error_msg),
695 const char *help_text, const char *group, bool required,
696 const char *env_var_name, bool optional_arg,
697 const option_metadata_t *metadata);
698
712void options_builder_add_action(options_builder_t *builder, const char *long_name, char short_name,
713 void (*action_fn)(void), const char *help_text, const char *group);
714
725
735void options_builder_set_arg_placeholder(options_builder_t *builder, const char *arg_placeholder);
736
737// ============================================================================
738// Completion Metadata (NEW - Phase 2)
739// ============================================================================
740
767void options_builder_set_enum_values(options_builder_t *builder, const char *option_name, const char **values,
768 const char **descriptions);
769
787void options_builder_set_numeric_range(options_builder_t *builder, const char *option_name, int min, int max, int step);
788
804void options_builder_set_examples(options_builder_t *builder, const char *option_name, const char **examples);
805
822void options_builder_set_input_type(options_builder_t *builder, const char *option_name,
823 option_input_type_t input_type);
824
838void options_builder_mark_as_list(options_builder_t *builder, const char *option_name);
839
850void options_builder_set_default_value_display(options_builder_t *builder, const char *option_name,
851 const char *default_value);
852
860
861// ============================================================================
862// Managing Dependencies
863// ============================================================================
864
873void options_builder_add_dependency_requires(options_builder_t *builder, const char *option_name,
874 const char *depends_on, const char *error_message);
875
884void options_builder_add_dependency_conflicts(options_builder_t *builder, const char *option_name,
885 const char *conflicts_with, const char *error_message);
886
895void options_builder_add_dependency_implies(options_builder_t *builder, const char *option_name, const char *implies,
896 const char *error_message);
897
905
922void options_builder_mark_binary_only(options_builder_t *builder, const char *option_name);
923
924// ============================================================================
925// Positional Arguments
926// ============================================================================
927
968void options_builder_add_positional(options_builder_t *builder, const char *name, const char *help_text, bool required,
969 const char *section_heading, const char **examples, size_t num_examples,
970 option_mode_bitmask_t mode_bitmask,
971 int (*parse_fn)(const char *arg, void *config, char **remaining, int num_remaining,
972 char **error_msg));
973
990 char **remaining_argv, void *options_struct);
991
992// ============================================================================
993// Programmatic Help Generation
994// ============================================================================
995
1023void options_builder_add_usage(options_builder_t *builder, const char *mode, const char *positional, bool show_options,
1024 const char *description);
1025
1061void options_builder_add_example(options_builder_t *builder, uint32_t mode_bitmask, const char *args,
1062 const char *description, bool owns_args);
1063
1076void options_builder_add_example_utility(options_builder_t *builder, uint32_t mode_bitmask, const char *args,
1077 const char *description, bool is_utility_command);
1078
1096void options_builder_add_mode(options_builder_t *builder, const char *name, const char *description);
1097
1110void options_builder_add_custom_section(options_builder_t *builder, const char *heading, const char *content,
1111 option_mode_bitmask_t mode_bitmask);
1112
1113// ============================================================================
1114// Preset Configurations
1115// ============================================================================
1116
1127options_config_t *options_preset_unified(const char *program_name, const char *description);
1128
1129// ============================================================================
1130// Parsing and Validation
1131// ============================================================================
1132
1143asciichat_error_t options_config_set_defaults(const options_config_t *config, void *options_struct);
1144
1159asciichat_error_t options_config_parse(const options_config_t *config, int argc, char **argv, void *options_struct,
1160 option_mode_bitmask_t detected_mode, int *remaining_argc,
1161 char ***remaining_argv);
1162
1176asciichat_error_t options_config_validate(const options_config_t *config, const void *options_struct,
1177 char **error_message);
1178
1189
1198void options_config_print_usage(const options_config_t *config, FILE *stream);
1199
1209void options_config_print_usage_section(const options_config_t *config, FILE *stream);
1210
1223void options_config_print_options_sections_with_width(const options_config_t *config, FILE *stream, int max_col_width,
1224 asciichat_mode_t mode);
1225
1235void options_config_print_options_sections(const options_config_t *config, FILE *stream, asciichat_mode_t mode);
1236
1249void options_print_help_for_mode(const options_config_t *config, asciichat_mode_t mode, const char *program_name,
1250 const char *description, FILE *desc);
1251
1261void options_struct_destroy(const options_config_t *config, void *options_struct);
1262
1263// ============================================================================
1264// Option Formatting Utilities
1265// ============================================================================
1266
1280
1296int options_format_default_value(option_type_t type, const void *default_value, char *buf, size_t bufsize);
1297
1298// ============================================================================
1299// Typo Suggestions for Unknown Options
1300// ============================================================================
1301
1322const char *find_similar_option_with_mode(const char *unknown_opt, const options_config_t *config,
1323 option_mode_bitmask_t current_mode_bitmask);
void options_builder_add_double(options_builder_t *builder, const char *long_name, char short_name, size_t offset, double default_value, const char *help_text, const char *group, bool required, const char *env_var_name, bool(*validate)(const void *options_struct, char **error_msg), bool optional_arg)
Add double/float option.
void options_builder_add_dependency(options_builder_t *builder, const option_dependency_t *dependency)
Add full dependency (advanced)
Definition builder.c:1164
void options_config_print_usage_section(const options_config_t *config, FILE *stream)
Print only the USAGE section.
Definition help.c:860
void options_builder_set_numeric_range(options_builder_t *builder, const char *option_name, int min, int max, int step)
Set numeric range for an option.
Definition builder.c:1040
void options_builder_mark_binary_only(options_builder_t *builder, const char *option_name)
Mark an option as binary-level only (hide from mode-specific help)
Definition builder.c:1172
void options_print_help_for_mode(const options_config_t *config, asciichat_mode_t mode, const char *program_name, const char *description, FILE *desc)
Print help for a specific mode or binary level (unified function)
Definition help.c:1105
void options_builder_add_usage(options_builder_t *builder, const char *mode, const char *positional, bool show_options, const char *description)
Add usage line descriptor.
Definition builder.c:1242
asciichat_error_t options_config_parse(const options_config_t *config, int argc, char **argv, void *options_struct, option_mode_bitmask_t detected_mode, int *remaining_argc, char ***remaining_argv)
Parse command-line arguments.
Definition builder.c:1815
void options_builder_set_arg_placeholder(options_builder_t *builder, const char *arg_placeholder)
Set custom argument placeholder on the last added option descriptor.
Definition builder.c:992
int options_format_default_value(option_type_t type, const void *default_value, char *buf, size_t bufsize)
Format option default value to string.
void options_builder_add_callback_with_metadata(options_builder_t *builder, const char *long_name, char short_name, size_t offset, const void *default_value, size_t value_size, bool(*parse_fn)(const char *arg, void *dest, char **error_msg), const char *help_text, const char *group, bool required, const char *env_var_name, bool optional_arg, const option_metadata_t *metadata)
Add callback option with full metadata (for enums, ranges, examples, etc.)
void options_builder_add_example(options_builder_t *builder, uint32_t mode_bitmask, const char *args, const char *description, bool owns_args)
Add example descriptor.
Definition builder.c:1255
void options_builder_add_action(options_builder_t *builder, const char *long_name, char short_name, void(*action_fn)(void), const char *help_text, const char *group)
Add action option (executes action and may exit)
Definition builder.c:943
void options_builder_set_mode_bitmask(options_builder_t *builder, option_mode_bitmask_t mode_bitmask)
Set mode bitmask on the last added option descriptor.
Definition builder.c:984
void options_builder_add_bool(options_builder_t *builder, const char *long_name, char short_name, size_t offset, bool default_value, const char *help_text, const char *group, bool required, const char *env_var_name)
Add boolean flag option.
Definition builder.c:657
options_builder_t * options_builder_from_preset(const options_config_t *preset)
Create builder from preset config.
Definition builder.c:432
int options_config_calculate_max_col_width(const options_config_t *config)
Calculate global max column width for help output alignment.
Definition help.c:77
void options_config_print_usage(const options_config_t *config, FILE *stream)
Print usage/help text.
Definition help.c:706
void options_builder_add_dependency_requires(options_builder_t *builder, const char *option_name, const char *depends_on, const char *error_message)
Add dependency: if option_name is set, depends_on must be set.
Definition builder.c:1130
void options_builder_add_positional(options_builder_t *builder, const char *name, const char *help_text, bool required, const char *section_heading, const char **examples, size_t num_examples, option_mode_bitmask_t mode_bitmask, int(*parse_fn)(const char *arg, void *config, char **remaining, int num_remaining, char **error_msg))
Add positional argument descriptor.
Definition builder.c:1192
void options_builder_add_dependency_conflicts(options_builder_t *builder, const char *option_name, const char *conflicts_with, const char *error_message)
Add anti-dependency: if option_name is set, conflicts_with must NOT be set.
Definition builder.c:1142
asciichat_error_t options_config_validate(const options_config_t *config, const void *options_struct, char **error_message)
Validate options struct.
Definition builder.c:1840
asciichat_error_t options_config_parse_positional(const options_config_t *config, int remaining_argc, char **remaining_argv, void *options_struct)
Parse positional arguments.
Definition builder.c:1331
void options_builder_add_mode(options_builder_t *builder, const char *name, const char *description)
Add mode descriptor.
Definition builder.c:1308
void options_builder_set_default_value_display(options_builder_t *builder, const char *option_name, const char *default_value)
Set default value string in metadata.
Definition builder.c:1109
void options_builder_add_custom_section(options_builder_t *builder, const char *heading, const char *content, option_mode_bitmask_t mode_bitmask)
Add a custom help section.
Definition builder.c:1319
asciichat_error_t options_config_set_defaults(const options_config_t *config, void *options_struct)
Set default values in options struct.
Definition builder.c:1400
option_input_type_t
Completion input type for smart shell completions.
Definition builder.h:176
@ OPTION_INPUT_STRING
Free-form text input.
Definition builder.h:180
@ OPTION_INPUT_CHOICE
Dynamic choice (e.g., from system)
Definition builder.h:182
@ OPTION_INPUT_NUMERIC
Numeric value with optional min/max/step.
Definition builder.h:179
@ OPTION_INPUT_NONE
No input (boolean flag)
Definition builder.h:177
@ OPTION_INPUT_FILEPATH
File path completion.
Definition builder.h:181
@ OPTION_INPUT_ENUM
Choose from fixed set of enum values.
Definition builder.h:178
void options_builder_set_enum_values(options_builder_t *builder, const char *option_name, const char **values, const char **descriptions)
Set enum values with descriptions for an option.
Definition builder.c:1022
option_type_t
Option value types.
Definition builder.h:161
@ OPTION_TYPE_INT
Integer value (–count 42)
Definition builder.h:163
@ OPTION_TYPE_DOUBLE
Floating point (–ratio 1.5)
Definition builder.h:165
@ OPTION_TYPE_STRING
String value (–name foo)
Definition builder.h:164
@ OPTION_TYPE_ACTION
Action that executes and may exit (–list-webcams, etc.)
Definition builder.h:167
@ OPTION_TYPE_CALLBACK
Custom parser function.
Definition builder.h:166
@ OPTION_TYPE_BOOL
Boolean flag (–flag, no value)
Definition builder.h:162
void options_builder_add_dependency_implies(options_builder_t *builder, const char *option_name, const char *implies, const char *error_message)
Add implication: if option_name is set, implies defaults to true.
Definition builder.c:1154
void options_config_print_options_sections_with_width(const options_config_t *config, FILE *stream, int max_col_width, asciichat_mode_t mode)
Print everything except the USAGE section.
Definition help.c:890
void options_builder_add_descriptor(options_builder_t *builder, const option_descriptor_t *descriptor)
Add full option descriptor (advanced)
Definition builder.c:973
void options_builder_add_int_with_metadata(options_builder_t *builder, const char *long_name, char short_name, size_t offset, int default_value, const char *help_text, const char *group, bool required, const char *env_var_name, bool(*validate)(const void *options_struct, char **error_msg), const option_metadata_t *metadata)
Add integer option with metadata (for numeric ranges and examples)
Definition builder.c:710
void options_builder_add_double_with_metadata(options_builder_t *builder, const char *long_name, char short_name, size_t offset, double default_value, const char *help_text, const char *group, bool required, const char *env_var_name, bool(*validate)(const void *options_struct, char **error_msg), const option_metadata_t *metadata, bool optional_arg)
const char * find_similar_option_with_mode(const char *unknown_opt, const options_config_t *config, option_mode_bitmask_t current_mode_bitmask)
Find similar option across all modes and suggest with mode information.
void options_config_print_options_sections(const options_config_t *config, FILE *stream, asciichat_mode_t mode)
Print everything except the USAGE section (backward compatibility)
Definition help.c:1085
void options_builder_mark_as_list(options_builder_t *builder, const char *option_name)
Mark option as accepting multiple values.
Definition builder.c:1093
void options_builder_set_examples(options_builder_t *builder, const char *option_name, const char **examples)
Set example values for an option.
Definition builder.c:1059
dependency_type_t
Option dependency types.
Definition builder.h:228
@ DEPENDENCY_IMPLIES
If A is set, B defaults to true/enabled.
Definition builder.h:231
@ DEPENDENCY_CONFLICTS
If A is set, B must NOT be set.
Definition builder.h:230
@ DEPENDENCY_REQUIRES
If A is set, B must be set.
Definition builder.h:229
void options_builder_destroy(options_builder_t *builder)
Free options builder.
Definition builder.c:467
const char * options_get_type_placeholder(option_type_t type)
Get placeholder string for option type.
void options_config_destroy(options_config_t *config)
Free options config.
Definition builder.c:631
void options_builder_add_int(options_builder_t *builder, const char *long_name, char short_name, size_t offset, int default_value, const char *help_text, const char *group, bool required, const char *env_var_name, bool(*validate)(const void *options_struct, char **error_msg))
Add integer option.
options_config_t * options_builder_build(options_builder_t *builder)
Build immutable options config.
Definition builder.c:482
void options_builder_set_input_type(options_builder_t *builder, const char *option_name, option_input_type_t input_type)
Set input type for an option.
Definition builder.c:1076
void options_builder_add_callback(options_builder_t *builder, const char *long_name, char short_name, size_t offset, const void *default_value, size_t value_size, bool(*parse_fn)(const char *arg, void *dest, char **error_msg), const char *help_text, const char *group, bool required, const char *env_var_name)
Add option with custom callback parser.
void options_builder_add_string(options_builder_t *builder, const char *long_name, char short_name, size_t offset, const char *default_value, const char *help_text, const char *group, bool required, const char *env_var_name, bool(*validate)(const void *options_struct, char **error_msg))
Add string option.
void options_builder_add_callback_optional(options_builder_t *builder, const char *long_name, char short_name, size_t offset, const void *default_value, size_t value_size, bool(*parse_fn)(const char *arg, void *dest, char **error_msg), const char *help_text, const char *group, bool required, const char *env_var_name, bool optional_arg)
Add option with custom callback parser that supports optional arguments.
options_config_t * options_preset_unified(const char *program_name, const char *description)
Get binary-level options preset.
Definition presets.c:51
void options_builder_add_example_utility(options_builder_t *builder, uint32_t mode_bitmask, const char *args, const char *description, bool is_utility_command)
Add an example with utility command support.
Definition builder.c:1289
void options_struct_destroy(const options_config_t *config, void *options_struct)
Clean up memory owned by options struct.
Definition help.c:1457
options_builder_t * options_builder_create(size_t struct_size)
Create empty options builder.
Definition builder.c:378
unsigned int uint32_t
Definition common.h:58
asciichat_error_t
Error and exit codes - unified status values (0-255)
Definition error_codes.h:49
asciichat_mode_t
Mode type for options parsing.
option_mode_bitmask_t
Option mode bitmask.
action_args_t args
ClangTool/LibTooling compatibility shim for stdbool.h.
#define bool
Definition stdbool.h:61
Custom help section descriptor.
Definition builder.h:389
option_mode_bitmask_t mode_bitmask
Which modes show this section.
Definition builder.h:392
const char * content
Section content.
Definition builder.h:391
const char * heading
Section heading (e.g., "INTERACTIVE CONTROLS")
Definition builder.h:390
Example descriptor for programmatic EXAMPLES generation.
Definition builder.h:310
uint32_t mode_bitmask
Bitmask of modes (OPTION_MODE_SERVER, OPTION_MODE_CLIENT, etc.)
Definition builder.h:311
const char * description
Definition builder.h:313
const char * args
Command-line arguments part of the example.
Definition builder.h:312
bool owns_args_memory
True if args memory should be freed by options_config_destroy.
Definition builder.h:314
bool is_utility_command
True if this is a utility command (don't prepend program name)
Definition builder.h:315
Mode descriptor for programmatic MODES generation (for help output)
Definition builder.h:321
const char * name
Mode name (e.g., "server", "client")
Definition builder.h:322
const char * description
Mode description (e.g., "Run as multi-client video chat server")
Definition builder.h:323
Option dependency.
Definition builder.h:331
const char * depends_on
The option it depends on.
Definition builder.h:334
const char * error_message
Custom error message (optional)
Definition builder.h:335
const char * option_name
The option that has the dependency.
Definition builder.h:332
dependency_type_t type
Type of dependency.
Definition builder.h:333
Option descriptor.
Definition builder.h:241
option_mode_bitmask_t mode_bitmask
Which modes this option applies to.
Definition builder.h:278
const char * help_text
Description for –help.
Definition builder.h:251
bool hide_from_mode_help
If true, don't show in mode-specific help (binary-level only)
Definition builder.h:254
size_t offset
offsetof(struct, field) - where to store value
Definition builder.h:248
bool hide_from_binary_help
If true, don't show in binary-level help (e.g., in release builds)
Definition builder.h:255
const char * env_var_name
Environment variable fallback (or NULL)
Definition builder.h:260
const char * arg_placeholder
Custom argument placeholder (e.g., "SHELL [FILE]" instead of "STR")
Definition builder.h:253
const char * group
Group name for help sections (e.g., "NETWORK OPTIONS")
Definition builder.h:252
const void * default_value
Pointer to default value (or NULL if required)
Definition builder.h:258
bool required
If true, option must be provided.
Definition builder.h:259
bool owns_memory
If true, strings are strdup'd and freed on cleanup.
Definition builder.h:272
const char * long_name
Long option name (e.g., "port")
Definition builder.h:243
char short_name
Short option char (e.g., 'p', or '\0' if none)
Definition builder.h:244
option_metadata_t metadata
Metadata for shell completions (enums, ranges, examples, etc.)
Definition builder.h:281
option_type_t type
Value type.
Definition builder.h:247
bool optional_arg
If true, argument is optional (for callbacks like –verbose)
Definition builder.h:275
Metadata for shell completion generation.
Definition builder.h:192
int max
Maximum value (or 0 if no limit)
Definition builder.h:203
bool is_list
If true, option accepts multiple comma-separated or space-separated values.
Definition builder.h:217
const char ** enum_descriptions
Descriptions parallel to enum_values (null-terminated, e.g., "Auto-detect from terminal")
Definition builder.h:197
int min
Minimum value (or 0 if no limit)
Definition builder.h:202
option_input_type_t input_type
What kind of input this option expects.
Definition builder.h:214
const char ** examples
Example values or command invocations (null-terminated array)
Definition builder.h:208
const char * validation_pattern
Optional regex pattern for validation hints.
Definition builder.h:220
const char * default_value
Default value as string for display.
Definition builder.h:211
const int * enum_integer_values
Actual enum integer values (e.g., {-1, 0, 1, 2, 3} for non-sequential enums)
Definition builder.h:198
int step
Step size (0 = no step, continuous)
Definition builder.h:204
const char ** enum_values
Enum value strings (null-terminated, e.g., {"auto", "none", "16", "256", "truecolor",...
Definition builder.h:195
Options builder.
Definition builder.h:441
size_t owned_strings_builder_capacity
Definition builder.h:477
positional_arg_descriptor_t * positional_args
Dynamic array of positional args.
Definition builder.h:450
size_t num_dependencies
Current count.
Definition builder.h:447
size_t descriptor_capacity
Allocated capacity.
Definition builder.h:444
const char * program_name
Definition builder.h:471
example_descriptor_t * examples
Dynamic array of examples.
Definition builder.h:458
size_t mode_capacity
Allocated capacity.
Definition builder.h:464
help_mode_descriptor_t * modes
Dynamic array of modes.
Definition builder.h:462
size_t example_capacity
Allocated capacity.
Definition builder.h:460
const char * description
Definition builder.h:472
option_descriptor_t * descriptors
Dynamic array of descriptors.
Definition builder.h:442
size_t num_descriptors
Current count.
Definition builder.h:443
size_t num_custom_sections
Current count.
Definition builder.h:467
size_t num_positional_args
Current count.
Definition builder.h:451
char ** owned_strings_builder
Definition builder.h:475
size_t num_owned_strings_builder
Definition builder.h:476
size_t positional_arg_capacity
Allocated capacity.
Definition builder.h:452
size_t num_examples
Current count.
Definition builder.h:459
size_t num_modes
Current count.
Definition builder.h:463
size_t dependency_capacity
Allocated capacity.
Definition builder.h:448
size_t num_usage_lines
Current count.
Definition builder.h:455
size_t custom_section_capacity
Allocated capacity.
Definition builder.h:468
custom_section_descriptor_t * custom_sections
Dynamic array of custom sections.
Definition builder.h:466
size_t usage_line_capacity
Allocated capacity.
Definition builder.h:456
option_dependency_t * dependencies
Dynamic array of dependencies.
Definition builder.h:446
size_t struct_size
Definition builder.h:470
usage_descriptor_t * usage_lines
Dynamic array of usage lines.
Definition builder.h:454
Options configuration.
Definition builder.h:401
positional_arg_descriptor_t * positional_args
Array of positional argument descriptors.
Definition builder.h:408
size_t num_custom_sections
Number of custom sections.
Definition builder.h:426
size_t num_usage_lines
Number of usage lines.
Definition builder.h:417
option_descriptor_t * descriptors
Array of option descriptors.
Definition builder.h:402
option_dependency_t * dependencies
Array of dependencies.
Definition builder.h:405
custom_section_descriptor_t * custom_sections
Array of custom help sections.
Definition builder.h:425
size_t num_modes
Number of modes.
Definition builder.h:423
const char * program_name
For usage header.
Definition builder.h:412
size_t num_positional_args
Number of positional arguments.
Definition builder.h:409
size_t num_descriptors
Number of descriptors.
Definition builder.h:403
char ** owned_strings
Strdup'd strings to free on cleanup.
Definition builder.h:429
size_t owned_strings_capacity
Allocated capacity.
Definition builder.h:431
size_t num_examples
Number of examples.
Definition builder.h:420
size_t num_dependencies
Number of dependencies.
Definition builder.h:406
const char * description
For usage header.
Definition builder.h:413
help_mode_descriptor_t * modes
Array of mode descriptors.
Definition builder.h:422
usage_descriptor_t * usage_lines
Array of usage line descriptors.
Definition builder.h:416
example_descriptor_t * examples
Array of example descriptors.
Definition builder.h:419
size_t struct_size
sizeof(options_t) for bounds checking
Definition builder.h:411
size_t num_owned_strings
Number of owned strings.
Definition builder.h:430
Positional argument descriptor.
Definition builder.h:357
const char * section_heading
Section heading for examples (e.g., "ADDRESS FORMATS")
Definition builder.h:363
bool required
If true, this positional arg must be provided.
Definition builder.h:360
const char * help_text
Description for usage message.
Definition builder.h:359
const char * name
Name for help text (e.g., "address", "bind-addr")
Definition builder.h:358
option_mode_bitmask_t mode_bitmask
Which modes this positional arg applies to.
Definition builder.h:380
const char ** examples
Array of example strings with descriptions.
Definition builder.h:364
size_t num_examples
Number of examples.
Definition builder.h:365
Usage line descriptor for programmatic USAGE generation.
Definition builder.h:296
bool show_options
true = show "[options...]" suffix
Definition builder.h:299
const char * description
Help text for this usage pattern.
Definition builder.h:300
const char * positional
NULL or positional args (e.g., "[bind-addr]", "<session-string>")
Definition builder.h:298
const char * mode
NULL or mode name (e.g., "server") or "<mode>" placeholder.
Definition builder.h:297