|
|
1.1 ! root 1: #ifndef lint ! 2: static char *rcsid_xinit_c = "$Header: xinit.c,v 10.3 86/02/01 16:24:54 tony Rel $"; ! 3: #endif lint ! 4: #include <X/mit-copyright.h> ! 5: ! 6: /* Copyright Massachusetts Institute of Technology 1986 */ ! 7: ! 8: #include <stdio.h> ! 9: #include <ctype.h> ! 10: #include <signal.h> ! 11: ! 12: #define default_server "X" ! 13: #define default_display "0" ! 14: char *default_client[] = {"xterm", "=+1+1", "-n", "login", ! 15: #ifdef sun ! 16: "-C", ! 17: #endif ! 18: "unix:0", NULL}; ! 19: char *server[100]; ! 20: char *client[100]; ! 21: ! 22: main(argc, argv) ! 23: int argc; ! 24: register char **argv; ! 25: { ! 26: register char **sptr = server; ! 27: register char **cptr = client; ! 28: register char **ptr; ! 29: int serverpid, clientpid, pid; ! 30: ! 31: argv++; ! 32: argc--; ! 33: if (argc == 0 || (**argv != '/' && !isalpha(**argv))) ! 34: for (ptr = default_client; *ptr; ) ! 35: *cptr++ = *ptr++; ! 36: while (argc && strcmp(*argv, "--")) { ! 37: *cptr++ = *argv++; ! 38: argc--; ! 39: } ! 40: *cptr = NULL; ! 41: if (argc) { ! 42: argv++; ! 43: argc--; ! 44: } ! 45: if (argc == 0 || (**argv != '/' && !isalpha(**argv))) { ! 46: *sptr++ = default_server; ! 47: if (argc == 0 || !isdigit(**argv)) ! 48: *sptr++ = default_display; ! 49: } ! 50: while (--argc >= 0) ! 51: *sptr++ = *argv++; ! 52: *sptr++ = "0"; ! 53: *sptr = NULL; ! 54: if ((serverpid = fork()) == 0) { ! 55: close(0); ! 56: close(1); ! 57: execvp(server[0], server); ! 58: perror(server[0]); ! 59: exit(1); ! 60: } ! 61: if (serverpid < 0) { ! 62: perror(server[0]); ! 63: exit(1); ! 64: } ! 65: sleep(5); ! 66: if ((clientpid = fork()) == 0) { ! 67: execvp(client[0], client); ! 68: perror(client[0]); ! 69: exit(1); ! 70: } ! 71: if (clientpid < 0) { ! 72: kill(serverpid, SIGKILL); ! 73: perror(client[0]); ! 74: exit(1); ! 75: } ! 76: while (((pid = wait(NULL)) != clientpid) && (pid != serverpid)) ; ! 77: kill(clientpid, SIGKILL); ! 78: if (!kill(serverpid, SIGHUP)) { ! 79: sleep(1); ! 80: kill(serverpid, SIGKILL); ! 81: } ! 82: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.