GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
AG_UNITS(3) FreeBSD Library Functions Manual AG_UNITS(3)

AG_Units
agar unit conversion facility

#include <agar/core.h>
#include <agar/gui.h>

The Agar AG_Units interface implements unit conversion. The AG_Unit structure is defined as follows:
typedef struct ag_unit {
	char *key;
	char *abbr;
	char *name;
	double divider;
	double (*func)(double, int mode);
} AG_Unit;

The key member is a unique identifier for this unit. abbr is an abbreviated symbol, and name is the full name of the unit.

The linear conversion factor is specified in divider. For non-linear conversions, func can be defined instead (the first argument to the function is the value to convert; if mode is 1, the function make the reverse conversion).

A set of standard conversion unit groups are defined in gui/units.c in the Agar sources. The standard groups are summarized below.

agPercentageUnits
Value in percentile
agFrequencyUnits
Units of frequency
agTimeUnits
Units of time

agLengthUnits
Units of length/distance
agAngleUnits
Units of angular measurement
agVideoUnits
Units of video pixel resolution
agAreaUnits
Units of area
agVolumeUnits
Units of volume
agSpeedUnits
Units of velocity

agMassUnits
Units of weight
agPressureUnits
Units of pressure and stress (general)
agVacuumUnits
Units of pressure (low pressures)
agThermalConductivityUnits
Units of thermal conductivity
agThermalExpansionUnits
Units of thermal expansion
agDensityUnits
Units of density
agLightUnits
Units of light intensity
agSubstanceAmountUnits
Units of substance amount (moles)

agPowerUnits
Units of power
agTemperatureUnits
Units of temperature
agEnergyPerSubstanceAmountUnits
Units of energy per substance amount
agMolarHeatCapacityUnits
Units of molar heat capacity

agEMFUnits
Units of electromotive force / voltage
agCurrentUnits
Units of electrical current
agResistanceUnits
Units of electrical resistance
agResistanceTC1Units
Units of first-order temperature coefficients
agResistanceTC2Units
Units of second-order temperature coefficients
agResistivityUnits
Units of resistivity of a material
agCapacitanceUnits
Units of electrical capacitance
agInductanceUnits
Units of electrical inductance

const AG_Unit *
AG_FindUnit(const char *key);


const AG_Unit *
AG_BestUnit(const AG_Unit *unit_group, double n);


char *
AG_UnitFormat(double n, const AG_Unit unit_group[]);


const char *
AG_UnitAbbr(const AG_Unit *unit);


double
AG_Unit2Base(double n, const AG_Unit *unit);


double
AG_Base2Unit(double n, const AG_Unit *unit);


long double
AG_Unit2BaseLDBL(long double n, const AG_Unit *unit);


long double
AG_Base2UnitLDBL(long double n, const AG_Unit *unit);


double
AG_Unit2Unit(double n, const AG_Unit *unit_from, const AG_Unit *unit_to);

The AG_FindUnit() function searches the unit database for a unit matching the given key, and returns a pointer to the unit on success or NULL if none was found.

The AG_BestUnit() function returns the unit expected to yield the least number of non-significant figures when formatting the given number n. AG_UnitFormat() formats the given number n using the best unit in unit_group.

AG_UnitAbbr() returns the abbreviation string associated with the given unit.

The AG_Unit2Base() function converts from n in specified units to the equivalent number of base units. AG_Base2Unit() converts n base units to the equivalent number of specified units.

The AG_Unit2BaseLDBL() and AG_Base2UnitLDBL() variants accept a long double argument (only available if AG_HAVE_LONG_DOUBLE is defined).

One widget which uses this interface is AG_Numerical(3), which accepts unit arguments. The following code fragment creates a widget for editing a length value given in meters:
float length = 1.234;
AG_Numerical *num;
num = AG_NumericalNewFlt(parent, 0, "m", "Length: ", &length)

The following code fragment prints the equivalent milliseconds for a given n number of seconds:

printf("%f seconds = %f milliseconds", n,
    AG_Base2Unit(n, AG_FindUnit("ms")));

The following code fragment prints the equivalent of 27 degrees Celsius, in kilo Kelvins:

const AG_Unit *degC = AG_FindUnit("degC");
const AG_Unit *kk = AG_FindUnit("kk");

printf("27C = %fkk", AG_Unit2Unit(27.0, degC, kk));

This code fragment displays the value of r using the resistance unit most suitable to its magnitude.

printf("Resistance = %s", AG_UnitFormat(r, agResistanceUnits));

Also see tests/unitconv.c in the Agar source distribution.

AG_Intro(3), AG_Numerical(3), AG_Widget(3)

The AG_Units facility first appeared in Agar 1.0.
May 10, 2004 FreeBSD 13.1-RELEASE

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.