escape codes

转义字符解析
\n
newline
\r
carriage return
\t
tab
\v
vertical tab
\b
backspace
\f
form feed (page feed)
\a
alert (beep)
\'
single quote (')
\"
double quote (")
\?
question mark (?)
\\
backslash (\)
[] squart brackets
STATUS RCC_EXT_ParseInput ( WMB_SESSION_T * pCliEnv, sbyte * pData, sbyte4 len, BOOL extended ) { KEY_STATE keyState = MCONN_GetKeyState(pCliEnv); STATUS status = OK; sbyte4 charIn = 0; sbyte4 index; for (index = 0; index < len; index++) { charIn = *(pData++); /* pre-process escape codes */ switch (keyState) { case KEY_STATE_CONTINUE: /* backslash 'escapes' CR, continuing line */ if (kCR == charIn) RCC_EXT_InsertText(pCliEnv, kEOL, kEOL_SIZE); else RCC_EXT_InsertChar(pCliEnv, charIn); keyState = KEY_STATE_DATA; continue; case KEY_STATE_ESC: switch ( TOLOWER(charIn) ) { case kRCC_ESC_CURSOR: keyState = KEY_STATE_CURSOR; continue; #ifdef __VT52__ /* vt52 cursor */ case 'a': charIn = kKEY_MOVE_UP; break; case 'b': charIn = kKEY_MOVE_DOWN; break; case 'c': charIn = kKEY_MOVE_RIGHT; break; case 'd': charIn = kKEY_MOVE_LEFT; break; #else case kRCC_WORD_PREV: charIn = kKEY_WORD_PREV; break; case kRCC_WORD_NEXT: charIn = kKEY_WORD_NEXT; break; case kRCC_WORD_UPPERCASE_TO_END: charIn = kKEY_UPPERCASE; break; case kRCC_WORD_DELETE_TO_END: charIn = kKEY_DELETE_WORD_END; break; #endif case kRCC_WORD_LOWERCASE_TO_END: charIn = kKEY_LOWERCASE; break; #ifdef __RCC_DEBUG__ /* Esc - ctrl-k to kill server */ case 0x0B: /* RCC_TELNETD_Kill(); */ charIn = 0; break; /* Esc - ctrl-p to toggle memory prompt display */ case 0x10: if (debugFeature(kRCC_DEBUG_MEMORY)) debugFeatureClear(kRCC_DEBUG_MEMORY); else debugFeatureSet(kRCC_DEBUG_MEMORY); charIn = 0; break; /* Esc - ctrl-i for debug info */ case 0x09: RCC_DB_SystemSettings(pCliEnv); RCC_DB_ShowInput(pCliEnv, TRUE); charIn = 0; break; #endif /* __RCC_DEBUG__ */ } keyState = KEY_STATE_DATA; break; case KEY_STATE_CURSOR: #ifdef __DISABLE_VT_ESCAPES__ charIn = 0; #else switch(charIn) { case kRCC_CURSOR_UP: charIn = kKEY_MOVE_UP; break; case kRCC_CURSOR_DOWN: charIn = kKEY_MOVE_DOWN; break; case kRCC_CURSOR_LEFT: charIn = kKEY_MOVE_LEFT; break; case kRCC_CURSOR_RIGHT: charIn = kKEY_MOVE_RIGHT; break; default: break; } #endif /* __DISABLE_VT_ESCAPES__ */ keyState = KEY_STATE_DATA; break; default: break; } switch (charIn) { case kESC: keyState = KEY_STATE_ESC; break; #ifdef kKEY_CONTINUE case kKEY_CONTINUE: RCC_EXT_InsertChar(pCliEnv, charIn); keyState = KEY_STATE_CONTINUE; break; #endif #ifndef __EOL_USES_LF__ case kCR: /* command complete? */ #endif #ifdef IS_INTERACTIVE_FN if IS_INTERACTIVE_FN(pCliEnv) break; #endif #ifdef __EOL_USES_LF__ case kLF: #endif #ifdef IS_INTERACTIVE_FN if (! IS_INTERACTIVE_FN(pCliEnv)) #endif #if 1 /* zhangbinwei 2012.03.09*/ EXT_NewLine(pCliEnv); #endif status = STATUS_RCC_NO_ERROR; break; case kBS: //EXT_Backspace(pCliEnv); //Modify by Ning yibing 2006-09-06 EXT_Backspace_Tp(pCliEnv); break; case kKEY_BREAK: EXT_NewLine(pCliEnv); RCC_EXT_CommandLineInit(pCliEnv); if (extended) RCC_TASK_PrintPrompt(pCliEnv); break; case kTAB: { if (ERROR == RCC_ACCESS_AUTH_FN(pCliEnv)) { RCC_UTIL_Disable_tp(pCliEnv); return STATUS_RCC_LOGOUT; } if (extended) { pCliEnv->isExpandTokenRun = TRUE; if (OK != RCC_DB_ExpandToken(pCliEnv, TRUE)) RCC_EXT_PutStr(pCliEnv, "\a"); /* beep to complain */ pCliEnv->isExpandTokenRun = FALSE; } break; } case kKEY_DELETE: case kKEY_DELETE_CHAR: RCC_EXT_DeleteChar(pCliEnv); break; case kKEY_DELETE_FROM_START: EXT_DeleteFromStart(pCliEnv); break; case kKEY_DELETE_TO_END: EXT_DeleteToEnd(pCliEnv); break; case kKEY_LINE_START: RCC_EXT_LineStart(pCliEnv); break; case kKEY_LINE_END: RCC_EXT_LineEnd(pCliEnv); break; case kKEY_MOVE_UP: if (extended) RCC_HIST_Scroll(pCliEnv, -1); break; case kKEY_MOVE_DOWN: if (extended) RCC_HIST_Scroll(pCliEnv, 1); break; case kKEY_MOVE_LEFT: RCC_EXT_MoveCursor(pCliEnv, -1); break; case kKEY_MOVE_RIGHT: RCC_EXT_MoveCursor(pCliEnv, 1); break; case kKEY_HELP: if (extended && ! EXT_QuotedText(pCliEnv)) { if (ERROR == RCC_ACCESS_AUTH_FN(pCliEnv)) { RCC_UTIL_Disable_tp(pCliEnv); return STATUS_RCC_LOGOUT; } if (OK != (status = RCC_HELP_RetrieveHelp(pCliEnv, NULL, TRUE))) { RCC_EXT_PutStr(pCliEnv, "\n\r"); /* beep to complain */ } } else RCC_EXT_InsertChar(pCliEnv, charIn); break; case kKEY_WORD_PREV: EXT_WordPrevious(pCliEnv); break; case kKEY_WORD_NEXT: RCC_EXT_WordNext(pCliEnv); break; case kKEY_UPPERCASE: RCC_EXT_WordChangeCase(pCliEnv, TRUE); break; case kKEY_LOWERCASE: RCC_EXT_WordChangeCase(pCliEnv, FALSE); break; case kKEY_DELETE_WORD_END: EXT_WordDeleteEnd(pCliEnv); break; case kKEY_DELETE_WORD_START: EXT_WordDeleteStart(pCliEnv); break; case kKEY_TRANSPOSE: EXT_Transpose(pCliEnv); break; case kKEY_REFRESH_DISPLAY: EXT_RefreshDisplay(pCliEnv); break; #ifdef kKEY_END_OF_ENTRY case kKEY_END_OF_ENTRY: RCC_EXT_WriteStrLine(pCliEnv, kEOL); status = STATUS_RCC_EXIT_TO_ROOT; break; #endif /* kKEY_END_OF_ENTRY */ #ifdef x__RCC_DEBUG__ case 17: wmMemoryDebug(TRUE); break; case 18: wmMemoryDebugStdout(TRUE); break; case 19: inputClose(); break; #endif default: /* exclude control chars */ if (' ' <= charIn) RCC_EXT_InsertChar(pCliEnv, charIn); break; } /* switch */ RCC_EDIT_STATUS_FN(pCliEnv); if (OK != status) break; } MCONN_SetKeyState(pCliEnv, keyState); return status; } 解释以下代码
11-12
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值