JPEGView/Source/C/UpdateRegion.c
Aaron Giles 92bdb55672 JPEGView 3.3 for Macintosh
These are the sources for the final official release of JPEGView for the
Mac, back in 1994.
2015-02-05 00:18:10 -08:00

1 line
3.2 KiB
C

/*********************************************************/
/* This source code copyright (c) 1991-2001, Aaron Giles */
/* See the Read Me file for licensing information. */
/* Contact email: mac@aarongiles.com */
/*********************************************************/
// short *UpdateRegion(short *rgnData, RgnBufferPtr rgnBuffer, Rect *boxRect)
long *bufData = rgnBuffer->buffer, *ptr, tmp;
long x, lastY;
lastY = rgnData[-1]; // get last Y coordinate
while ((x = *rgnData++) != 0x7fff) {
x -= boxRect->left;
while (*bufData < x) bufData++;
ptr = bufData;
if (x == *bufData)
while ((*ptr = *(ptr + 1)) != 0x7fff) ptr++;
else {
while (x != 0x7fff) {
tmp = *ptr;
*ptr++ = x;
x = tmp;
}
*ptr++ = x;
bufData++;
}
}
rgnBuffer->yCount = *rgnData++ - lastY;
return rgnData;
/*
parameter passing:
r3 = rgnData
r4 = rgnBuffer
r5 = boxRect
00000000: BF61FFEC stmw r27,-20(SP)
long *bufData = rgnBuffer->buffer, *ptr, tmp;
long x, lastY;
lastY = rgnData[-1]; // get last Y coordinate
00000004: AB63FFFE lha lastY,-2(rgnData)
00000008: 3BA40008 addi bufData,rgnBuffer,8
while ((x = *rgnData++) != 0x7fff) {
x -= boxRect->left;
0000000C: 42800078 bc ALWAYS,cr0_LT,$00000084
00000010: A8C50002 lha r6,2(boxRect)
00000014: 7FE6F850 sub x,x,r6
while (*bufData < x) bufData++;
00000018: 42800008 bc ALWAYS,cr0_LT,$00000020
0000001C: 3BBD0004 addi bufData,bufData,4
00000020: 80FD0000 lwz r7,0(bufData)
00000024: 7C07F800 cmpw r7,x
00000028: 4180FFF4 blt $0000001C
ptr = bufData;
0000002C: 811D0000 lwz r8,0(bufData)
00000030: 7FBEEB78 mr ptr,bufData
if (x == *bufData)
00000034: 7C1F4000 cmpw x,r8
00000038: 40820034 bne $0000006C
while ((*ptr = *(ptr + 1)) != 0x7fff) ptr++;
0000003C: 42800008 bc ALWAYS,cr0_LT,$00000044
00000040: 3BDE0004 addi ptr,ptr,4
00000044: 813E0004 lwz r9,4(ptr)
00000048: 2C097FFF cmpwi r9,32767
0000004C: 913E0000 stw r9,0(ptr)
00000050: 4082FFF0 bne $00000040
00000054: 42800030 bc ALWAYS,cr0_LT,$00000084
else {
while (x != 0x7fff) {
tmp = *ptr;
*ptr++ = x;
x = tmp;
}
00000058: 839E0000 lwz tmp,0(ptr)
0000005C: 7FCAF378 mr r10,ptr
00000060: 93EA0000 stw x,0(r10)
00000064: 3BDE0004 addi ptr,ptr,4
00000068: 7F9FE378 mr x,tmp
0000006C: 2C1F7FFF cmpwi x,32767
00000070: 4082FFE8 bne $00000058
*ptr++ = x;
bufData++;
00000074: 7FCBF378 mr r11,ptr
00000078: 3BDE0004 addi ptr,ptr,4
0000007C: 93EB0000 stw x,0(r11)
00000080: 3BBD0004 addi bufData,bufData,4
}
00000084: 7C6C1B78 mr r12,rgnData
00000088: ABEC0000 lha x,0(r12)
0000008C: 38630002 addi rgnData,rgnData,2
00000090: 2C1F7FFF cmpwi x,32767
00000094: 4082FF7C bne $00000010
}
rgnBuffer->yCount = *rgnData++ - lastY;
return rgnData;
00000098: 7C661B78 mr r6,rgnData
0000009C: A8C60000 lha r6,0(r6)
000000A0: 38630002 addi rgnData,rgnData,2
000000A4: 7CDB3050 sub r6,r6,lastY
000000A8: 90C40000 stw r6,0(rgnBuffer)
000000AC: BB61FFEC lmw r27,-20(SP)
000000B0: 4E800020 blr
*/