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