extern char**environ; int main(int argc, char **argv) { _gui_win(); int xterm_in[2]; int xterm_out[2]; _pipe(xterm_in); _pipe(xterm_out); vesa_init(); void *tty=terminal_init_vesa(); int pid=_fork(); if(!pid) { _close(xterm_in[1]); _close(xterm_out[0]); _dup2(xterm_in[0],0);// stdin _dup2(xterm_out[1],1);// stdout _dup2(xterm_out[1],2);// stderr _close(xterm_in[0]); _close(xterm_out[1]); _execve(argv[1],argv,environ); // replace process with our foolshell or whatever } _close(xterm_in[0]); _close(xterm_out[1]); _dup2(xterm_in[1],0); // compositor writes here. _close(xterm_in[1]); while(1) { char buf[1]; _read(xterm_out[0],buf,1); // show what foolshell writes to its stdout/stderr terminal_put(tty,buf[0]); _gui_rect(); } }