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