sh.init.c revision 59243
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
39RCSID("$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
50struct	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};
189int nbfunc = sizeof bfunc / sizeof *bfunc;
190
191struct 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};
210int 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
227int	nsig = NUMSIG - 1;	/* This should be the number of real signals */
228				/* not counting signal 0 */
229struct	mesg mesg[NUMSIG];	/* Arrays start at [0] so we initialize from */
230				/* 0 to 32 or 64, the max real signal number */
231
232void
233mesginit()
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