1706f2543Smrg/*
2706f2543Smrg * Copyright © 1998 Keith Packard
3706f2543Smrg *
4706f2543Smrg * Permission to use, copy, modify, distribute, and sell this software and its
5706f2543Smrg * documentation for any purpose is hereby granted without fee, provided that
6706f2543Smrg * the above copyright notice appear in all copies and that both that
7706f2543Smrg * copyright notice and this permission notice appear in supporting
8706f2543Smrg * documentation, and that the name of Keith Packard not be used in
9706f2543Smrg * advertising or publicity pertaining to distribution of the software without
10706f2543Smrg * specific, written prior permission.  Keith Packard makes no
11706f2543Smrg * representations about the suitability of this software for any purpose.  It
12706f2543Smrg * is provided "as is" without express or implied warranty.
13706f2543Smrg *
14706f2543Smrg * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
15706f2543Smrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
16706f2543Smrg * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
17706f2543Smrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
18706f2543Smrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
19706f2543Smrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
20706f2543Smrg * PERFORMANCE OF THIS SOFTWARE.
21706f2543Smrg */
22706f2543Smrg
23706f2543Smrg#ifdef HAVE_DIX_CONFIG_H
24706f2543Smrg#include <dix-config.h>
25706f2543Smrg#endif
26706f2543Smrg
27706f2543Smrg#include "fb.h"
28706f2543Smrg#include "miline.h"
29706f2543Smrg#include "mizerarc.h"
30706f2543Smrg
31706f2543Smrg#undef BRESSOLID
32706f2543Smrg#undef BRESDASH
33706f2543Smrg#undef DOTS
34706f2543Smrg#undef ARC
35706f2543Smrg#undef GLYPH
36706f2543Smrg#undef BITS
37706f2543Smrg#undef BITS2
38706f2543Smrg#undef BITS4
39706f2543Smrg
40706f2543Smrg#define BRESSOLID   fbBresSolid8
41706f2543Smrg#define BRESDASH    fbBresDash8
42706f2543Smrg#define DOTS	    fbDots8
43706f2543Smrg#define ARC	    fbArc8
44706f2543Smrg#define GLYPH	    fbGlyph8
45706f2543Smrg#define POLYLINE    fbPolyline8
46706f2543Smrg#define POLYSEGMENT fbPolySegment8
47706f2543Smrg#define BITS	    BYTE
48706f2543Smrg#define BITS2	    CARD16
49706f2543Smrg#define BITS4	    CARD32
50706f2543Smrg
51706f2543Smrg#include "fbbits.h"
52706f2543Smrg
53706f2543Smrg#undef BRESSOLID
54706f2543Smrg#undef BRESDASH
55706f2543Smrg#undef DOTS
56706f2543Smrg#undef ARC
57706f2543Smrg#undef GLYPH
58706f2543Smrg#undef POLYLINE
59706f2543Smrg#undef POLYSEGMENT
60706f2543Smrg#undef BITS
61706f2543Smrg#undef BITS2
62706f2543Smrg#undef BITS4
63706f2543Smrg
64706f2543Smrg#define BRESSOLID   fbBresSolid16
65706f2543Smrg#define BRESDASH    fbBresDash16
66706f2543Smrg#define DOTS	    fbDots16
67706f2543Smrg#define ARC	    fbArc16
68706f2543Smrg#define GLYPH	    fbGlyph16
69706f2543Smrg#define POLYLINE    fbPolyline16
70706f2543Smrg#define POLYSEGMENT fbPolySegment16
71706f2543Smrg#define BITS	    CARD16
72706f2543Smrg#define BITS2	    CARD32
73706f2543Smrg#if FB_SHIFT == 6
74706f2543Smrg#define BITS4	    FbBits
75706f2543Smrg#endif
76706f2543Smrg
77706f2543Smrg#include "fbbits.h"
78706f2543Smrg
79706f2543Smrg#undef BRESSOLID
80706f2543Smrg#undef BRESDASH
81706f2543Smrg#undef DOTS
82706f2543Smrg#undef ARC
83706f2543Smrg#undef GLYPH
84706f2543Smrg#undef POLYLINE
85706f2543Smrg#undef POLYSEGMENT
86706f2543Smrg#undef BITS
87706f2543Smrg#undef BITS2
88706f2543Smrg#if FB_SHIFT == 6
89706f2543Smrg#undef BITS4
90706f2543Smrg#endif
91706f2543Smrg
92706f2543Smrg#ifdef FB_24BIT
93706f2543Smrg#define BRESSOLID   fbBresSolid24
94706f2543Smrg#define BRESDASH    fbBresDash24
95706f2543Smrg#define DOTS        fbDots24
96706f2543Smrg#define ARC         fbArc24
97706f2543Smrg#define POLYLINE    fbPolyline24
98706f2543Smrg#define POLYSEGMENT fbPolySegment24
99706f2543Smrg
100706f2543Smrg#define BITS        CARD32
101706f2543Smrg#define BITSUNIT    BYTE
102706f2543Smrg#define BITSMUL	    3
103706f2543Smrg
104706f2543Smrg#define FbDoTypeStore(b,t,x,s)	WRITE(((t *) (b)), (x) >> (s))
105706f2543Smrg#define FbDoTypeRRop(b,t,a,x,s) WRITE((t *) (b), FbDoRRop(READ((t *) (b)),\
106706f2543Smrg							  (a) >> (s), \
107706f2543Smrg							  (x) >> (s)))
108706f2543Smrg#define FbDoTypeMaskRRop(b,t,a,x,m,s) WRITE((t *) (b), FbDoMaskRRop(READ((t *) (b)),\
109706f2543Smrg								    (a) >> (s), \
110706f2543Smrg								    (x) >> (s), \
111706f2543Smrg								    (m) >> (s)))
112706f2543Smrg#if BITMAP_BIT_ORDER == LSBFirst
113706f2543Smrg#define BITSSTORE(b,x)	((unsigned long) (b) & 1 ? \
114706f2543Smrg			 (FbDoTypeStore (b, CARD8, x, 0), \
115706f2543Smrg			  FbDoTypeStore ((b) + 1, CARD16, x, 8)) : \
116706f2543Smrg			 (FbDoTypeStore (b, CARD16, x, 0), \
117706f2543Smrg			  FbDoTypeStore ((b) + 2, CARD8, x, 16)))
118706f2543Smrg#define BITSRROP(b,a,x)	((unsigned long) (b) & 1 ? \
119706f2543Smrg			 (FbDoTypeRRop(b,CARD8,a,x,0), \
120706f2543Smrg			  FbDoTypeRRop((b)+1,CARD16,a,x,8)) : \
121706f2543Smrg			 (FbDoTypeRRop(b,CARD16,a,x,0), \
122706f2543Smrg			  FbDoTypeRRop((b)+2,CARD8,a,x,16)))
123706f2543Smrg#else
124706f2543Smrg#define BITSSTORE(b,x)  ((unsigned long) (b) & 1 ? \
125706f2543Smrg			 (FbDoTypeStore (b, CARD8, x, 16), \
126706f2543Smrg			  FbDoTypeStore ((b) + 1, CARD16, x, 0)) : \
127706f2543Smrg			 (FbDoTypeStore (b, CARD16, x, 8), \
128706f2543Smrg			  FbDoTypeStore ((b) + 2, CARD8, x, 0)))
129706f2543Smrg#define BITSRROP(b,a,x)	((unsigned long) (b) & 1 ? \
130706f2543Smrg			 (FbDoTypeRRop (b, CARD8, a, x, 16), \
131706f2543Smrg			  FbDoTypeRRop ((b) + 1, CARD16, a, x, 0)) : \
132706f2543Smrg			 (FbDoTypeRRop (b, CARD16, a, x, 8), \
133706f2543Smrg			  FbDoTypeRRop ((b) + 2, CARD8, a, x, 0)))
134706f2543Smrg#endif
135706f2543Smrg
136706f2543Smrg#include "fbbits.h"
137706f2543Smrg
138706f2543Smrg#undef BITSSTORE
139706f2543Smrg#undef BITSRROP
140706f2543Smrg#undef BITSMUL
141706f2543Smrg#undef BITSUNIT
142706f2543Smrg#undef BITS
143706f2543Smrg
144706f2543Smrg#undef BRESSOLID
145706f2543Smrg#undef BRESDASH
146706f2543Smrg#undef DOTS
147706f2543Smrg#undef ARC
148706f2543Smrg#undef POLYLINE
149706f2543Smrg#undef POLYSEGMENT
150706f2543Smrg#endif /* FB_24BIT */
151706f2543Smrg
152706f2543Smrg#define BRESSOLID   fbBresSolid32
153706f2543Smrg#define BRESDASH    fbBresDash32
154706f2543Smrg#define DOTS	    fbDots32
155706f2543Smrg#define ARC	    fbArc32
156706f2543Smrg#define GLYPH	    fbGlyph32
157706f2543Smrg#define POLYLINE    fbPolyline32
158706f2543Smrg#define POLYSEGMENT fbPolySegment32
159706f2543Smrg#define BITS	    CARD32
160706f2543Smrg#if FB_SHIFT == 6
161706f2543Smrg#define BITS2	    FbBits
162706f2543Smrg#endif
163706f2543Smrg
164706f2543Smrg#include "fbbits.h"
165706f2543Smrg
166706f2543Smrg#undef BRESSOLID
167706f2543Smrg#undef BRESDASH
168706f2543Smrg#undef DOTS
169706f2543Smrg#undef ARC
170706f2543Smrg#undef GLYPH
171706f2543Smrg#undef POLYLINE
172706f2543Smrg#undef POLYSEGMENT
173706f2543Smrg#undef BITS
174706f2543Smrg#if FB_SHIFT == 6
175706f2543Smrg#undef BITS2
176706f2543Smrg#endif
177