/*************************************************************************\ * Module Name: engstrps.cxx * * Strip drawing for bitmap simulation * * Created: 5-Apr-91 * Author: Paul Butzi * * Copyright (c) 1990-1999 Microsoft Corporation \**************************************************************************/ #include "precomp.hxx" #include "engline.hxx" /******************************Public*Routine******************************\ * VOID vStripSolidHorizontal(pstrip, pbmi, pls) * * Draws a near-horizontal line left to right. * * History: * 22-Feb-1992 -by- J. Andrew Goossen [andrewgo] * Changed a couple of things. * * 5-Apr-1991 -by- Paul Butzi [paulb] * Wrote it. \**************************************************************************/ VOID vStripSolidHorizontal( STRIP* pstrip, // Indicates which pixels to light BMINFO* pbmi, // Data and masks for bitmap format LINESTATE* pls) // Color and style state info about line { ASSERTGDI(pstrip->cStrips > 0, "Non-positive count"); LONG* plEnd = &pstrip->alStrips[pstrip->cStrips]; LONG* pl = &pstrip->alStrips[0]; LONG iPixel = pstrip->iPixel; LONG cjDelta = pstrip->lDelta * (LONG)sizeof(CHUNK); if (pstrip->flFlips & FL_FLIP_V) cjDelta = -cjDelta; register CHUNK chAnd = pls->chAnd; register CHUNK chXor = pls->chXor; register CHUNK* pchScreen = pstrip->pchScreen; register ULONG cChunks; register CHUNK maskEnd; register CHUNK maskStart = pbmi->pamask[iPixel]; do { iPixel += *pl; cChunks = iPixel >> pbmi->cShift; iPixel &= pbmi->maskPixel; maskEnd = ~(pbmi->pamask[iPixel]); if (cChunks == 0) { MASK mask = maskEnd & maskStart; *pchScreen = (*pchScreen & (chAnd | ~mask)) ^ (chXor & mask); } else { *pchScreen = (*pchScreen & (chAnd | ~maskStart)) ^ (chXor & maskStart); pchScreen++; for (; cChunks > 1; cChunks--) { *pchScreen = (*pchScreen & chAnd) ^ chXor; pchScreen++; } if (maskEnd != 0) { *pchScreen = (*pchScreen & (chAnd | ~maskEnd)) ^ (chXor & maskEnd); } } // Done with strip, make side step: maskStart = ~maskEnd; pchScreen = (CHUNK*) ((BYTE*) pchScreen + cjDelta); } while (++pl < plEnd); pstrip->iPixel = iPixel; pstrip->pchScreen = pchScreen; } /******************************Public*Routine******************************\ * VOID vStripSolidVertical(pstrip, pbmi, pls) * * Draws a near-vertical line left to right. * * History: * 22-Feb-1992 -by- J. Andrew Goossen [andrewgo] * Changed a couple of things. * * 5-Apr-1991 -by- Paul Butzi [paulb] * Wrote it. \**************************************************************************/ VOID vStripSolidVertical( STRIP* pstrip, // Indicates which pixels to light BMINFO* pbmi, // Data and masks for bitmap format LINESTATE* pls) // Color and style state info about line { ASSERTGDI(pstrip->cStrips > 0, "Non-positive count"); LONG* plEnd = &pstrip->alStrips[pstrip->cStrips]; LONG* pl = &pstrip->alStrips[0]; LONG cjDelta = pstrip->lDelta * (LONG)sizeof(CHUNK); if (pstrip->flFlips & FL_FLIP_V) cjDelta = -cjDelta; LONG iPixel = pstrip->iPixel; CHUNK* pchScreen = pstrip->pchScreen; CHUNK chXor = pls->chXor; CHUNK chAnd = pls->chAnd; do { // Paint strip: MASK maskXor = chXor & pbmi->pamaskPel[iPixel]; MASK maskAnd = chAnd | ~pbmi->pamaskPel[iPixel]; LONG c = *pl; do { *pchScreen = (*pchScreen & maskAnd) ^ maskXor; pchScreen = (CHUNK*) ((BYTE*) pchScreen + cjDelta); } while (--c != 0); // Done with strip, make side step and recompute masks: iPixel++; pchScreen += (iPixel >> pbmi->cShift); iPixel &= pbmi->maskPixel; } while (++pl < plEnd); pstrip->iPixel = iPixel; pstrip->pchScreen = pchScreen; } /******************************Public*Routine******************************\ * VOID vStripSolidDiagonal(pstrip, pbmi, pls) * * Draws a near-diagonal line left to right. * * History: * 11-May-1992 -by- J. Andrew Goossen [andrewgo] * Wrote it. \**************************************************************************/ VOID vStripSolidDiagonal( STRIP* pstrip, // Indicates which pixels to light BMINFO* pbmi, // Data and masks for bitmap format LINESTATE* pls) // Color and style state info about line { ASSERTGDI(pstrip->cStrips > 0, "Non-positive count"); LONG* plEnd = &pstrip->alStrips[pstrip->cStrips]; LONG* pl = &pstrip->alStrips[0]; LONG cjDelta = pstrip->lDelta * (LONG)sizeof(CHUNK); if (pstrip->flFlips & FL_FLIP_V) cjDelta = -cjDelta; LONG iPixel = pstrip->iPixel; CHUNK* pchScreen = pstrip->pchScreen; CHUNK chXor = pls->chXor; CHUNK chAnd = pls->chAnd; do { // Paint strip: register LONG c = *pl; while (TRUE) { MASK maskXor = chXor & pbmi->pamaskPel[iPixel]; MASK maskAnd = chAnd | ~pbmi->pamaskPel[iPixel]; *pchScreen = (*pchScreen & maskAnd) ^ maskXor; if (--c == 0) break; iPixel++; pchScreen += (iPixel >> pbmi->cShift); iPixel &= pbmi->maskPixel; pchScreen = (CHUNK*) ((BYTE*) pchScreen + cjDelta); } // Do a side step: if (pstrip->flFlips & FL_FLIP_D) pchScreen = (CHUNK*) ((BYTE*) pchScreen + cjDelta); else { iPixel++; pchScreen += (iPixel >> pbmi->cShift); iPixel &= pbmi->maskPixel; } } while (++pl < plEnd); pstrip->iPixel = iPixel; pstrip->pchScreen = pchScreen; } /******************************Public*Routine******************************\ * VOID vStripStyledHorizontal(pstrip, pbmi, pls) * * Draws a styled near-horizontal line left to right. * * History: * 22-Feb-1992 -by- J. Andrew Goossen [andrewgo] * Wrote it. \**************************************************************************/ VOID vStripStyledHorizontal( STRIP* pstrip, // Indicates which pixels to light BMINFO* pbmi, // Data and masks for bitmap format LINESTATE* pls) // Color and style state info about line { ASSERTGDI(pstrip->cStrips > 0, "Non-positive count"); LONG* plEnd = &pstrip->alStrips[pstrip->cStrips]; LONG* pl = &pstrip->alStrips[0]; LONG iPixel = pstrip->iPixel; LONG cjDelta = pstrip->lDelta * (LONG)sizeof(CHUNK); if (pstrip->flFlips & FL_FLIP_V) cjDelta = -cjDelta; CHUNK* pchScreen = pstrip->pchScreen; CHUNK chAnd = pls->chAnd; CHUNK chXor = pls->chXor; BOOL bIsGap = pls->bIsGap; STYLEPOS spRemaining = pls->spRemaining; do { LONG ll = *pl; do { if (!bIsGap) { MASK maskXor = chXor & pbmi->pamaskPel[iPixel]; MASK maskAnd = chAnd | ~pbmi->pamaskPel[iPixel]; *pchScreen = (*pchScreen & maskAnd) ^ maskXor; } iPixel++; pchScreen += iPixel >> pbmi->cShift; iPixel &= pbmi->maskPixel; spRemaining -= pls->ulStepRun; if (spRemaining <= 0) { if (++pls->psp > pls->pspEnd) pls->psp = pls->pspStart; spRemaining += *pls->psp; bIsGap = !bIsGap; } } while (--ll != 0); // Done with strip, make side step: pchScreen = (CHUNK*) ((BYTE*) pchScreen + cjDelta); spRemaining -= pls->ulStepSide; if (spRemaining <= 0) { if (++pls->psp > pls->pspEnd) pls->psp = pls->pspStart; spRemaining += *pls->psp; bIsGap = !bIsGap; } } while (++pl != plEnd); pstrip->iPixel = iPixel; pstrip->pchScreen = pchScreen; pls->bIsGap = bIsGap; pls->spRemaining = spRemaining; } /******************************Public*Routine******************************\ * VOID vStripStyledVertical(pstrip, pbmi, pls) * * Draws a styled near-vertical line left to right. * * History: * 22-Feb-1992 -by- J. Andrew Goossen [andrewgo] * Wrote it. \**************************************************************************/ VOID vStripStyledVertical( STRIP* pstrip, // Indicates which pixels to light BMINFO* pbmi, // Data and masks for bitmap format LINESTATE* pls) // Color and style state info about line { ASSERTGDI(pstrip->cStrips > 0, "Non-positive count"); LONG* plEnd = &pstrip->alStrips[pstrip->cStrips]; LONG* pl = &pstrip->alStrips[0]; LONG cjDelta = pstrip->lDelta * (LONG)sizeof(CHUNK); if (pstrip->flFlips & FL_FLIP_V) cjDelta = -cjDelta; LONG iPixel = pstrip->iPixel; CHUNK* pchScreen = pstrip->pchScreen; CHUNK chXor = pls->chXor; CHUNK chAnd = pls->chAnd; BOOL bIsGap = pls->bIsGap; STYLEPOS spRemaining = pls->spRemaining; do { // Paint strip: MASK maskXor = chXor & pbmi->pamaskPel[iPixel]; MASK maskAnd = chAnd | ~pbmi->pamaskPel[iPixel]; LONG c = *pl; do { if (!bIsGap) *pchScreen = (*pchScreen & maskAnd) ^ maskXor; pchScreen = (CHUNK*) ((BYTE*) pchScreen + cjDelta); spRemaining -= pls->ulStepRun; if (spRemaining <= 0) { if (++pls->psp > pls->pspEnd) pls->psp = pls->pspStart; spRemaining += *pls->psp; bIsGap = !bIsGap; } } while (--c != 0); // Done with strip, make side step and recompute masks: iPixel++; pchScreen += (iPixel >> pbmi->cShift); iPixel &= pbmi->maskPixel; spRemaining -= pls->ulStepSide; if (spRemaining <= 0) { if (++pls->psp > pls->pspEnd) pls->psp = pls->pspStart; spRemaining += *pls->psp; bIsGap = !bIsGap; } } while (++pl < plEnd); pstrip->iPixel = iPixel; pstrip->pchScreen = pchScreen; pls->bIsGap = bIsGap; pls->spRemaining = spRemaining; } /******************************Public*Routine******************************\ * VOID vStripStyledDiagonal(pstrip, pbmi, pls) * * Draws a styled near-diagonal line left to right. * * History: * 22-Feb-1992 -by- J. Andrew Goossen [andrewgo] * Wrote it. \**************************************************************************/ VOID vStripStyledDiagonal( STRIP* pstrip, // Indicates which pixels to light BMINFO* pbmi, // Data and masks for bitmap format LINESTATE* pls) // Color and style state info about line { ASSERTGDI(pstrip->cStrips > 0, "Non-positive count"); LONG* plEnd = &pstrip->alStrips[pstrip->cStrips]; LONG* pl = &pstrip->alStrips[0]; LONG cjDelta = pstrip->lDelta * (LONG)sizeof(CHUNK); if (pstrip->flFlips & FL_FLIP_V) cjDelta = -cjDelta; LONG iPixel = pstrip->iPixel; CHUNK* pchScreen = pstrip->pchScreen; CHUNK chXor = pls->chXor; CHUNK chAnd = pls->chAnd; BOOL bIsGap = pls->bIsGap; STYLEPOS spRemaining = pls->spRemaining; do { // Paint strip: register LONG c = *pl; while (TRUE) { if (!bIsGap) { MASK maskXor = chXor & pbmi->pamaskPel[iPixel]; MASK maskAnd = chAnd | ~pbmi->pamaskPel[iPixel]; *pchScreen = (*pchScreen & maskAnd) ^ maskXor; } if (--c == 0) break; spRemaining -= pls->ulStepDiag; if (spRemaining <= 0) { if (++pls->psp > pls->pspEnd) pls->psp = pls->pspStart; spRemaining += *pls->psp; bIsGap = !bIsGap; } iPixel++; pchScreen += (iPixel >> pbmi->cShift); iPixel &= pbmi->maskPixel; pchScreen = (CHUNK*) ((BYTE*) pchScreen + cjDelta); } // Do a side step: spRemaining -= pls->ulStepRun; if (spRemaining <= 0) { if (++pls->psp > pls->pspEnd) pls->psp = pls->pspStart; spRemaining += *pls->psp; bIsGap = !bIsGap; } if (pstrip->flFlips & FL_FLIP_D) pchScreen = (CHUNK*) ((BYTE*) pchScreen + cjDelta); else { iPixel++; pchScreen += (iPixel >> pbmi->cShift); iPixel &= pbmi->maskPixel; } } while (++pl < plEnd); pstrip->iPixel = iPixel; pstrip->pchScreen = pchScreen; pls->bIsGap = bIsGap; pls->spRemaining = spRemaining; } /******************************Public*Routine******************************\ * VOID vStripSolidHorizontal24(pstrip, pbmi, pls) * * Draws a 24bpp near-horizontal line left to right. * * If 24bpp line performance is an issue, these routines can be rewritten * to be a lot more complicated but take better advantage of 32-bit moves. * * History: * 4-May-1992 -by- J. Andrew Goossen [andrewgo] * Wrote it. \**************************************************************************/ VOID vStripSolidHorizontal24( STRIP* pstrip, // Indicates which pixels to light BMINFO* pbmi, // Data and masks for bitmap format LINESTATE* pls) // Color and style state info about line { DONTUSE(pbmi); ASSERTGDI(pstrip->cStrips > 0, "Non-positive count"); LONG* plEnd = &pstrip->alStrips[pstrip->cStrips]; LONG* pl = &pstrip->alStrips[0]; LONG cjDelta = pstrip->lDelta * (LONG)sizeof(CHUNK); if (pstrip->flFlips & FL_FLIP_V) cjDelta = -cjDelta; register CHUNK chAnd = pls->chAnd; register CHUNK chXor = pls->chXor; register BYTE* pjScreen = (BYTE*) pstrip->pchScreen; do { LONG c = *pl; do { *(pjScreen++) = (*pjScreen & (BYTE) (chAnd)) ^ (BYTE) (chXor); *(pjScreen++) = (*pjScreen & (BYTE) (chAnd >> 8)) ^ (BYTE) (chXor >> 8); *(pjScreen++) = (*pjScreen & (BYTE) (chAnd >> 16)) ^ (BYTE) (chXor >> 16); } while (--c != 0); pjScreen += cjDelta; } while (++pl < plEnd); pstrip->pchScreen = (CHUNK*) pjScreen; } /******************************Public*Routine******************************\ * VOID vStripSolidVertical24(pstrip, pbmi, pls) * * Draws a 24bpp near-vertical line left to right. * * History: * 4-May-1992 -by- J. Andrew Goossen [andrewgo] * Wrote it. \**************************************************************************/ VOID vStripSolidVertical24( STRIP* pstrip, // Indicates which pixels to light BMINFO* pbmi, // Data and masks for bitmap format LINESTATE* pls) // Color and style state info about line { DONTUSE(pbmi); ASSERTGDI(pstrip->cStrips > 0, "Non-positive count"); LONG* plEnd = &pstrip->alStrips[pstrip->cStrips]; LONG* pl = &pstrip->alStrips[0]; LONG cjDelta = pstrip->lDelta * (LONG)sizeof(CHUNK); if (pstrip->flFlips & FL_FLIP_V) cjDelta = -cjDelta; // Adjust because we always lay out 2 bytes before adding cjDelta: cjDelta -= 2; BYTE* pjScreen = (BYTE*) pstrip->pchScreen; CHUNK chXor = pls->chXor; CHUNK chAnd = pls->chAnd; do { // Paint strip: LONG c = *pl; do { *(pjScreen++) = (*pjScreen & (BYTE) (chAnd)) ^ (BYTE) (chXor); *(pjScreen++) = (*pjScreen & (BYTE) (chAnd >> 8)) ^ (BYTE) (chXor >> 8); *(pjScreen) = (*pjScreen & (BYTE) (chAnd >> 16)) ^ (BYTE) (chXor >> 16); pjScreen += cjDelta; } while (--c != 0); // Done with strip, make side step: pjScreen += 3; } while (++pl < plEnd); pstrip->pchScreen = (CHUNK*) pjScreen; } /******************************Public*Routine******************************\ * VOID vStripSolidDiagonal24(pstrip, pbmi, pls) * * Draws a 24bpp near-diagonal line left to right. * * History: * 4-May-1992 -by- J. Andrew Goossen [andrewgo] * Wrote it. \**************************************************************************/ VOID vStripSolidDiagonal24( STRIP* pstrip, // Indicates which pixels to light BMINFO* pbmi, // Data and masks for bitmap format LINESTATE* pls) // Color and style state info about line { DONTUSE(pbmi); ASSERTGDI(pstrip->cStrips > 0, "Non-positive count"); LONG* plEnd = &pstrip->alStrips[pstrip->cStrips]; LONG* pl = &pstrip->alStrips[0]; LONG cjDelta = pstrip->lDelta * (LONG)sizeof(CHUNK); if (pstrip->flFlips & FL_FLIP_V) cjDelta = -cjDelta; BYTE* pjScreen = (BYTE*) pstrip->pchScreen; CHUNK chXor = pls->chXor; CHUNK chAnd = pls->chAnd; do { // Paint strip: register LONG c = *pl; while (TRUE) { *(pjScreen++) = (*pjScreen & (BYTE) (chAnd)) ^ (BYTE) (chXor); *(pjScreen++) = (*pjScreen & (BYTE) (chAnd >> 8)) ^ (BYTE) (chXor >> 8); *(pjScreen++) = (*pjScreen & (BYTE) (chAnd >> 16)) ^ (BYTE) (chXor >> 16); if (--c == 0) break; pjScreen += cjDelta; } if (pstrip->flFlips & FL_FLIP_D) pjScreen += cjDelta - 3; } while (++pl < plEnd); pstrip->pchScreen = (CHUNK*) pjScreen; } /******************************Public*Routine******************************\ * VOID vStripStyledHorizontal24(pstrip, pbmi, pls) * * Draws a 24bpp styled near-horizontal line left to right. * * History: * 22-Feb-1992 -by- J. Andrew Goossen [andrewgo] * Wrote it. \**************************************************************************/ VOID vStripStyledHorizontal24( STRIP* pstrip, // Indicates which pixels to light BMINFO* pbmi, // Data and masks for bitmap format LINESTATE* pls) // Color and style state info about line { DONTUSE(pbmi); ASSERTGDI(pstrip->cStrips > 0, "Non-positive count"); LONG* plEnd = &pstrip->alStrips[pstrip->cStrips]; LONG* pl = &pstrip->alStrips[0]; LONG cjDelta = pstrip->lDelta * (LONG)sizeof(CHUNK); if (pstrip->flFlips & FL_FLIP_V) cjDelta = -cjDelta; CHUNK chAnd = pls->chAnd; CHUNK chXor = pls->chXor; BOOL bIsGap = pls->bIsGap; STYLEPOS spRemaining = pls->spRemaining; BYTE* pjScreen = (BYTE*) pstrip->pchScreen; do { LONG ll = *pl; do { if (bIsGap) pjScreen += 3; else { *(pjScreen++) = (*pjScreen & (BYTE) (chAnd)) ^ (BYTE) (chXor); *(pjScreen++) = (*pjScreen & (BYTE) (chAnd >> 8)) ^ (BYTE) (chXor >> 8); *(pjScreen++) = (*pjScreen & (BYTE) (chAnd >> 16)) ^ (BYTE) (chXor >> 16); } spRemaining -= pls->ulStepRun; if (spRemaining <= 0) { if (++pls->psp > pls->pspEnd) pls->psp = pls->pspStart; spRemaining += *pls->psp; bIsGap = !bIsGap; } } while (--ll != 0); // Done with strip, make side step: pjScreen += cjDelta; spRemaining -= pls->ulStepSide; if (spRemaining <= 0) { if (++pls->psp > pls->pspEnd) pls->psp = pls->pspStart; spRemaining += *pls->psp; bIsGap = !bIsGap; } } while (++pl != plEnd); pstrip->pchScreen = (CHUNK*) pjScreen; pls->bIsGap = bIsGap; pls->spRemaining = spRemaining; } /******************************Public*Routine******************************\ * VOID vStripStyledVertical24(pstrip, pbmi, pls) * * Draws a 24bpp styled near-vertical line left to right. * * History: * 22-Feb-1992 -by- J. Andrew Goossen [andrewgo] * Wrote it. \**************************************************************************/ VOID vStripStyledVertical24( STRIP* pstrip, // Indicates which pixels to light BMINFO* pbmi, // Data and masks for bitmap format LINESTATE* pls) // Color and style state info about line { DONTUSE(pbmi); ASSERTGDI(pstrip->cStrips > 0, "Non-positive count"); LONG* plEnd = &pstrip->alStrips[pstrip->cStrips]; LONG* pl = &pstrip->alStrips[0]; LONG cjDelta = pstrip->lDelta * (LONG)sizeof(CHUNK); if (pstrip->flFlips & FL_FLIP_V) cjDelta = -cjDelta; CHUNK chXor = pls->chXor; CHUNK chAnd = pls->chAnd; BOOL bIsGap = pls->bIsGap; STYLEPOS spRemaining = pls->spRemaining; BYTE* pjScreen = (BYTE*) pstrip->pchScreen; do { // Paint strip: LONG c = *pl; do { if (!bIsGap) { *(pjScreen++) = (*pjScreen & (BYTE) (chAnd)) ^ (BYTE) (chXor); *(pjScreen++) = (*pjScreen & (BYTE) (chAnd >> 8)) ^ (BYTE) (chXor >> 8); *(pjScreen) = (*pjScreen & (BYTE) (chAnd >> 16)) ^ (BYTE) (chXor >> 16); pjScreen -= 2; } pjScreen += cjDelta; spRemaining -= pls->ulStepRun; if (spRemaining <= 0) { if (++pls->psp > pls->pspEnd) pls->psp = pls->pspStart; spRemaining += *pls->psp; bIsGap = !bIsGap; } } while (--c != 0); // Done with strip, make side step: pjScreen += 3; spRemaining -= pls->ulStepSide; if (spRemaining <= 0) { if (++pls->psp > pls->pspEnd) pls->psp = pls->pspStart; spRemaining += *pls->psp; bIsGap = !bIsGap; } } while (++pl < plEnd); pstrip->pchScreen = (CHUNK*) pjScreen; pls->bIsGap = bIsGap; pls->spRemaining = spRemaining; } /******************************Public*Routine******************************\ * VOID vStripStyledDiagonal24(pstrip, pbmi, pls) * * Draws a 24bpp styled near-diagonal line left to right. * * History: * 22-Feb-1992 -by- J. Andrew Goossen [andrewgo] * Wrote it. \**************************************************************************/ VOID vStripStyledDiagonal24( STRIP* pstrip, // Indicates which pixels to light BMINFO* pbmi, // Data and masks for bitmap format LINESTATE* pls) // Color and style state info about line { DONTUSE(pbmi); ASSERTGDI(pstrip->cStrips > 0, "Non-positive count"); LONG* plEnd = &pstrip->alStrips[pstrip->cStrips]; LONG* pl = &pstrip->alStrips[0]; LONG cjDelta = pstrip->lDelta * (LONG)sizeof(CHUNK); if (pstrip->flFlips & FL_FLIP_V) cjDelta = -cjDelta; CHUNK chXor = pls->chXor; CHUNK chAnd = pls->chAnd; BOOL bIsGap = pls->bIsGap; STYLEPOS spRemaining = pls->spRemaining; BYTE* pjScreen = (BYTE*) pstrip->pchScreen; do { // Paint strip: register LONG c = *pl; while (TRUE) { if (bIsGap) pjScreen += 3; else { *(pjScreen++) = (*pjScreen & (BYTE) (chAnd)) ^ (BYTE) (chXor); *(pjScreen++) = (*pjScreen & (BYTE) (chAnd >> 8)) ^ (BYTE) (chXor >> 8); *(pjScreen++) = (*pjScreen & (BYTE) (chAnd >> 16)) ^ (BYTE) (chXor >> 16); } if (--c == 0) break; pjScreen += cjDelta; spRemaining -= pls->ulStepDiag; if (spRemaining <= 0) { if (++pls->psp > pls->pspEnd) pls->psp = pls->pspStart; spRemaining += *pls->psp; bIsGap = !bIsGap; } } // Do a side step: spRemaining -= pls->ulStepRun; if (spRemaining <= 0) { if (++pls->psp > pls->pspEnd) pls->psp = pls->pspStart; spRemaining += *pls->psp; bIsGap = !bIsGap; } if (pstrip->flFlips & FL_FLIP_D) pjScreen += cjDelta - 3; } while (++pl < plEnd); pstrip->pchScreen = (CHUNK*) pjScreen; pls->bIsGap = bIsGap; pls->spRemaining = spRemaining; } PFNSTRIP gapfnStrip[] = { vStripSolidHorizontal, vStripSolidVertical, vStripSolidDiagonal, vStripSolidDiagonal, vStripStyledHorizontal, vStripStyledVertical, vStripStyledDiagonal, vStripStyledDiagonal, vStripSolidHorizontal24, vStripSolidVertical24, vStripSolidDiagonal24, vStripSolidDiagonal24, vStripStyledHorizontal24, vStripStyledVertical24, vStripStyledDiagonal24, vStripStyledDiagonal24 };