GNU units NEWS - User visible changes.
Copyright (C) 1996, 1997, 1999-2007, 2010-2020, 2022, 2024
Free Software Foundation, Inc.

Version 2.24 - 21 November 2024

* Units definitions updated to reflect 2022 NIST CODATA.  
* Added ':=' assignment for interactively defined variables; this
  reduces the right hand side and can prevent circular definitions.
* If you make a circular definition, the old definition is retained
* Interactive variable definitions now appear in the log file
* Added interactive "set" command to set or change options
* Added circlearea_d() for circle area from diameter as well as
  sphere_vol_d(), circum_d()
* Added wiregaugeA() to convert wire gauge to metric sizes and
  added various pipe sizes

Version 2.23 - 18 February 2024

* Added interactively defined variables, with "_" prefix.
* Because of the above change, a space may be needed after the
  last answer symbol "_" in some situations, e.g. "_m" used to 
  compute "_ * m" but now refers to the user variable _m.
* molarvolume changed to have dimensions of m^3/mol for consistency
  with NIST
* Corrected erroneous definitions of moondist_min and moondist_max
* Added atomic masses for all isotopes of all elements in elements.units
* Added US Consumer Price index in cpi.units, which is updated monthly by
  units_cur.  Inflation calculations are possible with dollars_in() or
  inflation_since() and other related nonlinear units
* Made exchangerate-api the default currency server because floatrates
  was returning incomplete data
* Adjusted US survey units to use the international foot by default due to
  deprecation of the US survey foot
* abs() function works on units with dimensions, like -27 degrees.
* Support unicode operators for division and multiplication
* Ignore QUIT signal, which is sent by Ctrl-Backslash and Ctrl-4.  
* Suppress repeated unit values in display of unit definitions
  (e.g. defining byte as "8 bit = 8 bit")
* Unit reductions that take more than 1000 steps now give a
  "circular reference" error.
* More detailed reporting from the --check (-c) option.    
* Fixed bug in positioning pointer to errors in input when the input
  has leading spaces.
* Fixed parser memory leak with numbers too large or small for type
  double.
* Allow multiple divisions in expressions that start with "/", e.g. "/m/s"

Version 2.22 - 4 September 2022 (bug fix release)
* Fixed bug: segfault on inverse conversions of tables in verbose mode
* Added support for ExchangeRate-API in units_cur
* Minor unit definition fixes and updates, including updates to
  planetary data and a change in Rinfinity and hartree to increase accuracy.  
* Do not update currency.units at build 

Version 2.21 - 12 November 2020 (bug fix release)
* Fixed bug arising when $HOME or other environment variables are
  undefined, which primarily affects the Windows version
* Improved error reporting when input files are missing or invalid

Version 2.20 - 30 September 2020
* Added abs(), ceil(), round(), floor(), Gamma(), lnGamma(), factorial(),
  erf() and erfc() functions.  
* Added densities of all of the elements  
* Added several new unit systems (listed blow with their -u name)
  - Heaviside-Lorentz CGS units (hlu)
  - Natural units used in high energy physics and cosmology (natural,
    natural-gauss)
  - Planck units (planck), reduced planck units (planck-red)
  - Hartree atomic units (hartree)
* Added --conformable option which noninteractively prints a list of
  all units conformable with a specified a specified unit.
* Invoke the pager more intelligently depending on the size of the screen
* Fixed bug where unit lists conversions displayed excess precision
  (e.g. non-integer output for integer input)
* Display precision warning when conversion to unit lists uses all of
  the available precision

Version 2.19 - 28 May 2019
* Unit definitions updated to reflect new 2019 revisions to SI and the
  2018 NIST CODATA.
* Added definitions of country and USA state areas, and physical
  properties of selected woods.
* Changes only to definitions.units in this release.  

Version 2.18 - 20 October 2018
* The yahoo currency server has disappeared.  The units_cur script now
  supports multiple currency sources: FloatRates the European Central
  Bank, Fixer, and open exchange rates.  The last two of these require
  the user to obtain a personal API key for access.  The base currency
  can be selected using the --base option (when the source allows it,
  currently only FloatRates), and the primitive unit of currency is
  set to the base currency of the source.
