Symbian
Symbian Developer Library

SYMBIAN OS V9.4

Feedback

[Index] [Previous] [Next]


ConsoleApp: simple console program

[Top]


Example code

These are the main files contained in the examples. Some extra files may be needed to run the examples, and these will be found in the appropriate examples directory.

Found in: examples\stdlib\ConsoleApp

// GETOPT.C
//
// Copyright (c) 1997-1999 Symbian Ltd.  All rights reserved.
//

/*
 * Copyright (c) 1987, 1993, 1994
 * The Regents of the University of California.  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 the University of
 * California, Berkeley and its contributors.
 * 4. Neither the name of the University nor the names of its contributors
 *    may be used to endorse or promote products derived from this software
 *    without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
 */


#if defined(LIBC_SCCS) && !defined(lint)
static char sccsid[] = "@(#)getopt.c   8.2 (Berkeley) 4/2/94";
#endif /* LIBC_SCCS and not lint */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int opterr = 1,      /* if error message should be printed */
    optind = 1,       /* index into parent argv vector */
    optopt,         /* character checked for validity */
    optreset;       /* reset getopt */
char    *optarg;        /* argument associated with option */

#define BADCH  (int)'?'
#define BADARG (int)':'
#define EMSG   ""

/*
 * getopt --
 * Parse argc/argv argument vector.
 */
int
getopt(int nargc, char * const *nargv, const char *ostr)
{
//  extern char *__progname;
    static char *place = EMSG;      /* option letter processing */
    char *oli=NULL;                /* option letter list index */

    if (optreset || !*place) {      /* update scanning pointer */
        optreset = 0;
        if (optind >= nargc || *(place = nargv[optind]) != '-') {
            place = EMSG;
            return (EOF);
        }
        if (place[1] && *++place == '-') {    /* found "--" */
            ++optind;
            place = EMSG;
            return (EOF);
        }
    }                   /* option letter okay? */

    optopt = (int)*place++;
    if (optopt != (int)':') oli = strchr(ostr, optopt);
    if ((optopt == (int)':') || !oli)
        {
        /*
         * if the user didn't specify '-' as an option,
         * assume it means EOF.
         */
        if (optopt == (int)'-')
            return (EOF);
        if (!*place)
            ++optind;
        if (opterr && *ostr != ':')
            (void)fprintf(stderr,
//              "%s: illegal option -- %c\n", __progname, optopt);
                "illegal option -- %c\n", optopt);
        return (BADCH);
        }
    if (*++oli != ':') {            /* don't need argument */
        optarg = NULL;
        if (!*place)
            ++optind;
    }
    else {                 /* need an argument */
        if (*place)            /* no white space */
            optarg = place;
        else if (nargc <= ++optind) {   /* no arg */
            place = EMSG;
            if (*ostr == ':')
                return (BADARG);
            if (opterr)
                (void)fprintf(stderr,
//                  "%s: option requires an argument -- %c\n",
//                  __progname, optopt);
                    "option requires an argument -- %c\n",
                    optopt);
            return (BADCH);
        }
       else              /* white space */
            optarg = nargv[optind];
        place = EMSG;
        ++optind;
    }
    return (optopt);           /* dump back option letter */
}
// UNITS.C
//
// Copyright (c) 1997-1999 Symbian Ltd.  All rights reserved.
//

/*  $Id: units.c,v 1.2 1996/06/08 04:30:06 alex Exp $  */

/*
 * units.c   Copyright (c) 1993 by Adrian Mariano ([email protected])
 *
 * 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 "pathname.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[225]; // was [MAXSUBUNITS]
    char *denominator[225]; // was [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);
}

extern int getopt(int, char **, const char *);

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);
        }
    }

    return(0);
}


                                                            
/ $Id: slunits.dat,v 1.1.1.1 1996/06/08 03:43:43 alex 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
// PATHNAME.H
//
// Copyright (c) 1997-1999 Symbian Ltd.  All rights reserved.
//

#define _PATH_UNITSLIB "\\resource\\slunits.dat"
// BLD.INF
// Component description file 
//
// Copyright (c) 2000 Symbian Ltd.  All rights reserved.

PRJ_MMPFILES
ConsoleApp.mmp

PRJ_EXPORTS
slunits.dat ..\wins\c\slunits.dat
slunits.dat ..\winscw\c\slunits.dat
// ConsoleApp.MMP
//
// Copyright (c) 1997-1999 Symbian Ltd.  All rights reserved.
//

TARGET      ConsoleApp.exe
TARGETTYPE  exe 
UID             0
VENDORID 0x70000001
SOURCEPATH  .
SOURCE      units.c getopt.c
SYSTEMINCLUDE   \epoc32\include \epoc32\include\libc
LIBRARY     estlib.lib euser.lib
STATICLIBRARY   ecrt0.lib

[Top]


Description

ConsoleApp is a simple console-based STDLIB program. It converts quantities from one unit of measurement into another. The user is prompted for input. Conversion information is provided by the file slunits.dat.

[Top]


Usage

Enter the type of unit you want to convert from, and then the type of unit you want to convert to. For example, to convert from inches to centimetres, enter "in", then "cm". The program replies with the ratio of inches to centimetres, and of centimetres to inches.