2011-01-23  Adrian Mariano  <adrian@alpaca>

	* parse.y (yylex): Tweaked scanner to raise a new error (BADNUMBER)
	when a number is immediately followed by more numeric characters.
	This prevents things like 1.2.3 and 1..2 which were both legal and
	had possibly unexpected parsings before.  Added new error code to
	units.h and new error message to units.c.  

2010-05-20  Adrian Mariano  <adrian@alpaca>

	* units.c: Added utf8 support.  Added code to check for !utf8 in
	units.dat.  Added better checking for locale.  Added strwidth() to
	determine with of a utf8 string, and corrected code to use this
	function where appropriate.  

2009-12-05  Adrian Mariano  <adrian@alpaca>

	* units.c (rootunit): Fixed bug (n & 1==0) is always false

	* Numerous minor changes for eliminating warnings with -Wall


2009-10-03 Adrian Mariano  <adrian@alpaca>

	* units.c (main): Changed RL_READLINE_VERSION test from > to >=.

2007-05-18  adrian  <adrian@cox.net>

	* units.c (personalunitsfile): Added personalunitsfile() function
	to find ~/.units.dat if it exists.  Added code in main() to load
	this file (first) when no -f specifications occur. 
	(tryallunits): Modified to perform searching either for
	conformable units or for text matching units.  This required
	changes to addtolist() as well.

	* parse.y: Added entry to support x^-y when - is not a multiply
	operator.  Added MULTSTAR type and support for lower multiply
	precedence for '*'.  Added special check for '**' operator as the
	old code didn't work.

2006-02-26  adrian  <adrian@cox.net>

	* units.c: Added -1/--one-line option to display one line of
	output only.

	* units.c: Added --compact option to print output with only the
	conversion factor.  

	* units.c: Changed verbose variable.  Now it is 1 for normal
	output, zero for less output and 2 for more verbose output.  The
	--compact option sets it to zero, and --verbose sets it to 2.  The
	--terse option now simply sets other options. 

2005-09-10  adrian  <adrian@cox.net>

	* parse.y: Declared err as static and added %name-prefix to parser
	to make it possible to use units as a library.  Note that
	declaring err as static also averts a bus error on the Intel Mac.

2004-12-12  adrian  <adrian@cox.net>

	* units.c (checkunits): Added check for units that use '-' as a
	binary operator.  These units will act differently depending on
	the way the program is invoked, so print a warning.  

	* units.c (compareproducts): Modified to use a pointer to a function
	to decide whether a unit should be regarded as dimensionless.  Added
	functions ignore_dimless(), ignore_primitive() and ignore_nothing()
        to use for invoking compareproducts.  Modified compareunits to take
	this parameter as well.  
	
2004-06-20  Adrian Mariano  <adrian@vizcacha.cox.net>

        * parse.y: Added MINUS token and changed lexer to treat '-'
	according to the global variable minusminus either as MINUS or in
	the old fashion as MULTMINUS.
 
	* parse.y (funcunit): Added call to freeunit() to close memory leak.

	* units.c (compareproducts): Altered this function to use
	isdimless() when comparing units so that dimensionless units can
	be ignored in the comparison.  Added isdimless() which checks
	whether a unit is defined as NODIM. 

2003-12-04  Adrian Mariano  <adrian@vizcacha.cox.net>

	* units.c (lookupunit): Added check for -ies plural

2003-09-20  Adrian Mariano  <adrian@vizcacha.cox.net>

	* units.c (readunits): Wrote in a file to capture error messages,
	pass back an error return instead of calling exit(), do included
	units files with "!include", give error on nested "!locale"
	statements.  

2003-05-09  Adrian Mariano  <adrian@vizcacha.cox.net>

	* units.c: (readunits): Added error checking for function and
	prefix names.  

2002-05-06  Adrian Mariano  <adrian@vizcacha.cox.rr.com>

	* units.c (reduceunit): The last change to reduceunit was screwed
	up.  Corrected it.  

2001-11-26  Adrian Mariano  <adrian@vizcacha.cox.rr.com>

	* units.c (readunits): Added locale checks to support the
	'!locale' syntax in units.dat.
	
	* configure.in: Added --enable-path-search option which replaces
	the use of an empty datadir for specifying path searching.  

2001-08-30  Adrian Mariano  <adrian@vizcacha.cox.rr.com>

	* units.c (reduceunit): Separated two calls to reduceproduct().
	This fixes a bug where "Unit reduction error" occurs instead of
	"Unknown unit".  

2001-08-17  Adrian Mariano  <adrian@vizcacha.cox.rr.com>

	* units.c (tryallunits): Added signal() calls to ignore the
	SIGPIPE signal and hopefully prevent premature termination.

