/*
|
/*
|
* Copyright (c) 1999, 2000, 2001 Greg Haerr <greg@censoft.com>
|
* Copyright (c) 1999, 2000, 2001 Greg Haerr <greg@censoft.com>
|
*
|
*
|
* Framebuffer drivers header file for Microwindows Screen Drivers
|
* Framebuffer drivers header file for Microwindows Screen Drivers
|
*/
|
*/
|
|
|
/* Linux framebuffer critical sections*/
|
/* Linux framebuffer critical sections*/
|
#if VTSWITCH
|
#if VTSWITCH
|
extern volatile int mwdrawing;
|
extern volatile int mwdrawing;
|
#define DRAWON ++mwdrawing
|
#define DRAWON ++mwdrawing
|
#define DRAWOFF --mwdrawing
|
#define DRAWOFF --mwdrawing
|
#else
|
#else
|
#define DRAWON
|
#define DRAWON
|
#define DRAWOFF
|
#define DRAWOFF
|
#endif
|
#endif
|
|
|
typedef unsigned char * ADDR8;
|
typedef unsigned char * ADDR8;
|
typedef unsigned short * ADDR16;
|
typedef unsigned short * ADDR16;
|
typedef unsigned long * ADDR32;
|
typedef unsigned long * ADDR32;
|
|
|
/* ROP macro for 16 drawing modes*/
|
/* ROP macro for 16 drawing modes*/
|
#define CHECK(f,d)
|
#define CHECK(f,d)
|
|
|
/* applyOp w/stored dst*/
|
/* applyOp w/stored dst*/
|
#define applyOp(op, src, pdst, type) \
|
#define applyOp(op, src, pdst, type) \
|
{ \
|
{ \
|
type d = (pdst); \
|
type d = (pdst); \
|
switch (op) { \
|
switch (op) { \
|
case MWMODE_XOR: \
|
case MWMODE_XOR: \
|
*d ^= (src); \
|
*d ^= (src); \
|
CHECK("XOR", *d); \
|
CHECK("XOR", *d); \
|
break; \
|
break; \
|
case MWMODE_AND: \
|
case MWMODE_AND: \
|
*d &= (src); \
|
*d &= (src); \
|
CHECK("AND", *d); \
|
CHECK("AND", *d); \
|
break; \
|
break; \
|
case MWMODE_OR: \
|
case MWMODE_OR: \
|
*d |= (src); \
|
*d |= (src); \
|
CHECK("OR", *d); \
|
CHECK("OR", *d); \
|
break; \
|
break; \
|
case MWMODE_CLEAR: \
|
case MWMODE_CLEAR: \
|
*d = 0; \
|
*d = 0; \
|
CHECK("CLEAR", *d); \
|
CHECK("CLEAR", *d); \
|
break; \
|
break; \
|
case MWMODE_SETTO1: \
|
case MWMODE_SETTO1: \
|
*d = -1; \
|
*d = -1; \
|
CHECK("SETTO1", *d); \
|
CHECK("SETTO1", *d); \
|
break; \
|
break; \
|
case MWMODE_EQUIV: \
|
case MWMODE_EQUIV: \
|
*d = ~(*d ^ (src)); \
|
*d = ~(*d ^ (src)); \
|
CHECK("EQUIV", *d); \
|
CHECK("EQUIV", *d); \
|
break; \
|
break; \
|
case MWMODE_NOR: \
|
case MWMODE_NOR: \
|
*d = ~(*d | (src)); \
|
*d = ~(*d | (src)); \
|
CHECK("NOR", *d); \
|
CHECK("NOR", *d); \
|
break; \
|
break; \
|
case MWMODE_NAND: \
|
case MWMODE_NAND: \
|
*d = ~(*d & (src)); \
|
*d = ~(*d & (src)); \
|
CHECK("NAND", *d); \
|
CHECK("NAND", *d); \
|
break; \
|
break; \
|
case MWMODE_INVERT: \
|
case MWMODE_INVERT: \
|
*d = ~*d; \
|
*d = ~*d; \
|
CHECK("INVERT", *d); \
|
CHECK("INVERT", *d); \
|
break; \
|
break; \
|
case MWMODE_COPYINVERTED: \
|
case MWMODE_COPYINVERTED: \
|
*d = ~(src); \
|
*d = ~(src); \
|
CHECK("COPYINVERTED", *d); \
|
CHECK("COPYINVERTED", *d); \
|
break; \
|
break; \
|
case MWMODE_ORINVERTED: \
|
case MWMODE_ORINVERTED: \
|
*d |= ~(src); \
|
*d |= ~(src); \
|
CHECK("ORINVERTED", *d); \
|
CHECK("ORINVERTED", *d); \
|
break; \
|
break; \
|
case MWMODE_ANDINVERTED: \
|
case MWMODE_ANDINVERTED: \
|
*d &= ~(src); \
|
*d &= ~(src); \
|
CHECK("ANDINVERTED", *d); \
|
CHECK("ANDINVERTED", *d); \
|
break; \
|
break; \
|
case MWMODE_ORREVERSE: \
|
case MWMODE_ORREVERSE: \
|
*d = ~*d | (src); \
|
*d = ~*d | (src); \
|
CHECK("ORREVERSE", *d); \
|
CHECK("ORREVERSE", *d); \
|
break; \
|
break; \
|
case MWMODE_ANDREVERSE: \
|
case MWMODE_ANDREVERSE: \
|
*d = ~*d & (src); \
|
*d = ~*d & (src); \
|
CHECK("ANDREVERSE", *d); \
|
CHECK("ANDREVERSE", *d); \
|
break; \
|
break; \
|
case MWMODE_COPY: \
|
case MWMODE_COPY: \
|
*d = (src); \
|
*d = (src); \
|
CHECK("COPY", *d); \
|
CHECK("COPY", *d); \
|
break; \
|
break; \
|
case MWMODE_NOOP: \
|
case MWMODE_NOOP: \
|
CHECK("NOOP", *d); \
|
CHECK("NOOP", *d); \
|
break; \
|
break; \
|
} \
|
} \
|
}
|
}
|
|
|
/* applyOp w/return value*/
|
/* applyOp w/return value*/
|
#define DEFINE_applyOpR \
|
#define DEFINE_applyOpR \
|
static inline int applyOpR(op, src, dst) \
|
static inline int applyOpR(op, src, dst) \
|
{ \
|
{ \
|
switch (op) { \
|
switch (op) { \
|
case MWMODE_XOR: \
|
case MWMODE_XOR: \
|
return (src) ^ (dst); \
|
return (src) ^ (dst); \
|
case MWMODE_AND: \
|
case MWMODE_AND: \
|
return (src) & (dst); \
|
return (src) & (dst); \
|
case MWMODE_OR: \
|
case MWMODE_OR: \
|
return (src) | (dst); \
|
return (src) | (dst); \
|
case MWMODE_CLEAR: \
|
case MWMODE_CLEAR: \
|
return 0; \
|
return 0; \
|
case MWMODE_SETTO1: \
|
case MWMODE_SETTO1: \
|
return -1; \
|
return -1; \
|
case MWMODE_EQUIV: \
|
case MWMODE_EQUIV: \
|
return ~((src) ^ (dst)); \
|
return ~((src) ^ (dst)); \
|
case MWMODE_NOR: \
|
case MWMODE_NOR: \
|
return ~((src) | (dst)); \
|
return ~((src) | (dst)); \
|
case MWMODE_NAND: \
|
case MWMODE_NAND: \
|
return ~((src) & (dst)); \
|
return ~((src) & (dst)); \
|
case MWMODE_INVERT: \
|
case MWMODE_INVERT: \
|
return ~(dst); \
|
return ~(dst); \
|
case MWMODE_COPYINVERTED: \
|
case MWMODE_COPYINVERTED: \
|
return ~(src); \
|
return ~(src); \
|
case MWMODE_ORINVERTED: \
|
case MWMODE_ORINVERTED: \
|
return ~(src) | (dst); \
|
return ~(src) | (dst); \
|
case MWMODE_ANDINVERTED: \
|
case MWMODE_ANDINVERTED: \
|
return ~(src) & (dst); \
|
return ~(src) & (dst); \
|
case MWMODE_ORREVERSE: \
|
case MWMODE_ORREVERSE: \
|
return (src) | ~(dst); \
|
return (src) | ~(dst); \
|
case MWMODE_ANDREVERSE: \
|
case MWMODE_ANDREVERSE: \
|
return (src) & ~(dst); \
|
return (src) & ~(dst); \
|
case MWMODE_COPY: \
|
case MWMODE_COPY: \
|
return (src); \
|
return (src); \
|
case MWMODE_NOOP: \
|
case MWMODE_NOOP: \
|
default: \
|
default: \
|
return (dst); \
|
return (dst); \
|
} \
|
} \
|
}
|
}
|
|
|
/* global vars*/
|
/* global vars*/
|
extern int gr_mode; /* temp kluge*/
|
extern int gr_mode; /* temp kluge*/
|
|
|
/* entry points*/
|
/* entry points*/
|
/* scr_fb.c*/
|
/* scr_fb.c*/
|
void ioctl_getpalette(int start, int len, short *red, short *green,short *blue);
|
void ioctl_getpalette(int start, int len, short *red, short *green,short *blue);
|
void ioctl_setpalette(int start, int len, short *red, short *green,short *blue);
|
void ioctl_setpalette(int start, int len, short *red, short *green,short *blue);
|
|
|
/* genmem.c*/
|
/* genmem.c*/
|
void gen_fillrect(PSD psd,MWCOORD x1,MWCOORD y1,MWCOORD x2,MWCOORD y2,
|
void gen_fillrect(PSD psd,MWCOORD x1,MWCOORD y1,MWCOORD x2,MWCOORD y2,
|
MWPIXELVAL c);
|
MWPIXELVAL c);
|
MWBOOL set_subdriver(PSD psd, PSUBDRIVER subdriver, MWBOOL init);
|
MWBOOL set_subdriver(PSD psd, PSUBDRIVER subdriver, MWBOOL init);
|
void get_subdriver(PSD psd, PSUBDRIVER subdriver);
|
void get_subdriver(PSD psd, PSUBDRIVER subdriver);
|
|
|
/* fb.c*/
|
/* fb.c*/
|
PSUBDRIVER select_fb_subdriver(PSD psd);
|
PSUBDRIVER select_fb_subdriver(PSD psd);
|
|
|