38 Diferencias entre plataformas

Aquí tiene un rápido resumen de las cosas que pueden causar problemas cuando mueva su código de una plataforma a otra (puede encontrar una versión detallada de esto en la sección docs de la página web de Allegro).

Las versiones Windows y Unix requieren que escriba END_OF_MAIN() tras su función main(), lo que transforma mágicamente su main() de estilo ANSI C en un WinMain() de estilo Windows, y permite que el código Unix obtenga una copia de sus parámetros argv[].

En muchas plataformas Allegro funcionará lentamente si espera que bloquee automáticamente los bitmaps cuando dibuje sobre ellos. Para mejorar el rendimiento, necesita llamar usted mismo acquire_bitmap() y release_bitmap(), e intentar minimizar el número de bloqueos.

La versión Windows puede perder el contenido de la memoria de vídeo si el usuario cambia de tarea a otro programa, por lo que deberá tratar eso.

Ninguna de las plataformas actuales necesitan input polling, pero es posible que esto sea necesario en el futuro, por lo que si quiere asegurar al 100% la portabilidad de su programa, debería llamar poll_mouse() y poll_keyboard() en los lugares apropiados.

Allegro define un número estándar de macros que pueden ser usadas para verificar los atributos de la plataforma actual, o para aislarle de algunas diferencias entre sistemas:

ALLEGRO_PLATFORM_STR
Cadena de texto que contiene el nombre de la plataforma actual.

ALLEGRO_DOS
ALLEGRO_DJGPP
ALLEGRO_WATCOM
ALLEGRO_WINDOWS
ALLEGRO_MSVC
ALLEGRO_MINGW32
ALLEGRO_BCC32
ALLEGRO_UNIX
ALLEGRO_LINUX
ALLEGRO_BEOS
ALLEGRO_QNX
ALLEGRO_GCC
Definidos si está compilando en el sistema relevante. A menudo serán aplicables varias, ej: DOS+Watcom, o Windows+GCC+MinGW32.

ALLEGRO_I386
ALLEGRO_BIG_ENDIAN
ALLEGRO_LITTLE_ENDIAN
Definidos si está compilando para el procesador del tipo relevante.

ALLEGRO_VRAM_SINGLE_SURFACE
Definido si la pantalla es una sola superficie grande partida en múltiples sub-bitmaps de vídeo (ej: DOS), en vez de cada bitmap sea una entidad totalmente única (ej. Windows).

ALLEGRO_CONSOLE_OK
Definido cuando no está en modo gráfico, y hay una consola en modo texto a la cual puede mandar mensajes con printf(), salida estándar que puede ser capturada y redirigida por el usuario incluso cuando está en modo gráfico. Si este define está ausente, está ejecutando su programa en un entorno como Windows, el cual no tiene salida estándar.

ALLEGRO_LFN
Distinto de cero si hay soporte para ficheros de nombres largos, o cero si está limitado al formato 8.3 (en la versión DJGPP esto es una variable dependiente del entorno durante la ejecución).

INLINE
Use esto en lugar de la palabra reservada modificadora de función "inline" y su código funcionará correctamente en cualquiera de los compiladores soportados.

ZERO_SIZE
Use esto para declarar arrays de tamaño cero, ej: "char *line[ZERO_SIZE]" dentro de la estructura BITMAP. Algunos compiladores esperan un cero en ese lugar, mientras que otros no quieren tener nada dentro de [], por lo que esta macro permite que el mismo código funcione bien de cualquier modo.

LONG_LONG
Definido a lo que quiera que represente un entero "long long" de 64 bits para el compilador actual, o no definido si no está soportado.

OTHER_PATH_SEPARATOR
Definido a un carácter separador de ruta distinto de la barra para plataformas que lo usen (ej: antibarra bajo DOS y Windows), o definido a la barra normal si no hay otro separador de carácter.

DEVICE_SEPARATOR
Definido al carácter que separa el nombre de fichero del dispositivo (dos puntos para DOS y Windows), o cero si no hay dispositivos explícitos en las rutas (ej: Unix).

USE_CONSOLE
Si define esto antes de incluir los ficheros de cabecera de Allegro, la versión Windows hará que su programa se compile como una aplicación de consola en vez del programa normal en modo gráfico.

END_OF_MAIN()
Al poner esto tras su función main() permitirá que los programas Windows funcionen con una rutina main() regular, para que no tenga que cambiar todo para usar WinMain().



Volver al Indice