ConsoleApp
: simple console program
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 "/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
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
.
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.