--- nono/host/comdriver_stdio.cpp 2026/04/29 17:05:11 1.1 +++ nono/host/comdriver_stdio.cpp 2026/04/29 17:05:18 1.1.1.2 @@ -10,7 +10,6 @@ #include "comdriver_stdio.h" #include "hostcom.h" -#include // コンストラクタ COMDriverStdio::COMDriverStdio(HostDevice *hostdev_) @@ -32,7 +31,6 @@ bool COMDriverStdio::InitDriver() { struct termios tc; - int fds[2]; // 端末の設定を変更 tc = oldtc; @@ -43,6 +41,7 @@ COMDriverStdio::InitDriver() tc.c_lflag &= ~ECHO; // エコーオフ tc.c_lflag &= ~ICANON; // 非カノニカルモード tc.c_lflag &= ~IEXTEN; // DISCARD(^O)と LNEXT をオフ? + tc.c_lflag &= ~ISIG; // シグナルを生成しない tc.c_cc[VTIME] = 0; tc.c_cc[VMIN] = 1; @@ -51,66 +50,14 @@ COMDriverStdio::InitDriver() return false; } - // シグナルを受け取る - if (pipe(fds) < 0) { - putmsg(0, "pipe: %s", strerror(errno)); - return false; - } - if (hostdev->AddSignal(fds[0], fds[1]) < 0) { - putmsg(0, "AddSignal: %s", strerror(errno)); - close(fds[0]); - close(fds[1]); - return false; - } - sigfd = fds[0]; - if (hostdev->AddOuter(STDIN_FILENO) < 0) { putmsg(0, "AddOuter: %s", strerror(errno)); - sigfd.Close(); - close(fds[1]); return false; } - char_from_signal = 0; - return true; } -// Driver の Dispatch() は udata を返す。 -int -COMDriverStdio::Dispatch(int udata) -{ - if (udata == HostDevice::DATA_FROM_SIGNAL) { - char buf[1]; - if (read(sigfd, buf, sizeof(buf)) < 0) { - putmsg(0, "read(sigfd=%d): %s", (int)sigfd, strerror(errno)); - return HostDevice::DONE; - } - int signo = buf[0]; - switch (signo) { - case SIGINT: - // ^C が入力されたのでシリアルに '\x03' を送り込む - char_from_signal = 0x03; - break; - case SIGTSTP: - // ^Z が入力されたのでシリアルに '\x1a' を送り込む - char_from_signal = 0x1a; - break; - case SIGQUIT: - // ^\ が入力されたのでシリアルに '\x1e' を送り込む - char_from_signal = 0x1e; - break; - default: - return HostDevice::DONE; - } - - // シグナルで来た文字を Read で読める文字が外から来たことにする - return HostDevice::DATA_FROM_OUTER; - } - - return udata; -} - // 外部への1バイト書き出し void COMDriverStdio::Write(uint32 data) @@ -137,13 +84,6 @@ COMDriverStdio::Read() uint8 buf[1]; int r; - // シグナルで来た文字があればそちらを返す - if (char_from_signal) { - r = char_from_signal; - char_from_signal = 0; - return r; - } - r = read(STDIN_FILENO, buf, sizeof(buf)); if (r < 0) { putmsg(0, "read: %s", strerror(errno));