--- /dev/null
+.387
+ PUBLIC MXGOURAUDPOLY
+ EXTRN MX_BYTESPERLINE:BYTE
+ EXTRN MX_CLIPX1:BYTE
+ EXTRN MX_CLIPX2:BYTE
+ EXTRN MX_CLIPY1:BYTE
+ EXTRN MX_CLIPY2:BYTE
+ EXTRN MX_CODESEGMENT:BYTE
+ EXTRN MX_SCANBUFFER:BYTE
+ EXTRN MX_VIDEOSEGMENT:BYTE
+MX_TEXT SEGMENT PARA PUBLIC USE16 'CODE'
+ ASSUME CS:MX_TEXT, DS:DGROUP, SS:DGROUP
+L$1:
+ mov cx,word ptr [si]
+ sub cx,word ptr [bx]
+ jg L$2
+ ret
+L$2:
+ push bp
+ push di
+ push cx
+ push ax
+ push dx
+ mov ax,word ptr 2[si]
+ mov bx,word ptr 2[bx]
+ sub ax,bx
+ jg L$4
+ jl L$6
+ mov ax,bx
+L$3:
+ mov word ptr es:[di],ax
+ add di,8
+ dec cx
+ jne L$3
+ jmp L$8
+L$4:
+ cwd
+ div cx
+ mov bp,ax
+ xor ax,ax
+ div cx
+ xchg ax,bx
+ mov dx,8000H
+L$5:
+ mov word ptr es:[di],ax
+ add di,8
+ add dx,bx
+ adc ax,bp
+ dec cx
+ jne L$5
+ jmp L$8
+L$6:
+ neg ax
+ cwd
+ div cx
+ mov bp,ax
+ xor ax,ax
+ div cx
+ xchg ax,bx
+ mov dx,8000H
+L$7:
+ mov word ptr es:[di],ax
+ add di,8
+ sub dx,bx
+ sbb ax,bp
+ dec cx
+ jne L$7
+L$8:
+ pop bx
+ pop ax
+ pop cx
+ pop di
+ sub ax,bx
+ jg L$10
+ jl L$12
+ mov ah,bl
+ mov al,80H
+L$9:
+ mov word ptr es:2[di],ax
+ add di,8
+ dec cx
+ jne L$9
+ jmp L$14
+L$10:
+ cwd
+ div cx
+ mov bp,ax
+ xor ax,ax
+ div cx
+ xchg ax,bx
+ mov dx,8000H
+L$11:
+ mov byte ptr es:3[di],al
+ mov byte ptr es:2[di],dh
+ add di,8
+ add dx,bx
+ adc ax,bp
+ dec cx
+ jne L$11
+ jmp L$14
+L$12:
+ neg ax
+ cwd
+ div cx
+ mov bp,ax
+ xor ax,ax
+ div cx
+ xchg ax,bx
+ mov dx,8000H
+L$13:
+ mov byte ptr es:3[di],al
+ mov byte ptr es:2[di],dh
+ add di,8
+ sub dx,bx
+ sbb ax,bp
+ dec cx
+ jne L$13
+L$14:
+ pop bp
+ ret
+L$15:
+ mov ax,word ptr 6[si]
+ mov bx,word ptr 2[si]
+ cmp ah,bh
+ jg L$17
+ jl L$19
+ add ax,dx
+ mov dx,word ptr cs:MX_BYTESPERLINE
+L$16:
+ mov byte ptr es:[di],ah
+ add di,dx
+ dec cx
+ jne L$16
+ ret
+L$17:
+ push bp
+ push si
+ mov si,bx
+ add si,dx
+ sub ax,bx
+ xor dx,dx
+ div cx
+ mov bp,ax
+ xor ax,ax
+ div cx
+ mov bx,ax
+ mov dx,8000H
+ mov ax,word ptr cs:MX_BYTESPERLINE
+ xchg ax,si
+L$18:
+ mov byte ptr es:[di],ah
+ add dx,bx
+ adc ax,bp
+ add di,si
+ dec cx
+ jne L$18
+ pop si
+ pop bp
+ ret
+L$19:
+ push bp
+ push si
+ mov si,bx
+ add si,dx
+ sub ax,bx
+ neg ax
+ xor dx,dx
+ div cx
+ mov bp,ax
+ xor ax,ax
+ div cx
+ mov bx,ax
+ mov dx,8000H
+ mov ax,word ptr cs:MX_BYTESPERLINE
+ xchg ax,si
+L$20:
+ mov byte ptr es:[di],ah
+ sub dx,bx
+ sbb ax,bp
+ add di,si
+ dec cx
+ jne L$20
+ pop si
+ pop bp
+ ret
+MXGOURAUDPOLY:
+ push bp
+ mov bp,sp
+ sub sp,1eH
+ push ds
+ push si
+ push es
+ push di
+ mov cx,word ptr 14H[bp]
+ cmp cx,3
+ jae L$21
+ jmp near ptr L$47
+L$21:
+ les di,dword ptr 10H[bp]
+ lds si,dword ptr 0cH[bp]
+ mov word ptr -16H[bp],7fffH
+ mov word ptr -1aH[bp],8000H
+ mov word ptr -18H[bp],7fffH
+ mov word ptr -1eH[bp],8000H
+ xor dx,dx
+L$22:
+ mov bx,word ptr es:[di]
+ shl bx,1
+ shl bx,1
+ add bx,si
+ mov ax,word ptr [bx]
+ cmp ax,word ptr -16H[bp]
+ jge L$23
+ mov word ptr -16H[bp],ax
+ mov word ptr -0eH[bp],dx
+ mov word ptr -10H[bp],dx
+L$23:
+ cmp ax,word ptr -1aH[bp]
+ jle L$24
+ mov word ptr -1aH[bp],ax
+ mov word ptr -12H[bp],dx
+L$24:
+ mov ax,word ptr 2[bx]
+ cmp ax,word ptr -18H[bp]
+ jge L$25
+ mov word ptr -18H[bp],ax
+L$25:
+ cmp ax,word ptr -1eH[bp]
+ jle L$26
+ mov word ptr -1eH[bp],ax
+L$26:
+ inc di
+ inc di
+ inc dx
+ inc dx
+ dec cx
+ jne L$22
+ mov ax,word ptr -1aH[bp]
+ cmp ax,word ptr cs:MX_CLIPX1
+ jge L$27
+ jmp near ptr L$47
+L$27:
+ mov bx,word ptr -16H[bp]
+ cmp bx,word ptr cs:MX_CLIPX2
+ jle L$28
+ jmp near ptr L$47
+L$28:
+ sub ax,bx
+ jg L$29
+ jmp near ptr L$47
+L$29:
+ mov ax,word ptr -1eH[bp]
+ cmp ax,word ptr cs:MX_CLIPY1
+ jge L$30
+ jmp near ptr L$47
+L$30:
+ mov bx,word ptr -18H[bp]
+ cmp bx,word ptr cs:MX_CLIPY2
+ jle L$31
+ jmp near ptr L$47
+L$31:
+ sub ax,bx
+ jg L$32
+ jmp near ptr L$47
+L$32:
+ dec word ptr 14H[bp]
+ shl word ptr 14H[bp],1
+ mov es,word ptr cs:MX_CODESEGMENT
+ mov ax,offset MX_TEXT:MX_SCANBUFFER
+ mov word ptr -4[bp],ax
+ mov si,word ptr -0eH[bp]
+L$33:
+ lds bx,dword ptr 10H[bp]
+ mov di,word ptr [bx+si]
+ dec si
+ dec si
+ test si,si
+ jge L$34
+ mov si,word ptr 14H[bp]
+L$34:
+ mov word ptr -0eH[bp],si
+ mov si,word ptr [bx+si]
+ lds bx,dword ptr 8[bp]
+ shl di,1
+ shl si,1
+ mov ax,word ptr [bx+si]
+ mov dx,word ptr [bx+di]
+ lds bx,dword ptr 0cH[bp]
+ shl si,1
+ shl di,1
+ add si,bx
+ add bx,di
+ mov di,word ptr -4[bp]
+ call near ptr L$1
+ mov word ptr -4[bp],di
+ mov si,word ptr -0eH[bp]
+ cmp si,word ptr -12H[bp]
+ jne L$33
+ mov ax,offset MX_TEXT:MX_SCANBUFFER+4
+ mov word ptr -6[bp],ax
+ mov si,word ptr -10H[bp]
+L$35:
+ lds bx,dword ptr 10H[bp]
+ mov di,word ptr [bx+si]
+ inc si
+ inc si
+ cmp si,word ptr 14H[bp]
+ jbe L$36
+ xor si,si
+L$36:
+ mov word ptr -10H[bp],si
+ mov si,word ptr [bx+si]
+ lds bx,dword ptr 8[bp]
+ shl di,1
+ shl si,1
+ mov ax,word ptr [bx+si]
+ mov dx,word ptr [bx+di]
+ lds bx,dword ptr 0cH[bp]
+ shl si,1
+ shl di,1
+ add si,bx
+ add bx,di
+ mov di,word ptr -6[bp]
+ call near ptr L$1
+ mov word ptr -6[bp],di
+ mov si,word ptr -10H[bp]
+ cmp si,word ptr -12H[bp]
+ jne L$35
+ mov si,offset MX_TEXT:MX_SCANBUFFER
+ mov ax,word ptr -16H[bp]
+ mov cx,word ptr -1aH[bp]
+ sub cx,ax
+ mov bx,word ptr cs:MX_CLIPX1
+ sub bx,ax
+ jle L$37
+ sub cx,bx
+ add ax,bx
+ mov word ptr -16H[bp],ax
+ shl bx,1
+ shl bx,1
+ shl bx,1
+ add si,bx
+L$37:
+ mov bx,ax
+ add bx,cx
+ sub bx,word ptr cs:MX_CLIPX2
+ jle L$38
+ sub cx,bx
+L$38:
+ test cx,cx
+ jg L$39
+ jmp near ptr L$47
+L$39:
+ mov word ptr -8[bp],cx
+ mov word ptr -4[bp],si
+ mov ds,word ptr cs:MX_CODESEGMENT
+ mov ax,word ptr -18H[bp]
+ cmp ax,word ptr cs:MX_CLIPY1
+ jl L$40
+ mov ax,word ptr -1eH[bp]
+ cmp ax,word ptr cs:MX_CLIPY2
+ jg L$40
+ jmp L$44
+L$40:
+ mov di,cx
+ inc di
+ sub si,8
+L$41:
+ dec di
+ je L$44
+ add si,8
+ mov ax,word ptr [si]
+ mov cx,word ptr 4[si]
+ mov dx,word ptr cs:MX_CLIPY2
+ cmp ax,dx
+ jg L$43
+ cmp cx,dx
+ jle L$42
+ mov word ptr 4[si],dx
+ mov bx,cx
+ sub bx,dx
+ sub cx,ax
+ jle L$43
+ mov ax,word ptr 2[si]
+ sub ax,word ptr 6[si]
+ imul bx
+ idiv cx
+ add word ptr 6[si],ax
+ mov ax,word ptr [si]
+ mov cx,word ptr 4[si]
+L$42:
+ mov dx,word ptr cs:MX_CLIPY1
+ cmp cx,dx
+ jl L$43
+ sub cx,ax
+ jle L$43
+ cmp ax,dx
+ jge L$41
+ mov word ptr [si],dx
+ sub dx,ax
+ cmp cx,dx
+ jbe L$43
+ mov ax,word ptr 6[si]
+ sub ax,word ptr 2[si]
+ imul dx
+ idiv cx
+ add word ptr 2[si],ax
+ jmp L$41
+L$43:
+ mov word ptr [si],0ffffH
+ jmp L$41
+L$44:
+ mov es,word ptr cs:MX_VIDEOSEGMENT
+ mov si,word ptr -4[bp]
+ mov cl,byte ptr -16H[bp]
+ and cl,3
+ mov al,11H
+ shl al,cl
+ mov byte ptr -2[bp],al
+ shr word ptr -16H[bp],1
+ shr word ptr -16H[bp],1
+ mov ax,word ptr 6[bp]
+ mov ah,al
+ xor al,al
+ mov word ptr 6[bp],ax
+L$45:
+ mov ax,word ptr [si]
+ test ax,ax
+ js L$46
+ mov cx,word ptr 4[si]
+ sub cx,ax
+ jle L$46
+ mul word ptr cs:MX_BYTESPERLINE
+ add ax,word ptr -16H[bp]
+ mov di,ax
+ mov ah,byte ptr -2[bp]
+ mov al,2
+ mov dx,3c4H
+ out dx,ax
+ mov dx,word ptr 6[bp]
+ call near ptr L$15
+L$46:
+ rol byte ptr -2[bp],1
+ adc word ptr -16H[bp],0
+ add si,8
+ dec word ptr -8[bp]
+ jne L$45
+L$47:
+ xor ax,ax
+ pop di
+ pop es
+ pop si
+ pop ds
+ mov sp,bp
+ pop bp
+ retf 10H
+MX_TEXT ENDS
+ END