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 >
Wrap
C/C++ Source or Header
|
1996-07-16
|
5KB
|
188 lines
#ifndef _PICLIB_H_
#define _PICLIB_H_
#ifndef TRUE
#define FALSE 0
#define TRUE 1
#endif
#if defined(WINDOWS) || defined(__WIN32__)
#define inline
#define INLINE
#ifdef __WIN32__
#define BUFFERSIZE (64*1024)
#else
#define BUFFERSIZE 4096
#endif
#else
#define BUFFERSIZE 16384
#endif
#define GRAM_ADDRESS ((unsigned short *)0xc00000)
#define STORECOLORMAX 32
#define STOREDATAMAX 4
#define FILENAMEMAX 128
#define EXT 4
#define STRING 256
#define EOFCODE 0x1a
typedef unsigned long Pixel;
#if 0
typedef struct {
unsigned char green;
unsigned char red;
unsigned char blue;
unsigned char trans;
} Pixel;
#endif
#if !defined(WINDOWS) || defined(PICLIB)
typedef enum {MOD = 1, PXN, PXS, PNT, FRM, CST, DST} IDENTIFIER; /*識別子*/
typedef enum {NON = 1, RLN, CMP, PIC, DSP} COMPRESSMODE; /*圧縮方式*/
typedef enum {GRN = 1, RED, BLU, MSK, TRP, OPT} STORECOLOR; /*色の構成*/
typedef enum {COL = 1, PLT, LEN} STOREDATA; /*格納方式*/
#endif
typedef struct _PicHeader {
unsigned short mode; /*圧縮方式*/
unsigned short pixelX, pixelY; /*縦横のピクセル数*/
unsigned short screenX, screenY; /*縦横比*/
unsigned short positionX, positionY; /*左上の座標*/
unsigned short frame; /*フレーム数*/
unsigned short storecolor[STORECOLORMAX]; /*色の構成*/
unsigned short storecolorbit[STORECOLORMAX]; /*色の構成*/
unsigned short storedata[STOREDATAMAX]; /*格納方式*/
unsigned short storedatabit[STOREDATAMAX]; /*格納方式*/
unsigned short colorbytes;
unsigned short databytes;
} PicHeader;
#define REDUCE_NORMAL 0
#define REDUCE_DITHER_ORDERED 1
#define REDUCE_DITHER_RANDOM 2
#define REDUCE_DITHER_ERROR 3
#define REDUCE_DITHER_ERROR216 5
#define COMPRESS_NORMAL REDUCE_NORMAL
#define COMPRESS_DITHER_ORDERD REDUCE_DITHER_ORDERED
#define COMPRESS_DITHER_RANDOM REDUCE_DITHER_RANDOM
#define COMPRESS_DITHER_ERROR REDUCE_DITHER_ERROR
#define COMPRESS_DITHER_ERROR216 REDUCE_DITHER_ERROR216
#define COMPRESS_TRUECOLOR 4
#define DISPLAY_NORMAL REDUCE_NORMAL
#define DISPLAY_DITHER_ORDERD REDUCE_DITHER_ORDERED
#define DISPLAY_DITHER_RANDOM REDUCE_DITHER_RANDOM
#define DISPLAY_DITHER_ERROR REDUCE_DITHER_ERROR
#define BMP_TRUECOLOR 0
#define BMP_PALETTE 1
typedef enum {PIC_READ, PIC_WRITE} PicFlag;
typedef struct _PicFunction PicFunction;
typedef struct _PicData {
/* PicHeader picheader;*/
PicFunction *func;
PicFlag flag;
char filename[FILENAMEMAX];
unsigned short mode; /*圧縮方式*/
unsigned short pixelX, pixelY; /*縦横のピクセル数*/
long datasize;
void *work;
int fullcolor;
} PicData;
struct _PicFunction {
char ext[16];
int (*PicReadHeader)(PicData *pd, FILE *fp, unsigned char *magic);
int (*PicOpen)(PicData *pd, FILE *fp, int flag);
int (*PicOutputLine)(PicData *pd, Pixel *pixel);
int (*PicInputLine)(PicData *pd, Pixel *pixel);
int (*PicClose)(PicData *pd);
};
typedef struct {
Pixel *nowbuf, *nextbuf;
int mode;
int x, y;
} PicReduceData;
typedef struct {
char body[FILENAMEMAX];
char ext[EXT];
int number;
short start, end;
} PicSequence;
#if !defined(WINDOWS) || defined(PICLIB)
#ifdef PICLIBMAIN
char *identtoken[DST+2] = {"", "mod", "pxn", "pxs", "pnt", "frm", "cst", "dst", NULL};
char *compresstoken[CMP+2] = {"", "non", "rln", "cmp", NULL};
char *colortoken[OPT+2] = {"", "grn", "red", "blu", "msk", "trp", "opt", NULL};
char *datatoken[LEN+2] = {"", "col", "plt", "len", NULL};
char PicError[STRING];
#else
extern char *identtoken[DST+2];
extern char *compresstoken[CMP+2];
extern char *colortoken[OPT+2];
extern char *datatoken[LEN+2];
extern char PicError[STRING];
#endif
#endif
#ifdef __cplusplus
extern "C" {
#endif
char *GetToken(char *buf, FILE *fp);
PicData *PicWriteOpen(char *fname, int sizex, int sizey, int mode);
int PicOutputLine(PicData *pd, Pixel *pixel);
PicData *PicReadOpen(char *fname);
int PicInputLine(PicData *pd, Pixel *pixel);
int PicDisplay(PicData *pd, int x, int y, int scale, int mode);
int PicSave(PicData *pd, int x, int y, int scale);
int PicClose(PicData *pd);
PicReduceData *PicColorReduceOpen(int sizex, int mode);
int PicColorReduce(PicReduceData *data, Pixel *dst, Pixel *p);
int PicColorReduceClose(PicReduceData *data);
int PicSequence_isAnim(PicSequence *seq);
int PicSequence_forceAnim(PicSequence *seq);
int PicSequence_set(PicSequence *seq, char *filename);
int PicSequence_next(PicSequence *seq);
int PicSequence_prev(PicSequence *seq);
int PicSequence_get(PicSequence *seq, char *filename);
extern char *PicVersion;
#if defined(WINDOWS) || defined(__WIN32__)
#define GetXPixel(pd) ((pd)->pixelX)
#define GetYPixel(pd) ((pd)->pixelY)
#else
static inline int GetXPixel(PicData *pd)
{
return pd->pixelX;
}
static inline int GetYPixel(PicData *pd)
{
return pd->pixelY;
}
#endif
#ifdef __cplusplus
}
#endif
#endif