Annotation of coherent/g/usr/bin/vi/alias.c, revision 1.1.1.1

1.1       root        1: /* alias.c */
                      2: 
                      3: /* Author:
                      4:  *             Peter Reinig
                      5:  *             Universitaet Kaiserslautern
                      6:  *             Postfach 3049
                      7:  *             7650 Kaiserslautern
                      8:  *             W. Germany
                      9:  *             [email protected]
                     10:  */
                     11: 
                     12: /* This tiny program executes elvis with the flags that are appropriate
                     13:  * for a given command name.  This program is used only on systems that
                     14:  * don't allow UNIX-style file links.
                     15:  *
                     16:  * The benefit of this program is: instead of having 5 copies of elvis
                     17:  * on your disk, you only need one copy of elvis and 4 copies of this
                     18:  * little program.
                     19:  */
                     20: 
                     21: #include <stdio.h>
                     22: #include "config.h"
                     23: 
                     24: #if OSK
                     25: #define ELVIS  "/dd/usr/cmds/elvis"
                     26: #else
                     27: #define ELVIS  "elvis"
                     28: #endif
                     29: 
                     30: extern char **environ;
                     31: extern int errno;
                     32: 
                     33: main(argc, argv)
                     34:        int     argc;
                     35:        char    *argv[];
                     36: {
                     37:        int     pid, i, j;
                     38:        int     letter;
                     39:        char    **argblk;
                     40: #if OSK
                     41:        extern int chainc();
                     42: #endif
                     43: 
                     44:        /* allocate enough space for a copy of the argument list, plus a
                     45:         * terminating NULL, plus maybe an added flag.
                     46:         */
                     47:        argblk = (char **) malloc((argc + 2) * sizeof(char *));
                     48:        if (!argblk)
                     49:        {
                     50: #if OSK
                     51:                _errmsg(errno, "Can't get enough memory\n");
                     52: #else
                     53:                perror(argv[0]);
                     54: #endif
                     55:                exit(2);
                     56:        }
                     57: 
                     58:        /* find the last letter in the invocation name of this program */
                     59:        i = strlen(argv[0]);
                     60: #if MSDOS || TOS
                     61:        /* we almost certainly must bypass ".EXE" or ".TTP" from argv[0] */
                     62:        if (i > 4 && argv[0][i - 4] == '.')
                     63:                i -= 4;
                     64: #endif
                     65:        letter = argv[0][i - 1];
                     66: 
                     67:        /* copy argv to argblk, possibly inserting a flag such as "-R" */
                     68:        argblk[0] = ELVIS;
                     69:        i = j = 1;
                     70:        switch (letter)
                     71:        {
                     72:          case 'w':                     /* "view" */
                     73:          case 'W':
                     74:                argblk[i++] = "-R";
                     75:                break;
                     76: #if !OSK
                     77:          case 'x':                     /* "ex" */
                     78:          case 'X':
                     79:                argblk[i++] = "-e";
                     80:                break;
                     81: #endif
                     82:          case 't':                     /* "input" */
                     83:          case 'T':
                     84:                argblk[i++] = "-i";
                     85:                break;
                     86:        }
                     87:        while (j < argc)
                     88:        {
                     89:                argblk[i++] = argv[j++];
                     90:        }
                     91:        argblk[i] = (char *)0;
                     92: 
                     93:        /* execute the real ELVIS program */
                     94: #if OSK
                     95:        pid = os9exec(chainc, argblk[0], argblk, environ, 0, 0, 3);
                     96:        fprintf(stderr, "%s: cannot execute\n", argblk[0]);
                     97: #else
                     98:        (void)execvp(argblk[0], argblk);
                     99:        perror(ELVIS);
                    100: #endif
                    101: }

unix.superglobalmegacorp.com

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