Wed Jan  1 17:54:47 1998  J.J. van der Heijden <J.J.vanderHeijden@student.utwente.nl>

	* pexecute.c (pexecute, [_WIN32]): Yes, mask termstat for mingw32.

Mon Dec 22 18:59:34 1997  Pascal Obry  <pascal.obry@der.edfgdf.fr>

	* pexecute.c (pexecute, [_WIN32]): For mingw32, don't mask termstat.

Sat Dec 13 09:39:32 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* pexecute.c (fix_argv): Remove outer "const" from return type.
	(pexecute): errmsg_arg is pointer to const.

Sat Nov 29 08:06:34 1997  Jan-Jaap van der Heijden  <janjaap@student.utwente.nl>

	* pexecute.c: Include signal.h for _WIN32.

Wed Nov 26 17:31:44 1997  J.J. van der Heijden <J.J.vanderHeijden@student.utwente.nl>

	* pexecute.c (pwait): For _WIN32, distinguish whether child process
	caught fatal signal or reported nonzero exit code.

Wed Nov 26 13:24:30 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* choose-temp.c (sys/file.h): Include if HAVE_SYS_FILE_H.

Mon Nov 17 09:07:52 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* choose-temp.c (choose_temp_base): Remove incorrect code for VMS.

Sun Oct 19 10:34:11 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* pexecute.c (fix_argv, pexecute): Cast result of xmalloc.

Sat Oct 18 16:55:18 1997  Jason Merrill  <jason@yorick.cygnus.com>

	* obstack.h (obstack_empty_p): New macro.

Mon Sep 29 12:27:59 1997  Ian Lance Taylor  <ian@cygnus.com>

	* pexecute.c: Use spawn if __CYGWIN32__.

Wed Sep 10 15:14:20 1997  Jeffrey A Law  (law@cygnus.com)

	* config.sub: Use "amigaos" instread of "amigados".  Still
	recognize "amigados" for backward compatibility.

Tue Sep  9 18:23:57 1997  Doug Evans  <dje@cygnus.com>

	* config.sub: Recognize ARC cpu.

1997-09-09  Richard Kenner  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* config.guess (alpha): Replace CPU-determining program with one
	that's more precise and also supports pca56 and ev6.
	Handle those in returned name.

1997-09-08  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* config.guess (alpha:OSF1:*:*): For V4.0, get the letter suffix.

1997-09-05  Jeffrey A Law  (law@cygnus.com)

	* config.sub: Recognize v850-elf.

1997-08-26  Richard Henderson  <rth@cygnus.com>

	* config.guess (*:Linux:*:*): Recognize alpha-linux-gnulibc1.

1997-08-17  Jeff Law  <law@cygnus.com>

	* config.sub: Recognize tx39/r3900.

1997-08-08  Paul Eggert  <eggert@twinsun.com>

	* choose-temp.c, pexecute.c:
	Include "config.h" first, as per autoconf manual.

1997-08-01  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>

	* config.sub: Translate -svr4 to -sysv4 and -unixware to -sysv4.2uw.

1997-07-26  Per Bothner  <bothner@pogo.gnu.ai.mit.edu>

	* config.guess:  Recognize SunOS 3.x.
	From Tom Schmidt <tschmidt@micron.com>.

1997-07-22  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>

	* getloadavg.c: Test `__unix' along with `unix'.

Sun Jul 20 20:58:43 1997  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* config.guess (alpha*): Run program to see if ev4, ev5, or ev56.
	* config.sub (alphaev5, alphaev56): New CPU types.

Wed Jul 16 10:46:14 1997  Richard Earnshaw <rearnsha@cambridge.arm.com>

	* config.guess (arm32:NetBSD:*:*): Canonicalize to normal format
	for ARM systems.

Tue Jul 15 09:13:05 1997  Jim Meyering  <meyering@psilocin.gnu.ai.mit.edu>

	* getloadavg.c: Add comment describing HAVE_PSTAT_GETDYNAMIC.
	
1997-07-14  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>

	* config.guess (pc:*:*:*): New entry, for DJGPP.

1997-07-07  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>

	* config.guess (i?86:UNIX_SV:4.2MP:2.*): Recognize unixware.

1997-07-06  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>

	* getloadavg.c [OSF_ALPHA]:
	Include sys/mbuf.h, sys/socket.h, net/route.h.

1997-06-30  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>

	* getloadavg.c [__GNU__]: Test for not NeXT.

Fri Jun 27 15:20:29 1997  Scott Christley <scottc@net-community.com>

	* config.sub (-mingw32*): New OS.
	* config.guess (i*:MINGW*:*): New case.
	* pexecute.c (fix_argv): New function.
	(pexecute): Win32 but not Cygwin32 needs its arguments fixed.
	Add underscore to cwait function call.

Mon Jun 23 10:51:53 1997  Jeffrey A Law  (law@cygnus.com)

	* config.sub (mn10200): Recognize new basic machine.

1997-06-22  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>

	* config.guess: Add mips-sony-newsos6.

1997-06-09  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>

	* config.guess: Use i?86, not i.86.
	Don't test /usr/lib/ldscripts; instead, test whether ld_help_string
	does not contain "supported emulations".
	Use a case statement to distinguish systems when there IS
	"supported emulations".

1997-06-07  H.J. Lu  (hjl@gnu.ai.mit.edu)

	* config.guess (*:Linux:*:*): Always use ${VENDOR}.

1997-06-05  Richard Stallman  <rms@psilocin.gnu.ai.mit.edu>

	* config.guess (*:Linux:*:*): Don't test for elf_i.86 or m68kelf.
	
	* config.guess (*:Linux:*:*): Recognize sparclinux.
	Don't recognize UNAME_MACHINE = sparc.
	Make the sample program check for libc version
	and handle various machine types.

	* config.sub (mipsel*-linux* and mips*-linux*):
	Set `os' to -linux-gnu directly, don't go via -linux.

Mon May 26 12:46:25 1997  Paul Eggert  <eggert@twinsun.com>

	* getopt.c, getopt.h, getopt1.c: Moved to libc-copy/copies.

Wed May  7 15:17:59 1997  Thomas Bushnell, n/BSG  <thomas@gnu.ai.mit.edu>

	* config.guess: Recognize either / or - as a machine/suptype
	separator from uname -m to cope with older systems that have the
	older uname.  Suggested by Michael Snyder (msnyder@cygnus.com).

Mon May  5 18:05:35 1997  Per Bothner  <bothner@frobnitz.gnu.ai.mit.edu>

	* config.guess: CLIX patch from Thomas Dickey via
	urs@akk.uni-karlsruhe.de (Urs Janssen).
	
Thu Apr 17 13:59:13 1997  Per Fogelstrom  <pefo@openbsd.org>

	* config.guess: Fixes for MIPS OpenBSD systems.

Fri Apr 11 16:39:06 1997  Niklas Hallqvist  <niklas@appli.se>

	* config.guess: Recognize OpenBSD systems correctly.

Mon Mar 24 15:38:37 1997  Doug Evans  <dje@cygnus.com>

	* config.sub: Recognize m32r and mn10300 cpus.

Sat Feb 22 22:36:44 1997  Miles Bader  <miles@gnu.ai.mit.edu>

	* getloadavg.c [__GNU__] (NeXT, host_self): New macros, to make
	hurd systems use the NeXT code for getting load averages.

Sat Feb 15 19:03:48 1997  Geoffrey Noer  (noer@cygnus.com)

	* pexecute.c: Remove special cases for cygwin32.
	(pwait): Remove local definition of `pid'.

Wed Jan 15 22:36:59 1997  Jim Meyering  <meyering@kropotkin.gnu.ai.mit.edu>

	* getloadavg.c [hpux && HAVE_PSTAT_GETDYNAMIC]: Use HPUX's
	pstat_getdynamic function so we don't need any special privileges
	to determine load averages.  Patch from Kaveh Ghazi, based on a
	sample implementation from Richard J. Rauenzahn.
	Indent cpp-directives to reflect nesting.

Tue Jan  7 14:29:37 1997  David J. MacKenzie  <djm@geech.gnu.ai.mit.edu>

	* config.guess: Add hppa1.1-hitachi-hiuxmpp support, passed along
	by rms.

Sat Jan  4 22:43:21 1997  Miles Bader  <miles@gnu.ai.mit.edu>

	* config.guess (*:GNU:*:*): The machine/subtype separator printed
	by uname -m is now `-', not '/'.

Fri Jan  3 08:38:49 1997  Philippe De Muyter  (phdm@info.ucl.ac.be)

	* config.guess (M68*:*:R3V[567]*:*): Use uppercase 'M'.

Tue Dec 31 15:51:13 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config.guess, config.sub: Recognize mips-unknown-linux-gnu.

Tue Dec 10 09:44:57 1996  Paul Eggert  <eggert@twinsun.com>

	* choose-temp.c (choose_temp_base): Don't dump core if TMPDIR is empty.

	* choose-temp.c (try): Insist that temp dir be searchable.

Sat Dec  7 17:48:02 1996  Dave Love  <d.love@dl.ac.uk>

	* config.guess (PENTIUM:CPunix:4.0*:*): New case.

Sun Nov 24 19:41:31 1996  Per Bothner  <bothner@frobnitz.gnu.ai.mit.edu>

	* config.guess:  Recognize machten.
	From Eric W. Bates <ericx@vineyard.net>.

Sun Nov 24 18:17:53 1996  Dave Love  <d.love@dl.ac.uk>

	* config.guess (PENTIUM:CPunix:4.0*:*): New case.

Fri Nov 22 11:44:13 1996  David J. MacKenzie  <djm@geech.gnu.ai.mit.edu>

	* config.guess: Undo accidental lowercasing in
	m68k-motorola-sysv regexp.

Wed Nov 20 16:27:37 1996  David J. MacKenzie  <djm@churchy.gnu.ai.mit.edu>

	* config.guess, config.sub: Additions for the Fujitsu UXP/V.
	From joda@pdc.kth.se (Johan Danielsson).
	
Tue Nov 19 13:34:12 1996  David J. MacKenzie  <djm@churchy.gnu.ai.mit.edu>

	* getpagesize.h: If no sys/param.h, default to 8k.
	Indent for readability.

Wed Nov 13 14:59:46 1996  Per Bothner  <bothner@deneb.cygnus.com>

	* config.guess:  Patch for Dansk Data Elektronik servers,
	from Niels Skou Olsen <nso@dde.dk>.

	For ncr, use /bin/uname rather than uname, since GNU uname does not
	support -p.  Suggested by Mark Mitchell <mmitchell@usa.net>.

	Patch for MIPS R4000 running System V,
	from Eric S. Raymond <esr@snark.thyrsus.com>.

	Fix thinko for nextstep.

	Patch for OSF1 in i?86, from Dan Murphy <dlm@osf.org> via Harlan Stenn.

	Sat Jun 24 18:58:17 1995  Morten Welinder  <terra+@cs.cmu.edu>
	* config.guess: Guess mips-dec-mach_bsd4.3.

	Thu Oct 10 04:07:04 1996  Harlan Stenn <harlan@pfcs.com>
	* config.guess (i?86-ncr-sysv*):  Emit just enough of the minor
	release numbers.
	* config.guess (mips-mips-riscos*):  Emit just enough of the
	release number.

	Tue Oct  8 10:37:22 1996  Frank Vance <fvance@waii.com>
	* config.guess (sparc-auspex-sunos*):  Added.
	(f300-fujitsu-*): Added.

	Wed Sep 25 22:00:35 1996  Jeff Woolsey <woolsey@jlw.com>
	* config.guess:  Recognize a Tadpole as a sparc.

Wed Nov 13 00:53:09 1996  David J. MacKenzie  <djm@churchy.gnu.ai.mit.edu>

	* config.guess: Don't assume that NextStep version is either 2 or
	3.  NextStep 4 (aka OpenStep 4) has come out now.

Tue Nov 12 18:26:15 1996  Doug Rupp  (rupp@gnat.com)

	* pexecute.c (vfork): Supply new definition for VMS.
	(pwait): Use waitpid instead of wait for VMS.

Mon Nov 11 23:52:03 1996  David J. MacKenzie  <djm@churchy.gnu.ai.mit.edu>

	* config.guess: Support Cray T90 that reports itself as "CRAY TS".
	From Rik Faith <faith@cs.unc.edu>.

Fri Nov  8 11:34:58 1996  David J. MacKenzie  <djm@geech.gnu.ai.mit.edu>

	* config.sub: Contributions from bug-gnu-utils to:
	Support plain "hppa" (no version given) architecture, reported by
	OpenStep.
	OpenBSD like NetBSD.
	LynxOs is not a hardware supplier.

	* config.guess: Contributions from bug-gnu-utils to add support for:
	OpenBSD like NetBSD.
	Stratus systems.
	More Pyramid systems.
	i[n>4]86 Intel chips.
	M680[n>4]0 Motorola chips.
	Use unknown instead of lynx for hardware manufacturer.

Mon Oct 28 17:15:52 1996  Christian Limpach  <chris@nice.ch>

	* config.sub: Recognize hppa-next as a valid CPU-COMPANY combination.

Wed Oct 23 17:36:39 1996  Doug Rupp  (rupp@gnat.com)

	* choose-temp.c (choose_temp_base): On VMS, use proper syntax
	for current directory.

Wed Oct  9 23:30:18 1996  Jim Meyering  <meyering@wombat.gnu.ai.mit.edu>

	* getloadavg.c: [__hpux]: Define hpux.  From Eric Backus.
	[__sun]: Define sun.  Reported by Kaveh Ghazi.

Mon Sep 23 22:45:15 1996  Sean McNeil  <sean@mcneil.com>

	* config.sub (-vxsim*): New operating system.

	1996-09-12  Richard Stallman  <rms@ethanol.gnu.ai.mit.edu>

	* config.guess: Use pc instead of unknown, for pc clone systems.
	Change linux to linux-gnu.

Thu Sep 12 20:12:26 1996  Richard Stallman  <rms@ethanol.gnu.ai.mit.edu>

	* config.sub: Use pc instead of unknown, for pc clones.
	Use -linux-gnu for Linux-based GNU systems.

1996-09-04  Richard Stallman  <rms@ethanol.gnu.ai.mit.edu>

	* getloadavg.c (getloadavg): Add new code for SUNOS_5 to use -lkstat.

Sat Aug 17 15:23:39 1996  Geoffrey Noer  <noer@cygnus.com>

	* choose-temp.c: Delete !defined(_WIN32) condition when including
	sys/file.h (NO_SYS_FILE_H is still used).
	* getopt.c: Change win32 test from WIN32 to _WIN32.
	* pexecute.c: Update test for win32 (&& ! cygwin32).

Mon Jul 15 23:51:11 1996  Karl Heuer  <kwzh@gnu.ai.mit.edu>

	* config.guess: Avoid non-portable tr syntax.

Mon Jul 15 11:53:00 1996  Jeffrey A Law  (law@cygnus.com)

	* config.guess (HP 9000/811): Recognize this as a PA1.1
	machine.

Thu Jul 11 17:02:23 1996  David J. MacKenzie  <djm@geech.gnu.ai.mit.edu>

	* install-sh: Add MIT copyright notice.  From gordoni@cygnus.com.

Sun Jul  7 13:27:04 1996  Joel Sherrill  <joel@merlin.gcs.redstone.army.mil>

	* config.sub: Recognize rtems as an o/s.

Tue Jul  2 16:45:02 1996  Torbjorn Granlund  <tege@spiff.gnu.ai.mit.edu>

	* config.guess: Generalize C90 alternative to all x90 machines.

Fri Jun 28 13:29:05 1996  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* config.guess (mips:*:*:UMIPS): Fix typo in last change.

Tue Jun 25 22:43:48 1996  Doug Evans  <dje@cygnus.com>

	* pexecute.c (PEXECUTE_VERBOSE): Define.
	(MPW pexecute): Check flags & PEXECUTE_VERBOSE instead of verbose_flag.

Mon Jun 24 14:32:22 1996  Jim Wilson  <wilson@cygnus.com>

	* getopt.c (getpid): Don't redefine it if __CYGWIN32__ is defined.

Thu Jun 20 12:20:33 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config.guess (*:Linux:*:*): Add support for PowerPC Linux.

Mon Jun 10 16:10:57 1996  Doug Evans  <dje@cygnus.com>

	* pexecute.c: New file.

Fri Jun  7 18:16:52 1996  Harlan Stenn <harlan@pfcs.com>

	* config.guess (i?86-ncr-sysv*):  Emit minor release numbers.
	Recognize the NCR 4850 machine and NCR Pentium-based platforms.

Wed Jun  5 00:09:17 1996  Per Bothner  <bothner@wombat.gnu.ai.mit.edu>

	* config.guess:  Combine mips-mips-riscos cases, and use cpp to
	distinguish sysv/svr4/bsd variants.
	Based on a patch from Harlan Stenn <harlan@pfcs.com>.

Mon Jun  3 08:49:14 1996  Karl Heuer  <kwzh@gnu.ai.mit.edu>

	* config.guess (*:Linux:*:*): Add guess for sparc-unknown-linux.

Mon May 27 20:16:42 1996  Karl Heuer  <kwzh@gnu.ai.mit.edu>

	* getloadavg.c [SOLARIS2]: Define SUNOS_5.

Fri May 24 18:34:53 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* config.guess (AViiON:dgux:*:*): Fix typo in recognizing mc88110.

Wed May 22 17:20:59 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* getloadavg.c [WIN32]: No-op as for [MSDOS].

	* getopt.c [WIN32] (getpid): Define using GetCurrentProcessId.

	* getopt.c [VMS]: Include unixlib.h, string.h.

Tue May 21 18:55:59 1996  Roland McGrath  <roland@delasyd.gnu.ai.mit.edu>

	* config.sub: Restore `hp9k2[0-9][0-9] | hp9k31[0-9])' case line
	apparently accidentally removed in the last change.

Mon May 20 11:58:15 1996  Jeffrey A. Law  <law@cygnus.com>

	* config.sub: Recognize -proelf as a basic system type.

Fri May  3 02:35:56 1996  Noah Friedman  <friedman@prep.ai.mit.edu>

	* mkinstalldirs: Don't report an error if mkdir fails because
	a directory was created by another process.

Sun Apr 21 09:50:09 1996  Stephen L Moshier  (moshier@world.std.com)

	* choose-temp.c: Include sys/types.h before sys/file.h for sco3.2v5.

Tue Apr  9 14:37:31 1996  Ulrich Drepper  <drepper@cygnus.com>

	* obstack.h [__STDC__] (obstack_init, obstack_begin,
	obstack_specify_allocation, obstack_specify_allocation_with_arg,
	obstack_chunkfun, obstack_freefun): Duplicate definition with complete
	type cast.

Wed Apr 17 14:28:43 1996  Doug Evans  <dje@cygnus.com>

	* choose-temp.c: Don't include sys/file.h ifdef NO_SYS_FILE_H.
	#include <stdio.h>.
	(choose_temp_base): Make tmp,usrtmp, static locals.

Mon Apr 15 14:08:12 1996  Doug Evans  <dje@canuck.cygnus.com>

	* choose-temp.c: New file.

Fri Apr 12 20:03:59 1996  Per Bothner  <bothner@spiff.gnu.ai.mit.edu>

	* config.guess:  Combine two OSF1 rules.
	Also recognize field test versions.  From mjr@zk3.dec.com.

	* config.guess (dgux):  Use /usr/bin/uname rather than uname,
	because GNU uname does not support -p.  From pmr@pajato.com.

