コンパイルエラーを直す その 2
前回のエントリーからの続きです。
さっそく残りのエラーを修正していきましょう。
前回残ったエラーはこちらです。
machdep.c: 関数 `md_control_keyboard' 内: machdep.c:364: error: `VSWTCH' undeclared (first use in this function) machdep.c:364: error: (Each undeclared identifier is reported only once machdep.c:364: error: for each function it appears in.) machdep.c:364: error: `CNSWTCH' undeclared (first use in this function)
訳すると『machdep.c の 364行目にエラーで、 `VSWTCH' は宣言されてません。(この関数の中で初めて使われました)』になるでしょう。
では、このエラー部分のソースを見ましょう。先頭の数字は行番号を表します。
357:#ifdef UNIX_BSD4_2 358: ltc_temp.t_suspc = ltc_temp.t_dsuspc = -1; 359: ltc_temp.t_rprntc = ltc_temp.t_flushc = -1; 360: ltc_temp.t_werasc = ltc_temp.t_lnextc = -1; 361: tc_temp.t_startc = tc_temp.t_stopc = -1; 362:#endif /* UNIX_BSD4_2 */ 363:#ifdef UNIX_SYSV 364: _tty.c_cc[VSWTCH] = CNSWTCH; 365:#endif /* UNIX_SYSV */ 366: } 367:#ifdef UNIX_BSD4_2 368: ioctl(0, TIOCSETC, &tc_temp); 369: ioctl(0, TIOCSLTC, <c_temp); 370:#endif /* UNIX_BSD4_2 */
364行目は、何をしているのでしょうか。
何かヒントがあるかもしれないので、この行ごとキーワードにして検索エンジンにかけてみましょう。
調べると、http://www.koka-in.org/~kensyu/psion5/diary/20001012.html がひっかかりました。
このサイトによると、コメントアウトすると良いと書いています。
しかし、この行の処理の意味までは書いていませんでしたので、そこを調べコメントアウトするかどうかを判断することとします。
行まるごとでは他に適当なサイトは見付からなかったので、今度は VSWTCH で検索してみましょう。
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/termios.3.html を見付けました。
このページを VSWTCH で検索すると、
VSWTCH
(POSIX にはない; Linux では対応していない; 0, NUL) スイッチ文字 (shl でのみ用いられる)。
とあります。 Linux で対応していない処理を行おうとしているようです。
他にも調べましたが、この処理はターミナルの制御のものと見てよいでしょう。
調べた限り、コメントアウトしても実害はなさそうです。
ソースの修正は以下のようにしました。
364: /* _tty.c_cc[VSWTCH] = CNSWTCH; */
書き換えたら、コンパイルが通るかのチェックです。
今回は、他にエラーを出力せずに無事終了しました。
エラーの修正が出来ると、ローグのメンテナンスは簡単です。*1
ぜひ、やってみましょう。
*1:でも、面倒です。