(mail_command_entry): Rewritten
(mail_escape_entry,struct mail_command): New data type (mail_command_table,mail_escape_table): Variables removed (util_find_entry): Change prototype (util_help,util_command_list) (mail_find_command,mail_find_escape,mail_command_help) (mail_escape_help,mail_command_list): New functions (util_help): Removed (alias_iterate_first,alias_iterate_next,alias_iterate_end) (var_iterate_first,var_iterate_next,var_iterate_end): New functions (file_compl,no_compl,msglist_compl,msglist_file_compl,dir_compl (command_compl,alias_compl,var_compl): New functions for readline completion support
Showing
1 changed file
with
81 additions
and
19 deletions
... | @@ -109,30 +109,52 @@ typedef struct compose_env | ... | @@ -109,30 +109,52 @@ typedef struct compose_env |
109 | int nfiles; /* Number of output files */ | 109 | int nfiles; /* Number of output files */ |
110 | } compose_env_t; | 110 | } compose_env_t; |
111 | 111 | ||
112 | struct mail_command_entry { | 112 | #define MAIL_COMMAND_COMMON_MEMBERS \ |
113 | const char *shortname;\ | ||
114 | const char *longname;\ | ||
115 | const char *synopsis | ||
116 | |||
117 | struct mail_command | ||
118 | { | ||
119 | MAIL_COMMAND_COMMON_MEMBERS; | ||
120 | }; | ||
121 | |||
122 | struct mail_command_entry | ||
123 | { | ||
124 | MAIL_COMMAND_COMMON_MEMBERS; | ||
125 | int flags; | ||
126 | int (*func) __PMT ((int, char **)); | ||
127 | char **(*command_completion) __PMT((int argc, char **argv, int ws)); | ||
128 | }; | ||
129 | |||
130 | struct mail_escape_entry | ||
131 | { | ||
113 | const char *shortname; | 132 | const char *shortname; |
114 | const char *longname; | 133 | const char *longname; |
115 | const char *synopsis; | 134 | const char *synopsis; |
116 | int flags; | 135 | int (*escfunc) __PMT ((int, char **, compose_env_t *)); |
117 | int (*func) __P ((int, char **)); | ||
118 | int (*escfunc) __P ((int, char **, compose_env_t *)); | ||
119 | }; | 136 | }; |
120 | 137 | ||
121 | typedef enum { | 138 | typedef enum |
122 | Mail_env_whatever, | 139 | { |
123 | Mail_env_number, | 140 | Mail_env_whatever, |
124 | Mail_env_string, | 141 | Mail_env_number, |
125 | Mail_env_boolean | 142 | Mail_env_string, |
126 | } mail_env_data_t; | 143 | Mail_env_boolean |
127 | 144 | } | |
128 | struct mail_env_entry { | 145 | mail_env_data_t; |
129 | char *var; | 146 | |
147 | struct mail_env_entry | ||
148 | { | ||
149 | const char *var; | ||
130 | mail_env_data_t type; | 150 | mail_env_data_t type; |
131 | int set; | 151 | int set; |
132 | union { | 152 | union |
153 | { | ||
133 | char *string; | 154 | char *string; |
134 | int number; | 155 | int number; |
135 | } value; | 156 | } |
157 | value; | ||
136 | }; | 158 | }; |
137 | 159 | ||
138 | #define mail_env_entry_is_set(ep) ((ep) && (ep)->set) | 160 | #define mail_env_entry_is_set(ep) ((ep) && (ep)->set) |
... | @@ -155,8 +177,6 @@ extern unsigned int cursor; | ... | @@ -155,8 +177,6 @@ extern unsigned int cursor; |
155 | extern size_t total; | 177 | extern size_t total; |
156 | extern FILE *ofile; | 178 | extern FILE *ofile; |
157 | extern int interactive; | 179 | extern int interactive; |
158 | extern const struct mail_command_entry mail_command_table[]; | ||
159 | extern const struct mail_command_entry mail_escape_table[]; | ||
160 | 180 | ||
161 | /* Functions */ | 181 | /* Functions */ |
162 | extern int mail_alias __P ((int argc, char **argv)); | 182 | extern int mail_alias __P ((int argc, char **argv)); |
... | @@ -289,7 +309,19 @@ extern size_t util_range_msg __P((size_t low, size_t high, int flags, | ... | @@ -289,7 +309,19 @@ extern size_t util_range_msg __P((size_t low, size_t high, int flags, |
289 | 309 | ||
290 | extern function_t* util_command_get __P ((const char *cmd)); | 310 | extern function_t* util_command_get __P ((const char *cmd)); |
291 | extern char *util_stripwhite __P ((char *string)); | 311 | extern char *util_stripwhite __P ((char *string)); |
292 | extern struct mail_command_entry util_find_entry __P ((const struct mail_command_entry *table, const char *cmd)); | 312 | |
313 | extern void *util_find_entry __P((void *table, size_t nmemb, size_t size, | ||
314 | const char *cmd)); | ||
315 | extern int util_help __P((void *table, size_t nmemb, size_t size, const char *word)); | ||
316 | extern int util_command_list __P((void *table, size_t nmemb, size_t size)); | ||
317 | |||
318 | extern const struct mail_command_entry *mail_find_command __P((const char *cmd)); | ||
319 | extern const struct mail_escape_entry *mail_find_escape __P((const char *cmd)); | ||
320 | extern int mail_command_help __P((const char *command)); | ||
321 | extern int mail_escape_help __P((const char *command)); | ||
322 | extern void mail_command_list __P((void)); | ||
323 | extern const struct mail_command *mail_command_name __P((int i)); | ||
324 | |||
293 | extern int util_getcols __P ((void)); | 325 | extern int util_getcols __P ((void)); |
294 | extern int util_getlines __P ((void)); | 326 | extern int util_getlines __P ((void)); |
295 | extern int util_screen_lines __P ((void)); | 327 | extern int util_screen_lines __P ((void)); |
... | @@ -323,7 +355,6 @@ extern void util_save_outgoing __P ((message_t msg, char *savefile)); | ... | @@ -323,7 +355,6 @@ extern void util_save_outgoing __P ((message_t msg, char *savefile)); |
323 | extern void util_error __P ((const char *format, ...)); | 355 | extern void util_error __P ((const char *format, ...)); |
324 | extern int util_error_range __P ((size_t msgno)); | 356 | extern int util_error_range __P ((size_t msgno)); |
325 | extern void util_noapp __P ((void)); | 357 | extern void util_noapp __P ((void)); |
326 | extern int util_help __P ((const struct mail_command_entry *table, char *word)); | ||
327 | extern int util_tempfile __P ((char **namep)); | 358 | extern int util_tempfile __P ((char **namep)); |
328 | extern void util_msgset_iterate __P ((msgset_t *msgset, int (*fun) __P ((message_t, msgset_t *, void *)), void *closure)); | 359 | extern void util_msgset_iterate __P ((msgset_t *msgset, int (*fun) __P ((message_t, msgset_t *, void *)), void *closure)); |
329 | extern int util_get_content_type __P ((header_t hdr, char **value)); | 360 | extern int util_get_content_type __P ((header_t hdr, char **value)); |
... | @@ -349,10 +380,21 @@ extern char *ml_readline_with_intr __P((char *prompt)); | ... | @@ -349,10 +380,21 @@ extern char *ml_readline_with_intr __P((char *prompt)); |
349 | extern char *alias_expand __P ((char *name)); | 380 | extern char *alias_expand __P ((char *name)); |
350 | extern void alias_destroy __P ((char *name)); | 381 | extern void alias_destroy __P ((char *name)); |
351 | 382 | ||
383 | typedef struct alias_iterator *alias_iterator_t; | ||
384 | extern char *alias_find_first __P ((const char *prefix, alias_iterator_t *itr)); | ||
385 | extern const char *alias_iterate_next __P ((alias_iterator_t itr)); | ||
386 | extern const char *alias_iterate_first __P ((const char *p, alias_iterator_t *itr)); | ||
387 | extern void alias_iterate_end __P ((alias_iterator_t *itr)); | ||
388 | |||
352 | extern int mail_sender __P ((int argc, char **argv)); | 389 | extern int mail_sender __P ((int argc, char **argv)); |
353 | extern int mail_nosender __P ((int argc, char **argv)); | 390 | extern int mail_nosender __P ((int argc, char **argv)); |
354 | extern address_t get_sender_address __P((message_t msg)); | 391 | extern address_t get_sender_address __P((message_t msg)); |
355 | 392 | ||
393 | typedef struct var_iterator *var_iterator_t; | ||
394 | extern const char *var_iterate_next __P ((var_iterator_t itr)); | ||
395 | extern const char *var_iterate_first __P ((const char *prefix, var_iterator_t *pitr)); | ||
396 | extern void var_iterate_end __P ((var_iterator_t *itr)); | ||
397 | |||
356 | #define COMPOSE_APPEND 0 | 398 | #define COMPOSE_APPEND 0 |
357 | #define COMPOSE_REPLACE 1 | 399 | #define COMPOSE_REPLACE 1 |
358 | #define COMPOSE_SINGLE_LINE 2 | 400 | #define COMPOSE_SINGLE_LINE 2 |
... | @@ -384,6 +426,26 @@ extern char *readline __P ((char *prompt)); | ... | @@ -384,6 +426,26 @@ extern char *readline __P ((char *prompt)); |
384 | #define MAIL_ATTRIBUTE_TAGGED 0x0004 | 426 | #define MAIL_ATTRIBUTE_TAGGED 0x0004 |
385 | #define MAIL_ATTRIBUTE_SHOWN 0x0008 | 427 | #define MAIL_ATTRIBUTE_SHOWN 0x0008 |
386 | 428 | ||
429 | #ifdef WITH_READLINE | ||
430 | extern char **file_compl (int argc, char **argv, int ws); | ||
431 | extern char **no_compl (int argc, char **argv, int ws); | ||
432 | extern char **msglist_compl (int argc, char **argv, int ws); | ||
433 | extern char **msglist_file_compl (int argc, char **argv, int ws); | ||
434 | extern char **dir_compl (int argc, char **argv, int ws); | ||
435 | extern char **command_compl (int argc, char **argv, int ws); | ||
436 | extern char **alias_compl (int argc, char **argv, int ws); | ||
437 | extern char **var_compl (int argc, char **argv, int ws); | ||
438 | #else | ||
439 | # define file_compl NULL | ||
440 | # define no_compl NULL | ||
441 | # define msglist_compl NULL | ||
442 | # define msglist_file_compl NULL | ||
443 | # define dir_compl NULL | ||
444 | # define command_compl NULL | ||
445 | # define alias_compl NULL | ||
446 | # define var_compl NULL | ||
447 | #endif | ||
448 | |||
387 | #ifdef __cplusplus | 449 | #ifdef __cplusplus |
388 | } | 450 | } |
389 | #endif | 451 | #endif | ... | ... |
-
Please register or sign in to post a comment