home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 11 Util / 11-Util.zip / xloadimg.zip / xloadimage.4.1 / rle.h < prev    next >
C/C++ Source or Header  |  1993-10-21  |  5KB  |  185 lines

  1.  
  2. /*
  3.  * This software is copyrighted as noted below.  It may be freely copied,
  4.  * modified, and redistributed, provided that the copyright notice is 
  5.  * preserved on all copies.
  6.  * 
  7.  * There is no warranty or other guarantee of fitness for this software,
  8.  * it is provided solely "as is".  Bug reports or fixes may be sent
  9.  * to the author, who may or may not act on them as he desires.
  10.  *
  11.  * You may not include this software in a program or other software product
  12.  * without supplying the source, or without informing the end-user that the 
  13.  * source is available for no extra charge.
  14.  *
  15.  * If you modify this software, you should include a notice giving the
  16.  * name of the person performing the modification, the date of modification,
  17.  * and the reason for such modification.
  18.  */
  19. /* 
  20.  * svfb_global.h - externally visible variables for svfb.
  21.  * 
  22.  * Author:    Todd W. Fuqua
  23.  *         Computer Science Dept.
  24.  *         University of Utah
  25.  * Date:    Sun Jul 29 1984
  26.  * Copyright (c) 1984 Todd W. Fuqua
  27.  * 
  28.  * Added optimised dither square size globals
  29.  * 88/07/13 Graeme W. Gill
  30.  */
  31.  
  32. enum sv_dispatch {
  33.     RUN_DISPATCH
  34. };
  35.  
  36. /* some compilers have problems converting unsigned bytes to float */
  37. #define BYTEBUG
  38.  
  39. /* On BIGENDIAN machines swap the bytes. Everything but vax's and
  40.  * pdp-11's (not sure if it's pdp11 or PDP11 ??)
  41.  * are considered BIGENDIAN machines.
  42.  */
  43.  
  44. #define SWAB(val) (val= memToValLSB((byte *)&val, sizeof(val)))
  45.  
  46. /* ****************************************************************
  47.  * TAG( rle_pixel rle_map )
  48.  *
  49.  * Typedef for 8-bit (or less) pixel data.
  50.  *
  51.  * Typedef for 16-bit color map data.
  52.  */
  53. typedef unsigned char rle_pixel;
  54. typedef unsigned short rle_map;
  55.  
  56. /*
  57.  * Defines for traditional channel numbers
  58.  */
  59. #define    SV_RED        0        /* red channel traditionally here */
  60. #define SV_GREEN    1        /* green channel traditionally here */
  61. #define    SV_BLUE        2        /* blue channel traditionally here */
  62. #define SV_ALPHA    -1        /* Alpha channel here */
  63.  
  64. /*
  65.  * Return values from rle_get_setup
  66.  */
  67. #define    RLE_SUCCESS    0
  68. #define    RLE_NOT_RLE    -1
  69. #define    RLE_NO_SPACE    -2
  70. #define    RLE_EMPTY    -3
  71. #define    RLE_EOF        -4
  72.  
  73. /*
  74.  * TAG( sv_globals )
  75.  *
  76.  * Definition of "globals" structure used by RLE routines
  77.  */
  78.  
  79. extern struct sv_globals {
  80.     enum sv_dispatch sv_dispatch; /* type of file to create */
  81.     int        sv_ncolors,        /* number of color channels */
  82.       * sv_bg_color,    /* pointer to bg color vector */
  83.         sv_alpha,        /* if !0, save alpha channel */
  84.         sv_background,    /* (background) 0->just save pixels, */
  85.                 /* 1->overlay, 2->clear to bg first */
  86.         sv_xmin,        /* lower X bound (left) */
  87.         sv_xmax,        /* upper X bound (right) */
  88.         sv_ymin,        /* lower Y bound (bottom) */
  89.         sv_ymax,        /* upper Y bound (top) */
  90.         sv_ncmap,        /* number of color channels in color map */
  91.                 /* map only saved if != 0 */
  92.         sv_cmaplen;        /* log2 of color map length */
  93.     rle_map * sv_cmap;    /* pointer to color map array */
  94.     char    ** sv_comments;    /* pointer to array of pointers to comments */
  95.     ZFILE  * svfb_fd;        /* output file */
  96.     /* 
  97.      * Bit map of channels to read/save.  Indexed by (channel mod 256).
  98.      * Alpha channel sets bit 255.
  99.      * 
  100.      * Indexing (0 <= c <= 255):
  101.      *        sv_bits[c/8] & (1 << (c%8))
  102.      */
  103. #define SV_SET_BIT(glob,bit) \
  104.      ((glob).sv_bits[((bit)&0xff)/8] |= (1<<((bit)&0x7)))
  105. #define SV_CLR_BIT(glob,bit) \
  106.     ((glob).sv_bits[((bit)&0xff)/8] &= ~(1<<((bit)&0x7)))
  107. #define SV_BIT(glob,bit) \
  108.     ((glob).sv_bits[((bit)&0xff)/8] & (1<<((bit)&0x7)))
  109.     char    sv_bits[256/8];
  110.     /* 
  111.      * Local storage for rle_getrow & sv_putrow.
  112.      * rle_getrow has
  113.      *        scan_y    int        current Y scanline
  114.      *        vert_skip    int        number of lines to skip
  115.      * sv_putrow has
  116.      *        nblank    int        number of blank lines
  117.      *        brun    short(*)[2] Array of background runs.
  118.      *        fileptr    long        Position in output file.
  119.      */
  120.      union {
  121.     struct {
  122.         int    scan_y,
  123.         vert_skip;
  124.         char is_eof,    /* Set when EOF or EofOp encountered */
  125.         is_seek;    /* If true, can seek input file */
  126.     } get;
  127.     struct {
  128.         int    nblank;
  129.         short (*brun)[2];
  130.         long fileptr;
  131.     } put;
  132.      } sv_private;
  133. } sv_globals;
  134.  
  135.  
  136. /* 
  137.  * buildmap - build a more usable colormap from data in globals struct.
  138.  */
  139. extern rle_pixel **
  140. buildmap();
  141. /* ( globals, minmap, gamma )
  142.  * struct sv_globals * globals;
  143.  * int minmap;
  144.  * double gamma;
  145.  */
  146.  
  147. /*
  148.  * rle_getcom - get a specific comment from the image comments.
  149.  */
  150. extern char *
  151. rle_getcom();
  152. /* ( name, globals )
  153.  * char * name;
  154.  * struct sv_globals * globals;
  155.  */
  156.  
  157. /*
  158.  * rle_putcom - put (or replace) a comment into the image comments.
  159.  */
  160. extern char *
  161. rle_putcom();
  162. /* ( value, globals )
  163.  * char * value;
  164.  * struct sv_globals * globals;
  165.  */
  166.  
  167. /*
  168.  * rle_delcom - delete a specific comment from the image comments.
  169.  */
  170. extern char *
  171. rle_delcom();
  172. /* ( name, globals )
  173.  * char * name;
  174.  * struct sv_globals * globals;
  175.  */
  176.  
  177. /*
  178.  * dither globals
  179.  */
  180.  
  181. extern int dith_levels;    /* target effective number of levels, default = 128 */
  182. extern int dith_np2;    /* set non-zero to use non-power_of_2 matrix size */
  183. extern int dith_size;    /* effective size of the dither matrix chosen */
  184.  
  185.