This is n_shell.c in view mode; [Download] [Up]
/* * Spawn a "native" shell. Native means the shell found in the SHELL * environmental variable. */ #include <stdio.h> #include <signal.h> #include <curses.h> #include "config.h" void n_shell() { WINDOW *sh_win, *newwin(); SIG_TYPE (*istat)(), (*qstat)(); int sig_status, spid, w; char *shell, *shellpath, *getenv(), *strrchr(); unsigned int sleep(); void _exit(); /* a full window */ sh_win = newwin(LINES, COLS, 0, 0); touchwin(sh_win); waddstr(sh_win, "Pcomm <=> Unix gateway, use ^D or 'exit' to return\n"); wrefresh(sh_win); /* out of curses mode */ resetterm(); shellpath = getenv("SHELL"); if (shellpath == NULL || *shellpath == '\0') shellpath = "/bin/sh"; if (shell = strrchr(shellpath, '/')) shell++; else { shellpath = "/bin/sh"; shell = "sh"; } if (!(spid = fork())) { signal(SIGINT, SIG_DFL); signal(SIGQUIT, SIG_DFL); #ifdef SETUGID setgid(getgid()); setuid(getuid()); #endif /* SETUGID */ execl(shellpath, shell, "-i", (char *) 0); _exit(1); } istat = signal(SIGINT, SIG_IGN); qstat = signal(SIGQUIT, SIG_IGN); while ((w = wait(&sig_status)) != spid && w != -1) ; signal(SIGINT, istat); signal(SIGQUIT, qstat); /* back to curses mode */ sleep(1); fixterm(); clearok(curscr, TRUE); werase(sh_win); wrefresh(sh_win); delwin(sh_win); return; }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.