01 Rutinas de configuración



Varias partes de Allegro, como las rutinas de sonido y la función load_joystick_data, requieren cierta información de configuración. Estos datos son almacenados en ficheros de texto como una colección de líneas "variable=valor", junto con comentarios que empiezan con el caracter '#' y acaban al fina de la línea. El fichero de configuración puede estar dividido en secciones que empiezan con una línea "[nombresección]". Cada sección tiene un nombre único, para prevenir conflictos con los nombres, pero la variable que no esté en una sección determinada es considerada perteneciente a todas simultáneamente.

Por defecto los datos de configuración son leídos de un fichero llamado allegro.cfg o sound.cfg, que puede estar en el mismo directorio que el programa ejecutable, o el en directorio apuntado por la variable de entorno ALLEGRO. Si no te gusta esto, puedes usar cualquier nombre de fichero específico que quieras, o usar un bloque binario de datos de configuración propio de tu programa (que por ejemplo podría ser cargado desde un fichero de datos).

Puedes almacenar cualquier información que quieras en el fichero de configuración, junto con las variables estándar usadas por Allegro (mira abajo).

void set_config_file(char *filename);
Especifica el fichero de configuración que será usado por las siguientes rutinas de configuración. Si no llama esta función, Allegro usará el fichero allegro.cfg, mirando primero en el directorio de su programa y luego en el directorio apuntado por la variable de entorno ALLEGRO.

void set_config_data(char *data, int length);
Especifica un bloque de datos que será usados por las siguientes rutinas de configuración, que previamente ha cargado del disco (ejemplo: como parte de un formato propio más complicado, o desde un fichero de datos). Esta rutina hace una copia de la información, por lo que puede liberar los datos después de llamarla.

void override_config_file(char *filename);
Especifica un fichero que contiene una configuración de sobreescritura. Sus datos serán usados además de los parámetros del fichero de configuración principal, y si hay una misma variable en ambos ficheros, la del fichero de sobreescritura tendrá preferencia. Esto puede ser usado por las aplicaciones del programador que deben tener ciertos valores de configuración fijos, pero otros del fichero de configuración principal pueden ser modificados por el usuario. Por ejemplo, podría especificar una frecuencia de muestreo de sonido y un fichero de instrumentos IBK específicos, pero el usuario podría usar un fichero sound.cfg o allegro.cfg para especificar los ajustes de su tarjeta de sonido (puertos, valores IRQ, etc).

void override_config_data(char *data, int length);
Versión de override_config_file() que usa un bloque de datos que ya ha sido cargado en memoria.

void push_config_state();
Almacena el estado actual de configuración (nombre de fichero, valores de las variables, etc) en una pila interna, permitiéndole seleccionar otro fichero de configuración para después recuperar la configuración actual llamando pop_config_state(). Esta función está pensada para uso interno por otras funciones de la biblioteca, por ejemplo, cuando quiere especificar el fichero de configuración de la función save_joystick_data(), almacena la configuración actual antes de usar la del fichero especificado.

void pop_config_state();
Recupera el estado previo de la configuración almacenado por la función push_config_state() sobreescribiendo el código del fichero de configuración actual.

void hook_config_section(char *section,
int (*intgetter)(char *name, int def),
char *(*stringgetter)(char *name, char *def),
void (*stringsetter)(char *name, char *value));
Toma control de la sección especificada del fichero de configuración, para que sus funciones de enganche sean usadas para manipularlo, en vez del acceso de disco normal. Si tanto las funciones getter como setter son NULL, un enganche presente será desenganchado. Las funciones enganchadas tienen la máxima prioridad. Si una sección está enganchada, la función de enganche siempre será llamada, por lo que puede enganchar una sección '#': incluso tengrá prioridad sobre la función verride_config_file().

int config_is_hooked(char *section);
Devuelve TRUE si la sección especificada está siendo enganchada.

char *get_config_string(char *section, char *name, char *def);
Recupera la cadena de texto de la variable name del fichero de configuración actual. Si la variable mencionada no es encontrada, el valor def es devuelto. El nombre de sección puede ser NULL para aceptar variables de cualquier parte del fichero, o puede ser usado para controlar en qué conjunto de parámetros (ejemplo: sonido o joystick) va a buscar la variable.

int get_config_int(char *section, char *name, int def);
Lee un entero de la variable name del fichero de configuración actual. Lea el comentario de la función get_config_string().

int get_config_hex(char *section, char *name, int def);
Lee un entero de la variable name del fichero de configuración actual, en formato hexadecimal. Lea el comentario de la función get_config_string().

float get_config_float(char *section, char *name, float def);
Lee un número en coma flotante de la variable name del fichero de configuración actual. Lea el comentario de la función get_config_string().

int get_config_id(char *section, char *name, int def);
Lee una variable ID de 4 letras del fichero de configuración actual. Lea el comentario de la función get_config_string();

char **get_config_argv(char *section, char *name, int *argc);
Lee una lista de tokens (palabras separadas por espacios) del fichero de configuración actual, devolviendo una lista de argumentos al estilo de argv, y ajustando argc al número de tokens (a diferencia de argc/argv, esta lista tiene como base el cero). Devuelve NULL y ajusta argc a cero si la variable no esta presente. La lista de tokens es almacenada en un buffer temporal que será sobreescrito por la siguiente llamada a get_config_argv(), por lo que no espere que los datos persistan allí.

char *get_config_text(char *msg);
Esta función es usada principalmente por código interno de la biblioteca, pero también puede serle útil a los programadores de aplicaciones. Usa el fichero language.dat para mirar una versión traducida del parámetro en el lenguage actualmente seleccionado, devolviendo una traducción si ésta existe o una copia del parámetro si no hay otra cosa disponible. Esto es básicamente lo mismo que llamar get_config_string() con [language] como sección, msg como nombre de variable, y msg como como valor por defecto.

void set_config_string(char *section, char *name, char *val);
Escribe una cadena en la variable name del fichero de configuración actual, sobreescribiendo cualquier valor previo, o borra la variable si val es NULL. El nombre de sección puede ser NULL para escribir la variable en la raíz del fichero, o puede ser usada para especificar la sección en la que desea insertar la variable. El fichero alterado será puesto en memoria cache, y no será escrito en disco hasta que llame allegro_exit(). Tenga en cuenta que sólo puede escribir en los ficheros de este modo, por lo que la función no tendrá efecto si el fichero de configuración actual fue especificado con set_config_data() en vez de con set_config_file().

Como caso especial, las variables o nombres de sección que comienzan con el carácter '#' son tratadas especialmente y no serán leydas o escritas en disco. Los paquetes adicionales pueden usar esto para almacenar información de version y otra información de estado en el módulo de configuración, desde el cual puede ser leída con la función get_config_string().

void set_config_int(char *section, char *name, int val);
Escribe un entero en una variable en el fichero de configuración actual. Lea el comentario de set_config_string().

void set_config_hex(char *section, char *name, int val);
Escribe un entero en una variable en el fichero de configuración actual, en formato hexadecimal. Lea el comentario de set_config_string().

void set_config_float(char *section, char *name, float val);
Escribe un número en coma flotante en una variable en el fichero de configuración actual. Lea el comentario de set_config_string().

void set_config_id(char *section, char *name, int val);
Escribe una variable ID de 4 letras en el fichero de configuración actual. Lea el comentario de la función set_config_string().


Allegro usa las siguientes variables estándar del fichero de configuración:




Volver al Indice