Manual de Unidades

Unidades en Simusol

unidades

Conversion de unidades como biblioteca de C, hecha con el fuente de GNU units 2.27.

#include <unidades.h>
double r;
unidades_convertir("760 mmHg", "pascal", &r);   /* 101325.01 */
unidades_valor(77, "tempF", "tempC", &r);       /* 25 */
char *base;
unidades_a_si(1, "kWh", &r, &base);             /* 3600000, "kg m^2 / s^2" */
free(base);

Devuelven 0 si anduvo y -1 si no; unidades_error() dice por que. Compilar con pkg-config --cflags --libs unidades.

Es reentrante: las definiciones se cargan una sola vez por proceso (en unidades_iniciar o en la primera conversion, bajo un mutex) y despues solo se leen; lo que una conversion escribe es por hilo. Las conversiones reciprocas (m a 1/m) no se hacen: dan error.

Las definiciones son las de GNU units, instaladas en /usr/share/unidades; UNIDADES_ARCHIVO o el argumento de unidades_iniciar usan otro archivo.

gnu-units/

El fuente de GNU units 2.27 (units-2.27.tar.gz de gnu.org), solo lo que hace falta. Entro tal cual en r2429; los cambios estan cada uno en su commit:

Para pasar a otra version de GNU units: reemplazar los archivos de gnu-units/ y volver a aplicar esos cambios (svn diff -c 2430 y svn diff -c 2431).

src/unidades.c incluye gnu-units/units.c con su main renombrado: usa readunits, parseunit, completereduce y evalfunc y fija las opciones que fija el main de units. No llama a setlocale: el locale de las definiciones sale de LC_ALL, LC_CTYPE o LANG.

La licencia es la de GNU units: GPL 3 o posterior.