Mon Apr  8 16:16:20 1996  Michael Meissner  <meissner@tiktok.cygnus.com>

	* config.guess (prep*:SunOS:5.*:*): Turn into
	powerpele-unknown-solaris2.

Thu Mar 28 02:06:03 1996  Roland McGrath  <roland@charlie-brown.gnu.ai.mit.edu>

	* error.c (_): New macro, define iff undefined.
	(private_strerror): Use it for message string.
	(error_at_line): New function.
	(error_one_per_line): New variable.
	* error.h (error_at_line, error_one_per_line): Declare them.

Thu Mar 21 14:42:26 1996  Doug Evans  <dje@cygnus.com>

	* config.sub (os): sunos[3456] -> sunos[34],
	sunos[56] have their own entries.

Wed Mar 20 09:59:30 1996  Roland McGrath  <roland@charlie-brown.gnu.ai.mit.edu>

	* signame.c [HAVE_STRING_H]: Include string.h.

Tue Mar 19 20:07:39 1996  Roland McGrath  <roland@charlie-brown.gnu.ai.mit.edu>

	* alloca.c (NULL): Define only if not already defined.

	* alloca.c [HAVE_STRING_H]: Include string.h.
	[HAVE_STDLIB_H]: Include stdlib.h.

Thu Mar 14 19:12:52 1996  Ian Lance Taylor  <ian@cygnus.com>

	* config.guess: Recognize mips-*-sysv*, with a specific case for
	NEC (which has its own compiler and libraries).

Sat Mar  9 23:52:33 1996  Jim Meyering  (meyering@na-net.ornl.gov)

	* getdate.y (RelativeMonth): Add 1900 to the year so that relative
	date specs that push the year through the end of the century work.
	For example, `date -d "01/01/1998 3 years" +%Y' now prints 2001.
	From Peter Dalgaard (pd@kubism.ku.dk).

Tue Mar  5 18:43:43 1996  Richard Henderson  <rth@tamu.edu>

	* config.sub: Add -apple and -aux.

Tue Mar  5 03:02:53 1996  Erik Naggum  <erik@naggum.no>

	* config.sub (moss): Fix previous change.

Mon Mar  4 18:03:38 1996  Bryan Ford  (baford@cs.utah.edu)

	* config.sub: Accept -moss* as op sys.

Fri Mar  1 09:57:54 1996  Roland McGrath  <roland@charlie-brown.gnu.ai.mit.edu>

	* config.sub: Recognize cpu-vendor [ctj]90-cray, default
	c90-cray-unicos.  From tege.

Wed Feb 28 19:55:05 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* getopt.c (_getopt_internal): Always set OPTOPT to *something* if
	returning '?', so it can be distinguished from an option.

Thu Feb 22 15:51:09 1996  Karl Heuer  <kwzh@gnu.ai.mit.edu>

	* getdate.y (Convert): Accept dates beyond 1999.

Tue Feb 13 13:20:32 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* getopt.c (_getopt_internal): Give FIRST_NONOPT & LAST_NONOPT
	rational values if OPTIND has been moved back by the user.

Mon Feb 12 18:23:35 1996  Doug Evans  <dje@cygnus.com>

	* config.sub: Recognize sparclet cpu.
	
Sun Feb 11 18:40:11 1996  Richard Stallman  <rms@mole.gnu.ai.mit.edu>

	* config.sub: Fix typo in previous change.

Sat Feb 10 08:28:12 1996  Martin Anantharaman  <martin@goofy.imech.uni-duisburg.de>

	* config.sub (-psos*): New case.
	
Thu Feb  8 15:37:52 1996  Brendan Kehoe  <brendan@lisa.cygnus.com>

	* config.guess (UNAME_VERSION): Recognize X4.x as an OSF version.

Sun Feb  4 16:51:11 1996  Steve Chamberlain  <sac@slash.cygnus.com>

	* config.guess (*:CYGWIN*): New

Mon Feb 12 15:33:59 1996  Christian Bauernfeind <chrisbfd@theorie3.physik.uni-erlangen.de>

	* config.guess:  Support m68k-cbm-sysv4.

Sat Feb 10 12:06:42 1996  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* config.guess (*:Linux:*:*): Guess m68k-unknown-linux and
	m68k-unknown-linuxaout from linker help string.  Put quotes around
	$ld_help_string.

Wed Feb  7 15:31:09 1996  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* getopt.c [__GNU_LIBRARY__]: Include <unistd.h>.

	* getopt.c (nonoption_flags, nonoption_flags_len): New variables.
	(_getopt_initialize): If not POSIXLY_CORRECT, check for special
	environment variable from Bash 2.0 and set those vars from it.
	(_getopt_internal): Do not consider as options argv elts whose
	nonoption_flags elt from the shell is '1'.

Thu Feb  1 09:10:02 1996  Steve Chamberlain  <sac@slash.cygnus.com>

	* config.sub (-cygwin32): New.
	
Wed Jan 31 14:13:25 1996  Richard Henderson  <rth@tamu.edu>

	* config.sub: Add support for A/UX.
	* config.guess: Recognize A/UX.

Tue Jan 23 13:15:50 1996  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* obstack.h [__STDC__] (struct obstack, _obstack_begin,
	_obstack_begin_1): Use prototypes in function decls.
	* obstack.c (CALL_CHUNKFUN, CALL_FREEFUN): Cast function type for
	call w/o extra_arg.

	* error.c (error_print_progname) [__STDC__]: Declare with
	prototype.
	[_LIBC]: Include errno.h to declare program_invocation_name.

	* getopt.c [__STDC__] (exchange, _getopt_initialize): Declare
	prototypes for these.

Mon Jan 22 08:53:45 1996  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* xmalloc.c [__STDC__] (fixup_null_alloc): Declare prototype.

Sun Jan 21 01:08:09 1996  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* error.h: Declare error_print_progname.  Add comments.

Wed Jan 17 17:39:51 1996  Richard Stallman  <rms@mole.gnu.ai.mit.edu>

	* config.sub: Default OS to nextstep if machine vendor is Next.
	-ns2 is an alias for -nextstep.

Wed Jan 17 09:51:58 1996  Doug Evans  <dje@cygnus.com>

	* config.sub: Recognize go32* as an os.

Sun Jan  7 02:00:27 1996  Karl Heuer  <kwzh@gnu.ai.mit.edu>

	* alloca.c (alloca): If malloc fails, just abort.

Mon Jan 15 20:59:49 1996  J. Kean Johnston  <hug@netcom.com>

	* config.sub (sco5): New case.
	
Tue Dec 19 15:56:15 1995  Eli Zaretskii  <eliz@is.elta.co.il>

	* getloadavg.c (getloadavg) [MSDOS]: Return 0 load instead of
	failing the call.

Fri Dec 15 22:34:08 1995  Stan Coxs  <coxs@dg-rtp.dg.com>

	* config.guess (AViiON): Add ix86-dg-dgux
	* config.sub (i*86*) Change [345] to [3456]

Thu Dec  7 09:03:24 1995  Tom Horsley  <Tom.Horsley@mail.hcsc.com>

	* config.guess (powerpc-harris-powerunix): Add guess for port
	to new target.

Wed Dec  6 09:44:53 1995  Paul Eggert  <eggert@twinsun.com>

	* install-sh (transformbasename): Fix misspelling in initialization.

Wed Dec  6 06:58:23 1995  Richard Earnshaw (rearnsha@armltd.co.uk)

	* config.sub: Recognize aof in the OS field.

Tue Dec  5 18:36:41 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* error.c [_LIBC]: Adapt for use in GNU libc.

Mon Dec  4 13:21:51 1995  Jeffrey A. Law  <law@mole.gnu.ai.mit.edu>

	* config.guess: Recognize HP model 816 machines as having
	a PA1.1 processor.

Thu Nov 30 16:57:33 1995  Per Bothner  <bothner@wombat.gnu.ai.mit.edu>

	* config.guess:  Recognize Pentium under SCO.
	From Robert Lipe <robertl@arnet.com>.

Tue Nov 21 16:59:12 1995  Richard Stallman  <rms@mole.gnu.ai.mit.edu>

	* getdate.y: If config.h defines FORCE_ALLOCA_H, include alloca.h.

Mon Oct 16 11:34:00 1995  Jeffrey A. Law  <law@mole.gnu.ai.mit.edu>

	* config.guess: Recognize HP model 819 machines as having
	a PA 1.1 processor.

Sat Sep 30 14:03:17 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* getopt.c (_): New macro, define if not already defined.
	(gettext): Never define as a macro.
	(_getopt_internal): Use ``_("message")'' instead of
	`gettext ("message")''.

Mon Aug 14 19:27:56 1995  Per Bothner  <bothner@kalessin.cygnus.com>

	* config.guess (*Linux*):  Add missing "exit"s.
	Also, need specific check for alpha-unknown-linux (uses COFF).

Fri Jul 28 00:16:31 1995  Jeffrey A. Law  <law@rtl.cygnus.com>

	* config.guess: Recognize lynx-2.3.

Thu Jul 27 13:31:05 1995  Fred Fish  (fnf@cygnus.com)

	* config.guess (*:Linux:*:*): First try asking the linker what the
	default object file format is (elf, aout, or coff).  Then if this
	fails, try previous methods.

Mon Aug  7 16:48:13 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* getloadavg.c [ps2]: Use nlist instead of knlist #ifdef _AIX.

Fri Aug  4 10:27:54 1995  Jim Meyering  (meyering@comco.com)

	* getopt.c (_getopt_internal) [lint]: Initialize INDFOUND to
	avoid warning from gcc.

Tue Aug  1 14:29:43 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* getloadavg.c (getloadavg): Set FD_CLOEXEC flag on /dev/kmem file
	descriptor.

Wed Jul 26 00:26:34 1995  David J. MacKenzie  <djm@geech.gnu.ai.mit.edu>

	* mkinstalldirs: Remove weird unnecessary shell construction.

Wed Jun 28 17:57:27 1995  David Edelsohn  <edelsohn@mhpcc.edu>

	* config.guess (AIX4): More robust release numbering discovery.

Thu Jun 22 19:01:24 1995  Kenneth Stailey  (kstailey@eagle.dol-esa.gov)

	* config.guess (i386-sequent-ptx): Properly get version number.

Thu Jun 22 18:36:42 1995  Uwe Seimet  (seimet@iris1.chemie.uni-kl.de)

	* config.guess (mips:*:4*:UMIPS): New case.

Tue Jun 20 02:41:41 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* getloadavg.c [convex] (LOAD_AVE_TYPE, LDAV_CVT): Define to
	double, no conversion.

	* obstack.c (OBSTACK_INTERFACE_VERSION): New macro.  Rewrote
	conditionals to use that macro to ensure that the installed GNU
	libc supports the interface the obstack.h corresponding to this
	obstack.c needs, and only then elide the code in this file.

Sun May 28 18:53:29 1995  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* config.guess (21064:Windows_NT:50:3): New case.

Fri May 19 16:52:50 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* error.c (error_message_count): New variable.
	(error): Increment it.
	* error.h: Declare error_message_count.

Mon May 15 17:47:55 1995  Per Bothner  (bothner@spiff.gnu.ai.mit.edu)

	* config.guess:  Recognize Cray90 (from Pete TerMaat).

Thu May 11 17:13:14 1995  Per Bothner  (bothner@wombat.gnu.ai.mit.edu)

	* config.guess:  Recognize PCs running Solaris2.
	(Patch from Bruno Haible <haible@ma2s2.mathematik.uni-karlsruhe.de>.)
	* config.guess:  Merge two CRAY*Y-MP entries.
	Ignore system field for Cray xmp and cray2 since "uname -s" on
	a Cray gets you the hostname, which is useless.
	(According to Pete TerMaat <pete@guava.cray.com>.)

Wed May 10 11:03:56 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* getloadavg.c: AIX support from Tim Bell <tbel@afsmail.cern.ch>:
	[_AIX] (LOAD_AVE_TYPE, FSCALE, NLIST_STRUCT): Define these for AIX.
	(getloadavg) [_AIX]: Use `knlist' instead of `nlist'.

Fri May  5 05:50:56 1995  Allen Briggs  (briggs@puma.bevd.blacksburg.va.us)

	* config.guess: Add more NetBSD cases: atari, sun3*, and mac68k.

Wed May  3 16:22:31 1995  Richard Stallman  <rms@mole.gnu.ai.mit.edu>

	* crt0.c: Add APOLLO alternative.

Sat Apr 29 15:48:03 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* signame.c: Move include of config.h before all others.

Thu Apr 27 11:33:29 1995  Michael Meissner  (meissner@cygnus.com)

	* config.guess (*:Linux:*:*): Check for whether the pre-BFD linker is
	installed, and if so return linuxoldld as the system name.

Thu Apr 27 13:11:11 1995  Jim Meyering  (meyering@comco.com)

	* error.h: Use __-protected versions of `format' and `printf'
	attributes only with gcc-2.7 and later.

Thu Apr 27 09:22:33 1995  Peder Chr. Norgaard <pcn@tbit.dk>

	* config.guess (i[34]86:*:3.2:*) test for /usr/options/cb.name
	before calling uname.

Wed Apr 26 17:19:34 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* signame.c [HAVE_UNISTD_H]: Include unistd.h so it can declare
	sys_siglist.

Wed Apr 26 14:00:00 1995  Michael Meissner  (meissner@cygnus.com)

	* config.guess (*:Linux:*:*): Determine whether the default compiler is
	a.out or ELF based.
	(parisc*:Lites*:*:*): New entry from Jeff Law.

Wed Apr 26 11:48:21 1995  Jim Meyering  (meyering@comco.com)

	* error.h: New file.

Wed Apr 26 10:27:50 1995  Travis L Priest  (T.L.Priest@larc.nasa.gov)

	* config.guess (CRAY*Y-MP:*:*:*): New entry.

Wed Apr 26 12:54:26 1995  Jeffrey A. Law  <law@snake.cs.utah.edu>

	* config.guess: Add hppa1.1-hp-lites support.

Thu Apr  6 19:55:54 1995  Richard Stallman  <rms@mole.gnu.ai.mit.edu>

	* crt0.c [__bsdi__]: Maybe declare __progname.

Fri Mar 24 00:52:31 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* getopt.c (_getopt_internal): When optind is zero, bump it to 1
	after initializing; we don't want to scan ARGV[0], which is the
	program name.

Tue Mar 21 16:44:37 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* signame.c (signame_init): Define SIGINFO.

Tue Mar  7 01:41:09 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* signame.c (strsignal): Cast sys_siglist elt to char *.

Thu Feb 23 18:42:16 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* signame.h [! __STDC__]: Don't use prototype for strsignal decl.

Wed Feb 22 19:08:43 1995  Niklas Hallqvist  (niklas@appli.se)

	* config.guess: Recognize NetBSD/Amiga as m68k-cbm-netbsd.

Tue Feb 21 22:13:19 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* signame.h (strsignal): Declare it.
	* signame.c [! HAVE_STRSIGNAL] (strsignal): New function.

Wed Feb  8 10:03:36 1995  David J. MacKenzie  <djm@geech.gnu.ai.mit.edu>

	* install-sh config.guess mkinstalldirs: Add a blank in the #!
	line for 4.2BSD, Dynix, etc.

Sat Feb  4 12:59:59 1995  Jim Wilson  <wilson@cygnus.com>

	* config.guess (IRIX): Sed - to _.

Sat Jan 28 20:09:49 1995  Daniel Hagerty  <hag@duality.gnu.ai.mit.edu>

	* error.c: Under older versions of SCO, strerror is a preprocessor
	macro. Added a check for this.

Fri Jan 27 09:55:28 1995  Jim Meyering  (meyering@comco.com)

	* getdate.y: Remove obsolete comments.  Rewrite others.

Mon Jan 23 19:41:57 1995  Karl Heuer  <kwzh@hal.gnu.ai.mit.edu>

	* config.guess (i[34]86:*:3.2:*): Test for ISC before SCO; newer
	ISC releases have uname -X.

Tue Jan 10 09:26:41 1995  Jim Meyering  (meyering@comco.com)

	* getdate.y (ToSeconds): Interpret 12am as 00:00 and 12pm as 12:00.
	Before, `date -d 'Jan 1 12am'' printed `...12:00:00...'.
	From Takeshi Sone <ts1@tsn.or.jp>.

Sat Jan  7 11:57:40 1995  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* getloadavg.c: Include config.h first.

Wed Jan  4 15:52:17 1995  Per Bothner  (bothner@spiff.gnu.ai.mit.edu)

	* config.guess:  Recognize BSD/OS as bsdi.
	Patch from Chris Torek <torek@BSDI.COM>.

Wed Dec 21 15:51:08 1994  Warner Losh  (imp@boulder.openware.com)

	* config.guess (sun4:SunOS:*:*): Handle Solbourne OS/MP systems.

Tue Dec  6 02:29:42 1994  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* config.guess (dummy.c) [sony]: Include <sys/param.h> and emit
	newsos4 #ifdef NEWSOS4.

Tue Nov 29 17:01:29 1994  Mark Dapoz  (md@bsc.no)

	* config.guess (ibmrt): Add more cases for various forms of BSD.

Tue Nov 29 16:19:54 1994  Paul Eggert  <eggert@twinsun.com>

	* getopt.c (_getopt_internal): Add gettext wrappers around
	message strings.

	* xmalloc.c (fixup_null_alloc): Add gettext wrapper.
	Capitalize initial letter of error message, for consistency
	with regex.c.

Fri Nov 25 19:22:24 1994  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* crt0.c (start1): Add self reference.

Wed Nov 23 16:51:11 1994  R. Bernstein  (rocky@panix.com)

	* config.guess: Add cases for romp-ibm-aix and romp-ibm-bsd.

Mon Nov 14 19:03:29 1994  Per Bothner  (bothner@spiff.gnu.ai.mit.edu)

	* config.guess:  Support paragon as i860-intel-osf1.  (From RMS.)

Fri Nov 11 14:04:58 1994  Andreas Luik  (luik@isa.de)

	* obstack.h: Add one missing test on value of __STDC__.

