コンパイルエラーを直す その 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, &ltc_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:でも、面倒です。