Commit | Line | Data |
---|---|---|
b79f4fa9 DF |
1 | /* |
2 | * Copyright (c) 1980 Regents of the University of California. | |
094e80ed | 3 | * All rights reserved. The Berkeley Software License Agreement |
b79f4fa9 DF |
4 | * specifies the terms and conditions for redistribution. |
5 | */ | |
6 | ||
35371dec | 7 | #ifndef lint |
5fe577ad | 8 | static char *sccsid = "@(#)init.c 5.4 (Berkeley) %G%"; |
094e80ed | 9 | #endif |
90503b97 BJ |
10 | |
11 | #include "sh.local.h" | |
12 | ||
13 | /* | |
14 | * C shell | |
15 | */ | |
16 | ||
17 | extern int doalias(); | |
18 | extern int dobg(); | |
19 | extern int dobreak(); | |
20 | extern int dochngd(); | |
21 | extern int docontin(); | |
22 | extern int dodirs(); | |
23 | extern int doecho(); | |
24 | extern int doelse(); | |
25 | extern int doend(); | |
26 | extern int doendif(); | |
27 | extern int doendsw(); | |
28 | extern int doeval(); | |
29 | extern int doexit(); | |
30 | extern int dofg(); | |
31 | extern int doforeach(); | |
32 | extern int doglob(); | |
33 | extern int dogoto(); | |
34 | extern int dohash(); | |
35 | extern int dohist(); | |
36 | extern int doif(); | |
37 | extern int dojobs(); | |
38 | extern int dokill(); | |
39 | extern int dolet(); | |
40 | extern int dolimit(); | |
41 | extern int dologin(); | |
42 | extern int dologout(); | |
90503b97 BJ |
43 | extern int donice(); |
44 | extern int donotify(); | |
45 | extern int donohup(); | |
46 | extern int doonintr(); | |
47 | extern int dopopd(); | |
48 | extern int dopushd(); | |
49 | extern int dorepeat(); | |
50 | extern int doset(); | |
51 | extern int dosetenv(); | |
52 | extern int dosource(); | |
53 | extern int dostop(); | |
54 | extern int dosuspend(); | |
55 | extern int doswbrk(); | |
56 | extern int doswitch(); | |
57 | extern int dotime(); | |
58 | extern int dounlimit(); | |
59 | extern int doumask(); | |
60 | extern int dowait(); | |
61 | extern int dowhile(); | |
62 | extern int dozip(); | |
63 | extern int execash(); | |
64 | extern int goodbye(); | |
65 | #ifdef VFORK | |
66 | extern int hashstat(); | |
67 | #endif | |
68 | extern int shift(); | |
69 | extern int showall(); | |
70 | extern int unalias(); | |
71 | extern int dounhash(); | |
72 | extern int unset(); | |
73 | extern int dounsetenv(); | |
74 | ||
75 | #define INF 1000 | |
76 | ||
77 | struct biltins { | |
78 | char *bname; | |
79 | int (*bfunct)(); | |
80 | short minargs, maxargs; | |
81 | } bfunc[] = { | |
82 | "@", dolet, 0, INF, | |
83 | "alias", doalias, 0, INF, | |
90503b97 | 84 | "alloc", showall, 0, 1, |
90503b97 BJ |
85 | "bg", dobg, 0, INF, |
86 | "break", dobreak, 0, 0, | |
87 | "breaksw", doswbrk, 0, 0, | |
90503b97 BJ |
88 | "case", dozip, 0, 1, |
89 | "cd", dochngd, 0, 1, | |
90 | "chdir", dochngd, 0, 1, | |
91 | "continue", docontin, 0, 0, | |
92 | "default", dozip, 0, 0, | |
93 | "dirs", dodirs, 0, 1, | |
94 | "echo", doecho, 0, INF, | |
95 | "else", doelse, 0, INF, | |
96 | "end", doend, 0, 0, | |
97 | "endif", dozip, 0, 0, | |
98 | "endsw", dozip, 0, 0, | |
99 | "eval", doeval, 0, INF, | |
100 | "exec", execash, 1, INF, | |
101 | "exit", doexit, 0, INF, | |
102 | "fg", dofg, 0, INF, | |
103 | "foreach", doforeach, 3, INF, | |
90503b97 BJ |
104 | "glob", doglob, 0, INF, |
105 | "goto", dogoto, 1, 1, | |
106 | #ifdef VFORK | |
107 | "hashstat", hashstat, 0, 0, | |
108 | #endif | |
109 | "history", dohist, 0, 2, | |
110 | "if", doif, 1, INF, | |
111 | "jobs", dojobs, 0, 1, | |
112 | "kill", dokill, 1, INF, | |
113 | "limit", dolimit, 0, 3, | |
114 | "login", dologin, 0, 1, | |
115 | "logout", dologout, 0, 0, | |
90503b97 BJ |
116 | "nice", donice, 0, INF, |
117 | "nohup", donohup, 0, INF, | |
118 | "notify", donotify, 0, INF, | |
119 | "onintr", doonintr, 0, 2, | |
120 | "popd", dopopd, 0, 1, | |
121 | "pushd", dopushd, 0, 1, | |
90503b97 BJ |
122 | "rehash", dohash, 0, 0, |
123 | "repeat", dorepeat, 2, INF, | |
124 | "set", doset, 0, INF, | |
c349da0d | 125 | "setenv", dosetenv, 0, 2, |
90503b97 | 126 | "shift", shift, 0, 1, |
3d48fab8 | 127 | "source", dosource, 1, 2, |
90503b97 BJ |
128 | "stop", dostop, 1, INF, |
129 | "suspend", dosuspend, 0, 0, | |
130 | "switch", doswitch, 1, INF, | |
131 | "time", dotime, 0, INF, | |
132 | "umask", doumask, 0, 1, | |
133 | "unalias", unalias, 1, INF, | |
134 | "unhash", dounhash, 0, 0, | |
135 | "unlimit", dounlimit, 0, INF, | |
136 | "unset", unset, 1, INF, | |
137 | "unsetenv", dounsetenv, 1, INF, | |
138 | "wait", dowait, 0, 0, | |
139 | "while", dowhile, 1, INF, | |
90503b97 | 140 | }; |
35371dec | 141 | int nbfunc = sizeof bfunc / sizeof *bfunc; |
90503b97 BJ |
142 | |
143 | #define ZBREAK 0 | |
144 | #define ZBRKSW 1 | |
145 | #define ZCASE 2 | |
146 | #define ZDEFAULT 3 | |
147 | #define ZELSE 4 | |
148 | #define ZEND 5 | |
149 | #define ZENDIF 6 | |
150 | #define ZENDSW 7 | |
151 | #define ZEXIT 8 | |
152 | #define ZFOREACH 9 | |
153 | #define ZGOTO 10 | |
154 | #define ZIF 11 | |
155 | #define ZLABEL 12 | |
156 | #define ZLET 13 | |
157 | #define ZSET 14 | |
158 | #define ZSWITCH 15 | |
159 | #define ZTEST 16 | |
160 | #define ZTHEN 17 | |
161 | #define ZWHILE 18 | |
162 | ||
163 | struct srch { | |
164 | char *s_name; | |
165 | short s_value; | |
166 | } srchn[] = { | |
167 | "@", ZLET, | |
168 | "break", ZBREAK, | |
169 | "breaksw", ZBRKSW, | |
170 | "case", ZCASE, | |
171 | "default", ZDEFAULT, | |
172 | "else", ZELSE, | |
173 | "end", ZEND, | |
174 | "endif", ZENDIF, | |
175 | "endsw", ZENDSW, | |
176 | "exit", ZEXIT, | |
177 | "foreach", ZFOREACH, | |
178 | "goto", ZGOTO, | |
179 | "if", ZIF, | |
180 | "label", ZLABEL, | |
181 | "set", ZSET, | |
182 | "switch", ZSWITCH, | |
183 | "while", ZWHILE, | |
90503b97 | 184 | }; |
35371dec | 185 | int nsrchn = sizeof srchn / sizeof *srchn; |
90503b97 BJ |
186 | |
187 | struct mesg { | |
188 | char *iname; | |
189 | char *pname; | |
190 | } mesg[] = { | |
191 | 0, 0, | |
192 | "HUP", "Hangup", | |
193 | "INT", "Interrupt", | |
194 | "QUIT", "Quit", | |
195 | "ILL", "Illegal instruction", | |
196 | "TRAP", "Trace/BPT trap", | |
197 | "IOT", "IOT trap", | |
198 | "EMT", "EMT trap", | |
199 | "FPE", "Floating exception", | |
200 | "KILL", "Killed", | |
201 | "BUS", "Bus error", | |
202 | "SEGV", "Segmentation fault", | |
203 | "SYS", "Bad system call", | |
204 | "PIPE", "Broken pipe", | |
205 | "ALRM", "Alarm clock", | |
206 | "TERM", "Terminated", | |
35371dec | 207 | "URG", "Urgent I/O condition", |
9c279653 KB |
208 | "STOP", "Suspended (signal)", |
209 | "TSTP", "Suspended", | |
90503b97 BJ |
210 | "CONT", "Continued", |
211 | "CHLD", "Child exited", | |
9c279653 KB |
212 | "TTIN", "Suspended (tty input)", |
213 | "TTOU", "Suspended (tty output)", | |
35371dec | 214 | "IO", "I/O possible", |
90503b97 BJ |
215 | "XCPU", "Cputime limit exceeded", |
216 | "XFSZ", "Filesize limit exceeded", | |
35371dec EW |
217 | "VTALRM","Virtual timer expired", |
218 | "PROF", "Profiling timer expired", | |
c65b8cef | 219 | "WINCH","Window size changed", |
90503b97 | 220 | 0, "Signal 29", |
2ec6024a KM |
221 | "USR1", "User defined signal 1", |
222 | "USR2", "User defined signal 2", | |
90503b97 BJ |
223 | 0, "Signal 32" |
224 | }; |