ascii-chat
Binary v0.15.83-53-gb711d8720
Library lib/v0.3.2-701-gb711d8720
Video chat in your terminal
Loading...
Searching...
No Matches
usage.h File Reference

USAGE section generator for man pages. More...

Go to the source code of this file.

Functions

char * manpage_content_generate_usage (const options_config_t *config)
 Generate USAGE section content.
void manpage_content_free_usage (char *content)
 Free generated usage content.

Detailed Description

USAGE section generator for man pages.

Generates the USAGE section from usage descriptors showing different ways to invoke the program.

Definition in file usage.h.

Function Documentation

◆ manpage_content_free_usage()

void manpage_content_free_usage ( char * content)

Free generated usage content.

Parameters
[in]contentContent to free (can be NULL)

Definition at line 61 of file usage.c.

61 {
62 if (content) {
63 SAFE_FREE(content);
64 }
65}
#define SAFE_FREE(ptr)
Definition common.h:377

References SAFE_FREE.

◆ manpage_content_generate_usage()

char * manpage_content_generate_usage ( const options_config_t * config)

Generate USAGE section content.

Creates USAGE section from usage descriptors with proper groff tagged paragraph formatting.

Parameters
[in]configOptions configuration with usage descriptors
Returns
Newly allocated content string (caller must free)

Definition at line 15 of file usage.c.

15 {
16 if (!config || config->num_usage_lines == 0) {
17 char *buffer = SAFE_MALLOC(1, char *);
18 buffer[0] = '\0';
19 return buffer;
20 }
21
22 // Allocate growing buffer for usage section
23 size_t buffer_capacity = 4096;
24 char *buffer = SAFE_MALLOC(buffer_capacity, char *);
25 size_t offset = 0;
26
27 for (size_t i = 0; i < config->num_usage_lines; i++) {
28 const usage_descriptor_t *usage = &config->usage_lines[i];
29
30 // Ensure buffer is large enough
31 if (offset + 512 >= buffer_capacity) {
32 buffer_capacity *= 2;
33 buffer = SAFE_REALLOC(buffer, buffer_capacity, char *);
34 }
35
36 offset += safe_snprintf(buffer + offset, buffer_capacity - offset, ".TP\n");
37 offset += safe_snprintf(buffer + offset, buffer_capacity - offset, ".B ascii-chat");
38 if (usage->mode) {
39 offset += safe_snprintf(buffer + offset, buffer_capacity - offset, " %s", usage->mode);
40 }
41 if (usage->positional) {
42 offset += safe_snprintf(buffer + offset, buffer_capacity - offset, " %s", usage->positional);
43 }
44 if (usage->show_options) {
45 offset += safe_snprintf(buffer + offset, buffer_capacity - offset, " [options...]");
46 }
47 offset += safe_snprintf(buffer + offset, buffer_capacity - offset, "\n");
48
49 if (usage->description) {
50 offset +=
51 safe_snprintf(buffer + offset, buffer_capacity - offset, "%s\n", escape_groff_special(usage->description));
52 }
53 }
54
55 offset += safe_snprintf(buffer + offset, buffer_capacity - offset, "\n");
56
57 log_debug("Generated USAGE section (%zu bytes)", offset);
58 return buffer;
59}
size_t buffer_capacity(const void *data)
Definition buffer.c:280
#define SAFE_REALLOC(ptr, size, cast)
Definition common.h:285
#define SAFE_MALLOC(size, cast)
Definition common.h:265
#define log_debug(...)
Log a DEBUG message.
Definition log/log.h:595
const char * escape_groff_special(const char *str)
Escape special groff/troff characters in text.
Definition manpage.c:46
void usage(FILE *desc, asciichat_mode_t mode)
Print usage information for a specific mode.
int safe_snprintf(char *buffer, size_t buffer_size, const char *format,...)
Platform-safe snprintf wrapper.
size_t num_usage_lines
Number of usage lines.
Definition builder.h:430
usage_descriptor_t * usage_lines
Array of usage line descriptors.
Definition builder.h:429
The complete registry entry for one command-line/configuration option.
Definition builder.h:307

References buffer_capacity(), escape_groff_special(), log_debug, options_config_t::num_usage_lines, SAFE_MALLOC, SAFE_REALLOC, safe_snprintf(), usage(), and options_config_t::usage_lines.