home *** CD-ROM | disk | FTP | other *** search
- /*
- pcramcpp.c
-
- % Pixmap copy function, extracted from pcramcpy.c
-
- 10/19/88 by Ted.
-
- OWL 1.1
- Copyright (c) 1988, by Oakland Group, Inc.
- ALL RIGHTS RESERVED.
-
- Revision History:
- -----------------
- 7/14/89 ted Installed pcdata-> ilmask, ilsize, vbincr.
- */
-
- #include "pcpriv.h"
-
- /* -------------------------------------------------------------------------- */
-
- void DIGPRIV ram_copypm(scrboxp, pmap, pmx, pmy, copy)
- opbox *scrboxp;
- pmap_type pmap;
- opcoord pmx, pmy;
- ramcopy_fptr copy;
- /*
- Does actual copying between pixmap and display, assuming all clipping is
- taken care of.
- */
- {
- unsigned short bwidth, pmbwidth, pmoffs, vidpos;
- byte *pmpos;
-
- bwidth = opbox_GetWidth(scrboxp) * pc_pixbits() / 8;
-
- pmbwidth = pcpmap_bytewidth(pmap);
- pmoffs = pmy * pmbwidth + (pmx * pcpmap_pixbits(pmap) / 8);
-
- vidpos = (scrboxp->ymin & pcdata->ilmask) * pcdata->ilsize +
- (scrboxp->ymin >> pc_ileave()) * pc_bwidth() +
- scrboxp->xmin * pc_pixbits() / 8;
-
- if (pc_nplanes() == 1) {
- pmpos = pcpmap_pixbuf(pmap) + pmoffs;
- for (;;) {
- (*copy)(pc_vidseg(), vidpos, pmpos, bwidth);
-
- if (opbox_GetHeight(scrboxp) <= 1) {
- break;
- }
- scrboxp->ymin += 1;
- pmpos += pmbwidth;
-
- vidpos += ((scrboxp->ymin & pcdata->ilmask) == 0) ? pcdata->vbincr:
- pcdata->ilsize;
- }
- }
- else {
- for (;;) {
- (*((ramplanecopy_fptr) copy))
- (pc_vidseg(), vidpos, pcpmap_pixbuf(pmap), bwidth, pmoffs);
-
- if (opbox_GetHeight(scrboxp) <= 1) {
- break;
- }
- scrboxp->ymin += 1;
- pmoffs += pmbwidth;
-
- vidpos += ((scrboxp->ymin & pcdata->ilmask) == 0) ? pcdata->vbincr:
- pcdata->ilsize;
- }
- }
- }
- /* -------------------------------------------------------------------------- */
-
-