1 /* 2 * Copyright (c) 1980 Regents of the University of California. 3 * All rights reserved. The Berkeley Software License Agreement 4 * specifies the terms and conditions for redistribution. 5 */ 6 7 #ifndef lint 8 static char *sccsid = "@(#)init.c 5.4 (Berkeley) 02/15/89"; 9 #endif 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(); 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, 84 "alloc", showall, 0, 1, 85 "bg", dobg, 0, INF, 86 "break", dobreak, 0, 0, 87 "breaksw", doswbrk, 0, 0, 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, 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, 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, 122 "rehash", dohash, 0, 0, 123 "repeat", dorepeat, 2, INF, 124 "set", doset, 0, INF, 125 "setenv", dosetenv, 0, 2, 126 "shift", shift, 0, 1, 127 "source", dosource, 1, 2, 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, 140 }; 141 int nbfunc = sizeof bfunc / sizeof *bfunc; 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, 184 }; 185 int nsrchn = sizeof srchn / sizeof *srchn; 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", 207 "URG", "Urgent I/O condition", 208 "STOP", "Suspended (signal)", 209 "TSTP", "Suspended", 210 "CONT", "Continued", 211 "CHLD", "Child exited", 212 "TTIN", "Suspended (tty input)", 213 "TTOU", "Suspended (tty output)", 214 "IO", "I/O possible", 215 "XCPU", "Cputime limit exceeded", 216 "XFSZ", "Filesize limit exceeded", 217 "VTALRM","Virtual timer expired", 218 "PROF", "Profiling timer expired", 219 "WINCH","Window size changed", 220 0, "Signal 29", 221 "USR1", "User defined signal 1", 222 "USR2", "User defined signal 2", 223 0, "Signal 32" 224 }; 225