|
|
1.1 ! root 1: ;---------------------------Module-Header------------------------------; ! 2: ; Module Name: rect.asm ! 3: ; ! 4: ; Rectangle Utilities ! 5: ; ! 6: ; Copyright (c) 1992 Microsoft Corporation ! 7: ;-----------------------------------------------------------------------; ! 8: .386 ! 9: ! 10: ifndef DOS_PLATFORM ! 11: .model small,c ! 12: else ! 13: ifdef STD_CALL ! 14: .model small,c ! 15: else ! 16: .model small,pascal ! 17: endif; STD_CALL ! 18: endif; DOS_PLATFORM ! 19: ! 20: assume cs:FLAT,ds:FLAT,es:FLAT,ss:FLAT ! 21: assume fs:nothing,gs:nothing ! 22: ! 23: .xlist ! 24: include stdcall.inc ;calling convention cmacros ! 25: include i386\strucs.inc ! 26: .list ! 27: ! 28: .code ! 29: ! 30: _TEXT$01 SEGMENT DWORD USE32 PUBLIC 'CODE' ! 31: ASSUME CS:FLAT, DS:FLAT, ES:FLAT, SS:NOTHING, FS:NOTHING, GS:NOTHING ! 32: ! 33: ;---------------------------Public-Routine------------------------------; ! 34: ; bIdenticalRect ( pRect1, pRect2 ) ! 35: ; ! 36: ; Compare two rectangles whether they are identical ! 37: ; ! 38: ;-----------------------------------------------------------------------; ! 39: ! 40: cProc bIdenticalRect,8,< \ ! 41: uses esi edi, \ ! 42: pRect1: ptr RECTL, \ ! 43: pRect2: ptr RECTL > ! 44: ! 45: cld ! 46: xor eax,eax ! 47: mov ecx,(size RECTL/4) ! 48: mov esi,pRect1 ! 49: mov edi,pRect2 ! 50: repe cmpsd ! 51: setz al ! 52: ! 53: bir_exit: ! 54: cRet bIdenticalRect ! 55: ! 56: endProc bIdenticalRect ! 57: ! 58: ;---------------------------Public-Routine------------------------------; ! 59: ; flClipRect ( pDst, pRect1, pRect2 ) ! 60: ; ! 61: ; Clip the first rectangle with the second one, and put the result ! 62: ; rectangle in the destination one. ! 63: ; ! 64: ; Return: ! 65: ; 0 if Rect1 is not clipped by Rect2 ! 66: ; 1 if Rect1 is horizontally clipped only ! 67: ; 2 if Rect1 is vertically clipped only ! 68: ; 3 if Rect1 is both horizontally and vertically clipped. ! 69: ; ! 70: ;-----------------------------------------------------------------------; ! 71: ! 72: cProc flClipRect,12,< \ ! 73: uses ebx esi edi, \ ! 74: pDstRect: ptr RECTL, \ ! 75: pRect1: ptr RECTL, \ ! 76: pRect2: ptr RECTL > ! 77: ! 78: ! 79: cld ! 80: mov edi,pDstRect ! 81: mov esi,pRect1 ! 82: mov ebx,pRect2 ! 83: push ebp ! 84: xor ebp,ebp ; assume no clipping required ! 85: ! 86: bisr_left: ! 87: lodsd ; left of rect1 ! 88: mov edx,[ebx].xLeft ; left of rect2 ! 89: cmp eax,edx ; clipped if left of rect1 < left of rect2 ! 90: jge short @F ! 91: mov eax,edx ; clipped left ! 92: or ebp,1 ; indicate horizontally clipped ! 93: @@: ! 94: stosd ! 95: ! 96: bisr_Top: ! 97: lodsd ; top of rect1 ! 98: mov edx,[ebx].yTop ; top of rect2 ! 99: cmp eax,edx ; clipped if top of rect1 < top of rect2 ! 100: jge short @F ! 101: mov eax,edx ; clipped top ! 102: or ebp,2 ; indicate vertically clipped ! 103: @@: ! 104: stosd ! 105: ! 106: bisr_Right: ! 107: lodsd ; right of rect1 ! 108: mov edx,[ebx].xRight ; right of rect2 ! 109: cmp edx,eax ; clipped if right of rect1 > right of rect2 ! 110: jge short @F ! 111: mov eax,edx ; clipped top ! 112: or ebp,1 ; indicate horizontally clipped ! 113: @@: ! 114: stosd ! 115: ! 116: bisr_Bottom: ! 117: lodsd ; bottom of rect1 ! 118: mov edx,[ebx].yBottom ; bottom of rect2 ! 119: cmp edx,eax ; clipped if bottom of rect1 > bottom of rect2 ! 120: jge short @F ! 121: mov eax,edx ; clipped bottom ! 122: or ebp,2 ; indicate vertically clipped ! 123: @@: ! 124: stosd ! 125: ! 126: bisr_exit: ! 127: mov eax,ebp ; return value ! 128: pop ebp ! 129: cRet flClipRect ! 130: ! 131: endProc flClipRect ! 132: ! 133: _TEXT$01 ends ! 134: ! 135: end ! 136:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.