FreeBSD Manual Pages
AG_UNITS(3) BSD Library Functions Manual AG_UNITS(3) NAME AG_Units -- agar unit conversion facility SYNOPSIS #include <agar/core.h> #include <agar/gui.h> DESCRIPTION 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 abbrevi- ated 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 func- tion 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. GENERAL agPercentageUnits Value in percentile agFrequencyUnits Units of frequency agTimeUnits Units of time LENGTHS & ANGLES 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 PHYSICAL 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) THERMODYNAMICS agPowerUnits Units of power agTemperatureUnits Units of temperature agEnergyPerSubstanceAmountUnits Units of energy per substance amount agMolarHeatCapacityUnits Units of molar heat capacity ELECTRICAL 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 INTERFACE 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). EXAMPLES 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. SEE ALSO AG_Intro(3), AG_Numerical(3), AG_Widget(3) HISTORY The AG_Units facility first appeared in Agar 1.0. BSD May 10, 2004 BSD
NAME | SYNOPSIS | DESCRIPTION | GENERAL | LENGTHS & ANGLES | PHYSICAL | THERMODYNAMICS | ELECTRICAL | INTERFACE | EXAMPLES | SEE ALSO | HISTORY
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=AG_Units&sektion=3&manpath=FreeBSD+13.0-RELEASE+and+Ports>