|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.