Sat Nov 05 08:08:52 1994  Jim Meyering  (meyering@comco.com)

	* obstack.h: NextStep 2.0 cc is really gcc 1.93 but it defines
	__GNUC__ = 2 and does not implement __extension__.  So add
	`|| (__NeXT__ && !__GNUC_MINOR__)' to the test for whether to
	define-away __extension__.  Reported by Kaveh Ghazi.

Thu Nov 03 14:36:58 1994  Jim Meyering  (meyering@comco.com)

	* filemode.c (rwx): Use S_IRUSR, S_IWUSR, S_IXUSR instead of
	obsolete S_IREAD, S_IWRITE, S_IEXEC.
	Make sure the former three are defined.

Tue Nov  1 14:24:39 1994  Per Bothner  (bothner@spiff.gnu.ai.mit.edu)

	* config.guess (*-unknown-freebsd):  Remove [-(] from
	UNAME_RELEASE.  Patch from Warner Losh <imp@village.org>.

Mon Oct 31 07:02:15 1994  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* getopt.h: Change #if __STDC__ to #if defined (__STDC__) &&
	__STDC__.
	* getopt.c: Change #ifndef __STDC__ to #if !defined (__STDC__) ||
	!__STDC__.
	* getopt1.c: Likewise.
	* obstack.c: Change #ifdef __STDC__ to #if defined (__STDC__) &&
	__STDC__.
	* obstack.h: Likewise.

Wed Oct 26 20:34:59 1994  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* getloadavg.c [alliant && i860] (FSCALE): Move defn before
	#ifndef FSCALE.

Tue Oct 25 19:10:41 1994  Paul Eggert  <eggert@twinsun.com>

	* xmalloc.c (fixup_null_alloc): New function.
	(xmalloc, xrealloc): Use it to fix up returned NULL values,
	instead of preemptively adjusting a zero N to 1.

Tue Oct 25 11:22:30 1994  David J. MacKenzie  <djm@duality.gnu.ai.mit.edu>

	* xmalloc.c (xmalloc, xrealloc): If 0 bytes requested, pretend
	it's 1, for diff.

Thu Oct 20 18:47:53 1994  Per Bothner  (bothner@wombat.gnu.ai.mit.edu)

	* config.guess:  Better support for NCR - covers more machines,
	and prints sysv4.3 if uname says the OS is 4.3.
	Patch from Tom McConnell <tmcconne@sedona.intel.com>.

Wed Oct 19 15:55:38 1994  David J. MacKenzie  <djm@duality.gnu.ai.mit.edu>

	* config.guess: Add licensing exception for Autoconf.

Tue Oct 18 19:26:31 1994  David Edelsohn  (edelsohn@npac.syr.edu)

	* config.guess: Revise support for AIX 4.1 on POWER and PowerPC.

Mon Oct 17 19:16:38 1994  David Edelsohn  <edelsohn@npac.syr.edu>

	* config.guess: Add support for AIX 4.1 and architecture.

Wed Oct 12 16:51:35 1994  David J. MacKenzie  (djm@duality.gnu.ai.mit.edu)

	* error.c: Add hook for alternate name printing function.
	From Franc,ois Pinard.
	Use varargs for _doprnt too.

	* xmalloc.c: Add hook for alternate exit status.
	From Franc,ois Pinard.

Mon Oct 10 17:35:19 1994  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* getpagesize.h: If NBPC is not defined, try PAGESIZE.

Fri Oct 07 18:53:28 1994  Jim Meyering  (meyering@comco.com)

	* filemode.c: Remove #if 0'd block around mode_t definition.
	From Andreas Luik (luik@marx.isa.de).

Thu Oct 06 21:15:16 1994  Jim Meyering  (meyering@comco.com)

	* pathmax.h: Fix typo: HAVE_SYS_PATH_MAX_H -> HAVE_SYS_PARAM_H.
	From Andreas Schwab (schwab@issan.informatik.uni-dortmund.de).

Thu Oct  6 18:02:32 1994  Per Bothner  (bothner@wombat.gnu.ai.mit.edu)

	* config.guess:  Patch from Chris Smith <csmith@mozart.convex.com>
	to handle old Convex systems without uname.

Tue Oct  4 03:02:39 1994  Richard Stallman  <rms@mole.gnu.ai.mit.edu>

	* getdate.y (main): Use MAX_BUFF_LEN consistently.
	Clear the last element of buf.

Mon Oct  3 01:48:48 1994  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* config.guess: Recognize GNU.

Thu Sep 29 18:47:34 1994  Jerry Frain  (jerry@sneffels.tivoli.com)

	* config.guess (i[34]86:UNIX_SV:4.*:*): Remove "UNIX_SV" for
	Unixware; move DYNIX above this one now that this is wildcard.

Wed Sep 28 17:00:12 1994  Roland McGrath  <roland@churchy.gnu.ai.mit.edu>

	* getloadavg.c [alliant && i860] (LOAD_AVE_TYPE, FSCALE,
	NLIST_STRUCT): Define.

Mon Sep 26 17:53:05 1994  David J. MacKenzie  (djm@churchy.gnu.ai.mit.edu)

	* alloca.c error.c filemode.c getopt.c getopt1.c getdate.y
	getloadavg.c getugroups.c getusershell.c signame.c:
	Remove CONFIG_BROKETS ifdef.  No one should use "config.h".

Sat Sep 24 21:20:12 1994  Jim Meyering  (meyering@comco.com)

	* getdate.y [struct _TABLE]: Add `const' to NAME member dcl.

Fri Sep 23 02:39:55 1994  Richard Stallman  <rms@mole.gnu.ai.mit.edu>

	* crt0.c [__FreeBSD__] (__progname): Declared.

Tue Sep 20 23:27:02 1994  Richard Stallman  <rms@mole.gnu.ai.mit.edu>

	* getdate.y: Whitespace reformatted.
	(MAX_BUFF_LEN): New macro.
	(main): Use fgets, not gets.  Use MAX_BUFF_LEN to declare buff.

Mon Sep 19 18:25:40 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* config.guess (HP-UX):  Patch from Harlan Stenn
	<harlan@landmark.com> to also emit release level.

Wed Sep  7 13:15:25 1994  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* config.guess (sun4*:SunOS:*:*): Change '-JL' to '_JL'.

Fri Sep 16 20:16:36 1994  Richard Stallman  <rms@mole.gnu.ai.mit.edu>

	* getloadavg.c (getloadavg): Add OSF_ALPHA support.

Fri Sep 16 18:34:22 1994  Paul Eggert  <eggert@twinsun.com>

	* getdate.y (difftm): Don't store a long value into an int variable.

Thu Sep 08 00:26:29 1994  Jim Meyering  (meyering@comco.com)

	* getdate.y: Accept `MESZ' timezone.

Sun Aug 28 18:13:45 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* config.guess (*-unknown-freebsd*):  Get rid of possible
	trailing "(Release)" in version string.
	Patch from Paul Richards <paul@isl.cf.ac.uk>.

Sat Aug 27 15:00:49 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* config.guess:  Fix i486-ncr-sysv43 -> i486-ncr-sysv4.3.
	Fix type: *-next-neststep -> *-next-nextstep.

Sat Jun  4 17:23:54 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* configure.in:  Use mh-ncrsvr43.  Patch from
	Tom McConnell <tmcconne@sedona.intel.com>.

Sat Aug 27 17:21:04 1994  Jim Meyering  (meyering@comco.com)

	* filemode.c [STAT_MACRO_BROKEN]: Remove spurious #ifdef's.

Fri Aug 26 19:17:22 1994  Per Bothner  (bothner@spiff.gnu.ai.mit.edu)

	* config.guess (netbsd, freebsd, linux):  Accept any machine,
	not just i[34]86.

Fri Aug 26 18:45:25 1994  Philippe De Muyter (phdm@info.ucl.ac.be)

	* config.guess: Recognize powerpc-ibm-aix3.2.5.

Fri Aug 26 15:12:50 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* config.guess:  Merges from Cygnus version.
	(alpha-dec-osf*):  More general.
	(*-hp-hpux*):  Combine cases.
	(*-next-ns[23]):  Rename to *-next-neststep[23].
	Make code fragment shorter.
	(config.guess, i386-unknown-bsd):  Don't recognize __bsdi__ here;
	it is handled using uname.

	Sat Jul 16 12:03:08 1994  Stan Shebs  (shebs@andros.cygnus.com)

	* config.guess: Recognize m88k-harris-csux7.

	Tue Jun 28 13:43:25 1994  Jim Kingdon  (kingdon@lioth.cygnus.com)

	* config.guess: Recognize Mach.

	Wed Apr  6 20:44:56 1994  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)

	* config.guess:  Add SINIX support.

	Sun Mar  6 23:13:38 1994  Hisashi MINAMINO  (minamino@sra.co.jp)

	* config.guess: about target *-hitachi-hiuxwe2, fixed
	machine guessing order.  [Hitachi's CPU_IS_HP_MC68K
	macro is incorrect.]

	Thu Feb 24 07:09:04 1994  Jeffrey A. Law  (law@snake.cs.utah.edu)

	* config.guess: Handle OSF1 running on HPPA processors

	Fri Feb 11 15:33:33 1994  Stu Grossman  (grossman at cygnus.com)

	* config.guess:  Add Lynx/rs6000 config support.

Thu Aug 25 20:28:51 1994  Richard Stallman  <rms@mole.gnu.ai.mit.edu>

	* config.guess (Pyramid*:OSx*:*:*): New case.
	(PATH): Add /.attbin at end for finding uname.
	(dummy.c): Handle i860-alliant-bsd.  Follow whitespace conventions.

Wed Aug 17 18:21:02 1994  Tor Egge  (tegge@pvv.unit.no)

	* config.guess (M88*:DolphinOS:*:*): New case.

Thu Aug 11 17:00:13 1994  Stan Cox  (coxs@dg-rtp.dg.com)

	* config.guess (AViiON:dgux:*:*): Use TARGET_BINARY_INTERFACE
	to select whether to use ELF or COFF.

Thu Jul 28 19:16:24 1994  Uwe Seimet  (seimet@chemie.uni-kl.de)

	* config.guess: Recognize m68k-atari-sysv4.

Sun Jul 24 16:20:53 1994  Richard Stallman  <rms@mole.gnu.ai.mit.edu>

	* config.guess: Recognize i860-stardent-sysv and i860-unknown-sysv.

Sat Jul 23 02:15:01 1994  Karl Heuer  (karl@hal.gnu.ai.mit.edu)

	* config.guess (isc): Distinguish isc from generic sysv32.

Mon Jul 11 23:55:13 1994  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* getopt.c (posixly_correct): New variable.
	(_getopt_initialize): Set posixly_correct from envvar.
	(_getopt_internal): Don't use "illegal" in error message
	unless posixly_correct.

Sun Jul 03 08:46:58 1994  Jim Meyering  (meyering@comco.com)

	* pathmax.h: Add HAVE_SYS_PARAM_H to and remove !MS_DOS from
	preprocessor conditional guarding inclusion of sys/param.h.

Mon Jun 20 23:45:34 1994  Jim Meyering  (meyering@comco.com)

	* modechange.c (mode_compile) [lint]: Initialize CHANGE to suppress
	used uninitialized compiler warning.

Wed Jun 15 19:07:49 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* config.guess (alpha): Supoort OSF/1 V2.0 and later.

Tue Jun 14 17:50:05 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* obstack.h (obstack_grow{,0}): Cast WHERE to char * before
	passing to bcopy.

Mon Jun  6 04:59:28 1994  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config.guess: Add support for bsdi.

Sat Jun  4 01:24:59 1994  Roland McGrath  (roland@geech.gnu.ai.mit.edu)

	* getloadavg.c: Put #include of errno.h and decl of errno before
	#ifndef HAVE_GETLOADAVG.

Thu Jun  2 13:42:39 1994  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* alloca.c [emacs]: Block input around the garbage reclamation.
	Include blockinput.h.

Tue May 10 16:53:55 1994  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* config.guess: Add trap cmd to remove dummy.c and dummy when
	interrupted.

Sun May  1 10:23:10 1994  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config.guess: Guess the OS version for HPUX.

Wed Apr 27 15:14:26 1994  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)

	* install.sh: If $dstdir exists, don't check whether each
	component does.

Mon Apr 25 14:39:06 1994  Poul-Henning Kamp (phk@login.dkuug.dk)

	* config.guess: Recognize FreeBSD.

Sun Apr 24 17:56:58 1994  Jim Meyering  (meyering@comco.com)

	* getdate.y (difftm, get_date): Revert my April 18 changes.
	Paul Eggert pointed out that that hack probably wouldn't work
	for places like Chile that had DST in effect on 31 Dec 1970.
	* (get_date): Instead, add 60 minutes to timezone if DST is in
	effect locally.  From andy@eng.kvaerner.no (Andrew Walker).
	Remove static declaration of `RCS.'

Fri Apr 22 22:15:28 1994  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)

	* install.sh: Add -d, -t, -b options.  Make leading directories.
	Don't partially install files.
	From zoo@cygnus.com.

Wed Apr 20 18:07:13 1994  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* config.guess (dummy.c): Redirect stderr for `hostinfo' command.
	(dummy): Redirect stderr from compilation of dummy.c.

Wed Apr 20 06:36:32 1994  Philippe De Muyter  (phdm@info.ucl.ac.be)

	* config.guess: Recognize UnixWare 1.1 (UNAME_SYSTEM is SYSTEM_V
	instead of UNIX_SV for UnixWare 1.0).

Mon Apr 18 22:01:27 1994  Jim Meyering  (meyering@comco.com)

	* getdate.y (difftm): Remove function.
	(get_date): Get timezone *without DST bias* from localtime(&zero).
	Modeled after the hack in localtime.pl from the perl distribution.
	This fixes an error that had `date -d '4apr94'' producing
	`Sun Apr  3 23:00:00 CDT 1994'.

Fri Apr 15 22:46:59 1994  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* getdate.y: Delete special alloca code.

Tue Apr 12 15:05:08 1994  Noah Friedman  (friedman@prep.ai.mit.edu)

	* config.guess: Merge rms' new entry for i486-ncr-sysv4 with the
	previously existing one.

Mon Apr 11 00:54:33 1994  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* getopt.c [not __GNU_LIBRARY__] [__GCC__] [not __STDC__]:
	Declare strlen to return int.  Don't include stddef.h.

	* config.guess: Add 3[34]??,3[34]??:*:4.0:* for i486-ncr-sysv4.

Sat Apr  9 14:59:28 1994  Christian Kranz  (kranz@sent5.uni-duisburg.de)

	* config.guess: Distinguish between NeXTStep 2.1 and 3.x.

Fri Apr  1 00:38:17 1994  Jim Wilson  (wilson@mole.gnu.ai.mit.edu)

	* obstack.h, getopt.c: Delete use of IN_GCC to control whether
	stddef.h or gstddef.h is included.

Fri Mar 25 23:01:17 1994  David J. MacKenzie  (djm@geech.gnu.ai.mit.edu)

	* mkinstalldirs: Preserve leading slash in file names.
	From Jim Meyering.

Sun Mar 20 01:29:20 1994  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* alloca.s [emacs]: Use <...> to include config.h.

Tue Mar  1 21:53:03 1994  Karl Heuer  (kwzh@hal.gnu.ai.mit.edu)

	* config.guess (UNAME_VERSION): Recognize aix3.2.4 and aix3.2.5.

Thu Feb 24 14:54:23 1994  David J. MacKenzie  (djm@goldman.gnu.ai.mit.edu)

	* getopt.c: Remove #ifdef GETOPT_COMPAT and #if 0 code.
	(_getopt_initialize): New function, broken out of _getopt_internal.
	(_getopt_internal):
	If long_only and the ARGV-element has the form "-f", where f is
	a valid short option, don't consider it an abbreviated form of
	a long option that starts with f.  Otherwise there would be no
	way to give the -f short option.

Thu Feb 10 14:44:16 1994  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* getopt.c [not __GNU_LIBRARY__] [__GNUC__] [not IN_GCC]:
	Test just __STDC__, not emacs.

Wed Feb  9 17:46:31 1994  Karl Heuer  (kwzh@mole.gnu.ai.mit.edu)

	* getdate.y (difftm): Simplify return expression.

Wed Feb  9 00:14:00 1994  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* getopt.c [not __GNU_LIBRARY__] [__GNUC__] [not IN_GCC]
	[emacs] [not __STDC__]: Don't include stddef.h.  Don't declare strlen.

Tue Feb  8 14:14:31 1994  David J. MacKenzie  (djm at douglas.gnu.ai.mit.edu)

	Handle obstack_chunk_alloc returning NULL.  This allows
	obstacks to be used by libraries, without forcing them
	to call exit or longjmp.
	* obstack.c (_obstack_begin, _obstack_begin_1, _obstack_newchunk):
	If CALL_CHUNKFUN returns NULL, set alloc_failed, else clear it.
	(_obstack_begin, _obstack_begin_1): Return 1 if successful, 0 if not.
	* obstack.h (struct obstack): Add alloc_failed flag.
	_obstack_begin, _obstack_begin_1): Declare to return int, not void.
	(obstack_finish): If alloc_failed, return NULL.
	(obstack_base, obstack_next_free, objstack_object_size):
	If alloc_failed, return 0.
	(obstack_grow, obstack_grow0, obstack_1grow, obstack_ptr_grow,
	obstack_int_grow, obstack_blank): If alloc_failed, do nothing that
	could corrupt the obstack.
	(obstack_chunkfun, obstack_freefun): New macros, used in GDB.

Sun Jan 30 17:58:06 1994  Ken Raeburn  (raeburn@cujo.cygnus.com)

	* config.guess: Recognize vax hosts.

Mon Jan 24 18:40:06 1994  Per Bothner  (bothner@kalessin.cygnus.com)

	* config.guess:  Clean up NeXT support, to allow nextstep
	on Intel machines.  Make OS be nextstep.

Sun Jan 23 18:47:22 1994  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* config.guess: Add alternate forms for Convex.

Thu Jan  6 14:00:23 1994  david d `zoo' zuhn  (zoo@cygnus.com)

	* config.guess: add support for Tektronix 68k and 88k boxes;
	better Apollo, Sony NEWS information

Sun Dec 26 03:58:32 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* filemode.c (ftypelet): Don't use mode_t.  Take long arg.
	(mode_t): Don't ever define it.
	(mode_string): Cast ftypelet's arg to long.

Fri Dec 24 19:43:00 1993  Noah Friedman  (friedman@nutrimat.gnu.ai.mit.edu)

	* getopt.c (_NO_PROTO): Define before config.h is included.

Wed Dec 22 17:01:19 1993  Jim Meyering  (meyering@comco.com)

	* getdate.y (date): Parse dates like 17-JUN-1991.

Tue Dec 07 14:52:39 1993  Jim Meyering  (meyering@comco.com)

	Mon Dec  6 11:13:07 1993  Jason Merrill  (jason@deneb.cygnus.com)

	* getdate.y (number): Change parsing of number > 10000 to
	YYMMDD rather than YYHHmm.

Sat Nov 20 17:47:50 1993  Noah Friedman  (friedman@gnu.ai.mit.edu)

	* error.c (error): fflush stdout before writing to stderr.

Tue Nov 09 10:05:48 1993  Jim Meyering  (meyering@comco.com)

	* getdate.y (ToSeconds): Add a `default: abort ();' case.

Thu Nov  4 12:59:19 1993  david d `zoo' zuhn  (zoo@rtl.cygnus.com)

	* config.guess: add support for {i386,m68k,sparc} LynxOS; Hitachi
	HPPA machines; Acorn Risc Machines; DG/UX; Motorola SVr3 on m88k

Wed Nov  3 08:06:08 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getloadavg.c (getloadavg) [__NetBSD__]: Fix typo.

Tue Nov 02 16:03:41 1993  Jim Meyering  (meyering@comco.com)

	* getdate.y [!defined(USG) && defined(HAVE_FTIME)]: Don't test
	these when deciding whether to include sys/timeb.h.  Test only
	HAVE_SYS_TIMEB_H.

Sat Oct 16 23:31:34 1993  Jim Meyering  (meyering@comco.com)

	* getusershell.c (getusershell): Always return a string allocated
	by malloc.

Tue Oct 12 00:53:26 1993  Jim Meyering  (meyering@comco.com)

	* getugroups.c [HAVE_CONFIG_H, CONFIG_BROKETS]: Include <config.h>
	or "config.h".
	* getusershell.c: Ditto.

Thu Oct 07 19:08:00 1993  Jim Meyering  (meyering@comco.com)

	* getdate.y [!__GNUC__ && !HAVE_ALLOCA_H]: Declare alloca as void*
	rather than char*.  The latter conflicts with a dcl from bison.simple.