* Added hyperbolic functions: sinh, cosh, tanh, asinh, acosh, atanh.
* Added log to arbitrary integer bases: log3, log4, log72, etc.
* Units can be redefined without a warning by adding '+' before the
  unit name in definitions.units.  
* Added 'quit' and 'exit' commands.
* Added support for CGS electromagnetic units with unit reductions to
  combinations of sqrt(grams), sqrt(centimeters) and seconds.  This
  feature is activated using the -u option or UNITS_SYSTEM environment
  variable, which you can set to gaussian, esu, or emu to select one
  of three different CGS systems.  
* Units with definitions that collide with commands ('quit', 'help', etc) 
  result in a warning message.
* Added !prompt command to add a prefix to the "You have:" prompt.
* Changed !message to print a blank line when it appears without text. 
* Texts specified with !message appear in the log file. 
* Improved compilation support for MacOS with (and without) GNU readline.
* If units is configured with --enable-relocation it can now be
  installed with 'make install'.

Version 2.17 - 25 June 2018
* Updates to units database, including commenting out several UTF-8
  characters that fail under MacOS.
* Updated units_cur to handle bad records returned by yahoo server.
* Fixed some Makefile issues
* Moved currency.units out of /usr/share because the file is not
  static and /usr/share is supposed to house static files.  The new
  location is $sharedstatedir which may be /var/lib or /usr/local/com.

Version 2.16 - 30 October 2017
* Fixed missing USD currency code (update to units_cur and
  definitions.units only).  

Version 2.15 - 16 October 2017 
* The old timegenie service has vanished.  A new units_cur script uses
  yahoo.com server.  The new script works directly in Python 2 or
  Python 3 and no longer depends on unidecode.  
* Some currency definitions (e.g. currencies pegged to the euro) have
  moved out of definitions.units into currency.units.
* Added bitcoin to currency.units
* Fixed a memory leak bug for invalid exponent operations

Version 2.14 - 7 March 2017
* Eliminated parser memory management limitation affecting long input
  expressions (e.g. a sum of more than 100 units)
* Control characters are treated as white space rather than producing
  an error about invalid UTF-8.
* The Makefile's "clean" target didn't remove *.o or the units binary 

Version 2.13 - 21 June 2016 (bug fix release)
* Corrected error in heat of vaporization of water
* Fixed bug where single character unicode prefixes couldn't be combined
  with the second "s", so microsecond couldn't be abbreviated.  
* Fixed bug where -H '' option would write history to ~/.history.
* Added -fpic compile option so that it is possible to compile to a library
* Improved support for building on Windows with Microsoft Visual Studio
  - Added script to set environment variables for VS in MKS Korn shell
  - Expanded guides UnitsMKS and UnitsWin for building with and without
    Unix-like utilities.

Version 2.12 - 14 October 2015
* Updated and revised units database, with constants now based on 2014 CODATA.
* Readline history is persistent and is saved to ~/.units_history, or
  to the file specified with --history (-H) option.  
* Fixed bug where '_' didn't give last result after conversion to function.
* Fixed sporadic segmentation fault with --log.
* Comments allowed on interactive input with '#', most useful with logging.
* Added configure test for rl_completion_suppress_append, which helps
  compilation under MacOS.  
* Comment processing happens before checking UTF-8 validity---comments
  are allowed to contain bogus UTF-8.
* Changed units_cur to skip bogus precious metals data from timegenie
  and to skip currencies with no rate.

Version 2.11 - 2 April 2014 (bug fix release)
* Many long options didn't work.  
* units_cur wouldn't print to stdout

Version 2.10 - 19 March 2014

* Added '_' to represent the previous result.
* Added support for rational exponents with numerators larger than 1 so you
  can do calculations like liter^2|3.  
* Added logging with --log (-L) option.  
* Fixed some unit definitions (R_infinity, planckmass), and added
  R_K90 and K_J90 for the conventional values of the von Klitzing and
  Josephson constants.  
