home *** CD-ROM | disk | FTP | other *** search
/ Hacks & Cracks / Hacks_and_Cracks.iso / hackersguides-&-software / hdsk41.zip / SOURCE.ZIP / GIF.HPP < prev    next >
C/C++ Source or Header  |  1994-03-17  |  6KB  |  261 lines

  1. //--------------------------------------------------------//
  2. //                                                        //
  3. //   File:   GIF.HPP                                      //
  4. //                                                        //
  5. //   Desc:   Structure and Class definitions for          //
  6. //           CompuServe's GIF Format, Version 89a         //
  7. //                                                        //
  8. //--------------------------------------------------------//
  9.  
  10. #ifndef _GIF_HPP_
  11. #define _GIF_HPP_
  12.  
  13. #include "stdlib.h"
  14. #include "stdio.h"
  15. #include "string.h"
  16. #include "ctype.h"
  17. #include "iostream.h"
  18.  
  19. #include "codec.hpp"
  20. #include "color.hpp"
  21.  
  22. //..................struct GIFHEADER
  23.  
  24. struct GIFHEADER             // GIF File Header
  25. {
  26.    char sig[3];              // "GIF"
  27.    char ver[3];              // "87a" or "89a"
  28.    GIFHEADER( )
  29.    {
  30.       sig[0] = 'G';
  31.       sig[1] = 'I';
  32.       sig[2] = 'F';
  33.       ver[0] = '8';
  34.       ver[1] = '9';
  35.       ver[2] = 'a';
  36.    }
  37.   ~GIFHEADER( )
  38.    {
  39.    }
  40.    void list( void );
  41.    int  get( FILE *f );
  42.    int  put( FILE *f );
  43.    int  isvalid( void );
  44. };
  45.  
  46. //..................struct GIFSCDESC
  47.  
  48. #define scdGCT       0x80    // global color table
  49. #define scdGCTCRES   0x70    // color res : nbits-1
  50. #define scdGCTSORT   0x08    // sort flag
  51. #define scdGCTSIZE   0x07    // color cnt as 2^(sss+1)
  52.  
  53. struct GIFSCDESC             // Screen Descriptor
  54. {
  55.    unsigned short scwidth;   // width in pixels
  56.    unsigned short scheight;  // height in pixels
  57.    unsigned char  flags;     // various flags
  58.    unsigned char  bgclr;     // background color
  59.    unsigned char  pixasp;    // pixel aspect ratio
  60.    GIFSCDESC( )
  61.    {
  62.       scwidth = scheight = 0;
  63.       flags = bgclr = pixasp = 0;
  64.    }
  65.    GIFSCDESC( int w, int h, int d )
  66.    {
  67.       scwidth  = w;
  68.       scheight = h;
  69.       flags = scdGCT | ((d-1)<<4) | (d-1);
  70.       bgclr = pixasp = 0;
  71.    }
  72.   ~GIFSCDESC( )
  73.    {
  74.    }
  75.    void list( void );
  76.    int get( FILE *f );
  77.    int put( FILE *f );
  78.    int isgct( void )
  79.    {
  80.       return (flags & scdGCT) ? 1 : 0;
  81.    }
  82.    int issorted( void )
  83.    {
  84.       return (flags & scdGCTSORT) ? 1 : 0;
  85.    }
  86.    int depth( void )    // bits per pixel
  87.    {
  88.       return ((flags & scdGCTCRES) >> 4) + 1;
  89.    }
  90.    int ncolors( void )  // # entries in GCT
  91.    {
  92.       return 1 << ((flags & scdGCTSIZE) + 1);
  93.    }
  94. };
  95.  
  96. //..................struct GIFIMDESC
  97.  
  98. #define imdLCT       0x80    // local color table
  99. #define imdINTRLACE  0x40    // interlace flag
  100. #define imdLCTSORT   0x20    // sort flag
  101. #define imdRESV      0x18    // reserved
  102. #define imdLCTSIZE   0x07    // color cnt as 2^(sss+1)
  103.  
  104. struct GIFIMDESC             // Image Descriptor
  105. {
  106.    unsigned char  id;        // 0x2C
  107.    unsigned short xleft;     // x origin
  108.    unsigned short ytop;      // y origin
  109.    unsigned short imwidth;   // image width
  110.    unsigned short imheight;  // image height
  111.    unsigned char  flags;     // various flags
  112.    GIFIMDESC( )
  113.    {
  114.       id = 0x2C;
  115.       xleft = ytop = 0;
  116.       imwidth = imheight = 0;
  117.       flags = 0;
  118.    }
  119.    GIFIMDESC( int w, int h, int d )
  120.    {
  121.       id = 0x2C;
  122.       xleft = ytop = 0;
  123.       imwidth = w;
  124.       imheight = h;
  125.       flags = 0;
  126.    }
  127.   ~GIFIMDESC( )
  128.    {
  129.    }
  130.    void list( void );
  131.    int  get( FILE *f );
  132.    int  put( FILE *f );
  133.    int islct( void )
  134.    {
  135.       return (flags & imdLCT) ? 1 : 0;
  136.    }
  137.    int issorted( void )
  138.    {
  139.       return (flags & imdLCTSORT) ? 1 : 0;
  140.    }
  141.    int isinterlaced( void )
  142.    {
  143.       return (flags & imdINTRLACE) ? 1 : 0;
  144.    }
  145.    int ncolors( void )  // # entries in LCT
  146.    {
  147.       if( islct() )
  148.          return 1 << ((flags & imdLCTSIZE) + 1);
  149.       return 0;
  150.    }
  151. };
  152.  
  153. //..................struct GIFCTLEXT
  154.  
  155. #define ctlRESV      0xE0    // reserved
  156. #define ctlDISPOSE   0x1C    // disposal method
  157. #define ctlINPUT     0x02    // user input flag
  158. #define ctlTRANSPAR  0x01    // transparency flag
  159.  
  160. struct GIFCTLEXT             // Control Extension
  161. {
  162.    unsigned char  id;        // 0x21 - extension
  163.    unsigned char  label;     // 0xF9 - extension type
  164.    unsigned char  size;      // always 4
  165.    unsigned char  flags;     // various flags
  166.    unsigned short delay;     // 1/100th seconds
  167.    unsigned char  trclr;     // transparency color
  168.    GIFCTLEXT( )
  169.    {
  170.       id = 0x21;
  171.       label = 0xF9;
  172.       flags = trclr = 0;
  173.       delay = 0;
  174.    }
  175.   ~GIFCTLEXT( )
  176.    {
  177.    }
  178.    void list( void );
  179.    int  get( FILE *f );
  180.    int  put( FILE *f );
  181. };
  182.  
  183. //..................struct GIFCOMEXT
  184.  
  185. struct GIFCOMEXT             // Comment Extension
  186. {
  187.    unsigned char  id;        // 0x21 - extension
  188.    unsigned char  label;     // 0xFE - extension type
  189.    GIFCOMEXT( )
  190.    {
  191.       id = 0x21;
  192.       label = 0xFE;
  193.    }
  194.   ~GIFCOMEXT( )
  195.    {
  196.    }
  197.    void list( void );
  198.    int  get( FILE *f );
  199.    int  put( FILE *f );
  200. };
  201.  
  202. //..................struct GIFTXTEXT
  203.  
  204. struct GIFTXTEXT             // Text Extension
  205. {
  206.    unsigned char  id;        // 0x21 - extension
  207.    unsigned char  label;     // 0x01 - extension type
  208.    unsigned char  size;      // always 12
  209.    unsigned short xleft;     // x origin
  210.    unsigned short ytop;      // y origin
  211.    unsigned short txwidth;   // text width
  212.    unsigned short txheight;  // text height
  213.    unsigned char  cewidth;   // cell width
  214.    unsigned char  ceheight;  // cell height
  215.    unsigned char  fgclr;     // foreground color
  216.    unsigned char  bgclr;     // background color
  217.    GIFTXTEXT( )
  218.    {
  219.       id = 0x21;
  220.       label = 0x01;
  221.       size = 12;
  222.       xleft = ytop = 0;
  223.       txwidth = txheight = 0;
  224.       cewidth = ceheight = 0;
  225.       fgclr = bgclr = 0;
  226.    }
  227.   ~GIFTXTEXT( )
  228.    {
  229.    }
  230.    void list( void );
  231.    int  get( FILE *f );
  232.    int  put( FILE *f );
  233. };
  234.  
  235. //..................struct GIFAPPEXT
  236.  
  237. struct GIFAPPEXT              // Application Extension
  238. {
  239.    unsigned char  id;         // 0x21 - extension
  240.    unsigned char  label;      // 0xFF - extension type
  241.    unsigned char  size;       // always 11
  242.    char           apname[8];  // application name
  243.    char           apcode[3];  // application code
  244.    GIFAPPEXT( )
  245.    {
  246.       id = 0x21;
  247.       label = 0xFF;
  248.       size = 11;
  249.       memset( apname, 0, 8 );
  250.       memset( apcode, 0, 3 );
  251.    }
  252.   ~GIFAPPEXT( )
  253.    {
  254.    }
  255.    void list( void );
  256.    int  get( FILE *f );
  257.    int  put( FILE *f );
  258. };
  259.  
  260. #endif
  261.