1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun #ifndef __SUBCMD_HELP_H
3*4882a593Smuzhiyun #define __SUBCMD_HELP_H
4*4882a593Smuzhiyun
5*4882a593Smuzhiyun #include <sys/types.h>
6*4882a593Smuzhiyun #include <stdio.h>
7*4882a593Smuzhiyun
8*4882a593Smuzhiyun struct cmdnames {
9*4882a593Smuzhiyun size_t alloc;
10*4882a593Smuzhiyun size_t cnt;
11*4882a593Smuzhiyun struct cmdname {
12*4882a593Smuzhiyun size_t len; /* also used for similarity index in help.c */
13*4882a593Smuzhiyun char name[];
14*4882a593Smuzhiyun } **names;
15*4882a593Smuzhiyun };
16*4882a593Smuzhiyun
mput_char(char c,unsigned int num)17*4882a593Smuzhiyun static inline void mput_char(char c, unsigned int num)
18*4882a593Smuzhiyun {
19*4882a593Smuzhiyun while(num--)
20*4882a593Smuzhiyun putchar(c);
21*4882a593Smuzhiyun }
22*4882a593Smuzhiyun
23*4882a593Smuzhiyun void load_command_list(const char *prefix,
24*4882a593Smuzhiyun struct cmdnames *main_cmds,
25*4882a593Smuzhiyun struct cmdnames *other_cmds);
26*4882a593Smuzhiyun void add_cmdname(struct cmdnames *cmds, const char *name, size_t len);
27*4882a593Smuzhiyun void clean_cmdnames(struct cmdnames *cmds);
28*4882a593Smuzhiyun int cmdname_compare(const void *a, const void *b);
29*4882a593Smuzhiyun void uniq(struct cmdnames *cmds);
30*4882a593Smuzhiyun /* Here we require that excludes is a sorted list. */
31*4882a593Smuzhiyun void exclude_cmds(struct cmdnames *cmds, struct cmdnames *excludes);
32*4882a593Smuzhiyun int is_in_cmdlist(struct cmdnames *c, const char *s);
33*4882a593Smuzhiyun void list_commands(const char *title, struct cmdnames *main_cmds,
34*4882a593Smuzhiyun struct cmdnames *other_cmds);
35*4882a593Smuzhiyun
36*4882a593Smuzhiyun #endif /* __SUBCMD_HELP_H */
37