ftp.nice.ch/pub/next/graphics/movie/Movie.3.0.NIHS.bs.tar.gz#/Movie3.0/Source/xanim/xanim_iff.h

This is xanim_iff.h in view mode; [Download] [Up]

/*
 * xanim_iff.h
 *
 * Copyright (C) 1990,1991,1992,1993,1994 by Mark Podlipec. 
 * All rights reserved.
 *
 * This software may be freely copied, modified and redistributed without
 * fee for non-commerical purposes provided that this copyright notice is
 * preserved intact on all copies and modified copies.
 * 
 * There is no warranty or other guarantee of fitness of this software.
 * It is provided solely "as is". The author(s) disclaim(s) all
 * responsibility and liability with respect to this software's usage
 * or its effect upon hardware or computer systems.
 *
 */

typedef struct 
{
 LONG id;
 LONG size;
} Chunk_Header;

/* Graphic Stuff */
#define ANHD 0x414e4844
#define ANIM 0x414e494d
#define ANSQ 0x414e5351
#define BMHD 0x424d4844
#define BODY 0x424f4459
#define TINY 0x54494E59
#define CAMG 0x43414d47
#define CMAP 0x434d4150
#define CRNG 0x43524e47
#define DLTA 0x444c5441
#define DPAN 0x4450414e
#define DPPS 0x44505053
#define DPPV 0x44505056
#define DRNG 0x44524e47
#define FORM 0x464f524d
#define GRAB 0x47524142
#define ILBM 0x494c424d
#define IMRT 0x494d5254
#define DPI  0x44504920
#define ANFI 0x414e4649

/* Grouping Stuff */
#define LIST 0x4c495354
#define PROP 0x50524f50
#define FACE 0x46414345

/* Sound stuff */
#define VHDR 0x56484452
#define ANNO 0x414e4e4f
#define CHAN 0x4348414e


typedef struct
{
 UWORD width, height;
 WORD x, y;
 UBYTE depth;
 UBYTE masking;
 UBYTE compression;
 UBYTE pad1;
 UWORD transparentColor;
 UBYTE xAspect, yAspect;
 WORD pageWidth, pageHeight;
} Bit_Map_Header;

#define BMHD_COMP_NONE 0L
#define BMHD_COMP_BYTERUN 1L

#define BMHD_MSK_NONE 0L
#define BMHD_MSK_HAS 1L
#define BMHD_MSK_TRANS 2L
#define BMHD_MSK_LASSO 3L

#define mskNone                 0
#define mskHasMask              1
#define mskHasTransparentColor  2
#define mskLasso                3

#define cmpNone      0
#define cmpByteRun1  1

/* Aspect ratios: The proper fraction xAspect/yAspect represents the pixel
 * aspect ratio pixel_width/pixel_height.
 *
 * For the 4 Amiga display modes:
 *   320 x 200: 10/11  (these pixels are taller than they are wide)
 *   320 x 400: 20/11
 *   640 x 200:  5/11
 *   640 x 400: 10/11      */
#define x320x200Aspect 10
#define y320x200Aspect 11
#define x320x400Aspect 20
#define y320x400Aspect 11
#define x640x200Aspect  5
#define y640x200Aspect 11
#define x640x400Aspect 10
#define y640x400Aspect 11

/* CRNG Stuff */
#define IFF_CRNG_ACTIVE   1
#define IFF_CRNG_REVERSE  2
/* 16384 * 16.6667 ms */
#define IFF_CRNG_INTERVAL (273065)
#define IFF_CRNG_HDR_SIZE 8
#define IFF_CRNG_DPII_KLUDGE 36

/* CAMG Stuff */
#define IFF_CAMG_NOP   0x00000001
#define IFF_CAMG_EHB   0x00000080
#define IFF_CAMG_HAM   0x00000800
#define IFF_CAMG_LACE  0x00004000

typedef struct
{
 UWORD width,height;
 WORD x, y;
 WORD xoff, yoff;
} Face_Header;

typedef struct 
{
 LONG id;
 LONG size;
 LONG subid;
} Group_Header;

typedef struct 
{
 LONG id;
 LONG size;
 LONG subid;
 UBYTE grpData[ 1 ];
} Group_Chunk;

typedef struct
{
 UBYTE op;
 UBYTE mask;
 UWORD w,h;
 UWORD x,y;
 ULONG abstime;
 ULONG reltime;
 UBYTE interleave;
 UBYTE pad0;
 ULONG bits;
 UBYTE pad[16];
} Anim_Header;
#define Anim_Header_SIZE 40
#define IFF_ANHD_LDATA  0x0001
#define IFF_ANHD_XOR    0x0002
#define IFF_ANHD_1LIST  0x0002
#define IFF_ANHD_RLC    0x0008
#define IFF_ANHD_VERT   0x0010
#define IFF_ANHD_LIOFF  0x0020

typedef struct
{
 LONG minx;
 LONG miny;
 LONG maxx;
 LONG maxy;
} IFF_DLTA_HDR;

typedef struct
{
  ULONG dnum;
  ULONG time;
  ULONG frame;
} IFF_ANSQ;

typedef struct IFF_ACT_LST_STRUCT
{
  ULONG type;
  XA_ACTION *act;
  struct IFF_ACT_LST_STRUCT *next;
} IFF_ACT_LST;

typedef struct
{
  ULONG cnt;
  ULONG frame;
  IFF_ACT_LST *start;
  IFF_ACT_LST *end;
} IFF_DLTA_TABLE;

