1 /* Command line library */ 2 #ifndef CMDLINELIB_H 3 #define CMDLINELIB_H 4 5 #define CMDL_BUFFER_SIZE 256 6 //#define CMDL_OUTPUT_SIZE 256 7 #define CMDL_PROMPT_SIZE 8 8 #define CMDL_MAX_TAB_COMPLETE_RESULT 256 9 10 typedef int (*cmdl_putchar_t)(int); 11 typedef int (*cmdl_printf_t)( const char *format, ... ); 12 typedef int (*cmdl_getchar_t)(); 13 14 #ifndef NULL 15 #define NULL ((void *)0) 16 #endif 17 18 enum{ 19 CMDL_LEFT, 20 CMDL_RIGHT 21 }; 22 23 enum{ 24 CMDLK_FW=6, 25 CMDLK_BW=2, 26 CMDLK_BS=8, 27 CMDLK_HOME=2, 28 CMDLK_END=5, 29 CMDLK_DELTOEND=11, 30 CMDLK_DELARG=23, 31 CMDLK_ENTER=0x0d, 32 CMDLK_RETURN=0x0a, 33 CMDLK_TAB=9 34 }; 35 36 typedef struct{ 37 38 // buffers 39 40 //char* output; 41 char* buffer; 42 char* prompt; 43 44 // options and values 45 46 int cursor; 47 //int has_output; 48 int exit; 49 int refresh; 50 int tabstate; 51 int insert; 52 53 // callbacks 54 55 cmdl_putchar_t putchar; 56 cmdl_getchar_t getchar; 57 cmdl_printf_t printf; 58 59 }cmd_line; 60 61 typedef struct{ 62 int argc; 63 char **argv; 64 }cmdl_param_list; 65 66 void cmdl_setputchar(cmd_line* cmd, cmdl_putchar_t in); 67 void cmdl_setgetchar(cmd_line* cmd, cmdl_getchar_t in); 68 void cmdl_setprintf(cmd_line* cmd, cmdl_printf_t in); 69 70 //void cmdl_builtin_help(cmd_line* cmd, char* command); 71 72 void cmdl_parsechar(cmd_line* cmd, char in); 73 74 void cmdl_addreplace(cmd_line* cmd, char in); 75 void cmdl_addinsert(cmd_line* cmd, char in); 76 void cmdl_enterloop(cmd_line* cmd); 77 void cmdl_exec(cmd_line* cmd); 78 void cmdl_setexit(cmd_line* cmd, int exit); 79 int cmdl_getexit(cmd_line* cmd); 80 void cmdl_clearoutput(cmd_line* cmd); 81 void cmdl_clearbuffer(cmd_line* cmd); 82 int cmdl_printf(cmd_line* cmd, const char *format, ...); 83 char* cmdl_getoutput(cmd_line* cmd); 84 //void cmdl_addoutput_str(cmd_line* cmd, char output[CMDL_OUTPUT_SIZE]); 85 void cmdl_addstr(cmd_line* cmd, char* str); 86 int cmdl_movecursor(cmd_line* cmd, int direction); 87 char* cmdl_getbuffer(cmd_line* cmd); 88 void cmdl_addchar(cmd_line* cmd, char in); 89 int cmdl_check(cmd_line* cmd); 90 void cmdl_del(cmd_line* cmd); 91 cmd_line* cmdl_create(); 92 void cmdl_free(cmd_line* cmd); 93 char *cmdl_getprompt(cmd_line* cmd); 94 void cmdl_setpropmt(cmd_line* cmd, char prompt[CMDL_PROMPT_SIZE]); 95 cmdl_param_list* cmdl_getparams(const char* command); 96 void cmdl_tabcomplete(cmd_line *cmd); 97 98 #endif 99 100