xref: /freebsd/contrib/tcsh/sh.init.c (revision 3c4ba5f55438f7afd4f4b0b56f88f2bb505fd6a6)
1 /*
2  * sh.init.c: Function and signal tables
3  */
4 /*-
5  * Copyright (c) 1980, 1991 The Regents of the University of California.
6  * All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  * 3. Neither the name of the University nor the names of its contributors
17  *    may be used to endorse or promote products derived from this software
18  *    without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30  * SUCH DAMAGE.
31  */
32 #include "sh.h"
33 #include "ed.h"
34 #include "tw.h"
35 
36 /*
37  * C shell
38  */
39 
40 #define	INF INT_MAX
41 
42 const struct biltins bfunc[] = {
43     { ":",		dozip,		0,	INF	},
44     { "@",		dolet,		0,	INF	},
45     { "alias",		doalias,	0,	INF	},
46     { "alloc",		showall,	0,	1	},
47 #if defined(_CX_UX)
48     { "att",		doatt,		0,	INF	},
49 #endif /* _CX_UX */
50     { "bg",		dobg,		0,	INF	},
51     { "bindkey",	dobindkey,	0,	8	},
52     { "break",		dobreak,	0,	0	},
53     { "breaksw",	doswbrk,	0,	0	},
54 #ifdef _OSD_POSIX
55     { "bs2cmd",		dobs2cmd,	1,	INF	},
56 #endif /* OBSOLETE */
57     { "builtins",	dobuiltins,	0,	0	},
58 #ifdef KAI
59     { "bye",		goodbye,	0,	0	},
60 #endif /* KAI */
61     { "case",		dozip,		0,	1	},
62     { "cd",		dochngd,	0,	INF	},
63     { "chdir",		dochngd,	0,	INF	},
64     { "complete",	docomplete,	0,	INF	},
65     { "continue",	docontin,	0,	0	},
66     { "default",	dozip,		0,	0	},
67     { "dirs",		dodirs,		0,	INF	},
68 #if defined(_CRAY) && !defined(_CRAYMPP)
69     { "dmmode",		dodmmode,	0,	1	},
70 #endif /* _CRAY && !_CRAYMPP */
71     { "echo",		doecho,		0,	INF	},
72     { "echotc",		doechotc,	0,	INF	},
73     { "else",		doelse,		0,	INF	},
74     { "end",		doend,		0,	0	},
75     { "endif",		dozip,		0,	0	},
76     { "endsw",		dozip,		0,	0	},
77     { "eval",		doeval,		0,	INF	},
78     { "exec",		execash,	1,	INF	},
79     { "exit",		doexit,		0,	INF	},
80     { "fg",		dofg,		0,	INF	},
81     { "filetest",	dofiletest,	2,	INF	},
82     { "foreach",	doforeach,	3,	INF	},
83 #ifdef TCF
84     { "getspath",	dogetspath,	0,	0	},
85     { "getxvers",	dogetxvers,	0,	0	},
86 #endif /* TCF */
87     { "glob",		doglob,		0,	INF	},
88     { "goto",		dogoto,		1,	1	},
89     { "hashstat",	hashstat,	0,	0	},
90     { "history",	dohist,		0,	2	},
91     { "hup",		dohup,		0,	INF	},
92     { "if",		doif,		1,	INF	},
93 #ifdef apollo
94     { "inlib", 		doinlib,	1,	INF	},
95 #endif /* apollo */
96     { "jobs",		dojobs,		0,	1	},
97     { "kill",		dokill,		1,	INF	},
98 #ifndef HAVENOLIMIT
99     { "limit",		dolimit,	0,	3	},
100 #endif /* !HAVENOLIMIT */
101 #ifdef OBSOLETE
102     { "linedit",	doecho,		0,	INF	},
103 #endif /* OBSOLETE */
104 #if !defined(HAVENOUTMP) && !defined(KAI)
105     { "log",		dolog,		0,	0	},
106 #endif /* !HAVENOUTMP && !KAI */
107     { "login",		dologin,	0,	1	},
108     { "logout",		dologout,	0,	0	},
109     { "ls-F",		dolist,		0,	INF	},
110 #ifdef TCF
111     { "migrate",	domigrate,	1,	INF	},
112 #endif /* TCF */
113 #ifdef NEWGRP
114     { "newgrp",		donewgrp,	0,	2	},
115 #endif /* NEWGRP */
116     { "nice",		donice,		0,	INF	},
117     { "nohup",		donohup,	0,	INF	},
118     { "notify",		donotify,	0,	INF	},
119     { "onintr",		doonintr,	0,	2	},
120     { "popd",		dopopd,		0,	INF	},
121     { "printenv",	doprintenv,	0,	1	},
122     { "pushd",		dopushd,	0,	INF	},
123     { "rehash",		dohash,		0,	3	},
124     { "repeat",		dorepeat,	2,	INF	},
125 #ifdef apollo
126     { "rootnode",	dorootnode,	1,	1	},
127 #endif /* apollo */
128     { "sched",		dosched,	0,	INF	},
129     { "set",		doset,		0,	INF	},
130     { "setenv",		dosetenv,	0,	2	},
131 #ifdef MACH
132     { "setpath",	dosetpath,	0,	INF	},
133 #endif	/* MACH */
134 #ifdef TCF
135     { "setspath",	dosetspath,	1,	INF	},
136 #endif /* TCF */
137     { "settc",		dosettc,	2,	2	},
138     { "setty", 		dosetty,	0,      INF	},
139 #ifdef TCF
140     { "setxvers",	dosetxvers,	0,	1	},
141 #endif /* TCF */
142     { "shift",		shift,		0,	1	},
143     { "source",		dosource,	1,	INF	},
144     { "stop",		dostop,		1,	INF	},
145     { "suspend",	dosuspend,	0,	0	},
146     { "switch",		doswitch,	1,	INF	},
147     { "telltc",		dotelltc,	0,	INF	},
148 #ifndef WINNT_NATIVE
149     { "termname",	dotermname,	0,  	1       },
150 #endif
151     { "time",		dotime,		0,	INF	},
152 #if defined(_CX_UX)
153     { "ucb",		doucb,		0,	INF	},
154 #endif /* _CX_UX */
155     { "umask",		doumask,	0,	1	},
156     { "unalias",	unalias,	1,	INF	},
157     { "uncomplete",	douncomplete,	1,	INF	},
158     { "unhash",		dounhash,	0,	0	},
159 #if defined(masscomp) || defined(_CX_UX)
160     { "universe",	douniverse,	0,	INF	},
161 #endif /* masscomp || _CX_UX */
162 #ifndef HAVENOLIMIT
163     { "unlimit",	dounlimit,	0,	INF	},
164 #endif /* !HAVENOLIMIT */
165     { "unset",		unset,		1,	INF	},
166     { "unsetenv",	dounsetenv,	1,	INF	},
167 #ifdef apollo
168     { "ver",		dover,		0,	INF	},
169 #endif /* apollo */
170     { "wait",		dowait,		0,	0	},
171 #ifdef WARP
172     { "warp",		dowarp,		0,	2	},
173 #endif /* WARP */
174 #if !defined(HAVENOUTMP) && defined(KAI)
175     { "watchlog",	dolog,		0,	0	},
176 #endif /* !HAVENOUTMP && KAI */
177     { "where",		dowhere,	1,	INF	},
178     { "which",		dowhich,	1,	INF	},
179     { "while",		dowhile,	1,	INF	}
180 };
181 int nbfunc = sizeof bfunc / sizeof *bfunc;
182 
183 struct srch srchn[] = {
184     { "@",		TC_LET		},
185     { "break",		TC_BREAK	},
186     { "breaksw",	TC_BRKSW	},
187     { "case",		TC_CASE		},
188     { "default", 	TC_DEFAULT	},
189     { "else",		TC_ELSE		},
190     { "end",		TC_END		},
191     { "endif",		TC_ENDIF	},
192     { "endsw",		TC_ENDSW	},
193     { "exit",		TC_EXIT		},
194     { "foreach", 	TC_FOREACH	},
195     { "goto",		TC_GOTO		},
196     { "if",		TC_IF		},
197     { "label",		TC_LABEL	},
198     { "set",		TC_SET		},
199     { "switch",		TC_SWITCH	},
200     { "while",		TC_WHILE	}
201 };
202 int nsrchn = sizeof srchn / sizeof *srchn;
203 
204 
205 /*
206  * Note: For some machines, (hpux eg.)
207  * NSIG = number of signals + 1...
208  * so we define 33 or 65 (POSIX) signals for
209  * everybody
210  */
211 
212 /* We define NUMSIG to avoid changing NSIG or MAXSIG */
213 #if defined(POSIX) && (!defined(__CYGWIN__) || defined (__x86_64__))
214 # define NUMSIG 65
215 #else /* !POSIX */
216 # define NUMSIG 33
217 #endif /* POSIX */
218 
219 int	nsig = NUMSIG - 1;	/* This should be the number of real signals */
220 				/* not counting signal 0 */
221 struct mesg mesg[NUMSIG];	/* Arrays start at [0] so we initialize from */
222 				/* 0 to 32 or 64, the max real signal number */
223 
224 void
225 mesginit(void)
226 {
227 
228 #ifdef NLS_CATALOGS
229     int i;
230 
231     for (i = 0; i < NUMSIG; i++) {
232         xfree((char *)(intptr_t)mesg[i].pname);
233 	mesg[i].pname = NULL;
234     }
235 #endif /* NLS_CATALOGS */
236 
237 #if defined(SIGNULL) || defined(DECOSF1)
238 # ifndef SIGNULL
239 #  define SIGNULL 0
240 # endif /* !SIGNULL */
241     if (mesg[SIGNULL].pname == NULL) {
242 	mesg[SIGNULL].iname = "NULL";
243 	mesg[SIGNULL].pname = CSAVS(2, 1, "Null signal");
244     }
245 #endif /* SIGNULL || DECOSF1 */
246 
247 #ifdef SIGHUP
248     if (mesg[SIGHUP].pname == NULL) {
249 	mesg[SIGHUP].iname = "HUP";
250 	mesg[SIGHUP].pname = CSAVS(2, 2, "Hangup");
251     }
252 #endif /* SIGHUP */
253 
254 #ifdef SIGINT
255     if (mesg[SIGINT].pname == NULL) {
256 	mesg[SIGINT].iname = "INT";
257 	mesg[SIGINT].pname = CSAVS(2, 3, "Interrupt");
258     }
259 #endif /* SIGINT */
260 
261 #ifdef SIGQUIT
262     if (mesg[SIGQUIT].pname == NULL) {
263 	mesg[SIGQUIT].iname = "QUIT";
264 	mesg[SIGQUIT].pname = CSAVS(2, 4, "Quit");
265     }
266 #endif /* SIGQUIT */
267 
268 #ifdef SIGILL
269     if (mesg[SIGILL].pname == NULL) {
270 	mesg[SIGILL].iname = "ILL";
271 	mesg[SIGILL].pname = CSAVS(2, 5, "Illegal instruction");
272     }
273 #endif /* SIGILL */
274 
275 #ifdef SIGTRAP
276     if (mesg[SIGTRAP].pname == NULL) {
277 	mesg[SIGTRAP].iname = "TRAP";
278 	mesg[SIGTRAP].pname = CSAVS(2, 6, "Trace/BPT trap");
279     }
280 #endif /* SIGTRAP */
281 
282 #ifdef SIGABRT
283     if (mesg[SIGABRT].pname == NULL) {
284 	mesg[SIGABRT].iname = "ABRT";
285 	mesg[SIGABRT].pname = CSAVS(2, 7, "Abort");
286     }
287 #endif /* SIGABRT */
288 
289 #ifdef SIGIOT
290     if (mesg[SIGIOT].pname == NULL) {
291 	mesg[SIGIOT].iname = "IOT";
292 	mesg[SIGIOT].pname = CSAVS(2, 8, "IOT trap");
293     }
294 #endif /* SIGIOT */
295 
296 #ifdef SIGDANGER
297     /* aiws */
298     if (mesg[SIGDANGER].pname == NULL) {
299 	mesg[SIGDANGER].iname = "DANGER";
300 	mesg[SIGDANGER].pname = CSAVS(2, 9, "System Crash Imminent");
301     }
302 #endif /* SIGDANGER */
303 
304 #ifdef SIGERR
305     /* _CRAY */
306     if (mesg[SIGERR].pname == NULL) {
307 	mesg[SIGERR].iname = "ERR";
308 	mesg[SIGERR].pname = CSAVS(2, 10, "Error exit");
309     }
310 #endif /* SIGERR */
311 
312 #ifdef SIGEMT
313     if (mesg[SIGEMT].pname == NULL) {
314 	mesg[SIGEMT].iname = "EMT";
315 	mesg[SIGEMT].pname = CSAVS(2, 11, "EMT trap");
316     }
317 #endif /* SIGEMT */
318 
319 #ifdef SIGFPE
320     if (mesg[SIGFPE].pname == NULL) {
321 	mesg[SIGFPE].iname = "FPE";
322 	mesg[SIGFPE].pname = CSAVS(2, 12, "Floating exception");
323     }
324 #endif /* SIGFPE */
325 
326 #ifdef SIGKILL
327     if (mesg[SIGKILL].pname == NULL) {
328 	mesg[SIGKILL].iname = "KILL";
329 	mesg[SIGKILL].pname = CSAVS(2, 13, "Killed");
330     }
331 #endif /* SIGKILL */
332 
333 #ifdef SIGUSR1
334     if (mesg[SIGUSR1].pname == NULL) {
335 	mesg[SIGUSR1].iname = "USR1";
336 	mesg[SIGUSR1].pname = CSAVS(2, 14, "User signal 1");
337     }
338 #endif /* SIGUSR1 */
339 
340 #ifdef SIGUSR2
341     if (mesg[SIGUSR2].pname == NULL) {
342 	mesg[SIGUSR2].iname = "USR2";
343 	mesg[SIGUSR2].pname = CSAVS(2, 15, "User signal 2");
344     }
345 #endif /* SIGUSR2 */
346 
347 #ifdef SIGSEGV
348     if (mesg[SIGSEGV].pname == NULL) {
349 	mesg[SIGSEGV].iname = "SEGV";
350 	mesg[SIGSEGV].pname = CSAVS(2, 16, "Segmentation fault");
351     }
352 #endif /* SIGSEGV */
353 
354 #ifdef SIGBUS
355     if (mesg[SIGBUS].pname == NULL) {
356 	mesg[SIGBUS].iname = "BUS";
357 	mesg[SIGBUS].pname = CSAVS(2, 17, "Bus error");
358     }
359 #endif /* SIGBUS */
360 
361 #ifdef SIGPRE
362     /* _CRAY || IBMAIX */
363     if (mesg[SIGPRE].pname == NULL) {
364 	mesg[SIGPRE].iname = "PRE";
365 	mesg[SIGPRE].pname = CSAVS(2, 18, "Program range error");
366     }
367 #endif /* SIGPRE */
368 
369 #ifdef SIGORE
370     /* _CRAY */
371     if (mesg[SIGORE].pname == NULL) {
372 	mesg[SIGORE].iname = "ORE";
373 	mesg[SIGORE].pname = CSAVS(2, 19, "Operand range error");
374     }
375 #endif /* SIGORE */
376 
377 #ifdef SIGSYS
378     if (mesg[SIGSYS].pname == NULL) {
379 	mesg[SIGSYS].iname = "SYS";
380 	mesg[SIGSYS].pname = CSAVS(2, 20, "Bad system call");
381     }
382 #endif /* SIGSYS */
383 
384 #ifdef SIGPIPE
385     if (mesg[SIGPIPE].pname == NULL) {
386 	mesg[SIGPIPE].iname = "PIPE";
387 	mesg[SIGPIPE].pname = CSAVS(2, 21, "Broken pipe");
388     }
389 #endif /* SIGPIPE */
390 
391 #ifdef SIGALRM
392     if (mesg[SIGALRM].pname == NULL) {
393 	mesg[SIGALRM].iname = "ALRM";
394 	mesg[SIGALRM].pname = CSAVS(2, 22, "Alarm clock");
395     }
396 #endif /* SIGALRM */
397 
398 #ifdef SIGTERM
399     if (mesg[SIGTERM].pname == NULL) {
400 	mesg[SIGTERM].iname = "TERM";
401 	mesg[SIGTERM].pname = CSAVS(2, 23, "Terminated");
402     }
403 #endif /* SIGTERM */
404 
405 /* SIGCLD vs SIGCHLD */
406 #if !defined(SIGCHLD) || defined(SOLARIS2) || defined(apollo) || defined(__EMX__)
407     /* If we don't define SIGCHLD, or our OS prefers SIGCLD to SIGCHLD, */
408     /* check for SIGCLD */
409 # ifdef SIGCLD
410     if (mesg[SIGCLD].pname == NULL) {
411 	mesg[SIGCLD].iname = "CLD";
412 #  ifdef BSDJOBS
413 	mesg[SIGCLD].pname = CSAVS(2, 24, "Child status change");
414 #  else /* !BSDJOBS */
415 	mesg[SIGCLD].pname = CSAVS(2, 25, "Death of child");
416 #  endif /* BSDJOBS */
417     }
418 # endif /* SIGCLD */
419 #else /* !(!SIGCHLD || SOLARIS2 || apollo || __EMX__) */
420     /* We probably define SIGCHLD */
421 # ifdef SIGCHLD
422     if (mesg[SIGCHLD].pname == NULL) {
423 	mesg[SIGCHLD].iname = "CHLD";
424 #  ifdef BSDJOBS
425 	mesg[SIGCHLD].pname = CSAVS(2, 27, "Child stopped or exited");
426 #  else /* !BSDJOBS */
427 	mesg[SIGCHLD].pname = CSAVS(2, 28, "Child exited");
428 #  endif /* BSDJOBS */
429     }
430 # endif /* SIGCHLD */
431 #endif /* !SIGCHLD || SOLARIS2 || apollo || __EMX__ */
432 
433 #ifdef SIGAPOLLO
434     /* apollo */
435     if (mesg[SIGAPOLLO].pname == NULL) {
436 	mesg[SIGAPOLLO].iname = "APOLLO";
437 	mesg[SIGAPOLLO].pname = CSAVS(2, 26, "Apollo-specific fault");
438     }
439 #endif /* SIGAPOLLO */
440 
441 #ifdef SIGPWR
442     if (mesg[SIGPWR].pname == NULL) {
443 	mesg[SIGPWR].iname = "PWR";
444 	mesg[SIGPWR].pname = CSAVS(2, 29, "Power failure");
445     }
446 #endif /* SIGPWR */
447 
448 #ifdef SIGLOST
449     if (mesg[SIGLOST].pname == NULL) {
450 	mesg[SIGLOST].iname = "LOST";
451 	mesg[SIGLOST].pname = CSAVS(2, 30, "Resource Lost");
452     }
453 #endif /* SIGLOST */
454 
455 #ifdef SIGBREAK
456     /* __EMX__ */
457     if (mesg[SIGBREAK].pname == NULL) {
458 	mesg[SIGBREAK].iname = "BREAK";
459 	mesg[SIGBREAK].pname = CSAVS(2, 31, "Break (Ctrl-Break)");
460     }
461 #endif /* SIGBREAK */
462 
463 #ifdef SIGIO
464 # if !defined(SIGPOLL) || SIGPOLL != SIGIO
465     if (mesg[SIGIO].pname == NULL) {
466 	mesg[SIGIO].iname = "IO";
467 #  ifdef cray
468 	mesg[SIGIO].pname = CSAVS(2, 32, "Input/output possible signal");
469 #  else /* !cray */
470 	mesg[SIGIO].pname = CSAVS(2, 33, "Asynchronous I/O (select)");
471 #  endif /* cray */
472     }
473 # endif /* !SIGPOLL || SIGPOLL != SIGIO */
474 #endif /* SIGIO */
475 
476 #ifdef SIGURG
477     if (mesg[SIGURG].pname == NULL) {
478 	mesg[SIGURG].iname = "URG";
479 	mesg[SIGURG].pname = CSAVS(2, 34, "Urgent condition on I/O channel");
480     }
481 #endif /* SIGURG */
482 
483 #ifdef SIGMT
484     /* cray */
485     if (mesg[SIGMT].pname == NULL) {
486 	mesg[SIGMT].iname = "MT";
487 	mesg[SIGMT].pname = CSAVS(2, 35, "Multitasking wake-up");
488     }
489 #endif /* SIGMT */
490 
491 #ifdef SIGMTKILL
492     /* cray */
493     if (mesg[SIGMTKILL].pname == NULL) {
494 	mesg[SIGMTKILL].iname = "MTKILL";
495 	mesg[SIGMTKILL].pname = CSAVS(2, 36, "Multitasking kill");
496     }
497 #endif /* SIGMTKILL */
498 
499 #ifdef SIGBUFIO
500     /* _CRAYCOM */
501     if (mesg[SIGBUFIO].pname == NULL) {
502 	mesg[SIGBUFIO].iname = "BUFIO";
503 	mesg[SIGBUFIO].pname = CSAVS(2, 37,
504 				    "Fortran asynchronous I/O completion");
505     }
506 #endif /* SIGBUFIO */
507 
508 #ifdef SIGRECOVERY
509     /* _CRAYCOM */
510     if (mesg[SIGRECOVERY].pname == NULL) {
511 	mesg[SIGRECOVERY].iname = "RECOVERY";
512 	mesg[SIGRECOVERY].pname = CSAVS(2, 38, "Recovery");
513     }
514 #endif /* SIGRECOVERY */
515 
516 #ifdef SIGUME
517     /* _CRAYCOM */
518     if (mesg[SIGUME].pname == NULL) {
519 	mesg[SIGUME].iname = "UME";
520 	mesg[SIGUME].pname = CSAVS(2, 39, "Uncorrectable memory error");
521     }
522 #endif /* SIGUME */
523 
524 #ifdef SIGCPULIM
525     /* _CRAYCOM */
526     if (mesg[SIGCPULIM].pname == NULL) {
527 	mesg[SIGCPULIM].iname = "CPULIM";
528 	mesg[SIGCPULIM].pname = CSAVS(2, 40, "CPU time limit exceeded");
529     }
530 #endif /* SIGCPULIM */
531 
532 #ifdef SIGSHUTDN
533     /* _CRAYCOM */
534     if (mesg[SIGSHUTDN].pname == NULL) {
535 	mesg[SIGSHUTDN].iname = "SHUTDN";
536 	mesg[SIGSHUTDN].pname = CSAVS(2, 41, "System shutdown imminent");
537     }
538 #endif /* SIGSHUTDN */
539 
540 #ifdef SIGNOWAK
541     /* _CRAYCOM */
542     if (mesg[SIGNOWAK].pname == NULL) {
543 	mesg[SIGNOWAK].iname = "NOWAK";
544 	mesg[SIGNOWAK].pname = CSAVS(2, 42,
545 				    "Micro-tasking group-no wakeup flag set");
546     }
547 #endif /* SIGNOWAK */
548 
549 #ifdef SIGTHERR
550     /* _CRAYCOM */
551     if (mesg[SIGTHERR].pname == NULL) {
552 	mesg[SIGTHERR].iname = "THERR";
553 	mesg[SIGTHERR].pname = CSAVS(2, 43,
554 			    "Thread error - (use cord -T for detailed info)");
555     }
556 #endif /* SIGTHERR */
557 
558 #ifdef SIGRPE
559     /* cray */
560     if (mesg[SIGRPE].pname == NULL) {
561 	mesg[SIGRPE].pname = CSAVS(2, 44, "CRAY Y-MP register parity error");
562 	mesg[SIGRPE].iname = "RPE";
563     }
564 #endif /* SIGRPE */
565 
566 #ifdef SIGINFO
567     if (mesg[SIGINFO].pname == NULL) {
568 	mesg[SIGINFO].iname = "INFO";
569 	mesg[SIGINFO].pname = CSAVS(2, 45, "Information request");
570     }
571 #endif /* SIGINFO */
572 
573 #ifdef SIGSTOP
574     if (mesg[SIGSTOP].pname == NULL) {
575 	mesg[SIGSTOP].iname = "STOP";
576 # ifdef SUSPENDED
577 	mesg[SIGSTOP].pname = CSAVS(2, 46, "Suspended (signal)");
578 # else /* !SUSPENDED */
579 	mesg[SIGSTOP].pname = CSAVS(2, 47, "Stopped (signal)");
580 # endif /* SUSPENDED */
581     }
582 #endif /* SIGSTOP */
583 
584 #ifdef SIGTSTP
585     if (mesg[SIGTSTP].pname == NULL) {
586 	mesg[SIGTSTP].iname = "TSTP";
587 # ifdef SUSPENDED
588 	mesg[SIGTSTP].pname = CSAVS(2, 48, "Suspended");
589 # else /* !SUSPENDED */
590 	mesg[SIGTSTP].pname = CSAVS(2, 49, "Stopped");
591 # endif /* SUSPENDED */
592     }
593 #endif /* SIGTSTP */
594 
595 #ifdef SIGCONT
596     if (mesg[SIGCONT].pname == NULL) {
597 	mesg[SIGCONT].iname = "CONT";
598 	mesg[SIGCONT].pname = CSAVS(2, 50, "Continued");
599     }
600 #endif /* SIGCONT */
601 
602 #ifdef SIGTTIN
603     if (mesg[SIGTTIN].pname == NULL) {
604 	mesg[SIGTTIN].iname = "TTIN";
605 # ifdef SUSPENDED
606 	mesg[SIGTTIN].pname = CSAVS(2, 51, "Suspended (tty input)");
607 # else /* !SUSPENDED */
608 	mesg[SIGTTIN].pname = CSAVS(2, 52, "Stopped (tty input)");
609 # endif /* SUSPENDED */
610     }
611 #endif /* SIGTTIN */
612 
613 #ifdef SIGTTOU
614     if (mesg[SIGTTOU].pname == NULL) {
615 	mesg[SIGTTOU].iname = "TTOU";
616 # ifdef SUSPENDED
617 	mesg[SIGTTOU].pname = CSAVS(2, 53, "Suspended (tty output)");
618 # else /* SUSPENDED */
619 	mesg[SIGTTOU].pname = CSAVS(2, 54, "Stopped (tty output)");
620 # endif /* SUSPENDED */
621     }
622 #endif /* SIGTTOU */
623 
624 #ifdef SIGWIND
625     /* UNIXPC */
626     if (mesg[SIGWIND].pname == NULL) {
627 	mesg[SIGWIND].iname = "WIND";
628 	mesg[SIGWIND].pname = CSAVS(2, 55, "Window status changed");
629     }
630 #endif /* SIGWIND */
631 
632 #ifdef SIGWINDOW
633     if (mesg[SIGWINDOW].pname == NULL) {
634 	mesg[SIGWINDOW].iname = "WINDOW";
635 	mesg[SIGWINDOW].pname = CSAVS(2, 56, "Window size changed");
636     }
637 #endif /* SIGWINDOW */
638 
639 #ifdef SIGWINCH
640     if (mesg[SIGWINCH].pname == NULL) {
641 	mesg[SIGWINCH].iname = "WINCH";
642 	mesg[SIGWINCH].pname = CSAVS(2, 56, "Window size changed");
643     }
644 #endif /* SIGWINCH */
645 
646 #ifdef SIGPHONE
647     /* UNIXPC */
648     if (mesg[SIGPHONE].pname == NULL) {
649 	mesg[SIGPHONE].iname = "PHONE";
650 	mesg[SIGPHONE].pname = CSAVS(2, 57, "Phone status changed");
651     }
652 # endif /* SIGPHONE */
653 
654 #ifdef SIGXCPU
655     if (mesg[SIGXCPU].pname == NULL) {
656 	mesg[SIGXCPU].iname = "XCPU";
657 	mesg[SIGXCPU].pname = CSAVS(2, 58, "Cputime limit exceeded");
658     }
659 #endif /* SIGXCPU */
660 
661 #ifdef SIGXFSZ
662     if (mesg[SIGXFSZ].pname == NULL) {
663 	mesg[SIGXFSZ].iname = "XFSZ";
664 	mesg[SIGXFSZ].pname = CSAVS(2, 59, "Filesize limit exceeded");
665     }
666 #endif /* SIGXFSZ */
667 
668 #ifdef SIGVTALRM
669     if (mesg[SIGVTALRM].pname == NULL) {
670 	mesg[SIGVTALRM].iname = "VTALRM";
671 	mesg[SIGVTALRM].pname = CSAVS(2, 60, "Virtual time alarm");
672     }
673 #endif /* SIGVTALRM */
674 
675 #ifdef SIGPROF
676     if (mesg[SIGPROF].pname == NULL) {
677 	mesg[SIGPROF].iname = "PROF";
678 	mesg[SIGPROF].pname = CSAVS(2, 61, "Profiling time alarm");
679     }
680 #endif /* SIGPROF */
681 
682 #ifdef SIGDIL
683     /* hpux */
684     if (mesg[SIGDIL].pname == NULL) {
685 	mesg[SIGDIL].iname = "DIL";
686 	mesg[SIGDIL].pname = CSAVS(2, 62, "DIL signal");
687     }
688 #endif /* SIGDIL */
689 
690 #ifdef SIGPOLL
691     if (mesg[SIGPOLL].pname == NULL) {
692 	mesg[SIGPOLL].iname = "POLL";
693 	mesg[SIGPOLL].pname = CSAVS(2, 63, "Pollable event occured");
694     }
695 #endif /* SIGPOLL */
696 
697 #ifdef SIGWAITING
698     /* solaris */
699     if (mesg[SIGWAITING].pname == NULL) {
700 	mesg[SIGWAITING].iname = "WAITING";
701 	mesg[SIGWAITING].pname = CSAVS(2, 64, "Process's lwps are blocked");
702     }
703 #endif /* SIGWAITING */
704 
705 #ifdef SIGLWP
706     /* solaris */
707     if (mesg[SIGLWP].pname == NULL) {
708 	mesg[SIGLWP].iname = "LWP";
709 	mesg[SIGLWP].pname = CSAVS(2, 65, "Special LWP signal");
710     }
711 #endif /* SIGLWP */
712 
713 #ifdef SIGFREEZE
714     /* solaris */
715     if (mesg[SIGFREEZE].pname == NULL) {
716 	mesg[SIGFREEZE].iname = "FREEZE";
717 	mesg[SIGFREEZE].pname = CSAVS(2, 66, "Special CPR Signal");
718     }
719 #endif /* SIGFREEZE */
720 
721 #ifdef SIGTHAW
722     /* solaris */
723     if (mesg[SIGTHAW].pname == NULL) {
724 	mesg[SIGTHAW].iname = "THAW";
725 	mesg[SIGTHAW].pname = CSAVS(2, 67, "Special CPR Signal");
726     }
727 #endif /* SIGTHAW */
728 
729 #ifdef SIGCANCEL
730     /* solaris */
731     if (mesg[SIGCANCEL].pname == NULL) {
732 	mesg[SIGCANCEL].iname = "CANCEL";
733 	mesg[SIGCANCEL].pname = CSAVS(2, 109,
734 	    "Thread cancellation signal used by libthread");
735     }
736 #endif /* SIGCANCEL */
737 
738 /*
739  * Careful, some OS's (HP/UX 10.0) define these as -1
740  */
741 #ifdef SIGRTMIN
742     /*
743      * Cannot do this at compile time; Solaris2 uses _sysconf for these
744      */
745     if (SIGRTMIN > 0 && SIGRTMIN < NUMSIG) {
746 	if (mesg[SIGRTMIN].pname == NULL) {
747 	    mesg[SIGRTMIN].iname = "RTMIN";
748 	    mesg[SIGRTMIN].pname = CSAVS(2, 68, "First Realtime Signal");
749 	}
750 
751 	if (SIGRTMIN + 1 < SIGRTMAX && SIGRTMIN + 1 < NUMSIG &&
752 	    mesg[SIGRTMIN+1].pname == NULL) {
753 	    mesg[SIGRTMIN+1].iname = "RTMIN+1";
754 	    mesg[SIGRTMIN+1].pname = CSAVS(2, 69, "Second Realtime Signal");
755 	}
756 
757 	if (SIGRTMIN + 2 < SIGRTMAX && SIGRTMIN + 2 < NUMSIG &&
758 	    mesg[SIGRTMIN+2].pname == NULL) {
759 	    mesg[SIGRTMIN+2].iname = "RTMIN+2";
760 	    mesg[SIGRTMIN+2].pname = CSAVS(2, 70, "Third Realtime Signal");
761 	}
762 
763 	if (SIGRTMIN + 3 < SIGRTMAX && SIGRTMIN + 3 < NUMSIG &&
764 	    mesg[SIGRTMIN+3].pname == NULL) {
765 	    mesg[SIGRTMIN+3].iname = "RTMIN+3";
766 	    mesg[SIGRTMIN+3].pname = CSAVS(2, 71, "Fourth Realtime Signal");
767 	}
768     }
769 #endif /* SIGRTMIN */
770 
771 #ifdef SIGRTMAX
772     /*
773      * Cannot do this at compile time; Solaris2 uses _sysconf for these
774      */
775     if (SIGRTMAX > 0 && SIGRTMAX < NUMSIG) {
776 	if (SIGRTMAX - 3 > SIGRTMIN && mesg[SIGRTMAX-3].pname == NULL) {
777 	    mesg[SIGRTMAX-3].iname = "RTMAX-3";
778 	    mesg[SIGRTMAX-3].pname = CSAVS(2, 72,
779 					   "Fourth Last Realtime Signal");
780 	}
781 
782 	if (SIGRTMAX - 2 > SIGRTMIN && mesg[SIGRTMAX-2].pname == NULL) {
783 	    mesg[SIGRTMAX-2].iname = "RTMAX-2";
784 	    mesg[SIGRTMAX-2].pname = CSAVS(2, 73,
785 					   "Third Last Realtime Signal");
786 	}
787 
788 	if (SIGRTMAX - 1 > SIGRTMIN && mesg[SIGRTMAX-1].pname == NULL) {
789 	    mesg[SIGRTMAX-1].iname = "RTMAX-1";
790 	    mesg[SIGRTMAX-1].pname = CSAVS(2, 74,
791 					   "Second Last Realtime Signal");
792 	}
793 
794 	if (SIGRTMAX > SIGRTMIN && mesg[SIGRTMAX].pname == NULL) {
795 	    mesg[SIGRTMAX].iname = "RTMAX";
796 	    mesg[SIGRTMAX].pname = CSAVS(2, 75,
797 					 "Last Realtime Signal");
798 	}
799     }
800 #endif /* SIGRTMAX */
801 
802 
803 #ifdef SIGAIO
804     /* aiws */
805     if (mesg[SIGAIO].pname == NULL) {
806 	mesg[SIGAIO].iname = "AIO";
807 	mesg[SIGAIO].pname = CSAVS(2, 76, "LAN Asyncronous I/O");
808     }
809 #endif /* SIGAIO */
810 
811 #ifdef SIGPTY
812     /* aiws */
813     if (mesg[SIGPTY].pname == NULL) {
814 	mesg[SIGPTY].iname = "PTY";
815 	mesg[SIGPTY].pname = CSAVS(2, 77, "PTY read/write availability");
816     }
817 #endif /* SIGPTY */
818 
819 #ifdef SIGIOINT
820     /* aiws */
821     if (mesg[SIGIOINT].pname == NULL) {
822 	mesg[SIGIOINT].iname = "IOINT";
823 	mesg[SIGIOINT].pname = CSAVS(2, 78, "I/O intervention required");
824     }
825 #endif /* SIGIOINT */
826 
827 #ifdef SIGGRANT
828     /* aiws */
829     if (mesg[SIGGRANT].pname == NULL) {
830 	mesg[SIGGRANT].iname = "GRANT";
831 	mesg[SIGGRANT].pname = CSAVS(2, 79, "HFT monitor mode granted");
832     }
833 #endif /* SIGGRANT */
834 
835 #ifdef SIGRETRACT
836     /* aiws */
837     if (mesg[SIGRETRACT].pname == NULL) {
838 	mesg[SIGRETRACT].iname = "RETRACT";
839 	mesg[SIGRETRACT].pname = CSAVS(2, 80,
840 				  "HFT monitor mode should be relinguished");
841     }
842 #endif /* SIGRETRACT */
843 
844 #ifdef SIGSOUND
845     /* aiws */
846     if (mesg[SIGSOUND].pname == NULL) {
847 	mesg[SIGSOUND].iname = "SOUND";
848 	mesg[SIGSOUND].pname = CSAVS(2, 81, "HFT sound control has completed");
849     }
850 #endif /* SIGSOUND */
851 
852 #ifdef SIGSMSG
853     /* aiws */
854     if (mesg[SIGSMSG].pname == NULL) {
855 	mesg[SIGSMSG].iname = "SMSG";
856 	mesg[SIGSMSG].pname = CSAVS(2, 82, "Data in HFT ring buffer");
857     }
858 #endif /* SIGMSG */
859 
860 #ifdef SIGMIGRATE
861     /* IBMAIX */
862     if (mesg[SIGMIGRATE].pname == NULL) {
863 	mesg[SIGMIGRATE].iname = "MIGRATE";
864 	mesg[SIGMIGRATE].pname = CSAVS(2, 83, "Migrate process");
865     }
866 #endif /* SIGMIGRATE */
867 
868 #ifdef SIGSAK
869     /* IBMAIX */
870     if (mesg[SIGSAK].pname == NULL) {
871 	mesg[SIGSAK].iname = "SAK";
872 	mesg[SIGSAK].pname = CSAVS(2, 84, "Secure attention key");
873     }
874 #endif /* SIGSAK */
875 
876 #ifdef SIGRESCHED
877     /* CX/UX */
878     if (mesg[SIGRESCHED].pname == NULL) {
879 	mesg[SIGRESCHED].iname = "RESCHED";
880 	mesg[SIGRESCHED].pname = CSAVS(2, 85, "Reschedule");
881     }
882 #endif /* SIGRESCHED */
883 
884 #ifdef SIGDEBUG
885     /* VMS_POSIX */
886     if (mesg[SIGDEBUG].pname == NULL) {
887 	mesg[SIGDEBUG].iname = "DEBUG";
888 	mesg[SIGDEBUG].pname = CSAVS(2, 86, "Signaling SS$_DEBUG");
889     }
890 #endif /* SIGDEBUG */
891 
892 #ifdef SIGPRIO
893     /* Lynx */
894     if (mesg[SIGPRIO].pname == NULL) {
895 	mesg[SIGPRIO].iname = "PRIO";
896 	mesg[SIGPRIO].pname = CSAVS(2, 87, "Priority changed");
897     }
898 #endif /* SIGPRIO */
899 
900 #ifdef SIGDLK
901     /* cray */
902     if (mesg[SIGDLK].pname == NULL) {
903 	mesg[SIGDLK].iname = "DLK";
904 	mesg[SIGDLK].pname = CSAVS(2, 88, "True deadlock detected");
905     }
906 #endif /* SIGDLK */
907 
908 #ifdef SIGTINT
909     /* masscomp */
910     if (mesg[SIGTINT].pname == NULL) {
911 	mesg[SIGTINT].iname = "TINT";
912 	mesg[SIGTINT].pname = CSAVS(2, 89, "New input character");
913     }
914 #endif /* SIGTINT */
915 
916 #ifdef SIGSTKFLT
917     if (mesg[SIGSTKFLT].pname == NULL) {
918 	mesg[SIGSTKFLT].iname = "STKFLT";
919 	mesg[SIGSTKFLT].pname = CSAVS(2, 90, "Stack limit exceeded");
920     }
921 #endif /* SIGSTKFLT */
922 
923 #ifdef SIGUNUSED
924     if (mesg[SIGUNUSED].pname == NULL) {
925 	mesg[SIGUNUSED].iname = "UNUSED";
926 	mesg[SIGUNUSED].pname = CSAVS(2, 91, "Unused signal");
927     }
928 #endif /* SIGUNUSED */
929 
930 #ifdef SIGOVLY
931     /* SX-4 */
932     if (mesg[SIGOVLY].pname == NULL) {
933 	mesg[SIGOVLY].iname = "OVLY";
934 	mesg[SIGOVLY].pname = CSAVS(2, 92, "LM overlay");
935     }
936 #endif /* SIGOVLY */
937 
938 #ifdef SIGFRZ
939     /* SX-4 */
940     if (mesg[SIGFRZ].pname == NULL) {
941 	mesg[SIGFRZ].iname = "FRZ";
942 	mesg[SIGFRZ].pname = CSAVS(2, 93, "system freeze");
943     }
944 #endif /* SIGFRZ */
945 
946 #ifdef SIGDFRZ
947     /* SX-4 */
948     if (mesg[SIGDFRZ].pname == NULL) {
949 	mesg[SIGDFRZ].iname = "DFRZ";
950 	mesg[SIGDFRZ].pname = CSAVS(2, 94, "system defreeze");
951     }
952 #endif /* SIGDFRZ */
953 
954 #ifdef SIGDEAD
955     /* SX-4 */
956     if (mesg[SIGDEAD].pname == NULL) {
957 	mesg[SIGDEAD].iname = "DEAD";
958 	mesg[SIGDEAD].pname = CSAVS(2, 95, "dead lock");
959     }
960 #endif /* SIGDEAD */
961 
962 #ifdef SIGXMEM
963     /* SX-4 */
964     if (mesg[SIGXMEM].pname == NULL) {
965 	mesg[SIGXMEM].iname = "XMEM";
966 	mesg[SIGXMEM].pname = CSAVS(2, 96, "exceeded memory size limit");
967     }
968 #endif /* SIGXMEM */
969 
970 #ifdef SIGXDSZ
971     /* SX-4 */
972     if (mesg[SIGXDSZ].pname == NULL) {
973 	mesg[SIGXDSZ].iname = "XDSZ";
974 	mesg[SIGXDSZ].pname = CSAVS(2, 97, "exceeded data size limit");
975     }
976 #endif /* SIGXDSZ */
977 
978 #ifdef SIGMEM32
979     /* SX-4 */
980     if (mesg[SIGMEM32].pname == NULL) {
981 	mesg[SIGMEM32].iname = "MEM32";
982 	mesg[SIGMEM32].pname = CSAVS(2, 98, "exceeded memory size limit of 32KB");
983     }
984 #endif /* SIGMEM32 */
985 
986 #ifdef SIGNMEM
987     /* SX-4 */
988     if (mesg[SIGNMEM].pname == NULL) {
989 	mesg[SIGNMEM].iname = "NMEM";
990 	mesg[SIGNMEM].pname = CSAVS(2, 99, "exce error for no memory");
991     }
992 #endif /* SIGNMEM */
993 
994 #ifdef SIGCHKP
995     /* SX-4 */
996     if (mesg[SIGCHKP].pname == NULL) {
997 	mesg[SIGCHKP].iname = "CHKP";
998 	mesg[SIGCHKP].pname = CSAVS(2, 100, "check point start");
999     }
1000 #endif /* SIGCHKP */
1001 
1002 #ifdef SIGKCHKP
1003 #if 0
1004     /* SX-4 */
1005     if (mesg[SIGKCHKP].pname == NULL) {
1006 	mesg[SIGKCHKP].iname = "KCHKP";
1007 	mesg[SIGKCHKP].pname = CSAVS(2, 101, "check point start of kernel");
1008     }
1009 #endif
1010 #endif /* SIGKCHKP */
1011 
1012 #ifdef SIGRSTA
1013     /* SX-4 */
1014     if (mesg[SIGRSTA].pname == NULL) {
1015 	mesg[SIGRSTA].iname = "RSTA";
1016 	mesg[SIGRSTA].pname = CSAVS(2, 102, "restart start");
1017     }
1018 #endif /* SIGRSTA */
1019 
1020 #ifdef SIGKRSTA
1021 #if 0
1022     /* SX-4 */
1023     if (mesg[SIGKRSTA].pname == NULL) {
1024 	mesg[SIGKRSTA].iname = "KRSTA";
1025 	mesg[SIGKRSTA].pname = CSAVS(2, 103, "restart of kernel");
1026     }
1027 #endif
1028 #endif /* SIGKRSTA */
1029 
1030 #ifdef SIGXXMU
1031     /* SX-4 */
1032     if (mesg[SIGXXMU].pname == NULL) {
1033 	mesg[SIGXXMU].iname = "XXMU";
1034 	mesg[SIGXXMU].pname = CSAVS(2, 104, "exeeded XMU size limit");
1035     }
1036 #endif /* SIGXXMU */
1037 
1038 #ifdef SIGXRLG0
1039     /* SX-4 */
1040     if (mesg[SIGXRLG0].pname == NULL) {
1041 	mesg[SIGXRLG0].iname = "XRLG0";
1042 	mesg[SIGXRLG0].pname = CSAVS(2, 105, "exeeded RLG0 limit");
1043     }
1044 #endif /* SIGXRLG0 */
1045 
1046 #ifdef SIGXRLG1
1047     /* SX-4 */
1048     if (mesg[SIGXRLG1].pname == NULL) {
1049 	mesg[SIGXRLG1].iname = "XRLG1";
1050 	mesg[SIGXRLG1].pname = CSAVS(2, 106, "exeeded RLG1 limit");
1051     }
1052 #endif /* SIGXRLG1 */
1053 
1054 #ifdef SIGXRLG2
1055     /* SX-4 */
1056     if (mesg[SIGXRLG2].pname == NULL) {
1057 	mesg[SIGXRLG2].iname = "XRLG2";
1058 	mesg[SIGXRLG2].pname = CSAVS(2, 107, "exeeded RLG2 limit");
1059     }
1060 #endif /* SIGXRLG2 */
1061 
1062 #ifdef SIGXRLG3
1063     /* SX-4 */
1064     if (mesg[SIGXRLG3].pname == NULL) {
1065 	mesg[SIGXRLG3].iname = "XRLG3";
1066 	mesg[SIGXRLG3].pname = CSAVS(2, 108, "exeeded RLG3 limit");
1067     }
1068 #endif /* SIGXRLG3 */
1069 }
1070