Annotation of 43BSDTahoe/new/X/xinit/xinit.c, revision 1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.