|
|
|||||||||
| El Amiga Me Encanta ha conseguido el permiso por escrito de IDG Comunications España para ofrecer los artículos de la revista Amiga World España. |
|
![]() |
Programación de librerías Por Vicente Santos FICHEROS PARA EL PROGRAMADOR
Tenemos tres, los dos primeros para programas C: - "ilbmbase.h" es una versión de "ilbmbase.i", el fichero que creamos en el capítulo 2 y que contiene la definición de la Base de la librería. - "ilbm.h" contiene los modelos de estructuras, constantes y variables, necesarias para la lectura y escritura de ficheros IFF-ILBM, usando funciones de nuestra run-time. Ambos ficheros deben instalarse en el directorio ":include/" del compilador. Para ello pueden crear dentro de este un subdirectorio "/iff/" y copiarlos en él. El tercero es para Ensamblador: - "ilbm.i" es el equivalente de ilbm.h en formato estándar de Commodore (los usuarios de Devpac pueden obtener a partir de él uno en el formato especial que puede utilizar este ensamblador). El fichero presenta una pequeña diferencia con su colega para lenguaje C, en la macro encargarda de calcular el tamaño total de un fichero ILBM. En la versión C esta macro se utiliza sin argumentos mientras que en Ensamblador se le pasa como argumento la variable 2ilbmsz" (declarada también en ilbm.i). Ejemplos: En C - ilbmsz = TotalSize() - TOTALSIZE ilbmsz Instale ilbm.i en su ensamblador de la misma forma que los ficheros anteriores. Y ahora vamos a ver un par de ejemplos de uso de la librería. Naturalmente son programas sencillos, pero pueden servir de "esqueleto" sobre los que crear sus propias aplicaciones.
|
|
Y hasta aquí nuestra librería run-time. Para que vean con más claridad el trabajo que realiza cada una de sus funciones, los argumentos que necesitan y elvalor que devuelven he incluido un apéndice con unos "autodocs", un poco al estilo de los manuales oficiales, para que puedan emplearlo como guía de consulta rápida a la hora de desarrollar sus aplicaciones. Y ahora sí que hemos llegado al final. Espero que esta miniserie les haya resultado útil -amena y divertida ya se que no, lo reconozco, es un peñazo-, al menos para conocer un poco más a fondo lo que se esconde tras el sistema operativo con el que cuenta esa caja de circuitos tan genial que es el Amiga. Muchas gracias a los que hayan tenido la paciencia de aguantar hasta aquí y mil perdones a los que no, si llegan a leer esto.
/********************************************************************* #ifndef IFF_ILBM_H #define IFF_ILBM_H #ifndef EXEC_TYPES_H #include <exec/types.h> #endif #ifndef EXEC_IO_H #include <exec/io.h> #endif #ifndef EXEC_MEMORY_H #include <exec/memory.h> #endif #ifndef LIBRARIES_DOS_H #include <libraries/dos.h> #endif #ifndef LIBRARIES_DOSEXTENS_H #include <libraries/dosextern.h> #endif #ifndef GRAPHICS_GFX_H #include <graphics/diplay.h> #endif #ifndef GRAPHICS_RASTPORT_H #include <graphics/rastport.h> #endif #ifndef GRAPHICS_VIEW_H #include <graphics/view.h> #endif /* MODELO DE ESTRUCTURA Y DATOS PARA BMHD */ struct BitMapHeader {
UWORD w, h; /* dimensiones del grafico */
WORD x, y; /* posicion */
UBYTE nPlanes; /* planos de profundidad */
UBYTE masking; /* tipo de mascara */
UBYTE compression; /* tipo de compresion */
UBYTE pad1; /* byte para alineamiento */
UWORD transparentColor; /* color transparente */
BYTE xAspect, yAspect; /* relacion de aspecto */
WORD pageWidth, pageHeight; /* dim pantalla original */
};
/* tipo de mascara (para la version 1.0 de ilbm.library siempre 0) */ #define NOMASK 0 /* tipo de compresion */ #define NOCOMP 0 #define BYTERUN1 1 /* MASCARAS PARA LECTURA/ESCRITURA DE MODO GRAFICO */ /* Flags de ViewModes cuyo uso en CAMG no es apropiado para la lectura o escritura de ficheros ILBM, segun especificaciones de Electronic Arts y Commodore */ #define BADFLAGS (SPRITES | VP_HIDE | GENLOCK_AUDIO | GENLOCK_VIDEO) #define FLAGMASK (~BADFLAGS) #define CAMGMASK (FLAGMASK & 0X0000FFFFL) /* COMPROBACION DE TAMANO DE CHUNKS Si el tamano de un chunk es impar es necesario escribir un byte extra despues de los datos. Estos bytes extras NO SE SUMAN al tamano del chunk pero SI al tamano total del fichero. La macro siguiente comprueba si el tamano es impar */ #define OddSize(cksize) ((cksize) & 1) /* TAMANO DE FICHERO El tamano de un fichero IFF es igual a la suma de: tamano (numero de bytes de datos) de cada chunk + 8 bytes por cabecera de cada chunk + 4 bytes por identificador de subtipo + numero total de bytes extras que sea necesario escribir (no se tienen en cuenta los 4 bytes de FORM ni los 4 utilizados para escribir el tamano total del fichero). */ LONG bmhdsz, camgsz, cmapsz, bodysz; /* tamano de chunks */ LONG subidsz; /* tamano de identificador */ LONG ilbmsz; /* Tamano total de fichero */ long npads = 0; /* tamano de bytes extras */ #define CKHSIZE 8 /* tamano de cabeceras */ #define TOTALCKH (CKHSIZE * 4) /* total de cabeceras */ /* ATENCION!!! La siguiente macro calcula el tamano total que se pasa como argumento a la funcion "PutILBMSize()", pero solo debe usarse en programas que salven ficheros completos, no paletas (ILBMs sin chunk BODY) */ #define TotalSize() (bmhds+camgsz+cmapsz+bodysz+subidsz+npads+TOTALCKH) #endif /* FIN DE ilbm.h ****************************************************/ /******************************************************************** FICHERO.H : ilbmbase.h DESCRIPCION : definicion de ILBMBase para programas en C. DESARROLLO : 21-06-92 - Creacion (V. Santos) ********************************************************************/ #ifndef IFF_ILBMBASE_H #define IFF_ILBMBASE_H #ifndel EXEC_TYPES_H #include <exec/types.h> #endif #ifndef EXEC_LISTS_H #include <exec/lists.h> #endif #ifndef EXEC_LIBRARIES_H #include <exec/libraries.h> #endif /* ESTRUCTURA DE ILBMBase ==================================================================*/ struct ILBMBase {
struct Library LibNode;
UBYTE Flags;
UBYTE Pad;
ULONG SysLib;
ULONG DosLib;
ULONG SegList;
};
#define ILBMNOMBRE "ilbm.library" #endif /* FIN DE ilbmbase.h ********************************************************************/ FROM LIB:AStartup.obj+SalvarILBM.o LIB LIB:amiga.lib+LIB:ilbm.lib TO SalvarILBM VERBOSE ************************************************************************ * PROGRAMA : SalvarILBM.s * * VERSION : 1.0 * * DESCRIPCION : Ejemplo de escritura de IFF-ILBMs con ilbm.library 1.0 * * DESARROLLO : 22-06-92 - Creacion (V. Santos) * ************************************************************************ * FICHEROS DE CABECERA ======================================================================== INCDIR "sys:devpac/include.cbm/" NOLIST INCLUDE "exec/types.i" INCLUDE "exec/memory.i" INCLUDE "libraries/dos.i" INCLUDE "libraries/dosextens.i" INCLUDE "intuition/intuition.i" INCLUDE "iff/ilbmbase.i" INCLUDE "iff/ilbm.i" LIST * DECLARACIONES EXTERNAS ======================================================================= XDEF START ; para "AStartup.obj" * REFERENCIAS EXTERNAS ======================================================================= |
| NOTA DE REDACCIÓN |
| Los listados publicados corresponden a |
| las primeras partes |
| o rutinas de este capítulo. |
| El resto puede encontrarse en nuestros |
| discos |
| Amiga World 39 |
| Envía esta página web a un amigo: Esta opción está desactivada temporalmente, rogamos disculpen las molestias |
|