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:
VGA - VGA Estándar MODX - Mode-X VBE1 - VESA 1.x VB2B - VBE 2.0 (con bancos) VB2L - VBE 2.0 (lineal) VBE3 - VBE 3.0 VBAF - VBE/AF XTND - modo Xtended
BE - Bélgica CH - Suiza CZ - Checoslovaquia DE - Alemania DK - Dinamarca DVORAK - Dvorak ES - España FI - Finlandia FR - Francia IT - Italia NO - Noruega PT - Portugal RU - Rusia SE - Suecia UK - Reino Unido US - Estados Unidos
CZ - Checoslovaco DE - Alemán DK - Danés EN - Inglés ES - Español FI - Finlandes FR - Frances IT - Italiano RU - Ruso SE - Sueco
0 - nada SB - Sound Blaster (autodetecta la versión) SB10 - Sound Blaster 1.0 SB15 - Sound Blaster 1.5 SB20 - Sound Blaster 2.0 SBP - Sound Blaster Pro SB16 - Sound Blaster 16 ESS - ESS AudioDrive ESC - Ensoniq Soundscape
0 - nada OPL - Adlib (autodetecta versión OPL) OPL2 - chip FM OPL2 OPLX - Dual OPL2 (SB Pro-1) OPL3 - chip FM OPL3 SB - interfaz SB MIDI MPU - interfaz MIDI MPU-401 DIGI - DIGMID software wavetable AWE - AWE32
0 - mezcla rápida de datos 8 bit en buffers de 16 bits 1 - mezcla verdadera de 16 bits (requiere una tarjeta de 16 bits estéreo) 2 - mezcla 16 bits interpolada
Esta sección consiste de una serie de líneas en la forma:
Por ejemplo, la línea:
p36 = 0 34 9 12
especifica que cuando el programa 36 GM (que es un bajo) sea seleccionado, Allegro mandará un mensaje de cambio de banco #0 con el parámetro 0, un mensaje de cambio de banco #32 con el parámetro 34, un cambio de programa con el parámetro 9, y entonces lo subirá todo una octava.