* Don't use readline unless reading from a tty.  This makes it much faster to
  run units through a pipe and also gives consistent behavior between versions
  compiled with and without readline.
* Display of nonlinear unit definitions shows the range over which the unit is
  defined and the required dimensions of the argument.  
* Unit completion with readline will now complete nonlinear units, functions 
  (e.g. cuberoot), prefixes, and unit list aliases.  It will no longer insert a
  space after the completion.
* Running "units --version" returns success.
* Combining "--version" with "--terse" gives a terse version output.
* Combining "--version" with "--verbose" or running with "--info" gives a
  detailed output of how units was compiled and where its supporting files are
  found.  
* A nonlinear unit can be defined equal to another nonlinear unit using the
  syntax: "newfunc() oldfunc".
* Domain and range specified with nonlinear units can be open intervals,
  indicated  by parentheses instead of brackets. 
* The "noerror" keyword on a nonlinear unit supresses error checking with 
  "units --check" for that unit.  
* Changes to units_cur to work with timegenie changes and to support Python 3. 
  The Python module unidecode is now required for units_cur.  
* The method for finding supporting files has changed when units is compiled to
  be relocatable.  See the manual for details.  The --enable-path-search
  configure option is replaced by --enable-relocation.
* Fix to compile with Bison 3.0.  
* Improved error messages for various cases.  
* Units can be compiled and installed under Windows with Microsoft Visual C++
  using Makefile.Win.  A Windows binary distribution is available.
* Some simple icons are included.  

Version 2.02 - 11 July 2013

* Added support for %a and %A output formats (hexadecimal floating point), and
  eliminated the restriction on the number of displayed digits when specifying
  an output format with the --output-format (-o) option.  Improved error
  handling for formats specified with --output-format.  
* Added --digits (-d) to specify the number of digits to display.  Giving
  '--digits max' (-dmax) will use the full available precision.
* Added support for various Unicode minus sign symbols.  Units now treats the
  figure dash (U+2012), the en dash (U+2013), and the minus (U+2212) as
  identical to the ASCII hyphen/minus symbol (U+002D).  
* The !message command in units data files has been fixed so it does not
  produce output when the --quiet option is given.
* Improved error handling when unit names end with numbers without a '_'.  
* Removed six unicode entries from definition.units that were flagged as
  invalid under MacOS.  
* Modified units_cur to work with XML format as the txt format disappeared.
* Corrected error in definition of the nat.  
* Improved manual.

Version 2.01 - 24 October 2012 (bug fix release)

* Fixed error in electronmass
* New definition for au
* Fixed DESTDIR support for installation
* Changed configure script for success with Solaris
* Small changes to manual

Version 2.00 - 6 June 2012

General changes:
* Unit lists provide conversion to sums of units (e.g. feet and inches).
* Added --round (-r) and --show-factor (-S) options for use with unit lists.
* Added unit lists aliases (e.g. time, usvol).
* A python script, units_cur, can update currency data.
* Units now flushes its output so you can talk to it with a pipe. 
* Units now works in UTF-8 if the system supports it.  
* Added --locale (-l) option to set the locale.
* English units such as the gallon are defined in all locales, with US
  definitions by default except in the en_BG locale.  You can force
  the desired definition (Great Britain or US) by setting the
  environment variable UNITS_ENGLISH to GB or US.  
* Revised and extended the documentation, with more examples. 
* Added locale mapping to address Windows locale names. 
* Updated and revised units database, including UTF-8 definitions and
  the 2010 CODATA. 
* Fixed parsing bug for "1..2" or "1.2.3".  These now give an error. 
* Unit names can end with a number in the form of a subscript that
  starts with a '_', as in 'X_3'.  
* Units now performs error checking on the printf format specified with the
  --output-format (-o) option.  

Changes for units definition files:
* Changed location and names of unit database, splitting off currency
  Files are /usr/local/share/units/{definitions,currency}.units and
  the personal units file is $HOME/.units instead of $HOME/units.dat.  
  (Under windows personal unit file is unitdef.units.) 
* Personal units filename can be changed with MYUNITSFILE environment variable.
* Prefixes can be defined in any order: it is no longer necessary to
  define longer ones before shorter ones.  
