/* user_interface.h */#ifndef __USERINTERFACE__H__#define __USERINTERFACE__H__/**********public definition**********///打印提示符#define PROMPT {printf("/r/033[K/033[32m[command]:");fflush(stdout);}/**********type definition**********/typedef void (*FUNC)(int argc, char *argv[]);typedef struct { char *cmd_name; //命令字符串 FUNC func_tret; //命令执行}CMD_STRUCT;/**********funtion announce**********///命令处理int cmd_treat(char *);/*======================================// 执行命令列表========================================*/void say_cmd(int argc, char *argv[]); //聊天命令void list_cmd(int argc, char *argv[]); //列表命令void help_cmd(int argc, char *argv[]); //帮助命令void cls_cmd(int argc, char *argv[]); //清屏命令void exit_cmd(int argc, char *argv[]); //退出命令
#endif//__USERINTERFACE__H__
/* user_interface.c *//**********include contain**********/#include"user_interface.h"/**********standard contain**********/#include<stdio.h>//printf(), #include<stdlib.h>//exit(), atoi(), malloc(), free(), #include<string.h>//strlen(), strcpy(), strchr(), strtok(), /**********debug action**********/#define DEBUG//测试
#ifdef DEBUG#define debug(x...) {printf("/r/033[K");printf(x);fflush(stdout);}#else#define debug(x...) #endif/**********global announce**********///命令结构数组:用来保存 命令名 和 处理函数名CMD_STRUCT cmd_list[]={ {"say", say_cmd}, //聊天命令 {"sendto", say_cmd}, //聊天命令 {"ls", list_cmd}, //列表命令 {"list", list_cmd}, //列表命令 {"help", help_cmd}, //帮助命令 {"cls", cls_cmd}, //清屏命令 {"clear", cls_cmd}, //清屏命令 {"exit", exit_cmd}, //退出 {"quit", exit_cmd}, //退出 };//帮助菜单char *help= "********************************************/n"/ "* say/sendto : 聊天命令 */n"/ "* ls/list : 列表命令 */n"/ "* help : 帮助命令 */n"/ "* cls/clear : 清屏命令 */n"/ "* exit/quit : 退出命令 */n"/ "********************************************/n";/**********function achieve**********///命令处理int cmd_treat(char *cmd_buf){ char *argv[10] = {NULL}; int argc = 0; int i = 0; //命令串为空则退出 if (strlen(cmd_buf) == 0) { return 0; } //用空格和制表符切割命令字符串 /***注意:此种方法受限于 *argv[] 的初始化, 必须确保此指针数组默认全NULL***/ argv[argc] = cmd_buf;//命令缓存存入第一参数指针 while ((argv[argc] = strtok(argv[argc], " /t")) != NULL) {//将命令缓存依次切割并存入参数指针 debug("argv[%d]:%s/n", argc, argv[argc]); argc++; } //查找执行命令 for (i=0; i<(sizeof(cmd_list)/sizeof(CMD_STRUCT)); i++) { //查找命令 if (strcmp(cmd_list[i].cmd_name, argv[0]) == 0) { //执行命令 cmd_list[i].func_tret(argc, argv); return 1; } } return -1;}/*======================================// 执行命令列表========================================*///聊天命令void say_cmd(int argc, char *argv[]){ debug("say_cmd/n");}
//列表命令void list_cmd(int argc, char *argv[]){ debug("list_cmd/n");}
// 帮助命令void help_cmd(int argc, char *argv[]){ //打印帮助菜单 printf("%s", help); }
//清屏命令void cls_cmd(int argc, char *argv[]){ debug("cls_cmd/n"); printf("/033[2J/033[0;0H");}
//退出命令void exit_cmd(int argc, char *argv[]){ debug("exit_cmd/n"); exit(0);}