56 return COMPLETION_FORMAT_UNKNOWN;
61 size_t len = strlen(shell_name);
62 if (len >=
sizeof(lower)) {
63 return COMPLETION_FORMAT_UNKNOWN;
66 for (
size_t i = 0; i < len; i++) {
67 lower[i] = tolower((
unsigned char)shell_name[i]);
70 if (strcmp(lower,
"bash") == 0) {
71 return COMPLETION_FORMAT_BASH;
72 }
else if (strcmp(lower,
"fish") == 0) {
73 return COMPLETION_FORMAT_FISH;
74 }
else if (strcmp(lower,
"zsh") == 0) {
75 return COMPLETION_FORMAT_ZSH;
76 }
else if (strcmp(lower,
"powershell") == 0 || strcmp(lower,
"ps") == 0) {
77 return COMPLETION_FORMAT_POWERSHELL;
80 return COMPLETION_FORMAT_UNKNOWN;
101 option_descriptor_t *combined_opts = NULL;
102 size_t combined_count = 0;
105 asciichat_mode_t modes[] = {MODE_DISCOVERY, MODE_SERVER, MODE_CLIENT, MODE_MIRROR, MODE_DISCOVERY_SERVICE};
106 const size_t modes_len =
sizeof(modes) /
sizeof(modes[0]);
108 for (
size_t m = 0; m < modes_len; m++) {
109 size_t mode_count = 0;
113 for (
size_t i = 0; i < mode_count; i++) {
114 bool already_has =
false;
115 for (
size_t j = 0; j < combined_count; j++) {
116 if (strcmp(combined_opts[j].long_name, mode_opts[i].long_name) == 0) {
123 option_descriptor_t *temp = (option_descriptor_t *)SAFE_REALLOC(
124 combined_opts, combined_count *
sizeof(option_descriptor_t), option_descriptor_t *);
126 combined_opts = temp;
127 combined_opts[combined_count - 1] = mode_opts[i];
131 SAFE_FREE(mode_opts);
135 *count = combined_count;
136 return combined_opts;