sh.init.c revision 100616
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
35RCSID("$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
46struct	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};
185int nbfunc = sizeof bfunc / sizeof *bfunc;
186
187struct 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};
206int 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
223int	nsig = NUMSIG - 1;	/* This should be the number of real signals */
224				/* not counting signal 0 */
225struct	mesg mesg[NUMSIG];	/* Arrays start at [0] so we initialize from */
226				/* 0 to 32 or 64, the max real signal number */
227
228void
229mesginit()
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