2000-05-28  Adrian Mariano  <adrian@vizcacha.cox.rr.com>

	* units.c (addtolist): Modified tryallunits() to search function
	definitions and produce a sorted list, piped through the pager.
	Modified ishelpquery to invoke ishelpquery to produce a list.

2000-04-18  Adrian Mariano  <adrian@vizcacha.mgfairfax.rr.com>

	* units.c (fgetscont): Added fix for backslash at the end of the
	buffer.  

2000-04-13  Adrian Mariano  <adrian@vizcacha.mgfairfax.rr.com>

	* units.c (readunits): Set "userfile" when a path search is
	performed so that "help" can find the data file.  
	(ishelpquery): Modified to find functions and prefixes.

2000-04-12  Adrian Mariano  <adrian@vizcacha.mgfairfax.rr.com>

	* units.c (ishelpquery): Wrote new function to print help messages
	by invoking a pager on units.dat.  This required new field in
	unitlist structure, and code in main() to check for the "help"
	command.  

2000-04-10  Adrian Mariano  <adrian@vizcacha.mgfairfax.rr.com>

	* parse.y: rewrote parser rules for correct unary '-'.

	* units.c (showdefinition): Substantially simplified and made
	correct for expressions that start with an operator (/ or -).

2000-04-09  Adrian Mariano  <adrian@vizcacha.mgfairfax.rr.com>

	* units.c (isfunction): Fixed call to removepadding()

2000-02-12  Adrian Mariano  <adrian@vizcacha.mgfairfax.rr.com>

	* units.c (fgetscont): Fixed buffer full test

1999-04-27  Adrian Mariano  <adrian@kilburn.cam.cornell.edu>

	* units.c (addsubunit,addsubunitlist): Changed overflow test.

Mon Aug 17 13:12:01 1998  Adrian Mariano  <adrian@avalanche.cam.cornell.edu>

	* units.c (addunit): Added declaration for handlesum() so that it
	isn't called before being declared.  Moved handlesum down the code
	past completereduce() so that handlesum doesn't call
	completereduce() before its definition.  

Sun Mar  8 10:08:56 1998  Adrian Mariano  <adrian@kilburn.cam.cornell.edu>

	* units.c (main): Set rl_basic_word_break_characters to delimit
	words properly for unit completion.

Mon Jun  9 19:12:08 1997  Adrian Mariano  <adrian@kilburn.cam.cornell.edu>

	* units.c (lookupunit): Switched order of prefix and plural
	handling so that plurals are handled first.  (This fixes the
	problem of "pints" being interpreted as p- plus ints.)

Sun Apr  6 01:01:24 1997  Adrian Mariano  <adrian@kilburn.cam.cornell.edu>

	* units.c (removepadding): Added check for zero length strings.
	This caused units to hang when invoked with arguments that
	consisted only of whitespace.  

Mon Mar 10 19:23:21 1997  Adrian Mariano  <adrian@kilburn.cam.cornell.edu>

	* units.c: Changed 2 strdup() calls into dupstr() calls. 

Sun Mar  2 18:02:16 1997  Adrian Mariano  <adrian@kilburn.cam.cornell.edu>

	* units.c: replaced sscanf with strtod affecting numlength() and
	addnumber().  This circumvents a bug in NeXT's C library and
	yields simpler code.  

Wed Feb 12 22:28:42 1997  Adrian Mariano  <adrian@kilburn.cam.cornell.edu>

	* units.c (showanswer): Fixed to give slightly better display when
	verbose mode is active.

Tue Jan 21 18:51:58 1997  Adrian Mariano  <adrian@kilburn.cam.cornell.edu>

	* units.c: Changed showanswer() to convert reciprocal units.
	Added -s,--strict option to disable this conversion.  

Mon Jan 13 20:37:26 1997  Adrian Mariano  <adrian@kilburn.cam.cornell.edu>

	* units.c: Added addnumber() because recursive call to addunit()
	was causing problems with strtok.

Tue Dec 31 00:57:42 1996  Adrian Mariano  <adrian@kilburn.cam.cornell.edu>

	* units.c (prefixhash): Changed to AND with 127 because signed
	chars seem to be causing segmentation faults with 8 bit
	characters.  Changed size of the table to 128 to correspond.

Thu Dec 26 13:54:59 1996  Adrian Mariano  <adrian@kilburn.cam.cornell.edu>

	* units.c (completeunits): Added 1 to mymalloc() call so there is
	enough space.  (This fixes the tab bug.)

Mon Dec  9 23:46:27 1996  Adrian Mariano  <adrian@kilburn.cam.cornell.edu>

	* unit.c (addunit): Changed logic for calling handlesum() to check
	that the character immediately before the '+' is not an 'e' since
	this would probably be an exponent.

Mon Dec  7 10:47:43 1996  Adrian Mariano  <adrian@macomb.cam.cornell.edu>

	* units.c (lookupunit): Added tempbuf variable to prevent problems
	when the output from one call to lookupunit is used as input to a
	later call to lookupunit.

	* units.c: Changed main() and processargs() to allow invoking
	units with just one unit specified on the command line.  

