修复了一些警告,添加了一个xcmd_define.h头文件,添加了一个设置提示的API
This commit is contained in:
parent
a94ae65de8
commit
c85431dc96
|
@ -1,3 +1,11 @@
|
||||||
example/linux/build
|
#dir
|
||||||
example/linux/xcmder
|
*build/
|
||||||
|
*Output/
|
||||||
|
*DebugConfig/
|
||||||
|
*Listings/
|
||||||
|
|
||||||
|
#file
|
||||||
|
xcmder
|
||||||
*.map
|
*.map
|
||||||
|
*.uvoptx
|
||||||
|
*.uvguix*
|
66
inc/xcmd.h
66
inc/xcmd.h
|
@ -8,65 +8,15 @@
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
#include "xcmd_define.h"
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
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);
|
||||||
|
|
||||||
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
|
typedef struct __cmd
|
||||||
{
|
{
|
||||||
char* name;
|
char* name;
|
||||||
|
@ -82,6 +32,7 @@ typedef struct __key
|
||||||
struct __key *next;
|
struct __key *next;
|
||||||
}xcmd_key_t;
|
}xcmd_key_t;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description: 接时期初始化
|
* @description: 接时期初始化
|
||||||
* @param {func*} get_c:获取一个字符的函数
|
* @param {func*} get_c:获取一个字符的函数
|
||||||
|
@ -179,10 +130,21 @@ char* xcmd_display_get(void);
|
||||||
*/
|
*/
|
||||||
void xcmd_display_set(const char *msg);
|
void xcmd_display_set(const char *msg);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description: 光标操作函数
|
||||||
|
* @param {*}
|
||||||
|
* @return {*}
|
||||||
|
*/
|
||||||
void xcmd_display_cursor_set(uint16_t pos);
|
void xcmd_display_cursor_set(uint16_t pos);
|
||||||
|
|
||||||
uint16_t xcmd_display_cursor_get(void);
|
uint16_t xcmd_display_cursor_get(void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description: 设置命令行提示字符串,此函数并不拷贝字符串,只是记住了传入的指针
|
||||||
|
* @param {char*} prompt
|
||||||
|
* @return {*}
|
||||||
|
*/
|
||||||
|
void xcmd_set_prompt(const char* prompt);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description: 获取历史记录的个数
|
* @description: 获取历史记录的个数
|
||||||
* @param {*}
|
* @param {*}
|
||||||
|
|
|
@ -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 <stdlib.h>
|
||||||
#include <stdio.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_ENDLINE(c) ((c == '\n') || (c == '\r'))
|
||||||
#define CMD_IS_PRINT(c) ((c >= 32) && (c <= 126))
|
#define CMD_IS_PRINT(c) ((c >= 32) && (c <= 126))
|
||||||
|
|
||||||
|
@ -79,7 +54,7 @@ struct
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
char display_line[XCMD_LINE_MAX_LENGTH]; /* 显示区的缓存 */
|
char display_line[XCMD_LINE_MAX_LENGTH]; /* 显示区的缓存 */
|
||||||
char *prompt; /* 显示区的提示 */
|
const char *prompt; /* 显示区的提示 */
|
||||||
uint16_t byte_num; /* 当前行的字符个数 */
|
uint16_t byte_num; /* 当前行的字符个数 */
|
||||||
uint16_t cursor; /* 光标所在位置 */
|
uint16_t cursor; /* 光标所在位置 */
|
||||||
uint8_t encode_case_stu;
|
uint8_t encode_case_stu;
|
||||||
|
@ -264,7 +239,7 @@ static void xcmd_parser(uint8_t byte)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
xcmd_key_exec(c);
|
xcmd_key_exec((XCMD_KEY_T)c);
|
||||||
}
|
}
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
}
|
}
|
||||||
|
@ -525,6 +500,14 @@ xcmd_t *xcmd_cmdlist_get(void)
|
||||||
return g_xcmder.cmd_list.head;
|
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))
|
void xcmd_init( int (*get_c)(uint8_t*), int (*put_c)(uint8_t))
|
||||||
{
|
{
|
||||||
if(get_c && put_c)
|
if(get_c && put_c)
|
||||||
|
|
Loading…
Reference in New Issue