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