summaryrefslogtreecommitdiff
path: root/usr.bin
diff options
context:
space:
mode:
Diffstat (limited to 'usr.bin')
-rw-r--r--usr.bin/units/Makefile9
-rw-r--r--usr.bin/units/README18
-rw-r--r--usr.bin/units/pathnames.h33
-rw-r--r--usr.bin/units/units.1124
-rw-r--r--usr.bin/units/units.c706
-rw-r--r--usr.bin/units/units.lib610
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
-