// Copyright (C) Microsoft Corporation 1996-1997, All Rights reserved. #include "cstream.h" #pragma pack(push, 1) typedef struct { WORD log_width; WORD log_height; struct { BYTE ceGCT:3; BYTE fSort:1; BYTE cPrimaries:3; BYTE fGCT:1; } b; BYTE iBackground; BYTE wAspect; } LSD; #pragma pack(pop) // IFFERROR: Possible errors typedef int IFFERROR; const int IFFERR_NONE = 0; // no error const int IFFERR_HANDLELIMIT = 1; // too many open files const int IFFERR_PARAMETER = 2; // programmer error const int IFFERR_NOTSUPPORTED = 3; // feature not supported by format const int IFFERR_NOTAVAILABLE = 4; // item not available const int IFFERR_MEMORY = 5; // insufficient memory const int IFFERR_IMAGE = 6; // bad image data (decompression error) const int IFFERR_HEADER = 7; // header has bad fields const int IFFERR_IO_OPEN = 8; // error on open() const int IFFERR_IO_CLOSE = 9; // error on close() const int IFFERR_IO_READ = 10; // error on read() const int IFFERR_IO_WRITE = 11; // error on write() const int IFFERR_IO_SEEK = 12; // error on lseek() typedef enum { IFFCL_BILEVEL, // 1 BPP IFFCL_GRAY, // 2,4,6,8 BPP IFFCL_PALETTE, // 2,4,6,8 BPP IFFCL_RGB, // 24 BPP chunky IFFCL_RGBPLANAR, // 24 BPP in 8 bit planes IFFCL_RGBA, // 32 BPP chunky IFFCL_RGBAPLANAR, // 32 BPP in four 8 bit planes*/ IFFCL_CMYK, IFFCL_YCC, IFFCL_CIELAB, } IFFCLASS; // IFFCOMPRESSION: Compression options typedef enum { IFFCOMP_NONE, // no compression IFFCOMP_DEFAULT, // whatever is defined for the format IFFCOMP_LZW, // Lempel-Zif } IFFCOMPRESSION; // IFFSEQUENCE: Line sequences typedef enum { IFFSEQ_TOPDOWN, IFFSEQ_BOTTOMUP, // BMP and TGA compressed IFFSEQ_INTERLACED, // for GIF } IFFSEQUENCE; typedef struct { int CharSize; // size of input data int CodeSize; // Max bits in a code int ClearCode; // based on CharSize int CurBits; // current size of a code int BitPos; // range = 0 - 7, 0 is MSB int OldCode; // continuity data for STREAMEXPAND int TableEntry; UINT LastChar; int OutString; // offset into Stack int CodeJump; int *CodeTable; // Compress and Expand PBYTE StringTable; // Expand only int *HashTable; // Compress only PBYTE Stack; // Expand only LPBYTE CodeInput; LPBYTE CodeOutput; } LZDATA; typedef struct { IFFCLASS Class; // Class of file int Bits; int DimX; int DimY; int LineOffset; // Offset between lines in output buffer int LineBytes; // Bytes per line w/o padding - LineBytes <= LineOffset int PackMode; // Packing. int curline; // Current line number int linelen; // For seeking and other stuff (<0 if not seekable) IFFERROR Error; // file format error CStream* prstream; // read stream // End of required fields int BytesPerLine; IFFSEQUENCE Sequence; int BytesInRWBuffer; // number of bytes in rwbuffer int CompBufferSize; int DecompBufferSize; LPBYTE RWBuffer; // allocated buffer LPBYTE rw_ptr; LPBYTE DecompBuffer; LPBYTE dcmp_ptr; int ReadItAll; int BytesLeft; int StripLines; int LinesPerStrip; int ActualLinesPerStrip; int PaletteSize; LPBYTE Palette; LZDATA* plzData; BOOL BlackOnWhite; LSD lsd; } IFF_FID, IFF_GIF; FSERR SetupForRead(int pos, int iWhichImage, IFF_FID* piff); typedef IFF_FID *IFFPTR; // IFFPACKMODE: Packing modes typedef enum { IFFPM_PACKED, IFFPM_UNPACKED, IFFPM_LEFTJUSTIFIED, IFFPM_NORMALIZED, IFFPM_RAW, } IFFPACKMODE; #ifndef _MAC_ #define MYCPU 0 #define INTELSWAP16(X) #define INTELSWAP32(X) #else #define MYCPU 1 #define INTELSWAP16(X) { unsigned char c, *p=(unsigned char *)&X; c=p[0]; p[0]=p[1]; p[1]=c; } #define INTELSWAP32(X) { unsigned char c, *p=(unsigned char *)&X; c=p[0]; p[0]=p[3]; p[3]=c; c = p[1]; p[1] = p[2]; p[2] = c; } #endif enum CPUTYPE { INTEL = 0, MOTOROLA=1 }; #define MAXSIZE 8192 #ifndef RWBUFFSIZE #define RWBUFFSIZE (8 * 4096) #endif