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 42 const 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 }; 181 int nbfunc = sizeof bfunc / sizeof *bfunc; 182 183 struct 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 }; 202 int 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 219 int nsig = NUMSIG - 1; /* This should be the number of real signals */ 220 /* not counting signal 0 */ 221 struct mesg mesg[NUMSIG]; /* Arrays start at [0] so we initialize from */ 222 /* 0 to 32 or 64, the max real signal number */ 223 224 void 225 mesginit(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 #ifdef SIGCKPT 1071 /* DragonFly BSD */ 1072 if (mesg[SIGCKPT].pname == NULL) { 1073 mesg[SIGCKPT].iname = "CKPT"; 1074 mesg[SIGCKPT].pname = CSAVS(2, 109, "CheckPoint"); 1075 } 1076 #endif /* SIGCKPT */ 1077 1078 #ifdef SIGCKPTEXIT 1079 /* DragonFly BSD */ 1080 if (mesg[SIGCKPTEXIT].pname == NULL) { 1081 mesg[SIGCKPTEXIT].iname = "CKPTEXIT"; 1082 mesg[SIGCKPTEXIT].pname = CSAVS(2, 110, "CheckPointExit"); 1083 } 1084 #endif /* SIGCKPTEXIT */ 1085 } 1086