Tue Oct 05 14:52:02 1993  Jim Meyering  (meyering@comco.com)

	* error.c [CONFIG_BROKETS]: Include <config.h> only under
	this condition, else "config.h".
	* modechange.c: Likewise.

	* filemode.c, modechange.c [STAT_MACROS_BROKEN]: Test this.

Sun Oct  3 15:33:07 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getloadavg.c (getloadavg) [__NetBSD__]: New netbsd support using
	/kern/loadavg.

Mon Sep 20 15:59:03 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* alloca.c [emacs || CONFIG_BROKETS]: Include <config.h> only under
	these, else "config.h".
	* filemode.c: Likewise.
	* signame.c, getloadavg.c, getopt.c, getopt1.c: Likewise.

Wed Sep 15 00:03:40 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* config.guess: New version from Cygnus; has netbsd support.

Mon Sep 13 19:25:24 1993  david d 'zoo' zuhn  (zoo@geech.gnu.ai.mit.edu)

	* config.guess: add support for OSF/1 v1.3 and 4.4 and 4.3BSD
	on hp300 machines

Fri Sep 10 00:22:04 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* config.guess: Recognize netbsd on i[34]86 and hp300.

	* alloca.c: Include <config.h> instead of "config.h".
	* crt0.c: Likewise.
	* filemode.c: Likewise.
	* getdate.y: Likewise.

Fri Aug 27 10:27:13 1993  Paul Eggert  (eggert@twinsun.com)

	* xmalloc.c: Include "config.h" if HAVE_CONFIG_H.  Use size_t,
	not int, when needed.
	(VOID): New macro.  Use it when needed.
	(error): Declaration uses varargs if required.

Fri Aug 27 09:59:26 1993  Paul Eggert  (eggert@wombat.gnu.ai.mit.edu)

	* error.c: Include "config.h" if HAVE_CONFIG_H.

Wed Aug 25 17:46:01 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* signame.c [! HAVE_SYS_SIGLIST] [! SYS_SIGLIST_DECLARED]: Declare
	sys_siglist.

Mon Aug 16 15:10:30 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* alloca.c: Reverse sense of GCC 2 #ifdef.

Sat Aug 14 23:26:30 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* config.guess: Detect mips-mips-ricos...
	Handle 9000/4??:HP-UX like 9000/3??:HP-UX.
	Fix 9000/7??:4.3bsd...

Thu Aug 12 16:18:12 1993  Paul Eggert  (eggert@twinsun.com)

	* getdate.y (get_date): To determine the time zone, compare localtime
	to gmtime output, instead of trying to use buggy and unportable
	OS timezone primitives.
	(difftm): New function.
	(HAVE_GETTIMEOFDAY): Remove.
	(timezone): Undef it if defined (not if sgi).

Thu Aug 12 18:16:49 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getloadavg.c, getopt.c, getopt1.c [HAVE_CONFIG_H]: Include
	<config.h> instead of "config.h".

Wed Aug 11 03:27:12 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* alloca.c: Do nothing if compiling with GCC version 2.

Tue Aug 10 17:27:27 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* alloca.c: Always declare malloc, whether or not it is defined
	as xmalloc.

Sat Aug  7 16:55:06 1993  David J. MacKenzie  (djm@goldman.gnu.ai.mit.edu)

	* getopt1.c: Declare const the way getopt.c does.

Mon Aug  2 16:48:14 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getloadavg.c [OSF_ALPHA]: #undef and redefine FSCALE.

Sun Aug  1 16:39:00 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getloadavg.c [TEST] (main): If NAPTIME is zero, don't set it to 5.
	Break out of loop at end if NAPTIME is zero.
	[! HAVE_GETLOADAVG]: Protect all but [TEST] portion with this.

Fri Jul 30 18:28:40 1993  David J. MacKenzie  (djm@wookumz.gnu.ai.mit.edu)

	* getpagesize.h: Don't define HAVE_GETPAGESIZE; assume
	configure has detected it.

Thu Jul 29 23:20:52 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getloadavg.c [__linux__]: Test this instead of [LINUX].

Mon Jul 26 13:36:55 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getloadavg.c (OSF_ALPHA): Test [__alpha] as well as [__alpha__].

	* signame.h (psignal) [!HAVE_PSIGNAL]: Don't test [! HAVE_SYS_SIGLIST].
	* signame.c (psignal) [!HAVE_PSIGNAL]: Test this instead of
	[! HAVE_SYS_SIGLIST].

	* getloadavg.c [sgi || sequent]: #undef FSCALE before defining it.

Wed Jul 21 17:08:07 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* obstack.c [__STDC__]: Declare prototype for _obstack_allocated_p.

Wed Jul 14 00:55:24 1993  Jim Blandy  (jimb@wookumz.gnu.ai.mit.edu)

	* config.guess: Add case for Bull dpx/2.

Tue Jul 13 12:38:13 1993  Jim Meyering  (meyering@comco.com)

	* alloca.c: Enable the Cray stack-segment unwinding code only
	if configure defines CRAY_STACKSEG_END.  The C-90 doesn't need
	(and can't use) any of the Cray-specific code.

Mon Jul 12 18:13:16 1993  David J. MacKenzie  (djm@goldman.gnu.ai.mit.edu)

	* getloadavg.c (getloadavg) [NEXT]: It's ok if the user asks
	for >1 numbers -- just return 1.

Wed Jul  7 14:03:45 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* getopt.c: Separate __STDC__ conditional from const conditional.

Tue Jul  6 19:03:25 1993  David J. MacKenzie  (djm@goldman.gnu.ai.mit.edu)

	* getloadavg.c (getloadavg) [SUNOS_5]: Set `offset' from
	kvm_nlist.  Don't do the nlist but do initialize the struct
	nlist for use by kvm_nlist.

Mon Jun 28 14:55:05 1993  David J. MacKenzie  (djm@wookumz.gnu.ai.mit.edu)

	* pathmax.h: Use !__GNUC__ instead of USG to check for whether
	to include limits.h on non-POSIX systems.

Sat Jun 26 15:26:13 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* getopt.c [not __GNU_LIBRARY__, but __GNUC__] (strlen):
	Include stddef.h or gstddef.h, and declare strlen.

Fri Jun 25 15:44:11 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getopt.c (exchange): Declare missing variables I.

Tue Jun 22 00:03:11 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* getopt.c (exchange): Use just one slot of temporary space.
	(alloca, __alloca): All definitions deleted.
	(my_bcopy): All definitions deleted.

Wed Jun 16 17:09:47 1993  Jim Blandy  (jimb@wookumz.gnu.ai.mit.edu)

	* crt0.c: [hp9000s300, ! OLD_HP_ASSEMBLER] Add flag_68040 to
	the list of flags already present.

Thu Jun 10 16:28:34 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* config.guess: New version from Cygnus.

Wed Jun  9 16:28:36 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getloadavg.c [! LOAD_AVE_TYPE]: Protect LOAD_AVE_TYPE definitions
	with this.  Use "#if defined (ardent) && defined (titan)", instead
	of the bogus "#ifdef ardent && titan".  Fix typo tex4300 -> tek4300.

Wed Jun  9 05:19:56 1993  Jim Blandy  (jimb@wookumz.gnu.ai.mit.edu)

	* getopt.c: Remove "|| defined(__sgi)" from the conditions for
	#including "alloca.h"; autoconf ought to be able to figure
	this out accurately, and that change was supposedly made for
	the sake of Emacs, which does use autoconf.

	* getloadavg.c: Break up #if lines longer than 256 characters,
	for VMS.

Tue Jun  8 07:56:45 1993  Jim Blandy  (jimb@wookumz.gnu.ai.mit.edu)

	* config.guess: Add clause to the first big case statement to
	detect Motorola Delta 68k, up to r3v7.

Sun Jun  6 03:52:21 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* filemode.c: Include config.h if HAVE_CONFIG_H.
	(mode_t): Define, if NO_MODE_T.

Fri May 28 03:21:21 1993  Jim Blandy  (jimb@geech.gnu.ai.mit.edu)

	* getopt.c: If __sgi is defined, #include <alloca.h> too.

Mon May 24 20:43:38 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* alloca.c [!emacs]: Define malloc as xmalloc.  Declare xmalloc.

Mon May 24 17:40:32 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getloadavg.c (getloadavg) [OSF_MIPS]: Don't define
	LDAV_PRIVILEGED.  Cast LOAD_AVE.tl_lscale to double.

Mon May 24 11:53:18 1993  Jim Blandy  (jimb@wookumz.gnu.ai.mit.edu)

	* alloca.c: Make this safe for Emacs.
	[! emacs] Declare malloc.
	(alloca): Call malloc, not xmalloc.

Mon May 24 00:59:13 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* getloadavg.c (getloadavg) [NO_GET_LOAD_AVG]: Just fail.

Sun May 23 21:56:11 1993  Jim Blandy  (jimb@wookumz.gnu.ai.mit.edu)

	* getdate.y [__GNUC__] (alloca): #undef this before we give
	our new definition.

Sun May 23 13:53:12 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* alloca.c: Call xmalloc (once again).
	[emacs]: Define xmalloc as malloc.
	[!emacs]: Declare xmalloc.

Sun May 23 05:47:31 1993  Noah Friedman  (friedman@nutrimat.gnu.ai.mit.edu)

	* mkinstalldirs (errstatus): New variable.
	Use inner `for' loop instead of `while test' on $#.

Sat May 22 20:14:23 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* mkinstalldirs: Set IFS to % instead of / and use sed to translate
	/s in the directory name into %s first.  Initialize PATHCOMP always
	to empty.

Fri May 21 19:32:43 1993  Jim Blandy  (jimb@geech.gnu.ai.mit.edu)

	* alloca.c (free): Don't #define this to be xfree whenever
	emacs is #defined.  That's only appropriate for some of the
	files in Emacs which use alloca.
	(xmalloc): Remove this declaration.  It's inappropriate.
	(alloca): Call malloc, not xmalloc.

Thu May 20 16:22:12 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getloadavg.c (getloadavg) [LINUX]: Close FD if read fails.
	Check return value of sscanf.

Wed May 19 21:16:24 1993  Jim Blandy  (jimb@wookumz.gnu.ai.mit.edu)

	* getloadavg.c (getloadavg): Add support for Linux, from
	Michael K. Johnson.

Wed May 19 13:47:02 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getloadavg.c [__osf__ && (mips || __mips__)]: Include
	<sys/table.h> and #define OSF_MIPS.
	(getloadavg) [OSF_MIPS]: Special code using `table'.

Mon May 17 15:55:47 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getloadavg.c [butterfly]: Define NLIST_STRUCT; not LOAD_AVE_TYPE.

Sun May 16 22:00:06 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* a.out.gnu.h [sequent && i386] (N_MAGIC, N_MACHTYPE, N_FLAGS,
	N_SET_INFO, M_SET_MAGIC, N_SET_MACHTYPE, N_SET_FLAGS, [OZN]MAGIC,
	N_BADMAG, N_ADDRADJ, N_DATOFF, N_TRELOFF, N_SYMOFF, N_TXTADDR,
	N_COMM, N_FN, PAGE_SIZE, SEGMENT_SIZE): Define.

Sat May 15 00:50:03 1993  Jim Meyering  (meyering@comco.com)

	* getdate.y: Fix the time.h versus sys/time.h problem once and
	for all.  Packages that use this file should use autoconf's
	AC_TIME_WITH_SYS_TIME and AC_HAVE_HEADERS(sys/time.h) macros.

Fri May 14 16:38:56 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getloadavg.c [butterfly] (LOAD_AVE_TYPE): Define as long.

Thu May 13 01:49:31 1993  Jim Meyering  (meyering@comco.com)

	* error.c: Move extern dcl of program_name out of error.

Sun May  9 15:21:11 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getloadavg.c [HPUX && ! hpux]: Define hpux.

Sat May  8 20:35:04 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* getloadavg.c: Rename initialized to getloadavg_initialized.

Sat May  8 13:32:15 1993  Jim Meyering  (meyering@comco.com)

	* alloca.c: Indent and reformat comments.

	* alloca.c (i00afunc): New functions for determining relative
	stack frame ordering for Crays.  From Otto Tennant.

Fri May  7 15:54:30 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getloadavg.c [NeXT]: Include <mach/mach.h> #ifdef
	HAVE_MACH_MACH_H, else <mach.h>.

Wed May  5 13:31:55 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getloadavg.c (LDAV_SYMBOL) [hpux && ! hp9000s300]: Use this
	conditional, not just [hpux], to define as "avenrun".

	* getloadavg.c [unix && m68k && mc68000 && mc68020 &&
	_MACH_IND_SYS_TYPES]: Define tek4300.
	[tek4300] (LOAD_AVE_TYPE): Define as long.
	[tek4300] (FSCALE): Define as 100.0.

Mon May  3 22:17:45 1993  Jim Meyering  (meyering@comco.com)

	* getugroups.c: Don't define GETGROUPS_T.  Now configure does it.

Mon May  3 17:12:41 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getloadavg.c (getloadavg) [VMS]: Don't define LDAV_DONE.

	* getloadavg.c [ardent && titan]
	(LOAD_AVE_TYPE): Define as long.
	(FSCALE): Define as 65536.0.
	(LDAV_SYMBOL): Define as "avenrun".

Tue Apr 27 14:07:18 1993  Jim Blandy  (jimb@geech.gnu.ai.mit.edu)

	* getdate.y: If HAVE_SYS_TIMEB_H is #defined, then include
	<sys/timeb.h> instead of defining struct timeb ourselves.

Thu Apr 22 17:23:42 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getloadavg.c (getloadavg) [!LDAV_DONE && LOAD_AVE_TYPE && !VMS]:
	Don't #define LDAV_DONE here.
	[!LDAV_DONE && LOAD_AVE_TYPE]: Define it here instead.

Mon Apr 19 18:09:18 1993  Jim Meyering  (meyering@comco.com)

	* getdate.y: Use TM_IN_SYS_TIME.

Fri Apr 16 18:10:06 1993  Jim Blandy  (jimb@wookumz.gnu.ai.mit.edu)

	* getdate.y [emacs] (static): If the Emacs configuration files
	have #defined static to be the empty string, then #undefine
	it; this file doesn't need that hack.

Fri Apr 16 12:13:37 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* obstack.c, getopt.c, getopt1.c: Surround code with
	#if defined (_LIBC) || !defined (__GNU_LIBRARY__)

Fri Apr 16 10:52:12 1993  Michael Meissner  (meissner@osf.org)

	* getopt.h (getopt): Do not declare getopt with a prototype of
	(void) for a non-ANSI compiler.  If not GNU library and a
	standard compiler, do not declare a prototype for getopt, just
	like the comments say, due to different libraries having
	different signatures for getopt.

Thu Apr 15 16:36:03 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getloadavg.c: Move #include <sys/types.h> to top and out of [USG].
	[sgi, UMAX]: Don't include it again later.

Wed Apr 14 13:06:50 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getloadavg.c: "#ifdef !define ..." -> "#if !defined ..."

	* getopt.c (_NO_PROTO): Don't define if already defined.

Tue Apr 13 14:56:33 1993  Jim Meyering  (meyering@comco.com)

	* getdate.y [HAVE_MEMCPY && !HAVE_BCOPY]: Define bcopy in terms
	of memcpy for old versions of bison that generate parsers that
	use bcopy.

Tue Apr 13 00:48:41 1993  Jim Blandy  (jimb@wookumz.gnu.ai.mit.edu)

	* getloadavg.c: Changes for Mach from Thorston Ohl
	<ohl@chico.harvard.edu>:
	#include <mach/mach.h>, instead of <mach.h>.
	(getloadavg): Don't forget to test LDAV_DONE in the CPP
	conditional protecting the last load average technique.

Mon Apr 12 23:03:20 1993  Jim Blandy  (jimb@wookumz.gnu.ai.mit.edu)

	* getloadavg.c: Changes for VMS from Richard Levitte:
	(LOAD_AVE_TYPE, NLIST_STRUCT): Collapse multi-line #if
	directives into one line; VMS CPP can't handle that.
	[VMS] (getloadavg): Add static `initialized' variable, and
	set the dsc$w_length and dsc$a_pointer fields of descriptior
	instead of the size and ptr fields.

Mon Apr 12 13:55:34 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getopt.c (my_index): Rename arg STRING to STR.

Sun Apr 11 17:37:19 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getopt.h: Declare optopt.

	* getopt.c (my_index): First arg is `const char *'.
	(my_bcopy): Likewise.

Tue Apr  6 13:23:28 1993  Jim Meyering  (meyering@comco.com)

	* getdate.y [hp9000 && !hpux]: Change erroneous #ifdef to #if.

Mon Apr  5 17:28:35 1993  Jim Blandy  (jimb@wookumz.gnu.ai.mit.edu)

	* getdate.y: #include <sys/times.h> whenever HAVE_GETTIMEOFDAY
	is #defined.  If it isn't defined, try to guess it.
	(main): If HAVE_GETTIMEOFDAY is #defined, use it.

Sun Apr  4 11:24:59 1993  Jim Meyering  (meyering@comco.com)

	* getdate.y [sgi]: Undefine timezone before including <time.h>.

	* getdate.y [time.h vs sys/time.h]: Fix boolean algebra typo from
	Mar 31 consolidation.

	* getdate.y: Move static dcls of yyerror and yylex to a point
	following the definition of those symbols to getdate_{yyerror,yylex}.

	* getdate.y [_AIX]: AIX needs time.h as well as sys/time.h.

Fri Apr  2 13:30:03 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getopt.c: Define _NO_PROTO before including <stdio.h>.

Wed Mar 31 18:38:05 1993  Jim Blandy  (jimb@geech.gnu.ai.mit.edu)

	* getdate.y: Consolidate the expressions saying when to
	#include <sys/time.h>, to avoid multiple inclusions.

	* getdate.y (yylex, yyerror): Added forward static declarations.

	* getdate.y: Note that David Mackenzie's change of March 16
	1992 introduces another shift/reduce conflict.

Wed Mar 31 17:30:29 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* alloca.c [emacs]: Define free as xfree.
	(alloca): Use free, not xfree.

Mon Mar 29 13:46:17 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* a.out.gnu.h [i386] (SEGMENT_SIZE): Don't use this defn on [sequent].
	[sequent && i386]: #include "/usr/include/a.out.h" explicitly,
	since in glibc this is installed as <a.out.h>.

Mon Mar 15 17:34:53 1993  Roland McGrath  (roland@geech.gnu.ai.mit.edu)

	* getopt.c (optopt): Initialize it.

Sun Mar 14 16:39:57 1993  Jim Blandy  (jimb@wookumz.gnu.ai.mit.edu)

	* getpagesize.h: Add definition for VMS.

Wed Mar 10 20:57:21 1993  Jim Blandy  (jimb@wookumz.gnu.ai.mit.edu)

	* getloadavg.c: If USG is defined, #include <sys/types.h>.
	Move the test for HAVE_FCNTL_H and _POSIX_VERSION down after this.

	* alloca.c: Use xfree instead of free.

Wed Mar 10 15:22:56 1993  Roland McGrath  (roland@geech.gnu.ai.mit.edu)

	* getloadavg.c [__osf__ && __alpha__] (OSF_ALPHA): Define this.
	[OSF_ALPHA] (LOAD_AVE_TYPE): Define as long.
	[OSF_ALPHA] (NLIST_STRUCT): Define this.

Wed Feb 24 12:45:00 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getloadavg.c [NeXT]: #undef FSCALE to indicate that the nlist
	method is not the desireable one.
	(getloadavg) [NeXT]: Return with errno==EINVAL if called with NELEM>1,
	since we can get only the one-minute load average on this system.

Mon Feb 22 08:59:03 1993  Jim Blandy  (jimb@wookumz.gnu.ai.mit.edu)

	* getloadavg.c (LDAV_CVT): If LDAV_CVT has already been
	defined above in terms of Emacs's LOAD_AVE_CVT, don't redefine
	it just because we have FSCALE.

Sun Feb 21 14:52:01 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getopt.c (optopt): New variable.
	(_getopt_internal): On any failure for a single-letter option, set
	`optopt' to the losing option character.
	When a required arg is missing, return ':' instead of '?' if the
	first char in OPTSTRING (possibly after the - or +) is a ':'.
	Use 1003.2-standard formats for error messages (it specifies
	precise formats for unrecognized option and for missing arg).

	* signame.c: #include <sys/types.h> before <signal.h>.

Thu Jan 28 17:10:08 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getloadavg.c (LOAD_AVE_TYPE) [sequent]: Define as long.
	(FSCALE) [sequent]: Define as 1000.0, like sgi.
	(LDAV_CVT) [FSCALE]: Move outside if #ifndef FSCALE.

Fri Jan 22 14:51:36 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getloadavg.c (NLIST_STRUCT): Put defined(sony_news) inside the
	parens so we don't redefine NLIST_STRUCT when it's already defined.

	* signame.h [!__STDC__] (psignal): Surround decl with #ifndef
	HAVE_SYS_SIGLIST || HAVE_PSIGNAL.
	(sys_siglist): Surround decl with #ifndef HAVE_SYS_SIGLIST.

Sun Jan 17 19:55:30 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* getopt.c, getopt1.c: Do define const if IN_GCC.

Thu Jan 14 15:35:33 1993  David J. MacKenzie  (djm@kropotkin.gnu.ai.mit.edu)

	* getopt.c, getopt1.c: Don't redefine const; let callers do it.

Wed Jan 13 15:38:40 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getopt.c [_AIX]: Put #pragma alloca before all else.

Tue Jan 12 16:48:04 1993  Roland McGrath  (roland@geech.gnu.ai.mit.edu)

	* getloadavg.c: Removed #ifdef TEST around #include of errno.h.

Mon Jan 11 15:17:29 1993  Roland McGrath  (roland@geech.gnu.ai.mit.edu)

	* getloadavg.c [ultrix]: Define BSD.

	* signame.h [!HAVE_SYS_SIGLIST && !HAVE_PSIGNAL]: Put psignal decl
	inside these #ifs.
	[!HAVE_SYS_SIGLIST]: Put sys_siglist decl inside this #if.

Fri Jan  8 17:36:41 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getloadavg.c [HAVE_CONFIG_H]: Test this only for actually
	including "config.h".  Everything else that HAVE_CONFIG_H used to
	turn off is now turned on always.
	(KERNEL_FILE) [sequent, hpux], (LDAV_SYMBOL) [alliant]: Don't
	define if already defined.
	[!LDAV_DONE && LOAD_AVE_TYPE && !VMS]: Define LDAV_PRIVILEGED.

	* getloadavg.c (getloadavg) [!LDAV_DONE]: Set errno to zero.

Wed Jan  6 18:17:28 1993  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* signame.c: #include "signame.h" after possibly defining `const',
	so signame.h and signame.c consistently use it or don't use it.

	* signame.h: Use "#if defined (__STDC__) && __STDC__", in place of
	"#ifdef __STDC__".

Sat Jan  2 18:32:01 1993  David J. MacKenzie  (djm@kropotkin.gnu.ai.mit.edu)

	* getopt.c: Turn off GETOPT_COMPAT by default.

Thu Dec 31 12:34:41 1992  Roland McGrath  (roland@geech.gnu.ai.mit.edu)

	* signame.c [HAVE_CONFIG_H]: #include "config.h".

Tue Dec  8 21:10:29 1992  David J. MacKenzie  (djm@kropotkin.gnu.ai.mit.edu)

	* getloadavg.c: Include fcntl.h if HAVE_FCNTL_H, not USG.

	* getdate.y: Include alloca.h if HAVE_ALLOCA_H, not sparc.

Tue Dec  1 13:27:40 1992  David J. MacKenzie  (djm@goldman.gnu.ai.mit.edu)

	* getopt.c, getopt1.c, getdate.y, alloca.c, getloadavg.c
	[HAVE_CONFIG_H]: Include config.h.

Tue Nov 24 09:42:29 1992  David J. MacKenzie  (djm@goldman.gnu.ai.mit.edu)

	* getugroups.c: Use HAVE_STRING_H, not USG.

Mon Nov 23 14:36:33 1992  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* signame.c (init_sigs): Renamed to signame_init, made global.
	(sig_abbrev, sig_number): Changed callers.
	* signame.h (signame_init): Declare it.

	* signame.c (init_sigs): Add SIGDANGER.

Thu Nov 19 21:34:43 1992  Jim Blandy  (jimb@totoro.cs.oberlin.edu)

	* getloadavg.c: #include <sys/param.h> whether or not the
	"emacs" CPP symbol is defined.

Mon Nov 16 13:35:30 1992  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* a.out.gnu.h (SEGMENT_SIZE): Define as PAGE_SIZE if undefined.
	(PAGE_SIZE): Define as 16 if undefined; for i386-minix, which has
	no predefine we can test.

Thu Nov 12 23:31:53 1992  Jim Meyering  (meyering@hal.gnu.ai.mit.edu)

	* getdate.y, getusershell.c: Give statically initialized arrays
	const attribute.

Sat Nov  7 13:50:27 1992  David J. MacKenzie  (djm@goldman.gnu.ai.mit.edu)

	* getopt1.c: Only include stdlib.h for __GNU_LIBRARY__.
	[!__STDC__]: Don't define const if it was already defined.

Sat Nov  7 03:28:08 1992  Jim Blandy  (jimb@apple-gunkies.gnu.ai.mit.edu)

	* getdate.y [emacs]: Include <config.h>; under Emacs, we get
	some additional configuration information from that.

Sat Nov  7 00:53:35 1992  David J. MacKenzie  (djm@goldman.gnu.ai.mit.edu)

	* getopt.c [!__STDC__]: Don't define const if it was already defined.

Tue Nov  3 20:12:01 1992  Roland McGrath  (roland@geech.gnu.ai.mit.edu)

	* getloadavg.c: Added `!defined (LDAV_DONE) &&' to all the #if's
	for different system types.  We want to get one and only one of the
	chunks of code which defines LDAV_DONE.

Tue Oct 27 23:51:02 1992  David J. MacKenzie  (djm@goldman.gnu.ai.mit.edu)

	* getloadavg.c [sequent]: implies NLIST_STRUCT.
	[SYSV || _POSIX_VERSION]: include fcntl.h, not sys/file.h.

Mon Oct 26 22:43:25 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* install.sh: Move or copy first to temp file, then mv to real dest.

Mon Oct 19 18:35:04 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* obstack.h (__need_ptrdiff_t): Don't define, if __NeXT__.

Sat Oct 17 03:17:01 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* getopt.c: Include string.h only with GNU library.

Fri Oct 16 17:40:54 1992  Roland McGrath  (roland@geech.gnu.ai.mit.edu)

	* getopt.h (no_argument, required_argument, optional_argument):
	Define as macros.
	(enum _argtype): Removed.

Fri Oct  2 18:18:35 1992  Roland McGrath  (roland@geech.gnu.ai.mit.edu)

	* signame.c (NSIG): #define if not #define'd.

Thu Oct  1 23:33:55 1992  David J. MacKenzie  (djm@goldman.gnu.ai.mit.edu)

	* getpagesize.h: That should have been HAVE_UNISTD_H, Mike . . .
	(no initial underscore).

	* pathmax.h [__MSDOS__]: Don't include sys/param.h.

Wed Sep 30 13:54:36 1992  Michael I Bushnell  (mib@geech.gnu.ai.mit.edu)

	* getpagesize.h: Test for _HAVE_UNISTD_H, because
	_POSIX_VERSION is defined by unistd.h, and thus can't be used
	in deciding whether to include it.

Tue Sep 29 07:36:29 1992  Noah Friedman  (friedman@nutrimat.gnu.ai.mit.edu)

	* getloadavg.c: if symbol `sony_news' is defined, define
	NLIST_STRUCT and declare LOAD_AVE_TYPE as long.

Thu Sep 17 20:10:03 1992  Karl Berry  (karl@geech.gnu.ai.mit.edu)

	* regex.[ch]: made links into ../regex/, per rms' suggestion.
	Please put further ChangeLog entries there.

Tue Sep 15 20:13:30 1992  Michael I Bushnell  (mib@geech.gnu.ai.mit.edu)

	* getpagesize.h: Posix-ify.

Mon Sep 14 23:48:55 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)

	* getloadavg.c: Define SUNOS_5 if appropriate.

