修复了一些警告,添加了一个xcmd_define.h头文件,添加了一个设置提示的API
This commit is contained in:
parent
a94ae65de8
commit
c85431dc96
|
@ -1,3 +1,11 @@
|
|||
example/linux/build
|
||||
example/linux/xcmder
|
||||
*.map
|
||||
#dir
|
||||
*build/
|
||||
*Output/
|
||||
*DebugConfig/
|
||||
*Listings/
|
||||
|
||||
#file
|
||||
xcmder
|
||||
*.map
|
||||
*.uvoptx
|
||||
*.uvguix*
|
66
inc/xcmd.h
66
inc/xcmd.h
|
@ -8,65 +8,15 @@
|
|||
#include <stdbool.h>
|
||||
#include <math.h>
|
||||
#include <stdarg.h>
|
||||
#include "xcmd_define.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
typedef void(*cmd_func_t)(int argv, char* argc[]);
|
||||
typedef int(*cmd_key_func_t)(void *data);
|
||||
|
||||
typedef enum
|
||||
{
|
||||
CTR_A = 1,
|
||||
CTR_B = 2,
|
||||
CTR_C = 3,
|
||||
CTR_D = 4,
|
||||
CTR_E = 5,
|
||||
CTR_F = 6,
|
||||
CTR_G = 7,
|
||||
CTR_H = 8,
|
||||
BACKSPACE = 8,
|
||||
CTR_I = 9,
|
||||
LF = 9,
|
||||
TAB = 9,
|
||||
CTR_J = 10,
|
||||
CTR_K = 11,
|
||||
CTR_L = 12,
|
||||
CTR_M = 13,
|
||||
CR = 13,
|
||||
CTR_N = 14,
|
||||
CTR_O = 15,
|
||||
CTR_P = 16,
|
||||
CTR_Q = 17,
|
||||
CTR_R = 18,
|
||||
CTR_S = 19,
|
||||
CTR_T = 20,
|
||||
CTR_U = 21,
|
||||
CTR_V = 22,
|
||||
CTR_W = 23,
|
||||
CTR_X = 24,
|
||||
CTR_Y = 25,
|
||||
CTR_Z = 26,
|
||||
ESC = 27,
|
||||
FS = 28,
|
||||
GS = 29,
|
||||
RS = 30,
|
||||
US = 31,
|
||||
L_DELETE = 127,
|
||||
UP = 0x00415B1B,
|
||||
DW = 0x00425B1B,
|
||||
RIGHT = 0x00435B1B,
|
||||
LEFT = 0x00445B1B,
|
||||
END = 0x00465B1B,
|
||||
HOME = 0x00485B1B,
|
||||
INSERT = 0x7E325B1B,
|
||||
R_DELETE = 0x7E335B1B,
|
||||
PGUP = 0x7E355B1B,
|
||||
PGDW = 0x7E365B1B,
|
||||
}XCMD_KEY_T;
|
||||
|
||||
typedef struct __cmd
|
||||
{
|
||||
char* name;
|
||||
|
@ -82,6 +32,7 @@ typedef struct __key
|
|||
struct __key *next;
|
||||
}xcmd_key_t;
|
||||
|
||||
|
||||
/**
|
||||
* @description: 接时期初始化
|
||||
* @param {func*} get_c:获取一个字符的函数
|
||||
|
@ -179,10 +130,21 @@ char* xcmd_display_get(void);
|
|||
*/
|
||||
void xcmd_display_set(const char *msg);
|
||||
|
||||
/**
|
||||
* @description: 光标操作函数
|
||||
* @param {*}
|
||||
* @return {*}
|
||||
*/
|
||||
void xcmd_display_cursor_set(uint16_t pos);
|
||||
|
||||
uint16_t xcmd_display_cursor_get(void);
|
||||
|
||||
/**
|
||||
* @description: 设置命令行提示字符串,此函数并不拷贝字符串,只是记住了传入的指针
|
||||
* @param {char*} prompt
|
||||
* @return {*}
|
||||
*/
|
||||
void xcmd_set_prompt(const char* prompt);
|
||||
|
||||
/**
|
||||
* @description: 获取历史记录的个数
|
||||
* @param {*}
|
||||
|
|
|
@ -23,4 +23,4 @@ extern "C" {
|
|||
}
|
||||
#endif
|
||||
|
||||
#endif /* XCMD_CONFG_H */
|
||||
#endif /* XCMD_CONFG_H */
|
||||
|
|
|
@ -20,4 +20,4 @@ void default_cmds_init(void);
|
|||
}
|
||||
#endif
|
||||
|
||||
#endif /*XCMMD_DEFAULT_CMDS_H*/
|
||||
#endif /*XCMMD_DEFAULT_CMDS_H*/
|
||||
|
|
|
@ -19,4 +19,4 @@ void default_keys_init(void);
|
|||
}
|
||||
#endif
|
||||
|
||||
#endif /* XCMD_DEFAULT_KEYS_H */
|
||||
#endif /* XCMD_DEFAULT_KEYS_H */
|
||||
|
|
|
@ -0,0 +1,95 @@
|
|||
/*
|
||||
* @Author: your name
|
||||
* @Date: 2021-09-20 19:59:05
|
||||
* @LastEditTime: 2021-09-20 20:07:50
|
||||
* @LastEditors: Please set LastEditors
|
||||
* @Description: In User Settings Edit
|
||||
* @FilePath: /xcmd/inc/xcmd_define.h
|
||||
*/
|
||||
|
||||
#ifndef XCMD_DEFINE_H
|
||||
#define XCMD_DEFINE_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef enum
|
||||
{
|
||||
CTR_A = 1,
|
||||
CTR_B = 2,
|
||||
CTR_C = 3,
|
||||
CTR_D = 4,
|
||||
CTR_E = 5,
|
||||
CTR_F = 6,
|
||||
CTR_G = 7,
|
||||
CTR_H = 8,
|
||||
BACKSPACE = 8,
|
||||
CTR_I = 9,
|
||||
LF = 9,
|
||||
TAB = 9,
|
||||
CTR_J = 10,
|
||||
CTR_K = 11,
|
||||
CTR_L = 12,
|
||||
CTR_M = 13,
|
||||
CR = 13,
|
||||
CTR_N = 14,
|
||||
CTR_O = 15,
|
||||
CTR_P = 16,
|
||||
CTR_Q = 17,
|
||||
CTR_R = 18,
|
||||
CTR_S = 19,
|
||||
CTR_T = 20,
|
||||
CTR_U = 21,
|
||||
CTR_V = 22,
|
||||
CTR_W = 23,
|
||||
CTR_X = 24,
|
||||
CTR_Y = 25,
|
||||
CTR_Z = 26,
|
||||
ESC = 27,
|
||||
FS = 28,
|
||||
GS = 29,
|
||||
RS = 30,
|
||||
US = 31,
|
||||
L_DELETE = 127,
|
||||
UP = 0x00415B1B,
|
||||
DW = 0x00425B1B,
|
||||
RIGHT = 0x00435B1B,
|
||||
LEFT = 0x00445B1B,
|
||||
END = 0x00465B1B,
|
||||
HOME = 0x00485B1B,
|
||||
INSERT = 0x7E325B1B,
|
||||
R_DELETE = 0x7E335B1B,
|
||||
PGUP = 0x7E355B1B,
|
||||
PGDW = 0x7E365B1B,
|
||||
}XCMD_KEY_T;
|
||||
|
||||
/*光标操作符,其中0x1B是ESC,只适用于xcmd_print函数*/
|
||||
#define CUU(n) "\x1B[%dA",n /* 光标向上 光标向上 <n> 行 */
|
||||
#define CUD(n) "\x1B[%dB",n /* 光标向下 光标向下 <n> 行 */
|
||||
#define CUF(n) "\x1B[%dC",n /* 光标向前 光标向前(右)<n> 行 */
|
||||
#define CUB(n) "\x1B[%dD",n /* 光标向后 光标向后(左)<n> 行 */
|
||||
#define CNL(n) "\x1B[%dE",n /* 光标下一行 光标从当前位置向下 <n> 行 */
|
||||
#define CPL(n) "\x1B[%dF",n /* 光标当前行 光标从当前位置向上 <n> 行 */
|
||||
#define CHA(n) "\x1B[%dG",n /* 绝对光标水平 光标在当前行中水平移动到第 <n> 个位置 */
|
||||
#define VPA(n) "\x1B[%dd",n /* 绝对垂直行位置 光标在当前列中垂直移动到第 <n> 个位置 */
|
||||
#define CUP(y,x) "\x1B[%d;%dH",y,x /* 光标位置 *光标移动到视区中的 <x>; <y> 坐标,其中 <x> 是 <y> 行的列 */
|
||||
#define HVP(y,x) "\x1B[%d;%df",y,x /* 水平垂直位置 *光标移动到视区中的 <x>; <y> 坐标,其中 <x> 是 <y> 行的列 */
|
||||
|
||||
/*光标可见性*/
|
||||
#define CU_START_BL "\x1B[?12h" /* ATT160 文本光标启用闪烁 开始光标闪烁 */
|
||||
#define CU_STOP_BL "\x1B[?12l" /* ATT160 文本光标禁用闪烁 停止闪烁光标 */
|
||||
#define CU_SHOW "\x1B[?25h" /* DECTCEM 文本光标启用模式显示 显示光标 */
|
||||
#define CU_HIDE "\x1B[?25l" /* DECTCEM 文本光标启用模式隐藏 隐藏光标 */
|
||||
|
||||
/* 字符操作 */
|
||||
#define ICH(n) "\x1B[%d@",n /* 插入字符 在当前光标位置插入 <n> 个空格,这会将所有现有文本移到右侧。 向右溢出屏幕的文本会被删除。*/
|
||||
#define DCH(n) "\x1B[%dP",n /* 删除字符 删除当前光标位置的 <n> 个字符,这会从屏幕右边缘以空格字符移动。*/
|
||||
#define ECH(n) "\x1B[%dX",n /* 擦除字符 擦除当前光标位置的 <n> 个字符,方法是使用空格字符覆盖它们。*/
|
||||
#define IL(n) "\x1B[%dL",n /* 插入行 将 <n> 行插入光标位置的缓冲区。 光标所在的行及其下方的行将向下移动。*/
|
||||
#define DL(n) "\x1B[%dM",n /* 删除行 从缓冲区中删除 <n> 行,从光标所在的行开始。*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif /*XCMD_DEFINE_H*/
|
37
src/xcmd.c
37
src/xcmd.c
|
@ -5,31 +5,6 @@
|
|||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
/*光标操作符,其中0x1B是ESC,只适用于xcmd_print函数*/
|
||||
#define CUU(n) "\x1B[%dA",n /* 光标向上 光标向上 <n> 行 */
|
||||
#define CUD(n) "\x1B[%dB",n /* 光标向下 光标向下 <n> 行 */
|
||||
#define CUF(n) "\x1B[%dC",n /* 光标向前 光标向前(右)<n> 行 */
|
||||
#define CUB(n) "\x1B[%dD",n /* 光标向后 光标向后(左)<n> 行 */
|
||||
#define CNL(n) "\x1B[%dE",n /* 光标下一行 光标从当前位置向下 <n> 行 */
|
||||
#define CPL(n) "\x1B[%dF",n /* 光标当前行 光标从当前位置向上 <n> 行 */
|
||||
#define CHA(n) "\x1B[%dG",n /* 绝对光标水平 光标在当前行中水平移动到第 <n> 个位置 */
|
||||
#define VPA(n) "\x1B[%dd",n /* 绝对垂直行位置 光标在当前列中垂直移动到第 <n> 个位置 */
|
||||
#define CUP(y,x) "\x1B[%d;%dH",y,x /* 光标位置 *光标移动到视区中的 <x>; <y> 坐标,其中 <x> 是 <y> 行的列 */
|
||||
#define HVP(y,x) "\x1B[%d;%df",y,x /* 水平垂直位置 *光标移动到视区中的 <x>; <y> 坐标,其中 <x> 是 <y> 行的列 */
|
||||
|
||||
/*光标可见性*/
|
||||
#define CU_START_BL "\x1B[?12h" /* ATT160 文本光标启用闪烁 开始光标闪烁 */
|
||||
#define CU_STOP_BL "\x1B[?12l" /* ATT160 文本光标禁用闪烁 停止闪烁光标 */
|
||||
#define CU_SHOW "\x1B[?25h" /* DECTCEM 文本光标启用模式显示 显示光标 */
|
||||
#define CU_HIDE "\x1B[?25l" /* DECTCEM 文本光标启用模式隐藏 隐藏光标 */
|
||||
|
||||
/* 字符操作 */
|
||||
#define ICH(n) "\x1B[%d@",n /* 插入字符 在当前光标位置插入 <n> 个空格,这会将所有现有文本移到右侧。 向右溢出屏幕的文本会被删除。*/
|
||||
#define DCH(n) "\x1B[%dP",n /* 删除字符 删除当前光标位置的 <n> 个字符,这会从屏幕右边缘以空格字符移动。*/
|
||||
#define ECH(n) "\x1B[%dX",n /* 擦除字符 擦除当前光标位置的 <n> 个字符,方法是使用空格字符覆盖它们。*/
|
||||
#define IL(n) "\x1B[%dL",n /* 插入行 将 <n> 行插入光标位置的缓冲区。 光标所在的行及其下方的行将向下移动。*/
|
||||
#define DL(n) "\x1B[%dM",n /* 删除行 从缓冲区中删除 <n> 行,从光标所在的行开始。*/
|
||||
|
||||
#define CMD_IS_ENDLINE(c) ((c == '\n') || (c == '\r'))
|
||||
#define CMD_IS_PRINT(c) ((c >= 32) && (c <= 126))
|
||||
|
||||
|
@ -79,7 +54,7 @@ struct
|
|||
#endif
|
||||
|
||||
char display_line[XCMD_LINE_MAX_LENGTH]; /* 显示区的缓存 */
|
||||
char *prompt; /* 显示区的提示 */
|
||||
const char *prompt; /* 显示区的提示 */
|
||||
uint16_t byte_num; /* 当前行的字符个数 */
|
||||
uint16_t cursor; /* 光标所在位置 */
|
||||
uint8_t encode_case_stu;
|
||||
|
@ -264,7 +239,7 @@ static void xcmd_parser(uint8_t byte)
|
|||
}
|
||||
else
|
||||
{
|
||||
xcmd_key_exec(c);
|
||||
xcmd_key_exec((XCMD_KEY_T)c);
|
||||
}
|
||||
fflush(stdout);
|
||||
}
|
||||
|
@ -525,6 +500,14 @@ xcmd_t *xcmd_cmdlist_get(void)
|
|||
return g_xcmder.cmd_list.head;
|
||||
}
|
||||
|
||||
void xcmd_set_prompt(const char* prompt)
|
||||
{
|
||||
if(prompt)
|
||||
{
|
||||
g_xcmder.parser.prompt = prompt;
|
||||
}
|
||||
}
|
||||
|
||||
void xcmd_init( int (*get_c)(uint8_t*), int (*put_c)(uint8_t))
|
||||
{
|
||||
if(get_c && put_c)
|
||||
|
|
|
@ -122,4 +122,4 @@ static xcmd_key_t default_keys[] =
|
|||
void default_keys_init(void)
|
||||
{
|
||||
xcmd_key_register(default_keys, sizeof(default_keys)/sizeof(xcmd_key_t));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue