home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1997 March / VPR9703A.ISO / VPR_DATA / DOGA / SOURCES / REND.LZH / PIC1600 / PICLIB.H < prev    next >
C/C++ Source or Header  |  1996-07-16  |  5KB  |  188 lines

  1. #ifndef _PICLIB_H_
  2. #define _PICLIB_H_
  3.  
  4. #ifndef TRUE
  5.     #define FALSE    0
  6.     #define TRUE    1
  7. #endif
  8.  
  9. #if defined(WINDOWS) || defined(__WIN32__)
  10.     #define inline
  11.     #define INLINE
  12. #ifdef __WIN32__
  13.     #define BUFFERSIZE    (64*1024)
  14. #else
  15.     #define BUFFERSIZE    4096
  16. #endif
  17. #else
  18.     #define BUFFERSIZE    16384
  19. #endif
  20.  
  21. #define GRAM_ADDRESS    ((unsigned short *)0xc00000)
  22.  
  23. #define    STORECOLORMAX    32
  24. #define STOREDATAMAX    4
  25. #define FILENAMEMAX        128
  26. #define EXT                4
  27. #define    STRING            256
  28. #define EOFCODE            0x1a
  29.  
  30. typedef unsigned long    Pixel;
  31. #if 0
  32. typedef struct {
  33.     unsigned char green;
  34.     unsigned char red;
  35.     unsigned char blue;
  36.     unsigned char trans;
  37. }    Pixel;
  38. #endif
  39.  
  40. #if !defined(WINDOWS) || defined(PICLIB)
  41. typedef enum {MOD = 1, PXN, PXS, PNT, FRM, CST, DST} IDENTIFIER;    /*識別子*/
  42. typedef enum {NON = 1, RLN, CMP, PIC, DSP}    COMPRESSMODE;                    /*圧縮方式*/
  43. typedef enum {GRN = 1, RED, BLU, MSK, TRP, OPT}    STORECOLOR;            /*色の構成*/
  44. typedef enum {COL = 1, PLT, LEN} STOREDATA;                            /*格納方式*/
  45. #endif
  46.  
  47. typedef struct _PicHeader {
  48.     unsigned short    mode;                                            /*圧縮方式*/
  49.     unsigned short    pixelX, pixelY;                                    /*縦横のピクセル数*/
  50.     unsigned short    screenX, screenY;                                /*縦横比*/
  51.     unsigned short    positionX, positionY;                            /*左上の座標*/
  52.     unsigned short    frame;                                            /*フレーム数*/
  53.     unsigned short    storecolor[STORECOLORMAX];                        /*色の構成*/
  54.     unsigned short    storecolorbit[STORECOLORMAX];                    /*色の構成*/
  55.     unsigned short    storedata[STOREDATAMAX];                        /*格納方式*/
  56.     unsigned short    storedatabit[STOREDATAMAX];                        /*格納方式*/
  57.     unsigned short    colorbytes;
  58.     unsigned short    databytes;
  59. }    PicHeader;
  60.  
  61. #define REDUCE_NORMAL            0
  62. #define REDUCE_DITHER_ORDERED    1
  63. #define REDUCE_DITHER_RANDOM    2
  64. #define REDUCE_DITHER_ERROR        3
  65. #define REDUCE_DITHER_ERROR216    5
  66.  
  67. #define COMPRESS_NORMAL            REDUCE_NORMAL
  68. #define COMPRESS_DITHER_ORDERD    REDUCE_DITHER_ORDERED
  69. #define COMPRESS_DITHER_RANDOM    REDUCE_DITHER_RANDOM
  70. #define COMPRESS_DITHER_ERROR    REDUCE_DITHER_ERROR
  71. #define COMPRESS_DITHER_ERROR216    REDUCE_DITHER_ERROR216
  72. #define COMPRESS_TRUECOLOR        4
  73.  
  74. #define DISPLAY_NORMAL            REDUCE_NORMAL
  75. #define DISPLAY_DITHER_ORDERD    REDUCE_DITHER_ORDERED
  76. #define DISPLAY_DITHER_RANDOM    REDUCE_DITHER_RANDOM
  77. #define DISPLAY_DITHER_ERROR    REDUCE_DITHER_ERROR
  78.  
  79. #define BMP_TRUECOLOR            0
  80. #define BMP_PALETTE                1
  81.  
  82. typedef enum {PIC_READ, PIC_WRITE} PicFlag;
  83.  
  84. typedef struct _PicFunction PicFunction;
  85.  
  86. typedef struct _PicData {
  87. /*    PicHeader        picheader;*/
  88.     PicFunction        *func;
  89.     PicFlag            flag;
  90.     char            filename[FILENAMEMAX];
  91.     unsigned short    mode;                                            /*圧縮方式*/
  92.     unsigned short    pixelX, pixelY;                                    /*縦横のピクセル数*/
  93.     long            datasize;
  94.     void    *work;
  95.     int                fullcolor;
  96. }    PicData;
  97.  
  98. struct _PicFunction {
  99.     char    ext[16];
  100.     int        (*PicReadHeader)(PicData *pd, FILE *fp, unsigned char *magic);
  101.     int        (*PicOpen)(PicData *pd, FILE *fp, int flag);
  102.     int        (*PicOutputLine)(PicData *pd, Pixel *pixel);
  103.     int        (*PicInputLine)(PicData *pd, Pixel *pixel);
  104.     int        (*PicClose)(PicData *pd);
  105. };
  106.  
  107. typedef struct {
  108.     Pixel    *nowbuf, *nextbuf;
  109.     int mode;
  110.     int x, y;
  111. }    PicReduceData;
  112.  
  113. typedef struct {
  114.     char    body[FILENAMEMAX];
  115.     char    ext[EXT];
  116.     int        number;
  117.     short    start, end;
  118. }    PicSequence;
  119.  
  120.  
  121.  
  122. #if !defined(WINDOWS) || defined(PICLIB)
  123. #ifdef    PICLIBMAIN
  124.     char    *identtoken[DST+2]        = {"", "mod", "pxn", "pxs", "pnt", "frm", "cst", "dst", NULL};
  125.     char    *compresstoken[CMP+2]    = {"", "non", "rln", "cmp", NULL};
  126.     char    *colortoken[OPT+2]        = {"", "grn", "red", "blu", "msk", "trp", "opt", NULL};
  127.     char    *datatoken[LEN+2]         = {"", "col", "plt", "len", NULL};
  128.     char    PicError[STRING];
  129. #else
  130.     extern    char    *identtoken[DST+2];
  131.     extern    char    *compresstoken[CMP+2];
  132.     extern    char    *colortoken[OPT+2];
  133.     extern    char    *datatoken[LEN+2];
  134.     extern    char    PicError[STRING];
  135. #endif
  136. #endif
  137.  
  138. #ifdef __cplusplus
  139. extern "C" {
  140. #endif
  141.  
  142. char    *GetToken(char *buf, FILE *fp);
  143.  
  144. PicData    *PicWriteOpen(char *fname, int sizex, int sizey, int mode);
  145. int        PicOutputLine(PicData *pd, Pixel *pixel);
  146. PicData *PicReadOpen(char *fname);
  147. int        PicInputLine(PicData *pd, Pixel *pixel);
  148. int        PicDisplay(PicData *pd, int x, int y, int scale, int mode);
  149. int        PicSave(PicData *pd, int x, int y, int scale);
  150. int        PicClose(PicData *pd);
  151.  
  152. PicReduceData *PicColorReduceOpen(int sizex, int mode);
  153. int        PicColorReduce(PicReduceData *data, Pixel *dst, Pixel *p);
  154. int        PicColorReduceClose(PicReduceData *data);
  155.  
  156.  
  157. int    PicSequence_isAnim(PicSequence *seq);
  158. int PicSequence_forceAnim(PicSequence *seq);
  159. int PicSequence_set(PicSequence *seq, char *filename);
  160. int PicSequence_next(PicSequence *seq);
  161. int PicSequence_prev(PicSequence *seq);
  162. int PicSequence_get(PicSequence *seq, char *filename);
  163.  
  164. extern char *PicVersion;
  165.  
  166. #if defined(WINDOWS) || defined(__WIN32__)
  167.     #define GetXPixel(pd) ((pd)->pixelX)
  168.     #define GetYPixel(pd) ((pd)->pixelY)
  169. #else
  170. static inline int    GetXPixel(PicData *pd)
  171. {
  172.     return pd->pixelX;
  173. }
  174.  
  175. static inline int    GetYPixel(PicData *pd)
  176. {
  177.     return pd->pixelY;
  178. }
  179. #endif
  180.  
  181. #ifdef __cplusplus
  182. }
  183. #endif
  184.  
  185. #endif
  186.  
  187.  
  188.