Mon Sep 14 16:31:01 1992  Michael I Bushnell  (mib@geech.gnu.ai.mit.edu)

	* getdate.y: AIX needs sys/time.h as well as time.h.

Sun Sep 13 07:17:09 1992  Jim Blandy  (jimb@wookumz.gnu.ai.mit.edu)

	* getdate.y: Don't forget to include the file which defines
	struct timeval and struct timezone, if we're using those.

Fri Sep 11 10:42:24 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)

	* getopt.h: Only prototype getopt for the GNU libc.

Fri Sep 11 07:46:21 1992  Karl Berry  (karl@hal.gnu.ai.mit.edu)

	* regex.h (_RE_ARGS) [!__STDC__]: expand to empty parens.

Fri Sep 11 00:57:56 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* regex.c (SET_LIST_BIT): Always treat c as positive.

Thu Sep 10 19:38:59 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)

	* getugroups.c: Always declare getgrent.  getgroups fills in
	an array of int on 386BSD, too.

Thu Sep 10 16:35:10 1992  Jim Blandy  (jimb@wookumz.gnu.ai.mit.edu)

	* getdate.y: Generalize previous change; always use
	gettimeofday to find the current time zone's Greenwich offset,
	unless we're being compiled under USG or some other system
	which already has CPP conditionals saying how to get the time
	zone offset.

	* getdate.y: Don't divide the Greenwich offset returned by
	gettimeofday by 60; it's already expressed in minutes, so it
	doesn't need to be converted.

Wed Sep  9 21:49:20 1992  Karl Berry  (karl@apple-gunkies.gnu.ai.mit.edu)

	* regex.[ch]: version 0.10, incorporating below changes and
	more.  See /gd/gnu/lib/regex-*/ChangeLog.

Wed Sep  9 03:09:55 1992  Noah Friedman  (friedman@nutrimat.gnu.ai.mit.edu)

	* malloc.c: if USG, define macros for bcopy and bzero.
	Don't redefine USG for hpux if already defined.

Tue Sep  1 16:46:47 1992  Jim Blandy  (jimb@pogo.cs.oberlin.edu)

	* getdate.y: If __ultrix__ is defined, then we don't have the
	timezone array, but we do have ftime, so use that instead.

Fri Aug 28 15:52:40 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)

	* getloadavg.c [SUNOS_5]: New code from Epoch 4.2.

Thu Aug 27 16:38:22 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)

	* getloadavg.c: Don't check NLIST_STRUCT to decide whether to
	define LOAD_AVE_TYPE.

Wed Aug 26 16:45:54 1992  Roland McGrath  (roland@geech.gnu.ai.mit.edu)

	* getloadavg.c (FSCALE): Don't #define if already defined.

Mon Aug 24 13:00:34 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)

	* getopt.c: Include string.h if USG or STDC_HEADERS as well as
	if __GNU_LIBRARY__.

Sun Aug 23 02:51:31 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)

	* regex.[ch] (re_comp): Remove const from return value, to
	avoid conflict with 386BSD unistd.h.

Sat Aug 22 18:30:58 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)

	* getloadavg.c: Define FCALE, then LDAV_CVT in terms of that.

Fri Aug 21 16:02:20 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)

	* getloadavg.c (_SEQUENT_): Define NLIST_STRUCT.

Wed Aug 19 16:35:33 1992  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getloadavg.c [NLIST_NAME_UNION]: Test this intead of convex.

Tue Aug 18 23:06:47 1992  Jim Blandy  (jimb@wookumz.gnu.ai.mit.edu)

	* regex.c (DO_RANGE): Make end and this_char integers, and
	fetch this_char's initial value using an 'unsigned char *', so that
	character ranges including '\177' through '\377' will work.

Tue Aug 18 17:32:40 1992  Roland McGrath  (roland@geech.gnu.ai.mit.edu)

	* getopt.c, getopt1.c, getopt.h: Change license back to GPL from LGPL.

Fri Aug 14 07:38:34 1992  Torbjorn Granlund  (tege@jupiter.sics.se)

	* obstack.h: Fix spelling errors.

Sat Aug  1 18:12:07 1992  Michael Meissner  (meissner@osf.org)

	* obstack.c (CALL_FREEFUN): Recode to use if/else instead of
	?:, since the MIPS compiler does not like ?: expressions where
	the two alternate values are both void.

Sat Aug  1 00:11:25 1992  Fred Fish  (fnf at fishpond)

	* obstack.h (obstack_specify_allocation):  Use malloc/free
	compatible calling convention.
	* obstack.h (obstack_specify_allocation_with_arg):  Use mmalloc/
	mfree compatible calling convention.

Wed Jul 29 18:53:13 1992  Karl Berry  (karl@hal)

	* regex.c: version 0.9; fixes bug wrt always finding the longest
	match.  See /gd/gnu/lib/regex-*/ChangeLog.

Sun Jul 26 18:24:13 1992  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getloadavg.c [NeXT]: #undef BSD after <sys/param.h>.

Sun Jul 26 17:04:20 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* obstack.h (struct obstack): extra_arg is now char *.
	(obstack_alloc_arg): Deleted.
	(obstack_specify_allocation): Take new arg, to specify extra_arg.
	Call _obstack_begin_1.
	* obstack.c (_obstack_begin_1): New function.

Fri Jul 24 16:29:17 1992  Fred Fish  (fnf at fishpond)

	* obstack.h (struct obstack):  Change maybe_empty_object to
	bitfield.  Add use_extra_arg bitfield and extra_arg.
	* obstack.h (obstack_init, obstack_begin):  Cast type of
	obstack_chunk_free as well as obstack_chunk_alloc.
	* obstack.h (obstack_specify_allocation, obstack_alloc_arg):
	New macros.
	* obstack.c (CALL_CHUNKFUN, CALL_FREEFUN):  New macros to hide
	details of chunk allocator/deallocator calls.
	* obstack.c (_obstack_begin, _obstack_newchunk): Use CALL_CHUNKFUN.
	* obstack.c (_obstack_free, _obstack_newchunk): Use CALL_FREEFUN.

Fri Jul 24 16:09:37 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)

	* getugroups.c [_POSIX_SOURCE]: Define endgrent as empty.

	* getloadavg.c [HAVE_UNISTD_H]: Include unistd.h.

Sun Jul 19 23:29:27 1992  John Gilmore  (gnu@cygnus.com)

	* stab.def: Order values numerically, and add some stabs
	used by Solaris.

Fri Jul 17 20:21:20 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)

	* getopt.c: Only include stdlib.h for GNU C library, due to
	conflicting getopt prototypes.

Fri Jul 17 05:49:07 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* obstack.c (DEFAULT_ALIGNMENT): Cast to widest integer type to
	avoid possible warning if int is narrower than pointer.

Fri Jul 17 03:47:16 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)

	* getdate.y: Use HAVE_FTIME instead of FTIME_MISSING.
	* signame.c: Use HAVE_SYS_SIGLIST instead of SYS_SIGLIST_MISSING.

Tue Jul 14 18:53:46 1992  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getopt.c (exchange): Cast args to my_bcopy to (char *).

Tue Jul 14 14:34:33 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)

	* getopt.c: Include stdlib.h and string.h if STDC_HEADERS as
	well as if __GNU_LIBRARY__.

Sat Jul 11 13:24:12 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* obstack.h: Define __need_ptrdiff_t for gstddef.h.

Fri Jul 10 15:01:25 1992  Karl Berry  (karl@hal)

	* regex.[ch]: new version (0.8), incorporating the changes
	below.  See /gd/gnu/regex/ChangeLog.

Fri Jul 10 03:46:24 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* obstack.h: Get ptrdiff_t from gstddef.h when building GCC with GCC.

Thu Jul  9 21:38:37 1992  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getloadavg.c [DGUX]: Cast first arg to dg_sys_info to (long int *).

Wed Jul  8 19:43:26 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)

	* error.c (private_strerror): Ok if errnum == sys_nerr.

Wed Jul  8 12:38:37 1992  Jim Blandy  (jimb@wookumz.gnu.ai.mit.edu)

	* regex.c: Applied tentative patches from Karl Berry:
	Miscellaneous doc fixes and reformatting.
	(REGEX_REALLOCATE): Parenthesize call to realloc.
	Test HAVE_ALLOCA_H, instead of testing for things like sparc,
	etc.  Don't declare alloca under AIX, since that's done with
	the pragma at the top of the file.
	(IS_IN_FIRST_STRING): Renamed to FIRST_STRING_P.
	(re_match_2): Uses of IS_IN_FIRST_STRING changed.
	(TALLOC): Parenthesize call to malloc.
	(REGEX_TALLOC): New macro.
	(FREE_NONNULL): New macro.
	(FREE_VARIABLES): Use FREE_NONNULL instead of always freeing.
	(re_match_2): Don't use initializers in declarations of
	regstart, regend, old_regstart, old_regend, reg_info,
	best_regstart, best_regend, reg_dummy, and reg_info_dummy.
	Initialize them only if we actually use the registers.
	New variable match_end for use instead of best_regend[0], in
	case we don't allocate the registers.  Don't fuss with
	best_regend[0] directly.

Sat Jul  4 07:53:45 1992  Karl Berry  (karl@hal)

	* regex.c (re_compile_fastmap): init succeed_n_p (to false).

Fri Jul  3 14:45:29 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)

	* error.c: Change FOO_MISSING to HAVE_FOO.

Thu Jul  2 15:47:20 1992  David J. MacKenzie  (djm@wookumz.gnu.ai.mit.edu)

	* getloadavg.c: Tweak #defines for SVR4.
	Include sys/param.h if unix, not if BSD.

Wed Jul  1 11:48:37 1992  Karl Berry  (karl@hal)

	* regex.[ch]: new version (0.7).  See /gd/gnu/regex/ChangeLog.

Sun Jun 28 06:05:39 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* obstack.h: Define a type for the result of __PTR_TO_INT.

Sat Jun 27 10:50:59 1992  Jim Blandy  (jimb@pogo.cs.oberlin.edu)

	* xregex.c (re_match_2): When we have accepted a match and
	restored d from best_regend[0], we need to set dend
	appropriately as well.  It may happen that dend == end_match_1
	while the restored d is in string2, so we should be prepared
	to set dend to end_match_2 in this case.

Tue Jun 23 22:27:36 1992  David J. MacKenzie  (djm@goldman.gnu.ai.mit.edu)

	* getloadavg.c (getloadavg) [DGUX]: Don't initialize structure;
	the error handling doesn't work that way now.

