ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
builder.h
Go to the documentation of this file.
1
147
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
174
189
197typedef struct {
198 // Enum values with descriptions (null-terminated arrays)
199 const char *
201 const char *
204
205 // Numeric range
206 struct {
207 int min;
208 int max;
209 int step;
210 } numeric_range;
211
212 // Examples (must be null-terminated)
213 const char **examples;
214
215 // Default value (informational, may be duplicated from descriptor)
216 const char *default_value;
217
218 // Input type for completions
220
221 // Flags
222 bool is_list;
223
224 // Validation pattern (optional)
225 const char *validation_pattern;
229
241
249typedef struct {
250 // Identification
251 const char *long_name;
253
254 // Type and storage
256 size_t offset;
257
258 // Documentation
259 const char *help_text;
260 const char *group;
261 const char *arg_placeholder;
264
265 // Default and validation
266 const void *default_value;
267 bool required;
268 const char *env_var_name;
269
270 // Validation receives the full options struct and uses SET_ERRNO() on failure.
271 bool (*validate)(const void *options_struct);
272
273 // Custom parsing (for OPTION_TYPE_CALLBACK)
274 bool (*parse_fn)(const char *arg, void *dest, char **error_msg);
275
276 // Action callback (for OPTION_TYPE_ACTION)
277 void (*action_fn)(void);
278
279 // Memory management
281
282 // Optional argument support (for OPTION_TYPE_CALLBACK)
284
285 // Mode applicability
287
288 // Completion metadata (NEW - for smart shell completions)
290
291 // Mode-aware default getter (for options with mode-specific defaults)
292 const void *(*mode_default_getter)(
293 asciichat_mode_t mode);
297
307typedef struct {
308 const char *mode;
309 const char *positional;
311 const char *description;
313
328
332typedef struct {
333 const char *name;
334 const char *description;
336
342typedef struct {
343 const char *option_name;
345 const char *depends_on;
346 const char *error_message;
348
369typedef struct {
370 const char *name;
371 const char *help_text;
372 bool required;
373
374 // Programmatic help examples
375 const char *section_heading;
376 const char **examples;
378
389 int (*parse_fn)(const char *arg, void *config, char **remaining, int num_remaining, char **error_msg);
390
391 // Mode applicability
394
407
448
497
498// ============================================================================
499// Builder Lifecycle
500// ============================================================================
501
510
520
527
538
548
549// ============================================================================
550// Adding Options
551// ============================================================================
552
566void options_builder_add_bool(options_builder_t *builder, const char *long_name, char short_name, size_t offset,
567 bool default_value, const char *help_text, const char *group, bool required,
568 const char *env_var_name);
569
584void options_builder_add_int(options_builder_t *builder, const char *long_name, char short_name, size_t offset,
585 int default_value, const char *help_text, const char *group, bool required,
586 const char *env_var_name, bool (*validate)(const void *options_struct));
587
595void options_builder_add_int_with_metadata(options_builder_t *builder, const char *long_name, char short_name,
596 size_t offset, int default_value, const char *help_text, const char *group,
597 bool required, const char *env_var_name,
598 bool (*validate)(const void *options_struct),
599 const option_metadata_t *metadata);
600
617void options_builder_add_string(options_builder_t *builder, const char *long_name, char short_name, size_t offset,
618 const char *default_value, const char *help_text, const char *group, bool required,
619 const char *env_var_name, bool (*validate)(const void *options_struct));
620
635void options_builder_add_double(options_builder_t *builder, const char *long_name, char short_name, size_t offset,
636 double default_value, const char *help_text, const char *group, bool required,
637 const char *env_var_name, bool (*validate)(const void *options_struct),
638 bool optional_arg);
639
640void options_builder_add_double_with_metadata(options_builder_t *builder, const char *long_name, char short_name,
641 size_t offset, double default_value, const char *help_text,
642 const char *group, bool required, const char *env_var_name,
643 bool (*validate)(const void *options_struct),
644 const option_metadata_t *metadata, bool optional_arg);
645
661void options_builder_add_callback(options_builder_t *builder, const char *long_name, char short_name, size_t offset,
662 const void *default_value, size_t value_size,
663 bool (*parse_fn)(const char *arg, void *dest, char **error_msg),
664 const char *help_text, const char *group, bool required, const char *env_var_name);
665
684void options_builder_add_callback_optional(options_builder_t *builder, const char *long_name, char short_name,
685 size_t offset, const void *default_value, size_t value_size,
686 bool (*parse_fn)(const char *arg, void *dest, char **error_msg),
687 const char *help_text, const char *group, bool required,
688 const char *env_var_name, bool optional_arg);
689
710void options_builder_add_callback_with_metadata(options_builder_t *builder, const char *long_name, char short_name,
711 size_t offset, const void *default_value, size_t value_size,
712 bool (*parse_fn)(const char *arg, void *dest, char **error_msg),
713 const char *help_text, const char *group, bool required,
714 const char *env_var_name, bool optional_arg,
715 const option_metadata_t *metadata);
716
730void options_builder_add_action(options_builder_t *builder, const char *long_name, char short_name,
731 void (*action_fn)(void), const char *help_text, const char *group);
732
743
753void options_builder_set_arg_placeholder(options_builder_t *builder, const char *arg_placeholder);
754
755// ============================================================================
756// Completion Metadata (NEW - Phase 2)
757// ============================================================================
758
785void options_builder_set_enum_values(options_builder_t *builder, const char *option_name, const char **values,
786 const char **descriptions);
787
805void options_builder_set_numeric_range(options_builder_t *builder, const char *option_name, int min, int max, int step);
806
822void options_builder_set_examples(options_builder_t *builder, const char *option_name, const char **examples);
823
840void options_builder_set_input_type(options_builder_t *builder, const char *option_name,
841 option_input_type_t input_type);
842
856void options_builder_mark_as_list(options_builder_t *builder, const char *option_name);
857
869 const char *default_value);
870
878
879// ============================================================================
880// Managing Dependencies
881// ============================================================================
882
891void options_builder_add_dependency_requires(options_builder_t *builder, const char *option_name,
892 const char *depends_on, const char *error_message);
893
902void options_builder_add_dependency_conflicts(options_builder_t *builder, const char *option_name,
903 const char *conflicts_with, const char *error_message);
904
913void options_builder_add_dependency_implies(options_builder_t *builder, const char *option_name, const char *implies,
914 const char *error_message);
915
923
940void options_builder_mark_binary_only(options_builder_t *builder, const char *option_name);
941
942// ============================================================================
943// Positional Arguments
944// ============================================================================
945
986void options_builder_add_positional(options_builder_t *builder, const char *name, const char *help_text, bool required,
987 const char *section_heading, const char **examples, size_t num_examples,
988 option_mode_bitmask_t mode_bitmask,
989 int (*parse_fn)(const char *arg, void *config, char **remaining, int num_remaining,
990 char **error_msg));
991
1008 char **remaining_argv, void *options_struct);
1009
1010// ============================================================================
1011// Programmatic Help Generation
1012// ============================================================================
1013
1041void options_builder_add_usage(options_builder_t *builder, const char *mode, const char *positional, bool show_options,
1042 const char *description);
1043
1079void options_builder_add_example(options_builder_t *builder, uint32_t mode_bitmask, const char *args,
1080 const char *description, bool owns_args);
1081
1095 const char *description, bool is_utility_command);
1096
1114void options_builder_add_mode(options_builder_t *builder, const char *name, const char *description);
1115
1128void options_builder_add_custom_section(options_builder_t *builder, const char *heading, const char *content,
1129 option_mode_bitmask_t mode_bitmask);
1130
1131// ============================================================================
1132// Preset Configurations
1133// ============================================================================
1134
1145options_config_t *options_preset_unified(const char *program_name, const char *description);
1146
1147// ============================================================================
1148// Parsing and Validation
1149// ============================================================================
1150
1162
1177asciichat_error_t options_config_parse(const options_config_t *config, int argc, char **argv, void *options_struct,
1178 option_mode_bitmask_t detected_mode, int *remaining_argc,
1179 char ***remaining_argv);
1180
1194asciichat_error_t options_config_validate(const options_config_t *config, const void *options_struct,
1195 char **error_message);
1196
1207
1216void options_config_print_usage(const options_config_t *config, FILE *stream);
1217
1228
1241void options_config_print_options_sections_with_width(const options_config_t *config, FILE *stream, int max_col_width,
1242 asciichat_mode_t mode);
1243
1254
1267void options_print_help_for_mode(const options_config_t *config, asciichat_mode_t mode, const char *program_name,
1268 const char *description, FILE *desc);
1269
1279void options_struct_destroy(const options_config_t *config, void *options_struct);
1280
1281// ============================================================================
1282// Option Formatting Utilities
1283// ============================================================================
1284
1298
1314int options_format_default_value(option_type_t type, const void *default_value, char *buf, size_t bufsize);
1315
1316// ============================================================================
1317// Typo Suggestions for Unknown Options
1318// ============================================================================
1319
1340const char *find_similar_option_with_mode(const char *unknown_opt, const options_config_t *config,
1341 option_mode_bitmask_t current_mode_bitmask);
1342
1344void options_builder_set_string_parser(options_builder_t *builder, bool (*parser)(const char *, void *, char **));
action_args_t args
Definition actions.c:78
void options_builder_add_dependency(options_builder_t *builder, const option_dependency_t *dependency)
Add full dependency (advanced).
void options_config_print_usage_section(const options_config_t *config, FILE *stream)
Print only the USAGE section.
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.
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).
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).
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.
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.
void options_builder_set_arg_placeholder(options_builder_t *builder, const char *arg_placeholder)
Set custom argument placeholder on the last added option descriptor.
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.
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).
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.
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.
options_builder_t * options_builder_from_preset(const options_config_t *preset)
Create builder from preset config.
void options_builder_set_string_parser(options_builder_t *builder, bool(*parser)(const char *, void *, char **))
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), const option_metadata_t *metadata, bool optional_arg)
int options_config_calculate_max_col_width(const options_config_t *config)
Calculate global max column width for help output alignment.
void options_config_print_usage(const options_config_t *config, FILE *stream)
Print usage/help text.
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.
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.
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.
asciichat_error_t options_config_validate(const options_config_t *config, const void *options_struct, char **error_message)
Validate options struct.
asciichat_error_t options_config_parse_positional(const options_config_t *config, int remaining_argc, char **remaining_argv, void *options_struct)
Parse positional arguments.
void options_builder_add_mode(options_builder_t *builder, const char *name, const char *description)
Add mode descriptor.
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.
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.
asciichat_error_t options_config_set_defaults(const options_config_t *config, void *options_struct)
Set default values in options struct.
option_input_type_t
Completion input type for smart shell completions.
Definition builder.h:181
@ OPTION_INPUT_STRING
Free-form text input.
Definition builder.h:185
@ OPTION_INPUT_CHOICE
Dynamic choice (e.g., from system).
Definition builder.h:187
@ OPTION_INPUT_NUMERIC
Numeric value with optional min/max/step.
Definition builder.h:184
@ OPTION_INPUT_NONE
No input (boolean flag).
Definition builder.h:182
@ OPTION_INPUT_FILEPATH
File path completion.
Definition builder.h:186
@ OPTION_INPUT_ENUM
Choose from fixed set of enum values.
Definition builder.h:183
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.
option_type_t
Custom help section descriptor.
Definition builder.h:166
@ OPTION_TYPE_INT
Integer value (–count 42).
Definition builder.h:168
@ OPTION_TYPE_DOUBLE
Floating point (–ratio 1.5).
Definition builder.h:170
@ OPTION_TYPE_STRING
String value (–name foo).
Definition builder.h:169
@ OPTION_TYPE_ACTION
Action that executes and may exit (–list-webcams, etc.).
Definition builder.h:172
@ OPTION_TYPE_CALLBACK
Custom parser function.
Definition builder.h:171
@ OPTION_TYPE_BOOL
Boolean flag (–flag, no value).
Definition builder.h:167
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))
Add string option.
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.
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.
void options_builder_add_descriptor(options_builder_t *builder, const option_descriptor_t *descriptor)
Add full option descriptor (advanced).
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))
Add integer option.
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), const option_metadata_t *metadata)
Add integer option with metadata (for numeric ranges and examples).
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).
void options_builder_mark_as_list(options_builder_t *builder, const char *option_name)
Mark option as accepting multiple values.
void options_builder_set_examples(options_builder_t *builder, const char *option_name, const char **examples)
Set example values for an option.
dependency_type_t
Completion metadata attached to one option descriptor.
Definition builder.h:236
@ DEPENDENCY_IMPLIES
If A is set, B defaults to true/enabled.
Definition builder.h:239
@ DEPENDENCY_CONFLICTS
If A is set, B must NOT be set.
Definition builder.h:238
@ DEPENDENCY_REQUIRES
If A is set, B must be set.
Definition builder.h:237
void options_builder_destroy(options_builder_t *builder)
Free options builder.
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.
options_config_t * options_builder_build(options_builder_t *builder)
Build immutable options config.
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.
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), bool optional_arg)
Add double/float option.
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_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:58
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.
void options_struct_destroy(const options_config_t *config, void *options_struct)
Clean up memory owned by options struct.
options_builder_t * options_builder_create(size_t struct_size)
Mutable owner used to assemble option descriptors, dependencies, help sections, and examples before b...
⚙️ Common definitions, error codes, macros, and types shared throughout the application
unsigned int uint32_t
Definition common.h:62
asciichat_error_t
Error and exit codes - unified status values (0-255).
Definition error_codes.h:44
asciichat_mode_t
Mode type for options parsing.
Definition options.h:919
option_mode_bitmask_t
Option mode bitmask.
Definition options.h:936
⚙️ Unified options parsing system for ascii-chat with builder pattern and lock-free access
Describes one non-option command-line argument and how the parser consumes it.
Definition builder.h:402
option_mode_bitmask_t mode_bitmask
Which modes show this section.
Definition builder.h:405
const char * content
Section content.
Definition builder.h:404
const char * heading
Section heading (e.g., "INTERACTIVE CONTROLS").
Definition builder.h:403
Example descriptor for programmatic EXAMPLES generation.
Definition builder.h:321
uint32_t mode_bitmask
Bitmask of modes (OPTION_MODE_SERVER, OPTION_MODE_CLIENT, etc.).
Definition builder.h:322
const char * description
Definition builder.h:324
const char * args
Command-line arguments part of the example.
Definition builder.h:323
bool owns_args_memory
True if args memory should be freed by options_config_destroy.
Definition builder.h:325
bool is_utility_command
True if this is a utility command (don't prepend program name).
Definition builder.h:326
Mode descriptor for programmatic MODES generation (for help output).
Definition builder.h:332
const char * name
Mode name (e.g., "server", "client").
Definition builder.h:333
const char * description
Mode description (e.g., "Run as multi-client video chat server").
Definition builder.h:334
A rule connecting one option to another during validation.
Definition builder.h:342
const char * depends_on
The option it depends on.
Definition builder.h:345
const char * error_message
Custom error message (optional).
Definition builder.h:346
const char * option_name
The option that has the dependency.
Definition builder.h:343
dependency_type_t type
Type of dependency.
Definition builder.h:344
The complete registry entry for one command-line/configuration option.
Definition builder.h:249
option_mode_bitmask_t mode_bitmask
Which modes this option applies to.
Definition builder.h:286
const char * help_text
Description for –help.
Definition builder.h:259
bool hide_from_mode_help
If true, don't show in mode-specific help (binary-level only).
Definition builder.h:262
size_t offset
offsetof(struct, field) - where to store value
Definition builder.h:256
bool hide_from_binary_help
If true, don't show in binary-level help (e.g., in release builds).
Definition builder.h:263
const char * env_var_name
Environment variable fallback (or NULL).
Definition builder.h:268
const char * arg_placeholder
Custom argument placeholder (e.g., "SHELL [FILE]" instead of "STR").
Definition builder.h:261
const char * group
Group name for help sections (e.g., "NETWORK OPTIONS").
Definition builder.h:260
const void * default_value
Pointer to default value (or NULL if required).
Definition builder.h:266
bool required
If true, option must be provided.
Definition builder.h:267
bool(* parse_fn)(const char *arg, void *dest, char **error_msg)
Definition builder.h:274
bool owns_memory
If true, strings are strdup'd and freed on cleanup.
Definition builder.h:280
bool(* validate)(const void *options_struct)
Definition builder.h:271
const char * long_name
Long option name (e.g., "port").
Definition builder.h:251
char short_name
Short option char (e.g., 'p', or '\0' if none).
Definition builder.h:252
void(* action_fn)(void)
Action to execute (may call exit).
Definition builder.h:277
option_metadata_t metadata
Metadata for shell completions (enums, ranges, examples, etc.).
Definition builder.h:289
option_type_t type
Value type.
Definition builder.h:255
bool optional_arg
If true, argument is optional (for callbacks like –verbose).
Definition builder.h:283
Completion metadata attached to one option descriptor.
Definition builder.h:197
int max
Maximum value (or 0 if no limit).
Definition builder.h:208
bool is_list
If true, option accepts multiple comma-separated or space-separated values.
Definition builder.h:222
const char ** enum_descriptions
Descriptions parallel to enum_values (null-terminated, e.g., "Auto-detect from terminal").
Definition builder.h:202
int min
Minimum value (or 0 if no limit).
Definition builder.h:207
option_input_type_t input_type
What kind of input this option expects.
Definition builder.h:219
const char ** examples
Example values or command invocations (null-terminated array).
Definition builder.h:213
const char * validation_pattern
Optional regex pattern for validation hints.
Definition builder.h:225
const char * default_value
Default value as string for display.
Definition builder.h:216
const int * enum_integer_values
Actual enum integer values (e.g., {-1, 0, 1, 2, 3} for non-sequential enums).
Definition builder.h:203
int step
Step size (0 = no step, continuous).
Definition builder.h:209
const char ** enum_values
Enum value strings (null-terminated, e.g., {"auto", "none", "16", "256", "truecolor",...
Definition builder.h:200
Immutable parsing tables produced from an options builder.
Definition builder.h:457
size_t owned_strings_builder_capacity
Definition builder.h:493
positional_arg_descriptor_t * positional_args
Dynamic array of positional args.
Definition builder.h:466
size_t num_dependencies
Current count.
Definition builder.h:463
size_t descriptor_capacity
Allocated capacity.
Definition builder.h:460
const char * program_name
Definition builder.h:487
example_descriptor_t * examples
Dynamic array of examples.
Definition builder.h:474
size_t mode_capacity
Allocated capacity.
Definition builder.h:480
help_mode_descriptor_t * modes
Dynamic array of modes.
Definition builder.h:478
size_t example_capacity
Allocated capacity.
Definition builder.h:476
const char * description
Definition builder.h:488
option_descriptor_t * descriptors
Dynamic array of descriptors.
Definition builder.h:458
size_t num_descriptors
Current count.
Definition builder.h:459
size_t num_custom_sections
Current count.
Definition builder.h:483
size_t num_positional_args
Current count.
Definition builder.h:467
char ** owned_strings_builder
Definition builder.h:491
size_t num_owned_strings_builder
Definition builder.h:492
size_t positional_arg_capacity
Allocated capacity.
Definition builder.h:468
size_t num_examples
Current count.
Definition builder.h:475
size_t num_modes
Current count.
Definition builder.h:479
size_t dependency_capacity
Allocated capacity.
Definition builder.h:464
size_t num_usage_lines
Current count.
Definition builder.h:471
size_t custom_section_capacity
Allocated capacity.
Definition builder.h:484
custom_section_descriptor_t * custom_sections
Dynamic array of custom sections.
Definition builder.h:482
size_t usage_line_capacity
Allocated capacity.
Definition builder.h:472
option_dependency_t * dependencies
Dynamic array of dependencies.
Definition builder.h:462
size_t struct_size
Definition builder.h:486
usage_descriptor_t * usage_lines
Dynamic array of usage lines.
Definition builder.h:470
Immutable parsing tables produced from an options builder.
Definition builder.h:414
positional_arg_descriptor_t * positional_args
Array of positional argument descriptors.
Definition builder.h:421
size_t num_custom_sections
Number of custom sections.
Definition builder.h:439
size_t num_usage_lines
Number of usage lines.
Definition builder.h:430
option_descriptor_t * descriptors
Array of option descriptors.
Definition builder.h:415
option_dependency_t * dependencies
Array of dependencies.
Definition builder.h:418
custom_section_descriptor_t * custom_sections
Array of custom help sections.
Definition builder.h:438
size_t num_modes
Number of modes.
Definition builder.h:436
const char * program_name
For usage header.
Definition builder.h:425
size_t num_positional_args
Number of positional arguments.
Definition builder.h:422
size_t num_descriptors
Number of descriptors.
Definition builder.h:416
char ** owned_strings
Strdup'd strings to free on cleanup.
Definition builder.h:442
size_t owned_strings_capacity
Allocated capacity.
Definition builder.h:444
size_t num_examples
Number of examples.
Definition builder.h:433
size_t num_dependencies
Number of dependencies.
Definition builder.h:419
const char * description
For usage header.
Definition builder.h:426
help_mode_descriptor_t * modes
Array of mode descriptors.
Definition builder.h:435
usage_descriptor_t * usage_lines
Array of usage line descriptors.
Definition builder.h:429
example_descriptor_t * examples
Array of example descriptors.
Definition builder.h:432
size_t struct_size
sizeof(options_t) for bounds checking
Definition builder.h:424
size_t num_owned_strings
Number of owned strings.
Definition builder.h:443
Describes one non-option command-line argument and how the parser consumes it.
Definition builder.h:369
const char * section_heading
Section heading for examples (e.g., "ADDRESS FORMATS").
Definition builder.h:375
bool required
If true, this positional arg must be provided.
Definition builder.h:372
const char * help_text
Description for usage message.
Definition builder.h:371
int(* parse_fn)(const char *arg, void *config, char **remaining, int num_remaining, char **error_msg)
Definition builder.h:389
const char * name
Name for help text (e.g., "address", "bind-addr").
Definition builder.h:370
option_mode_bitmask_t mode_bitmask
Which modes this positional arg applies to.
Definition builder.h:392
const char ** examples
Array of example strings with descriptions.
Definition builder.h:376
size_t num_examples
Number of examples.
Definition builder.h:377
The complete registry entry for one command-line/configuration option.
Definition builder.h:307
bool show_options
true = show "[options...]" suffix
Definition builder.h:310
const char * description
Help text for this usage pattern.
Definition builder.h:311
const char * positional
NULL or positional args (e.g., "[bind-addr]", "<session-string>").
Definition builder.h:309
const char * mode
NULL or mode name (e.g., "server") or "<mode>" placeholder.
Definition builder.h:308