From: Michael D. Lowis Date: Tue, 30 May 2017 02:50:45 +0000 (-0400) Subject: sketched out pseudotty logic for term X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=1bb35a77fb24a7fb02b0dc6eec81ab113ac9059e;p=projs%2Ftide.git sketched out pseudotty logic for term --- diff --git a/term.c b/term.c index c8eb02b..14b8c3e 100644 --- a/term.c +++ b/term.c @@ -5,6 +5,8 @@ #include #include +static int ShellFD; + #define INCLUDE_DEFS #include "config.h" @@ -37,11 +39,42 @@ void onerror(char* msg) { } #ifndef TEST +#include +#include +#include + +void spawn_shell(int master, int slave) { + static char* shell[] = { "/bin/sh", "-l", NULL }; + dup2(slave, 0); + dup2(slave, 1); + dup2(slave, 2); + if (ioctl(slave, TIOCSCTTY, NULL) < 0) + die("ioctl(TIOSCTTY) failed"); + close(slave); + close(master); + execvp(shell[0], shell); +} + int main(int argc, char** argv) { + int pid, m, s; + if (openpty(&m, &s, NULL, NULL, NULL) < 0) + die("openpty failed: %s\n", strerror(errno)); + if ((pid = fork())) + die("fork failed"); + + if (pid == 0) { + spawn_shell(m, s); + } else { + close(s); + ShellFD = m; + //signal(SIGCHLD, sigchld); + } + win_window("term", onerror); //win_setkeys(&Bindings); //win_setmouse(&MouseHandlers); win_loop(); + return 0; } #endif