diff options
Diffstat (limited to 'usr.bin/units')
-rw-r--r-- | usr.bin/units/Makefile | 9 | ||||
-rw-r--r-- | usr.bin/units/README | 18 | ||||
-rw-r--r-- | usr.bin/units/pathnames.h | 33 | ||||
-rw-r--r-- | usr.bin/units/units.1 | 124 | ||||
-rw-r--r-- | usr.bin/units/units.c | 706 | ||||
-rw-r--r-- | usr.bin/units/units.lib | 610 |
6 files changed, 0 insertions, 1500 deletions
diff --git a/usr.bin/units/Makefile b/usr.bin/units/Makefile deleted file mode 100644 index 15679b5a7ce04..0000000000000 --- a/usr.bin/units/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -# $Id: Makefile,v 1.2 1996/04/06 06:00:58 thorpej Exp $ - -PROG= units - -beforeinstall: - install -c -o ${BINOWN} -g ${BINGRP} -m 444 \ - ${.CURDIR}/units.lib ${DESTDIR}/usr/share/misc - -.include <bsd.prog.mk> diff --git a/usr.bin/units/README b/usr.bin/units/README deleted file mode 100644 index ffb88a993165b..0000000000000 --- a/usr.bin/units/README +++ /dev/null @@ -1,18 +0,0 @@ -# $Id: README,v 1.2 1996/04/06 06:00:59 thorpej Exp $ - -This is a program which I wrote as a clone of the UNIX 'units' -command. I threw it together in a couple days, but it seems to work, -with some restrictions. I have tested it under DOS with Borland C and -Ultrix 4.2, and SunOS 4.1. - -This program differs from the unix units program in the following -ways: - it can gracefully handle exponents larger than 9 in output - it uses 'e' to denote exponentiation in numbers - prefixes are listed in the units file - it tries both -s and -es plurals - it allows use of * for multiply and ^ for exponentiation in the input - the output format is somewhat different - -Adrian Mariano (adrian@cam.cornell.edu or mariano@geom.umn.edu) - diff --git a/usr.bin/units/pathnames.h b/usr.bin/units/pathnames.h deleted file mode 100644 index b315c5b5823b8..0000000000000 --- a/usr.bin/units/pathnames.h +++ /dev/null @@ -1,33 +0,0 @@ -/* $Id: pathnames.h,v 1.3 1996/04/06 06:01:00 thorpej Exp $ */ - -/* - * Copyright (c) 1993 Christopher G. Demetriou - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Christopher G. Demetriou. - * 4. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#define _PATH_UNITSLIB "/usr/share/misc/units.lib" diff --git a/usr.bin/units/units.1 b/usr.bin/units/units.1 deleted file mode 100644 index 891605247bfa9..0000000000000 --- a/usr.bin/units/units.1 +++ /dev/null @@ -1,124 +0,0 @@ -.\" $Id: units.1,v 1.6 1996/04/06 06:01:02 thorpej Exp $ -.TH UNITS 1 "14 July 1993" -.SH NAME -units - conversion program -.SH SYNTAX -.B units -[-f filename] [-qv] [from-unit to-unit] -.SH SUMMARY -.TP 4 -.B -f filename -Specifies the name of the units data file to load. -.LP -.TP 4 -.B -q -Suppresses prompting of the user for units and the display of statistics -about the number of units loaded. -.LP -.TP 4 -.B -v -Prints the version number. -.LP -.TP 4 -.B from-unit to-unit -Allows a single unit conversion to be done directly from the command -line. No prompting will occur. The units program will print out -only the result of this single conversion. - -.SH DESCRIPTION -The units program converts quantities expression in various scales to -their equivalents in other scales. The units program can only -handle multiplicative scale changes. It cannot convert Centigrade -to Fahrenheit, for example. It works interactively by prompting -the user for input: -.nf - - You have: meters - You want: feet - * 3.2808399 - / 0.3048 - - You have: cm^3 - You want: gallons - * 0.00026417205 - / 3785.4118 - -.fi -Powers of units can be specified using the '^' character as shown in -the example, or by simple concatenation: 'cm3' is equivalent to 'cm^3'. -Multiplication of units can be specified by using spaces, a dash or -an asterisk. Division of units is indicated by the slash ('/'). -Note that multiplication has a higher precedence than division, -so 'm/s/s' is the same as 'm/s^2' or 'm/s s'. -If the user enters incompatible unit types, the units program will -print a message indicating that the units are not conformable and -it will display the reduced form for each unit: -.nf - - You have: ergs/hour - You want: fathoms kg^2 / day - conformability error - 2.7777778e-11 kg m^2 / sec^3 - 2.1166667e-05 kg^2 m / sec - -.fi -.LP -The conversion information is read from a units data file. The default -file includes definitions for most familiar units, abbreviations and -metric prefixes. Some constants of nature included are: -.in +4m -.ta -.ta 9m + -.nf - -pi ratio of circumference to diameter -c speed of light -e charge on an electron -g acceleration of gravity -force same as g -mole Avogadro's number -water pressure per unit height of water -mercury pressure per unit height of mercury -au astronomical unit - -.fi -.in -4m -\'Pound' is a unit of mass. Compound names are run together -so 'poundforce' is a unit of force. British units that differ from their -US counterparts are prefixed with 'br', and currency is prefixed with -its country name: 'belgiumfranc', 'britainpound'. When searching for -a unit, if the specified string does not appear exactly as a unit -name, then the units program will try to remove a trailing 's' or -a trailing 'es' and check again for a match. -.LP -All of these definitions can be read in the standard units file, or you -can supply your own file. A unit is specified on a single line by -giving its name and an equivalence. One should be careful to define -new units in terms of old ones so that a reduction leads to the -primitive units which are marked with '!' characters. -The units program will not detect infinite loops that could be caused -by careless unit definitions. -.LP -Prefixes are defined in the same was as standard units, but with -a trailing dash at the end of the prefix name. -.SH BUGS -.LP -The effect of including a '/' in a prefix is surprising. -.LP -Exponents entered by the user can be only one digit. -You can work around this by multiplying several terms. -.LP -The user must use | to indicate division of numbers and / to -indicate division of symbols. This distinction should not -be necessary. -.LP -The program contains various arbitrary limits on the length -of the units converted and on the length of the data file. -.LP -The program should use a hash table to store units so that -it doesn't take so long to load the units list and check -for duplication. -.SH FILES -/usr/share/misc/units.lib - the standard units library -.SH AUTHOR -Adrian Mariano (adrian@cam.cornell.edu or mariano@geom.umn.edu) diff --git a/usr.bin/units/units.c b/usr.bin/units/units.c deleted file mode 100644 index 83e5b4223b229..0000000000000 --- a/usr.bin/units/units.c +++ /dev/null @@ -1,706 +0,0 @@ -/* $Id: units.c,v 1.6 1996/04/06 06:01:03 thorpej Exp $ */ - -/* - * units.c Copyright (c) 1993 by Adrian Mariano (adrian@cam.cornell.edu) - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * Disclaimer: This software is provided by the author "as is". The author - * shall not be liable for any damages caused in any way by this software. - * - * I would appreciate (though I do not require) receiving a copy of any - * improvements you might make to this program. - */ - -#include <ctype.h> -#include <stdio.h> -#include <string.h> -#include <stdlib.h> - -#include "pathnames.h" - -#define VERSION "1.0" - -#ifndef UNITSFILE -#define UNITSFILE _PATH_UNITSLIB -#endif - -#define MAXUNITS 1000 -#define MAXPREFIXES 50 - -#define MAXSUBUNITS 500 - -#define PRIMITIVECHAR '!' - -char *powerstring = "^"; - -struct { - char *uname; - char *uval; -} unittable[MAXUNITS]; - -struct unittype { - char *numerator[MAXSUBUNITS]; - char *denominator[MAXSUBUNITS]; - double factor; -}; - -struct { - char *prefixname; - char *prefixval; -} prefixtable[MAXPREFIXES]; - - -char *NULLUNIT = ""; - -int unitcount; -int prefixcount; - - -char * -dupstr(char *str) -{ - char *ret; - - ret = malloc(strlen(str) + 1); - if (!ret) { - fprintf(stderr, "Memory allocation error\n"); - exit(3); - } - strcpy(ret, str); - return (ret); -} - - -void -readerror(int linenum) -{ - fprintf(stderr, "Error in units file '%s' line %d\n", UNITSFILE, - linenum); -} - - -void -readunits(char *userfile) -{ - FILE *unitfile; - char line[80], *lineptr; - int len, linenum, i; - - unitcount = 0; - linenum = 0; - - if (userfile) { - unitfile = fopen(userfile, "rt"); - if (!unitfile) { - fprintf(stderr, "Unable to open units file '%s'\n", - userfile); - exit(1); - } - } - else { - unitfile = fopen(UNITSFILE, "rt"); - if (!unitfile) { - char *direc, *env; - char filename[1000]; - char separator[2]; - - env = getenv("PATH"); - if (env) { - if (strchr(env, ';')) - strcpy(separator, ";"); - else - strcpy(separator, ":"); - direc = strtok(env, separator); - while (direc) { - strcpy(filename, ""); - strncat(filename, direc, 999); - strncat(filename, "/", - 999 - strlen(filename)); - strncat(filename, UNITSFILE, - 999 - strlen(filename)); - unitfile = fopen(filename, "rt"); - if (unitfile) - break; - direc = strtok(NULL, separator); - } - } - if (!unitfile) { - fprintf(stderr, "Can't find units file '%s'\n", - UNITSFILE); - exit(1); - } - } - } - while (!feof(unitfile)) { - if (!fgets(line, 79, unitfile)) - break; - linenum++; - lineptr = line; - if (*lineptr == '/') - continue; - lineptr += strspn(lineptr, " \n\t"); - len = strcspn(lineptr, " \n\t"); - lineptr[len] = 0; - if (!strlen(lineptr)) - continue; - if (lineptr[strlen(lineptr) - 1] == '-') { /* it's a prefix */ - if (prefixcount == MAXPREFIXES) { - fprintf(stderr, "Memory for prefixes exceeded in line %d\n", - linenum); - continue; - } - lineptr[strlen(lineptr) - 1] = 0; - prefixtable[prefixcount].prefixname = dupstr(lineptr); - for (i = 0; i < prefixcount; i++) - if (!strcmp(prefixtable[i].prefixname, lineptr)) { - fprintf(stderr, "Redefinition of prefix '%s' on line %d ignored\n", - lineptr, linenum); - continue; - } - lineptr += len + 1; - if (!strlen(lineptr)) { - readerror(linenum); - continue; - } - lineptr += strspn(lineptr, " \n\t"); - len = strcspn(lineptr, "\n\t"); - lineptr[len] = 0; - prefixtable[prefixcount++].prefixval = dupstr(lineptr); - } - else { /* it's not a prefix */ - if (unitcount == MAXUNITS) { - fprintf(stderr, "Memory for units exceeded in line %d\n", - linenum); - continue; - } - unittable[unitcount].uname = dupstr(lineptr); - for (i = 0; i < unitcount; i++) - if (!strcmp(unittable[i].uname, lineptr)) { - fprintf(stderr, "Redefinition of unit '%s' on line %d ignored\n", - lineptr, linenum); - continue; - } - lineptr += len + 1; - lineptr += strspn(lineptr, " \n\t"); - if (!strlen(lineptr)) { - readerror(linenum); - continue; - } - len = strcspn(lineptr, "\n\t"); - lineptr[len] = 0; - unittable[unitcount++].uval = dupstr(lineptr); - } - } - fclose(unitfile); -} - -void -initializeunit(struct unittype * theunit) -{ - theunit->factor = 1.0; - theunit->numerator[0] = theunit->denominator[0] = NULL; -} - - -int -addsubunit(char *product[], char *toadd) -{ - char **ptr; - - for (ptr = product; *ptr && *ptr != NULLUNIT; ptr++); - if (ptr >= product + MAXSUBUNITS) { - fprintf(stderr, "Memory overflow in unit reduction\n"); - return 1; - } - if (!*ptr) - *(ptr + 1) = 0; - *ptr = dupstr(toadd); - return 0; -} - - -void -showunit(struct unittype * theunit) -{ - char **ptr; - int printedslash; - int counter = 1; - - printf("\t%.8g", theunit->factor); - for (ptr = theunit->numerator; *ptr; ptr++) { - if (ptr > theunit->numerator && **ptr && - !strcmp(*ptr, *(ptr - 1))) - counter++; - else { - if (counter > 1) - printf("%s%d", powerstring, counter); - if (**ptr) - printf(" %s", *ptr); - counter = 1; - } - } - if (counter > 1) - printf("%s%d", powerstring, counter); - counter = 1; - printedslash = 0; - for (ptr = theunit->denominator; *ptr; ptr++) { - if (ptr > theunit->denominator && **ptr && - !strcmp(*ptr, *(ptr - 1))) - counter++; - else { - if (counter > 1) - printf("%s%d", powerstring, counter); - if (**ptr) { - if (!printedslash) - printf(" /"); - printedslash = 1; - printf(" %s", *ptr); - } - counter = 1; - } - } - if (counter > 1) - printf("%s%d", powerstring, counter); - printf("\n"); -} - - -void -zeroerror() -{ - fprintf(stderr, "Unit reduces to zero\n"); -} - -/* - Adds the specified string to the unit. - Flip is 0 for adding normally, 1 for adding reciprocal. - - Returns 0 for successful addition, nonzero on error. -*/ - -int -addunit(struct unittype * theunit, char *toadd, int flip) -{ - char *scratch, *savescr; - char *item; - char *divider, *slash; - int doingtop; - - savescr = scratch = dupstr(toadd); - for (slash = scratch + 1; *slash; slash++) - if (*slash == '-' && - (tolower(*(slash - 1)) != 'e' || - !strchr(".0123456789", *(slash + 1)))) - *slash = ' '; - slash = strchr(scratch, '/'); - if (slash) - *slash = 0; - doingtop = 1; - do { - item = strtok(scratch, " *\t\n/"); - while (item) { - if (strchr("0123456789.", *item)) { /* item is a number */ - double num; - - divider = strchr(item, '|'); - if (divider) { - *divider = 0; - num = atof(item); - if (!num) { - zeroerror(); - return 1; - } - if (doingtop ^ flip) - theunit->factor *= num; - else - theunit->factor /= num; - num = atof(divider + 1); - if (!num) { - zeroerror(); - return 1; - } - if (doingtop ^ flip) - theunit->factor /= num; - else - theunit->factor *= num; - } - else { - num = atof(item); - if (!num) { - zeroerror(); - return 1; - } - if (doingtop ^ flip) - theunit->factor *= num; - else - theunit->factor /= num; - - } - } - else { /* item is not a number */ - int repeat = 1; - - if (strchr("23456789", - item[strlen(item) - 1])) { - repeat = item[strlen(item) - 1] - '0'; - item[strlen(item) - 1] = 0; - } - for (; repeat; repeat--) - if (addsubunit(doingtop ^ flip ? theunit->numerator : theunit->denominator, item)) - return 1; - } - item = strtok(NULL, " *\t/\n"); - } - doingtop--; - if (slash) { - scratch = slash + 1; - } - else - doingtop--; - } while (doingtop >= 0); - free(savescr); - return 0; -} - - -int -compare(const void *item1, const void *item2) -{ - return strcmp(*(char **) item1, *(char **) item2); -} - - -void -sortunit(struct unittype * theunit) -{ - char **ptr; - int count; - - for (count = 0, ptr = theunit->numerator; *ptr; ptr++, count++); - qsort(theunit->numerator, count, sizeof(char *), compare); - for (count = 0, ptr = theunit->denominator; *ptr; ptr++, count++); - qsort(theunit->denominator, count, sizeof(char *), compare); -} - - -void -cancelunit(struct unittype * theunit) -{ - char **den, **num; - int comp; - - den = theunit->denominator; - num = theunit->numerator; - - while (*num && *den) { - comp = strcmp(*den, *num); - if (!comp) { -/* if (*den!=NULLUNIT) free(*den); - if (*num!=NULLUNIT) free(*num);*/ - *den++ = NULLUNIT; - *num++ = NULLUNIT; - } - else if (comp < 0) - den++; - else - num++; - } -} - - - - -/* - Looks up the definition for the specified unit. - Returns a pointer to the definition or a null pointer - if the specified unit does not appear in the units table. -*/ - -static char buffer[100]; /* buffer for lookupunit answers with - prefixes */ - -char * -lookupunit(char *unit) -{ - int i; - char *copy; - - for (i = 0; i < unitcount; i++) { - if (!strcmp(unittable[i].uname, unit)) - return unittable[i].uval; - } - - if (unit[strlen(unit) - 1] == '^') { - copy = dupstr(unit); - copy[strlen(copy) - 1] = 0; - for (i = 0; i < unitcount; i++) { - if (!strcmp(unittable[i].uname, copy)) { - strcpy(buffer, copy); - free(copy); - return buffer; - } - } - free(copy); - } - if (unit[strlen(unit) - 1] == 's') { - copy = dupstr(unit); - copy[strlen(copy) - 1] = 0; - for (i = 0; i < unitcount; i++) { - if (!strcmp(unittable[i].uname, copy)) { - strcpy(buffer, copy); - free(copy); - return buffer; - } - } - if (copy[strlen(copy) - 1] == 'e') { - copy[strlen(copy) - 1] = 0; - for (i = 0; i < unitcount; i++) { - if (!strcmp(unittable[i].uname, copy)) { - strcpy(buffer, copy); - free(copy); - return buffer; - } - } - } - free(copy); - } - for (i = 0; i < prefixcount; i++) { - if (!strncmp(prefixtable[i].prefixname, unit, - strlen(prefixtable[i].prefixname))) { - unit += strlen(prefixtable[i].prefixname); - if (!strlen(unit) || lookupunit(unit)) { - strcpy(buffer, prefixtable[i].prefixval); - strcat(buffer, " "); - strcat(buffer, unit); - return buffer; - } - } - } - return 0; -} - - - -/* - reduces a product of symbolic units to primitive units. - The three low bits are used to return flags: - - bit 0 (1) set on if reductions were performed without error. - bit 1 (2) set on if no reductions are performed. - bit 2 (4) set on if an unknown unit is discovered. -*/ - - -#define ERROR 4 - -int -reduceproduct(struct unittype * theunit, int flip) -{ - - char *toadd; - char **product; - int didsomething = 2; - - if (flip) - product = theunit->denominator; - else - product = theunit->numerator; - - for (; *product; product++) { - - for (;;) { - if (!strlen(*product)) - break; - toadd = lookupunit(*product); - if (!toadd) { - printf("unknown unit '%s'\n", *product); - return ERROR; - } - if (strchr(toadd, PRIMITIVECHAR)) - break; - didsomething = 1; - if (*product != NULLUNIT) { - free(*product); - *product = NULLUNIT; - } - if (addunit(theunit, toadd, flip)) - return ERROR; - } - } - return didsomething; -} - - -/* - Reduces numerator and denominator of the specified unit. - Returns 0 on success, or 1 on unknown unit error. -*/ - -int -reduceunit(struct unittype * theunit) -{ - int ret; - - ret = 1; - while (ret & 1) { - ret = reduceproduct(theunit, 0) | reduceproduct(theunit, 1); - if (ret & 4) - return 1; - } - return 0; -} - - -int -compareproducts(char **one, char **two) -{ - while (*one || *two) { - if (!*one && *two != NULLUNIT) - return 1; - if (!*two && *one != NULLUNIT) - return 1; - if (*one == NULLUNIT) - one++; - else if (*two == NULLUNIT) - two++; - else if (strcmp(*one, *two)) - return 1; - else - one++, two++; - } - return 0; -} - - -/* Return zero if units are compatible, nonzero otherwise */ - -int -compareunits(struct unittype * first, struct unittype * second) -{ - return - compareproducts(first->numerator, second->numerator) || - compareproducts(first->denominator, second->denominator); -} - - -int -completereduce(struct unittype * unit) -{ - if (reduceunit(unit)) - return 1; - sortunit(unit); - cancelunit(unit); - return 0; -} - - -void -showanswer(struct unittype * have, struct unittype * want) -{ - if (compareunits(have, want)) { - printf("conformability error\n"); - showunit(have); - showunit(want); - } - else - printf("\t* %.8g\n\t/ %.8g\n", have->factor / want->factor, - want->factor / have->factor); -} - - -void -usage() -{ - fprintf(stderr, "\nunits [-f unitsfile] [-q] [-v] [from-unit to-unit]\n"); - fprintf(stderr, "\n -f specify units file\n"); - fprintf(stderr, " -q supress prompting (quiet)\n"); - fprintf(stderr, " -v print version number\n"); - exit(3); -} - - -int -main(int argc, char **argv) -{ - - struct unittype have, want; - char havestr[81], wantstr[81]; - int optchar; - char *userfile = 0; - int quiet = 0; - - extern char *optarg; - extern int optind; - - while ((optchar = getopt(argc, argv, "vqf:")) != -1) { - switch (optchar) { - case 'f': - userfile = optarg; - break; - case 'q': - quiet = 1; - break; - case 'v': - fprintf(stderr, "\n units version %s Copyright (c) 1993 by Adrian Mariano\n", - VERSION); - fprintf(stderr, " This program may be freely distributed\n"); - usage(); - default: - usage(); - break; - } - } - - if (optind != argc - 2 && optind != argc) - usage(); - - readunits(userfile); - - if (optind == argc - 2) { - strcpy(havestr, argv[optind]); - strcpy(wantstr, argv[optind + 1]); - initializeunit(&have); - addunit(&have, havestr, 0); - completereduce(&have); - initializeunit(&want); - addunit(&want, wantstr, 0); - completereduce(&want); - showanswer(&have, &want); - } - else { - if (!quiet) - printf("%d units, %d prefixes\n\n", unitcount, - prefixcount); - for (;;) { - do { - initializeunit(&have); - if (!quiet) - printf("You have: "); - if (!fgets(havestr, 80, stdin)) { - if (!quiet); - putchar('\n'); - exit(0); - } - } while (addunit(&have, havestr, 0) || - completereduce(&have)); - do { - initializeunit(&want); - if (!quiet) - printf("You want: "); - if (!fgets(wantstr, 80, stdin)) { - if (!quiet) - putchar('\n'); - exit(0); - } - } while (addunit(&want, wantstr, 0) || - completereduce(&want)); - showanswer(&have, &want); - } - } -} diff --git a/usr.bin/units/units.lib b/usr.bin/units/units.lib deleted file mode 100644 index ef4e8d7a9a25e..0000000000000 --- a/usr.bin/units/units.lib +++ /dev/null @@ -1,610 +0,0 @@ -/ $Id: units.lib,v 1.3 1996/04/06 06:01:04 thorpej Exp $ - -/ primitive units - -m !a! -kg !b! -sec !c! -coul !d! -candela !e! -dollar !f! -bit !h! -erlang !i! -K !j! - -/ prefixes - -yotta- 1e24 -zetta- 1e21 -exa- 1e18 -peta- 1e15 -tera- 1e12 -giga- 1e9 -mega- 1e6 -myria- 1e4 -kilo- 1e3 -hecto- 1e2 -deka- 1e1 -deci- 1e-1 -centi- 1e-2 -milli- 1e-3 -micro- 1e-6 -nano- 1e-9 -pico- 1e-12 -femto- 1e-15 -atto- 1e-18 -zopto- 1e-21 -yocto- 1e-24 - -semi- .5 -demi- .5 - -Y- yotta -Z- zetta -E- exa -P- peta -T- tera -G- giga -M- mega -k- kilo -h- hecto -da- deka -d- deci -c- centi -m- milli -p- pico -f- femto -a- atto -z- zopto -y- yocto - -/ constants - -fuzz 1 -pi 3.14159265358979323846 -c 2.99792458e+8 m/sec fuzz -g 9.80665 m/sec2 -au 1.49597871e+11 m fuzz -mole 6.022169e+23 fuzz -e 1.6021917e-19 coul fuzz -energy c2 -force g -mercury 1.33322e+5 kg/m2-sec2 -hg mercury - -/ dimensionless - -radian .5 / pi -degree 1|180 pi-radian -circle 2 pi-radian -turn 2 pi-radian -revolution turn -rev turn -grade .9 degree -arcdeg 1 degree -arcmin 1|60 arcdeg -ccs 1|36 erlang -arcsec 1|60 arcmin - -steradian radian2 -sphere 4 pi-steradian -sr steradian - -/ Time - -second sec -s sec -minute 60 sec -min minute -hour 60 min -hr hour -day 24 hr -da day -week 7 day -year 365.24219879 day fuzz -yr year -month 1|12 year -ms millisec -us microsec - -/ Mass - -gram millikg -gm gram -mg milligram -metricton kilokg - -/ Avoirdupois - -lb .45359237 kg -pound lb -lbf lb g -ounce 1|16 lb -oz ounce -dram 1|16 oz -dr dram -grain 1|7000 lb -gr grain -shortton 2000 lb -ton shortton -longton 2240 lb - -/ Apothecary - -scruple 20 grain -apdram 60 grain -apounce 480 grain -appound 5760 grain -troypound appound - -/ Length - -meter m -cm centimeter -mm millimeter -km kilometer -nm nanometer -micron micrometer -angstrom decinanometer - -inch 2.54 cm -in inch -foot 12 in -feet foot -ft foot -yard 3 ft -yd yard -rod 5.5 yd -rd rod -mile 5280 ft -mi mile - -british 1200|3937 m/ft -nmile 1852 m - -acre 4840 yd2 - -cc cm3 -liter kilocc -ml milliliter - -/ US Liquid - -gallon 231 in3 -imperial 1.20095 -gal gallon -quart 1|4 gal -qt quart -pint 1|2 qt -pt pint - -floz 1|16 pt -fldr 1|8 floz - -/ US Dry - -dry 268.8025 in3/gallon fuzz -peck 8 dry-quart -pk peck -bushel 4 peck -bu bushel -chaldron 36 bushel - -/ British - -brgallon 277.420 in3 fuzz -brquart 1|4 brgallon -brpint 1|2 brquart -brfloz 1|20 brpint -brpeck 554.84 in3 fuzz -brbushel 4 brpeck - -/ Energy Work - -newton kg-m/sec2 -nt newton -N newton -joule nt-m -cal 4.1868 joule - -/ Electrical - -coulomb coul -C coul -ampere coul/sec -amp ampere -watt joule/sec -volt watt/amp -ohm volt/amp -mho /ohm -farad coul/volt -henry sec2/farad -weber volt-sec - -/ Light - -cd candela -lumen cd sr -lux cd sr/m2 - -/ Wall Street Journal, July 2, 1993 - -$ dollar -argentinapeso $ -australiadollar .66 $ -austriaschilling .83 $ -bahraindinar 2.6522 $ -belgiumfranc .028 $ -brazilcruzeiro .000019 $ -britainpound 1.49 $ -canadadollar .77 $ -czechkoruna .034 $ -chilepeso .0025 $ -chinarenminbi .174856 $ -colombiapeso .001495 $ -denmarkkrone .15 $ -ecuadorsucre .000539 $ -finlandmarkka .17 $ -francefranc .17 $ -germanymark .58 $ -greatbritainpound britainpound -greecedrachma .0043 $ -hongkongdollar .13 $ -hungaryforint .011 $ -indiarupee .03211 $ -indonesiarupiah .0004782 $ -irelandpunt 1.43 $ -israelshekel .3642 $ -italylira .00064 $ -japanyen .0093 $ -jordandinar 1.4682 $ -kuwaitdinar 3.3173 $ -lebanonpound .000578 $ -malaysiaringgit .338 $ -maltalira 2.6042 $ -mexicopeso .3205128 $ -netherlandguilder .52 $ -newzealanddollar .539 $ -norwaykrone .139 $ -pakistanrupee .037 $ -perunewsol .5065 $ -philippinespeso .03738 $ -polandzloty .000059 $ -portugalescudo .00617 $ -saudiarabiariyal .26702 $ -singaporedollar .6157 $ -slovakkoruna .034 $ -southamericarand .21 $ -southkoreawon .001 $ -spainpeseta .007 $ -swedenkrona .13 $ -switzerlandfranc .66 $ -taiwandollar .038285 $ -thailandbaht .03962 $ -turkeylira .0000929 $ -unitedarabdirham .2723 $ -uruguaynewpeso .246852 $ -venezuelabolivar .011 $ - -mark germanymark -bolivar venezuelabolivar -peseta spainpeseta -rand southafricarand -escudo portugalescudo -sol perusol -guilder netherlandsguilder -hollandguilder netherlandsguilder -peso mexicopeso -yen japanyen -lira italylira -rupee indiarupee -drachma greecedrachma -franc francefranc -markka finlandmarkka -sucre ecuadorsucre -poundsterling britainpound -cruzeiro brazilcruzeiro - -/ computer - -baud bit/sec -byte 8 bit -block 512 byte -kbyte 1024 byte -megabyte 1024 kbyte -gigabyte 1024 megabyte -meg megabyte - - -/ Trivia - -% 1|100 -admiraltyknot 6080 ft/hr -apostilb cd/pi-m2 -are 1e+2 m2 -arpentcan 27.52 mi -arpentlin 191.835 ft -astronomicalunit au -atmosphere 1.01325e+5 nt/m2 -atm atmosphere -atomicmassunit 1.66044e-27 kg fuzz -amu atomicmassunit -bag 94 lb -bakersdozen 13 -bar 1e+5 nt/m2 -barie 1e-1 nt/m2 -barleycorn 1|3 in -barn 1e-28 m2 -barrel 42 gal -barye 1e-1 nt/m2 -bev 1e+9 e-volt -biot 10 amp -blondel cd/pi-m2 -boardfoot 144 in3 -bolt 40 yd -bottommeasure 1|40 in -britishthermalunit 1.05506e+3 joule fuzz -btu britishthermalunit -refrigeration 12000 btu/ton-hour -buck dollar -cable 720 ft -caliber 1e-2 in -calorie cal -carat 205 mg -caratgold 1|24 -cent centidollar -cental 100 lb -centesimalminute 1e-2 grade -centesimalsecond 1e-4 grade -century 100 year -cfs ft3/sec -chain 66 ft -circularinch 1|4 pi-in2 -circularmil 1e-6|4 pi-in2 -clusec 1e-8 mm-hg m3/s -coomb 4 bu -cord 128 ft3 -cordfoot cord -crith 9.06e-2 gm -cubit 18 in -cup 1|2 pt -curie 3.7e+10 /sec -dalton amu -decade 10 yr -dipotre /m -displacementton 35 ft3 -doppelzentner 100 kg -dozen 12 -drop .03 cm3 -dyne cm-gm/sec2 -electronvolt e-volt -ell 45 in -engineerschain 100 ft -engineerslink 100|100 ft -equivalentfootcandle lumen/pi-ft2 -equivalentlux lumen/pi-m2 -equivalentphot cd/pi-cm2 -erg cm2-gm/sec2 -ev e-volt -faraday 9.652e+4 coul -fathom 6 ft -fermi 1e-15 m -fifth 4|5 qt -fin 5 dollar -finger 7|8 in -firkin 9 gal -footcandle lumen/ft2 -footlambert cd/pi-ft2 -fortnight 14 da -franklin 3.33564e-10 coul -frigorie kilocal -furlong 220 yd -galileo 1e-2 m/sec2 -gamma 1e-9 weber/m2 -gauss 1e-4 weber/m2 -geodeticfoot british-ft -geographicalmile 1852 m -gilbert 7.95775e-1 amp -gill 1|4 pt -gross 144 -gunterschain 22 yd -hand 4 in -hectare 1e+4 m2 -hefnercandle .92 cd -hertz /sec -Hz hertz -hogshead 2 barrel -hd hogshead -homestead 1|4 mi2 -horsepower 550 ft-lb-g/sec -hp horsepower -hyl gm force sec2/m -hz /sec -imaginarycubicfoot 1.4 ft3 -jeroboam 4|5 gal -karat 1|24 -kcal kilocal -kcalorie kilocal -kev 1e+3 e-volt -key kg -khz 1e+3 /sec -kilderkin 18 gal -knot nmile/hr -lambert cd/pi-cm2 -langley cal/cm2 -last 80 bu -league 3 mi -lightyear c-yr -line 1|12 in -link 66|100 ft -longhundredweight 112 lb -longquarter 28 lb -lusec 1e-6 mm-hg m3/s -mach 331.46 m/sec -magnum 2 qt -marineleague 3 nmile -maxwell 1e-8 weber -metriccarat 200 mg -mgd megagal/day -mh millihenry -mhz 1e+6 /sec -mil 1e-3 in -millenium 1000 year -minersinch 1.5 ft3/min -minim 1|60 fldr -mo month -mpg mile/gal -mph mile/hr -nail 1|16 yd -nauticalmile nmile -nit cd/m2 -noggin 1|8 qt -nox 1e-3 lux -ns nanosec -oersted 2.5e+2 pi-amp/m -oe oersted -pace 36 in -palm 3 in -parasang 3.5 mi -parsec au-radian/arcsec -pascal nt/m2 -pc parsec -pennyweight 1|20 oz -pwt pennyweight -percent % -perch rd -pf picofarad -phot lumen/cm2 -pica 1|6 in -pieze 1e+3 nt/m2 -pipe 4 barrel -point 1|72 in -poise gm/cm-sec -pole rd -poundal ft-lb/sec2 -pdl poundal -proof 1|200 -psi lb-g/in2 -quarter 9 in -quartersection 1|4 mi2 -quintal 100 kg -quire 25 -rad 100 erg/gm -ream 500 -registerton 100 ft3 -rehoboam 156 floz -rhe 10 m2/nt-sec -rontgen 2.58e-4 curie/kg -rood 1.21e+3 yd -rope 20 ft -rutherford 1e+6 /sec -rydberg 1.36054e+1 ev -sabin 1 ft2 -sack 3 bu -seam 8 bu -section mi2 -shippington 40 ft3 -shorthundredweight 100 lb -shortquarter 25 lb -siemens /ohm -sigma microsec -skein 120 yd -skot 1e-3 apostilb -slug lb-g-sec2/ft -span 9 in -spat 4 pi sr -spindle 14400 yd -square 100 ft2 -stere m3 -sthene 1e+3 nt -stilb cd/cm2 -stoke 1e-4 m2/sec -stone 14 lb -strike 2 bu -surveyfoot british-ft -surveyyard 3 surveyfoot -surveyorschain 66 ft -surveyorslink 66|100 ft -tablespoon 4 fldr -teaspoon 4|3 fldr -tesla weber/m2 -therm 1e+5 btu -thermie 1e+6 cal -timberfoot ft3 -tnt 4.6e+6 m2/sec2 -tonne 1e+6 gm -torr mm hg -township 36 mi2 -tun 8 barrel -water gram g / cc -wey 40 bu -weymass 252 lb -Xunit 1.00202e-13 m -k 1.38047e-16 erg/degC - - -degC K -kelvin K -brewster 1e-12 m2/newton -degF 5|9 degC -degreesrankine degF -degrankine degreesrankine -degreerankine degF -degreaumur 10|8 degC -drachm 60 grain -poncelet 100 kg m g / sec -denier .05|450 gram / m -tex .001 gram / m -englishell 45 inch -scottishell 37.2 inch -flemishell 27 inch -planck 6.626e-34 joule-sec -hbar 1.055e-34 joule-sec -electronmass 9.1095e-31 kg -protonmass 1.6726e-27 kg -neutronmass 1.6606e-27 kg -V volt -eV e V -bohrradius hbar2-C2/8.988e9 N m2-e2-electronmass -becquerel 1|3.7e10 curie -fresnel 1e12 hertz -statcoul 1|2.99792458e9 coul -statamp 1|2.99792458e9 amp -statvolt 2.99792458e2 volt -statcoulomb statcoul -statampere statamp -debye 3.336e-30 coul-m -pulsatance 2 pi/sec -rpm rev/minute -rps rev/sec -kilohm kiloohm -megohm megaohm -siderealyear 365.256360417 day -siderealday 23.934469444 hour -siderealhour 1|24 sidereal day -lunarmonth 29.5305555 day -synodicmonth lunarmonth -siderealmonth 27.32152777 day -tropicalyear year -solaryear year -lunaryear 12 lunarmonth -cran 37.5 brgallon -kip 1000 lbf -frenchfoot 16|15 ft -frenchfeet frenchfoot -toise 6 frenchfeet -sievert 8.4 rontgen -candle 1.02 candela -militarypace 2.5 feet -metre meter -litre liter -gramme gram -iudiptheria 62.8 microgram -iupenicillin .6 microgram -iuinsulin 41.67 microgram -cottonyarncount 2520 ft/pound -linenyarncount 900 ft/pound -worstedyarncount 1680 ft/pound -metricyarncount meter/gram -jewlerspoint 2 milligram - |