Files
Arquivotheca.SunOS-4.1.4/usr.lib/libpixrect/pr/pr_impl_util.h
seta75D ff309bfe1c Init
2021-10-11 18:37:13 -03:00

188 lines
3.8 KiB
C

/* @(#)pr_impl_util.h 1.1 94/10/31 SMI */
/*
* Copyright 1987-1989 Sun Microsystems, Inc.
*/
/*
* Pixrect implementation utilities
*/
#ifndef pr_impl_util_DEFINED
#define pr_impl_util_DEFINED
/* Reiser cpp concatenation macros */
#ifndef _CAT
#undef _IDENT
#define _IDENT(x) x
#define _CAT(a,b) _IDENT(a)b
#endif
/*
* code selection macros
*/
#define IFTRUE(a,b) a
#define IFFALSE(a,b) b
/* and together multiple options */
#define IFAND IFAND2
#define IFAND2(opt1,opt2,a,b) opt1(opt2(a,b),b)
#define IFAND3(opt1,opt2,opt3,a,b) opt1(opt2(opt3(a,b),b),b)
#define IFAND4(opt1,opt2,opt3,opt4,a,b) opt1(opt2(opt3(opt4(a,b),b),b),b)
#define IFAND5(opt1,opt2,opt3,opt4,opt5,a,b) \
opt1(opt2(opt3(opt4(opt5(a,b),b),b),b),b)
#define IFAND6(opt1,opt2,opt3,opt4,opt5,opt6,a,b) \
opt1(opt2(opt3(opt4(opt5(opt6(a,b),b),b),b),b),b)
#ifdef KERNEL
#define IFKERNEL IFTRUE
#else
#define IFKERNEL IFFALSE
#endif
/*
* lint garbage
*/
#ifdef lint
#define IFLINT IFTRUE
int _ZERO_; /* "constant in conditional context" workaround */
#define _ONE_ (!_ZERO_)
int _loop; /* "_loop redefinition hides earlier one" */
#else lint
#define IFLINT IFFALSE
#define _ZERO_ 0
#define _ONE_ 1
#endif lint
/*
* portability aids
*/
#ifdef mc68000
#define IF68000 IFTRUE
typedef caddr_t INT_T; /* pseudo-integer type (address register) */
typedef u_long PTR_T; /* pseudo-pointer type (data register) */
typedef short LOOP_T; /* loop variable (for dbra loops) */
#define LOOP_DECR(var) (--(var) != -1)
#else mc68000
#define IF68000 IFFALSE
typedef int INT_T;
typedef caddr_t PTR_T;
typedef int LOOP_T;
#define LOOP_DECR(var) (--(var) >= 0)
#endif mc68000
#ifdef sparc
#define IFSPARC IFTRUE
#else
#define IFSPARC IFFALSE
#endif
/* true if we can make 32 bit accesses on 16 bit boundaries */
#ifndef SHORT_ALIGN
#define SHORT_ALIGN (!defined(sparc))
#endif
#if SHORT_ALIGN
#define IFSHORT_ALIGN IFTRUE
#else
#define IFSHORT_ALIGN IFFALSE
#endif
#ifndef LITTLE_ENDIAN
#define LITTLE_ENDIAN defined(i386)
#endif
#if LITTLE_ENDIAN
#define ENDIAN IFTRUE
#else
#define ENDIAN IFFALSE
#endif
/*
* SunOS release number
* warning: these tests are fragile
*/
#if defined(sun) && !defined(SUNOS)
#ifdef _sys_types_h
#define SUNOS 41
#else _sys_types_h
#ifdef NFDBITS
#define SUNOS 40
#else NFDBITS
#define SUNOS 35
#endif NFDBITS
#endif _sys_types_h
#endif
#if SUNOS >= 40
#define IFSUNOS4 IFTRUE
#else
#define IFSUNOS4 IFFALSE
#endif
#if SUNOS >= 41
#define IFSUNOS41 IFTRUE
#else
#define IFSUNOS41 IFFALSE
#endif
/*
* misc. macros
*/
/* statement macro */
#define _STMT(op) do { op } while (_ZERO_)
/* loop macros */
#define PR_LOOPVP(var, op) do { op; } while (LOOP_DECR(var))
#define PR_LOOPV(var, op) _STMT(while (LOOP_DECR(var)) { op; })
#define PR_LOOPP(count, op) _STMT( \
IFLINT(, register LOOP_T) _loop = (count); PR_LOOPVP(_loop, op);)
#define PR_LOOP(count, op) _STMT( \
IFLINT(, register LOOP_T) _loop = (count); PR_LOOPV(_loop, op);)
/* pointer manipulation */
#define PTR_ADD(p, incr) ((caddr_t) (p) + (incr))
#define PTR_INCR(type, p, incr) (p = (type) ((caddr_t) (p) + (incr)))
/* unshifted pixrect op codes */
#define PIX_OPSRC (12)
#define PIX_OPDST (10)
#define PIX_OPNOT(op) ((op) ^ 15)
#define PIX_OPCLR (0)
#define PIX_OPSET (15)
/* extract color and op code fields */
#define PIXOP_COLOR(op) ((op) >> 5)
#define PIXOP_OP(op) ((op) >> 1 & 15)
/* reverse video src or dst */
#define PIX_OP_REVERSESRC(op) (((op) & 3) << 2 | (op) >> 2 & 3)
#define PIX_OP_REVERSEDST(op) ((~(op) & 5) << 1 | ~(op) >> 1 & 0x5)
/* determine if op needs src or dst */
#define PIX_OP_NEEDS_SRC(op) (((op) >> 2 ^ (op)) & 3)
#define PIX_OP_NEEDS_DST(op) (((op) >> 1 ^ (op)) & 5)
/* misc. data types */
typedef short MPR_T; /* type used for memory pixrect data */
typedef u_short UMPR_T; /* unsigned equivalent of MPR_T */
#endif pr_impl_util_DEFINED