jerq layers code (Part 4 of 4)

S.Kenyon sk at ukc.UUCP
Wed Apr 10 20:42:44 AEST 1985


#!/bin/sh
echo 'Start of jerq layers code, part 04 of 04:'
echo 'x - man/jerq.5'
sed 's/^X//' > man/jerq.5 << '/'
X
X.TH JERQ 5 85/03/28 "PR1ME Computer"
X.SH NAME
Xjerq \- jerq code data structures
X.SH SYNOPSIS
X.B #include "jerq/h/layers.h"
X.SH DESCRIPTION
XHere are the definitions of the data structures that are passed in and out
Xof the layers routines.
X.PP
X.nf
Xstruct Point {
X    int x;                      /* x and y coordinates of point */
X    int y;
X};
X
Xstruct Rectangle {
X    struct Point origin;        /* min x,y */
X    struct Point corner;        /* max x,y */
X};
X
Xstruct Bitmap {
X    unsigned short *base;       /* start of data */
X    int width;                  /* width in words */
X    struct Rectangle rect;      /* image rectangle */
X    struct Obscured *obs;       /* linked list of obscured rectangles,
X                                   for compatability with Layer */
X    struct Obscured *endobs;    /* end of above linked list */
X};
X
Xstruct Layer {
X    unsigned short *base;       /* start of data */
X    int width;                  /* width in words */
X    struct Rectangle rect;      /* image rectangle */
X    struct Obscured *obs;       /* linked list of obscured rectangles */
X    struct Obscured *endobs;    /* end of above linked list */
X    struct Layer *front;        /* adjacent layer in front */
X    struct Layer *back;         /* adjacent layer behind */
X};
X.fi
X.SH SEE ALSO
Xjerq(3X)
X.SH AUTHOR
XSimon Kenyon
X.SH BUGS
X.I
XEndobs
Xis not stricly necessary,
Xbut it made coding a lot easier.
/
echo 'x - plot/addbit.c'
sed 's/^X//' > plot/addbit.c << '/'
X
X/*
X *  File:        addbit.c
X *
X *  Sccs-id:     @(#)addbit.c  1.5  85/03/24
X *
X *  Description: This file contains the one function addbit which
X *               adds a bit onto the end of the current plot line.
X *
X *  Author:      Simon Kenyon.
X *
X *  History:     SCK  1.1  83/10/03  Created.
X *               SCK  1.2  84/11/29  Made it work.
X *               SCK  1.3  85/03/04  Tidied up for release.
X *               SCK  1.4  85/03/22  Fixed up global variable declarations.
X *               SCK  1.5  85/03/24  Changed the include files around.
X */
X
X#include "../h/layers.h"
X
Xextern int  bitptr;
X
Xunsigned short  line[512];
Xunsigned short  wordmask[] = {
X    0x8000, 0x4000, 0x2000, 0x1000,
X    0x0800, 0x0400, 0x0200, 0x0100,
X    0x0080, 0x0040, 0x0020, 0x0010,
X    0x0008, 0x0004, 0x0002, 0x0001
X};
X
X/*
X *  Name:        addbit
X *
X *  Description: Add a bit onto the end of the current plot line.
X *
X *  Synopsis:    addbit (bit)
X *               int     bit;
X *
X *  Globals:     bitptr    (r/w)
X *               line      (w)
X *               wordmask  (r)
X *
X *  Calls:       Nothing.
X *
X *  Called by:   append  (append.c)
X */
Xaddbit (bit)
Xint     bit;                           /* 0 or 1 */
X{
X    int     wordidx;
X    int     bitidx;
X
X    wordidx = bitptr / WORDSIZE;
X    bitidx = bitptr % WORDSIZE;
X    if (bit)
X        line[wordidx] |= wordmask[bitidx];
X    else
X        line[wordidx] &= ~wordmask[bitidx];
X    bitptr++;
X}
/
echo 'x - plot/append.c'
sed 's/^X//' > plot/append.c << '/'
X
X/*
X *  File:        append.c
X *
X *  Sccs-id:     @(#)append.c  1.4  85/03/24
X *
X *  Description: This file contains the one function append which
X *               adds some more bits to the end of the plot line.
X *
X *  Author:      Simon Kenyon.
X *
X *  History:     SCK  1.1  83/10/03  Created.
X *               SCK  1.2  84/11/29  Made it work.
X *               SCK  1.3  85/03/04  Tidied up for release.
X *               SCK  1.4  85/03/24  Changed the include files around.
X */
X
X#include "../h/layers.h"
X
X/*
X *  Name:        append
X *
X *  Description: Add some more bits to the end of the plot line.
X *
X *  Synopsis:    append (bits, start, end, size)
X *               unsigned short  bits;
X *               int     start;
X *               int     end;
X *               int     size;
X *
X *  Globals:     None.
X *
X *  Calls:       addbit   (addbit.c)
X *
X *  Called by:   plot  (plot.c)
X */
Xappend (bits, start, end, size)
Xunsigned short  bits;
Xint     start;
Xint     end;
Xint     size;
X{
X    int     i;
X    int     j;
X
X    for (i = start; i <= end; i++)
X        for (j = 0; j < size; j++)
X            if (bits & (1 << (WORDSIZE - (i + 1))))
X                addbit (1);
X            else
X                addbit (0);
X}
/
echo 'x - plot/outline.c'
sed 's/^X//' > plot/outline.c << '/'
X
X/*
X *  File:        outline.c
X *
X *  Sccs-id:     @(#)outline.c  1.4  85/03/24
X *
X *  Description: This file contains the one function outline which
X *               sends the next output line to the Printronix plotter.
X *
X *  Author:      Simon Kenyon.
X *
X *  History:     SCK  1.1  83/10/03  Created.
X *               SCK  1.2  84/11/29  Made it work.
X *               SCK  1.3  85/03/04  Tidied up for release.
X *               SCK  1.4  85/03/24  Changed the include files around.
X */
X
X#include <stdio.h>
X
X#include "../h/layers.h"
X
Xextern int  outptr;
Xextern unsigned char    outlin[];
X
X/*
X *  Name:        outline
X *
X *  Description: Send the next output line to the Printronix plotter.
X *
X *  Synopsis:    outline ()
X *
X *  Globals:     outptr  (r)
X *               outlin  (r)
X *
X *  Calls:       printf  (libc)
X *
X *  Called by:   plot  (plot.c)
X */
Xoutline ()
X{
X    int     i;
X
X    for (i = 0; i < (outptr / BYTESIZE); i++)
X        printf ("%c", outlin[i]);
X    printf ("\n");
X}
/
echo 'x - src/addpiece.c'
sed 's/^X//' > src/addpiece.c << '/'
X
X/*
X *  File:        addpiece.c
X *
X *  Sccs-id:     @(#)addpiece.c  1.4  85/03/24
X *
X *  Description: This file contains the one routine addpiece which
X *               adds to the obscured list the rectangles that are currently
X *               unobscured (i.e. that only have one layer), but that will
X *               be obscured by the new layer
X *
X *  Author:      Simon Kenyon.
X *
X *  History:     SCK  1.1  83/10/03  Created.
X *               SCK  1.2  84/11/29  Made it work.
X *               SCK  1.3  85/02/27  Tidied up for release.
X *               SCK  1.4  85/03/24  Changed the include files around.
X */
X
X#include "../h/layers.h"
X
X/*
X *  Name:        addpiece
X *
X *  Description: Add to the obscured list the rectangles that are currently
X *               unobscured (i.e. that only have one layer), but that will
X *               be obscured by the new layer
X *
X *  Synopsis:    addpiece (lp, r, bp, op, flp, p2, p3, p4)
X *               struct Layer   *lp;
X *               struct Rectangle    r;
X *               struct Bitmap  *bp;
X *               struct Obscured *op;
X *               struct Layer   *flp;
X *               int    *p2;
X *               int    *p3;
X *               int    *p4;
X *
X *  Globals:     None.
X *
X *  Calls:       addrect  (addrect.c)
X *
X *  Called by:   newlayer  (newlayer.c)
X */
Xaddpiece (lp, r, bp, op, flp, p2, p3, p4)
Xstruct Layer   *lp;
Xstruct Rectangle    r;
Xstruct Bitmap  *bp;
Xstruct Obscured *op;
Xstruct Layer   *flp;
Xint    *p2;                            /* unused */
Xint    *p3;                            /* unused */
Xint    *p4;                            /* unused */
X{
X    if (op == NULL)                    /* this piece is occupied by only one
X                                          layer */
X        (void) addrect (r, flp);
X /*
X  * otherwise it's already in obs list
X  */
X}
/
echo 'x - src/background.c'
sed 's/^X//' > src/background.c << '/'
X
X/*
X *  File:        background.c
X *
X *  Sccs-id:     @(#)background.c  1.4  85/03/24
X *
X *  Description: This file contains the one function background which
X *               paints rectangle rect of the display bitmap
X *               the background colour.
X *
X *  Author:      Simon Kenyon.
X *
X *  History:     SCK  1.1  83/10/03  Created.
X *               SCK  1.2  84/11/29  Made it work.
X *               SCK  1.3  85/03/04  Tidied up for release.
X *               SCK  1.4  85/03/24  Changed the include files around.
X */
X
X#include "../h/layers.h"
X
Xextern struct Bitmap   *display;
X
Xunsigned short  bght[] = {             /* background halftone bitmap */
X    0x8888, 0x0000, 0x2222, 0x0000,
X    0x8888, 0x0000, 0x2222, 0x0000,
X    0x8888, 0x0000, 0x2222, 0x0000,
X    0x8888, 0x0000, 0x2222, 0x0000
X};
Xstruct Bitmap   back = {
X    bght, 1, {{
X            0, 0
X    }, {
X        WORDSIZE, WORDSIZE
X    }
X    }, 0
X};
X
X/*
X *  Name:        background
X *
X *  Description: Paint rectangle rect of the display bitmap
X *               the background colour.
X *
X *  Synopsis:    background (rect)
X *               struct Rectangle    rect;
X *
X *  Globals:     display  (r/w)
X *               back     (r)
X *
X *  Calls:       bitblt  (bitblt.c)
X *
X *  Called by:   dellayer  (dellayer.c)
X */
Xbackground (rect)
Xstruct Rectangle    rect;
X{
X    (void) bitblt (NULL, rect, display, rect.origin, &back, S);
X}
/
echo 'x - src/bfree.c'
sed 's/^X//' > src/bfree.c << '/'
X
X/*
X *  File:        bfree.c
X *
X *  Sccs-id:     @(#)bfree.c  1.4  85/03/24
X *
X *  Description: This file contains the one routine bfree which
X *               frees the storage used by bitmap b.
X *
X *  Author:      Simon Kenyon.
X *
X *  History:     SCK  1.1  83/10/03  Created.
X *               SCK  1.2  84/11/29  Made it work.
X *               SCK  1.3  85/03/04  Tidied up for release.
X *               SCK  1.4  85/03/24  Changed the include files around.
X */
X
X#include "../h/layers.h"
X
X/*
X *  Name:        bfree
X *
X *  Description: Free the storage used by bitmap b.
X *
X *  Synopsis:    bfree (b)
X *               struct Bitmap  *b;
X *
X *  Globals:     None.
X *
X *  Calls:       free  (libc)
X *
X *  Called by:   newlayer  (newlayer.c)
X *               dellayer  (dellayer.c)
X */
Xbfree (b)
Xstruct Bitmap  *b;
X{
X /*
X  * return storage for bitmap b from whence it came
X  */
X    free ((char *) b -> base);
X    free ((char *) b);
X}
/
echo 'x - src/intersection.c'
sed 's/^X//' > src/intersection.c << '/'
X
X/*
X *  File:        intersection.c
X *
X *  Sccs-id:     @(#)intersection.c  1.5  85/03/24
X *
X *  Description: This file contains the one function intersect which
X *               calculates the intersection of the two rectangles r and s.
X *
X *  Author:      Simon Kenyon.
X *
X *  History:     SCK  1.1  83/10/03  Created.
X *               SCK  1.2  84/11/29  Made it work.
X *               SCK  1.3  85/03/04  Tidied up for release.
X *               SCK  1.4  85/03/22  Moved min and max definitions
X *                                   from defines.h to here.
X *               SCK  1.5  85/03/24  Changed the include files around.
X */
X
X#include "../h/layers.h"
X
X#define min(a, b) ((a) < (b) ? (a) : (b))
X#define max(a, b) ((a) > (b) ? (a) : (b))
X
X/*
X *  Name:        intersection
X *
X *  Description: Calculate the intersection of the two rectangles r and s.
X *
X *  Synopsis:    struct Rectangle    intersection (r, s)
X *               struct Rectangle    r;
X *               struct Rectangle    s;
X *
X *  Globals:     None.
X *
X *  Calls:       Nothing.
X *
X *  Called by:   layerop  (layerop.c)
X */
Xstruct Rectangle    intersection (r, s)
Xstruct Rectangle    r;
Xstruct Rectangle    s;
X{
X    struct Rectangle    t;
X
X    t.origin.x = max (r.origin.x, s.origin.x);
X    t.origin.y = max (r.origin.y, s.origin.y);
X    t.corner.x = min (r.corner.x, s.corner.x);
X    t.corner.y = min (r.corner.y, s.corner.y);
X    return (t);
X}
/
echo 'x - src/lbblt.c'
sed 's/^X//' > src/lbblt.c << '/'
X
X/*
X *  File:        lbblt.c
X *
X *  Sccs-id:     @(#)lbblt.c  1.4  85/03/24
X *
X *  Description: This file contains the one function LBblt which
X *               given a layer l, a rectangle r, a bitmap db, a bitmap sb,
X *               a function code f and an obscured list o, bitblts using
X *               the function code f, the rectangular area r from sb into db.
X *
X *  Author:      Simon Kenyon.
X *
X *  History:     SCK  1.1  83/10/03  Created.
X *               SCK  1.2  84/12/10  Made it work.
X *               SCK  1.3  85/02/22  Tidied up for release.
X *               SCK  1.4  85/03/24  Changed the include files around.
X */
X
X#include "../h/layers.h"
X
X/*
X *  Name:        LBblt
X *
X *  Description: Given a layer l, a rectangle r, a bitmap db, a bitmap sb,
X *               a function code f and an obscured list o, bitblt using
X *               the function code f, the rectangular area r from sb into db.
X *
X *  Synopsis:    LBblt (l, r, db, o, sb, hb, dp, f)
X *               struct Layer   *l;
X *               struct Rectangle    r;
X *               struct Bitmap  *db;
X *               struct Obscured *o;
X *               struct Bitmap  *sb;
X *               struct Bitmap  *hb;
X *               struct Point   *dp;
X *               int    *f;
X *
X *  Globals:     None.
X *
X *  Calls:       rsubp   (rsubp.c)
X *               bitblt  (bitblt.c)
X *
X *  Called by:   Rlayerop  (rlayerop.c)
X */
XLBblt (l, r, db, o, sb, hb, dp, f)
Xstruct Layer   *l;
Xstruct Rectangle    r;
Xstruct Bitmap  *db;                    /* destination bitmap */
Xstruct Obscured *o;
Xstruct Bitmap  *sb;                    /* source bitmap */
Xstruct Bitmap  *hb;                    /* halftone bitmap */
Xstruct Point   *dp;
Xint    *f;                             /* function code */
X{
X    struct Rectangle    rsubp ();
X
X    (void) bitblt (sb, rsubp (r, *dp), db, r.origin, hb, *f);
X}
/
echo 'x - src/lblt.c'
sed 's/^X//' > src/lblt.c << '/'
X
X/*
X *  File:        lblt.c
X *
X *  Sccs-id:     @(#)lblt.c  1.4  85/03/24
X *
X *  Description: This file contains the one function lblt, which
X *               provides the bitblt function between and off-screen
X *               bitmap and a layer.
X *
X *  Author:      Simon Kenyon.
X *
X *  History:     SCK  1.1  83/10/03  Created.
X *               SCK  1.2  84/11/29  Made it work.
X *               SCK  1.3  85/03/04  Tidied up for release.
X *               SCK  1.4  85/03/24  Changed the include files around.
X */
X
X#include "../h/layers.h"
X
X/*
X *  Name:        lblt
X *
X *  Description: Given a layer l, a bitmap sb, a rectangle r
X *               and a function code f, copy the off-screen bitmap sb
X *               to a rectangle r within layer l, using the function code f.
X *
X *  Synopsis:    lblt (l, sb, r, hb, pt, f)
X *               struct Layer   *l;
X *               struct Bitmap  *sb;
X *               struct Rectangle    r;
X *               struct Bitmap  *hb;
X *               struct Point    pt;
X *               int     f;
X *
X *  Globals:     LBblt ()
X *
X *  Calls:       layerop  (layerop.c)
X *               raddp    (raddp.c)
X *
X *  Called by:   This is a top-level function.
X *               lbitblt  (lbitblt.c)
X */
Xlblt (l, sb, r, hb, pt, f)
Xstruct Layer   *l;
Xstruct Bitmap  *sb;
Xstruct Rectangle    r;
Xstruct Bitmap  *hb;
Xstruct Point    pt;
Xint     f;
X{
X    struct Point    dp;
X
X    int     LBblt ();
X    struct Rectangle    raddp ();
X
X    dp.x = pt.x - r.origin.x;
X    dp.y = pt.y - r.origin.y;
X    (void) layerop (l, LBblt, raddp (r, dp), sb, hb, &dp, &f);
X}
/
echo 'x - src/lessthan.c'
sed 's/^X//' > src/lessthan.c << '/'
X
X/*
X *  File:        lessthan.c
X *
X *  Sccs-id:     @(#)lessthan.c  1.4  85/03/24
X *
X *  Description: This file contains the one routine lessthan which
X *               defines an ordering on the rectangles a and b,
X *               so that bitblt will be called by lbitblt
X *               in the correct order.
X *
X *  Author:      Simon Kenyon.
X *
X *  History:     SCK  1.1  83/10/03  Created.
X *               SCK  1.2  84/11/29  Made it work.
X *               SCK  1.3  85/03/04  Tidied up for release.
X *               SCK  1.4  85/03/24  Changed the include files around.
X */
X
X#include "../h/layers.h"
X
Xextern struct Point delta;
X
X/*
X *  Name:        lessthan
X *
X *  Description: Define an ordering on the rectangles a and b,
X *               so that bitblt will be called by lbitblt
X *               in the correct order.
X *
X *  Synopsis:    boolean lessthan (a, b)
X *               struct Rectangle    a;
X *               struct Rectangle    b;
X *
X *  Globals:     delta  (r)
X *
X *  Calls:       Nothing.
X *
X *  Called by:   Pass  (pass.c)
X */
Xboolean lessthan (a, b)
Xstruct Rectangle    a;
Xstruct Rectangle    b;
X{
X    if ((a.origin.y < b.corner.y) && (b.origin.y < a.corner.y))
X        return (((a.origin.x - b.origin.x) * delta.x) >= 0);
X    else
X        return (((a.origin.y - b.origin.y) * delta.y) >= 0);
X}
/
echo 'x - src/raddp.c'
sed 's/^X//' > src/raddp.c << '/'
X
X/*
X *  File:        raddp.c
X *
X *  Sccs-id:     @(#)raddp.c  1.4  85/03/24
X *
X *  Description: This file contains the one function raddp which
X *               given a point p and a rectangle r, adds the point
X *               to the origin of the rectangle.
X *
X *  Author:      Simon Kenyon.
X *
X *  History:     SCK  1.1  83/10/03  Created.
X *               SCK  1.2  84/11/29  Made it work.
X *               SCK  1.3  85/03/04  Tidied up for release.
X *               SCK  1.4  85/03/24  Changed the include files around.
X */
X
X#include "../h/layers.h"
X
X/*
X *  Name:        raddp
X *
X *  Description: Given a point p and a rectangle r, add the point
X *               to the origin of the rectangle.
X *
X *  Synopsis:    struct Rectangle    raddp (r, p)
X *               struct Rectangle    r;
X *               struct Point    p;
X *
X *  Globals:     None.
X *
X *  Calls:       Nothing.
X *
X *  Called by:   lblt  (lblt.c)
X */
Xstruct Rectangle    raddp (r, p)
Xstruct Rectangle    r;
Xstruct Point    p;
X{
X /*
X  * add p to r
X  */
X    r.origin.x += p.x;
X    r.origin.y += p.y;
X    r.corner.x += p.x;
X    r.corner.y += p.y;
X    return (r);
X}
/
echo 'x - src/rectf.c'
sed 's/^X//' > src/rectf.c << '/'
X
X/*
X *  File:        rectf.c
X *
X *  Sccs-id:     @(#)rectf.c  1.5  85/03/24
X *
X *  Description: This file contains the one function rectf which
X *               performs the function specified by integer code f,
X *               in a rectangle r, in a bitmap b.
X *
X *  Author:      Simon Kenyon.
X *
X *  History:     SCK  1.1  83/10/03  Created.
X *               SCK  1.2  84/11/29  Made it work.
X *               SCK  1.3  85/03/04  Tidied up for release.
X *               SCK  1.4  85/03/21  Added STORE after reading
X *                                   Rob's latest paper.
X *               SCK  1.5  85/03/24  Changed the include files around.
X */
X
X#include "../h/layers.h"
X
X/*
X *  Name:        rectf
X *
X *  Description: Perform the function specified by integer code f,
X *               in a rectangle r, in a bitmap b.
X *
X *  Synopsis:    rectf (b, r, f)
X *               struct Bitmap  *b;
X *               struct Rectangle    r;
X *               int     f;
X *
X *  Globals:     None.
X *
X *  Calls:       bitblt   (bitblt.c)
X *
X *  Called by:   newlayer  (newlayer.c)
X */
Xrectf (b, r, f)
Xstruct Bitmap  *b;
Xstruct Rectangle    r;
Xint     f;
X{
X    switch (f) {
X        case CLR:
X        /*
X         * clear r to zeros
X         */
X            (void) bitblt (NULL, r, b, r.origin, NULL, ALL_ZEROS);
X            break;
X        case OR:
X        case STORE:
X        /*
X         * set r to ones
X         */
X            (void) bitblt (NULL, r, b, r.origin, NULL, ALL_ONES);
X            break;
X        case XOR:
X        /*
X         * invert bits in r
X         */
X            (void) bitblt (NULL, r, b, r.origin, NULL, ND);
X            break;
X    }
X}
/
echo 'x - src/rectxrect.c'
sed 's/^X//' > src/rectxrect.c << '/'
X
X/*
X *  File:        rectxrect.c
X *
X *  Sccs-id:     @(#)rectxrect.c  1.4  85/03/24
X *
X *  Description: This file contains the one function rectXrect which
X *               tests to see if the two rectangles r and s intersect.
X *
X *  Author:      Simon Kenyon.
X *
X *  History:     SCK  1.1  83/10/03  Created.
X *               SCK  1.2  84/11/29  Made it work.
X *               SCK  1.3  85/03/04  Tidied up for release.
X *               SCK  1.4  85/03/24  Changed the include files around.
X */
X
X#include "../h/layers.h"
X
X/*
X *  Name:        rectXrect
X *
X *  Description: Test to see if the two rectangles r and s intersect.
X *
X *  Synopsis:    boolean rectXrect (r, s)
X *               struct Rectangle    r;
X *               struct Rectangle    s;
X *
X *  Globals:     None.
X *
X *  Calls:       Nothing.
X *
X *  Called by:   newlayer  (newlayer.c)
X *               addobs    (addobs.c)
X *               layerop   (layerop.c)
X *               Rlayerop  (Rlayerop.c)
X *               upfront   (upfront.c)
X */
Xboolean rectXrect (r, s)
Xstruct Rectangle    r;
Xstruct Rectangle    s;
X{
X    return ((r.origin.x < s.corner.x) &&
X            (s.origin.x < r.corner.x) &&
X            (r.origin.y < s.corner.y) &&
X            (s.origin.y < r.corner.y));
X}
/
echo 'x - src/rsubp.c'
sed 's/^X//' > src/rsubp.c << '/'
X
X/*
X *  File:        rsubp.c
X *
X *  Sccs-id:     @(#)rsubp.c  1.4  85/03/24
X *
X *  Description: This file contains the one function rsubp which
X *               given a point p and a rectangle r, subtracts the point
X *               from the origin of the rectangle.
X *
X *  Author:      Simon Kenyon.
X *
X *  History:     SCK  1.1  83/10/03  Created.
X *               SCK  1.2  84/11/29  Made it work.
X *               SCK  1.3  85/03/04  Tidied up for release.
X *               SCK  1.4  85/03/24  Changed the include files around.
X */
X
X#include "../h/layers.h"
X
X/*
X *  Name:        rsubp
X *
X *  Description: Given a point p and a rectangle r, subtract the point
X *               from the origin of the rectangle.
X *
X *  Synopsis:    struct Rectangle    rsubp (r, p)
X *               struct Rectangle    r;
X *               struct Point    p;
X *
X *  Globals:     None.
X *
X *  Calls:       Nothing.
X *
X *  Called by:   LBblt  (lbblt.c)
X */
Xstruct Rectangle    rsubp (r, p)
Xstruct Rectangle    r;
Xstruct Point    p;
X{
X /*
X  * subtract p from r
X  */
X    r.origin.x -= p.x;
X    r.origin.y -= p.y;
X    r.corner.x -= p.x;
X    r.corner.y -= p.y;
X    return (r);
X}
/
echo 'x - src/screenswap.c'
sed 's/^X//' > src/screenswap.c << '/'
X
X/*
X *  File:        screenswap.c
X *
X *  Sccs-id:     @(#)screenswap.c  1.4  85/03/24
X *
X *  Description: This file contains the one function screenswap which
X *               interchanges the data in the bitmap b with the contents
X *               of the rectangle r on the screen.
X *
X *  Author:      Simon Kenyon.
X *
X *  History:     SCK  1.1  83/10/03  Created.
X *               SCK  1.2  84/11/29  Made it work.
X *               SCK  1.3  85/03/04  Tidied up for release.
X *               SCK  1.4  85/03/24  Changed the include files around.
X */
X
X#include "../h/layers.h"
X
Xextern struct Bitmap   *display;
X
X/*
X *  Name:        screenswap
X *
X *  Description: Interchange the data in the bitmap b with the contents
X *               of the rectangle r on the screen.
X *
X *  Synopsis:    screenswap (b, r)
X *               struct Bitmap  *b;
X *               struct Rectangle    r;
X *
X *  Globals:     display  (r/w)
X *
X *  Calls:       bitblt  (bitblt.c)
X *
X *  Called by:   upfront  (upfront.c)
X */
Xscreenswap (b, r)
Xstruct Bitmap  *b;
Xstruct Rectangle    r;
X{
X /*
X  * implemented, without auxialiary storage, using three
X  * calls to bitblt() with function code XOR
X  */
X    (void) bitblt (display, r, b, r.origin, NULL, S_XOR_D);
X    (void) bitblt (b, r, display, r.origin, NULL, S_XOR_D);
X    (void) bitblt (display, r, b, r.origin, NULL, S_XOR_D);
X}
/
echo 'Part 04 of jerq layers code complete.'
exit



More information about the Comp.sources.unix mailing list