GNU 'units' converts between different systems of units. It can handle multiplicative scale changes. It can also handle nonlinear conversions such as Celsius to Fahrenheit (which may appear to be linear but is actually affine). ------------------------------------------------------------------ Installation General installation instructions appear in the file 'INSTALL'. You should be able to run './configure' followed by 'make'. If you give no options to configure, it will compile units to look for the units data file in a standard location (probably /usr/local/share). If you try to use the program without installing you will need to use the '-f' option. If you don't want to commit to an installation location, you can invoke configure by typing './configure --enable-path-search'. Then no path name will be compiled into 'units' and it will search the current directory and the directories listed in your PATH environment variable to find the units data file. If you are building on Windows with the MKS Toolkit, see the file 'UnitsMKS.pdf'. If you are building with Microsoft Visual Studio from the Windows command prompt, see the file 'UnitsWin'. For full functionality you should have the GNU readline library installed to provide history and editing of data entry. You can update currency conversions using the units_cur script which requires Python and the unidecode module. The documentation is available in texinfo, roff, and text format. The man page is generated automatically from the texinfo documentation. This man page produces readable results when run through nroff, but it should probably not be printed with troff or groff--no effort has been made to ensure that it prints out reasonably. To generate a printed manual, use 'units.dvi' instead. The distribution includes three icons that may be useful for installation in a GUI. Use the icotool command to extract the png files from the .ico files. The icon_ms.png file is suitable for use as a small button. This program has the following incompatibilties with unix 'units': * The '-' character is a subtraction operator rather than a multiply operator by default. * Exponentiation in numbers requires an 'e', so you must write 2.5e-2 instead of 2.5-2. * Prefixes are listed in the units file. * GNU 'units' tries the -s, -es, and -ies plural forms. * The default output format is slightly different. * The units database is much larger and more informative, but with some differences. (e.g. 'g' is for gravity in unix 'units' and grams in GNU 'units'.) The comment character has been changed to '#'. GNU 'units' includes the following extensions: * Multiplication can be written with a '*' if desired. * Exponents can be written with '^' or '**' in units. * Exponents can be larger than 9 if written with '^' or '**'. * Sums of units can be converted. * The units data file is extensively commented. * Units which measure reciprocal dimensions can be converted. * Parentheses for grouping are supported. * Funtions such as sin, cos, and log are supported. * Roots of units and rational exponents can be computed. * Nonlinear units conversions are supported. * Conversion to lists of units (e.g. feet and inches) is supported ---------------------------------------------------------------------- When updating from 1.x to 2.x: The name of the personal units file has changed from $HOME/units.dat to $HOME/.units ($HOME/unitdef.units under Windows). The format for nonlinear unit definitions has changed. Run 'units -c' and add the "units=" keyword in front of any bracketed unit specifications. ------------------------------------------------------------------ Ports Windows: Building with Microsoft Visual Studio units can be built from the Windows command prompt using Visual Studio; see UnitsWin for details. units can also be built from the the MKS Korn shell using Visual Studio; see UnitsMKS for details. Windows: Binary Distribution A binary distribution for Windows is available at http://ftp.gnu.org/gnu/units/windows/. The executable was built with Microsoft Visual Studio using Makefile.Win and the same source files included in the source distribution. There is currently no support for UTF-8 or readline; however, command history and intraline editing are available via the standard Windows console facilities described in the documentation for doskey. A port of units 1.87 to Windows is available from the http://gnuwin32.sourceforge.net/packages/units.htm This port includes readline support. A Java version of units by Roman Redziejowski <roman.redz@swipnet.se> is available on SourceForge at http://units-in-java.sourceforge.net/ Two versions are available for Android. Steve Pomeroy has a version based on the the above Java version that you can obtain at http://staticfree.info/projects/units/ and Keith Flowers has compiled the C code for Android: http://apps.keithflower.org/?page_id=6 A Perl version was written by Bob Walton <bob@bwalton.com> and can be accessed either as a units converting web form or as perl source code from: http://bwalton.com/cgi-bin/myunitscgi.pl A project called Frink uses a (modified) version of the units database to supply a units-aware programming language. https://futureboy.us/frinkdocs/ ----------------------------------------------------------------------------- Ideas the future (may or may not happen): * Bundle up the units conversion stuff into a library. * Inflation adjusted currency? * Allow multiple definitions of the same unit and resolve the correct definition by a conformability check. (This has exponential growth behavior in the number of units typed in!) * When a nonconformable units error is given list units the user might have meant (e.g. britainpound for pound) by a conformability check and string pattern match of some sort. "spelling advice" * Allow some way of having units like '$' that don't require a trailing space so you can write '$5'. This could be handled by having a command in the units database that specifies units which automatically get a space inserted after their name. * Have a metacommand in the units datafile that specifies how plurals should be tried for this file. This would allow expansion into other languages. (Of course, the real work of expanding into other languages is writing a units file that is appropriate for the language in question and includes local units. It's not just a translation task.) Another thing that could be accomplished here would be translation of English words like "cubic" and "per" into their symbolic meanings. A command in the units file could indicate that "per" should be substituted into a '/' and "cubic" means the cube the next unit. As it stands, "per" is hard coded into the parser. * Represent uncertainties in values in the database. ----------------------------------------------------------------------------- Acknowledgements This program owes a lot to Jeff Conrad who made many helpful suggestions, found numerous bugs, and helped me to find the definitions of obscure units. Chris Madsen also made some valuable contributions. The documentation has greatly benefited from the suggestions made by Robert Chassell who kindly read several drafts. The following people have been particularly helpful in fixing portability problems: Kaveh Ghazi, Eric Backus, and Marcus Daniels. Bug reports and suggestions for improvements should be sent to the author: Adrian Mariano (adrianm@gnu.org).