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.