Tue Dec  3 14:19:33 1996  Adrian Mariano  <adrian@kilburn.cam.cornell.edu>

	* units.c: added verbose option, changed showanswer() to give
	verbose display, removed first argument from showunit(), added new
	function removepadding() to trim whitespace.  

	* New file: texi2man, a perl script for converting the texinfo
	documentation into the man page format.  Makefile.in changed to
	generate units.man from units.texinfo.  

Mon Dec  2 14:10:56 1996  Adrian Mariano  <adrian@kilburn.cam.cornell.edu>

	* units.c: New functions handlesum(), addsubunitlist(), and
        productoverflow().
	(addunit): Call handlesum() if there are '+' characters in the
	string to be added.  This handles sums of conformable units.
	Added free() calls to free savescr when returning with an error.

Sun Dec  1 17:30:52 1996  Adrian Mariano  <adrian@esther.cam.cornell.edu>

	* units.c: Added isblank() and showdefinition().  Changed main()
	to call showdefinition if the second unit entered is blank.  Also
	changed the loop to re-prompt the user for the first unit until
	something nonblank is entered. Changed showunit() to take two
	arguments.  

Wed Nov 27 23:08:33 1996  Adrian Mariano  <adrian@kilburn.cam.cornell.edu>

	* units.c: Added function completeunits() for doing completion
	when readline is in use.

	* makefile.in: added support for LDFLAGS.  

	* units.c (lookupunits): Added tests to avoid trying plurals on
	one character long base units.

Fri Nov 22 19:25:23 1996  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>

	* Makefile.in, configure.in, units.c: add ansi2knr support.

	* New files: aclocal.m4, ansi2knr.1 and ansi2knr.c.

Fri Nov 22 10:33:43 1996  Adrian Mariano  <adrian@kilburn.cam.cornell.edu>

	* units.c: Added removespaces() function called from addunits() to
	remove spaces around '^' characters so the user doesn't have to be
	so careful.

Thu Nov 21 23:39:09 1996  Adrian Mariano  <adrian@kilburn.cam.cornell.edu>

	* units.c (lookupunit): Added check to return the input if it is a
	number.  This was made necessary by the change in the handling of
	numbers which broke the '^' operator on numbers. 

Thu Nov 21 15:22:40 1996  Adrian Mariano  <adrian@esther.cam.cornell.edu>

	* units.c (numlength): Changed test for sscanf to require a return
	value of exactly 1.  For some reason, sscanf sometimes returns -1
	instead of 0 when no fields were read.

Thu Nov 21 09:17:26 1996  Adrian Mariano  <adrian@kilburn.cam.cornell.edu>

	* Makefile.in:  Added ALL_CFLAGS so that CFLAGS can be used by the
	user.   

	* configure.in: Added fix to look for ncurses library to go with
	readline.  (Required by some linux version.)  

Wed Nov 20 14:03:22 1996  Adrian Mariano  <adrian@kilburn.cam.cornell.edu>

	* configure.in: Added check for const support.

	* Makefile.in: added VPATH, fixed a few places where $(srcdir) was
	needed, fixed the install targets to create directories if
	necessary by calling mkinstalldirs.  Fixed man pages install
	target.

Sun Nov 17 00:05:12 1996  Adrian Mariano  <adrian@kilburn.cam.cornell.edu>

	* units.c: Added numlength() to handle "numbers" with multiple 'e'
	or '.' characters.  Changed number evaluation in addunit() to do
	something reasonable when multiple '|' characters appear.  Now
	number evaluation is done by sscanf() instead of atof().  Removed
	handling of numbers with no trailing space from lookupunit() and
	added it to addunit() with a recursive call.

Thu Nov  1 16:18:08 1996  Adrian Mariano  <adrian@kilburn.cam.cornell.edu>

	* units.c: Fixed up portability for string.h, stdlib.h.  Added
	declarations for string functions and atof().

        * units.c: Removed calls to tolower() since they turned out to be
	unportable.  

Sun Sep  8 10:19:43 1996  Adrian Mariano  <adrian@kilburn.cam.cornell.edu>

	* units.c: Added long options, made option flag variables global.

	* units.c: Added freeunit() function to free units (which was
	never done), and uncommented two free() calls in cancelunit().

	* units.c: Added processargs() function to tidy things up. 

Thu Sep  5 01:18:52 1996  Adrian Mariano  <adrian@kilburn.cam.cornell.edu>

	* units.c: Removed all the static char * buffers and added
	support for readline().  Added growbuffer() and fgetslong() and
	getuser().  

	* units.c (readunits): Rewrote parsing to be cleaner and to remove
	trailing white space in units.

Copyright (C) 1996, 1997, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation, Inc
	