extern ULONG IFF_Read_File();
extern ULONG IFF_Delta3();
extern ULONG IFF_Delta5();
extern ULONG IFF_Delta7();
extern ULONG IFF_Deltal();
extern ULONG IFF_DeltaJ();
extern LONG Is_IFF_File();
extern LONG UnPackRow();

/* POD NOTE: further optimization would be to have
 * IFF_Byte_Mod and IFF_Byte_Mod_with_XOR_flag
 */
#define IFF_Byte_Mod(ptr,data,dmask,xorflag) { register UBYTE *_iptr = ptr; \
if (xorflag) { \
  if (0x80 & data) *_iptr++ ^= dmask; else _iptr++; \
  if (0x40 & data) *_iptr++ ^= dmask; else _iptr++; \
  if (0x20 & data) *_iptr++ ^= dmask; else _iptr++; \
  if (0x10 & data) *_iptr++ ^= dmask; else _iptr++; \
  if (0x08 & data) *_iptr++ ^= dmask; else _iptr++; \
  if (0x04 & data) *_iptr++ ^= dmask; else _iptr++; \
  if (0x02 & data) *_iptr++ ^= dmask; else _iptr++; \
  if (0x01 & data) *_iptr   ^= dmask; \
} else { \
  register UBYTE dmaskoff = ~dmask; \
  if (0x80 & data) *_iptr++ |= dmask; else *_iptr++  &= dmaskoff; \
  if (0x40 & data) *_iptr++ |= dmask; else *_iptr++  &= dmaskoff; \
  if (0x20 & data) *_iptr++ |= dmask; else *_iptr++  &= dmaskoff; \
  if (0x10 & data) *_iptr++ |= dmask; else *_iptr++  &= dmaskoff; \
  if (0x08 & data) *_iptr++ |= dmask; else *_iptr++  &= dmaskoff; \
  if (0x04 & data) *_iptr++ |= dmask; else *_iptr++  &= dmaskoff; \
  if (0x02 & data) *_iptr++ |= dmask; else *_iptr++  &= dmaskoff; \
  if (0x01 & data) *_iptr   |= dmask; else *_iptr    &= dmaskoff; \
} }


#define IFF_Short_Mod(ptr,data,dmask,xorflag) { register UBYTE *_iptr = ptr; \
if (xorflag) { \
  if (0x8000 & data) *_iptr++  ^= dmask; else _iptr++; \
  if (0x4000 & data) *_iptr++  ^= dmask; else _iptr++; \
  if (0x2000 & data) *_iptr++  ^= dmask; else _iptr++; \
  if (0x1000 & data) *_iptr++  ^= dmask; else _iptr++; \
  if (0x0800 & data) *_iptr++  ^= dmask; else _iptr++; \
  if (0x0400 & data) *_iptr++  ^= dmask; else _iptr++; \
  if (0x0200 & data) *_iptr++  ^= dmask; else _iptr++; \
  if (0x0100 & data) *_iptr++  ^= dmask; else _iptr++; \
  if (0x0080 & data) *_iptr++  ^= dmask; else _iptr++; \
  if (0x0040 & data) *_iptr++  ^= dmask; else _iptr++; \
  if (0x0020 & data) *_iptr++   ^= dmask; else _iptr++; \
  if (0x0010 & data) *_iptr++   ^= dmask; else _iptr++; \
  if (0x0008 & data) *_iptr++   ^= dmask; else _iptr++; \
  if (0x0004 & data) *_iptr++   ^= dmask; else _iptr++; \
  if (0x0002 & data) *_iptr++   ^= dmask; else _iptr++; \
  if (0x0001 & data) *_iptr     ^= dmask; \
} else { \
  register UBYTE dmaskoff = ~dmask; \
  if (0x8000 & data) *_iptr++  |= dmask; else *_iptr++  &= dmaskoff; \
  if (0x4000 & data) *_iptr++  |= dmask; else *_iptr++  &= dmaskoff; \
  if (0x2000 & data) *_iptr++  |= dmask; else *_iptr++  &= dmaskoff; \
  if (0x1000 & data) *_iptr++  |= dmask; else *_iptr++  &= dmaskoff; \
  if (0x0800 & data) *_iptr++  |= dmask; else *_iptr++  &= dmaskoff; \
  if (0x0400 & data) *_iptr++  |= dmask; else *_iptr++  &= dmaskoff; \
  if (0x0200 & data) *_iptr++  |= dmask; else *_iptr++  &= dmaskoff; \
  if (0x0100 & data) *_iptr++  |= dmask; else *_iptr++  &= dmaskoff; \
  if (0x0080 & data) *_iptr++  |= dmask; else *_iptr++  &= dmaskoff; \
  if (0x0040 & data) *_iptr++  |= dmask; else *_iptr++  &= dmaskoff; \
  if (0x0020 & data) *_iptr++   |= dmask; else *_iptr++   &= dmaskoff; \
  if (0x0010 & data) *_iptr++   |= dmask; else *_iptr++   &= dmaskoff; \
  if (0x0008 & data) *_iptr++   |= dmask; else *_iptr++   &= dmaskoff; \
  if (0x0004 & data) *_iptr++   |= dmask; else *_iptr++   &= dmaskoff; \
  if (0x0002 & data) *_iptr++   |= dmask; else *_iptr++   &= dmaskoff; \
  if (0x0001 & data) *_iptr     |= dmask; else *_iptr     &= dmaskoff; \
} }

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.