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

Version 2.27 - 31 March 2026 (bugfix release)
* Fixed a segmentation fault and other bugs and memory leaks.  

Version 2.26 - 25 February 2026
* The currency update script units_cur now generates four separate
  files so that failures to reach a server can be independent.  Crypto
  pricing is now fetched from coingecko by default, but Packetizer is
  available as an alternative using the new -c option.  This change
  fixes problems connecting to Packetizer.  
* Suppress repeated unit values in display of unit definitions when
  the duplicate values have different white space.
  (e.g., "10 m/s^2 = 10 m / s^2"

Version 2.25 - 18 January 2025
* Changed units_cur to ignore invalid CPI data
* Addd support for multivariate functions
* Because comma is used for multivariate functions, the comma is no
  longer allowed in unit names.  Four units whose names contained the
  comma were renamed with an underscore replacing the comma.  Affected
  units: lambda_C,p; lambda_C,n; lambda_C,mu; and lambda_C,tau.
* Extended (hyperbolic) trigonometric functions to include secant, csc
  cot, sech, coth, csch and their inverses.
* Added some multvariate units like windchill, heatindex, bmi, hypot
* Added "search _" to list the run-time variables (which start with _)
* Added --list-units (noniteractive) and "search ." (interactive) to
  list all unit definitions. 

Version 2.24 - 21 November 2024
* Units definitions updated to reflect 2022 NIST CODATA.  
* Added ':=' assignment for run time variables; this reduces the right
  hand side and can prevent circular definitions.
* If you make a circular definition, the old definition is retained
* Run time 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 variables assigned at runtime, 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
