Annotation of researchv10dc/630/man/src/p_man/man3/screenswap.3r, revision 1.1

1.1     ! root        1: .ds ZZ DEVELOPMENT PACKAGE
        !             2: .TH SCREENSWAP 3R "630 MTG"
        !             3: .XE "screenswap()"
        !             4: .SH NAME  
        !             5: screenswap \- swap screen Rectangle and Bitmap
        !             6: .SH SYNOPSIS
        !             7: .ft B
        !             8: #include <dmd.h>
        !             9: .sp
        !            10: void screenswap (b, r, s) 
        !            11: .br
        !            12: Bitmap \(**b;
        !            13: .br 
        !            14: Rectangle r, s; 
        !            15: .SH DESCRIPTION
        !            16: The
        !            17: .I screenswap
        !            18: function
        !            19: does an in-place exchange of the Rectangle
        !            20: .I r
        !            21: within the Bitmap
        !            22: .I b
        !            23: and screen rectangle
        !            24: .IR s.
        !            25: This exchange is done by \fIbitblt\fR'ing the bitmaps back and forth
        !            26: three times in XOR mode. This technique allows bitmaps to be exchanged
        !            27: without need for intermediate storage.
        !            28: .PP
        !            29: The action of screenswap is undefined, if
        !            30: .I r
        !            31: and
        !            32: .I s
        !            33: are not the same size.
        !            34: .PP
        !            35: .I Screenswap
        !            36: writes to the
        !            37: .I physical
        !            38: bitmap, so the
        !            39: .I s
        !            40: argument
        !            41: is clipped to the screen,
        !            42: not to the window's rectangle (display.rect).
        !            43: .SH EXAMPLE
        !            44: The following program floats a picture of a sailboat
        !            45: across the screen.
        !            46: .PP
        !            47: The 630 MTG mouse cursor is painted in XOR mode and therefore
        !            48: changes to inverse video when it moves over highlighted areas. This sailboat,
        !            49: however, does not inverse video when it moves over parts of the
        !            50: screen that are highlighted. This is accomplished by saving
        !            51: whatever is on the screen in the spot where the sailboat is currently
        !            52: painted and restoring the screen when the sailboat moves. The unique
        !            53: aspect of this is that the same physical memory is used to alternately
        !            54: store the picture of the sailboat and the saved screen rectangle, and
        !            55: these two bitmaps are swapped without use of intermediate storage.
        !            56: .PP
        !            57: .RS 3
        !            58: .nf
        !            59: .ft CM
        !            60: #include <dmd.h>
        !            61: 
        !            62: unsigned short sailicon[] = {
        !            63:        0xFDFF, 0xF9FF, 0xF1FF, 0xE0FF,
        !            64:        0xFD7F, 0xF9BF, 0xF5DF, 0xEDEF,
        !            65:        0xDDF7, 0xDDF7, 0xBDFB, 0xB8FB,
        !            66:        0x0000, 0x8003, 0xE007, 0xFFFF,
        !            67: };
        !            68: 
        !            69: Bitmap sailmap = {
        !            70:        (Word *)sailicon,
        !            71:        1,
        !            72:        (short)0, (short)0, (short)16, (short)16,
        !            73:        (char *)0
        !            74: };
        !            75: 
        !            76: extern Rectangle fRpt();
        !            77: extern Rectangle raddp();
        !            78: 
        !            79: main()
        !            80: {
        !            81:        Rectangle r;
        !            82: 
        !            83:        r = fRpt(0, YMAX/2-8, 16, YMAX/2+8);
        !            84: 
        !            85:        /* put the sailboat onto the screen */
        !            86:        screenswap(&sailmap, sailmap.rect, r);
        !            87: 
        !            88:        /* move the sailboat across the screen */
        !            89:        while(r.corner.x <= YMAX) {
        !            90:                sleep(3);
        !            91:                screenswap(&sailmap, sailmap.rect, r);
        !            92:                r = raddp(r, Pt(1,0));
        !            93:                screenswap(&sailmap, sailmap.rect, r);
        !            94:        }
        !            95: 
        !            96:        /* remove the sailboat for the last time */
        !            97:        screenswap(&sailmap, sailmap.rect, r);
        !            98: }
        !            99: \fR
        !           100: .fi
        !           101: .RE
        !           102: .PP
        !           103: This example is very similar to how message boxes are implemented.
        !           104: Message boxes are rectangles containing messages which float
        !           105: around the screen when the mouse moves.
        !           106: .SH SEE ALSO
        !           107: bitblt(3R), msgbox(3R).

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.