* New definitions replace previous ones.  Personal units file is read
  after the system file rather than before.  
* Changed syntax for function definitions.  Instead of [in-unit,out-unit] 
  you must now write units=[in-unit,out-unit].  Use 'units -c' to find
  places in your personal data files that need to be updated.  
* Add optional domain and range to function definitions with syntax
  domain=[min,max] and range=[min,max].  Either min or max can be
  omitted to signal infinity. 
* Unit list aliases can be defined with !unitlist command.
* Added !var and !varnot and !endvar to include definitions based on
  environment variable settings.  
* Added !set to set environment variables (if they aren't already set).
* Added !message to display a message
* Data files are in UTF-8, with !utf8 and !endutf8 commands to mark
  definitions that require UTF-8 support. 
* Improved error handling when reading units.dat.

Version 1.88 - 15 Feb 2010

* Updated units.dat
* Fixed bug involving readline version 4.2

Version 1.87 - 25 Sep 2007

* Units reads ~/.units.dat if it exists before reading the standard
  units database.  
* Added support for ** as an exponent operator.
* Type 'search text' to list units that contain 'text' in their name.
* Precedence of '*' changed to match precedence of '/'.
  (Multiplication by juxtaposition retains a higher precedence than
  '/'.)  The --oldstar option selects the old precedence and --newstar
  forces the new precedence.  

Version 1.86 - 10 Nov 2006

* Added --one-line (-1) option which causes the program to print only
  one line of output. 
* Added --compact option which causes the program to print only the
  conversion factors and a newline on output.
* Added build support for DESTDIR.
* Made minor changes that allow the program to be compiled into a
  library and linked with other programs.
* Fixed bug that caused bus error on Intel Mac.

Version 1.85 - 20 May 2005

* The '-' character by default indicates subtraction.  Multiplication can be
  obtained by '*' or ' '.  The --product (-p) option selects the old behavior
  where '-' acts as a multiplication operator.  The --minus (-m) option forces
  the default behavior where '-' indicates subtraction.
* Handing of radian and steradian changed.  These units are now treated as
  conformable with 1 for units conversions.  This is indicated by the
  "!dimensionless" tag in units.dat.
* Unit files can be included using !include.
* Multiple -f (--file) options can appear on the command line; giving
  a null filename (-f '') causes the default units database to be loaded.
* Added -t (--terse) option.
* Improved error checking for units.dat. 
* Corrected and extended units.dat.  


Version 1.81 - October 28, 2002

* Fixed missing definition of "au" in units.dat.  


Version 1.80 - June 16, 2002

* Rewritten parser supports 
  - () for grouping
  - noninteger powers of numbers (e.g. 3^0.25)
  - functions with dimensionless arguments (log, ln, log2, sin, cos, tan, exp)
  - roots of units: sqrt(unit), cuberoot(unit), and higher roots as unit^(1|4)
* Functions can be defined in units.dat, and conversion to a function
  performed by specifying the function name alone as the "want" item. 
* Unit conversions can be specified as tables with linear interpolation. 
* The "help" command summarizes operations, and "help unit" browses the units
  database at the definition of the specified unit.  
* Specifying "?" for the want unit gets a list of all conformable units.  
* Support for locales added.  
* Units file extended and corrected.


Version 1.55 - July 30, 1999

* Added over 600 new units and corrected errors in the units data file.
* Minor bug fix affecting unit name completion.


Version 1.54 - July 15, 1997

* Switched order of prefix and plural handling (plurals are now done first)
* Added reciprocal unit conversion and --strict (-s) option
* Fixed some erroneous unit definitions, added currency codes and other units
* Improved Makefile (exec-prefix, program-transform-name supported)
* Bug fixes


Version 1.53 - Jan 13, 1997

* Added units containing ISO 8859-1 characters
* Bug fixes 


Version 1.52 - Dec 18, 1996

* Sums of conformable units 
* Printing of unit definitions 
* Unitname completion with readline
* Added --verbose (-v) option and moved --version to -V
* Improved portability, old style C support, improved Makefile
