916 lines
17 KiB
C
916 lines
17 KiB
C
|
|
|
|||
|
|
#define _IN_CONSOLE_C
|
|||
|
|
#include "console.h"
|
|||
|
|
#include "serial.h"
|
|||
|
|
#include "trigger.h"
|
|||
|
|
#include "cpuid.h"
|
|||
|
|
|
|||
|
|
//---------------------------------------------------------------------------------------------
|
|||
|
|
|
|||
|
|
int g_useQueue = 1; // = 0, <20><>ʹ<EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD>= 1<><31>ʹ<EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
//---------------------------------------------------------------------------------------------
|
|||
|
|
void SetConsoleOutType(int type)
|
|||
|
|
{
|
|||
|
|
if (type != 0)
|
|||
|
|
{
|
|||
|
|
g_useQueue = 1;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
g_useQueue = 0;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//---------------------------------------------------------------------------------------------
|
|||
|
|
|
|||
|
|
int SendData(u8 * pDatBuf, int len)
|
|||
|
|
{
|
|||
|
|
if (g_useQueue == 1)
|
|||
|
|
{
|
|||
|
|
#if (CONSOLE_PORT == COMM_USART1)
|
|||
|
|
return Usart1SendData(pDatBuf, len);
|
|||
|
|
#elif (CONSOLE_PORT == COMM_USART2)
|
|||
|
|
return Usart2SendData(pDatBuf, len);
|
|||
|
|
#elif (CONSOLE_PORT == COMM_USART3)
|
|||
|
|
return Usart3SendData(pDatBuf, len);
|
|||
|
|
#elif (CONSOLE_PORT == COMM_USART4)
|
|||
|
|
return Usart4SendData(pDatBuf, len);
|
|||
|
|
#elif (CONSOLE_PORT == COMM_USART5)
|
|||
|
|
return Usart5SendData(pDatBuf, len);
|
|||
|
|
#elif (CONSOLE_PORT == COMM_USART6)
|
|||
|
|
return Usart6SendData(pDatBuf, len);
|
|||
|
|
#else
|
|||
|
|
return 0;
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
#if (CONSOLE_PORT == COMM_USART1)
|
|||
|
|
return Usart1SendDataSync(pDatBuf, len);
|
|||
|
|
#elif (CONSOLE_PORT == COMM_USART2)
|
|||
|
|
return Usart2SendDataSync(pDatBuf, len);
|
|||
|
|
#elif (CONSOLE_PORT == COMM_USART3)
|
|||
|
|
return Usart3SendDataSync(pDatBuf, len);
|
|||
|
|
#elif (CONSOLE_PORT == COMM_USART4)
|
|||
|
|
return Usart4SendDataSync(pDatBuf, len);
|
|||
|
|
#elif (CONSOLE_PORT == COMM_USART5)
|
|||
|
|
return Usart5SendDataSync(pDatBuf, len);
|
|||
|
|
#elif (CONSOLE_PORT == COMM_USART6)
|
|||
|
|
return Usart6SendDataSync(pDatBuf, len);
|
|||
|
|
#else
|
|||
|
|
return 0;
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int ResvData(u8 * pDat, int expectLen)
|
|||
|
|
{
|
|||
|
|
if (g_useQueue == 1)
|
|||
|
|
{
|
|||
|
|
#if (CONSOLE_PORT == COMM_USART1)
|
|||
|
|
return Usart1GetData(pDat, expectLen);
|
|||
|
|
#elif (CONSOLE_PORT == COMM_USART2)
|
|||
|
|
return Usart2GetData(pDat, expectLen);
|
|||
|
|
#elif (CONSOLE_PORT == COMM_USART3)
|
|||
|
|
return Usart3GetData(pDat, expectLen);
|
|||
|
|
#elif (CONSOLE_PORT == COMM_USART4)
|
|||
|
|
return Usart4GetData(pDat, expectLen);
|
|||
|
|
#elif (CONSOLE_PORT == COMM_USART5)
|
|||
|
|
return Usart5GetData(pDat, expectLen);
|
|||
|
|
#elif (CONSOLE_PORT == COMM_USART6)
|
|||
|
|
return Usart6GetData(pDat, expectLen);
|
|||
|
|
#else
|
|||
|
|
return 0;
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
#if (CONSOLE_PORT == COMM_USART1)
|
|||
|
|
return Usart1GetDataSync(pDat, expectLen);
|
|||
|
|
#elif (CONSOLE_PORT == COMM_USART2)
|
|||
|
|
return Usart2GetDataSync(pDat, expectLen);
|
|||
|
|
#elif (CONSOLE_PORT == COMM_USART3)
|
|||
|
|
return Usart3GetDataSync(pDat, expectLen);
|
|||
|
|
#elif (CONSOLE_PORT == COMM_USART4)
|
|||
|
|
return Usart4GetDataSync(pDat, expectLen);
|
|||
|
|
#elif (CONSOLE_PORT == COMM_USART5)
|
|||
|
|
return Usart5GetDataSync(pDat, expectLen);
|
|||
|
|
#elif (CONSOLE_PORT == COMM_USART6)
|
|||
|
|
return Usart6GetDataSync(pDat, expectLen);
|
|||
|
|
#else
|
|||
|
|
return 0;
|
|||
|
|
#endif
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ѡ<EFBFBD><D1A1>
|
|||
|
|
#if (CONSOLE_PORT == COMM_USART1)
|
|||
|
|
|
|||
|
|
#define INIT_USART InitUsart1
|
|||
|
|
|
|||
|
|
#elif (CONSOLE_PORT == COMM_USART2)
|
|||
|
|
|
|||
|
|
#define INIT_USART InitUsart2
|
|||
|
|
|
|||
|
|
#elif (CONSOLE_PORT == COMM_USART3)
|
|||
|
|
|
|||
|
|
#define INIT_USART InitUsart3
|
|||
|
|
|
|||
|
|
#elif (CONSOLE_PORT == COMM_USART4)
|
|||
|
|
|
|||
|
|
#define INIT_USART InitUsart4
|
|||
|
|
|
|||
|
|
#elif (CONSOLE_PORT == COMM_USART5)
|
|||
|
|
|
|||
|
|
#define INIT_USART InitUsart5
|
|||
|
|
|
|||
|
|
#elif (CONSOLE_PORT == COMM_USART6)
|
|||
|
|
|
|||
|
|
#define INIT_USART InitUsart6
|
|||
|
|
|
|||
|
|
#else
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
//---------------------------------------------------------------------------------------------
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>
|
|||
|
|
|
|||
|
|
#include <stdio.h>
|
|||
|
|
#include <string.h>
|
|||
|
|
|
|||
|
|
#if defined ( __CC_ARM )
|
|||
|
|
|
|||
|
|
#pragma import(__use_no_semihosting_swi)
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><D7BC><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA>֧<EFBFBD>ֺ<EFBFBD><D6BA><EFBFBD>
|
|||
|
|
|
|||
|
|
struct __FILE
|
|||
|
|
{
|
|||
|
|
int handle;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
FILE __stdout;
|
|||
|
|
FILE __stdin;
|
|||
|
|
|
|||
|
|
// <20>ض<EFBFBD><D8B6><EFBFBD> fputc <20><><EFBFBD><EFBFBD>
|
|||
|
|
int fputc(int ch, FILE *f)
|
|||
|
|
{
|
|||
|
|
u8 c = (u8)ch;
|
|||
|
|
SendData(&c, 1);
|
|||
|
|
return ch;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20>ض<EFBFBD><D8B6><EFBFBD> fgetc <20><><EFBFBD><EFBFBD>
|
|||
|
|
int fgetc(FILE *f)
|
|||
|
|
{
|
|||
|
|
int ch;
|
|||
|
|
u8 c;
|
|||
|
|
|
|||
|
|
ch = ResvData(&c, 1);
|
|||
|
|
if (ch == 1)
|
|||
|
|
{
|
|||
|
|
#if (0) // <20><><EFBFBD><EFBFBD>
|
|||
|
|
SendData(&c, 1);
|
|||
|
|
#endif
|
|||
|
|
return c;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int ferror(FILE *f)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD>
|
|||
|
|
return EOF;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
void _ttywrch(int ch)
|
|||
|
|
{
|
|||
|
|
u8 c = (u8)ch;
|
|||
|
|
SendData(&c, 1);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void _sys_exit(int return_code)
|
|||
|
|
{
|
|||
|
|
while (1);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#define GETCHAR getchar
|
|||
|
|
#define PUTCHAR putchar
|
|||
|
|
|
|||
|
|
#elif defined ( __GNUC__ )
|
|||
|
|
|
|||
|
|
int __io_putchar(int ch)
|
|||
|
|
{
|
|||
|
|
u8 c;
|
|||
|
|
c = ch;
|
|||
|
|
SendData(&c, 1);
|
|||
|
|
return ch;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int __io_getchar(void)
|
|||
|
|
{
|
|||
|
|
int ch;
|
|||
|
|
u8 c;
|
|||
|
|
|
|||
|
|
ch = ResvData(&c, 1);
|
|||
|
|
if (ch == 1)
|
|||
|
|
{
|
|||
|
|
ch = (int)c;
|
|||
|
|
return ch;
|
|||
|
|
}
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int _read(int file, char *ptr, int len)
|
|||
|
|
{
|
|||
|
|
int rslt;
|
|||
|
|
rslt = ResvData((u8*)ptr, len);
|
|||
|
|
return rslt;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int _write(int file, char *ptr, int len)
|
|||
|
|
{
|
|||
|
|
SendData((u8*)ptr, len);
|
|||
|
|
return len;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#define PUTCHAR __io_putchar
|
|||
|
|
#define GETCHAR __io_getchar
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
|
|||
|
|
int PutChar(int ch)
|
|||
|
|
{
|
|||
|
|
return PUTCHAR(ch);
|
|||
|
|
}
|
|||
|
|
int GetChar(void)
|
|||
|
|
{
|
|||
|
|
return GETCHAR();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//---------------------------------------------------------------------------------------------
|
|||
|
|
|
|||
|
|
|
|||
|
|
typedef struct
|
|||
|
|
{
|
|||
|
|
int pause; // <20><>ͣ
|
|||
|
|
int newCmd; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
|
|||
|
|
int cmdExec; // <20><><EFBFBD><EFBFBD>ִ<EFBFBD>б<EFBFBD>־
|
|||
|
|
int cancel; // <20><><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>ִ<EFBFBD>б<EFBFBD>־
|
|||
|
|
char command[MAX_CMD_LINE]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
int cmdInCtrl; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
|||
|
|
int cmdPointer; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
|
int cmdLen; // <20><><EFBFBD><EFBFBD><EEB3A4>
|
|||
|
|
char cmdBuf[MAX_CMD_LINE]; // <20><><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD>
|
|||
|
|
}CmdLine;
|
|||
|
|
|
|||
|
|
CmdLine g_cmdLine;
|
|||
|
|
|
|||
|
|
|
|||
|
|
//---------------------------------------------------------------------------------------------
|
|||
|
|
int IsNewCommand(void)
|
|||
|
|
{
|
|||
|
|
return g_cmdLine.newCmd;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int LockExecAndGetCmdStr(char*pBuf)
|
|||
|
|
{
|
|||
|
|
int len;
|
|||
|
|
EnterCritical();
|
|||
|
|
len = g_cmdLine.cmdLen;
|
|||
|
|
g_cmdLine.cmdExec = 1;
|
|||
|
|
g_cmdLine.newCmd = 0;
|
|||
|
|
ExitCritical();
|
|||
|
|
|
|||
|
|
memcpy(pBuf, g_cmdLine.command, len);
|
|||
|
|
|
|||
|
|
return len;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void UnlockExec(void)
|
|||
|
|
{
|
|||
|
|
g_cmdLine.cmdExec = 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void SetPauseStatus(int sta)
|
|||
|
|
{
|
|||
|
|
if (sta != 0)
|
|||
|
|
{
|
|||
|
|
g_cmdLine.pause = 1;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
g_cmdLine.pause = 0;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//---------------------------------------------------------------------------------------------
|
|||
|
|
// ѭ<><D1AD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
#define HISTORY_CMD_NUM 10 // <20><>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
char g_cmdHistory[HISTORY_CMD_NUM][MAX_CMD_LINE];
|
|||
|
|
int g_cmdHisIdx = 0; // <20><>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
|
int g_cmdHisNum = 0; // <20><>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
int g_cmdHisSer = -1; // <20><>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
int g_cursorNum = 0; // 20220412
|
|||
|
|
|
|||
|
|
void InitHistory(void)
|
|||
|
|
{
|
|||
|
|
g_cmdHisIdx = 0; // <20><>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
|
g_cmdHisNum = 0; // <20><>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
g_cmdHisSer = -1; // <20><>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
g_cursorNum = 0;
|
|||
|
|
|
|||
|
|
memset(g_cmdHistory, 0, HISTORY_CMD_NUM*MAX_CMD_LINE);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void AddNewCmdToHistory(char * pCmd)
|
|||
|
|
{
|
|||
|
|
if (pCmd != NULL)
|
|||
|
|
{
|
|||
|
|
// <20>жϵ<D0B6>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD><D1B4><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><CEB2>
|
|||
|
|
for (int i = 0; i < g_cmdHisNum; i++)
|
|||
|
|
{
|
|||
|
|
if (strcmp(&(g_cmdHistory[i][0]), pCmd) == 0) // <20>Ѵ<EFBFBD><D1B4><EFBFBD>
|
|||
|
|
{
|
|||
|
|
int temp1, temp2;
|
|||
|
|
int count;
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><CEB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (i >= g_cmdHisIdx)
|
|||
|
|
{
|
|||
|
|
count = g_cmdHisNum - (i - g_cmdHisIdx);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
count = g_cmdHisIdx - i;
|
|||
|
|
}
|
|||
|
|
count--;
|
|||
|
|
// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
|
|||
|
|
for (int j = 0; j < count; j++)
|
|||
|
|
{
|
|||
|
|
temp1 = i + j;
|
|||
|
|
temp2 = temp1 + 1;
|
|||
|
|
if (temp1 >= g_cmdHisNum)
|
|||
|
|
{
|
|||
|
|
temp1 -= g_cmdHisNum;
|
|||
|
|
}
|
|||
|
|
if (temp2 >= g_cmdHisNum)
|
|||
|
|
{
|
|||
|
|
temp2 -= g_cmdHisNum;
|
|||
|
|
}
|
|||
|
|
memset(&(g_cmdHistory[temp1][0]), 0, MAX_CMD_LINE);
|
|||
|
|
strcpy(&(g_cmdHistory[temp1][0]), &(g_cmdHistory[temp2][0]));
|
|||
|
|
if (j == (count - 1))
|
|||
|
|
{
|
|||
|
|
memset(&(g_cmdHistory[temp2][0]), 0, MAX_CMD_LINE);
|
|||
|
|
strcpy(&(g_cmdHistory[temp2][0]), pCmd);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (g_cmdHisIdx >= HISTORY_CMD_NUM)
|
|||
|
|
{
|
|||
|
|
g_cmdHisIdx = 0;
|
|||
|
|
}
|
|||
|
|
memset(&(g_cmdHistory[g_cmdHisIdx][0]), 0, MAX_CMD_LINE);
|
|||
|
|
strcpy(&(g_cmdHistory[g_cmdHisIdx][0]), pCmd);
|
|||
|
|
g_cmdHisIdx++;
|
|||
|
|
if (g_cmdHisNum < HISTORY_CMD_NUM)
|
|||
|
|
{
|
|||
|
|
g_cmdHisNum++;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20>Ϲ<EFBFBD><CFB9>괦<EFBFBD><EAB4A6>
|
|||
|
|
void UpCursorProc(void)
|
|||
|
|
{
|
|||
|
|
if (g_cursorNum > 0)
|
|||
|
|
{
|
|||
|
|
g_cursorNum--;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
g_cmdHisSer--;
|
|||
|
|
if (g_cmdHisSer < 0)
|
|||
|
|
{
|
|||
|
|
g_cmdHisSer = g_cmdHisNum - 1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (1)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
while (g_cmdLine.cmdPointer != 0)
|
|||
|
|
{
|
|||
|
|
PUTCHAR(0x08); // <20><><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD>
|
|||
|
|
PUTCHAR(' '); // <20><><EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD>
|
|||
|
|
PUTCHAR(0x08); // <20><><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD>
|
|||
|
|
g_cmdLine.cmdPointer--;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><>ʾ<EFBFBD><CABE>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>
|
|||
|
|
if (g_cmdLine.cmdExec == 0 && g_cmdLine.newCmd == 0)
|
|||
|
|
{
|
|||
|
|
char ch;
|
|||
|
|
for (int i = 0; i < MAX_CMD_LINE; i++)
|
|||
|
|
{
|
|||
|
|
ch = g_cmdHistory[g_cmdHisSer][i];
|
|||
|
|
if (ch > 0x1F && ch < 0x7F) // <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
if (g_cmdLine.cmdPointer < MAX_CMD_LINE-1)
|
|||
|
|
{
|
|||
|
|
PUTCHAR(ch); // <20><><EFBFBD><EFBFBD>ʾ
|
|||
|
|
g_cmdLine.cmdBuf[g_cmdLine.cmdPointer] = ch;
|
|||
|
|
g_cmdLine.cmdPointer++;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
g_cmdLine.cmdPointer = 0;
|
|||
|
|
g_cmdLine.cmdBuf[0] = 0;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20>¹<EFBFBD><C2B9>괦<EFBFBD><EAB4A6>
|
|||
|
|
void DownCursorProc(void)
|
|||
|
|
{
|
|||
|
|
if (g_cursorNum < g_cmdHisNum)
|
|||
|
|
{
|
|||
|
|
g_cursorNum++;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
g_cmdHisSer++;
|
|||
|
|
|
|||
|
|
if (g_cursorNum == g_cmdHisNum)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
while (g_cmdLine.cmdPointer != 0)
|
|||
|
|
{
|
|||
|
|
PUTCHAR(0x08); // <20><><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD>
|
|||
|
|
PUTCHAR(' '); // <20><><EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD>
|
|||
|
|
PUTCHAR(0x08); // <20><><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD>
|
|||
|
|
g_cmdLine.cmdPointer--;
|
|||
|
|
}
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (g_cmdHisSer >= g_cmdHisNum)
|
|||
|
|
{
|
|||
|
|
g_cmdHisSer = 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (1)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
while (g_cmdLine.cmdPointer != 0)
|
|||
|
|
{
|
|||
|
|
PUTCHAR(0x08); // <20><><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD>
|
|||
|
|
PUTCHAR(' '); // <20><><EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD>
|
|||
|
|
PUTCHAR(0x08); // <20><><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD>
|
|||
|
|
g_cmdLine.cmdPointer--;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><>ʾ<EFBFBD><CABE>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>
|
|||
|
|
if (g_cmdLine.cmdExec == 0 && g_cmdLine.newCmd == 0)
|
|||
|
|
{
|
|||
|
|
char ch;
|
|||
|
|
for (int i = 0; i < MAX_CMD_LINE; i++)
|
|||
|
|
{
|
|||
|
|
ch = g_cmdHistory[g_cmdHisSer][i];
|
|||
|
|
if (ch > 0x1F && ch < 0x7F) // <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
if (g_cmdLine.cmdPointer < MAX_CMD_LINE-1)
|
|||
|
|
{
|
|||
|
|
PUTCHAR(ch); // <20><><EFBFBD><EFBFBD>ʾ
|
|||
|
|
g_cmdLine.cmdBuf[g_cmdLine.cmdPointer] = ch;
|
|||
|
|
g_cmdLine.cmdPointer++;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
g_cmdLine.cmdPointer = 0;
|
|||
|
|
g_cmdLine.cmdBuf[0] = 0;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//---------------------------------------------------------------------------------------------
|
|||
|
|
|
|||
|
|
void OutNewCmdLine(void)
|
|||
|
|
{
|
|||
|
|
g_cmdLine.cmdPointer = 0; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>
|
|||
|
|
g_cmdLine.cmdLen = 0; // <20><><EFBFBD><EFBFBD><EEB3A4>
|
|||
|
|
|
|||
|
|
PUTCHAR(0x0D); // <20>س<EFBFBD>
|
|||
|
|
PUTCHAR(0x0A); // <20><><EFBFBD><EFBFBD>
|
|||
|
|
PUTCHAR('C');
|
|||
|
|
PUTCHAR('M');
|
|||
|
|
PUTCHAR('D');
|
|||
|
|
PUTCHAR(':');
|
|||
|
|
PUTCHAR('>');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//---------------------------------------------------------------------------------------------
|
|||
|
|
|
|||
|
|
void InitConsole(void)
|
|||
|
|
{
|
|||
|
|
InitTrigger();
|
|||
|
|
#if (CONSOLE_PORT != COMM_NONE)
|
|||
|
|
INIT_USART(B115200, '8', 'N', '1');
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
AddTriggerToList(10, ConsoleCmdScan, NULL); // 10ms <20><>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>̨
|
|||
|
|
|
|||
|
|
printf("\x0c"); // <20><><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><D5B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
printf("\033[1;40;32m"); // <20><><EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD>ն˱<D5B6><CBB1><EFBFBD>Ϊ<EFBFBD><CEAA>ɫ<EFBFBD><C9AB><EFBFBD>ַ<EFBFBD>Ϊ<EFBFBD><CEAA>ɫ
|
|||
|
|
printf("\x0c"); // <20><><EFBFBD><EFBFBD><EFBFBD>ն<EFBFBD><D5B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
memset(&g_cmdLine, 0, sizeof(CmdLine));
|
|||
|
|
|
|||
|
|
g_useQueue = 1; // = 0, <20><>ʹ<EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD>ڷ<EFBFBD><DAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɡ<EFBFBD>= 1<><31>ʹ<EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
InitHistory();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժͼ<D4BA><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
void ConsoleCmdScan()
|
|||
|
|
{
|
|||
|
|
int ch;
|
|||
|
|
|
|||
|
|
if (g_cmdLine.pause != 0)
|
|||
|
|
{
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
ch = GETCHAR();
|
|||
|
|
if (ch < 0)
|
|||
|
|
{
|
|||
|
|
g_cmdLine.cmdInCtrl = 0;
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EEB4A6>
|
|||
|
|
switch(ch)
|
|||
|
|
{
|
|||
|
|
case 0x00: // NUL (Null char)
|
|||
|
|
case 0x01: // SOH (Start of Header) <20><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
|
|||
|
|
case 0x02: // STX (Start of Text) <20>ı<EFBFBD><C4B1><EFBFBD>ʼ
|
|||
|
|
ch = ch;
|
|||
|
|
break;
|
|||
|
|
case 0x03: // ETX (End of Text) <20>ı<EFBFBD>β
|
|||
|
|
if (g_cmdLine.cmdExec == TRUE) // ctrl+C Ϊ<><CEAA>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
OutNewCmdLine();
|
|||
|
|
g_cmdLine.cancel = 1;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case 0x04: // EOT (End of Transmission) <20><><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD>
|
|||
|
|
case 0x05: // ENQ (Enquiry)
|
|||
|
|
case 0x06: // ACK (Acknowledgment) ȷ<><C8B7>
|
|||
|
|
case 0x07: // BEL (Bell) <20><><EFBFBD><EFBFBD>
|
|||
|
|
ch = ch;
|
|||
|
|
break;
|
|||
|
|
case 0x08: // BS (Backspace) <20>˸<EFBFBD>
|
|||
|
|
if (g_cmdLine.cmdPointer != 0)
|
|||
|
|
{
|
|||
|
|
PUTCHAR(0x08); // <20><><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD>
|
|||
|
|
PUTCHAR(' '); // <20><><EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD>
|
|||
|
|
PUTCHAR(0x08); // <20><><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD>
|
|||
|
|
g_cmdLine.cmdPointer--;
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case 0x09: // HT (Horizontal Tab)
|
|||
|
|
// <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>ȫ......
|
|||
|
|
break;
|
|||
|
|
case 0x0A: // LF (Line Feed) <20><><EFBFBD><EFBFBD>
|
|||
|
|
case 0x0B: // VT (Vertical Tab)
|
|||
|
|
case 0x0C: // FF (Form Feed) <20><>ҳ/<2F><><EFBFBD><EFBFBD>
|
|||
|
|
ch = ch;
|
|||
|
|
break;
|
|||
|
|
case 0x0D: // CR (Carriage Return) <20>س<EFBFBD>
|
|||
|
|
{
|
|||
|
|
if (g_cmdLine.newCmd == 0 && g_cmdLine.cmdExec == 0)
|
|||
|
|
{
|
|||
|
|
PUTCHAR(0x0D); // <20><><EFBFBD>ӻس<D3BB>
|
|||
|
|
PUTCHAR(0x0A); // <20><><EFBFBD>ӻ<EFBFBD><D3BB><EFBFBD>
|
|||
|
|
g_cmdLine.cmdBuf[g_cmdLine.cmdPointer] = 0; // <20>ַ<EFBFBD><D6B7><EFBFBD>β
|
|||
|
|
g_cmdLine.cmdLen = g_cmdLine.cmdPointer; // <20><><EFBFBD><EFBFBD>
|
|||
|
|
strcpy(g_cmdLine.command, g_cmdLine.cmdBuf); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (g_cmdLine.cmdLen != 0) // 20220412 <20><><EFBFBD><EFBFBD>Ȳ<EFBFBD>Ϊ0,<2C>Ŵ<EFBFBD><C5B4><EFBFBD><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
AddNewCmdToHistory(g_cmdLine.cmdBuf); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
g_cmdHisSer = g_cmdHisIdx; // 20220412
|
|||
|
|
g_cursorNum = g_cmdHisNum;
|
|||
|
|
g_cmdLine.newCmd = 1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case 0x0E: // SO (Shift Out)SHIFT <20>ɿ<EFBFBD>
|
|||
|
|
case 0x0F: // SI (Shift In) <20><><EFBFBD><EFBFBD>
|
|||
|
|
case 0x10: // DLE (Data Link Escape) <20><><EFBFBD><EFBFBD>
|
|||
|
|
case 0x11: // DC1 (XON) (Device Control 1)
|
|||
|
|
case 0x12: // DC2 (Device Control 2)
|
|||
|
|
case 0x13: // DC3 (XOFF)(Device Control 3)
|
|||
|
|
case 0x14: // DC4 (Device Control 4)
|
|||
|
|
case 0x15: // NAK (Negative Acknowledgement)
|
|||
|
|
case 0x16: // SYN (Synchronous Idle)
|
|||
|
|
case 0x17: // ETB (End of Trans. Block)
|
|||
|
|
case 0x18: // CAN (Cancel)
|
|||
|
|
case 0x19: // EM (End of Medium)
|
|||
|
|
case 0x1A: // SUB (Substitute) // pause <20><>
|
|||
|
|
ch = ch;
|
|||
|
|
break;
|
|||
|
|
case 0x1B: // ESC (Escape) <20>˳<EFBFBD>
|
|||
|
|
g_cmdLine.cmdInCtrl = 1;
|
|||
|
|
break;
|
|||
|
|
case 0x1C: // FS (File Separator)
|
|||
|
|
case 0x1D: // GS (Group Separator)
|
|||
|
|
case 0x1E: // RS (Request to Send/Record Separator)
|
|||
|
|
case 0x1F: // US (Unit Separator)
|
|||
|
|
ch = ch;
|
|||
|
|
break;
|
|||
|
|
case 0x7F:
|
|||
|
|
if (g_cmdLine.cmdPointer != 0)
|
|||
|
|
{
|
|||
|
|
PUTCHAR(0x08); // <20><><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD>
|
|||
|
|
PUTCHAR(' '); // <20><><EFBFBD><EFBFBD><EFBFBD>ո<EFBFBD>
|
|||
|
|
PUTCHAR(0x08); // <20><><EFBFBD><EFBFBD><EFBFBD>˸<EFBFBD>
|
|||
|
|
g_cmdLine.cmdPointer--;
|
|||
|
|
if (g_cmdLine.cmdLen != 0)
|
|||
|
|
{
|
|||
|
|
g_cmdLine.cmdLen--;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (ch != 0x1B && g_cmdLine.cmdInCtrl != 0)
|
|||
|
|
{
|
|||
|
|
if (g_cmdLine.cmdInCtrl == 1 && ch == 0x5B)
|
|||
|
|
{
|
|||
|
|
ch = GETCHAR();
|
|||
|
|
switch(ch)
|
|||
|
|
{
|
|||
|
|
case 0x41: // <20>Ϲ<EFBFBD><CFB9><EFBFBD>
|
|||
|
|
ch = 'u';
|
|||
|
|
// <20>Ϸ<EFBFBD><CFB7><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
|
|||
|
|
UpCursorProc(); // 20220412
|
|||
|
|
break;
|
|||
|
|
case 0x42: // <20>¹<EFBFBD><C2B9><EFBFBD>
|
|||
|
|
ch = 'd';
|
|||
|
|
DownCursorProc(); // <20>·<EFBFBD><C2B7><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼
|
|||
|
|
break;
|
|||
|
|
case 0x43: // <20>ҹ<EFBFBD><D2B9><EFBFBD>
|
|||
|
|
ch = 'r';
|
|||
|
|
break;
|
|||
|
|
case 0x44: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
ch = 'l';
|
|||
|
|
break;
|
|||
|
|
case 0x31:
|
|||
|
|
{
|
|||
|
|
ch = GETCHAR();
|
|||
|
|
if (ch == 0x7E) // HOME <20><>
|
|||
|
|
{
|
|||
|
|
ch = 'h';
|
|||
|
|
}
|
|||
|
|
else if (ch == 0x31)
|
|||
|
|
{
|
|||
|
|
ch = GETCHAR();
|
|||
|
|
if (ch == 0x7E) // F1 <20><>
|
|||
|
|
{
|
|||
|
|
ch = '1';
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (ch == 0x32)
|
|||
|
|
{
|
|||
|
|
ch = GETCHAR();
|
|||
|
|
if (ch == 0x7E) // F2 <20><>
|
|||
|
|
{
|
|||
|
|
ch = '2';
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (ch == 0x33)
|
|||
|
|
{
|
|||
|
|
ch = GETCHAR();
|
|||
|
|
if (ch == 0x7E) // F3 <20><>
|
|||
|
|
{
|
|||
|
|
ch = '3';
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (ch == 0x34)
|
|||
|
|
{
|
|||
|
|
ch = GETCHAR();
|
|||
|
|
if (ch == 0x7E) // F4 <20><>
|
|||
|
|
{
|
|||
|
|
ch = '4';
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (ch == 0x35)
|
|||
|
|
{
|
|||
|
|
ch = GETCHAR();
|
|||
|
|
if (ch == 0x7E) // F5 <20><>
|
|||
|
|
{
|
|||
|
|
ch = '5';
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (ch == 0x37)
|
|||
|
|
{
|
|||
|
|
ch = GETCHAR();
|
|||
|
|
if (ch == 0x7E) // F6 <20><>
|
|||
|
|
{
|
|||
|
|
ch = '6';
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (ch == 0x38)
|
|||
|
|
{
|
|||
|
|
ch = GETCHAR();
|
|||
|
|
if (ch == 0x7E) // F7 <20><>
|
|||
|
|
{
|
|||
|
|
ch = '7';
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (ch == 0x39)
|
|||
|
|
{
|
|||
|
|
ch = GETCHAR();
|
|||
|
|
if (ch == 0x7E) // F8 <20><>
|
|||
|
|
{
|
|||
|
|
ch = '8';
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case 0x32:
|
|||
|
|
{
|
|||
|
|
ch = GETCHAR();
|
|||
|
|
if (ch == 0x7E) // INS <20><>
|
|||
|
|
{
|
|||
|
|
ch = 'i';
|
|||
|
|
}
|
|||
|
|
else if (ch == 0x30)
|
|||
|
|
{
|
|||
|
|
ch = GETCHAR();
|
|||
|
|
if (ch == 0x7E) // F9 <20><>
|
|||
|
|
{
|
|||
|
|
ch = '9';
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (ch == 0x31)
|
|||
|
|
{
|
|||
|
|
ch = GETCHAR();
|
|||
|
|
if (ch == 0x7E) // F10 <20><>
|
|||
|
|
{
|
|||
|
|
ch = 'a';
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (ch == 0x33)
|
|||
|
|
{
|
|||
|
|
ch = GETCHAR();
|
|||
|
|
if (ch == 0x7E) // F11 <20><>
|
|||
|
|
{
|
|||
|
|
ch = 'b';
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if (ch == 0x34)
|
|||
|
|
{
|
|||
|
|
ch = GETCHAR();
|
|||
|
|
if (ch == 0x7E) // F12 <20><>
|
|||
|
|
{
|
|||
|
|
ch = 'c';
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
case 0x33:
|
|||
|
|
ch = GETCHAR();
|
|||
|
|
if (ch == 0x7E) // DEL <20><>
|
|||
|
|
{
|
|||
|
|
ch = 'd';
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case 0x34:
|
|||
|
|
ch = GETCHAR();
|
|||
|
|
if (ch == 0x7E) // END <20><>
|
|||
|
|
{
|
|||
|
|
ch = 'e';
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case 0x35:
|
|||
|
|
ch = GETCHAR();
|
|||
|
|
if (ch == 0x7E) // PAGE UP <20><>
|
|||
|
|
{
|
|||
|
|
ch = 'u';
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
case 0x36:
|
|||
|
|
ch = GETCHAR();
|
|||
|
|
if (ch == 0x7E) // PAGE DOWN <20><>
|
|||
|
|
{
|
|||
|
|
ch = 'd';
|
|||
|
|
}
|
|||
|
|
break;
|
|||
|
|
default:
|
|||
|
|
g_cmdLine.cmdInCtrl = 0;
|
|||
|
|
break;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
g_cmdLine.cmdInCtrl = 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (g_cmdLine.cmdInCtrl != 0)
|
|||
|
|
{
|
|||
|
|
ch = 0;
|
|||
|
|
g_cmdLine.cmdInCtrl = 0;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (g_cmdLine.cmdExec == 0 && g_cmdLine.newCmd == 0)
|
|||
|
|
{
|
|||
|
|
if (ch > 0x1F && ch < 0x7F) // <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
if (g_cmdLine.cmdPointer < MAX_CMD_LINE-1)
|
|||
|
|
{
|
|||
|
|
PUTCHAR(ch); // <20><><EFBFBD><EFBFBD>ʾ
|
|||
|
|
|
|||
|
|
g_cmdLine.cmdBuf[g_cmdLine.cmdPointer] = ch;
|
|||
|
|
g_cmdLine.cmdPointer++;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
g_cmdLine.cmdPointer = 0;
|
|||
|
|
g_cmdLine.cmdBuf[0] = 0;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
int IsConsoleCancel(void)
|
|||
|
|
{
|
|||
|
|
int rslt = g_cmdLine.cancel;
|
|||
|
|
g_cmdLine.cancel = 0;
|
|||
|
|
return rslt;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 20220412 <20>ṩһ<E1B9A9><D2BB><EFBFBD>ⲿ<EFBFBD>ӿ<EFBFBD>,<2C><><EFBFBD>ڻ<EFBFBD>ȡ<EFBFBD>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD>ʷ<EFBFBD><CAB7><EFBFBD><EFBFBD>
|
|||
|
|
int GetHistoryCmd(int hisIdx, char * pch)
|
|||
|
|
{
|
|||
|
|
if (hisIdx < 0 || hisIdx > HISTORY_CMD_NUM || pch == NULL)
|
|||
|
|
{
|
|||
|
|
return -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
strncpy(pch, &(g_cmdHistory[hisIdx][0]), MAX_CMD_LINE);
|
|||
|
|
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int GetHistoryNum(void)
|
|||
|
|
{
|
|||
|
|
return g_cmdHisNum;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int GetHistoryMaxNum(void)
|
|||
|
|
{
|
|||
|
|
return HISTORY_CMD_NUM;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int GetHistoryIdx(void)
|
|||
|
|
{
|
|||
|
|
return g_cmdHisIdx;
|
|||
|
|
}
|
|||
|
|
//---------------------------------------------------------------------------------------------
|
|||
|
|
|
|||
|
|
//---------------------------------------------------------------------------------------------
|
|||
|
|
|
|||
|
|
|