home *** CD-ROM | disk | FTP | other *** search
/ Dream 44 / Amiga_Dream_44.iso / Linux / Apps / xanim.tgz / xanim / xanim27064 / xa_iff.h < prev    next >
C/C++ Source or Header  |  1997-01-26  |  8KB  |  265 lines

  1.  
  2. /*
  3.  * xa_iff.h
  4.  *
  5.  * Copyright (C) 1990,1991,1992,1993,1994,1995,1996,1997 by Mark Podlipec. 
  6.  * All rights reserved.
  7.  *
  8.  * This software may be freely copied, modified and redistributed without
  9.  * fee for non-commerical purposes provided that this copyright notice is
  10.  * preserved intact on all copies and modified copies.
  11.  * 
  12.  * There is no warranty or other guarantee of fitness of this software.
  13.  * It is provided solely "as is". The author(s) disclaim(s) all
  14.  * responsibility and liability with respect to this software's usage
  15.  * or its effect upon hardware or computer systems.
  16.  *
  17.  */
  18.  
  19. typedef struct 
  20. {
  21.  xaLONG id;
  22.  xaLONG size;
  23. } Chunk_Header;
  24.  
  25. /* Graphic Stuff */
  26. #define ANHD 0x414e4844
  27. #define ANIM 0x414e494d
  28. #define ANSQ 0x414e5351
  29. #define BMHD 0x424d4844
  30. #define BODY 0x424f4459
  31. #define TINY 0x54494E59
  32. #define CAMG 0x43414d47
  33. #define CMAP 0x434d4150
  34. #define CRNG 0x43524e47
  35. #define DLTA 0x444c5441
  36. #define DPAN 0x4450414e
  37. #define DPPS 0x44505053
  38. #define DPPV 0x44505056
  39. #define DRNG 0x44524e47
  40. #define FORM 0x464f524d
  41. #define GRAB 0x47524142
  42. #define ILBM 0x494c424d
  43. #define IMRT 0x494d5254
  44. #define DPI  0x44504920
  45. #define ANFI 0x414e4649
  46.  
  47. /* Grouping Stuff */
  48. #define LIST 0x4c495354
  49. #define PROP 0x50524f50
  50. #define FACE 0x46414345
  51.  
  52. /* Sound stuff */
  53. #define VHDR 0x56484452
  54. #define ANNO 0x414e4e4f
  55. #define CHAN 0x4348414e
  56.  
  57.  
  58. typedef struct
  59. {
  60.  xaUSHORT width, height;
  61.  xaSHORT x, y;
  62.  xaUBYTE depth;
  63.  xaUBYTE masking;
  64.  xaUBYTE compression;
  65.  xaUBYTE pad1;
  66.  xaUSHORT transparentColor;
  67.  xaUBYTE xAspect, yAspect;
  68.  xaSHORT pageWidth, pageHeight;
  69. } Bit_Map_Header;
  70.  
  71. #define BMHD_COMP_NONE 0L
  72. #define BMHD_COMP_BYTERUN 1L
  73.  
  74. #define BMHD_MSK_NONE 0L
  75. #define BMHD_MSK_HAS 1L
  76. #define BMHD_MSK_TRANS 2L
  77. #define BMHD_MSK_LASSO 3L
  78.  
  79. #define mskNone                 0
  80. #define mskHasMask              1
  81. #define mskHasTransparentColor  2
  82. #define mskLasso                3
  83.  
  84. #define cmpNone      0
  85. #define cmpByteRun1  1
  86.  
  87. /* Aspect ratios: The proper fraction xAspect/yAspect represents the pixel
  88.  * aspect ratio pixel_width/pixel_height.
  89.  *
  90.  * For the 4 Amiga display modes:
  91.  *   320 x 200: 10/11  (these pixels are taller than they are wide)
  92.  *   320 x 400: 20/11
  93.  *   640 x 200:  5/11
  94.  *   640 x 400: 10/11      */
  95. #define x320x200Aspect 10
  96. #define y320x200Aspect 11
  97. #define x320x400Aspect 20
  98. #define y320x400Aspect 11
  99. #define x640x200Aspect  5
  100. #define y640x200Aspect 11
  101. #define x640x400Aspect 10
  102. #define y640x400Aspect 11
  103.  
  104. /* CRNG Stuff */
  105. #define IFF_CRNG_ACTIVE   1
  106. #define IFF_CRNG_REVERSE  2
  107. /* 16384 * 16.6667 ms */
  108. #define IFF_CRNG_INTERVAL (273065)
  109. #define IFF_CRNG_HDR_SIZE 8
  110. #define IFF_CRNG_DPII_KLUDGE 36
  111.  
  112. /* CAMG Stuff */
  113. #define IFF_CAMG_NOP   0x00000001
  114. #define IFF_CAMG_EHB   0x00000080
  115. #define IFF_CAMG_HAM   0x00000800
  116. #define IFF_CAMG_LACE  0x00004000
  117.  
  118. typedef struct
  119. {
  120.  xaUSHORT width,height;
  121.  xaSHORT x, y;
  122.  xaSHORT xoff, yoff;
  123. } Face_Header;
  124.  
  125. typedef struct 
  126. {
  127.  xaLONG id;
  128.  xaLONG size;
  129.  xaLONG subid;
  130. } Group_Header;
  131.  
  132. typedef struct 
  133. {
  134.  xaLONG id;
  135.  xaLONG size;
  136.  xaLONG subid;
  137.  xaUBYTE grpData[ 1 ];
  138. } Group_Chunk;
  139.  
  140. typedef struct
  141. {
  142.  xaUBYTE op;
  143.  xaUBYTE mask;
  144.  xaUSHORT w,h;
  145.  xaUSHORT x,y;
  146.  xaULONG abstime;
  147.  xaULONG reltime;
  148.  xaUBYTE interleave;
  149.  xaUBYTE pad0;
  150.  xaULONG bits;
  151.  xaUBYTE pad[16];
  152. } Anim_Header;
  153. #define Anim_Header_SIZE 40
  154. #define IFF_ANHD_LDATA  0x0001
  155. #define IFF_ANHD_XOR    0x0002
  156. #define IFF_ANHD_1LIST  0x0002
  157. #define IFF_ANHD_RLC    0x0008
  158. #define IFF_ANHD_VERT   0x0010
  159. #define IFF_ANHD_LIOFF  0x0020
  160.  
  161. typedef struct
  162. {
  163.  xaLONG minx;
  164.  xaLONG miny;
  165.  xaLONG maxx;
  166.  xaLONG maxy;
  167. } IFF_DLTA_HDR;
  168.  
  169. typedef struct
  170. {
  171.   xaULONG dnum;
  172.   xaULONG time;
  173.   xaULONG frame;
  174. } IFF_ANSQ;
  175.  
  176. typedef struct IFF_ACT_LST_STRUCT
  177. {
  178.   xaULONG type;
  179.   XA_ACTION *act;
  180.   struct IFF_ACT_LST_STRUCT *next;
  181. } IFF_ACT_LST;
  182.  
  183. typedef struct
  184. {
  185.   xaULONG cnt;
  186.   xaULONG frame;
  187.   IFF_ACT_LST *start;
  188.   IFF_ACT_LST *end;
  189. } IFF_DLTA_TABLE;
  190.  
  191. extern xaULONG IFF_Read_File();
  192. extern xaULONG IFF_Delta3();
  193. extern xaULONG IFF_Delta5();
  194. extern xaULONG IFF_Delta7();
  195. extern xaULONG IFF_Delta8();
  196. extern xaULONG IFF_Deltal();
  197. extern xaULONG IFF_DeltaJ();
  198. extern xaLONG Is_IFF_File();
  199. extern xaLONG UnPackRow();
  200.  
  201. /* POD NOTE: further optimization would be to have
  202.  * IFF_Byte_Mod and IFF_Byte_Mod_with_XOR_flag
  203.  */
  204. #define IFF_Byte_Mod(ptr,data,dmask,xorflag) { register xaUBYTE *_iptr = ptr; \
  205. if (xorflag) { \
  206.   if (0x80 & data) *_iptr++ ^= dmask; else _iptr++; \
  207.   if (0x40 & data) *_iptr++ ^= dmask; else _iptr++; \
  208.   if (0x20 & data) *_iptr++ ^= dmask; else _iptr++; \
  209.   if (0x10 & data) *_iptr++ ^= dmask; else _iptr++; \
  210.   if (0x08 & data) *_iptr++ ^= dmask; else _iptr++; \
  211.   if (0x04 & data) *_iptr++ ^= dmask; else _iptr++; \
  212.   if (0x02 & data) *_iptr++ ^= dmask; else _iptr++; \
  213.   if (0x01 & data) *_iptr   ^= dmask; \
  214. } else { \
  215.   register xaUBYTE dmaskoff = ~dmask; \
  216.   if (0x80 & data) *_iptr++ |= dmask; else *_iptr++  &= dmaskoff; \
  217.   if (0x40 & data) *_iptr++ |= dmask; else *_iptr++  &= dmaskoff; \
  218.   if (0x20 & data) *_iptr++ |= dmask; else *_iptr++  &= dmaskoff; \
  219.   if (0x10 & data) *_iptr++ |= dmask; else *_iptr++  &= dmaskoff; \
  220.   if (0x08 & data) *_iptr++ |= dmask; else *_iptr++  &= dmaskoff; \
  221.   if (0x04 & data) *_iptr++ |= dmask; else *_iptr++  &= dmaskoff; \
  222.   if (0x02 & data) *_iptr++ |= dmask; else *_iptr++  &= dmaskoff; \
  223.   if (0x01 & data) *_iptr   |= dmask; else *_iptr    &= dmaskoff; \
  224. } }
  225.  
  226.  
  227. #define IFF_Short_Mod(ptr,data,dmask,xorflag) { register xaUBYTE *_iptr = ptr; \
  228. if (xorflag) { \
  229.   if (0x8000 & data) *_iptr++  ^= dmask; else _iptr++; \
  230.   if (0x4000 & data) *_iptr++  ^= dmask; else _iptr++; \
  231.   if (0x2000 & data) *_iptr++  ^= dmask; else _iptr++; \
  232.   if (0x1000 & data) *_iptr++  ^= dmask; else _iptr++; \
  233.   if (0x0800 & data) *_iptr++  ^= dmask; else _iptr++; \
  234.   if (0x0400 & data) *_iptr++  ^= dmask; else _iptr++; \
  235.   if (0x0200 & data) *_iptr++  ^= dmask; else _iptr++; \
  236.   if (0x0100 & data) *_iptr++  ^= dmask; else _iptr++; \
  237.   if (0x0080 & data) *_iptr++  ^= dmask; else _iptr++; \
  238.   if (0x0040 & data) *_iptr++  ^= dmask; else _iptr++; \
  239.   if (0x0020 & data) *_iptr++   ^= dmask; else _iptr++; \
  240.   if (0x0010 & data) *_iptr++   ^= dmask; else _iptr++; \
  241.   if (0x0008 & data) *_iptr++   ^= dmask; else _iptr++; \
  242.   if (0x0004 & data) *_iptr++   ^= dmask; else _iptr++; \
  243.   if (0x0002 & data) *_iptr++   ^= dmask; else _iptr++; \
  244.   if (0x0001 & data) *_iptr     ^= dmask; \
  245. } else { \
  246.   register xaUBYTE dmaskoff = ~dmask; \
  247.   if (0x8000 & data) *_iptr++  |= dmask; else *_iptr++  &= dmaskoff; \
  248.   if (0x4000 & data) *_iptr++  |= dmask; else *_iptr++  &= dmaskoff; \
  249.   if (0x2000 & data) *_iptr++  |= dmask; else *_iptr++  &= dmaskoff; \
  250.   if (0x1000 & data) *_iptr++  |= dmask; else *_iptr++  &= dmaskoff; \
  251.   if (0x0800 & data) *_iptr++  |= dmask; else *_iptr++  &= dmaskoff; \
  252.   if (0x0400 & data) *_iptr++  |= dmask; else *_iptr++  &= dmaskoff; \
  253.   if (0x0200 & data) *_iptr++  |= dmask; else *_iptr++  &= dmaskoff; \
  254.   if (0x0100 & data) *_iptr++  |= dmask; else *_iptr++  &= dmaskoff; \
  255.   if (0x0080 & data) *_iptr++  |= dmask; else *_iptr++  &= dmaskoff; \
  256.   if (0x0040 & data) *_iptr++  |= dmask; else *_iptr++  &= dmaskoff; \
  257.   if (0x0020 & data) *_iptr++   |= dmask; else *_iptr++   &= dmaskoff; \
  258.   if (0x0010 & data) *_iptr++   |= dmask; else *_iptr++   &= dmaskoff; \
  259.   if (0x0008 & data) *_iptr++   |= dmask; else *_iptr++   &= dmaskoff; \
  260.   if (0x0004 & data) *_iptr++   |= dmask; else *_iptr++   &= dmaskoff; \
  261.   if (0x0002 & data) *_iptr++   |= dmask; else *_iptr++   &= dmaskoff; \
  262.   if (0x0001 & data) *_iptr     |= dmask; else *_iptr     &= dmaskoff; \
  263. } }
  264.  
  265.