#include #include #include "../put_pixel.h" extern char**environ; //default char *argv1[]={"xterm","/bin/fsh",0}; int main(int argc, char **argv) { // we need a window _gui_win(); // basically loads font and sets a few constants vesa_init(NULL); // init tty and set vesa output funcs void *tty=terminal_init_vesa(); //int xterm_in[2]; int xterm_out[2]; //_pipe(xterm_in); pipe(xterm_out); int tty_fd=_open("/dev/tty"); int pid=fork(); if(!pid) // child { //_close(xterm_in[1]); close(xterm_out[0]); dup2(tty_fd,0);// stdin dup2(xterm_out[1],1);// stdout dup2(xterm_out[1],2);// stderr // replace process with our foolshell or whatever if(argc==1)_execve(argv1[1],argv1,environ); execve(argv[1],argv,environ); printf("unable to execve %s",argv[1]); // never reached hopefully while(1); } else{ // TODO quit if execve fails or child exits... //_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]); } } }