Pararena2/Sources/DissBits.c

1 line
9.1 KiB
C
Raw Permalink Normal View History

//============================================================ //============================================================ //== == //== DissBits Routines == //== == //============================================================ //============================================================ //======================================================== Includes #include "Globals.h" #include "UnivUtilities.h" #include "DissBits.h" //======================================================== DissBitsMed13QD void DissBits13QD (Rect *clippedRect) { Rect transRect; RgnHandle clipRgn; register short value = 1; register short mask = 0x0CA0; short rectH, rectV; clipRgn = NewRgn(); RectRgn(clipRgn, clippedRect); do { if (value & 1) // pseudo-random # between 1 and 4095 value = (value >> 1) ^ mask; else value = (value >> 1); rectH = (value % 80) * 8; // convert value into screen coords rectV = ((value / 80) * 10) + clippedRect->top; SetRect(&transRect, rectH, rectV, rectH + 8, rectV + 10); if (isColor) // copy bits within rect to mainWndo CopyBits(&((GrafPtr)offCWorkPtr)->portBits, &(((GrafPtr)mainWndo)->portBits), &transRect, &transRect, srcCopy, clipRgn); else CopyBits(&offWorkBits, &(mainWndo->portBits), &transRect, &transRect, srcCopy, clipRgn); } while (value != 1); rectH = 0; // handle special case for zero rectV = clippedRect->top; SetRect(&transRect, rectH, rectV, rectH + 8, rectV + 10); if (isColor) CopyBits(&((GrafPtr)offCWorkPtr)->portBits, &(((GrafPtr)mainWndo)->portBits), &transRect, &transRect, srcCopy, clipRgn); else CopyBits(&offWorkBits, &(mainWndo->portBits), &transRect, &transRect, srcCopy, clipRgn); DisposeRgn(clipRgn); } //======================================================== DissBits12QD void DissBits12QD (Rect *clippedRect) { Rect transRect; RgnHandle clipRgn; register short value = 1; register short mask = 0x0500; short rectH, rectV; clipRgn = NewRgn(); RectRgn(clipRgn, clippedRect); do { if (value & 1) // pseudo-random # between 1 and 2047 value = (value >> 1) ^ mask; else value = (value >> 1); rectH = (value % 64) * 8; // convert # into screen coords rectV = ((value / 64) * 12) + clippedRect->top; SetRect(&transRect, rectH, rectV, rectH + 8, rectV + 12); if (isColor) // copy bits within rect to mainWndo CopyBits(&((GrafPtr)offCWorkPtr)->portBits, &(((GrafPtr)mainWndo)->portBits), &transRect, &transRect, srcCopy, clipRgn); else CopyBits(&offWorkBits, &(mainWndo->portBits), &transRect, &transRect, srcCopy, clipRgn); } while (value != 1); rectH = 0; // handle special case for zero rectV = clippedRect->top; SetRect(&transRect, rectH, rectV, rectH + 8, rectV + 12); if (isColor) CopyBits(&((GrafPtr)offCWorkPtr)->portBits, &(((GrafPtr)mainWndo)->portBits), &transRect, &transRect, srcCopy, clipRgn); else CopyBits(&offWorkBits, &(mainWndo->portBits), &transRect, &transRect, srcCopy, clipRgn); DisposeRgn(clipRgn); } //======================================================== DissBits13Assm4 void DissBits13Assm4 (Rect *clippedRect) { Point zeroPt; long screenOffset, workOffset; short mask = 0x3500; short value = 1; short rectH, rectV, rowsThen; char theMode; SetPt(&zeroPt, 0, 0); ShieldCursor(clippedRect, zeroPt); theMode = true32b; SwapMMUMode(&theMode); do { if (value & 1) // produces # between 1 and 16383 value = (value >> 1) ^ mask; else value = (value >> 1); rectH = (value % 160) * 4; // convert to screen coords rectV = ((value / 160) * 5) + clippedRect->top; if (rectV > (clippedRect->bottom - 5)) { rowsThen = clippedRect->bottom - rectV; if (rowsThen > 0) { workOffset = (long)((long)rectH >> 1) + workRowOffsets[rectV] + (long)offWorkPix; screenOffset = (long)((long)rectH >> 1) + screenRowAddrs[rectV]; asm 68000 { move.l workOffset, a0