URI: 
       tdraw.h - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
       tdraw.h (17881B)
       ---
            1 #ifndef _DRAW_H_
            2 #define _DRAW_H_ 1
            3 #if defined(__cplusplus)
            4 extern "C" { 
            5 #endif
            6 
            7 AUTOLIB(draw)
            8 #ifdef __APPLE__
            9 AUTOFRAMEWORK(Carbon)
           10 #endif
           11 
           12 typedef struct        Cachefont Cachefont;
           13 typedef struct        Cacheinfo Cacheinfo;
           14 typedef struct        Cachesubf Cachesubf;
           15 typedef struct        Display Display;
           16 typedef struct        Font Font;
           17 typedef struct        Fontchar Fontchar;
           18 typedef struct        Image Image;
           19 typedef struct        Mouse Mouse;
           20 typedef struct        Point Point;
           21 typedef struct        Rectangle Rectangle;
           22 typedef struct        RGB RGB;
           23 typedef struct        Screen Screen;
           24 typedef struct        Subfont Subfont;
           25 
           26 struct Mux;
           27 
           28 extern        int        Rfmt(Fmt*);
           29 extern        int        Pfmt(Fmt*);
           30 
           31 #define         DOpaque                0xFFFFFFFF
           32 #define         DTransparent        0x00000000                /* only useful for allocimage memfillcolor */
           33 #define         DBlack                0x000000FF
           34 #define         DWhite                0xFFFFFFFF
           35 #define         DRed                0xFF0000FF
           36 #define         DGreen                0x00FF00FF
           37 #define         DBlue                0x0000FFFF
           38 #define         DCyan                0x00FFFFFF
           39 #define         DMagenta                0xFF00FFFF
           40 #define         DYellow                0xFFFF00FF
           41 #define         DPaleyellow        0xFFFFAAFF
           42 #define         DDarkyellow        0xEEEE9EFF
           43 #define         DDarkgreen        0x448844FF
           44 #define         DPalegreen        0xAAFFAAFF
           45 #define         DMedgreen        0x88CC88FF
           46 #define         DDarkblue        0x000055FF
           47 #define         DPalebluegreen 0xAAFFFFFF
           48 #define         DPaleblue                0x0000BBFF
           49 #define         DBluegreen        0x008888FF
           50 #define         DGreygreen        0x55AAAAFF
           51 #define         DPalegreygreen        0x9EEEEEFF
           52 #define         DYellowgreen        0x99994CFF
           53 #define         DMedblue                0x000099FF
           54 #define         DGreyblue        0x005DBBFF
           55 #define         DPalegreyblue        0x4993DDFF
           56 #define         DPurpleblue        0x8888CCFF
           57 
           58 #define         DNotacolor        0xFFFFFF00
           59 #define         DNofill                DNotacolor
           60 
           61 enum
           62 {
           63         Displaybufsize        = 8000,
           64         ICOSSCALE        = 1024,
           65         Borderwidth        = 4,
           66         DefaultDPI        = 133
           67 };
           68 
           69 enum
           70 {
           71         /* refresh methods */
           72         Refbackup        = 0,
           73         Refnone                = 1,
           74         Refmesg                = 2
           75 };
           76 #define        NOREFRESH        ((void*)-1)
           77 
           78 enum
           79 {
           80         /* line ends */
           81         Endsquare        = 0,
           82         Enddisc                = 1,
           83         Endarrow        = 2,
           84         Endmask                = 0x1F
           85 };
           86 
           87 #define        ARROW(a, b, c)        (Endarrow|((a)<<5)|((b)<<14)|((c)<<23))
           88 
           89 typedef enum
           90 {
           91         /* Porter-Duff compositing operators */
           92         Clear        = 0,
           93 
           94         SinD        = 8,
           95         DinS        = 4,
           96         SoutD        = 2,
           97         DoutS        = 1,
           98 
           99         S                = SinD|SoutD,
          100         SoverD        = SinD|SoutD|DoutS,
          101         SatopD        = SinD|DoutS,
          102         SxorD        = SoutD|DoutS,
          103 
          104         D                = DinS|DoutS,
          105         DoverS        = DinS|DoutS|SoutD,
          106         DatopS        = DinS|SoutD,
          107         DxorS        = DoutS|SoutD,        /* == SxorD */
          108 
          109         Ncomp = 12
          110 } Drawop;
          111 
          112 /*
          113  * image channel descriptors 
          114  */
          115 enum {
          116         CRed = 0,
          117         CGreen,
          118         CBlue,
          119         CGrey,
          120         CAlpha,
          121         CMap,
          122         CIgnore,
          123         NChan
          124 };
          125 
          126 #define __DC(type, nbits)        ((((type)&15)<<4)|((nbits)&15))
          127 #define CHAN1(a,b)        __DC(a,b)
          128 #define CHAN2(a,b,c,d)        (CHAN1((a),(b))<<8|__DC((c),(d)))
          129 #define CHAN3(a,b,c,d,e,f)        (CHAN2((a),(b),(c),(d))<<8|__DC((e),(f)))
          130 #define CHAN4(a,b,c,d,e,f,g,h)        (CHAN3((a),(b),(c),(d),(e),(f))<<8|__DC((g),(h)))
          131 
          132 #define NBITS(c) ((c)&15)
          133 #define TYPE(c) (((c)>>4)&15)
          134 
          135 enum {
          136         GREY1        = CHAN1(CGrey, 1),
          137         GREY2        = CHAN1(CGrey, 2),
          138         GREY4        = CHAN1(CGrey, 4),
          139         GREY8        = CHAN1(CGrey, 8),
          140         CMAP8        = CHAN1(CMap, 8),
          141         RGB15        = CHAN4(CIgnore, 1, CRed, 5, CGreen, 5, CBlue, 5),
          142         RGB16        = CHAN3(CRed, 5, CGreen, 6, CBlue, 5),
          143         RGB24        = CHAN3(CRed, 8, CGreen, 8, CBlue, 8),
          144         BGR24        = CHAN3(CBlue, 8, CGreen, 8, CRed, 8),
          145         RGBA32        = CHAN4(CRed, 8, CGreen, 8, CBlue, 8, CAlpha, 8),
          146         ARGB32        = CHAN4(CAlpha, 8, CRed, 8, CGreen, 8, CBlue, 8),        /* stupid VGAs */
          147         ABGR32        = CHAN4(CAlpha, 8, CBlue, 8, CGreen, 8, CRed, 8),
          148         XRGB32  = CHAN4(CIgnore, 8, CRed, 8, CGreen, 8, CBlue, 8),
          149         XBGR32  = CHAN4(CIgnore, 8, CBlue, 8, CGreen, 8, CRed, 8)
          150 };
          151 
          152 extern        char*        chantostr(char*, u32int);
          153 extern        u32int        strtochan(char*);
          154 extern        int                chantodepth(u32int);
          155 
          156 struct        Point
          157 {
          158         int        x;
          159         int        y;
          160 };
          161 
          162 struct Rectangle
          163 {
          164         Point        min;
          165         Point        max;
          166 };
          167 
          168 typedef void        (*Reffn)(Image*, Rectangle, void*);
          169 
          170 struct Screen
          171 {
          172         Display        *display;        /* display holding data */
          173         int        id;                /* id of system-held Screen */
          174         Image        *image;                /* unused; for reference only */
          175         Image        *fill;                /* color to paint behind windows */
          176 };
          177 
          178 struct Display
          179 {
          180         QLock                qlock;
          181         int                locking;        /*program is using lockdisplay */
          182         int                dirno;
          183         int                imageid;
          184         int                local;
          185         void                (*error)(Display*, char*);
          186         char                *devdir;
          187         char                *windir;
          188         char                oldlabel[64];
          189         u32int                dataqid;
          190         Image                *image;
          191         Image                *white;
          192         Image                *black;
          193         Image                *opaque;
          194         Image                *transparent;
          195         uchar                *buf;
          196         int                bufsize;
          197         uchar                *bufp;
          198         uchar                *obuf;
          199         int                obufsize;
          200         uchar                *obufp;
          201         Font                *defaultfont;
          202         Image                *windows;
          203         Image                *screenimage;
          204         int                _isnewdisplay;
          205         struct Mux        *mux;
          206         int                srvfd;
          207         int                dpi;
          208         
          209         Font        *firstfont;
          210         Font        *lastfont;
          211 };
          212 
          213 struct Image
          214 {
          215         Display                *display;        /* display holding data */
          216         int                id;                /* id of system-held Image */
          217         Rectangle        r;                /* rectangle in data area, local coords */
          218         Rectangle         clipr;                /* clipping region */
          219         int                depth;                /* number of bits per pixel */
          220         u32int        chan;
          221         int                repl;                /* flag: data replicates to tile clipr */
          222         Screen                *screen;        /* 0 if not a window */
          223         Image                *next;        /* next in list of windows */
          224 };
          225 
          226 struct RGB
          227 {
          228         u32int        red;
          229         u32int        green;
          230         u32int        blue;
          231 };
          232 
          233 /*
          234  * Subfonts
          235  *
          236  * given char c, Subfont *f, Fontchar *i, and Point p, one says
          237  *        i = f->info+c;
          238  *        void(b, Rect(p.x+i->left, p.y+i->top,
          239  *                p.x+i->left+((i+1)->x-i->x), p.y+i->bottom),
          240  *                color, f->bits, Pt(i->x, i->top));
          241  *        p.x += i->width;
          242  * to draw characters in the specified color (itself an Image) in Image b.
          243  */
          244 
          245 struct        Fontchar
          246 {
          247         int                x;                /* left edge of bits */
          248         uchar                top;                /* first non-zero scan-line */
          249         uchar                bottom;                /* last non-zero scan-line + 1 */
          250         char                left;                /* offset of baseline */
          251         uchar                width;                /* width of baseline */
          252 };
          253 
          254 struct        Subfont
          255 {
          256         char                *name;
          257         short                n;                /* number of chars in font */
          258         uchar                height;                /* height of image */
          259         char                ascent;                /* top of image to baseline */
          260         Fontchar         *info;                /* n+1 character descriptors */
          261         Image                *bits;                /* of font */
          262         int                ref;
          263 };
          264 
          265 enum
          266 {
          267         /* starting values */
          268         LOG2NFCACHE =        6,
          269         NFCACHE =        (1<<LOG2NFCACHE),        /* #chars cached */
          270         NFLOOK =        5,                        /* #chars to scan in cache */
          271         NFSUBF =        2,                        /* #subfonts to cache */
          272         /* max value */
          273         MAXFCACHE =        1024+NFLOOK,                /* upper limit */
          274         MAXSUBF =        50,                        /* generous upper limit */
          275         /* deltas */
          276         DSUBF =         4,
          277         /* expiry ages */
          278         SUBFAGE        =        10000,
          279         CACHEAGE =        10000
          280 };
          281 
          282 struct Cachefont
          283 {
          284         Rune                min;        /* lowest rune value to be taken from subfont */
          285         Rune                max;        /* highest rune value+1 to be taken from subfont */
          286         int                offset;        /* position in subfont of character at min */
          287         char                *name;                        /* stored in font */
          288         char                *subfontname;                /* to access subfont */
          289 };
          290 
          291 struct Cacheinfo
          292 {
          293         int                x;                /* left edge of bits */
          294         uchar                width;                /* width of baseline */
          295         schar                left;                /* offset of baseline */
          296         Rune                value;        /* value of character at this slot in cache */
          297         ushort                age;
          298 };
          299 
          300 struct Cachesubf
          301 {
          302         u32int                age;        /* for replacement */
          303         Cachefont        *cf;        /* font info that owns us */
          304         Subfont                *f;        /* attached subfont */
          305 };
          306 
          307 struct Font
          308 {
          309         char                *name;
          310         char                *namespec;
          311         Display                *display;
          312         short                height;        /* max height of image, interline spacing */
          313         short                ascent;        /* top of image to baseline */
          314         short                width;        /* widest so far; used in caching only */
          315         int                nsub;        /* number of subfonts */
          316         u32int                age;        /* increasing counter; used for LRU */
          317         int                maxdepth;        /* maximum depth of all loaded subfonts */
          318         int                ncache;        /* size of cache */
          319         int                nsubf;        /* size of subfont list */
          320         int                scale;        /* pixel scaling to apply */
          321         Cacheinfo        *cache;
          322         Cachesubf        *subf;
          323         Cachefont        **sub;        /* as read from file */
          324         Image                *cacheimage;
          325         
          326         /* doubly linked list of fonts known to display */
          327         int ondisplaylist;
          328         Font *next;
          329         Font *prev;
          330         
          331         /* on hi-dpi systems, one of these is set to f and the other is the other-dpi version of f */
          332         Font        *lodpi;
          333         Font        *hidpi;
          334 };
          335 
          336 #define        Dx(r)        ((r).max.x-(r).min.x)
          337 #define        Dy(r)        ((r).max.y-(r).min.y)
          338 
          339 /*
          340  * Image management
          341  */
          342 extern Image*        _allocimage(Image*, Display*, Rectangle, u32int, int, u32int, int, int);
          343 extern Image*        allocimage(Display*, Rectangle, u32int, int, u32int);
          344 extern uchar*        bufimage(Display*, int);
          345 extern int        bytesperline(Rectangle, int);
          346 extern void        closedisplay(Display*);
          347 extern void        drawerror(Display*, char*);
          348 extern int        flushimage(Display*, int);
          349 extern int        freeimage(Image*);
          350 extern int        _freeimage1(Image*);
          351 extern int        geninitdraw(char*, void(*)(Display*, char*), char*, char*, char*, int);
          352 extern int        initdraw(void(*)(Display*, char*), char*, char*);
          353 extern int        newwindow(char*);
          354 extern int        loadimage(Image*, Rectangle, uchar*, int);
          355 extern int        cloadimage(Image*, Rectangle, uchar*, int);
          356 extern int        getwindow(Display*, int);
          357 extern int        gengetwindow(Display*, char*, Image**, Screen**, int);
          358 extern Image* readimage(Display*, int, int);
          359 extern Image* creadimage(Display*, int, int);
          360 extern int        unloadimage(Image*, Rectangle, uchar*, int);
          361 extern int        wordsperline(Rectangle, int);
          362 extern int        writeimage(int, Image*, int);
          363 extern Image*        namedimage(Display*, char*);
          364 extern int        nameimage(Image*, char*, int);
          365 extern Image* allocimagemix(Display*, u32int, u32int);
          366 extern int        drawsetlabel(char*);
          367 extern int        scalesize(Display*, int);
          368 
          369 /*
          370  * Colors
          371  */
          372 extern        void        readcolmap(Display*, RGB*);
          373 extern        void        writecolmap(Display*, RGB*);
          374 extern        u32int        setalpha(u32int, uchar);
          375 
          376 /*
          377  * Windows
          378  */
          379 extern Screen*        allocscreen(Image*, Image*, int);
          380 extern Image*        _allocwindow(Image*, Screen*, Rectangle, int, u32int);
          381 extern Image*        allocwindow(Screen*, Rectangle, int, u32int);
          382 extern void        bottomnwindows(Image**, int);
          383 extern void        bottomwindow(Image*);
          384 extern int        freescreen(Screen*);
          385 extern Screen*        publicscreen(Display*, int, u32int);
          386 extern void        topnwindows(Image**, int);
          387 extern void        topwindow(Image*);
          388 extern int        originwindow(Image*, Point, Point);
          389 
          390 /*
          391  * Geometry
          392  */
          393 extern Point                Pt(int, int);
          394 extern Rectangle        Rect(int, int, int, int);
          395 extern Rectangle        Rpt(Point, Point);
          396 extern Point                addpt(Point, Point);
          397 extern Point                subpt(Point, Point);
          398 extern Point                divpt(Point, int);
          399 extern Point                mulpt(Point, int);
          400 extern int                eqpt(Point, Point);
          401 extern int                eqrect(Rectangle, Rectangle);
          402 extern Rectangle        insetrect(Rectangle, int);
          403 extern Rectangle        rectaddpt(Rectangle, Point);
          404 extern Rectangle        rectsubpt(Rectangle, Point);
          405 extern Rectangle        canonrect(Rectangle);
          406 extern int                rectXrect(Rectangle, Rectangle);
          407 extern int                rectinrect(Rectangle, Rectangle);
          408 extern void                combinerect(Rectangle*, Rectangle);
          409 extern int                rectclip(Rectangle*, Rectangle);
          410 extern int                ptinrect(Point, Rectangle);
          411 extern void                replclipr(Image*, int, Rectangle);
          412 extern int                drawreplxy(int, int, int);        /* used to be drawsetxy */
          413 extern Point        drawrepl(Rectangle, Point);
          414 extern int                rgb2cmap(int, int, int);
          415 extern int                cmap2rgb(int);
          416 extern int                cmap2rgba(int);
          417 extern void                icossin(int, int*, int*);
          418 extern void                icossin2(int, int, int*, int*);
          419 
          420 /*
          421  * Graphics
          422  */
          423 extern void        draw(Image*, Rectangle, Image*, Image*, Point);
          424 extern void        drawop(Image*, Rectangle, Image*, Image*, Point, Drawop);
          425 extern void        gendraw(Image*, Rectangle, Image*, Point, Image*, Point);
          426 extern void        gendrawop(Image*, Rectangle, Image*, Point, Image*, Point, Drawop);
          427 extern void        line(Image*, Point, Point, int, int, int, Image*, Point);
          428 extern void        lineop(Image*, Point, Point, int, int, int, Image*, Point, Drawop);
          429 extern void        poly(Image*, Point*, int, int, int, int, Image*, Point);
          430 extern void        polyop(Image*, Point*, int, int, int, int, Image*, Point, Drawop);
          431 extern void        fillpoly(Image*, Point*, int, int, Image*, Point);
          432 extern void        fillpolyop(Image*, Point*, int, int, Image*, Point, Drawop);
          433 extern Point        string(Image*, Point, Image*, Point, Font*, char*);
          434 extern Point        stringop(Image*, Point, Image*, Point, Font*, char*, Drawop);
          435 extern Point        stringn(Image*, Point, Image*, Point, Font*, char*, int);
          436 extern Point        stringnop(Image*, Point, Image*, Point, Font*, char*, int, Drawop);
          437 extern Point        runestring(Image*, Point, Image*, Point, Font*, Rune*);
          438 extern Point        runestringop(Image*, Point, Image*, Point, Font*, Rune*, Drawop);
          439 extern Point        runestringn(Image*, Point, Image*, Point, Font*, Rune*, int);
          440 extern Point        runestringnop(Image*, Point, Image*, Point, Font*, Rune*, int, Drawop);
          441 extern Point        stringbg(Image*, Point, Image*, Point, Font*, char*, Image*, Point);
          442 extern Point        stringbgop(Image*, Point, Image*, Point, Font*, char*, Image*, Point, Drawop);
          443 extern Point        stringnbg(Image*, Point, Image*, Point, Font*, char*, int, Image*, Point);
          444 extern Point        stringnbgop(Image*, Point, Image*, Point, Font*, char*, int, Image*, Point, Drawop);
          445 extern Point        runestringbg(Image*, Point, Image*, Point, Font*, Rune*, Image*, Point);
          446 extern Point        runestringbgop(Image*, Point, Image*, Point, Font*, Rune*, Image*, Point, Drawop);
          447 extern Point        runestringnbg(Image*, Point, Image*, Point, Font*, Rune*, int, Image*, Point);
          448 extern Point        runestringnbgop(Image*, Point, Image*, Point, Font*, Rune*, int, Image*, Point, Drawop);
          449 extern Point        _string(Image*, Point, Image*, Point, Font*, char*, Rune*, int, Rectangle, Image*, Point, Drawop);
          450 extern Point        stringsubfont(Image*, Point, Image*, Subfont*, char*);
          451 extern int                bezier(Image*, Point, Point, Point, Point, int, int, int, Image*, Point);
          452 extern int                bezierop(Image*, Point, Point, Point, Point, int, int, int, Image*, Point, Drawop);
          453 extern int                bezspline(Image*, Point*, int, int, int, int, Image*, Point);
          454 extern int                bezsplineop(Image*, Point*, int, int, int, int, Image*, Point, Drawop);
          455 extern int                bezsplinepts(Point*, int, Point**);
          456 extern int                fillbezier(Image*, Point, Point, Point, Point, int, Image*, Point);
          457 extern int                fillbezierop(Image*, Point, Point, Point, Point, int, Image*, Point, Drawop);
          458 extern int                fillbezspline(Image*, Point*, int, int, Image*, Point);
          459 extern int                fillbezsplineop(Image*, Point*, int, int, Image*, Point, Drawop);
          460 extern void        ellipse(Image*, Point, int, int, int, Image*, Point);
          461 extern void        ellipseop(Image*, Point, int, int, int, Image*, Point, Drawop);
          462 extern void        fillellipse(Image*, Point, int, int, Image*, Point);
          463 extern void        fillellipseop(Image*, Point, int, int, Image*, Point, Drawop);
          464 extern void        arc(Image*, Point, int, int, int, Image*, Point, int, int);
          465 extern void        arcop(Image*, Point, int, int, int, Image*, Point, int, int, Drawop);
          466 extern void        fillarc(Image*, Point, int, int, Image*, Point, int, int);
          467 extern void        fillarcop(Image*, Point, int, int, Image*, Point, int, int, Drawop);
          468 extern void        border(Image*, Rectangle, int, Image*, Point);
          469 extern void        borderop(Image*, Rectangle, int, Image*, Point, Drawop);
          470 
          471 /*
          472  * Font management
          473  */
          474 extern Font*        openfont(Display*, char*);
          475 extern int        parsefontscale(char*, char**);
          476 extern Font*        buildfont(Display*, char*, char*);
          477 extern void        freefont(Font*);
          478 extern Font*        mkfont(Subfont*, Rune);
          479 extern int        cachechars(Font*, char**, Rune**, ushort*, int, int*, char**);
          480 extern void        agefont(Font*);
          481 extern Subfont*        allocsubfont(char*, int, int, int, Fontchar*, Image*);
          482 extern Subfont*        lookupsubfont(Display*, char*);
          483 extern void        installsubfont(char*, Subfont*);
          484 extern void        uninstallsubfont(Subfont*);
          485 extern void        freesubfont(Subfont*);
          486 extern Subfont*        readsubfont(Display*, char*, int, int);
          487 extern Subfont*        readsubfonti(Display*, char*, int, Image*, int);
          488 extern int        writesubfont(int, Subfont*);
          489 extern void        _unpackinfo(Fontchar*, uchar*, int);
          490 extern Point        stringsize(Font*, char*);
          491 extern int        stringwidth(Font*, char*);
          492 extern int        stringnwidth(Font*, char*, int);
          493 extern Point        runestringsize(Font*, Rune*);
          494 extern int        runestringwidth(Font*, Rune*);
          495 extern int        runestringnwidth(Font*, Rune*, int);
          496 extern Point        strsubfontwidth(Subfont*, char*);
          497 extern int        loadchar(Font*, Rune, Cacheinfo*, int, int, char**);
          498 extern char*        subfontname(char*, char*, int);
          499 extern Subfont*        _getsubfont(Display*, char*);
          500 extern void                lockdisplay(Display*);
          501 extern void        unlockdisplay(Display*);
          502 extern int                drawlsetrefresh(u32int, int, void*, void*);
          503 extern void        loadhidpi(Font*);
          504 extern void        swapfont(Font*, Font**, Font**);
          505 
          506 /*
          507  * Predefined 
          508  */
          509 extern        Point                ZP;
          510 extern        Rectangle        ZR;
          511 
          512 /*
          513  * Set up by initdraw()
          514  */
          515 extern        Display        *display;
          516 extern        Font                *font;
          517 extern        Image        *screen;
          518 extern        Screen        *_screen;
          519 extern        int        drawmousemask; /* set bits to disable receiving those buttons */
          520 extern        int        _cursorfd;
          521 extern        int        _drawdebug;        /* set to 1 to see errors from flushimage */
          522 extern        void        _setdrawop(Display*, Drawop);
          523 extern        Display        *_initdisplay(void(*)(Display*,char*), char*);
          524 
          525 extern        void        needdisplay(void); /* call instead of initdraw to get (null) variable linked in */
          526 
          527 #define        BGSHORT(p)                (((p)[0]<<0) | ((p)[1]<<8))
          528 #define        BGLONG(p)                ((BGSHORT(p)<<0) | (BGSHORT(p+2)<<16))
          529 #define        BPSHORT(p, v)                ((p)[0]=(v), (p)[1]=((v)>>8))
          530 #define        BPLONG(p, v)                (BPSHORT(p, (v)), BPSHORT(p+2, (v)>>16))
          531 
          532 /*
          533  * Compressed image file parameters and helper routines
          534  */
          535 #define        NMATCH        3                /* shortest match possible */
          536 #define        NRUN        (NMATCH+31)        /* longest match possible */
          537 #define        NMEM        1024                /* window size */
          538 #define        NDUMP        128                /* maximum length of dump */
          539 #define        NCBLOCK        6000                /* size of compressed blocks */
          540 extern        void        _twiddlecompressed(uchar*, int);
          541 extern        int        _compblocksize(Rectangle, int);
          542 
          543 /* XXX backwards helps; should go */
          544 extern        u32int        drawld2chan[];
          545 extern        void                drawsetdebug(int);
          546 
          547 /*
          548  * Snarf buffer
          549  */
          550 enum
          551 {
          552         SnarfSize = 64*1024
          553 };
          554 char *getsnarf(void);
          555 void putsnarf(char*);
          556 
          557 void drawtopwindow(void);
          558 void drawresizewindow(Rectangle);
          559 extern char *winsize;
          560 
          561 int        mousescrollsize(int);
          562 
          563 /*
          564  * RPC interface to draw server.
          565  */
          566 struct Mouse;
          567 struct Cursor;
          568 struct Cursor2;
          569 int                _displaybouncemouse(Display *d, struct Mouse *m);
          570 int                _displayconnect(Display *d);
          571 int                _displaycursor(Display *d, struct Cursor *c, struct Cursor2 *c2);
          572 int                _displayinit(Display *d, char *label, char *winsize);
          573 int                _displaylabel(Display *d, char *label);
          574 int                _displaymoveto(Display *d, Point p);
          575 int                _displaymux(Display *d);
          576 int                _displayrddraw(Display *d, void *v, int n);
          577 int                _displayrdkbd(Display *d, Rune *r);
          578 int                _displayrdmouse(Display *d, struct Mouse *m, int *resized);
          579 char*                _displayrdsnarf(Display *d);
          580 int                _displaywrdraw(Display *d, void *v, int n);
          581 int                _displaywrsnarf(Display *d, char *snarf);
          582 int                _displaytop(Display *d);
          583 int                _displayresize(Display *d, Rectangle rect);
          584 
          585 #if defined(__cplusplus)
          586 }
          587 #endif
          588 #endif