int ttshell(unsigned char *cmd) { int x, omode = ttymode; int stat= -1; unsigned char *s = (unsigned char *)getenv("SHELL"); if (!s) { s = "/bin/sh"; /* return; */ } ttclsn(); if ((x = fork()) != 0) { if (x != -1) wait(&stat); if (omode) ttopnn(); return stat; } else { signrm(); if (cmd) execl((char *)s, (char *)s, "-c", cmd, NULL); else { fprintf(stderr, (char *)joe_gettext(_("You are at the command shell. Type 'exit' to return\n"))); execl((char *)s, (char *)s, NULL); } _exit(0); return 0; } }
void ttsusp(void) { int omode; omode = ttymode; mpxsusp(); ttclsn(); fprintf(stderr, (char *)joe_gettext(_("You have suspended the program. Type 'fg' to return\n"))); kill(0, SIGTSTP); if (omode) ttopnn(); if (ackkbd!= -1) mpxresume(); }
void ttsusp(void) { int omode; #ifdef SIGTSTP omode = ttymode; mpxsusp(); ttclsn(); fprintf(stderr, (char *)joe_gettext(_("You have suspended the program. Type 'fg' to return\n"))); kill(0, SIGTSTP); #ifdef junk /* Hmmm... this should not have been necessary */ if (ackkbd != -1) kill(kbdpid, SIGCONT); #endif if (omode) ttopnn(); if (ackkbd!= -1) mpxresume(); #else ttshell(NULL); #endif }
int ttshell(unsigned char *cmd) { int x, omode = ttymode; int stat= -1; unsigned char *s = (unsigned char *)getenv("SHELL"); if (!s) { s = USTR "/bin/sh"; /* return; */ } ttclsn(); #ifdef HAVE_FORK if ((x = fork()) != 0) { #else if ((x = vfork()) != 0) { /* For AMIGA only */ #endif if (x != -1) wait(&stat); if (omode) ttopnn(); return stat; } else { signrm(); if (cmd) execl((char *)s, (char *)s, "-c", cmd, NULL); else { fprintf(stderr, (char *)joe_gettext(_("You are at the command shell. Type 'exit' to return\n"))); execl((char *)s, (char *)s, NULL); } _exit(0); return 0; } } /* Create keyboard task */ static void mpxresume(void) { int fds[2]; pipe(fds); acceptch = NO_MORE_DATA; have = 0; if (!(kbdpid = fork())) { close(fds[1]); do { unsigned char c; int sta; pack.who = 0; sta = joe_read(fileno(termin), &c, 1); if (sta == 0) pack.ch = NO_MORE_DATA; else pack.ch = c; pack.size = 0; joe_write(mpxsfd, &pack, sizeof(struct packet) - 1024); } while (joe_read(fds[0], &pack, 1) == 1); _exit(0); } close(fds[0]); ackkbd = fds[1]; }
void ttopen(void) { sigjoe(); ttopnn(); }