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