修复了一些警告,添加了一个xcmd_define.h头文件,添加了一个设置提示的API

This commit is contained in:
hqm 2021-09-20 20:40:02 +08:00
parent a94ae65de8
commit c85431dc96
8 changed files with 134 additions and 86 deletions

14
.gitignore vendored
View File

@ -1,3 +1,11 @@
example/linux/build
example/linux/xcmder
*.map
#dir
*build/
*Output/
*DebugConfig/
*Listings/
#file
xcmder
*.map
*.uvoptx
*.uvguix*

View File

@ -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 {*}

View File

@ -23,4 +23,4 @@ extern "C" {
}
#endif
#endif /* XCMD_CONFG_H */
#endif /* XCMD_CONFG_H */

View File

@ -20,4 +20,4 @@ void default_cmds_init(void);
}
#endif
#endif /*XCMMD_DEFAULT_CMDS_H*/
#endif /*XCMMD_DEFAULT_CMDS_H*/

View File

@ -19,4 +19,4 @@ void default_keys_init(void);
}
#endif
#endif /* XCMD_DEFAULT_KEYS_H */
#endif /* XCMD_DEFAULT_KEYS_H */

95
inc/xcmd_define.h Normal file
View File

@ -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*/

View File

@ -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)

View File

@ -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));
}
}