alder_lake_bios/Insyde/InsydeModulePkg/Include/H2OWindow/device.h

519 lines
20 KiB
C

#ifndef _DEVICE_H
#define _DEVICE_H
/*
* Copyright (c) 1999, 2000, 2001, 2002, 2003, 2005, 2007, 2010 Greg Haerr <greg@censoft.com>
* Portions Copyright (c) 2002 Koninklijke Philips Electronics
*
* Engine-level Screen, Mouse and Keyboard device driver API's and types
*
* Contents of this file are not for general export
*/
#define MWINCLUDECOLORS /* bring in color conversion macros*/
#include <Library/RectLib.h>
#include "mwtypes.h" /* public export typedefs*/
#include "mwsystem.h"
#ifndef EFI
#define EFI 1
#endif
#define NOSTDPAL1
#define NOSTDPAL2
#define NOSTDPAL4
#define NOSTDPAL8
/* Changeable limits and options*/
#define UPDATEREGIONS 1
#define ERASEMOVE 0
#define UNIFORMPALETTE 1 /* =1 for 256 entry uniform palette (required for palette alpha blending)*/
#define POLYREGIONS 0 /* =1 includes polygon regions*/
#define ANIMATEPALETTE 0 /* =1 animated palette test*/
#define FT_MINAA_HEIGHT 0 /* min height for FT antialias with win32 plogfont*/
#define TRANSLATE_ESCAPE_SEQUENCES 1 /* =1 to parse fnkeys w/tty driver*/
#define DEBUG_EXPOSE 0 /* =1 to flash yellow before painting expose areas*/
#define DEBUG_BLIT 0 /* =1 to flash brown before painting areas with convblit*/
/* the fontmapper is obsolete*/
#define FONTMAPPER 0 /* =1 for Morten's font mapper*/
/* the following defines are unset in Arch.rules based on ARCH= setting*/
#ifndef HAVE_SELECT
#define HAVE_SELECT 0 /* =1 has select system call*/
#endif
#ifndef HAVE_SIGNAL
#define HAVE_SIGNAL 0 /* =1 has signal system call*/
#endif
#ifndef HAVE_MMAP
#define HAVE_MMAP 0 /* =1 has mmap system call*/
#endif
/* control whether printf/fprintf required in server and demo programs and C library*/
/* if this is set to =0 in Arch.rules, fprintf/printf will be no-op in all demo programs,*/
/* and in the server GdError will be called, which calls write() if HAVE_FILEIO=Y in config*/
#ifndef HAVE_FPRINTF
#define HAVE_FPRINTF 0 /* =1 EPRINTF/DPRINTF uses fprintf/printf, otherwise GdError or no-op*/
#endif
#ifndef HAVE_FLOAT
#define HAVE_FLOAT 0 /* =1 incl float, GdArcAngle*/
#endif
/* the following enable Microwindows features, also unset in Arch.rules*/
#ifndef MW_FEATURE_IMAGES
#define MW_FEATURE_IMAGES 1 /* =1 to enable GdLoadImage/GdDrawImage etc*/
#endif
#define HAVE_BMP_SUPPORT 1
#define HAVE_GIF_SUPPORT 1
#define HAVE_JPEG_SUPPORT 1
#ifndef MW_FEATURE_TIMERS
#define MW_FEATURE_TIMERS 0 /* =1 to include MWTIMER support */
#endif
#ifndef MW_FEATURE_TWO_KEYBOARDS
#define MW_FEATURE_TWO_KEYBOARDS 0 /* =1 to include multiple keybioard support */
#endif
#ifndef DYNAMICREGIONS
#define DYNAMICREGIONS 1 /* =1 to use MWCLIPREGIONS*/
#endif
/* determine compiler capability for handling EPRINTF/DPRINTF macros*/
#if (defined(GCC_VERSION) && (GCC_VERSION >= 2093)) || (defined(__GNUC__) && (((__GNUC__ >= 2) && (__GNUC_MINOR__ >= 95)) || (__GNUC__ > 2)))
#define HAVE_VARARG_MACROS 1
#else
#define HAVE_VARARG_MACROS 0
#endif
/* see if can use GCC compiler-only macro magic to save space */
#if HAVE_VARARG_MACROS && HAVE_FPRINTF
#include <stdio.h> /* For stderr */
#define EPRINTF(str, args...) fprintf(stderr, str, ##args) /* error output*/
#if DEBUG
#define DPRINTF(str, args...) fprintf(stderr, str, ##args) /* debug output*/
#else
#define DPRINTF(str, ...) /* no debug output*/
#endif
#else /* must call GdError*/
#define EPRINTF GdError /* error output*/
#if DEBUG
# define DPRINTF GdError /* debug output*/
#else
# if HAVE_VARARG_MACROS
# define DPRINTF(str, ...) /* no debug output*/
# else
# define DPRINTF GdErrorNull /* no debug output*/
# endif
#endif
#endif /* HAVE_VARARG_MACROS && HAVE_FPRINTF*/
/* Sanity check: VTSWITCH involves a timer. */
#if VTSWITCH && !MW_FEATURE_TIMERS
#error VTSWITCH depends on MW_FEATURE_TIMERS - disable VTSWITCH in config or enable MW_FEATURE_TIMERS in Arch.rules
#endif
typedef void (*MWBLITFUNC)(PSD, PMWBLITPARMS); /* proto for blitter functions*/
/* screen subdriver entry points: one required for each draw function*/
typedef struct {
void (*DrawPixel)(PSD psd, MWCOORD x, MWCOORD y, MWPIXELVAL c);
MWPIXELVAL (*ReadPixel)(PSD psd, MWCOORD x, MWCOORD y);
void (*DrawHorzLine)(PSD psd, MWCOORD x1, MWCOORD x2, MWCOORD y, MWPIXELVAL c);
void (*DrawVertLine)(PSD psd, MWCOORD x, MWCOORD y1, MWCOORD y2, MWPIXELVAL c);
void (*FillRect)(PSD psd,MWCOORD x1,MWCOORD y1,MWCOORD x2, MWCOORD y2, MWPIXELVAL c);
/* fallback blit - used only for 1,2,4bpp drivers*/
void (*BlitFallback)(PSD destpsd,MWCOORD destx,MWCOORD desty,MWCOORD w,MWCOORD h,
PSD srcpsd,MWCOORD srcx,MWCOORD srcy,int op);
/* endian neutral hw pixel format blits*/
MWBLITFUNC FrameBlit;
MWBLITFUNC FrameStretchBlit;
/* fast conversion blits for text and images*/
MWBLITFUNC BlitCopyMaskMonoByteMSB; /* ft non-alias*/
MWBLITFUNC BlitCopyMaskMonoByteLSB; /* t1 non-alias*/
MWBLITFUNC BlitCopyMaskMonoWordMSB; /* core/pcf non-alias*/
MWBLITFUNC BlitBlendMaskAlphaByte; /* ft2/t1 antialias*/
MWBLITFUNC BlitCopyRGBA8888; /* GdArea RGBA MWPF_RGB image copy*/
MWBLITFUNC BlitSrcOverRGBA8888; /* png RGBA image w/alpha*/
MWBLITFUNC BlitCopyRGB888; /* png RGB image no alpha*/
MWBLITFUNC BlitStretchRGBA8888; /* conversion stretch blit for RGBA src*/
} SUBDRIVER, *PSUBDRIVER;
/*
* Interface to Screen Device Driver
* This structure is also allocated for memory (offscreen) drawing and blitting.
*/
typedef struct _mwscreendevice {
/* shared header with MWIMAGEHDR*/
int flags; /* PSF_SCREEN or PSF_MEMORY*/
MWCOORD xvirtres; /* X drawing res (will be flipped in portrait mode) */
MWCOORD yvirtres; /* Y drawing res (will be flipped in portrait mode) */
int planes; /* # planes*/
int bpp; /* # bpp*/
int data_format;/* MWIF_ image data format*/
unsigned int pitch; /* row length in bytes*/
unsigned char *addr;/* address of memory allocated (memdc or fb)*/
int palsize; /* palette size*/
MWPALENTRY *palette;/* palette*/
int32_t transcolor; /* not used*/
/* end of shared header*/
MWCOORD xres; /* X screen res (real) */
MWCOORD yres; /* Y screen res (real) */
unsigned int size; /* size of memory allocated*/
int32_t ncolors; /* # screen colors*/
int pixtype; /* format of pixel value*/
/* driver entry points*/
PMWCOREFONT builtin_fonts;
PSD (*Open)(PSD psd);
void (*Close)(PSD psd);
void (*SetPalette)(PSD psd,int first,int count,MWPALENTRY *pal);
void (*GetScreenInfo)(PSD psd,PMWSCREENINFO psi);
PSD (*AllocateMemGC)(PSD psd);
MWBOOL (*MapMemGC)(PSD mempsd,MWCOORD w,MWCOORD h,int planes,int bpp,
int data_format,unsigned int pitch,int size,void *addr);
void (*FreeMemGC)(PSD mempsd);
void (*SetPortrait)(PSD psd,int portraitmode);
void (*Update)(PSD psd, MWCOORD x, MWCOORD y, MWCOORD width, MWCOORD height);
void (*PreSelect)(PSD psd);
int portrait; /* screen portrait mode*/
PSUBDRIVER orgsubdriver; /* original subdriver for portrait modes*/
PSUBDRIVER left_subdriver;
PSUBDRIVER right_subdriver;
PSUBDRIVER down_subdriver;
/* SUBDRIVER functions*/
void (*DrawPixel)(PSD psd,MWCOORD x,MWCOORD y,MWPIXELVAL c);
MWPIXELVAL (*ReadPixel)(PSD psd,MWCOORD x,MWCOORD y);
void (*DrawHorzLine)(PSD psd,MWCOORD x1,MWCOORD x2,MWCOORD y, MWPIXELVAL c);
void (*DrawVertLine)(PSD psd,MWCOORD x,MWCOORD y1,MWCOORD y2, MWPIXELVAL c);
void (*FillRect)(PSD psd,MWCOORD x1,MWCOORD y1,MWCOORD x2,MWCOORD y2, MWPIXELVAL c);
/* fallback blit - used only for 1,2,4bpp drivers*/
void (*BlitFallback)(PSD destpsd,MWCOORD destx,MWCOORD desty,MWCOORD w,MWCOORD h,
PSD srcpsd,MWCOORD srcx,MWCOORD srcy,int op);
/* endian neutral hw pixel format blits*/
MWBLITFUNC FrameBlit;
MWBLITFUNC FrameStretchBlit;
/* fast conversion blits for text and images*/
MWBLITFUNC BlitCopyMaskMonoByteMSB; /* ft non-alias*/
MWBLITFUNC BlitCopyMaskMonoByteLSB; /* t1 non-alias*/
MWBLITFUNC BlitCopyMaskMonoWordMSB; /* core/pcf non-alias*/
MWBLITFUNC BlitBlendMaskAlphaByte; /* ft2/t1 antialias*/
MWBLITFUNC BlitCopyRGBA8888; /* GdArea RGBA MWPF_RGB image copy*/
MWBLITFUNC BlitSrcOverRGBA8888; /* png RGBA image w/alpha*/
MWBLITFUNC BlitCopyRGB888; /* png RGB image no alpha*/
MWBLITFUNC BlitStretchRGBA8888; /* conversion stretch blit for RGBA src*/
} SCREENDEVICE;
/* PSD flags*/
#define PSF_SCREEN 0x0001 /* screen device*/
#define PSF_MEMORY 0x0002 /* memory device*/
#define PSF_ADDRMALLOC 0x0010 /* psd->addr was malloc'd*/
#define PSF_ADDRSHAREDMEM 0x0020 /* psd->addr is shared memory*/
#define PSF_IMAGEHDR 0x0040 /* psd is actually MWIMAGEHDR*/
/* Interface to Mouse Device Driver*/
typedef struct _mousedevice {
int (*Open)(struct _mousedevice *);
void (*Close)(void);
int (*GetButtonInfo)(void);
void (*GetDefaultAccel)(int *pscale,int *pthresh);
int (*Read)(MWCOORD *dx,MWCOORD *dy,MWCOORD *dz,int *bp);
int (*Poll)(void); /* not required if have select()*/
int flags; /* raw, normal, transform flags*/
} MOUSEDEVICE;
#define MOUSE_NORMAL 0x0000 /* mouse in normal mode*/
#define MOUSE_RAW 0x0001 /* mouse in raw mode*/
#define MOUSE_TRANSFORM 0x0002 /* perform transform*/
/* Interface to Keyboard Device Driver*/
typedef struct _kbddevice {
int (*Open)(struct _kbddevice *pkd);
void (*Close)(void);
void (*GetModifierInfo)(MWKEYMOD *modifiers, MWKEYMOD *curmodifiers);
int (*Read)(MWKEY *buf,MWKEYMOD *modifiers,MWSCANCODE *scancode);
int (*Poll)(void); /* not required if have select()*/
} KBDDEVICE;
/* Clip areas*/
#define CLIP_VISIBLE 0
#define CLIP_INVISIBLE 1
#define CLIP_PARTIAL 2
#define MAX_CLIPRECTS 200 /* max clip rects (obsolete)*/
/* GdMakePaletteConversionTable bLoadType types*/
#define LOADPALETTE 1 /* load image palette into system palette*/
#define MERGEPALETTE 2 /* merge image palette into system palette*/
/* entry points*/
/* devdraw.c*/
PSD GdOpenScreen(void);
void GdCloseScreen(PSD psd);
int GdSetPortraitMode(PSD psd, int portraitmode);
int GdSetMode(int mode);
MWBOOL GdSetUseBackground(MWBOOL flag);
MWPIXELVAL GdSetForegroundPixelVal(PSD psd, MWPIXELVAL fg);
MWPIXELVAL GdSetBackgroundPixelVal(PSD psd, MWPIXELVAL bg);
MWPIXELVAL GdSetForegroundColor(PSD psd, MWCOLORVAL fg);
MWPIXELVAL GdSetBackgroundColor(PSD psd, MWCOLORVAL bg);
void GdResetPalette(void);
void GdSetPalette(PSD psd,int first, int count, MWPALENTRY *palette);
int GdGetPalette(PSD psd,int first, int count, MWPALENTRY *palette);
MWCOLORVAL GdGetColorRGB(PSD psd, MWPIXELVAL pixel);
MWPIXELVAL GdFindColor(PSD psd, MWCOLORVAL c);
MWPIXELVAL GdFindNearestColor(MWPALENTRY *pal, int size, MWCOLORVAL cr);
int GdCaptureScreen(PSD psd, char *pathname); /* debug only*/
void GdPrintBitmap(PMWBLITPARMS gc, int SSZ); /* debug only*/
void GdGetScreenInfo(PSD psd,PMWSCREENINFO psi);
void GdPoint(PSD psd,MWCOORD x, MWCOORD y);
void GdLine(PSD psd,MWCOORD x1,MWCOORD y1,MWCOORD x2,MWCOORD y2, MWBOOL bDrawLastPoint);
void GdRect(PSD psd,MWCOORD x, MWCOORD y, MWCOORD width, MWCOORD height);
void GdFillRect(PSD psd,MWCOORD x, MWCOORD y, MWCOORD width, MWCOORD height);
MWBOOL GdColorInPalette(MWCOLORVAL cr,MWPALENTRY *palette,int palsize);
void GdMakePaletteConversionTable(PSD psd,MWPALENTRY *palette,int palsize,
MWPIXELVALHW *convtable,int fLoadType);
void GdDrawImage(PSD psd,MWCOORD x, MWCOORD y, PMWIMAGEHDR pimage);
void GdDrawImageEx(PSD psd, MWCOORD x, MWCOORD y, MWCOORD width, MWCOORD height, MWCOORD sx, MWCOORD sy, PMWIMAGEHDR pimage);
void GdBitmap(PSD psd,MWCOORD x,MWCOORD y,MWCOORD width,MWCOORD height,const MWIMAGEBITS *imagebits);
void GdBitmapByPoint(PSD psd,MWCOORD x,MWCOORD y,MWCOORD width,MWCOORD height,
const MWIMAGEBITS *imagebits, int clipresult);
void GdPoly(PSD psd,int count, MWPOINT *points);
void GdFillPoly(PSD psd,int count, MWPOINT *points);
void GdReadArea(PSD psd,MWCOORD x,MWCOORD y,MWCOORD width,MWCOORD height,MWPIXELVALHW *pixels);
void GdArea(PSD psd,MWCOORD x,MWCOORD y,MWCOORD width,MWCOORD height, void *pixels, int pixtype);
void GdTranslateArea(MWCOORD width, MWCOORD height, void *in, int inpixtype,
MWCOORD inpitch, void *out, int outpixtype, int outpitch);
void drawpoint(PSD psd, MWCOORD x, MWCOORD y);
void drawrow(PSD psd, MWCOORD x1, MWCOORD x2, MWCOORD y);
extern SCREENDEVICE scrdev;
extern MWPIXELVAL gr_foreground; /* current foreground color */
extern MWPIXELVAL gr_background; /* current background color */
extern MWBOOL gr_usebg; /* TRUE if background drawn in pixmaps */
extern MWCOLORVAL gr_foreground_rgb;/* current fg color in 0xAARRGGBB format*/
extern MWCOLORVAL gr_background_rgb;
/* devblit.c*/
MWBLITFUNC GdFindConvBlit(PSD psd, int data_format, int op);
void GdConversionBlit(PSD psd, PMWBLITPARMS parms);
void GdConvBlitInternal(PSD psd, PMWBLITPARMS gc, MWBLITFUNC convblit);
void GdBlit(PSD dstpsd, MWCOORD dstx, MWCOORD dsty, MWCOORD width, MWCOORD height,
PSD srcpsd,MWCOORD srcx,MWCOORD srcy,int rop);
void GdStretchBlit(PSD dstpsd, MWCOORD dx1, MWCOORD dy1, MWCOORD dx2,
MWCOORD dy2, PSD srcpsd, MWCOORD sx1, MWCOORD sy1, MWCOORD sx2, MWCOORD sy2, int rop);
/* devarc.c*/
/* requires float*/
void GdArcAngle(PSD psd, MWCOORD x0, MWCOORD y0, MWCOORD rx, MWCOORD ry,
MWCOORD angle1, MWCOORD angle2, int type);
/* integer only*/
void GdArc(PSD psd, MWCOORD x0, MWCOORD y0, MWCOORD rx, MWCOORD ry,
MWCOORD ax, MWCOORD ay, MWCOORD bx, MWCOORD by, int type);
void GdEllipse(PSD psd,MWCOORD x, MWCOORD y, MWCOORD rx, MWCOORD ry,
MWBOOL fill);
/* both devclip1.c and devclip2.c */
MWBOOL GdClipPoint(PSD psd,MWCOORD x,MWCOORD y);
int GdClipArea(PSD psd,MWCOORD x1, MWCOORD y1, MWCOORD x2, MWCOORD y2);
extern MWCOORD clipminx, clipminy, clipmaxx, clipmaxy;
/* devclip1.c only*/
void GdSetClipRects(PSD psd,int count,MWCLIPRECT *table);
/* devclip2.c only*/
void GdSetClipRegion(PSD psd, MWCLIPREGION *reg);
void GdPrintClipRects(PMWBLITPARMS gc);
/* devrgn.c - multi-rectangle region entry points*/
MWBOOL GdPtInRegion(MWCLIPREGION *rgn, MWCOORD x, MWCOORD y);
int GdRectInRegion(MWCLIPREGION *rgn, const MWRECT *rect);
MWBOOL GdEqualRegion(MWCLIPREGION *r1, MWCLIPREGION *r2);
MWBOOL GdEmptyRegion(MWCLIPREGION *rgn);
MWCLIPREGION *GdAllocRegion(void);
MWCLIPREGION *GdAllocRectRegion(MWCOORD left,MWCOORD top,MWCOORD right,MWCOORD bottom);
MWCLIPREGION *GdAllocRectRegionIndirect(MWRECT *prc);
void GdSetRectRegion(MWCLIPREGION *rgn, MWCOORD left, MWCOORD top, MWCOORD right, MWCOORD bottom);
void GdSetRectRegionIndirect(MWCLIPREGION *rgn, MWRECT *prc);
void GdDestroyRegion(MWCLIPREGION *rgn);
void GdOffsetRegion(MWCLIPREGION *rgn, MWCOORD x, MWCOORD y);
int GdGetRegionBox(MWCLIPREGION *rgn, MWRECT *prc);
void GdUnionRectWithRegion(const MWRECT *rect, MWCLIPREGION *rgn);
void GdSubtractRectFromRegion(const MWRECT *rect, MWCLIPREGION *rgn);
void GdCopyRegion(MWCLIPREGION *d, MWCLIPREGION *s);
void GdIntersectRegion(MWCLIPREGION *d, MWCLIPREGION *s1, MWCLIPREGION *s2);
void GdUnionRegion(MWCLIPREGION *d, MWCLIPREGION *s1, MWCLIPREGION *s2);
void GdSubtractRegion(MWCLIPREGION *d, MWCLIPREGION *s1, MWCLIPREGION *s2);
void GdXorRegion(MWCLIPREGION *d, MWCLIPREGION *s1, MWCLIPREGION *s2);
MWCLIPREGION *GdAllocBitmapRegion(MWIMAGEBITS *bitmap, MWCOORD width, MWCOORD height);
/* devrgn2.c*/
MWCLIPREGION *GdAllocPolygonRegion(MWPOINT *points, int count, int mode);
MWCLIPREGION *GdAllocPolyPolygonRegion(MWPOINT *points, int *count, int nbpolygons, int mode);
/* devmouse.c*/
extern EFI_SETUP_MOUSE_PROTOCOL *mSetupMouse;
int GdOpenMouse(void);
void GdCloseMouse(void);
void GdGetButtonInfo(int *buttons);
void GdRestrictMouse(MWCOORD newminx,MWCOORD newminy,MWCOORD newmaxx, MWCOORD newmaxy);
void GdSetAccelMouse(int newthresh, int newscale);
void GdMoveMouse(MWCOORD newx, MWCOORD newy);
int GdReadMouse(MWCOORD *px, MWCOORD *py, MWCOORD *pz, int *pb);
void GdMoveCursor(MWCOORD x, MWCOORD y);
MWBOOL GdGetCursorPos(MWCOORD *px, MWCOORD *py);
void GdSetCursor(PMWCURSOR pcursor);
int GdShowCursor(PSD psd);
int GdHideCursor(PSD psd);
void GdCheckCursor(PSD psd,MWCOORD x1,MWCOORD y1,MWCOORD x2,MWCOORD y2);
void GdFixCursor(PSD psd);
void GdSetTransform(MWTRANSFORM *);
extern MOUSEDEVICE mousedev;
/* devkbd.c*/
int GdOpenKeyboard(void);
void GdCloseKeyboard(void);
void GdGetModifierInfo(MWKEYMOD *modifiers, MWKEYMOD *curmodifiers);
int GdReadKeyboard(EFI_KEY_DATA *KeyData, MWKEYMOD *modifiers, MWSCANCODE *scancode);
extern KBDDEVICE kbddev;
#ifdef MW_FEATURE_TWO_KEYBOARDS
int GdOpenKeyboard2(void);
extern KBDDEVICE kbddev2;
#endif
/* devimage.c */
#if MW_FEATURE_IMAGES
PSD GdLoadImageFromFile(char *path, int flags);
PSD GdLoadImageFromBuffer (IN EFI_IMAGE_INPUT *Image);
PSD GdLoadImageFromBuffer2(void *buffer, int size, int flags);
void GdDrawImageFromFile(PSD psd, MWCOORD x, MWCOORD y, MWCOORD width,
MWCOORD height, char *path, int flags);
void GdDrawImageFromBuffer(PSD psd, MWCOORD x, MWCOORD y, MWCOORD width,
MWCOORD height, void *buffer, int size, int flags);
void GdDrawImagePartToFit(PSD psd, MWCOORD x, MWCOORD y, MWCOORD width, MWCOORD height,
MWCOORD sx, MWCOORD sy, MWCOORD swidth, MWCOORD sheight, PSD pmd);
MWBOOL GdGetImageInfo(PSD pmd, PMWIMAGEINFO pii);
void GdStretchImage(PMWIMAGEHDR src, MWCLIPRECT *srcrect, PMWIMAGEHDR dst, MWCLIPRECT *dstrect);
/* Buffered input functions to replace stdio functions*/
typedef struct { /* structure for reading images from buffer */
unsigned char *start; /* The pointer to the beginning of the buffer */
unsigned long offset; /* The current offset within the buffer */
unsigned long size; /* The total size of the buffer */
} buffer_t;
void GdImageBufferInit(buffer_t *buffer, void *startdata, int size);
void GdImageBufferSeekTo(buffer_t *buffer, unsigned long offset);
int GdImageBufferRead(buffer_t *buffer, void *dest, unsigned long size);
int GdImageBufferGetChar(buffer_t *buffer);
char * GdImageBufferGetString(buffer_t *buffer, char *dest, unsigned int size);
int GdImageBufferEOF(buffer_t *buffer);
/* image conversion*/
PSD GdConvertImageRGBA(PSD pmd); /* convert palettized image to RGBA*/
/* individual decoders*/
#ifdef HAVE_BMP_SUPPORT
PSD GdDecodeBMP(buffer_t *src, MWBOOL readfilehdr);
#endif
#ifdef HAVE_JPEG_SUPPORT
PSD GdDecodeJPEG(buffer_t *src);
#endif
#ifdef HAVE_PNG_SUPPORT
PSD GdDecodePNG(buffer_t *src);
#endif
#ifdef HAVE_GIF_SUPPORT
PSD GdDecodeGIF(buffer_t *src);
#endif
#ifdef HAVE_PNM_SUPPORT
PSD GdDecodePNM(buffer_t *src);
#endif
#ifdef HAVE_XPM_SUPPORT
PSD GdDecodeXPM(buffer_t *src);
#endif
#ifdef HAVE_TIFF_SUPPORT
PSD GdDecodeTIFF(char *path);
#endif
#endif /* MW_FEATURE_IMAGES */
/* devlist.c*/
/* field offset*/
#define MWITEM_OFFSET(type, field) ((UINTN)&(((type *)0)->field))
void * GdItemAlloc(unsigned int size);
void GdListAdd(PMWLISTHEAD pHead,PMWLIST pItem);
void GdListInsert(PMWLISTHEAD pHead,PMWLIST pItem);
void GdListRemove(PMWLISTHEAD pHead,PMWLIST pItem);
#define GdItemNew(type) ((type *)GdItemAlloc(sizeof(type)))
void GdItemFree (void *ptr);
/* return base item address from list ptr*/
#define GdItemAddr(p,type,list) ((type *)((UINTN)p - MWITEM_OFFSET(type,list)))
/* devstipple.c */
void GdSetDash(uint32_t *mask, int *count);
void GdSetStippleBitmap(MWIMAGEBITS *stipple, MWCOORD width, MWCOORD height);
void GdSetTSOffset(int xoff, int yoff);
int GdSetFillMode(int mode);
void GdSetTilePixmap(PSD src, MWCOORD width, MWCOORD height);
void ts_drawpoint(PSD psd, MWCOORD x, MWCOORD y);
void ts_drawrow(PSD psd, MWCOORD x1, MWCOORD x2, MWCOORD y);
void ts_fillrect(PSD psd, MWCOORD x, MWCOORD y, MWCOORD w, MWCOORD h);
void set_ts_origin(int x, int y);
#if MW_FEATURE_TIMERS
#include <sys/time.h>
typedef void (*MWTIMERCB)(void *);
#define MWTIMER_ONESHOT 0
#define MWTIMER_PERIODIC 1
typedef struct mw_timer MWTIMER;
struct mw_timer {
struct timeval timeout;
MWTIMERCB callback;
void *arg;
MWTIMER *next;
MWTIMER *prev;
int type; /* MWTIMER_ONESHOT or MWTIMER_PERIODIC */
MWTIMEOUT period;
};
MWTIMER *GdAddTimer(MWTIMEOUT timeout, MWTIMERCB callback, void *arg);
MWTIMER *GdAddPeriodicTimer(MWTIMEOUT timeout, MWTIMERCB callback, void *arg);
void GdDestroyTimer(MWTIMER *timer);
MWTIMER *GdFindTimer(void *arg);
MWBOOL GdGetNextTimeout(struct timeval *tv, MWTIMEOUT timeout);
MWBOOL GdTimeout(void);
#endif /* MW_FEATURE_TIMERS */
/* error.c*/
int GdError(const char *format, ...);
int GdErrorNull(const char *format, ...); /* doesn't print msgs */
/* no assert() in MSDOS or ELKS...*/
#if MSDOS | ELKS | PSP
#undef assert
#define assert(x)
#endif
#undef assert
#define assert(x) ASSERT(x)
#if RTEMS
/* RTEMS requires rtems_main()*/
int rtems_main(int, char **);
#define main rtems_main
#endif
#endif /*_DEVICE_H*/