diff options
author | Tavis Ormandy <taviso@gentoo.org> | 2003-05-28 21:24:33 +0000 |
---|---|---|
committer | Tavis Ormandy <taviso@gentoo.org> | 2003-05-28 21:24:33 +0000 |
commit | 626cebbfc5601bc3836ed9162629692f20dfb82f (patch) | |
tree | c0cab960b1c8406317f4023b12357c73d2c4df73 /app-shells/csh | |
parent | Version bump plus proper ldap.conf file installed. (diff) | |
download | historical-626cebbfc5601bc3836ed9162629692f20dfb82f.tar.gz historical-626cebbfc5601bc3836ed9162629692f20dfb82f.tar.bz2 historical-626cebbfc5601bc3836ed9162629692f20dfb82f.zip |
Initial import, Classic C Shell from the NetBSD project.
Diffstat (limited to 'app-shells/csh')
-rw-r--r-- | app-shells/csh/ChangeLog | 10 | ||||
-rw-r--r-- | app-shells/csh/Manifest | 5 | ||||
-rw-r--r-- | app-shells/csh/csh-1.29.ebuild | 120 | ||||
-rw-r--r-- | app-shells/csh/files/digest-csh-1.29 | 3 | ||||
-rw-r--r-- | app-shells/csh/files/linux-vs-bsd.diff | 274 | ||||
-rw-r--r-- | app-shells/csh/files/mksignames.c | 422 |
6 files changed, 834 insertions, 0 deletions
diff --git a/app-shells/csh/ChangeLog b/app-shells/csh/ChangeLog new file mode 100644 index 000000000000..09af05733d9a --- /dev/null +++ b/app-shells/csh/ChangeLog @@ -0,0 +1,10 @@ +# ChangeLog for app-shells/csh +# Copyright 2000-2003 Gentoo Technologies, Inc.; Distributed under the GPL v2 +# $Header: /var/cvsroot/gentoo-x86/app-shells/csh/ChangeLog,v 1.1 2003/05/28 21:24:25 taviso Exp $ + +*csh-1.29 (28 May 2003) + + 28 May 2003; Tavis Ormandy <taviso@gentoo.org> csh-1.29.ebuild: + Initial import, the classic C Shell, tricky to write ebuild for. + Hope it works. + diff --git a/app-shells/csh/Manifest b/app-shells/csh/Manifest new file mode 100644 index 000000000000..c41256256176 --- /dev/null +++ b/app-shells/csh/Manifest @@ -0,0 +1,5 @@ +MD5 6cbedb846fcedeab473455648f92d59c csh-1.29.ebuild 3789 +MD5 55777b960a6a64596e4a5bad592c78af ChangeLog 386 +MD5 49c0a95e6881eb7e2932d149f62f0de2 files/mksignames.c 10722 +MD5 49ee962115384f8a0acedfcf225fd27a files/digest-csh-1.29 148 +MD5 213922a7d6fdee0a89e9a349653be22d files/linux-vs-bsd.diff 7483 diff --git a/app-shells/csh/csh-1.29.ebuild b/app-shells/csh/csh-1.29.ebuild new file mode 100644 index 000000000000..9a79ff1381e0 --- /dev/null +++ b/app-shells/csh/csh-1.29.ebuild @@ -0,0 +1,120 @@ +# Copyright 1999-2003 Gentoo Technologies, Inc. +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/app-shells/csh/csh-1.29.ebuild,v 1.1 2003/05/28 21:24:25 taviso Exp $ + +DESCRIPTION="Classic UNIX shell with C like syntax" +HOMEPAGE="http://www.netbsd.org/" + +SRC_URI="ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-release-1-6/src/usr.bin/printf/printf.c + ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-release-1-6/src/include/vis.h + ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-release-1-6/src/lib/libc/gen/vis.c" + +RESTRICT="nomirror" + +# theres basically a choice of fetching the individual files via +# ftp, and using nomirror to stop spamming the mirrors, or fetch +# a tarball of the whole lot and waste bandwidth. +# +# the other option is to check it out of cvs, using tags to make +# sure we get a consistent version. +# +# i decided to go with cvs. + +inherit cvs flag-o-matic eutils ccc + +LICENSE="BSD GPL-2" +SLOT="0" +KEYWORDS="~x86 ~alpha" +IUSE="static doc" + +DEPEND="virtual/glibc + sys-devel/pmake + >=sys-apps/sed-4 + sys-apps/groff" +RDEPEND="virtual/glibc" + +ECVS_SERVER="anoncvs.netbsd.org:/cvsroot" +ECVS_MODULE="src/bin/csh" +ECVS_USER="anoncvs" +ECVS_PASS="anoncvs" +ECVS_BRANCH="netbsd-1-6" + +S="${WORKDIR}/${ECVS_MODULE}" + +src_compile() { + # hide some BSDisms, mostly my work, got some hints from the + # debian project (they use an older OpenBSD csh, though). + cd ${S}; epatch ${FILESDIR}/linux-vs-bsd.diff || die "patching failed." + + # copy some required files over, two from NetBSD + # and one provided with the bash shell. + + # The file `mksignames.c` and the product of its execution + # is the only reason this ebuild is dual license, without + # this code (eg make your own array) this shell will be + # 100% BSD. i borrowed it from bash-2.05b, btw. + + cd ${S}; cp ${DISTDIR}/printf.c \ + ${DISTDIR}/vis.h \ + ${FILESDIR}/mksignames.c \ + ${DISTDIR}/vis.c \ + ${S} + # this utility spits out an array of signal names. + + einfo "Making a list of signal names..." + ${CC:-gcc} ${CFLAGS} ${LDFLAGS} -o ${T}/mksignames ${S}/mksignames.c + ${T}/mksignames > ${S}/signames.h || die "couldnt get a list of signals." + + einfo "Adding flags required for succesful compilation..." + # this should be easier than maintaining a patch. + for i in {-Dlint,-w,-D__dead="",-D__LIBC12_SOURCE__,-DNODEV="-1",-DTTYHOG=1024,-DMAXPATHLEN=4096,-D_GNU_SOURCE,-D_DIAGASSERT="assert"} + do + append-flags ${i} + done + + einfo "Making some final tweaks..." + sed -i 's#sys/tty.h#linux/tty.h#g' ${S}/file.c + sed -i 's!\(#include "proc.h"\)!\1\n#include "signames.h"\n!g' ${S}/proc.c + sed -i 's#\(strpct.c time.c\)#\1 vis.c#g' ${S}/Makefile + sed -i 's!#include "namespace.h"!!g' ${S}/vis.c + + # maybe they dont warn on BSD, but _damn_. + export NOGCCERROR=1 + + # if csh is a users preferred shell, they may want + # a static binary to help on the event of fs emergency. + use static && append-ldflags -static + + # pmake is a portage binary as well, so specify full path. + # if yours isnt in /usr/bin, you can set PMAKE_PATH. + einfo "Starting build..." + ${PMAKE_PATH:-/usr/bin/}pmake || die "compile failed." + + # make the c shell guide + use doc && { + einfo "Making documentation..." + cd ${S}/USD.doc + ${PMAKE_PATH:-/usr/bin/}pmake + } + cd ${S} +} + +src_install() { + exeinto /bin + doexe csh + doman csh.1 + dodoc USD.doc/paper.ps +} + +pkg_postinst() { + use doc >/dev/null && { + einfo "An Introduction to the C shell by William Joy, a " + einfo "postscript document included with this shell has" + einfo "been installed in /usr/share/docs/${P}, if you are new" + einfo "to the C shell, you may find it interesting." + } || { + einfo "You didnt have the \`doc\` use flag set, the" + einfo "postscript document \"An Introduction to the C" + einfo "shell by William Joy\" was not installed." + } +} diff --git a/app-shells/csh/files/digest-csh-1.29 b/app-shells/csh/files/digest-csh-1.29 new file mode 100644 index 000000000000..71a8e7c61076 --- /dev/null +++ b/app-shells/csh/files/digest-csh-1.29 @@ -0,0 +1,3 @@ +MD5 d0c13a13ddd3348f2690ebce3ca31197 printf.c 10839 +MD5 1407b2e7112b8fafe35fdf4b922bb6b9 vis.h 3706 +MD5 6d4159b84708bbbc90cf0a6518ef2beb vis.c 9542 diff --git a/app-shells/csh/files/linux-vs-bsd.diff b/app-shells/csh/files/linux-vs-bsd.diff new file mode 100644 index 000000000000..ac98999f3e88 --- /dev/null +++ b/app-shells/csh/files/linux-vs-bsd.diff @@ -0,0 +1,274 @@ +diff --minimal -ruw csh/csh.c csh/csh.c +--- csh/csh.c 2003-05-28 21:32:36.000000000 +0100 ++++ csh/csh.c 2003-05-28 21:31:51.000000000 +0100 +@@ -102,9 +102,9 @@ + + extern char **environ; + +-static int readf(void *, char *, int); +-static fpos_t seekf(void *, fpos_t, int); +-static int writef(void *, const char *, int); ++static ssize_t readf(void *, char *, size_t); ++static int seekf(void *, off_t, int); ++static ssize_t writef(void *, const char *, size_t); + static int closef(void *); + static int srccat(Char *, Char *); + static int srcfile(char *, bool, bool); +@@ -124,6 +124,7 @@ + Char *cp; + char *tcp, **tempv; + const char *ecp; ++ cookie_io_functions_t cookie; + sigset_t sigset; + int f; + +@@ -131,7 +132,7 @@ + cshout = stdout; + csherr = stderr; + +- setprogname(argv[0]); ++ /* setprogname(argv[0]); */ + settimes(); /* Immed. estab. timing base */ + + /* +@@ -215,14 +216,15 @@ + * Fortunately this is not needed under the current implementation + * of stdio. + */ +- (void)fclose(cshin); +- (void)fclose(cshout); +- (void)fclose(csherr); +- if (!(cshin = funopen((void *) &SHIN, readf, writef, seekf, closef))) ++ cookie.read = readf; ++ cookie.write = writef; ++ cookie.seek = seekf; ++ cookie.close = closef; ++ if (!(cshin = fopencookie((void *) &SHIN, "r", cookie))) + exit(1); +- if (!(cshout = funopen((void *) &SHOUT, readf, writef, seekf, closef))) ++ if (!(cshout = fopencookie((void *) &SHOUT, "w", cookie))) + exit(1); +- if (!(csherr = funopen((void *) &SHERR, readf, writef, seekf, closef))) ++ if (!(csherr = fopencookie((void *) &SHERR, "w", cookie))) + exit(1); + (void)setvbuf(cshin, NULL, _IOLBF, 0); + (void)setvbuf(cshout, NULL, _IOLBF, 0); +@@ -1241,21 +1243,21 @@ + */ + #define DESC(a) (*((int *) (a)) - (didfds && *((int *) a) >= FSHIN ? FSHIN : 0)) + +-static int +-readf(void *oreo, char *buf, int siz) ++static ssize_t ++readf(void *oreo, char *buf, size_t siz) + { + return read(DESC(oreo), buf, siz); + } + + +-static int +-writef(void *oreo, const char *buf, int siz) ++static ssize_t ++writef(void *oreo, const char *buf, size_t siz) + { + return write(DESC(oreo), buf, siz); + } + +-static fpos_t +-seekf(void *oreo, fpos_t off, int whence) ++static int ++seekf(void *oreo, off_t off, int whence) + { + return lseek(DESC(oreo), off, whence); + } +diff --minimal -ruw csh/dir.c csh/dir.c +--- csh/dir.c 2003-05-28 21:32:36.000000000 +0100 ++++ csh/dir.c 2003-05-28 21:31:51.000000000 +0100 +@@ -854,7 +854,7 @@ + if (p1 && *p1 == '/' && + (Strncmp(p1, cp, cc) != 0 || (cp[cc] != '/' && cp[cc] != '\0'))) { + static ino_t home_ino; +- static dev_t home_dev = NODEV; ++ static dev_t home_dev = -1; + static Char *home_ptr = NULL; + struct stat statbuf; + +diff --minimal -ruw csh/extern.h /tmp/csh/extern.h +--- csh/extern.h 2003-05-28 21:32:36.000000000 +0100 ++++ csh/extern.h 2003-05-28 21:31:51.000000000 +0100 +@@ -39,6 +39,13 @@ + #define _EXTERN_H_ + + #include <sys/cdefs.h> ++#include <stdio_ext.h> ++ ++#define fpurge __fpurge ++ ++size_t strlcpy(char *, const char *, size_t); ++ ++extern const char *const sys_signame[]; + + /* + * csh.c +diff --minimal -ruw csh/func.c csh/func.c +--- csh/func.c 2003-05-28 21:32:36.000000000 +0100 ++++ csh/func.c 2003-05-28 21:31:51.000000000 +0100 +@@ -50,6 +50,7 @@ + #include <stdlib.h> + #include <string.h> + #include <unistd.h> ++#include <errno.h> + + #if __STDC__ + # include <stdarg.h> +@@ -63,6 +64,7 @@ + + extern char **environ; + extern int progprintf(int, char **); ++extern int errno; + + static void islogin(void); + static void reexecute(struct command *); +@@ -1428,8 +1430,8 @@ + int ret; + + ret = progprintf(blklen(v), c = short2blk(v)); +- (void)fflush(cshout); +- (void)fflush(csherr); ++ (void)fflush(stdout); ++ (void)fflush(stderr); + + blkfree((Char **) c); + if (ret) +diff --minimal -ruw csh/glob.c csh/glob.c +--- csh/glob.c 2003-05-28 21:32:36.000000000 +0100 ++++ csh/glob.c 2003-05-28 21:31:51.000000000 +0100 +@@ -402,7 +402,8 @@ + + do { + ptr = short2qstr(*vl); +- switch (glob(ptr, gflgs, 0, &globv)) { ++ switch (glob(ptr, nonomatch || glob_pattern_p(ptr, 1) ++ ? gflgs : gflgs | GLOB_NOCHECK, 0, &globv)) { + case GLOB_ABORTED: + setname(vis_str(*vl)); + stderror(ERR_NAME | ERR_GLOB); +@@ -410,17 +411,17 @@ + case GLOB_NOSPACE: + stderror(ERR_NOMEM); + /* NOTREACHED */ ++ case GLOB_NOMATCH: ++ magic = 1; ++ break; + default: ++ match |= globv.gl_flags & GLOB_MAGCHAR; + break; + } +- if (globv.gl_flags & GLOB_MAGCHAR) { +- match |= (globv.gl_matchc != 0); +- magic = 1; +- } + gflgs |= GLOB_APPEND; + } + while (*++vl); +- vl = (globv.gl_pathc == 0 || (magic && !match && !nonomatch)) ? ++ vl = (globv.gl_pathc == 0 || (magic && !match)) ? + NULL : blk2short(globv.gl_pathv); + globfree(&globv); + return (vl); +diff --minimal -ruw csh/pathnames.h csh/pathnames.h +--- csh/pathnames.h 2003-05-28 21:32:36.000000000 +0100 ++++ csh/pathnames.h 2003-05-28 21:31:51.000000000 +0100 +@@ -42,7 +42,7 @@ + #define _PATH_DOTCSHRC "/etc/csh.cshrc" + #define _PATH_DOTLOGIN "/etc/csh.login" + #define _PATH_DOTLOGOUT "/etc/csh.logout" +-#define _PATH_LOGIN "/usr/bin/login" ++#define _PATH_LOGIN "/bin/login" + #define _PATH_USRBIN "/usr/bin" + + #endif /* !_PATHNAMES_H_ */ +diff --minimal -ruw csh/proc.c csh/proc.c +--- csh/proc.c 2003-05-28 21:32:36.000000000 +0100 ++++ csh/proc.c 2003-05-28 21:31:51.000000000 +0100 +@@ -951,13 +951,21 @@ + stderror(ERR_NAME | ERR_BADSIG); + else if (signum == 0) + (void)fputc('0', cshout); /* 0's symbolic name is '0' */ ++ else if (!sys_signame[signum]) ++ (void) fprintf(cshout, "%d", signum); + else + (void)fprintf(cshout, "%s ", sys_signame[signum]); + } else { +- for (signum = 1; signum < NSIG; signum++) { +- (void)fprintf(cshout, "%s ", sys_signame[signum]); +- if (signum == NSIG / 2) ++ int cur = 0, len; ++ for (signum = 1; signum < NSIG; signum++) ++ if (sys_signame[signum]) { ++ len = strlen (sys_signame[signum]) + 1; ++ cur += len; ++ if (cur >= 80 - 1) { + (void)fputc('\n', cshout); ++ cur = len; ++ } ++ (void) fprintf(cshout, "%s ", sys_signame[signum]); + } + } + (void)fputc('\n', cshout); +@@ -979,9 +987,10 @@ + + name = short2str(signame); + for (signum = 1; signum < NSIG; signum++) +- if (!strcasecmp(sys_signame[signum], name) || +- (!strncasecmp("SIG", name, 3) && /* skip "SIG" prefix */ +- !strcasecmp(sys_signame[signum], name + 3))) ++ if (sys_signame[signum] && \ ++ (!strcasecmp(sys_signame[signum], name) || ++ (strlen(name) > 3 && !strncasecmp("SIG", name, 3) && ++ !strcasecmp(sys_signame[signum], name + 3)))) + break; + + if (signum == NSIG) { +diff --minimal -ruw csh/set.c csh/set.c +--- csh/set.c 2003-05-28 21:32:36.000000000 +0100 ++++ csh/set.c 2003-05-28 21:31:51.000000000 +0100 +@@ -633,7 +633,6 @@ + Setenv(STRPATH, exppath); + } + +-#ifndef lint + /* + * Lint thinks these have null effect + */ +@@ -650,19 +649,6 @@ + ((p)->v_right = t->v_left) ? (t->v_left->v_parent = (p)) : 0,\ + (t->v_left = (p))->v_parent = t,\ + (p) = t) +-#else +-struct varent * +-rleft(struct varent *p) +-{ +- return (p); +-} +-struct varent * +-rright(struct varent *p) +-{ +- return (p); +-} +-#endif /* ! lint */ +- + + /* + * Rebalance a tree, starting at p and up. +@@ -674,10 +660,8 @@ + { + struct varent *pp; + +-#ifndef lint + struct varent *t; /* used by the rotate macros */ + +-#endif + int ff; + + /* diff --git a/app-shells/csh/files/mksignames.c b/app-shells/csh/files/mksignames.c new file mode 100644 index 000000000000..fb6f44360438 --- /dev/null +++ b/app-shells/csh/files/mksignames.c @@ -0,0 +1,422 @@ +/* signames.c -- Create and write `signames.h', which contains an array of + signal names. */ + +/* Copyright (C) 1992 Free Software Foundation, Inc. + + This file is part of GNU Bash, the Bourne Again SHell. + + Bash is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2, or (at your option) any later + version. + + Bash is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + for more details. + + You should have received a copy of the GNU General Public License along + with Bash; see the file COPYING. If not, write to the Free Software + Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ + +#include <stdio.h> +#include <sys/types.h> +#include <signal.h> +#include <stdlib.h> + +#if !defined (NSIG) +# define NSIG 64 +#endif + +/* + * Special traps: + * EXIT == 0 + * DEBUG == NSIG + * ERR == NSIG+1 + */ +#define LASTSIG NSIG+1 + +char *signal_names[2 * NSIG + 3]; + +#define signal_names_size (sizeof(signal_names)/sizeof(signal_names[0])) + +char *progname; + +/* AIX 4.3 defines SIGRTMIN and SIGRTMAX as 888 and 999 respectively. + I don't want to allocate so much unused space for the intervening signal + numbers, so we just punt if SIGRTMAX is past the bounds of the + signal_names array (handled in configure). */ +#if defined (SIGRTMAX) && defined (UNUSABLE_RT_SIGNALS) +# undef SIGRTMAX +# undef SIGRTMIN +#endif + +#if defined (SIGRTMAX) || defined (SIGRTMIN) +# define RTLEN 14 +# define RTLIM 256 +#endif + +void +initialize_signames () +{ + register int i; +#if defined (SIGRTMAX) || defined (SIGRTMIN) + int rtmin, rtmax, rtcnt; +#endif + + for (i = 1; i < signal_names_size; i++) + signal_names[i] = (char *)NULL; + + /* `signal' 0 is what we do on exit. */ + signal_names[0] = "EXIT"; + + /* Place signal names which can be aliases for more common signal + names first. This allows (for example) SIGABRT to overwrite SIGLOST. */ + + /* POSIX 1003.1b-1993 real time signals, but take care of incomplete + implementations. Acoording to the standard, both, SIGRTMIN and + SIGRTMAX must be defined, SIGRTMIN must be stricly less than + SIGRTMAX, and the difference must be at least 7, that is, there + must be at least eight distinct real time signals. */ + + /* The generated signal names are SIGRTMIN, SIGRTMIN+1, ..., + SIGRTMIN+x, SIGRTMAX-x, ..., SIGRTMAX-1, SIGRTMAX. If the number + of RT signals is odd, there is an extra SIGRTMIN+(x+1). + These names are the ones used by ksh and /usr/xpg4/bin/sh on SunOS5. */ + +#if defined (SIGRTMIN) + rtmin = SIGRTMIN; + signal_names[rtmin] = "SIGRTMIN"; +#endif + +#if defined (SIGRTMAX) + rtmax = SIGRTMAX; + signal_names[rtmax] = "SIGRTMAX"; +#endif + +#if defined (SIGRTMAX) && defined (SIGRTMIN) + if (rtmax > rtmin) + { + rtcnt = (rtmax - rtmin - 1) / 2; + /* croak if there are too many RT signals */ + if (rtcnt >= RTLIM/2) + { + rtcnt = RTLIM/2-1; + fprintf(stderr, "%s: error: more than %i real time signals, fix `%s'\n", + progname, RTLIM, progname); + } + + for (i = 1; i <= rtcnt; i++) + { + signal_names[rtmin+i] = (char *)malloc(RTLEN); + if (signal_names[rtmin+i]) + sprintf (signal_names[rtmin+i], "SIGRTMIN+%d", i); + signal_names[rtmax-i] = (char *)malloc(RTLEN); + if (signal_names[rtmax-i]) + sprintf (signal_names[rtmax-i], "SIGRTMAX-%d", i); + } + + if (rtcnt < RTLIM/2-1 && rtcnt != (rtmax-rtmin)/2) + { + /* Need an extra RTMIN signal */ + signal_names[rtmin+rtcnt+1] = (char *)malloc(RTLEN); + if (signal_names[rtmin+rtcnt+1]) + sprintf (signal_names[rtmin+rtcnt+1], "SIGRTMIN+%d", rtcnt+1); + } + } +#endif /* SIGRTMIN && SIGRTMAX */ + +/* AIX */ +#if defined (SIGLOST) /* resource lost (eg, record-lock lost) */ + signal_names[SIGLOST] = "SIGLOST"; +#endif + +#if defined (SIGMSG) /* HFT input data pending */ + signal_names[SIGMSG] = "SIGMSG"; +#endif + +#if defined (SIGDANGER) /* system crash imminent */ + signal_names[SIGDANGER] = "SIGDANGER"; +#endif + +#if defined (SIGMIGRATE) /* migrate process to another CPU */ + signal_names[SIGMIGRATE] = "SIGMIGRATE"; +#endif + +#if defined (SIGPRE) /* programming error */ + signal_names[SIGPRE] = "SIGPRE"; +#endif + +#if defined (SIGVIRT) /* AIX virtual time alarm */ + signal_names[SIGVIRT] = "SIGVIRT"; +#endif + +#if defined (SIGALRM1) /* m:n condition variables */ + signal_names[SIGALRM1] = "SIGALRM1"; +#endif + +#if defined (SIGWAITING) /* m:n scheduling */ + signal_names[SIGWAITING] = "SIGWAITING"; +#endif + +#if defined (SIGGRANT) /* HFT monitor mode granted */ + signal_names[SIGGRANT] = "SIGGRANT"; +#endif + +#if defined (SIGKAP) /* keep alive poll from native keyboard */ + signal_names[SIGKAP] = "SIGKAP"; +#endif + +#if defined (SIGRETRACT) /* HFT monitor mode retracted */ + signal_names[SIGRETRACT] = "SIGRETRACT"; +#endif + +#if defined (SIGSOUND) /* HFT sound sequence has completed */ + signal_names[SIGSOUND] = "SIGSOUND"; +#endif + +#if defined (SIGSAK) /* Secure Attention Key */ + signal_names[SIGSAK] = "SIGSAK"; +#endif + +/* SunOS5 */ +#if defined (SIGLWP) /* special signal used by thread library */ + signal_names[SIGLWP] = "SIGLWP"; +#endif + +#if defined (SIGFREEZE) /* special signal used by CPR */ + signal_names[SIGFREEZE] = "SIGFREEZE"; +#endif + +#if defined (SIGTHAW) /* special signal used by CPR */ + signal_names[SIGTHAW] = "SIGTHAW"; +#endif + +#if defined (SIGCANCEL) /* thread cancellation signal used by libthread */ + signal_names[SIGCANCEL] = "SIGCANCEL"; +#endif + +/* HP-UX */ +#if defined (SIGDIL) /* DIL signal (?) */ + signal_names[SIGDIL] = "SIGDIL"; +#endif + +/* System V */ +#if defined (SIGCLD) /* Like SIGCHLD. */ + signal_names[SIGCLD] = "SIGCLD"; +#endif + +#if defined (SIGPWR) /* power state indication */ + signal_names[SIGPWR] = "SIGPWR"; +#endif + +#if defined (SIGPOLL) /* Pollable event (for streams) */ + signal_names[SIGPOLL] = "SIGPOLL"; +#endif + +/* Unknown */ +#if defined (SIGWINDOW) + signal_names[SIGWINDOW] = "SIGWINDOW"; +#endif + +/* Common */ +#if defined (SIGHUP) /* hangup */ + signal_names[SIGHUP] = "SIGHUP"; +#endif + +#if defined (SIGINT) /* interrupt */ + signal_names[SIGINT] = "SIGINT"; +#endif + +#if defined (SIGQUIT) /* quit */ + signal_names[SIGQUIT] = "SIGQUIT"; +#endif + +#if defined (SIGILL) /* illegal instruction (not reset when caught) */ + signal_names[SIGILL] = "SIGILL"; +#endif + +#if defined (SIGTRAP) /* trace trap (not reset when caught) */ + signal_names[SIGTRAP] = "SIGTRAP"; +#endif + +#if defined (SIGIOT) /* IOT instruction */ + signal_names[SIGIOT] = "SIGIOT"; +#endif + +#if defined (SIGABRT) /* Cause current process to dump core. */ + signal_names[SIGABRT] = "SIGABRT"; +#endif + +#if defined (SIGEMT) /* EMT instruction */ + signal_names[SIGEMT] = "SIGEMT"; +#endif + +#if defined (SIGFPE) /* floating point exception */ + signal_names[SIGFPE] = "SIGFPE"; +#endif + +#if defined (SIGKILL) /* kill (cannot be caught or ignored) */ + signal_names[SIGKILL] = "SIGKILL"; +#endif + +#if defined (SIGBUS) /* bus error */ + signal_names[SIGBUS] = "SIGBUS"; +#endif + +#if defined (SIGSEGV) /* segmentation violation */ + signal_names[SIGSEGV] = "SIGSEGV"; +#endif + +#if defined (SIGSYS) /* bad argument to system call */ + signal_names[SIGSYS] = "SIGSYS"; +#endif + +#if defined (SIGPIPE) /* write on a pipe with no one to read it */ + signal_names[SIGPIPE] = "SIGPIPE"; +#endif + +#if defined (SIGALRM) /* alarm clock */ + signal_names[SIGALRM] = "SIGALRM"; +#endif + +#if defined (SIGTERM) /* software termination signal from kill */ + signal_names[SIGTERM] = "SIGTERM"; +#endif + +#if defined (SIGURG) /* urgent condition on IO channel */ + signal_names[SIGURG] = "SIGURG"; +#endif + +#if defined (SIGSTOP) /* sendable stop signal not from tty */ + signal_names[SIGSTOP] = "SIGSTOP"; +#endif + +#if defined (SIGTSTP) /* stop signal from tty */ + signal_names[SIGTSTP] = "SIGTSTP"; +#endif + +#if defined (SIGCONT) /* continue a stopped process */ + signal_names[SIGCONT] = "SIGCONT"; +#endif + +#if defined (SIGCHLD) /* to parent on child stop or exit */ + signal_names[SIGCHLD] = "SIGCHLD"; +#endif + +#if defined (SIGTTIN) /* to readers pgrp upon background tty read */ + signal_names[SIGTTIN] = "SIGTTIN"; +#endif + +#if defined (SIGTTOU) /* like TTIN for output if (tp->t_local<OSTOP) */ + signal_names[SIGTTOU] = "SIGTTOU"; +#endif + +#if defined (SIGIO) /* input/output possible signal */ + signal_names[SIGIO] = "SIGIO"; +#endif + +#if defined (SIGXCPU) /* exceeded CPU time limit */ + signal_names[SIGXCPU] = "SIGXCPU"; +#endif + +#if defined (SIGXFSZ) /* exceeded file size limit */ + signal_names[SIGXFSZ] = "SIGXFSZ"; +#endif + +#if defined (SIGVTALRM) /* virtual time alarm */ + signal_names[SIGVTALRM] = "SIGVTALRM"; +#endif + +#if defined (SIGPROF) /* profiling time alarm */ + signal_names[SIGPROF] = "SIGPROF"; +#endif + +#if defined (SIGWINCH) /* window changed */ + signal_names[SIGWINCH] = "SIGWINCH"; +#endif + +/* 4.4 BSD */ +#if defined (SIGINFO) && !defined (_SEQUENT_) /* information request */ + signal_names[SIGINFO] = "SIGINFO"; +#endif + +#if defined (SIGUSR1) /* user defined signal 1 */ + signal_names[SIGUSR1] = "SIGUSR1"; +#endif + +#if defined (SIGUSR2) /* user defined signal 2 */ + signal_names[SIGUSR2] = "SIGUSR2"; +#endif + +#if defined (SIGKILLTHR) /* BeOS: Kill Thread */ + signal_names[SIGKILLTHR] = "SIGKILLTHR"; +#endif + + for (i = 0; i < NSIG; i++) + if (signal_names[i] == (char *)NULL) + { + signal_names[i] = (char *)malloc (18); + if (signal_names[i]) + sprintf (signal_names[i], "SIGJUNK(%d)", i); + } + + signal_names[NSIG] = "DEBUG"; + signal_names[NSIG+1] = "ERR"; +} + +void +write_signames (stream) + FILE *stream; +{ + register int i; + + fprintf (stream, "/* This file was generated during the csh build by %s.\n", + progname); + fprintf (stream, " Do not edit. Edit ${FILESDIR}/mksignames.c instead. */\n\n"); + fprintf (stream, "const char *const sys_signame[NSIG + 3] = {\n"); + + for (i = 0; i <= LASTSIG; i++) + fprintf (stream, " \"%s\",\n", signal_names[i]); + + fprintf (stream, " (char *)0x0\n"); + fprintf (stream, "};\n"); +} + +int +main (argc, argv) + int argc; + char **argv; +{ + char *stream_name; + FILE *stream; + + progname = argv[0]; + + if (argc == 1) + { + stream_name = "stdout"; + stream = stdout; + } + else if (argc == 2) + { + stream_name = argv[1]; + stream = fopen (stream_name, "w"); + } + else + { + fprintf (stderr, "Usage: %s [output-file]\n", progname); + exit (1); + } + + if (!stream) + { + fprintf (stderr, "%s: %s: cannot open for writing\n", + progname, stream_name); + exit (2); + } + + initialize_signames (); + write_signames (stream); + exit (0); +} |