Fri Jun 19 13:14:57 1992  David J. MacKenzie  (djm@wookumz.gnu.ai.mit.edu)

	* install.sh: Use - instead of :- in variable assignments.

Tue Jun 16 19:32:46 1992  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getopt.c [HAVE_ALLOCA_H]: Test to include <alloca.h>.

Thu Jun 11 15:15:38 1992  Roland McGrath  (roland@geech.gnu.ai.mit.edu)

	* arscan.c: Removed.  It is now part of Make.

Mon Jun  8 18:03:28 1992  Jim Blandy  (jimb@pogo.cs.oberlin.edu)

	* regex.h (RE_NREGS): Doc fix.

	* xregex.c (re_set_registers): New function.
	* regex.h (re_set_registers): Declaration for new function.

Wed Jun  3 16:59:49 1992  Karl Berry  (karl@geech.gnu.ai.mit.edu)

	* regex.[ch]: new version (0.6).  See ~karl/regex/ChangeLog.

Sat May 23 22:28:54 1992  Roland McGrath  (roland@geech.gnu.ai.mit.edu)

	* getopt.c [LIBC]: No longer need to #include <ansidecl.h>.

	* getopt.h, getopt.c, getopt1.c: Changed copyright notice to LGPL.

Fri May 22 14:50:25 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* getopt.c: Change sparc conditional so that sun && sparc
	causes use of alloca.h.

Thu May 14 16:50:28 1992  Karl Berry  (karl@kropotkin.gnu.ai.mit.edu)

	* regex.c, regex.h: new version (0.5).  See ~karl/regex/ChangeLog.

Tue May 12 03:27:19 1992  David J. MacKenzie  (djm@churchy.gnu.ai.mit.edu)

	* getopt.c (_getopt_internal): Don't allow it.

Tue May 12 00:33:31 1992  Roland McGrath  (roland@albert.gnu.ai.mit.edu)

	* getopt.c (_getopt_internal): Allow optional arg to be in ARGV elt
	after switch.

Thu May  7 11:46:18 1992  Jim Blandy  (jimb@pogo.cs.oberlin.edu)

	* crt0.c (_start): When m68000 is #defined, don't use the
	simple C version of _start that simply calls start1; GCC 2.1
	without optimization has _start push a word of garbage on the
	stack, which screws up the CRT0_DUMMIES hack.  Instead, use an
	assembly-language version of _start.

Mon May  4 16:26:49 1992  David J. MacKenzie  (djm@churchy.gnu.ai.mit.edu)

	* getopt.h: #ifdef __STDC__ -> #if __STDC__.

Thu Apr 30 18:53:52 1992  Roland McGrath  (roland@geech.gnu.ai.mit.edu)

	* a.out.gnu.h [NeXT]: Define PAGE_SIZE, and not SEGMENT_SIZE.

Sun Apr 26 02:33:50 1992  Jim Blandy  (jimb@pogo.cs.oberlin.edu)

	* crt0.c: Don't #include "config.h" unless emacs is #defined.

Tue Apr 21 17:45:54 1992  Jim Blandy  (jimb@pogo.cs.oberlin.edu)

	* regex.c (re_match_2): If we've already allocated memory for
	the search buffers, don't allocate them again.

Mon Apr 13 20:17:47 1992  David J. MacKenzie  (djm@wookumz.gnu.ai.mit.edu)

	* getopt.h: Make the multiple inclusion protection look like
	the rest of libc's.

Wed Apr  1 06:10:15 1992  Jim Blandy  (jimb@wookumz.gnu.ai.mit.edu)

	* regex.c [emacs]: Include <sys/types.h>, since regex.h wants it.

Tue Mar 31 12:01:32 1992  Jim Blandy  (jimb@wookumz.gnu.ai.mit.edu)

	* crt0.c: The changes below are the results of a merge with
	the Emacs 19 sources:
	(start1): Declare this static before all uses.
	Add conditionals for ALLIANT_2800.

	* (_start) for alliant: Set _curbrk and _minbrk from _setbrk,
	to help with Emacs dumping.

Mon Mar 30 18:00:41 1992  Jim Blandy  (jimb@wookumz.gnu.ai.mit.edu)

	* malloc.c [VMS]: Include vlimit.h.
	(calloc): Add a quick implementation of this, in case
	something from another library uses it.
	(get_lim_data): There are several versions of this function,
	tailored for different operating systems; the appropriate
	version is chosen by checking for preprocessor symbols which
	indicate which operating system Emacs is being compiled for.
	Re-arrange the preprocessor conditionals so that the generic
	"none of the above" version is last, in the final "else" clause.

	* alloca.c: Do nothing if alloca is defined as a macro.

Fri Mar 20 02:53:14 1992  Roland McGrath  (roland@geech.gnu.ai.mit.edu)

	* a.out.gnu.h: Added missing backslash in #if.

Mon Mar 16 23:46:18 1992  David J. MacKenzie  (djm@apple-gunkies.gnu.ai.mit.edu)

	* getdate.y: Support ISO 8601 format.  yyyy-mm-dd.

Sun Mar 15 22:50:30 1992  Roland McGrath  (roland@geech.gnu.ai.mit.edu)

	* a.out.gnu.h [NeXT || mips] (SEGMENT_SIZE): Define as PAGE_SIZE.
	[NeXT] (PAGE_SIZE): Define as 0x2000.
	[mips] (PAGE_SIZE): Define as 4096.

	* getopt.c [sparc && svr4]: No <alloca.h>.

Thu Mar 12 14:26:48 1992  Karl Berry  (karl@apple-gunkies.gnu.ai.mit.edu)

	* regex.[ch]: new version (0.4).  See ~karl/regex/ChangeLog.

Tue Mar 10 22:26:14 1992  Roland McGrath  (roland@geech.gnu.ai.mit.edu)

	* a.out.gnu.h [sun && mc68000]: SEGMENT_SIZE == 0x2000.

Thu Feb 27 21:37:53 1992  Michael I Bushnell  (mib@geech.gnu.ai.mit.edu)

	* getdate.y: `#undef timezone' on SGI systems to avoid naming
	clash.
	(get_date): Use underscore version for SGI.
	[This fix is from beebe@mach.utah.edu.]

Tue Feb 25 21:23:50 1992  Roland McGrath  (roland@wookumz.gnu.ai.mit.edu)

	* getopt.c [__GNU_LIBRARY__]: #include <string.h>.

Thu Feb 20 13:04:57 1992  Karl Berry  (karl@wombat.gnu.ai.mit.edu)

	* regex.[ch]: new version (0.3).  See ~karl/regex/ChangeLog for all
	the details.

Wed Feb 19 23:04:05 1992  Charles Hannum  (mycroft@gnu.ai.mit.edu)

	* regex.c [_AIX]: Move #pragma alloca to top of file to accommodate
	AIX C compiler.

Mon Feb 17 03:44:03 1992  Roland McGrath  (roland@wookumz.gnu.ai.mit.edu)

	* a.out.gnu.h [sparc] (_N_HDROFF): Define as (-sizeof (struct exec)).
	That is as if SEGMENT_SIZE were 0, but that would be wrong.

	* a.out.gnu.h [i386] (SEGMENT_SIZE): Define.

Sun Feb 16 03:10:23 1992  Roland McGrath  (roland@wookumz.gnu.ai.mit.edu)

	* a.out.gnu.h [sparc] (PAGE_SIZE, SEGMENT_SIZE): Define.
	(PAGSIZ): Define as PAGE_SIZE.
	(SEGSIZ): Define as SEGMENT_SIZE.

Thu Jan 30 19:03:29 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* regex.c (re_search_2): Improve comments.

Tue Jan 28 00:28:15 1992  David J. MacKenzie  (djm at wookumz.gnu.ai.mit.edu)

	* getopt.h (struct option): Change has_arg back to an int.

Mon Jan 27 23:03:33 1992  David J. MacKenzie  (djm at wookumz.gnu.ai.mit.edu)

	* getopt.c (_getopt_internal): Don't use a relational operator (>)
	on the has_arg field, which is now an enum.

Fri Jan 17 21:34:02 1992  Roland McGrath  (roland@wookumz.gnu.ai.mit.edu)

	* getopt.h: Don't declare envopt.

	* envopt.c: Tweaks to compile under libc.

Fri Jan 17 21:23:02 1992  David J. MacKenzie  (djm at wookumz.gnu.ai.mit.edu)

	* getopt.c: Describe the new args to _getopt_internal.

Fri Jan 17 19:26:54 1992  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* getopt.h: Remove decls of _getopt_* and option_index.
	Make `name' elt of `struct option' const char *.
	Make `has_arg' an enum (integer values same).
	* getopt.c (_getopt_internal): Renamed from getopt, taking 3 new args
	in place of global vars _getopt_long_options, _getopt_long_only,
	and option_index (which are all now gone).
	(getopt): New fn, front end to _getopt_internal.
	* getopt1.c (getopt_long, getopt_long_only): Use _getopt_internal.

Tue Jan  7 02:08:10 1992  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* regex.c (malloc, realloc): Don't specify arg types--can
	cause error.

Mon Jan  6 12:53:42 1992  Karl Berry  (karl at apple-gunkies.gnu.ai.mit.edu)

	* regex.[ch]: new versions.  See ~karl/regex/ChangeLog for all
	the details.

Tue Dec 24 22:42:59 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* obstack.h: Indentation fix.

Mon Dec 23 23:41:39 1991  David J. MacKenzie  (djm at wookumz.gnu.ai.mit.edu)

	* regex.c, putenv.c, getugroups.c: Change POSIX ifdefs to
	HAVE_UNISTD_H and _POSIX_VERSION.

Wed Dec 18 14:24:35 1991  Michael Meissner  (meissner at osf.org)

	* getopt.h (whole file): Protect getopt.h from being included
	twice.

Fri Dec  6 13:00:42 1991  David J. MacKenzie  (djm at wookumz.gnu.ai.mit.edu)

	* getopt.c (getopt): Cast argv to (char **) (with no const)
	when passing to exchange, to be explicit about what's happening.

	* getopt.c: Change POSIX_ME_HARDER to POSIXLY_CORRECT.

Thu Dec  5 12:12:18 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* getopt.c (my_bcopy, my_index): New functions.
	Use instead of bcopy and index.
	Avoid conditionals on USG, NeXT, hpux, __GNU_LIBRARY__, etc.

	* getopt1.c, getopt.h (getopt_long*): Like yesterday's getopt change.

Wed Dec  4 10:51:45 1991  Ron Guilmette (rfg at ncd.com)

	* getopt.c, getopt.h (getopt):  Correct the type of the second
	parameter so that it agrees with ANSI/POSIX standards.

	* getopt.h:  Make all function declarations explicitly `extern'.

Tue Dec  3 01:34:59 1991  David J. MacKenzie  (djm at wookumz.gnu.ai.mit.edu)

	* getopt.c: Fix some wrong comments.

Mon Dec  2 17:49:50 1991  David J. MacKenzie  (djm at wookumz.gnu.ai.mit.edu)

	* getopt.c (getopt): Support `+' to introduce long-named
	options, as well as `--', if GETOPT_COMPAT is defined.
	It is defined by default.

Sun Dec  1 21:12:32 1991  David J. MacKenzie  (djm at wookumz.gnu.ai.mit.edu)

	* getopt.c (getopt): Long-named options are introduced by `--'
	instead of `+'.
	Protect all fprintfs with checks of opterr.
	Include getopt.h instead of redeclaring things, to stay in sync.
	* getopt1.c (getopt_long): No longer disable long options if
	POSIX_ME_HARDER is set.
	(main): Handle -d.  Remove unused var.

Mon Nov  4 23:06:54 1991  David J. MacKenzie  (djm at wookumz.gnu.ai.mit.edu)

	* regex.h [!__STDC__]: regerror was declared to return size_t *
	instead of size_t.

Sat Nov  2 21:26:42 1991  David J. MacKenzie  (djm at wookumz.gnu.ai.mit.edu)

	* error.c: Use STRERROR_MISSING instead of STDC_HEADERS to
	control compiling strerror.

Fri Oct 18 00:33:43 1991  David J. MacKenzie  (djm at wookumz.gnu.ai.mit.edu)

	* getugroups.c: GID_T -> GETGROUPS_T, for clarity.

Wed Oct  9 14:14:31 1991  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* getopt.c: Treat hpux like USG.

Tue Oct  8 21:36:52 1991  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* alloca.c: Add some parens to make precedence clearer.

Sat Oct  5 13:17:59 1991  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* getopt.c: Treat NeXT like USG.

Sat Sep 28 02:01:45 1991  David J. MacKenzie  (djm at churchy.gnu.ai.mit.edu)

	* regex.c: Include stdlib.h only if STDC_HEADERS, not if POSIX
	(POSIX.1 doesn't require it to exist).

Wed Sep  4 17:32:51 1991  Kathryn A. Hargreaves  (letters at apple-gunkies)

	* regex.[ch]: Put current version (0.1) here, after backing up old
	files.  For ChangeLog details, please refer to the ChangeLog
	file in my regex directory.

Sat Aug 24 04:22:01 1991  David J. MacKenzie  (djm at apple-gunkies)

	* getopt1.c: Declare getenv.

Mon Aug 19 01:35:48 1991  David J. MacKenzie  (djm at wookumz.gnu.ai.mit.edu)

	* regex.c, getopt.c: Indent '#pragma alloca' so non-ANSI
	compilers won't choke on it.

Mon Aug 12 16:43:17 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* getopt.c: _POSIX_OPTION_ORDER renamed to POSIX_ME_HARDER.
	* getopt1.c: Support POSIX_ME_HARDER.

Wed Aug  7 00:53:00 1991  David J. MacKenzie  (djm at geech.gnu.ai.mit.edu)

	* getdate.y: Add patch from perf@efd.lth.se to support
	explicit "dst", for European timezones.

Tue Jul 30 17:00:23 1991  David J. MacKenzie  (djm at apple-gunkies)

	* getdate.y: Rename NEED_TZSET to FTIME_MISSING.

Fri Jul 26 23:09:22 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* regex.h: Delete `#pragma once'.

Fri Jul 26 17:07:39 1991  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* a.out.gnu.h [sparc]: #define SEGMENT_SIZE 0.  Is that right??

Wed Jul 24 03:29:26 1991  David J. MacKenzie  (djm at wookumz.gnu.ai.mit.edu)

	* getopt.c, regex.c: Put alloca stuff first, where RS6000 requires it.
	* getopt.c: Use const instead of CONST, and define it to
	nothing if not __STDC__.

	* xmalloc.c (xmalloc, xrealloc): Exit with value 2 on error,
	not 1, so cmp can use it.

Tue Jul 23 15:01:26 1991  David J. MacKenzie  (djm at wookumz.gnu.ai.mit.edu)

	* getugroups.c: GID_T is int if ultrix as well as if sun.

Mon Jul 22 17:39:35 1991  David J. MacKenzie  (djm at wookumz.gnu.ai.mit.edu)

	* getugroups.c: If POSIX and not sun (bogus!), take an array
	of gid_t instead of an array of int.

Tue Jul 16 21:24:43 1991  Michael Meissner  (meissner at wookumz.gnu.ai.mit.edu)

	* obstack.h (__extension__): If compiling with a 1.xx GCC
	compiler define __extension__ as nothing.

Tue Jul 16 20:25:22 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* obstack.h [not __GNUC__] (obstack_finish): Add extra parens for clarity.
	(conditionals for __GNUC__): Do not test __STRICT_ANSI__.
	[__GNUC__] (most macros): Use __extension__ to avoid -pedantic warning.

Tue Jul 16 17:12:02 1991  Michael Meissner  (meissner at wookumz.gnu.ai.mit.edu)

	* obstack.h (obstack_finish): If compiling with a non-GCC
	compiler, use the argument (h) to point to the obstack
	structure, rather than the __o1 pointer, which only exists in
	the GNU side of the macros.
	(#if __GNUC__ && __STDC__): If -pedantic is used do not use
	the GNU CC ({}) optimizations, since these cause warnings to
	be omitted.

Tue Jul 16 01:59:58 1991  David J. MacKenzie  (djm at geech.gnu.ai.mit.edu)

	* getdate.y (TimezoneTable): #if 0 zones which would require
	storing a float in a time_t.

Fri Jul 12 17:01:58 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* obstack.h (struct obstack): New flag maybe_empty_object.
	(obstack_finish, both versions): Set the flag if allocate empty object.
	Don't make the object nonempty.  This replaces May 7 change.
	* obstack.c (_obstack_begin, _obstack_newchunk): Clear the flag.
	(_obstack_newchunk): Don't free "empty" chunk if flag is set.
	(_obstack_free): Set the flag if we change chunks.

Sat Jul  6 21:09:31 1991  David J. MacKenzie  (djm at geech.gnu.ai.mit.edu)

	* getdate.y [NEED_TZSET]: Declare `timezone'.

Thu Jun 20 01:11:31 1991  David J. MacKenzie  (djm at geech.gnu.ai.mit.edu)

	* getopt.c: Separate decls of getenv and malloc from decls of
	index and bcopy, to reduce duplicated code.

Tue Jun 11 00:11:07 1991  David J. MacKenzie  (djm at geech.gnu.ai.mit.edu)

	* regex.c (re_match_2): In case wordbeg, check whether we are
	at the start of the string before checking the previous
	character, not after, just like in case wordend.

	* getdate.y: Declare alloca for old bisons.

Mon May 20 13:13:32 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* obstack.c (obstack_free, _obstack_free): Define both, the same way.

Sun May 19 18:37:38 1991  David J. MacKenzie  (djm at churchy.gnu.ai.mit.edu)

	* getdate.y: Rename getdate to get_date to avoid conflict with SVR4.

Fri May 17 21:09:14 1991  David J. MacKenzie  (djm at churchy.gnu.ai.mit.edu)

	* filemode.c (ftypelet): Only test for S_ISBLK if it's defined.

Sat May 11 14:49:43 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* obstack.h (obstack_finish): Typo in last change (non-GNUC version).

Tue May  7 15:38:51 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* obstack.h (obstack_finish): Make each object at least 1 byte.

Tue Apr 30 13:58:16 1991  Richard Stallman  (rms at mole.gnu.ai.mit.edu)

	* getopt.c, regex.c [_AIX]: Do #pragma alloca.

Wed Apr 10 19:08:02 1991  Per Bothner  (bothner at pogo.gnu.ai.mit.edu)

	* signame.h: Make sys_siglist be const char[] if __STDC__
	is defined (thus making it compatible with signame.c).

Tue Apr  2 16:49:02 1991  Roland McGrath  (roland at churchy.gnu.ai.mit.edu)

	* glob.c: Put #ifndef alloca around alloca goop.
	(glob_vector): Put #ifdef SHELL around label used only there.

Tue Apr  2 14:32:47 1991  David J. MacKenzie  (djm at geech.gnu.ai.mit.edu)

	* glob.c: Attempt to reconcile with bash and make versions of
	#ifdefs and #includes.

	* glob.c (glob_vector): If _POSIX_SOURCE, don't use
	(non-POSIX) d_ino field of struct dirent. (from bfox)

Sun Mar 17 16:25:23 1991  Richard Stallman  (rms@mole.ai.mit.edu)

	* regex.c (PUSH_FAILURE_POINT): Was multiplying stack size by
	a big number.  Multiply by 2 instead.

	* signame.c (init_sigs): Define i.

Fri Feb 22 12:38:22 1991  Mike Haertel  (mike at apple-gunkies)

	* obstack.c (_obstack_allocated_p): Use >=, not >, when
	comparing with the beginning of the chunk, for the exact
	same reason as RMS' change below.

Thu Feb 21 21:29:50 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* obstack.h [not __GNUC__] (obstack_free): Use >, not >=,
	when comparing with beginning of chunk.

	* getopt.c (bcopy): Never declare it.

Thu Feb 21 09:18:47 1991  David J. MacKenzie  (djm at geech.ai.mit.edu)

	* glob.c: Don't declare bcopy if it is a macro.
	Use BSD strings for NeXT.  Don't include memory.h on POSIX.

Mon Feb 18 23:41:20 1991  David J. MacKenzie  (djm at geech.ai.mit.edu)

	* glob.c: Add special code for bash, #ifdef SHELL.
	(glob_pattern_p): Only recognize `[' as a metacharacter if
	there is a matching `]', for POSIX.2. (from bfox)

