[BACK]Return to lineproc.mac CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gnuplot

Annotation of OpenXM_contrib/gnuplot/lineproc.mac, Revision 1.1

1.1     ! maekawa     1: ; lineproc.mac
        !             2: ; MASM macro definition for Bresenham line-drawing routine
        !             3: ; Colin Kelley
        !             4: ; January 13, 1987
        !             5:
        !             6:
        !             7: INCAX  equ 40h                 ; for Self-Modifying Code
        !             8: INCBX  equ 43h
        !             9: DECAX  equ 48h
        !            10: DECBX  equ 4bh
        !            11:
        !            12: ; usage:
        !            13: ;   lineproc linename, pixelname
        !            14: ;
        !            15: ; where linemane is the name you want for the proc, and pixelname is the
        !            16: ;   name of the routine that linename is to call to set pixels
        !            17: ;
        !            18:
        !            19: lineproc macro linename, pixelname
        !            20: beginproc linename
        !            21:
        !            22:        push bp
        !            23:        mov bp,sp
        !            24:        push si
        !            25:        push di
        !            26:        mov ax,[bp+X]           ; x1
        !            27:        mov bx,[bp+X+2]         ; y1
        !            28:        mov cx,[bp+X+4]         ; x2
        !            29:        mov si,[bp+X+6]         ; y2
        !            30:
        !            31:        cmp ax,cx               ; x1,x2
        !            32:        jne i19
        !            33:        cmp bx,si               ; y1,y2
        !            34:        jne i19
        !            35:
        !            36:        call pixelname
        !            37:
        !            38:        jmp i28
        !            39: i19:
        !            40:        mov dx,ax               ; dx,x1
        !            41:        sub dx,cx               ; x2
        !            42:        jnc noabsx
        !            43:        neg dx
        !            44: noabsx:
        !            45:        mov di,bx               ; dy,y1
        !            46:        sub di,si               ; y2
        !            47:        jnc noabsy
        !            48:        neg di                  ; dy
        !            49: noabsy:
        !            50:        cmp dx,di               ; dx,dy
        !            51:        jb i21                  ; go iterate y's
        !            52: ;
        !            53: ; iterate x's
        !            54: ;
        !            55:        cmp bx,si               ; y1,y2
        !            56:        jb forwardy
        !            57:        mov byte ptr cs:yinc1,DECBX
        !            58:        jmp short i22
        !            59: forwardy:
        !            60:        mov byte ptr cs:yinc1,INCBX
        !            61: i22:
        !            62:        cmp ax,cx               ; x1,x2
        !            63:        jae l20004
        !            64:        mov byte ptr cs:xinc1,INCAX
        !            65:        jmp short l20005
        !            66: l20004:
        !            67:        mov byte ptr cs:xinc1,DECAX
        !            68: l20005:
        !            69:        mov bp,dx               ; sum,dx
        !            70:        shr bp,1                ; sum
        !            71: d23:
        !            72:        cmp ax,cx               ; x1,x2
        !            73:        je i28                  ; done
        !            74: xinc1: inc ax                  ; may become inc or dec
        !            75:        add bp,di               ; sum,dy
        !            76:        cmp bp,dx
        !            77:        jb i27
        !            78:        sub bp,dx               ; sum,dx
        !            79: yinc1: inc bx                  ; may become inc or dec
        !            80: i27:
        !            81:        call pixelname
        !            82:        jmp short d23
        !            83:
        !            84: ;
        !            85: ; else iterate y's
        !            86: ;
        !            87: i21:
        !            88:        cmp ax,cx               ; x1,x2
        !            89:        jae l20006
        !            90:        mov byte ptr cs:xinc2,INCAX
        !            91:        jmp short l20007
        !            92: l20006:
        !            93:        mov byte ptr cs:xinc2,DECAX
        !            94: l20007:
        !            95:        cmp bx,si               ; y1,y2
        !            96:        jb forwardy2
        !            97:        mov byte ptr cs:yinc2,DECBX
        !            98:        jmp short i29
        !            99: forwardy2:
        !           100:        mov byte ptr cs:yinc2,INCBX
        !           101: i29:
        !           102:        mov bp,di               ; sum,dy
        !           103:        shr bp,1                ; sum,1
        !           104: d30:
        !           105:        cmp bx,si               ; y1,y2
        !           106:        je i28
        !           107: yinc2: inc bx                  ; may become inc or dec
        !           108:        add bp,dx               ; sum,dx
        !           109:        cmp bp,di               ; sum,dy
        !           110:        jb i34
        !           111:        sub bp,di               ; sum,dy
        !           112: xinc2: inc ax                  ; may become inc or dec
        !           113: i34:
        !           114:        call near ptr pixelname
        !           115:        jmp short d30
        !           116: ;
        !           117: ; clean up and exit
        !           118: ;
        !           119: i28:
        !           120:        pop di
        !           121:        pop si
        !           122:        pop bp
        !           123:        ret
        !           124:
        !           125: linename endp
        !           126:        endm

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>