Modify XCMD print function
This commit is contained in:
parent
6f90dcd5a0
commit
22dd57e08b
34
xcmd/xcmd.c
34
xcmd/xcmd.c
|
@ -1,6 +1,7 @@
|
||||||
#include "xcmd.h"
|
#include "xcmd.h"
|
||||||
#include "malloc.h"
|
#include "malloc.h"
|
||||||
|
|
||||||
|
|
||||||
#define CMD_IS_ENDLINE(c) ((c == '\n') || (c == '\r'))
|
#define CMD_IS_ENDLINE(c) ((c == '\n') || (c == '\r'))
|
||||||
#define CMD_IS_PRINT(c) ((c >= 32) && (c <= 126))
|
#define CMD_IS_PRINT(c) ((c >= 32) && (c <= 126))
|
||||||
|
|
||||||
|
@ -128,13 +129,13 @@ static uint32_t xcmd_bytes_encode(xcmder_t * cmder, uint8_t byte)
|
||||||
static void xcmd_display_update(xcmder_t *cmder)
|
static void xcmd_display_update(xcmder_t *cmder)
|
||||||
{
|
{
|
||||||
char *line = xcmd_display_get(cmder);
|
char *line = xcmd_display_get(cmder);
|
||||||
xcmd_print_str(cmder, "\r->");
|
xcmd_print(cmder, "\r->");
|
||||||
xcmd_print_str(cmder, line);
|
xcmd_print(cmder, line);
|
||||||
xcmd_print_str(cmder, "\r->");
|
xcmd_print(cmder, "\r->");
|
||||||
/* move cursor */
|
/* move cursor */
|
||||||
for(uint16_t i = 0; i<cmder->parser.cursor; i++)
|
for(uint16_t i = 0; i<cmder->parser.cursor; i++)
|
||||||
{
|
{
|
||||||
xcmd_print_str(cmder, "\x1B\x5B\x43");
|
xcmd_print(cmder, "\x1B\x5B\x43");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -157,12 +158,12 @@ static char* xcmd_line_end(xcmder_t *cmder)
|
||||||
}
|
}
|
||||||
cmder->parser.byte_num = 0;
|
cmder->parser.byte_num = 0;
|
||||||
cmder->parser.cursor = 0;
|
cmder->parser.cursor = 0;
|
||||||
xcmd_print_str(cmder, "\r\n");
|
xcmd_print(cmder, "\r\n");
|
||||||
xcmd_history_reset(cmder);
|
xcmd_history_reset(cmder);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
xcmd_print_str(cmder, "\r\n->");
|
xcmd_print(cmder, "\r\n->");
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -191,11 +192,26 @@ static char* xcmd_parser(xcmder_t * cmder, uint8_t byte)
|
||||||
}
|
}
|
||||||
|
|
||||||
void xcmd_print_str(xcmder_t * cmder, char* str)
|
void xcmd_print_str(xcmder_t * cmder, char* str)
|
||||||
{
|
{
|
||||||
while(*str)
|
while(*str)
|
||||||
{
|
{
|
||||||
cmder->io.put_c(*str++);
|
cmder->io.put_c(*str++);
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void xcmd_print(xcmder_t * cmder, const char *fmt, ...)
|
||||||
|
{
|
||||||
|
char ucstring[256] = {0};
|
||||||
|
unsigned short wdatalen;
|
||||||
|
va_list arg;
|
||||||
|
|
||||||
|
va_start(arg, fmt);
|
||||||
|
wdatalen = vsprintf(ucstring, fmt, arg);
|
||||||
|
va_end(arg);
|
||||||
|
|
||||||
|
xcmd_print_str(cmder, ucstring);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
char* xcmd_display_get(xcmder_t *cmder)
|
char* xcmd_display_get(xcmder_t *cmder)
|
||||||
|
@ -210,12 +226,12 @@ void xcmd_display_clear(xcmder_t *cmder)
|
||||||
uint16_t len = strlen(line);
|
uint16_t len = strlen(line);
|
||||||
if(len)
|
if(len)
|
||||||
{
|
{
|
||||||
xcmd_print_str(cmder, "\r->");
|
xcmd_print(cmder, "\r->");
|
||||||
for(uint16_t i=0; i<len; i++)
|
for(uint16_t i=0; i<len; i++)
|
||||||
{
|
{
|
||||||
cmder->io.put_c(' ');
|
cmder->io.put_c(' ');
|
||||||
}
|
}
|
||||||
xcmd_print_str(cmder, "\r->");
|
xcmd_print(cmder, "\r->");
|
||||||
cmder->parser.byte_num = 0;
|
cmder->parser.byte_num = 0;
|
||||||
cmder->parser.cursor = 0;
|
cmder->parser.cursor = 0;
|
||||||
line[0] = '\0';
|
line[0] = '\0';
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
typedef void(*cmd_func_t)(int argv, char* argc[]);
|
typedef void(*cmd_func_t)(int argv, char* argc[]);
|
||||||
typedef int(*cmd_key_func_t)(void *data);
|
typedef int(*cmd_key_func_t)(void *data);
|
||||||
|
@ -190,7 +191,8 @@ uint8_t xcmd_exec(xcmder_t *cmder, char *str);
|
||||||
* @param {char*} str
|
* @param {char*} str
|
||||||
* @return 无
|
* @return 无
|
||||||
*/
|
*/
|
||||||
void xcmd_print_str(xcmder_t * cmder, char* str);
|
void xcmd_print(xcmder_t * cmder, const char *fmt, ...);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description: 向显示器插入一个字符
|
* @description: 向显示器插入一个字符
|
||||||
|
|
|
@ -5,7 +5,7 @@ static xcmder_t *g_cmder = NULL;
|
||||||
|
|
||||||
static void cmd_clear(int argc, char* argv[])
|
static void cmd_clear(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
printf("\033c");
|
xcmd_print(g_cmder, "\033c");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cmd_help(int argc, char* argv[])
|
static void cmd_help(int argc, char* argv[])
|
||||||
|
@ -13,7 +13,7 @@ static void cmd_help(int argc, char* argv[])
|
||||||
xcmd_t *p = g_cmder->cmd_list.next;
|
xcmd_t *p = g_cmder->cmd_list.next;
|
||||||
while(p)
|
while(p)
|
||||||
{
|
{
|
||||||
printf("%-20s %s\r\n",p->name, p->help);
|
xcmd_print(g_cmder, "%-20s %s\r\n",p->name, p->help);
|
||||||
p = p->next;
|
p = p->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@ static void cmd_logo(int argc, char* argv[])
|
||||||
( \\/ )/ __)( \\/ )( _ \\ \n\
|
( \\/ )/ __)( \\/ )( _ \\ \n\
|
||||||
) (( (__ ) ( )(_) )\n\
|
) (( (__ ) ( )(_) )\n\
|
||||||
(_/\\_)\\___)(_/\\/\\_)(____/\n ";
|
(_/\\_)\\___)(_/\\/\\_)(____/\n ";
|
||||||
printf("%s", log);
|
xcmd_print(g_cmder, "%s", log);
|
||||||
}
|
}
|
||||||
|
|
||||||
static xcmd_t cmds[] =
|
static xcmd_t cmds[] =
|
||||||
|
|
|
@ -24,7 +24,7 @@ static int xcmd_cursor_left(void *pv)
|
||||||
if(cmder->parser.cursor > 0)
|
if(cmder->parser.cursor > 0)
|
||||||
{
|
{
|
||||||
cmder->parser.cursor--;
|
cmder->parser.cursor--;
|
||||||
xcmd_print_str(cmder, STR_LEFT);
|
xcmd_print(cmder, STR_LEFT);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -35,7 +35,7 @@ static int xcmd_cursor_right(void *pv)
|
||||||
if(cmder->parser.cursor < cmder->parser.byte_num)
|
if(cmder->parser.cursor < cmder->parser.byte_num)
|
||||||
{
|
{
|
||||||
cmder->parser.cursor++;
|
cmder->parser.cursor++;
|
||||||
xcmd_print_str(cmder, STR_RIGHT);
|
xcmd_print(cmder, STR_RIGHT);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -52,7 +52,7 @@ static int xcmd_history_dw(void *pv)
|
||||||
if (len)
|
if (len)
|
||||||
{
|
{
|
||||||
strncpy(display_line, line, cmder->parser.line_len);
|
strncpy(display_line, line, cmder->parser.line_len);
|
||||||
xcmd_print_str(cmder, line);
|
xcmd_print(cmder, line);
|
||||||
cmder->parser.byte_num = len;
|
cmder->parser.byte_num = len;
|
||||||
cmder->parser.cursor = len;
|
cmder->parser.cursor = len;
|
||||||
}
|
}
|
||||||
|
@ -76,7 +76,7 @@ static int xcmd_history_up(void *pv)
|
||||||
if (len)
|
if (len)
|
||||||
{
|
{
|
||||||
strncpy(display_line, line, cmder->parser.line_len);
|
strncpy(display_line, line, cmder->parser.line_len);
|
||||||
xcmd_print_str(cmder, line);
|
xcmd_print(cmder, line);
|
||||||
cmder->parser.byte_num = len;
|
cmder->parser.byte_num = len;
|
||||||
cmder->parser.cursor = len;
|
cmder->parser.cursor = len;
|
||||||
}
|
}
|
||||||
|
@ -84,13 +84,31 @@ static int xcmd_history_up(void *pv)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int xcmd_auto_completion(void *pv)
|
||||||
|
{
|
||||||
|
|
||||||
|
xcmder_t *cmder = (xcmder_t*)pv;
|
||||||
|
char *pdat = xcmd_display_get(cmder);
|
||||||
|
|
||||||
|
xcmd_t *p = cmder->cmd_list.next;
|
||||||
|
while(p)
|
||||||
|
{
|
||||||
|
printf("%-20s %s\r\n",p->name, p->help);
|
||||||
|
p = p->next;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static xcmd_key_t default_keys[] =
|
static xcmd_key_t default_keys[] =
|
||||||
{
|
{
|
||||||
{L_DELETE, xcmd_del_char, NULL},
|
{BACKSPACE, xcmd_del_char, NULL},
|
||||||
{LEFT, xcmd_cursor_left, NULL},
|
{L_DELETE, xcmd_del_char, NULL},
|
||||||
{RIGHT, xcmd_cursor_right, NULL},
|
{LEFT, xcmd_cursor_left, NULL},
|
||||||
{DW, xcmd_history_dw, NULL},
|
{RIGHT, xcmd_cursor_right, NULL},
|
||||||
{UP, xcmd_history_up, NULL},
|
{DW, xcmd_history_dw, NULL},
|
||||||
|
{UP, xcmd_history_up, NULL},
|
||||||
|
{TAB, xcmd_auto_completion, NULL},
|
||||||
};
|
};
|
||||||
|
|
||||||
void default_keys_init(xcmder_t *cmder)
|
void default_keys_init(xcmder_t *cmder)
|
||||||
|
|
Loading…
Reference in New Issue