Mon Jan 28 00:30:39 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* crt0.c [m68k]: Add conditionals for sun_68881, sun_fpa, sun_soft.

Sun Jan 27 15:18:26 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* getopt.c (bcopy): Don't declare it if it's a macro.

Thu Jan 24 22:16:14 1991  Richard Stallman  (rms at mole.ai.mit.edu)

	* regex.c (re_compile_pattern): Don't translate chars in char set
	until the time the bits are set for them.

Sat Dec 15 18:36:50 1990  David J. MacKenzie  (djm at apple-gunkies)

	* filemode.c: Define each S_ISFOO function if not defined by
	sys/stat.h.

Sat Dec 15 15:10:14 1990  Richard Stallman  (rms at mole.ai.mit.edu)

	* obstack.h (obstack_init): Cast the chunk alloc function.
	(obstack_begin): Likewise.

Thu Dec 13 17:58:07 1990  Richard Stallman  (rms at mole.ai.mit.edu)

	* obstack.h: At all calls to _obstack_newchunk,
	enclose in (..., 0), so that both alternatives are ints.

Thu Dec  6 11:39:11 EST 1990 Jay Fenlason (hack@ai.mit.edu)

	* getdate.y:  Add support for 'date' style yymmddhhss dates.

Mon Dec  3 14:09:40 1990  Richard Stallman  (rms at mole.ai.mit.edu)

	* obstack.h:
	At all calls to _obstack_newchunk, cast the other alternative to void.

Sat Dec  2 21:56:25 1990  Roland McGrath  (roland at albert.ai.mit.edu)

	* a.out.gnu.h (N_COMM): Define this.

Thu Nov 30 00:04:35 1990  Roland McGrath  (roland at geech.ai.mit.edu)

	* a.out.gnu.h (_N_HDROFF): Use SEGMENT_SIZE rather than a hard-coded
	1024.  What moron did this??

Wed Nov 29 17:41:09 1990  Roland McGrath  (roland at albert.ai.mit.edu)

	* a.out.gnu.h [vax, hp300, pyr] (SEGMENT_SIZE): Define as PAGE_SIZE,
	not page_size.

Wed Nov 14 00:35:16 1990  David J. MacKenzie  (djm at apple-gunkies)

	* regex.c (SIGN_EXTEND_CHAR): If UNSIGNED_CHAR is defined, use
	an alternate definition (suggested in the GNU grep README).

Thu Nov  8 12:08:52 1990  David J. MacKenzie  (djm at apple-gunkies)

	* filemode.c (ftypelet): Pass a mode_t instead of unsigned
	short, so it works on Evans' Minix.  If _POSIX_SOURCE is not
	defined, define mode_t as unsigned short.  Define S_ISTYPE
	macros if needed.  Use them.

	* modechange.c: Use S_ISDIR.  Define if needed.

Fri Oct 26 16:50:01 1990  Richard Stallman  (rms at mole.ai.mit.edu)

	* obstack.c (_obstack_newchunk): If old_chunk becomes empty, free it.

Mon Oct 15 13:50:17 1990  Richard Stallman  (rms at mole.ai.mit.edu)

	* obstack.h (obstack_free): In non-GNU C case, don't use
	value of _obstack_free.

Sun Oct 14 18:51:51 1990  Richard Stallman  (rms at mole.ai.mit.edu)

	* crt0.c (new hp assembler): Double flag_fpa and flag_68881 if %d2!=0.

	* alloca.s [MOTOROLA_DELTA]: Avoid putting sp above stack top.

Mon Oct  1 16:20:02 EDT 1990	Jay Fenlason (hack@ai.mit.edu)

	* obstack.h  Declare _obstack_free and _obstack_begin as void instead
	of int.  Otherwise, GCC won't let you compile obstack.c

Fri Sep 28 23:53:28 1990  Richard Stallman  (rms at mole.ai.mit.edu)

	* obstack.h: Declare the functions we use from obstack.c.
	(obstack_blank): In both definitions, rearrange pointer math to avoid
	pointing past end of allocated memory.

Wed Sep 19 21:09:26 1990  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* obstack.h (obstack_int_grow): In non-GCC case, don't try to
	post-increment a cast.

Mon Sep  3 22:18:38 1990  David J. MacKenzie  (djm at apple-gunkies)

	* error.c [DOPRNT_MISSING]: Pass args as a fixed number of
	`char *'.

Sun Sep  2 20:51:02 1990  David J. MacKenzie  (djm at apple-gunkies)

	* regex.c: Use standard string functions if STDC_HEADERS is
	defined.

Fri Aug 31 06:59:47 1990  Jim Kingdon  (kingdon at albert.ai.mit.edu)

	* getopt1.c (getopt_long{,_only}): If opt_index is NULL, don't
	try to store into *opt_index.

Tue Aug 28 18:45:16 1990  David J. MacKenzie  (djm at albert.ai.mit.edu)

	* regex.c: Include some system header files if appropriate.

Wed Aug 15 14:38:15 1990  David J. MacKenzie  (djm at apple-gunkies)

	* regex.c: Define isgraph if ctype.h doesn't (as on Sequents).

Sun Aug 12 00:20:19 1990  David J. MacKenzie  (djm at albert.ai.mit.edu)

	* getopt.c (getopt): If optstring starts with '+', don't
	permute; this is for utilities like time, nice, xargs, and
	env, which don't want to mix up their options with those of
	the programs they run, but don't want to turn off permuting
	for those programs by setting _POSIX_OPTION_ORDER.

Fri Aug  3 14:25:35 1990  David J. MacKenzie  (djm at pogo.ai.mit.edu)

	* getopt.c (main), getopt1.c (main): Read option chars into an
	int, not a char.

	* getopt.c (getopt): Increment `optind' after finding
	unrecognized or ambiguous long named option.

Thu Jul  5 09:50:25 1990  David J. MacKenzie  (djm at apple-gunkies)

	* getopt.c: If long option's `flag' field is zero, return the
	contents of the `val' field.

Fri Jun 29 01:30:22 1990  David J. MacKenzie  (djm at apple-gunkies)

	* getopt.h: Mention in comment how to handle long options that
	don't just store a constant in an int.

Mon Jun 25 18:15:46 1990  David J. MacKenzie  (djm at albert.ai.mit.edu)

	* filemode.c (ftypelet): Distinguish between regular files and
	unknown file types using '-' and '?'.

Sat Jun 16 11:18:26 1990  David J. MacKenzie  (djm at albert.ai.mit.edu)

	* getopt.c: If STDC_HEADERS or __GNU_LIBRARY__ is defined,
	include ANSI C header files.

Thu Jun 14 13:21:42 1990  David J. MacKenzie  (djm at apple-gunkies)

	* glob.c (glob_match): Eliminate '^' as a character class
	negator, leaving just the POSIX '!'.

Thu Jun  7 01:01:40 1990  Roland McGrath  (mcgrath at paris.Berkeley.EDU)

	* glob.c: __GNU_LIBRARY__ implies DIRENT and STDC_HEADERS.

Thu Jun  7 03:45:33 1990  David J. MacKenzie  (djm at albert.ai.mit.edu)

	* glob.c: Use <dirent.h> if DIRENT is defined, not _POSIX_SOURCE.

Wed Jun  6 00:05:03 1990  David J. MacKenzie  (djm at albert.ai.mit.edu)

	* glob.c (glob_filename): Remove tilde expansion code.

Tue Jun  5 00:35:48 1990  David J. MacKenzie  (djm at albert.ai.mit.edu)

	* error.c: Use VPRINTF_MISSING instead of VPRINTF to control
	use of _doprnt.
	(error): Use strerror.
	(strerror) [!STDC_HEADERS]: New function.

	* glob.c: Optionally support POSIX and STDC headers.
	(glob_filename): Make tilde expansion work for patterns
	containing subdirectories.

Mon Jun  4 16:31:40 1990  David J. MacKenzie  (djm at albert.ai.mit.edu)

	* glob.c (glob_match): Allow '!' as well as '^' to negate
	character classes.  Check for end of filename when comparing
	with char class.  Check for end of pattern after backslash in
	character class.
	(glob_vector): Only calculate D_NAMLEN once, for efficiency.
	Don't allocate name_vector if a previous malloc failed.
	(glob_dir_to_array): Make string copying more efficient.
	(glob_filename): directory_size was off by 1.
	Reallocation of result had '1' instead of 'l'.

Thu May 31 01:45:16 1990  David J. MacKenzie  (djm at apple-gunkies)

	* glob.c: Reformat to resemble the bash version more.

	* filemode.c: If _POSIX_SOURCE is defined, use POSIX macro
	names for mode bits.

Sat May 19 15:17:42 1990  David J. MacKenzie  (djm at albert.ai.mit.edu)

	* filemode.c (mode_string): New function.
	(filemodestring): Reimplement in terms of mode_string.
	(ftypelet): Take an unsigned short instead of a struct stat *.
	Fix up comments.

Thu May 10 12:57:11 1990  David J. MacKenzie  (djm at albert.ai.mit.edu)

	* error.c: If __STDC__, use stdarg instead of varargs.

Tue May  1 16:07:32 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* alloca.s [hp9000s300]: Avoid using sp as temporary.

Fri Apr 20 16:58:24 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* obstack.c, obstack.h (obstack_free): Use >, not >=, to compare
	object with chunk address.

Mon Apr  9 15:11:22 1990  Jim Kingdon  (kingdon at pogo.ai.mit.edu)

	* a.out.encap.h: Protect against multiple inclusion.

Fri Apr  6 23:27:46 1990  Jim Kingdon  (kingdon at apple-gunkies.ai.mit.edu)

	* a.out.gnu.h (enum machine_type): Put missing comma after M_SPARC.

Mon Apr  2 04:49:18 1990  Jim Kingdon  (kingdon at pogo.ai.mit.edu)

	* malloc.c: Make get_lim_data always "static void" regardless
	of #ifdefs.  Declare it before using it.

Mon Mar 26 00:36:52 1990  David J. MacKenzie  (djm at spike.ai.mit.edu)

	* getopt.c (getopt): For long-named options that take optional
	args, never use the next argv-element as an arg; args for
	these must be part of the same argv-element, separated from
	the option name by a '='.  This makes them consistent with how
	short-named options with optional args are handled.

	* getopt.h, getopt.c, getopt1.c: Add some const declarations
	if __STDC__.

Sun Mar  4 12:11:31 1990  Kathy Hargreaves  (kathy at hayley)

	* regex.h: Added syntax bit RE_NO_EMPTY_RANGES which is set if
	an ending range point has to collate higher or equal to the
	starting range point.
	Added syntax bit RE_NO_HYPHEN_RANGE_END which is set if a hyphen
	can't be an ending range point.
	Set to two above bits in RE_SYNTAX_POSIX_BASIC and
	RE_SYNTAX_POSIX_EXTENDED.

	regex.c: (re_compile_pattern): Don't allow empty ranges if the
	RE_NO_EMPTY_RANGES syntax bit is set.
	Don't let a hyphen be a range end if the RE_NO_HYPHEN_RANGE_END
	syntax bit is set.
	(ESTACK_PUSH_2): renamed this PUSH_FAILURE_POINT and made it
	push all the used registers on the stack, as well as the number
	of the highest numbered register used, and (as before) the two
	failure points.
	(re_match_2): Fixed up comments.
	Added arrays best_regstart[], best_regstart_seg1[], best_regend[],
	and best_regend_seg1[] to keep track of the best match so far
	whenever reach the end of the pattern but not the end of the
	string, and there are still failure points on the stack with
	which to backtrack; if so, do the saving and force a fail.
	If reach the end of the pattern but not the end of the string,
	but there are no more failure points to try, restore the best
	match so far, set the registers and return.
	Compacted some code.
	In stop_memory case, if the subexpression we've just left is in
	a loop, push onto the stack the loop's on_failure_jump failure
	point along with the current pointer into the string (d).
	In finalize_jump case, in addition to popping the failure
	points, pop the saved registers.
	In the fail case, restore the registers, as well as the failure
	points.


Sun Feb 18 15:08:10 1990  Kathy Hargreaves  (kathy at hayley)

	* regex.c: (global): Defined a macro GET_BUFFER_SPACE which
	makes sure you have a specified number of buffer bytes
	allocated.
	Redefined the macro BUFPUSH to use this.
	Added comments.

	(re_compile_pattern): Call GET_BUFFER_SPACE before storing or
	inserting any jumps.

	(re_match_2): Set d to string1 + pos and dend to end_match_1
	only if string1 isn't null.
	Force exit from a loop if it's around empty parentheses.
	In stop_memory case, if found some jumps, increment p2 before
	extracting address to which to jump. Also, don't need to know
	how many more times can jump_n.
	In begline case, d must equal string1 or string2, in that order,
	only if they are not null.
	In maybe_finalize_jump case, skip over start_memorys' and
	stop_memorys' register numbers, too.

Thu Feb 15 15:53:55 1990  Kathy Hargreaves  (kathy at hayley)

	* regex.c (BUFPUSH): off by one goof in deciding whether to
	EXTEND_BUFFER.

Wed Jan 24 17:07:46 1990  Kathy Hargreaves  (kathy at hayley)

	* regex.h: Moved definition of NULL to here.
	Got rid of ``In other words...'' comment.
	Added to some comments.

	regex.c: (re_compile_pattern): Tried to bulletproof some code,
	i.e., checked if backward references (e.g., p[-1]) were within
	the range of pattern.

	(re_compile_fastmap): Fixed a bug in succeed_n part where was
	getting the amount to jump instead of how many times to jump.

	(re_search_2): Changed the name of the variable ``total'' to
	``total_size.''
	Condensed some code.

	(re_match_2): Moved the comment about duplicate from above the
	start_memory case to above duplicate case.

	(global): Rewrote some comments.
	Added commandline arguments to testing.


Wed Jan 17 11:47:27 1990  Kathy Hargreaves  (kathy at hayley)

	* regex.c: (global): Defined a macro STORE_NUMBER which stores a
	number into two contiguous bytes.  Also defined STORE_NUMBER_AND_INCR
	which does the same thing and then increments the pointer to the
	storage place to point after the number.
	Defined a macro EXTRACT_NUMBER which extracts a number from two
	continguous bytes.  Also defined EXTRACT_NUMBER_AND_INCR which
	does the same thing and then increments the pointer to the
	source to point to after where the number was.


Tue Jan 16 12:09:19 1990  Kathy Hargreaves  (kathy at hayley)

	* regex.h: Incorporated rms' changes.
	Defined RE_NO_BK_REFS syntax bit which is set when want to
	interpret back reference patterns as literals.
	Defined RE_NO_EMPTY_BRACKETS syntax bit which is set when want
	empty bracket expressions to be illegal.
	Defined RE_CONTEXTUAL_ILLEGAL_OPS syntax bit which is set when want
	it to be illegal for *, +, ? and { to be first in an re or come
	immediately after a | or a (, and for ^ not to appear in a
	nonleading position and $ in a nontrailing position (outside of
	bracket expressions, that is).
	Defined RE_LIMITED_OPS syntax bit which is set when want +, ?
	and | to always be literals instead of ops.
	Fixed up the Posix syntax.
	Changed the syntax bit comments from saying, e.g., ``0 means...''
	to ``If this bit is set, it means...''.
	Changed the syntax bit defines to use shifts instead of integers.

	* regex.c: (global): Incorporated rms' changes.

	(re_compile_pattern): Incorporated rms' changes
	Made it illegal for a $ to appear anywhere but inside a bracket
	expression or at the end of an re when RE_CONTEXTUAL_ILLEGAL_OPS
	is set. Made the same hold for $ except it has to be at the
	beginning of an re instead of the end.
	Made the re "[]" illegal if RE_NO_EMPTY_BRACKETS is set.
	Made it illegal for | to be first or last in an re, or immediately
	follow another | or a (.
	Added and embellished some comments.
	Allowed \{ to be interpreted as a literal if RE_NO_BK_CURLY_BRACES
	is set.
	Made it illegal for *, +, ?, and { to appear first in an re, or
	immediately follow a | or a ( when RE_CONTEXTUAL_ILLEGAL_OPS is set.
	Made back references interpreted as literals if RE_NO_BK_REFS is set.
	Made recursive intervals either illegal (if RE_NO_BK_CURLY_BRACES
	isn't set) or interpreted as literals (if is set), if RE_INTERVALS
	is set.
	Made it treat +, ? and | as literals if RE_LIMITED_OPS is set.
	Cleaned up some code.


Thu Dec 21 15:31:32 1989  Kathy Hargreaves  (kathy at hayley)

	* regex.c: (global): Moved RE_DUP_MAX to regex.h and made it
	equal 2^15 - 1 instead of 1000.
	Defined NULL to be zero.
	Moved the definition of BYTEWIDTH to regex.h.
	Made the global  variable obscure_syntax nonstatic so the tests in
	another file could use it.

	(re_compile_pattern): Defined a maximum length (CHAR_CLASS_MAX_LENGTH)
	for character class strings (i.e., what's between the [: and the
	:]'s).
	Defined a macro SET_LIST_BIT(c) which sets the bit for C in a
	character set list.
	Took out comments that EXTEND_BUFFER clobbers C.
	Made the string "^" match itself, if not RE_CONTEXT_IND_OPS.
	Added character classes to bracket expressions.
	Change the laststart pointer saved with the start of each
	subexpression to point to start_memory instead of after the
	following register number.  This is because the subexpression
	might be in a loop.
	Added comments and compacted some code.
	Made intervals only work if preceded by an re matching a single
	character or a subexpression.
	Made back references to nonexistent subexpressions illegal if
	using POSIX syntax.
	Made intervals work on the last preceding character of a
	concatenation of characters, e.g., ab{0,} matches abbb, not abab.
	Moved macro PREFETCH to outside the routine.

	(re_compile_fastmap): Added succeed_n to work analogously to
	on_failure_jump if n is zero and jump_n to work analogously to
	the other backward jumps.

	(re_match_2): Defined macro SET_REGS_MATCHED to set which
	current subexpressions had matches within them.
	Changed some comments.
	Added reg_active and reg_matched_something arrays to keep track
	of in which subexpressions currently have matched something.
	Defined MATCHING_IN_FIRST_STRING and replaced ``dend == end_match_1''
	with it to make code easier to understand.
	Fixed so can apply * and intervals to arbitrarily nested
	subexpressions.  (Lots of previous bugs here.)
	Changed so won't match a newline if syntax bit RE_DOT_NOT_NULL is set.
	Made the upcase array nonstatic so the testing file could use it also.

	(main.c): Moved the tests out to another file.

	(tests.c): Moved all the testing stuff here.


Sat Nov 18 19:30:30 1989  Kathy Hargreaves  (kathy at hayley)

	* regex.c: (re_compile_pattern): Defined RE_DUP_MAX, the maximum
	number of times an interval can match a pattern.
	Added macro GET_UNSIGNED_NUMBER (used to get below):
	Added variables lower_bound and upper_bound for upper and lower
	bounds of intervals.
	Added variable num_fetches so intervals could do backtracking.
	Added code to handle '{' and "\{" and intervals.
	Added to comments.

	(store_jump_n): (Added) Stores a jump with a number following the
	relative address (for intervals).

	(insert_jump_n): (Added) Inserts a jump_n.

	(re_match_2): Defined a macro ESTACK_PUSH_2 for the error stack;
	it checks for overflow and reallocates if necessary.

	* regex.h: Added bits (RE_INTERVALS and RE_NO_BK_CURLY_BRACES)
	to obscure syntax to indicate whether or not
	a syntax handles intervals and recognizes either \{ and
	\} or { and } as operators.  Also added two syntaxes
	RE_SYNTAX_POSIX_BASIC and RE_POSIX_EXTENDED and two command codes
	to the enumeration regexpcode; they are succeed_n and jump_n.


Sat Nov 18 19:30:30 1989  Kathy Hargreaves  (kathy at hayley)

	* regex.c: (re_compile_pattern): Defined INIT_BUFF_SIZE to get rid
	of repeated constants in code.  Tested with value 1.
	Renamed PATPUSH as BUFPUSH, since it pushes things onto the
	buffer, not the pattern.  Also made this macro extend the buffer
	if it's full (so could do the following):
	Took out code at top of loop that checks to see if buffer is going
	to be full after 10 additions (and reallocates if necessary).

	(insert_jump): Rearranged declaration lines so comments would read
	better.

	(re_match_2): Compacted exactn code and added more comments.

	(main): Defined macros TEST_MATCH and MATCH_SELF to do
	testing; took out loop so could use these instead.


Tue Oct 24 20:57:18 1989  Kathy Hargreaves  (kathy at hayley)

	* regex.c (re_set_syntax): Gave argument `syntax' a type.
	(store_jump, insert_jump): made them void functions.

