→ ric2k1:助教的提醒, 在 6pm 10/25 又上傳了一次... 10/25 18:06
事由:
=====
1. 昨天上傳的 sample code (charDef.h and charDef.cpp) 有問題....
(OS: 果然沒有做"驗證"是不行的... XD)
2. 好像只有我用 SecureCRT 的 keyboard mapping 跟大家不一樣... 助教的 mapping
跟大家一樣也是 (tested on different machines) ---
Back space 127
Delete 27 91 51 126
所以我將 charDef.h and charDef.cpp 作了修正, 現在 by default 將會是上述的
setting.
請注意:
不管你的 setting 是否跟助教的一樣,
請重新 download "charDef.h", "charDef.cpp" 以及 Makefile.
這樣助教才能用 default 的設定來測試你的程式.
當然, 如果你的 setting 跟助教一樣, 你在 download 下來後可以不用更改上述三個
檔案, 使用 default 的設定值就可以了.
但是如果你的設定值跟助教的不一樣, 請參照 post 85 等討論串
在 "#ifdef MY_KB_SETTING" 間加入你的版本的 code.
造成不便, 敬請見諒... Homework deadline 仍然不變...
附上新改的 charDef.h and charDef.cpp ---
charDef.h
=========
#ifdef MY_KB_SETTING
// Customize your setting here...
#else
enum ParseChar
{
// Meta type
FUNC_BASE_SHIFT = 1 << 8, // shifted 8 bits (char size)
ARROW_BASE_SHIFT = 1 << 9,
DELETE_BASE_SHIFT= 1 << 10,
UNDEFINED_CHAR = INT_MAX,
// char #1
LINE_BEGIN_CHAR = 1, // ctrl-a
LINE_END_CHAR = 5, // ctrl-e
INPUT_END_CHAR = 4, // ctrl-d
BEEP_CHAR = 7,
BACK_SPACE_CHAR = 8,
BACK_SPACE_KEY = 127,
ESC_CHAR = 27,
DELETE_CHAR = 126 + DELETE_BASE_SHIFT,
TAB_CHAR = int('\t'),
NEWLINE_CHAR = int('\n'),
// char #2
FUNC_BASE_CHAR = 79,
ARROW_BASE_CHAR = 91,
// char #3
FUNC_F1_CHAR = 80 + FUNC_BASE_SHIFT,
FUNC_F2_CHAR = 81 + FUNC_BASE_SHIFT,
FUNC_F3_CHAR = 82 + FUNC_BASE_SHIFT,
FUNC_F4_CHAR = 83 + FUNC_BASE_SHIFT,
ARROW_UP_CHAR = 65 + ARROW_BASE_SHIFT,
ARROW_DOWN_CHAR = 66 + ARROW_BASE_SHIFT,
ARROW_RIGHT_CHAR = 67 + ARROW_BASE_SHIFT,
ARROW_LEFT_CHAR = 68 + ARROW_BASE_SHIFT,
DELETE_BASE_CHAR = 51,
// dummy end
PARSE_CHAR_END
};
#endif // MY_KB_SETTING
charDef.cpp
===========
#ifdef MY_KB_SETTING
// Modify for your terminal setting accordingly
#else
// Here's a sample for DELETE = ( 27 91 51 126 )
// BACKSPACE = 127
ParseChar
CmdParser::getChar(istream& istr) const
{
char ch = mygetc(istr);
if (istr.eof())
return INPUT_END_CHAR;
switch (ch) {
case LINE_BEGIN_CHAR:
case LINE_END_CHAR:
case INPUT_END_CHAR:
// case DELETE_CHAR:
case TAB_CHAR:
case NEWLINE_CHAR: return ParseChar(ch);
case BACK_SPACE_KEY: return BACK_SPACE_CHAR;
case ESC_CHAR: {
char ch2 = mygetc(istr);
if (ch2 == char(FUNC_BASE_CHAR)) {
char ch3 = mygetc(istr);
if ((ch3 >= char(FUNC_F1_CHAR)) && (ch3 <= char(FUNC_F4_CHAR)))
return ParseChar(int(ch3) + FUNC_BASE_SHIFT);
else
return UNDEFINED_CHAR;
}
else if (ch2 == char(ARROW_BASE_CHAR)) {
char ch3 = mygetc(istr);
if ((ch3 >= char(ARROW_UP_CHAR))&&(ch3 <= char(ARROW_LEFT_CHAR)))
return ParseChar(int(ch3) + ARROW_BASE_SHIFT);
else if (ch3 == char(DELETE_BASE_CHAR)) {
if (mygetc(istr) == char(DELETE_CHAR))
return ParseChar(DELETE_CHAR);
}
else
return UNDEFINED_CHAR;
}
// else continue for "default"
}
default:
if (isprint(ch)) return ParseChar(ch);
else return UNDEFINED_CHAR;
}
return UNDEFINED_CHAR;
}
#endif // MY_KB_SETTING
---------
以上的 code 已經測過, 應該沒問題啦~~~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.21.240
※ 編輯: ric2k1 來自: 140.112.21.240 (10/25 17:51)