--- /dev/null
+diff -Nru at-3.1.8/at.1.in at-3.1.8.new/at.1.in
+--- at-3.1.8/at.1.in Sun Mar 28 19:48:00 1999
++++ at-3.1.8.new/at.1.in Sun Mar 28 19:46:41 1999
+@@ -248,7 +248,11 @@
+ .br
+ .I @ETCDIR@/at.deny
+ .SH SEE ALSO
+-cron(1), nice(1), sh(1), umask(2), atd(8)
++.BR cron (1),
++.BR nice (1),
++.BR sh (1),
++.BR umask (2),
++.BR atd (8).
+ .SH BUGS
+ The correct operation of
+ .B batch
+diff -Nru at-3.1.8/at.c at-3.1.8.new/at.c
+--- at-3.1.8/at.c Sun Mar 28 19:48:00 1999
++++ at-3.1.8.new/at.c Sun Mar 28 19:46:41 1999
+@@ -235,6 +235,7 @@
+ /* Install the signal handler for SIGINT; terminate after removing the
+ * spool file if necessary
+ */
++ memset(&act, 0, sizeof act);
+ act.sa_handler = sigc;
+ sigemptyset(&(act.sa_mask));
+ act.sa_flags = 0;
+@@ -274,8 +275,8 @@
+ if ((jobno = nextjob()) == EOF)
+ perr("Cannot generate job number");
+
+- sprintf(ppos, "%c%5lx%8lx", queue,
+- jobno, (unsigned long) (runtimer / 60));
++ (void)snprintf(ppos, sizeof(atfile) - (ppos - atfile),
++ "%c%5lx%8lx", queue, jobno, (unsigned long) (runtimer / 60));
+
+ for (ap = ppos; *ap != '\0'; ap++)
+ if (*ap == ' ')
+@@ -291,7 +292,7 @@
+ * bit. Yes, this is a kluge.
+ */
+ cmask = umask(S_IRUSR | S_IWUSR | S_IXUSR);
+- if ((fd = creat(atfile, O_WRONLY)) == -1)
++ if ((fd = open(atfile, O_CREAT | O_TRUNC | O_WRONLY, S_IRUSR)) == -1)
+ perr("Cannot create atjob file %.500s", atfile);
+
+ if ((fd2 = dup(fd)) < 0)
+@@ -461,14 +462,6 @@
+
+ close(fd2);
+
+- /* POSIX.2 allows the shell specified by the user's SHELL environment
+- variable, the login shell from the user's password database entry,
+- or /bin/sh to be the command interpreter that processes the at-job.
+- It also alows a warning diagnostic to be printed. Because of the
+- possible variance, we always output the diagnostic. */
+-
+- fprintf(stderr, "warning: commands will be executed using /bin/sh\n");
+-
+ runtime = localtime(&runtimer);
+
+ /* We only use the sick POSIX time format if POSIXLY_CORRECT
+@@ -546,6 +539,7 @@
+ long jobno;
+ time_t runtimer;
+ char timestr[TIMESIZE];
++ struct passwd *pwd;
+
+ PRIV_START
+
+@@ -581,7 +575,10 @@
+ } else {
+ strftime(timestr, TIMESIZE, TIMEFORMAT_ISO, runtime);
+ }
+- printf("%ld\t%s %c\n", jobno, timestr, queue);
++ if ((pwd = getpwuid(buf.st_uid)))
++ printf("%ld\t%s %c %s\n", jobno, timestr, queue, pwd->pw_name);
++ else
++ printf("%ld\t%s %c\n", jobno, timestr, queue);
+ }
+ PRIV_END
+ }
+@@ -695,7 +692,7 @@
+ char *pgm;
+
+ int program = AT; /* our default program */
+- char *options = "q:f:mvldVc"; /* default options for at */
++ char *options = "q:f:mvldhVc"; /* default options for at */
+ int disp_version = 0;
+ time_t timer;
+ struct passwd *pwe;
+@@ -726,16 +723,20 @@
+ */
+ if (strcmp(pgm, "atq") == 0) {
+ program = ATQ;
+- options = "q:V";
++ options = "hq:V";
+ } else if (strcmp(pgm, "atrm") == 0) {
+ program = ATRM;
+- options = "V";
++ options = "hV";
+ }
+ /* process whatever options we can process
+ */
+ opterr = 1;
+ while ((c = getopt(argc, argv, options)) != EOF)
+ switch (c) {
++ case 'h':
++ usage();
++ exit (0);
++
+ case 'v': /* verify time settings */
+ atverify = 1;
+ break;
+@@ -753,7 +754,7 @@
+ usage();
+
+ atqueue = queue = *optarg;
+- if (!(islower(queue) || isupper(queue)))
++ if (!(islower(queue) || isupper(queue)) & (queue != '='))
+ usage();
+
+ queue_set = 1;
+@@ -842,6 +843,15 @@
+ struct tm *tm = localtime(&timer);
+ fprintf(stderr, "%s\n", asctime(tm));
+ }
++
++ /* POSIX.2 allows the shell specified by the user's SHELL environment
++ variable, the login shell from the user's password database entry,
++ or /bin/sh to be the command interpreter that processes the at-job.
++ It also alows a warning diagnostic to be printed. Because of the
++ possible variance, we always output the diagnostic. */
++
++ fprintf(stderr, "warning: commands will be executed using /bin/sh\n");
++
+ writefile(timer, queue);
+ break;
+
+diff -Nru at-3.1.8/at.deny at-3.1.8.new/at.deny
+--- at-3.1.8/at.deny Sun Feb 23 21:24:34 1997
++++ at-3.1.8.new/at.deny Sun Mar 28 19:46:41 1999
+@@ -1,13 +1,24 @@
+-nobody
++alias
++backup
+ bin
+ daemon
+-sys
++ftp
++games
++gnats
++guest
++irc
+ lp
+-sync
+ mail
+-news
+-uucp
+-games
+ man
+-guest
+-ftp
++nobody
++operator
++proxy
++qmaild
++qmaill
++qmailp
++qmailq
++qmailr
++qmails
++sync
++sys
++www-data
+diff -Nru at-3.1.8/at_allow.5 at-3.1.8.new/at_allow.5
+--- at-3.1.8/at_allow.5 Sun Mar 28 19:48:00 1999
++++ at-3.1.8.new/at_allow.5 Sun Mar 28 19:46:41 1999
+@@ -29,4 +29,8 @@
+ .I /etc/at/at.deny
+ is checked.
+ .SH "SEE ALSO"
+-at(1), atrun(1), cron(1), crontab(1), atd(8)
++.BR at (1),
++.BR atrun (1),
++.BR cron (8),
++.BR crontab (1),
++.BR atd (8).
+diff -Nru at-3.1.8/atd.8.in at-3.1.8.new/atd.8.in
+--- at-3.1.8/atd.8.in Sun Mar 28 19:48:00 1999
++++ at-3.1.8.new/atd.8.in Sun Mar 28 19:46:41 1999
+@@ -46,6 +46,11 @@
+ is installed as
+ .B /usr/sbin/atrun
+ for backward compatibility.
++.SH WARNING
++.B atd
++won't work if its spool directory is mounted via NFS even if
++.I no_root_squash
++is set.
+ .SH FILES
+ .I @ATJBD@
+ The directory for storing jobs; this should be mode 700, owner
+@@ -61,9 +66,15 @@
+ .B at
+ system.
+ .SH "SEE ALSO"
+-at(1), atrun(1), cron(1), crontab(1), syslog(3), at_deny(5), at_allow(5)
++.BR at (1),
++.BR atrun (1),
++.BR cron (8),
++.BR crontab (1),
++.BR syslog (3),
++.BR at.deny (5),
++.BR at.allow(5).
+ .SH BUGS
+ The functionality of
+ .B atd
+ should be merged into
+-.BR cron(1) .
++.BR cron (8) .
+diff -Nru at-3.1.8/atd.c at-3.1.8.new/atd.c
+--- at-3.1.8/atd.c Sun Sep 28 22:00:37 1997
++++ at-3.1.8.new/atd.c Sun Mar 28 19:46:41 1999
+@@ -255,6 +255,13 @@
+
+ fcntl(fd_in, F_SETFD, fflags & ~FD_CLOEXEC);
+
++ /*
++ * If the spool directory is mounted via NFS `atd' isn't able to
++ * read from the job file and will bump out here. The file is
++ * opened as "root" but it is read as "daemon" which fails over
++ * NFS and works with local file systems. It's not clear where
++ * the bug is located. -Joey
++ */
+ if (fscanf(stream, "#!/bin/sh\n# atrun uid=%d gid=%d\n# mail %8s %d",
+ &nuid, &ngid, mailbuf, &send_mail) != 4)
+ pabort("File %.500s is in wrong format - aborting",
+diff -Nru at-3.1.8/batch at-3.1.8.new/batch
+--- at-3.1.8/batch Thu Jan 1 01:00:00 1970
++++ at-3.1.8.new/batch Sun Mar 28 19:46:41 1999
+@@ -0,0 +1,4 @@
++#! /bin/sh
++prefix=/usr
++exec_prefix=${prefix}
++exec ${exec_prefix}/bin/at -qb now "$@"
+diff -Nru at-3.1.8/config.guess at-3.1.8.new/config.guess
+--- at-3.1.8/config.guess Sun Feb 23 21:24:34 1997
++++ at-3.1.8.new/config.guess Sun Mar 28 19:46:41 1999
+@@ -1,6 +1,6 @@
+ #! /bin/sh
+ # Attempt to guess a canonical system name.
+-# Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
++# Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
+ #
+ # This file is free software; you can redistribute it and/or modify it
+ # under the terms of the GNU General Public License as published by
+@@ -51,35 +51,110 @@
+ # Note: order is significant - the case branches are not exclusive.
+
+ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+- alpha:OSF1:V*:*)
+- # After 1.2, OSF1 uses "V1.3" for uname -r.
+- echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^V//'`
+- exit 0 ;;
+ alpha:OSF1:*:*)
++ if test $UNAME_RELEASE = "V4.0"; then
++ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
++ fi
++ # A Vn.n version is a released version.
++ # A Tn.n version is a released field test version.
++ # A Xn.n version is an unreleased experimental baselevel.
+ # 1.2 uses "1.2" for uname -r.
+- echo alpha-dec-osf${UNAME_RELEASE}
+- exit 0 ;;
++ cat <<EOF >dummy.s
++ .globl main
++ .ent main
++main:
++ .frame \$30,0,\$26,0
++ .prologue 0
++ .long 0x47e03d80 # implver $0
++ lda \$2,259
++ .long 0x47e20c21 # amask $2,$1
++ srl \$1,8,\$2
++ sll \$2,2,\$2
++ sll \$0,3,\$0
++ addl \$1,\$0,\$0
++ addl \$2,\$0,\$0
++ ret \$31,(\$26),1
++ .end main
++EOF
++ ${CC-cc} dummy.s -o dummy 2>/dev/null
++ if test "$?" = 0 ; then
++ ./dummy
++ case "$?" in
++ 7)
++ UNAME_MACHINE="alpha"
++ ;;
++ 15)
++ UNAME_MACHINE="alphaev5"
++ ;;
++ 14)
++ UNAME_MACHINE="alphaev56"
++ ;;
++ 10)
++ UNAME_MACHINE="alphapca56"
++ ;;
++ 16)
++ UNAME_MACHINE="alphaev6"
++ ;;
++ esac
++ fi
++ rm -f dummy.s dummy
++ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr [[A-Z]] [[a-z]]`
++ exit 0 ;;
+ 21064:Windows_NT:50:3)
+ echo alpha-dec-winnt3.5
+ exit 0 ;;
++ Amiga*:UNIX_System_V:4.0:*)
++ echo m68k-cbm-sysv4
++ exit 0;;
+ amiga:NetBSD:*:*)
+ echo m68k-cbm-netbsd${UNAME_RELEASE}
+ exit 0 ;;
++ amiga:OpenBSD:*:*)
++ echo m68k-unknown-openbsd${UNAME_RELEASE}
++ exit 0 ;;
++ arc64:OpenBSD:*:*)
++ echo mips64el-unknown-openbsd${UNAME_RELEASE}
++ exit 0 ;;
++ arc:OpenBSD:*:*)
++ echo mipsel-unknown-openbsd${UNAME_RELEASE}
++ exit 0 ;;
++ hkmips:OpenBSD:*:*)
++ echo mips-unknown-openbsd${UNAME_RELEASE}
++ exit 0 ;;
++ pmax:OpenBSD:*:*)
++ echo mipsel-unknown-openbsd${UNAME_RELEASE}
++ exit 0 ;;
++ sgi:OpenBSD:*:*)
++ echo mips-unknown-openbsd${UNAME_RELEASE}
++ exit 0 ;;
++ wgrisc:OpenBSD:*:*)
++ echo mipsel-unknown-openbsd${UNAME_RELEASE}
++ exit 0 ;;
+ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+ echo arm-acorn-riscix${UNAME_RELEASE}
+ exit 0;;
+- Pyramid*:OSx*:*:*)
++ arm32:NetBSD:*:*)
++ echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
++ exit 0 ;;
++ SR2?01:HI-UX/MPP:*:*)
++ echo hppa1.1-hitachi-hiuxmpp
++ exit 0;;
++ Pyramid*:OSx*:*:*|MIS*:OSx*:*:*)
++ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+ if test "`(/bin/universe) 2>/dev/null`" = att ; then
+ echo pyramid-pyramid-sysv3
+ else
+ echo pyramid-pyramid-bsd
+ fi
+ exit 0 ;;
+- sun4*:SunOS:5.*:*)
++ NILE:*:*:dcosx)
++ echo pyramid-pyramid-svr4
++ exit 0 ;;
++ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ i86pc:SunOS:5.*:*)
+- echo i386-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
++ echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
+ sun4*:SunOS:6*:*)
+ # According to config.sub, this is the proper way to canonicalize
+@@ -99,24 +174,86 @@
+ sun3*:SunOS:*:*)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ exit 0 ;;
++ sun*:*:4.2BSD:*)
++ UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
++ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
++ case "`/bin/arch`" in
++ sun3)
++ echo m68k-sun-sunos${UNAME_RELEASE}
++ ;;
++ sun4)
++ echo sparc-sun-sunos${UNAME_RELEASE}
++ ;;
++ esac
++ exit 0 ;;
++ aushp:SunOS:*:*)
++ echo sparc-auspex-sunos${UNAME_RELEASE}
++ exit 0 ;;
+ atari*:NetBSD:*:*)
+ echo m68k-atari-netbsd${UNAME_RELEASE}
+ exit 0 ;;
++ atari*:OpenBSD:*:*)
++ echo m68k-unknown-openbsd${UNAME_RELEASE}
++ exit 0 ;;
+ sun3*:NetBSD:*:*)
+ echo m68k-sun-netbsd${UNAME_RELEASE}
+ exit 0 ;;
++ sun3*:OpenBSD:*:*)
++ echo m68k-unknown-openbsd${UNAME_RELEASE}
++ exit 0 ;;
+ mac68k:NetBSD:*:*)
+ echo m68k-apple-netbsd${UNAME_RELEASE}
+ exit 0 ;;
++ mac68k:OpenBSD:*:*)
++ echo m68k-unknown-openbsd${UNAME_RELEASE}
++ exit 0 ;;
++ mvme68k:OpenBSD:*:*)
++ echo m68k-unknown-openbsd${UNAME_RELEASE}
++ exit 0 ;;
++ mvme88k:OpenBSD:*:*)
++ echo m88k-unknown-openbsd${UNAME_RELEASE}
++ exit 0 ;;
++ powerpc:machten:*:*)
++ echo powerpc-apple-machten${UNAME_RELEASE}
++ exit 0 ;;
++ RISC*:Mach:*:*)
++ echo mips-dec-mach_bsd4.3
++ exit 0 ;;
+ RISC*:ULTRIX:*:*)
+ echo mips-dec-ultrix${UNAME_RELEASE}
+ exit 0 ;;
+ VAX*:ULTRIX*:*:*)
+ echo vax-dec-ultrix${UNAME_RELEASE}
+ exit 0 ;;
+- mips:*:5*:RISCos)
++ 2020:CLIX:*:*)
++ echo clipper-intergraph-clix${UNAME_RELEASE}
++ exit 0 ;;
++ mips:*:*:UMIPS | mips:*:*:RISCos)
++ sed 's/^ //' << EOF >dummy.c
++ int main (argc, argv) int argc; char **argv; {
++ #if defined (host_mips) && defined (MIPSEB)
++ #if defined (SYSTYPE_SYSV)
++ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
++ #endif
++ #if defined (SYSTYPE_SVR4)
++ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
++ #endif
++ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
++ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
++ #endif
++ #endif
++ exit (-1);
++ }
++EOF
++ ${CC-cc} dummy.c -o dummy \
++ && ./dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
++ && rm dummy.c dummy && exit 0
++ rm -f dummy.c dummy
+ echo mips-mips-riscos${UNAME_RELEASE}
+ exit 0 ;;
++ Night_Hawk:Power_UNIX:*:*)
++ echo powerpc-harris-powerunix
++ exit 0 ;;
+ m88k:CX/UX:7*:*)
+ echo m88k-harris-cxux7
+ exit 0 ;;
+@@ -127,12 +264,17 @@
+ echo m88k-motorola-sysv3
+ exit 0 ;;
+ AViiON:dgux:*:*)
++ # DG/UX returns AViiON for all architectures
++ UNAME_PROCESSOR=`/usr/bin/uname -p`
++ if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
+ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
+ -o ${TARGET_BINARY_INTERFACE}x = x ] ; then
+ echo m88k-dg-dgux${UNAME_RELEASE}
+ else
+ echo m88k-dg-dguxbcs${UNAME_RELEASE}
+ fi
++ else echo i586-dg-dgux${UNAME_RELEASE}
++ fi
+ exit 0 ;;
+ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
+ echo m88k-dolphin-sysv3
+@@ -150,10 +292,10 @@
+ *:IRIX*:*:*)
+ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+ exit 0 ;;
+- ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
++ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+- i[34]86:AIX:*:*)
++ i?86:AIX:*:*)
+ echo i386-ibm-aix
+ exit 0 ;;
+ *:AIX:2:3)
+@@ -198,7 +340,7 @@
+ echo romp-ibm-bsd4.4
+ exit 0 ;;
+ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC NetBSD and
+- echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
++ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
+ exit 0 ;; # report: romp-ibm BSD 4.3
+ *:BOSX:*:*)
+ echo rs6000-bull-bosx
+@@ -216,7 +358,7 @@
+ case "${UNAME_MACHINE}" in
+ 9000/31? ) HP_ARCH=m68000 ;;
+ 9000/[34]?? ) HP_ARCH=m68k ;;
+- 9000/7?? | 9000/8?[79] ) HP_ARCH=hppa1.1 ;;
++ 9000/7?? | 9000/8?[1679] ) HP_ARCH=hppa1.1 ;;
+ 9000/8?? ) HP_ARCH=hppa1.0 ;;
+ esac
+ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+@@ -264,6 +406,13 @@
+ hp8??:OSF1:*:*)
+ echo hppa1.0-hp-osf
+ exit 0 ;;
++ i?86:OSF1:*:*)
++ if [ -x /usr/sbin/sysversion ] ; then
++ echo ${UNAME_MACHINE}-unknown-osf1mk
++ else
++ echo ${UNAME_MACHINE}-unknown-osf1
++ fi
++ exit 0 ;;
+ parisc*:Lites*:*:*)
+ echo hppa1.1-hp-lites
+ exit 0 ;;
+@@ -291,17 +440,33 @@
+ CRAY*Y-MP:*:*:*)
+ echo ymp-cray-unicos${UNAME_RELEASE}
+ exit 0 ;;
+- CRAY*C90:*:*:*)
+- echo c90-cray-unicos${UNAME_RELEASE}
++ CRAY*[A-Z]90:*:*:*)
++ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
++ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
++ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
++ exit 0 ;;
++ CRAY*TS:*:*:*)
++ echo t90-cray-unicos${UNAME_RELEASE}
+ exit 0 ;;
+ CRAY-2:*:*:*)
+ echo cray2-cray-unicos
+ exit 0 ;;
++ F300:UNIX_System_V:*:*)
++ FUJITSU_SYS=`uname -p | tr [A-Z] [a-z] | sed -e 's/\///'`
++ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
++ echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
++ exit 0 ;;
++ F301:UNIX_System_V:*:*)
++ echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'`
++ exit 0 ;;
+ hp3[0-9][05]:NetBSD:*:*)
+ echo m68k-hp-netbsd${UNAME_RELEASE}
+ exit 0 ;;
+- i[34]86:BSD/386:*:* | *:BSD/OS:*:*)
+- echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
++ hp300:OpenBSD:*:*)
++ echo m68k-unknown-openbsd${UNAME_RELEASE}
++ exit 0 ;;
++ i?86:BSD/386:*:* | *:BSD/OS:*:*)
++ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+ exit 0 ;;
+ *:FreeBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+@@ -309,36 +474,150 @@
+ *:NetBSD:*:*)
+ echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ exit 0 ;;
++ *:OpenBSD:*:*)
++ echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
++ exit 0 ;;
++ i*:CYGWIN*:*)
++ echo ${UNAME_MACHINE}-pc-cygwin32
++ exit 0 ;;
++ i*:MINGW*:*)
++ echo ${UNAME_MACHINE}-pc-mingw32
++ exit 0 ;;
++ p*:CYGWIN*:*)
++ echo powerpcle-unknown-cygwin32
++ exit 0 ;;
++ prep*:SunOS:5.*:*)
++ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
++ exit 0 ;;
+ *:GNU:*:*)
+- echo `echo ${UNAME_MACHINE}|sed -e 's,/.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
++ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ exit 0 ;;
+ *:Linux:*:*)
++ # uname on the ARM produces all sorts of strangeness, and we need to
++ # filter it out.
++ case "$UNAME_MACHINE" in
++ arm* | sa110*) UNAME_MACHINE="arm" ;;
++ esac
++
+ # The BFD linker knows what the default object file format is, so
+ # first see if it will tell us.
+ ld_help_string=`ld --help 2>&1`
+- if echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: elf_i[345]86"; then
+- echo "${UNAME_MACHINE}-unknown-linux" ; exit 0
+- elif echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: i[345]86linux"; then
+- echo "${UNAME_MACHINE}-unknown-linuxaout" ; exit 0
+- elif echo $ld_help_string | grep >/dev/null 2>&1 "supported emulations: i[345]86coff"; then
+- echo "${UNAME_MACHINE}-unknown-linuxcoff" ; exit 0
+- elif test "${UNAME_MACHINE}" = "alpha" ; then
+- echo alpha-unknown-linux ; exit 0
+- else
+- # Either a pre-BFD a.out linker (linuxoldld) or one that does not give us
+- # useful --help. Gcc wants to distinguish between linuxoldld and linuxaout.
+- test ! -d /usr/lib/ldscripts/. \
+- && echo "${UNAME_MACHINE}-unknown-linuxoldld" && exit 0
++ ld_supported_emulations=`echo $ld_help_string \
++ | sed -ne '/supported emulations:/!d
++ s/[ ][ ]*/ /g
++ s/.*supported emulations: *//
++ s/ .*//
++ p'`
++ case "$ld_supported_emulations" in
++ i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 ;;
++ i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 ;;
++ sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
++ armlinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
++ m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
++ elf32ppc) echo "powerpc-unknown-linux-gnu" ; exit 0 ;;
++ esac
++
++ if test "${UNAME_MACHINE}" = "alpha" ; then
++ sed 's/^ //' <<EOF >dummy.s
++ .globl main
++ .ent main
++ main:
++ .frame \$30,0,\$26,0
++ .prologue 0
++ .long 0x47e03d80 # implver $0
++ lda \$2,259
++ .long 0x47e20c21 # amask $2,$1
++ srl \$1,8,\$2
++ sll \$2,2,\$2
++ sll \$0,3,\$0
++ addl \$1,\$0,\$0
++ addl \$2,\$0,\$0
++ ret \$31,(\$26),1
++ .end main
++EOF
++ LIBC=""
++ ${CC-cc} dummy.s -o dummy 2>/dev/null
++ if test "$?" = 0 ; then
++ ./dummy
++ case "$?" in
++ 7)
++ UNAME_MACHINE="alpha"
++ ;;
++ 15)
++ UNAME_MACHINE="alphaev5"
++ ;;
++ 14)
++ UNAME_MACHINE="alphaev56"
++ ;;
++ 10)
++ UNAME_MACHINE="alphapca56"
++ ;;
++ 16)
++ UNAME_MACHINE="alphaev6"
++ ;;
++ esac
++
++ objdump --private-headers dummy | \
++ grep ld.so.1 > /dev/null
++ if test "$?" = 0 ; then
++ LIBC="libc1"
++ fi
++ fi
++ rm -f dummy.s dummy
++ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0
++ elif test "${UNAME_MACHINE}" = "mips" ; then
++ cat >dummy.c <<EOF
++main(argc, argv)
++ int argc;
++ char *argv[];
++{
++#ifdef __MIPSEB__
++ printf ("%s-unknown-linux-gnu\n", argv[1]);
++#endif
++#ifdef __MIPSEL__
++ printf ("%sel-unknown-linux-gnu\n", argv[1]);
++#endif
++ return 0;
++}
++EOF
++ ${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0
++ rm -f dummy.c dummy
++ else
++ # Either a pre-BFD a.out linker (linux-gnuoldld)
++ # or one that does not give us useful --help.
++ # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout.
++ # If ld does not provide *any* "supported emulations:"
++ # that means it is gnuoldld.
++ echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:"
++ test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
++
++ case "${UNAME_MACHINE}" in
++ i?86)
++ VENDOR=pc;
++ ;;
++ *)
++ VENDOR=unknown;
++ ;;
++ esac
+ # Determine whether the default compiler is a.out or elf
+ cat >dummy.c <<EOF
++#include <features.h>
+ main(argc, argv)
+-int argc;
+-char *argv[];
++ int argc;
++ char *argv[];
+ {
+ #ifdef __ELF__
+- printf ("%s-unknown-linux\n", argv[1]);
++# ifdef __GLIBC__
++# if __GLIBC__ >= 2
++ printf ("%s-${VENDOR}-linux-gnu\n", argv[1]);
++# else
++ printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
++# endif
++# else
++ printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
++# endif
+ #else
+- printf ("%s-unknown-linuxaout\n", argv[1]);
++ printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]);
+ #endif
+ return 0;
+ }
+@@ -348,30 +627,45 @@
+ fi ;;
+ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions
+ # are messed up and put the nodename in both sysname and nodename.
+- i[34]86:DYNIX/ptx:4*:*)
++ i?86:DYNIX/ptx:4*:*)
+ echo i386-sequent-sysv4
+ exit 0 ;;
+- i[34]86:*:4.*:* | i[34]86:SYSTEM_V:4.*:*)
++ i?86:UNIX_SV:4.2MP:2.*)
++ # Unixware is an offshoot of SVR4, but it has its own version
++ # number series starting with 2...
++ # I am not positive that other SVR4 systems won't match this,
++ # I just have to hope. -- rms.
++ # Use sysv4.2uw... so that sysv4* matches it.
++ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
++ exit 0 ;;
++ i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
+ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+ echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
+ else
+- echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}
++ echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
+ fi
+ exit 0 ;;
+- i[34]86:*:3.2:*)
++ i?86:*:3.2:*)
+ if test -f /usr/options/cb.name; then
+ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+- echo ${UNAME_MACHINE}-unknown-isc$UNAME_REL
++ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+ elif /bin/uname -X 2>/dev/null >/dev/null ; then
+ UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
+ (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
+- echo ${UNAME_MACHINE}-unknown-sco$UNAME_REL
++ (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
++ && UNAME_MACHINE=i586
++ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+ else
+- echo ${UNAME_MACHINE}-unknown-sysv32
++ echo ${UNAME_MACHINE}-pc-sysv32
+ fi
+ exit 0 ;;
++ pc:*:*:*)
++ # uname -m prints for DJGPP always 'pc', but it prints nothing about
++ # the processor, so we play safe by assuming i386.
++ echo i386-pc-msdosdjgpp
++ exit 0 ;;
+ Intel:Mach:3*:*)
+- echo i386-unknown-mach3
++ echo i386-pc-mach3
+ exit 0 ;;
+ paragon:*:*:*)
+ echo i860-intel-osf1
+@@ -387,30 +681,36 @@
+ # "miniframe"
+ echo m68010-convergent-sysv
+ exit 0 ;;
+- M680[234]0:*:R3V[567]*:*)
++ M68*:*:R3V[567]*:*)
+ test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
+ 3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0)
+- uname -p 2>/dev/null | grep 86 >/dev/null \
+- && echo i486-ncr-sysv4.3 && exit 0
+- uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+- && echo i586-ncr-sysv4.3 && exit 0 ;;
++ OS_REL=''
++ test -r /etc/.relid \
++ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
++ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
++ && echo i486-ncr-sysv4.3${OS_REL} && exit 0
++ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
++ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
+ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+- uname -p 2>/dev/null | grep 86 >/dev/null \
++ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && echo i486-ncr-sysv4 && exit 0 ;;
+- m680[234]0:LynxOS:2.[23]*:*)
+- echo m68k-lynx-lynxos${UNAME_RELEASE}
++ m68*:LynxOS:2.*:*)
++ echo m68k-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+ mc68030:UNIX_System_V:4.*:*)
+ echo m68k-atari-sysv4
+ exit 0 ;;
+- i[34]86:LynxOS:2.[23]*:*)
+- echo i386-lynx-lynxos${UNAME_RELEASE}
++ i?86:LynxOS:2.*:*)
++ echo i386-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+- TSUNAMI:LynxOS:2.[23]*:*)
+- echo sparc-lynx-lynxos${UNAME_RELEASE}
++ TSUNAMI:LynxOS:2.*:*)
++ echo sparc-unknown-lynxos${UNAME_RELEASE}
+ exit 0 ;;
+- rs6000:LynxOS:2.[23]*:*)
+- echo rs6000-lynx-lynxos${UNAME_RELEASE}
++ rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
++ echo rs6000-unknown-lynxos${UNAME_RELEASE}
++ exit 0 ;;
++ SM[BE]S:UNIX_SV:*:*)
++ echo mips-dde-sysv${UNAME_RELEASE}
+ exit 0 ;;
+ RM*:SINIX-*:*:*)
+ echo mips-sni-sysv4
+@@ -423,6 +723,32 @@
+ echo ns32k-sni-sysv
+ fi
+ exit 0 ;;
++ PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
++ # says <Richard.M.Bartel@ccMail.Census.GOV>
++ echo i586-unisys-sysv4
++ exit 0 ;;
++ *:UNIX_System_V:4*:FTX*)
++ # From Gerald Hewes <hewes@openmarket.com>.
++ # How about differentiating between stratus architectures? -djm
++ echo hppa1.1-stratus-sysv4
++ exit 0 ;;
++ *:*:*:FTX*)
++ # From seanf@swdc.stratus.com.
++ echo i860-stratus-sysv4
++ exit 0 ;;
++ mc68*:A/UX:*:*)
++ echo m68k-apple-aux${UNAME_RELEASE}
++ exit 0 ;;
++ news*:NEWS-OS:*:6*)
++ echo mips-sony-newsos6
++ exit 0 ;;
++ R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:*)
++ if [ -d /usr/nec ]; then
++ echo mips-nec-sysv${UNAME_RELEASE}
++ else
++ echo mips-unknown-sysv${UNAME_RELEASE}
++ fi
++ exit 0 ;;
+ esac
+
+ #echo '(No uname command or uname output not recognized.)' 1>&2
+@@ -452,15 +778,6 @@
+ #endif
+ #endif
+
+-#if defined (host_mips) && defined (MIPSEB)
+-#if defined (SYSTYPE_BSD43)
+- printf ("mips-mips-riscos4bsd\n"); exit (0);
+-#endif
+-#if defined (SYSTYPE_SYSV)
+- printf ("mips-mips-riscos4sysv\n"); exit (0);
+-#endif
+-#endif
+-
+ #if defined (__arm) && defined (__acorn) && defined (__unix)
+ printf ("arm-acorn-riscix"); exit (0);
+ #endif
+@@ -475,7 +792,7 @@
+ #endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+- printf ("%s-next-nextstep%s\n", __ARCHITECTURE__, version==2 ? "2" : "3");
++ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+ #endif
+
+@@ -492,7 +809,7 @@
+ #endif
+
+ #if defined (__386BSD__)
+- printf ("i386-unknown-bsd\n"); exit (0);
++ printf ("i386-pc-bsd\n"); exit (0);
+ #endif
+
+ #if defined (sequent)
+diff -Nru at-3.1.8/config.sub at-3.1.8.new/config.sub
+--- at-3.1.8/config.sub Sun Feb 23 21:24:35 1997
++++ at-3.1.8.new/config.sub Sun Mar 28 19:46:41 1999
+@@ -1,9 +1,9 @@
+ #! /bin/sh
+ # Configuration validation subroutine script, version 1.1.
+-# Copyright (C) 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
++# Copyright (C) 1991, 92-97, 1998 Free Software Foundation, Inc.
+ # This file is (in principle) common to ALL GNU software.
+ # The presence of a machine in this file suggests that SOME GNU software
+-# can handle that machine. It does not imply ALL GNU software can.
++# can handle that machine. It does not imply ALL GNU software can.
+ #
+ # This file is free software; you can redistribute it and/or modify
+ # it under the terms of the GNU General Public License as published by
+@@ -41,6 +41,8 @@
+ # The goal of this file is to map all the various variations of a given
+ # machine specification into a single specification in the form:
+ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
++# or in some cases, the newer four-part form:
++# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+ # It is wrong to echo any other type of specification.
+
+ if [ x$1 = x ]
+@@ -62,11 +64,21 @@
+ ;;
+ esac
+
+-# Separate what the user gave into CPU-COMPANY and OS (if any).
+-basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+-if [ $basic_machine != $1 ]
+-then os=`echo $1 | sed 's/.*-/-/'`
+-else os=; fi
++# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
++# Here we must recognize all the valid KERNEL-OS combinations.
++maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
++case $maybe_os in
++ linux-gnu*)
++ os=-$maybe_os
++ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
++ ;;
++ *)
++ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
++ if [ $basic_machine != $1 ]
++ then os=`echo $1 | sed 's/.*-/-/'`
++ else os=; fi
++ ;;
++esac
+
+ ### Let's recognize common machines as not being operating systems so
+ ### that things like config.sub decstation-3100 work. We also
+@@ -81,38 +93,43 @@
+ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+- -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp )
++ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
++ -apple)
+ os=
+ basic_machine=$1
+ ;;
+ -hiux*)
+ os=-hiuxwe2
+ ;;
++ -sco5)
++ os=sco3.2v5
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
++ ;;
+ -sco4)
+ os=-sco3.2v4
+- basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2.[4-9]*)
+ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+- basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco3.2v[4-9]*)
+ # Don't forget version if it is 3.2v4 or newer.
+- basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -sco*)
+ os=-sco3.2v2
+- basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -isc)
+ os=-isc2.2
+- basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -clix*)
+ basic_machine=clipper-intergraph
+ ;;
+ -isc*)
+- basic_machine=`echo $1 | sed -e 's/86-.*/86-unknown/'`
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+ ;;
+ -lynx*)
+ os=-lynxos
+@@ -123,35 +140,49 @@
+ -windowsnt*)
+ os=`echo $os | sed -e 's/windowsnt/winnt/'`
+ ;;
++ -psos*)
++ os=-psos
++ ;;
+ esac
+
+ # Decode aliases for certain CPU-COMPANY combinations.
+ case $basic_machine in
+ # Recognize the basic CPU types without company name.
+ # Some are omitted here because they have special meanings below.
+- tahoe | i[345]86 | i860 | m68k | m68000 | m88k | ns32k | arm \
+- | arme[lb] | pyramid \
+- | tron | a29k | 580 | i960 | h8300 | hppa1.0 | hppa1.1 \
+- | alpha | we32k | ns16k | clipper | sparclite | i370 | sh \
+- | powerpc | powerpcle | sparc64 | 1750a | dsp16xx | mips64 | mipsel \
+- | pdp11 | mips64el | mips64orion | mips64orionel \
+- | sparc)
++ tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
++ | arme[lb] | pyramid | mn10200 | mn10300 \
++ | tron | a29k | 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 \
++ | alpha | alphaev5 | alphaev56 | we32k | ns16k | clipper \
++ | i370 | sh | powerpc | powerpcle | 1750a | dsp16xx | pdp11 \
++ | mips64 | mipsel | mips64el | mips64orion | mips64orionel \
++ | mipstx39 | mipstx39el \
++ | sparc | sparclet | sparclite | sparc64 | v850)
+ basic_machine=$basic_machine-unknown
+ ;;
++ # We use `pc' rather than `unknown'
++ # because (1) that's what they normally are, and
++ # (2) the word "unknown" tends to confuse beginning users.
++ i[34567]86)
++ basic_machine=$basic_machine-pc
++ ;;
+ # Object if more than one company name word.
+ *-*-*)
+ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+ exit 1
+ ;;
+ # Recognize the basic CPU types with company name.
+- vax-* | tahoe-* | i[345]86-* | i860-* | m68k-* | m68000-* | m88k-* \
+- | sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \
+- | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* | power-* \
+- | none-* | 580-* | cray2-* | h8300-* | i960-* | xmp-* | ymp-* \
+- | hppa1.0-* | hppa1.1-* | alpha-* | we32k-* | cydra-* | ns16k-* \
+- | pn-* | np1-* | xps100-* | clipper-* | orion-* | sparclite-* \
+- | pdp11-* | sh-* | powerpc-* | powerpcle-* | sparc64-* | mips64-* | mipsel-* \
+- | mips64el-* | mips64orion-* | mips64orionel-*)
++ vax-* | tahoe-* | i[34567]86-* | i860-* | m32r-* | m68k-* | m68000-* \
++ | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
++ | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
++ | power-* | none-* | 580-* | cray2-* | h8300-* | i960-* \
++ | xmp-* | ymp-* | hppa-* | hppa1.0-* | hppa1.1-* \
++ | alpha-* | alphaev5-* | alphaev56-* | we32k-* | cydra-* \
++ | ns16k-* | pn-* | np1-* | xps100-* | clipper-* | orion-* \
++ | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
++ | sparc64-* | mips64-* | mipsel-* \
++ | mips64el-* | mips64orion-* | mips64orionel-* \
++ | mipstx39-* | mipstx39el-* \
++ | f301-*)
+ ;;
+ # Recognize the various machine names and aliases which stand
+ # for a CPU type and a company and sometimes even an OS.
+@@ -178,9 +209,9 @@
+ amiga | amiga-*)
+ basic_machine=m68k-cbm
+ ;;
+- amigados)
++ amigaos | amigados)
+ basic_machine=m68k-cbm
+- os=-amigados
++ os=-amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-cbm
+@@ -190,6 +221,10 @@
+ basic_machine=m68k-apollo
+ os=-sysv
+ ;;
++ aux)
++ basic_machine=m68k-apple
++ os=-aux
++ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ os=-dynix
+@@ -222,6 +257,10 @@
+ basic_machine=cray2-cray
+ os=-unicos
+ ;;
++ [ctj]90-cray)
++ basic_machine=c90-cray
++ os=-unicos
++ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ ;;
+@@ -303,25 +342,28 @@
+ hp9k8[0-9][0-9] | hp8[0-9][0-9])
+ basic_machine=hppa1.0-hp
+ ;;
++ hppa-next)
++ os=-nextstep3
++ ;;
+ i370-ibm* | ibm*)
+ basic_machine=i370-ibm
+ os=-mvs
+ ;;
+ # I'm not sure what "Sysv32" means. Should this be sysv3.2?
+- i[345]86v32)
+- basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
++ i[34567]86v32)
++ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv32
+ ;;
+- i[345]86v4*)
+- basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
++ i[34567]86v4*)
++ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv4
+ ;;
+- i[345]86v)
+- basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
++ i[34567]86v)
++ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-sysv
+ ;;
+- i[345]86sol2)
+- basic_machine=`echo $1 | sed -e 's/86.*/86-unknown/'`
++ i[34567]86sol2)
++ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+ os=-solaris2
+ ;;
+ iris | iris4d)
+@@ -352,6 +394,14 @@
+ miniframe)
+ basic_machine=m68000-convergent
+ ;;
++ mipsel*-linux*)
++ basic_machine=mipsel-unknown
++ os=-linux-gnu
++ ;;
++ mips*-linux*)
++ basic_machine=mips-unknown
++ os=-linux-gnu
++ ;;
+ mips3*-*)
+ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+ ;;
+@@ -419,21 +469,23 @@
+ pc532 | pc532-*)
+ basic_machine=ns32k-pc532
+ ;;
+- pentium | p5 | p6)
+- # We don't have specific support for the Intel Pentium (p6) followon yet, so just call it a Pentium
+- basic_machine=i586-intel
++ pentium | p5 | k5 | nexen)
++ basic_machine=i586-pc
++ ;;
++ pentiumpro | p6 | k6 | 6x86)
++ basic_machine=i686-pc
++ ;;
++ pentiumii | pentium2)
++ basic_machine=i786-pc
+ ;;
+- pentium-* | p5-* | p6-*)
+- # We don't have specific support for the Intel Pentium (p6) followon yet, so just call it a Pentium
++ pentium-* | p5-* | k5-* | nexen-*)
+ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+- k5)
+- # We don't have specific support for AMD's K5 yet, so just call it a Pentium
+- basic_machine=i586-amd
+- ;;
+- nexen)
+- # We don't have specific support for Nexgen yet, so just call it a Pentium
+- basic_machine=i586-nexgen
++ pentiumpro-* | p6-* | k6-* | 6x86-*)
++ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
++ pentiumii-* | pentium2-*)
++ basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
+ pn)
+ basic_machine=pn-gould
+@@ -517,6 +569,12 @@
+ basic_machine=i386-sequent
+ os=-dynix
+ ;;
++ tx39)
++ basic_machine=mipstx39-unknown
++ ;;
++ tx39el)
++ basic_machine=mipstx39el-unknown
++ ;;
+ tower | tower-32)
+ basic_machine=m68k-ncr
+ ;;
+@@ -536,6 +594,9 @@
+ basic_machine=vax-dec
+ os=-vms
+ ;;
++ vpp*|vx|vx-*)
++ basic_machine=f301-fujitsu
++ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ os=-vxworks
+@@ -563,7 +624,11 @@
+ # Here we handle the default manufacturer of certain CPU types. It is in
+ # some cases the only manufacturer, in others, it is the most popular.
+ mips)
+- basic_machine=mips-mips
++ if [ x$os = x-linux-gnu ]; then
++ basic_machine=mips-unknown
++ else
++ basic_machine=mips-mips
++ fi
+ ;;
+ romp)
+ basic_machine=romp-ibm
+@@ -615,6 +680,8 @@
+ if [ x"$os" != x"" ]
+ then
+ case $os in
++ # First match some system type aliases
++ # that might get confused with valid system types.
+ # -solaris* is a basic system type, with this one exception.
+ -solaris1 | -solaris1.*)
+ os=`echo $os | sed -e 's|solaris1|sunos4|'`
+@@ -622,28 +689,37 @@
+ -solaris)
+ os=-solaris2
+ ;;
+- -unixware* | svr4*)
++ -svr4*)
+ os=-sysv4
+ ;;
++ -unixware*)
++ os=-sysv4.2uw
++ ;;
+ -gnu/linux*)
+- os=`echo $os | sed -e 's|gnu/linux|linux|'`
++ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ ;;
+ # First accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST END IN A *, to match a version number.
+ # -sysv* is not here because it comes later, after sysvr4.
+ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+- | -vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[345]* \
++ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+- | -amigados* | -msdos* | -newsos* | -unicos* | -aos* \
+- | -nindy* | -vxworks* | -ebmon* | -hms* | -mvs* | -clix* \
+- | -riscos* | -linux* | -uniplus* | -iris* | -rtu* | -xenix* \
+- | -hiux* | -386bsd* | -netbsd* | -freebsd* | -riscix* \
++ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
++ | -aos* \
++ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
++ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
++ | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
+ | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \
+ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+- | -udi* | -eabi* | -lites* )
++ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
++ | -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
++ | -mingw32* | -linux-gnu* | -uxpv*)
+ # Remember, each alternative MUST END IN *, to match a version number.
+ ;;
++ -linux*)
++ os=`echo $os | sed -e 's|linux|linux-gnu|'`
++ ;;
+ -sunos5*)
+ os=`echo $os | sed -e 's|sunos5|solaris2|'`
+ ;;
+@@ -668,6 +744,9 @@
+ -ctix* | -uts*)
+ os=-sysv
+ ;;
++ -ns2 )
++ os=-nextstep2
++ ;;
+ # Preserve the version number of sinix5.
+ -sinix5.*)
+ os=`echo $os | sed -e 's|sinix|sysv|'`
+@@ -761,7 +840,7 @@
+ os=-sysv
+ ;;
+ *-cbm)
+- os=-amigados
++ os=-amigaos
+ ;;
+ *-dg)
+ os=-dgux
+@@ -775,6 +854,9 @@
+ m88k-omron*)
+ os=-luna
+ ;;
++ *-next )
++ os=-nextstep
++ ;;
+ *-sequent)
+ os=-ptx
+ ;;
+@@ -808,6 +890,9 @@
+ *-masscomp)
+ os=-rtu
+ ;;
++ f301-fujitsu)
++ os=-uxpv
++ ;;
+ *)
+ os=-none
+ ;;
+@@ -826,9 +911,6 @@
+ -sunos*)
+ vendor=sun
+ ;;
+- -lynxos*)
+- vendor=lynx
+- ;;
+ -aix*)
+ vendor=ibm
+ ;;
+@@ -856,8 +938,11 @@
+ -ptx*)
+ vendor=sequent
+ ;;
+- -vxworks*)
++ -vxsim* | -vxworks*)
+ vendor=wrs
++ ;;
++ -aux*)
++ vendor=apple
+ ;;
+ esac
+ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+diff -Nru at-3.1.8/daemon.c at-3.1.8.new/daemon.c
+--- at-3.1.8/daemon.c Wed Mar 12 20:34:41 1997
++++ at-3.1.8.new/daemon.c Sun Mar 28 19:46:41 1999
+@@ -72,7 +72,7 @@
+ va_list args;
+
+ va_start(args, fmt);
+- vsprintf(buf, fmt, args);
++ vsnprintf(buf, sizeof(buf), fmt, args);
+ va_end(args);
+
+ if (daemon_debug) {
+@@ -90,7 +90,7 @@
+ va_list args;
+
+ va_start(args, fmt);
+- vsprintf(buf, fmt, args);
++ vsnprintf(buf, sizeof(buf), fmt, args);
+ va_end(args);
+
+ if (daemon_debug) {
+@@ -127,6 +127,7 @@
+ }
+ }
+ old_umask = umask(S_IWGRP | S_IWOTH);
++ (void) setsid();
+
+ PRIV_START
+
+diff -Nru at-3.1.8/lex.yy.c at-3.1.8.new/lex.yy.c
+--- at-3.1.8/lex.yy.c Sun Sep 28 22:00:37 1997
++++ at-3.1.8.new/lex.yy.c Sun Mar 28 19:46:41 1999
+@@ -1,7 +1,7 @@
+ /* A lexical scanner generated by flex */
+
+ /* Scanner skeleton version:
+- * $Header$
++ * $Header$
+ */
+
+ #define FLEX_SCANNER
+@@ -126,6 +126,7 @@
+ { \
+ /* Undo effects of setting up yytext. */ \
+ *yy_cp = yy_hold_char; \
++ YY_RESTORE_YY_MORE_OFFSET \
+ yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
+ YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+ } \
+@@ -235,7 +236,7 @@
+ #define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
+
+ YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
+-YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *str ));
++YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
+ YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
+
+ static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
+@@ -456,6 +457,7 @@
+ #define REJECT reject_used_but_not_detected
+ #define yymore() yymore_used_but_not_detected
+ #define YY_MORE_ADJ 0
++#define YY_RESTORE_YY_MORE_OFFSET
+ char *yytext;
+ #line 1 "parsetime.l"
+ #define INITIAL 0
+@@ -491,7 +493,7 @@
+ result = 1; \
+ } \
+ } while(0)
+-#line 495 "lex.yy.c"
++#line 497 "lex.yy.c"
+
+ /* Macros after this point can all be overridden by user definitions in
+ * section 1.
+@@ -513,6 +515,10 @@
+ static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
+ #endif
+
++#ifdef YY_NEED_STRLEN
++static int yy_flex_strlen YY_PROTO(( yyconst char * ));
++#endif
++
+ #ifndef YY_NO_INPUT
+ #ifdef __cplusplus
+ static int yyinput YY_PROTO(( void ));
+@@ -641,7 +647,7 @@
+ #line 36 "parsetime.l"
+
+
+-#line 645 "lex.yy.c"
++#line 651 "lex.yy.c"
+
+ if ( yy_init )
+ {
+@@ -919,7 +925,7 @@
+ #line 77 "parsetime.l"
+ ECHO;
+ YY_BREAK
+-#line 923 "lex.yy.c"
++#line 929 "lex.yy.c"
+ case YY_STATE_EOF(INITIAL):
+ yyterminate();
+
+@@ -930,6 +936,7 @@
+
+ /* Undo the effects of YY_DO_BEFORE_ACTION. */
+ *yy_cp = yy_hold_char;
++ YY_RESTORE_YY_MORE_OFFSET
+
+ if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
+ {
+@@ -1075,7 +1082,7 @@
+ { /* Don't try to fill the buffer, so this is an EOF. */
+ if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
+ {
+- /* We matched a singled characater, the EOB, so
++ /* We matched a single character, the EOB, so
+ * treat this as a final EOF.
+ */
+ return EOB_ACT_END_OF_FILE;
+@@ -1102,7 +1109,7 @@
+ /* don't do the read, it's not guaranteed to return an EOF,
+ * just force an EOF
+ */
+- yy_n_chars = 0;
++ yy_current_buffer->yy_n_chars = yy_n_chars = 0;
+
+ else
+ {
+@@ -1157,6 +1164,8 @@
+ /* Read in more data. */
+ YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
+ yy_n_chars, num_to_read );
++
++ yy_current_buffer->yy_n_chars = yy_n_chars;
+ }
+
+ if ( yy_n_chars == 0 )
+@@ -1281,7 +1290,8 @@
+
+ yy_cp += (int) (dest - source);
+ yy_bp += (int) (dest - source);
+- yy_n_chars = yy_current_buffer->yy_buf_size;
++ yy_current_buffer->yy_n_chars =
++ yy_n_chars = yy_current_buffer->yy_buf_size;
+
+ if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+ YY_FATAL_ERROR( "flex scanner push-back overflow" );
+@@ -1319,19 +1329,31 @@
+
+ else
+ { /* need more input */
+- yytext_ptr = yy_c_buf_p;
++ int offset = yy_c_buf_p - yytext_ptr;
+ ++yy_c_buf_p;
+
+ switch ( yy_get_next_buffer() )
+ {
++ case EOB_ACT_LAST_MATCH:
++ /* This happens because yy_g_n_b()
++ * sees that we've accumulated a
++ * token and flags that we need to
++ * try matching the token before
++ * proceeding. But for input(),
++ * there's no matching to consider.
++ * So convert the EOB_ACT_LAST_MATCH
++ * to EOB_ACT_END_OF_FILE.
++ */
++
++ /* Reset buffer status. */
++ yyrestart( yyin );
++
++ /* fall through */
++
+ case EOB_ACT_END_OF_FILE:
+ {
+ if ( yywrap() )
+- {
+- yy_c_buf_p =
+- yytext_ptr + YY_MORE_ADJ;
+ return EOF;
+- }
+
+ if ( ! yy_did_buffer_switch_on_eof )
+ YY_NEW_FILE;
+@@ -1343,17 +1365,8 @@
+ }
+
+ case EOB_ACT_CONTINUE_SCAN:
+- yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
++ yy_c_buf_p = yytext_ptr + offset;
+ break;
+-
+- case EOB_ACT_LAST_MATCH:
+-#ifdef __cplusplus
+- YY_FATAL_ERROR(
+- "unexpected last match in yyinput()" );
+-#else
+- YY_FATAL_ERROR(
+- "unexpected last match in input()" );
+-#endif
+ }
+ }
+ }
+@@ -1517,6 +1530,9 @@
+ #endif
+
+ {
++ if ( ! b )
++ return;
++
+ b->yy_n_chars = 0;
+
+ /* We always need two end-of-buffer characters. The first causes
+@@ -1576,17 +1592,17 @@
+
+ #ifndef YY_NO_SCAN_STRING
+ #ifdef YY_USE_PROTOS
+-YY_BUFFER_STATE yy_scan_string( yyconst char *str )
++YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
+ #else
+-YY_BUFFER_STATE yy_scan_string( str )
+-yyconst char *str;
++YY_BUFFER_STATE yy_scan_string( yy_str )
++yyconst char *yy_str;
+ #endif
+ {
+ int len;
+- for ( len = 0; str[len]; ++len )
++ for ( len = 0; yy_str[len]; ++len )
+ ;
+
+- return yy_scan_bytes( str, len );
++ return yy_scan_bytes( yy_str, len );
+ }
+ #endif
+
+@@ -1707,7 +1723,7 @@
+ { \
+ /* Undo effects of setting up yytext. */ \
+ yytext[yyleng] = yy_hold_char; \
+- yy_c_buf_p = yytext + n - YY_MORE_ADJ; \
++ yy_c_buf_p = yytext + n; \
+ yy_hold_char = *yy_c_buf_p; \
+ *yy_c_buf_p = '\0'; \
+ yyleng = n; \
+@@ -1730,6 +1746,22 @@
+ register int i;
+ for ( i = 0; i < n; ++i )
+ s1[i] = s2[i];
++ }
++#endif
++
++#ifdef YY_NEED_STRLEN
++#ifdef YY_USE_PROTOS
++static int yy_flex_strlen( yyconst char *s )
++#else
++static int yy_flex_strlen( s )
++yyconst char *s;
++#endif
++ {
++ register int n;
++ for ( n = 0; s[n]; ++n )
++ ;
++
++ return n;
+ }
+ #endif
+
+diff -Nru at-3.1.8/panic.c at-3.1.8.new/panic.c
+--- at-3.1.8/panic.c Sun Sep 28 22:00:37 1997
++++ at-3.1.8.new/panic.c Sun Mar 28 19:46:41 1999
+@@ -41,6 +41,7 @@
+ /* Local headers */
+
+ #include "panic.h"
++#include "privs.h"
+ #include "at.h"
+
+ /* File scope variables */
+@@ -72,12 +73,15 @@
+ va_list args;
+
+ va_start(args, fmt);
+- vsprintf(buf, fmt, args);
++ vsnprintf(buf, sizeof(buf), fmt, args);
+ va_end(args);
+
+ perror(buf);
+- if (fcreated)
++ if (fcreated) {
++ PRIV_START
+ unlink(atfile);
++ PRIV_END
++ }
+
+ exit(EXIT_FAILURE);
+ }
+@@ -88,7 +92,7 @@
+ /* Print usage and exit.
+ */
+ fprintf(stderr, "Usage: at [-V] [-q x] [-f file] [-m] time\n"
+- " atq [-V] [-q x] [-v]\n"
++ " atq [-V] [-q x]\n"
+ " atrm [-V] [-q x] job ...\n"
+ " batch [-V] [-f file] [-m]\n");
+ exit(EXIT_FAILURE);
+diff -Nru at-3.1.8/parsetime.y at-3.1.8.new/parsetime.y
+--- at-3.1.8/parsetime.y Sun Sep 28 20:21:29 1997
++++ at-3.1.8.new/parsetime.y Sun Mar 28 19:46:41 1999
+@@ -11,6 +11,9 @@
+ static int isgmt;
+ static int time_only;
+
++extern int yyerror(char *s);
++extern int yylex();
++
+ int add_date(int number, int period);
+ %}
+
+@@ -181,6 +184,15 @@
+ ;
+
+ am_pm : AM
++ {
++ if (exectm.tm_hour > 12) {
++ yyerror("Hour too large for AM");
++ YYERROR;
++ }
++ else if (exectm.tm_hour == 12) {
++ exectm.tm_hour = 0;
++ }
++ }
+ | PM
+ {
+ if (exectm.tm_hour > 12) {
+@@ -258,13 +270,13 @@
+ ;
+
+
+-day_of_week : SUN { $$ = 0; }
+- | MON { $$ = 1; }
+- | TUE { $$ = 2; }
+- | WED { $$ = 3; }
+- | THU { $$ = 4; }
+- | FRI { $$ = 5; }
+- | SAT { $$ = 6; }
++day_of_week : MON { $$ = 0; }
++ | TUE { $$ = 1; }
++ | WED { $$ = 2; }
++ | THU { $$ = 3; }
++ | FRI { $$ = 4; }
++ | SAT { $$ = 5; }
++ | SUN { $$ = 6; }
+ ;
+
+ inc_number : INT
+diff -Nru at-3.1.8/y.tab.c at-3.1.8.new/y.tab.c
+--- at-3.1.8/y.tab.c Sun Sep 28 20:21:31 1997
++++ at-3.1.8.new/y.tab.c Sun Mar 28 19:46:41 1999
+@@ -1,5 +1,6 @@
+
+-/* A Bison parser, made from parsetime.y with Bison version GNU Bison version 1.22
++/* A Bison parser, made from parsetime.y
++ by GNU Bison version 1.25
+ */
+
+ #define YYBISON 1 /* Identify Bison output. */
+@@ -55,30 +56,16 @@
+ static int isgmt;
+ static int time_only;
+
++extern int yyerror(char *s);
++extern int yylex();
++
+ int add_date(int number, int period);
+
+-#line 17 "parsetime.y"
++#line 20 "parsetime.y"
+ typedef union {
+ char * charval;
+ int intval;
+ } YYSTYPE;
+-
+-#ifndef YYLTYPE
+-typedef
+- struct yyltype
+- {
+- int timestamp;
+- int first_line;
+- int first_column;
+- int last_line;
+- int last_column;
+- char *text;
+- }
+- yyltype;
+-
+-#define YYLTYPE yyltype
+-#endif
+-
+ #include <stdio.h>
+
+ #ifndef __cplusplus
+@@ -158,9 +145,9 @@
+ 0, 55, 0, 3, 0, 5, 0, 6, 0, 26,
+ 0, 27, 0, 28, 0, 29, 0, 30, 0, 31,
+ 0, 32, 0, 33, 0, 34, 0, 35, 0, 36,
+- 0, 37, 0, 3, 0, 3, 0, 3, 0, 10,
+- 0, 11, 0, 12, 0, 13, 0, 14, 0, 15,
+- 0, 16, 0, 3, 0, 44, 0, 45, 0, 41,
++ 0, 37, 0, 3, 0, 3, 0, 3, 0, 11,
++ 0, 12, 0, 13, 0, 14, 0, 15, 0, 16,
++ 0, 10, 0, 3, 0, 44, 0, 45, 0, 41,
+ 0, 46, 0, 39, 0
+ };
+
+@@ -168,24 +155,28 @@
+
+ #if YYDEBUG != 0
+ static const short yyrline[] = { 0,
+- 39, 43, 44, 45, 46, 47, 48, 51, 52, 53,
+- 56, 59, 60, 61, 62, 63, 64, 65, 66, 67,
+- 72, 78, 85, 86, 87, 91, 92, 96, 97, 98,
+- 99, 100, 101, 104, 108, 112, 118, 124, 125, 126,
+- 127, 128, 129, 132, 157, 170, 173, 183, 184, 197,
+- 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
+- 208, 211, 225, 238, 261, 262, 263, 264, 265, 266,
+- 267, 270, 280, 281, 282, 283, 284
++ 42, 46, 47, 48, 49, 50, 51, 54, 55, 56,
++ 59, 62, 63, 64, 65, 66, 67, 68, 69, 70,
++ 75, 81, 88, 89, 90, 94, 95, 99, 100, 101,
++ 102, 103, 104, 107, 111, 115, 121, 127, 128, 129,
++ 130, 131, 132, 135, 160, 173, 176, 186, 187, 200,
++ 201, 202, 203, 204, 205, 206, 207, 208, 209, 210,
++ 211, 214, 228, 241, 264, 265, 266, 267, 268, 269,
++ 270, 273, 283, 284, 285, 286, 287
+ };
++#endif
+
+-static const char * const yytname[] = { "$","error","$illegal.","INT","NOW",
++
++#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
++
++static const char * const yytname[] = { "$","error","$undefined.","INT","NOW",
+ "AM","PM","NOON","MIDNIGHT","TEATIME","SUN","MON","TUE","WED","THU","FRI","SAT",
+ "TODAY","TOMORROW","NEXT","MINUTE","HOUR","DAY","WEEK","MONTH","YEAR","JAN",
+ "FEB","MAR","APR","MAY","JUN","JUL","AUG","SEP","OCT","NOV","DEC","WORD","','",
+-"'-'","'.'","'/'","'+'","':'","'\\''","'h'","timespec","nowspec","now","time",
++"'-'","'.'","'/'","'+'","':'","'''","'h'","timespec","nowspec","now","time",
+ "date","increment","decrement","inc_period","hr24clock_hr_min","timezone_name",
+ "hr24clock_hour","minute","am_pm","month_name","month_number","day_number","year_number",
+-"day_of_week","inc_number","time_sep",""
++"day_of_week","inc_number","time_sep", NULL
+ };
+ #endif
+
+@@ -213,8 +204,8 @@
+
+ static const short yydefact[] = { 0,
+ 44, 11, 20, 21, 22, 7, 8, 1, 12, 0,
+- 0, 0, 0, 9, 10, 63, 65, 66, 67, 68,
+- 69, 70, 71, 26, 27, 50, 51, 52, 53, 54,
++ 0, 0, 0, 9, 10, 63, 71, 65, 66, 67,
++ 68, 69, 70, 26, 27, 50, 51, 52, 53, 54,
+ 55, 56, 57, 58, 59, 60, 61, 2, 3, 5,
+ 0, 0, 0, 0, 25, 45, 13, 48, 49, 77,
+ 75, 73, 74, 76, 16, 0, 38, 39, 40, 41,
+@@ -283,14 +274,14 @@
+ -1, 41
+ };
+ /* -*-C-*- Note some compilers choke on comments on `#line' lines. */
+-#line 3 "/usr/lib/bison.simple"
++#line 3 "/usr/share/misc/bison.simple"
+
+ /* Skeleton output parser for bison,
+- Copyright (C) 1984, 1989, 1990 Bob Corbett and Richard Stallman
++ Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
+
+ This program 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 1, or (at your option)
++ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+@@ -300,8 +291,12 @@
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
++/* As a special exception, when this file is copied by Bison into a
++ Bison output file, you may use that output file without restriction.
++ This special exception was added by the Free Software Foundation
++ in version 1.24 of Bison. */
+
+ #ifndef alloca
+ #ifdef __GNUC__
+@@ -375,10 +370,18 @@
+
+ #ifdef YYPURE
+ #ifdef YYLSP_NEEDED
++#ifdef YYLEX_PARAM
++#define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
++#else
+ #define YYLEX yylex(&yylval, &yylloc)
++#endif
++#else /* not YYLSP_NEEDED */
++#ifdef YYLEX_PARAM
++#define YYLEX yylex(&yylval, YYLEX_PARAM)
+ #else
+ #define YYLEX yylex(&yylval)
+ #endif
++#endif /* not YYLSP_NEEDED */
+ #endif
+
+ /* If nonreentrant, generate the variables here */
+@@ -426,16 +429,16 @@
+ #endif
+ \f
+ #if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
+-#define __yy_bcopy(FROM,TO,COUNT) __builtin_memcpy(TO,FROM,COUNT)
++#define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
+ #else /* not GNU C or C++ */
+ #ifndef __cplusplus
+
+ /* This is the most reliable way to avoid incompatibilities
+ in available built-in functions on various systems. */
+ static void
+-__yy_bcopy (from, to, count)
+- char *from;
++__yy_memcpy (to, from, count)
+ char *to;
++ char *from;
+ int count;
+ {
+ register char *f = from;
+@@ -451,7 +454,7 @@
+ /* This is the most reliable way to avoid incompatibilities
+ in available built-in functions on various systems. */
+ static void
+-__yy_bcopy (char *from, char *to, int count)
++__yy_memcpy (char *to, char *from, int count)
+ {
+ register char *f = from;
+ register char *t = to;
+@@ -464,9 +467,30 @@
+ #endif
+ #endif
+ \f
+-#line 184 "/usr/lib/bison.simple"
++#line 196 "/usr/share/misc/bison.simple"
++
++/* The user can define YYPARSE_PARAM as the name of an argument to be passed
++ into yyparse. The argument should have type void *.
++ It should actually point to an object.
++ Grammar actions can access the variable by casting it
++ to the proper pointer type. */
++
++#ifdef YYPARSE_PARAM
++#ifdef __cplusplus
++#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
++#define YYPARSE_PARAM_DECL
++#else /* not __cplusplus */
++#define YYPARSE_PARAM_ARG YYPARSE_PARAM
++#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
++#endif /* not __cplusplus */
++#else /* not YYPARSE_PARAM */
++#define YYPARSE_PARAM_ARG
++#define YYPARSE_PARAM_DECL
++#endif /* not YYPARSE_PARAM */
++
+ int
+-yyparse()
++yyparse(YYPARSE_PARAM_ARG)
++ YYPARSE_PARAM_DECL
+ {
+ register int yystate;
+ register int yyn;
+@@ -582,12 +606,12 @@
+ if (yystacksize > YYMAXDEPTH)
+ yystacksize = YYMAXDEPTH;
+ yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
+- __yy_bcopy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp));
++ __yy_memcpy ((char *)yyss, (char *)yyss1, size * sizeof (*yyssp));
+ yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
+- __yy_bcopy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp));
++ __yy_memcpy ((char *)yyvs, (char *)yyvs1, size * sizeof (*yyvsp));
+ #ifdef YYLSP_NEEDED
+ yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
+- __yy_bcopy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp));
++ __yy_memcpy ((char *)yyls, (char *)yyls1, size * sizeof (*yylsp));
+ #endif
+ #endif /* no yyoverflow */
+
+@@ -748,20 +772,20 @@
+ switch (yyn) {
+
+ case 1:
+-#line 40 "parsetime.y"
++#line 43 "parsetime.y"
+ {
+ time_only = 1;
+ ;
+ break;}
+ case 20:
+-#line 68 "parsetime.y"
++#line 71 "parsetime.y"
+ {
+ exectm.tm_hour = 12;
+ exectm.tm_min = 0;
+ ;
+ break;}
+ case 21:
+-#line 73 "parsetime.y"
++#line 76 "parsetime.y"
+ {
+ exectm.tm_hour = 0;
+ exectm.tm_min = 0;
+@@ -769,74 +793,74 @@
+ ;
+ break;}
+ case 22:
+-#line 79 "parsetime.y"
++#line 82 "parsetime.y"
+ {
+ exectm.tm_hour = 16;
+ exectm.tm_min = 0;
+ ;
+ break;}
+ case 25:
+-#line 88 "parsetime.y"
++#line 91 "parsetime.y"
+ {
+ add_date ((7 + yyvsp[0].intval - exectm.tm_wday) %7 + 1, DAY);
+ ;
+ break;}
+ case 27:
+-#line 93 "parsetime.y"
++#line 96 "parsetime.y"
+ {
+ add_date(1, DAY);
+ ;
+ break;}
+ case 34:
+-#line 105 "parsetime.y"
++#line 108 "parsetime.y"
+ {
+ add_date(yyvsp[-1].intval, yyvsp[0].intval);
+ ;
+ break;}
+ case 35:
+-#line 109 "parsetime.y"
++#line 112 "parsetime.y"
+ {
+ add_date(1, yyvsp[0].intval);
+ ;
+ break;}
+ case 36:
+-#line 113 "parsetime.y"
++#line 116 "parsetime.y"
+ {
+ add_date ((6 + yyvsp[0].intval - exectm.tm_wday) %7 +1, DAY);
+ ;
+ break;}
+ case 37:
+-#line 119 "parsetime.y"
++#line 122 "parsetime.y"
+ {
+ add_date(-yyvsp[-1].intval, yyvsp[0].intval);
+ ;
+ break;}
+ case 38:
+-#line 124 "parsetime.y"
++#line 127 "parsetime.y"
+ { yyval.intval = MINUTE ; ;
+ break;}
+ case 39:
+-#line 125 "parsetime.y"
++#line 128 "parsetime.y"
+ { yyval.intval = HOUR ; ;
+ break;}
+ case 40:
+-#line 126 "parsetime.y"
++#line 129 "parsetime.y"
+ { yyval.intval = DAY ; ;
+ break;}
+ case 41:
+-#line 127 "parsetime.y"
++#line 130 "parsetime.y"
+ { yyval.intval = WEEK ; ;
+ break;}
+ case 42:
+-#line 128 "parsetime.y"
++#line 131 "parsetime.y"
+ { yyval.intval = MONTH ; ;
+ break;}
+ case 43:
+-#line 129 "parsetime.y"
++#line 132 "parsetime.y"
+ { yyval.intval = YEAR ; ;
+ break;}
+ case 44:
+-#line 133 "parsetime.y"
++#line 136 "parsetime.y"
+ {
+ exectm.tm_min = -1;
+ exectm.tm_hour = -1;
+@@ -861,7 +885,7 @@
+ ;
+ break;}
+ case 45:
+-#line 158 "parsetime.y"
++#line 161 "parsetime.y"
+ {
+ if (strcasecmp(yyvsp[0].charval,"utc") == 0) {
+ isgmt = 1;
+@@ -874,7 +898,7 @@
+ ;
+ break;}
+ case 47:
+-#line 174 "parsetime.y"
++#line 177 "parsetime.y"
+ {
+ if (sscanf(yyvsp[0].charval, "%d", &exectm.tm_min) != 1) {
+ yyerror("Error in minute");
+@@ -884,7 +908,7 @@
+ ;
+ break;}
+ case 49:
+-#line 185 "parsetime.y"
++#line 188 "parsetime.y"
+ {
+ if (exectm.tm_hour > 12) {
+ yyerror("Hour too large for PM");
+@@ -896,55 +920,55 @@
+ ;
+ break;}
+ case 50:
+-#line 197 "parsetime.y"
++#line 200 "parsetime.y"
+ { exectm.tm_mon = 0; ;
+ break;}
+ case 51:
+-#line 198 "parsetime.y"
++#line 201 "parsetime.y"
+ { exectm.tm_mon = 1; ;
+ break;}
+ case 52:
+-#line 199 "parsetime.y"
++#line 202 "parsetime.y"
+ { exectm.tm_mon = 2; ;
+ break;}
+ case 53:
+-#line 200 "parsetime.y"
++#line 203 "parsetime.y"
+ { exectm.tm_mon = 3; ;
+ break;}
+ case 54:
+-#line 201 "parsetime.y"
++#line 204 "parsetime.y"
+ { exectm.tm_mon = 4; ;
+ break;}
+ case 55:
+-#line 202 "parsetime.y"
++#line 205 "parsetime.y"
+ { exectm.tm_mon = 5; ;
+ break;}
+ case 56:
+-#line 203 "parsetime.y"
++#line 206 "parsetime.y"
+ { exectm.tm_mon = 6; ;
+ break;}
+ case 57:
+-#line 204 "parsetime.y"
++#line 207 "parsetime.y"
+ { exectm.tm_mon = 7; ;
+ break;}
+ case 58:
+-#line 205 "parsetime.y"
++#line 208 "parsetime.y"
+ { exectm.tm_mon = 8; ;
+ break;}
+ case 59:
+-#line 206 "parsetime.y"
++#line 209 "parsetime.y"
+ { exectm.tm_mon = 9; ;
+ break;}
+ case 60:
+-#line 207 "parsetime.y"
++#line 210 "parsetime.y"
+ { exectm.tm_mon =10; ;
+ break;}
+ case 61:
+-#line 208 "parsetime.y"
++#line 211 "parsetime.y"
+ { exectm.tm_mon =11; ;
+ break;}
+ case 62:
+-#line 212 "parsetime.y"
++#line 215 "parsetime.y"
+ {
+ {
+ int mnum = -1;
+@@ -960,7 +984,7 @@
+ ;
+ break;}
+ case 63:
+-#line 226 "parsetime.y"
++#line 229 "parsetime.y"
+ {
+ exectm.tm_mday = -1;
+ sscanf(yyvsp[0].charval, "%d", &exectm.tm_mday);
+@@ -973,7 +997,7 @@
+ ;
+ break;}
+ case 64:
+-#line 239 "parsetime.y"
++#line 242 "parsetime.y"
+ {
+ {
+ int ynum;
+@@ -995,35 +1019,35 @@
+ ;
+ break;}
+ case 65:
+-#line 261 "parsetime.y"
++#line 264 "parsetime.y"
+ { yyval.intval = 0; ;
+ break;}
+ case 66:
+-#line 262 "parsetime.y"
++#line 265 "parsetime.y"
+ { yyval.intval = 1; ;
+ break;}
+ case 67:
+-#line 263 "parsetime.y"
++#line 266 "parsetime.y"
+ { yyval.intval = 2; ;
+ break;}
+ case 68:
+-#line 264 "parsetime.y"
++#line 267 "parsetime.y"
+ { yyval.intval = 3; ;
+ break;}
+ case 69:
+-#line 265 "parsetime.y"
++#line 268 "parsetime.y"
+ { yyval.intval = 4; ;
+ break;}
+ case 70:
+-#line 266 "parsetime.y"
++#line 269 "parsetime.y"
+ { yyval.intval = 5; ;
+ break;}
+ case 71:
+-#line 267 "parsetime.y"
++#line 270 "parsetime.y"
+ { yyval.intval = 6; ;
+ break;}
+ case 72:
+-#line 271 "parsetime.y"
++#line 274 "parsetime.y"
+ {
+ if (sscanf(yyvsp[0].charval, "%d", &yyval.intval) != 1) {
+ yyerror("Unknown increment");
+@@ -1034,7 +1058,7 @@
+ break;}
+ }
+ /* the action file gets copied in in place of this dollarsign */
+-#line 465 "/usr/lib/bison.simple"
++#line 498 "/usr/share/misc/bison.simple"
+ \f
+ yyvsp -= yylen;
+ yyssp -= yylen;
+@@ -1230,7 +1254,7 @@
+ yystate = yyn;
+ goto yynewstate;
+ }
+-#line 287 "parsetime.y"
++#line 290 "parsetime.y"
+
+
+