Tue Mar  6 23:29:26 1990  Jim Kingdon  (kingdon at pogo.ai.mit.edu)

	* signame.c (sig_number): Return -1 if not found.

Fri Mar  2 16:32:20 1990  Jim Kingdon  (kingdon at pogo.ai.mit.edu)

	* signame.h [!__STDC__]: Remove comments cuz they're in [__STDC__].
	signame.{c,h}: Make sig_abbrev return char *, not const char *.

Thu Mar  1 14:10:32 1990  David J. MacKenzie  (djm at albert.ai.mit.edu)

	* getopt.c (getopt): If _getopt_long_only, for options that
	start with '-' and are not a valid long-named option, only
	interpret them as short options if the first letter is a valid
	short option.  Otherwise the error message would be printed
	naming the short option letter instead of the whole option, and
	if, for example, there is a 'T' long option, '-Tfoo' would print
	"prog: invalid option `-T'" (which is wrong).

Wed Feb 28 19:38:49 1990  David J. MacKenzie  (djm at albert.ai.mit.edu)

	* signame.h: Use ANSI C prototypes ifdef __STDC__.
	* signame.c: Add const declarations ifdef __STDC__.

Wed Feb 28 19:06:36 1990  Jim Kingdon  (kingdon at pogo.ai.mit.edu)

	* signame.c (SIGPWR): Change name to "Power failure".

Wed Feb 28 18:46:36 1990  David J. MacKenzie  (djm at albert.ai.mit.edu)

	* getopt.h: ifdef out decl of _getopt_option_name.

Wed Feb 28 15:05:54 1990  Jim Kingdon  (kingdon at pogo.ai.mit.edu)

	* getopt.c (getopt): Change typo (optstr -> optstring).

	* getopt.c: Remove all _getopt_option_name stuff.
	If RETURN_IN_ORDER, return one, not zero, to distinguish between
	this and a long option.

	* signame.{c,h}: New files.

Tue Feb 27 13:32:45 1990  David J. MacKenzie  (djm at rice-chex)

	* getopt.c (getopt): In RETURN_IN_ORDER mode, set
	_getopt_option_name to zero when returning a non-option arg in
	optarg, to distinguish it from getting a long-named option
	that takes an arg.
	Print the correct option-introducing character (can be
	either `+' or `-') in error messages for long-named options.
	If _getopt_long_only is nonzero, no long options match an
	option arg that starts with a dash, and there are valid short
	options, try matching the arg against the short options.

Thu Feb 22 19:50:49 1990  Jim Kingdon  (kingdon at pogo.ai.mit.edu)

	* obstack.c (_obstack_begin): Use slightly smaller default size
	so that it still fits in one block if malloc range checking is
	in use.

Mon Feb 19 15:41:14 1990  Jim Kingdon  (kingdon at pogo.ai.mit.edu)

	* getopt1.c (getopt_long_only): New function.
	getopt.h: Declare getopt_long_only and _getopt_long_only.
	getopt.c: Define _getopt_long_only.
	(getopt): If _getopt_long_only, accept '-' as well as '+' to start
	long option.

Sat Feb  3 16:28:00 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* alloca.s [MOTOROLA_DELTA]: New alternative for 68k.

Sun Jan 28 22:29:17 1990  David J. MacKenzie  (djm at hobbes.ai.mit.edu)

	* getopt1.c (main): Fix bug that prevented the first long
	option from being recognized.

	* getopt.c: Move comment on the return value for long-named
	options to a more appropriate place.

Wed Jan 24 19:11:27 1990  David J. MacKenzie  (djm at hobbes.ai.mit.edu)

	* glob.c (glob_filename): Change '==' to '=' in what was
	clearly supposed to be an assignment statement.

Mon Jan 22 18:14:40 1990  David J. MacKenzie  (djm at rice-chex)

	* regcmp.c (regcmp): Allocate whole return value with one call
	to malloc, so freeing the buffer works the same way as it does
	on System V.

Tue Jan 16 22:17:03 1990  Jim Kingdon  (kingdon at pogo.ai.mit.edu)

	* a.out.gnu.h [hp300, pyr]: Define SEGMENT_SIZE to be page_size

Wed Jan 10 06:57:10 1990  David J. MacKenzie  (djm at hobbes.ai.mit.edu)

	* glob.c: Use <sys/ndir.h> if SYSNDIR is defined (some Xenix
	systems need this).

Mon Jan  8 12:33:55 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* regex.c (re_compile_pattern): Add missing break in prev change.

Mon Jan  1 12:16:56 1990  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* regex.c (re_compile_pattern): Ignore \<, etc., checking
	context of $.

Mon Dec 25 12:00:16 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* obstack.h (obstack_object_size, obstack_room): Eliminate _obstack.

Sat Dec 23 16:20:13 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* regex.c (re_compile_fastmap): Put back deleted local k.

Wed Dec 20 02:03:43 1989  David J. MacKenzie  (djm at hobbes.ai.mit.edu)

	* getopt.h: Add function decls/prototypes for getopt and
	getopt_long.

	* getopt.c: Bring some comments up to date with the code.

Tue Dec 19 03:12:48 1989  David J. MacKenzie  (djm at hobbes.ai.mit.edu)

	* regex.h: Add function prototypes if __STDC__ is defined.

	* regex.c: Declare some external functions if emacs is not
	defined.  Add a few casts.
	(re_compile_fastmap): Remove unused variable.

Mon Dec 18 14:12:53 1989  David J. MacKenzie  (djm at hobbes.ai.mit.edu)

	* getopt.c: Declare some external functions.

Mon Nov 20 19:57:00 1989  Jim Kingdon  (kingdon at hobbes.ai.mit.edu)

	* a.out.gnu.h: Wrap N_MAGIC in #ifndef...#endif.

Fri Nov 17 03:12:28 1989  Jim Kingdon  (kingdon at hobbes.ai.mit.edu)

	* a.out.gnu.h: Wrap many things in #ifndef...#endif so file
	can be used in addition to a system-supplied a.out.h.

Tue Oct 31 17:03:06 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* getopt1.c (getopt_long): Delete mistaken test for index == 0.

Wed Oct 25 17:50:51 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* getopt.c (getopt): Set option_index properly for long options.

Tue Oct 24 23:41:06 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* getopt1.c (main): Fix initializers.

	* getopt.c (getopt): Was off by 1, checking for missing arg
	for long option.

Wed Oct 18 13:15:18 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* getopt.c: Improve comments and an error message.
	Don't initialize most variables, for the sake of unexec.

Tue Oct 17 03:06:14 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* getopt.c (getopt): Uniformly don't recognize `+' as option
	if program doesn't use long options.

	* getopt.c (getopt): Complain about ambiguous option abbreviations.
	But accept any exact match even if ambiguous.

	* getopt.c (getopt): Report error for unrecognized long options.

Sat Sep 30 14:47:29 1989  Jim Kingdon  (kingdon at hobbes.ai.mit.edu)

	* malloc.c: "#else rcheck" -> "#else /* rcheck */".

Tue Sep 19 19:00:58 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* regex.h: Define RE_SYNTAX_POSIX_AWK.

Sun Sep 17 15:20:46 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* regex.h: Last change in RE_SYNTAX_AWK broke RE_SYNTAX_EGREP.

Sat Sep 16 01:53:53 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* regex.c (re_search_2): Stupid error propagating return code -2.

Tue Sep 12 13:50:05 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* crt0.c [ISI68K]: Reinstall label __start.

Tue Sep  5 15:43:24 1989  Jim Kingdon  (kingdon at hobbes.ai.mit.edu)

	* malloc.c: Define USG if hpux defined.

Mon Aug 28 17:50:27 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* regex.c (re_compile_pattern): With RE_AWK_CLASS_HACK, \ quotes
	all characters inside [...].

Sat Aug 26 00:20:26 1989  Richard Stallman  (rms at apple-gunkies.ai.mit.edu)

	* regex.h: Define RE_AWK_CLASS_HACK and change RE_SYNTAX_AWK.
	* regex.c (re_compile_pattern): Change syntax of \ inside [...]
	when RE_AWK_CLASS_HACK is set.

	* regex.c (re_match_2): Declare strings to search as char *,
	and cast inside the function.

Sat Aug 19 14:55:19 1989  Richard Stallman  (rms at apple-gunkies.ai.mit.edu)

	* regex.c (EXTEND_BUFFER): Don't clobber c; do pointer arith
	to update b in portable fashion.

Thu Aug 17 15:56:36 1989  Joseph Arceneaux  (jla at spiff)

	* regex.c (EXTEND_BUFFER): Set c to bufp->buffer - old_buffer.

Sun Aug 13 15:21:02 1989  Richard Stallman  (rms at hobbes.ai.mit.edu)

	* obstack.h: Typos in comments.

Sun Jul 30 20:24:52 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* obstack.c (_obstack_newchunk): Never copy bytes past the end
	of the object.  Copy by COPYING_UNIT only for complete units
	that fit in the object; then copy remaining bytes singly.
	If obstack has less than the default alignment,
	copy all bytes singly.

Thu Jul 20 01:51:56 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* crt0.c: Delete spaces at ends of lines.
	[ISI68K]: Unconditionally enclose asms in function `_start'.
	Delete assembler definition of that function.
	Use a6, not fp, as register name.

Sun Jul 16 16:32:52 1989  Jim Kingdon  (kingdon at hobbes.ai.mit.edu)

	* a.out.encap.h: Remove #ifdef ALTOS code because according to
	Jyrki Kuoppala <jkp@sauna.hut.fi> it doesn't do what he put it
	in to do (which was work around a kernel bug).

Thu Jun 29 19:59:16 1989  Randall Smith  (randy at apple-gunkies.ai.mit.edu)

	* malloc.c (valloc): Changed to be conditionalized on ! hpux
	instead of ! HPUX (hpux this is generated by the OS).

Tue Jun 20 21:14:57 1989  Roland McGrath  (roland at hobbes.ai.mit.edu)

	* Makefile: include ../Makerules.
	Added .y->.tab.c implicit rule and rule to make unctime.tab.o.
	Use $(archpfx) in front of object files.
	Made some rules use $({LINK,COMPILE}.?) instead of $(CC), etc.

Sat Jun 17 14:22:53 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* regex.h (struct re_pattern_buffer): Make ALLOCATED and USED long.
	* regex.c (EXTEND_BUFFER): Use long constants to compare with them.
	Move assignment outside if-condition.
	Do pointer relocation arithmetic in strictly correct order.

Sat Jun 10 00:26:01 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* glob.c [USG]: Define rindex; declare getpwent, etc.

Wed Jun  7 22:36:51 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* alloca.s [hp9000s300]: Increase MAXREG for fpregs.

	* crt0.c: For new hp assembler, define float_loc as fixed location.

Wed May 31 17:51:41 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* a.out.gnu.h: Define SEGMENT_SIZE for Altos.

Mon May 22 17:59:17 1989  Roland McGrath  (mcgrath at tully.Berkeley.EDU)

	* glob.c: Several changes for USG compatibility, etc. that have been
	in the version distributed with Make for a while.
	Today added new variable glob_tilde which makes glob_filename expand
	~ or ~USER, and made glob_filename, when given a directory with the
	file name pattern, return the directory alone.

Wed May 17 16:45:36 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* getopt.c (getopt): Add feature for long-named options;
	starting with `+'.

Mon May  8 17:21:40 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* crt0.c [sps7]: Handle mostly like orion, etc.

Fri May  5 15:26:58 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* obstack.c (_obstack_free): If __STDC__, define this as well as
	obstack_free.

	* crt0.c [hp9000s300]: Give fixed address to fpa_loc, per cph.

Tue May  2 14:42:26 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* crt0.c [hp9000s300]: Allocate fpa_loc and float_loc.

Sun Apr 23 00:22:37 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* a.out.encap.h (COFF_MAGIC, SEGMENT_SIZE, N_DATADDR):
	Alternate definitions if ALTOS or if m68k.

	* getopt.c: If __GNUC__, use builtin alloca.
	Define index if USG.

Wed Apr 19 13:03:18 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* crt0.c [m68000]: Call finitfp_() if nec on Sun.

Fri Apr  7 22:22:38 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* malloc.c: Rename BSD42 to BSD4_2, as in Emacs.
	If `emacs', let config.h decide whether to define that.
	(morecore): Change malloc_sbrk_used, etc., after error check.

Thu Mar 23 18:21:56 1989  Randall Smith  (randy at apple-gunkies.ai.mit.edu)

	* glob.c: Added new copyright notice.

Thu Mar 16 16:56:54 1989  Randall Smith  (randy at gluteus.ai.mit.edu)

	* malloc.c (malloc): Made sure that the MAGIC1 bytes written at
	the end of the space were positioned with regard to the new
	offset.

Fri Mar 10 16:50:12 1989  Randall Smith  (randy at sugar-bombs.ai.mit.edu)

	* malloc.c (realloc): Make sure that the start of the mhead is
	found correctly even when sizeof (struct mhead) doesn't divide 8
	properley.

	* malloc.c (morecore): Added code to reset sigmask to correct
	value on a "no-more-room" return.

	* malloc.c (malloc, free, realloc): Leave 8 bytes of space, not 4,
	before the actual data block.

Fri Mar  3 10:52:14 1989  Randall Smith  (randy at apple-gunkies.ai.mit.edu)

	* a.out.encap.h, stab.def: Modified to use new GNU General Public
	License.

Thu Mar  2 15:45:46 1989  Randall Smith  (randy at apple-gunkies.ai.mit.edu)

	* a.out.gnu.h [nlist]: Made n_type an unsigned char (for compilers
	where chars default to signed, which can screw up comparisons) and
	made n_value an unsigned long.

Wed Mar  1 13:04:25 1989  Randall Smith  (randy at apple-gunkies.ai.mit.edu)

	* getopt.c: Changed copyright header to reflect new GNU General
	public license.

Fri Feb 24 13:00:21 1989  Randall Smith  (randy at gluteus.ai.mit.edu)

	* regex.c, regex.h: Changed copyright header to reflect new GNU
	General public license.

Sun Feb 19 08:02:01 1989  Richard Stallman  (rms at apple-gunkies.ai.mit.edu)

	* getopt.c: If option argument is missing, return `?'.

Fri Feb 10 13:31:05 1989  Randall Smith  (randy at plantaris.ai.mit.edu)

	* stab.def: Changed comment on LSYM; also used for type
	descriptions.

Wed Feb  1 23:15:39 1989  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* filemode.c (setst): Give `T' if sticky but not executable.

Mon Jan  9 10:31:20 1989  Pace Willisson  (pace at prep.ai.mit.edu)

	* a.out.gnu.h:  Change a_magic to a_info, and define macros
	to access it.  Programs that refer to the magic number should
	access it with N_MAGIC (exec), and set it with N_SET_MAGIC (exec,
	val).  This is a step to having a header that is unambiguous
	between big and little endian machines.

	* a.out.encap.h: Use macros to access a_info fields.

Wed Dec 28 18:58:53 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* crt0.c (hp9000s300): Changes from Jinx: new flag `flag_fpa'
	set with a subx.  d0 loaded from a0 and doubled before first subx.

Tue Dec 20 22:13:49 1988  Richard Stallman  (rms at sugar-bombs.ai.mit.edu)

	* a.out.gnu.h (N_DATADDR): Always define this if not already defined.
	(SEGMENT_SIZE): Define this for the vax.

Tue Dec 20 14:57:38 1988  Pace Willisson  (pace at prep.at.mit.edu)

	* a.out.gnu.h: Changed exec header to have two bytes
	(a_machtype and a_flags) instead of a_encap.  a_machtype
	is the same as on modern sun systems; a_flags can have
	machine specific flags.  (There may be some endian problems
	here:  You would like to have the magic number be the
	first two bytes in the file, and then the next two could
	be these options.  It looks like the 68000 definitions
	have to declare the options first to force this to happen.)
	Defined M_386 for a_machtype.
	Added definitions for N_DATOFF, N_TRELOFF, N_DRELOFF,
	N_DATADDR, N_BSSADDR (which are present in sun release 4.0)

	* a.out.encap.h: Defined A_ENCAP as an a_flags value.  Changed
	uses of a_encap to a_flags & A_ENCAP

Wed Dec  7 11:18:30 1988  Randall Smith  (randy at apple-gunkies.ai.mit.edu)

	* malloc.c: Added functions malloc_mem_used and malloc_mem_free to
	return total amount of space allocated to program, and total space
	left in free pool before sbrk must be called.

Tue Nov 22 13:05:25 1988  Randall Smith  (randy at cream-of-wheat.ai.mit.edu)

	* glob.c: Incorporated some bug fixes and changes sent by Brian.
	None of them look disasterous.

Fri Oct 21 12:40:24 1988  Randall Smith  (randy at cream-of-wheat.ai.mit.edu)

	* malloc.c (free): Added code (within #ifdef rcheck) to given
	slightly more verbose warnings then an abort if free was called
	with garbage.

Local Variables:
add-log-time-format: current-time-string
mode: indented-text
left-margin: 8
version-control: never
End:


Copyright (C) 1988-1998 Free Software Foundation, Inc.

Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.
