rendered paste bodydnm:
.select:
mov [.table],esi
cmp [boxed],1
je .end
cmp [leftedge],-1
jne .noreset
cmp [.drag?],1
je @f
cmp [.sel],0
je @f
mov esi,[.called]
mov esi,[esi+item.call]
call esi
@@:
mov [.drag?],0
mov [.sel],0
jmp .end
.noreset:
cmp [leftedge],1
jne .drag
mov [.drag?],0
mov eax,[curs.x]
mov ebx,[curs.y]
mov [.xs],eax
mov [.ys],ebx
cmp [collision.sel],0
je .itemtest
mov esi,[collision.sel]
mov [.count],esi
mov [.current],collision.table
.next0:
mov esi,[.current]
mov esi,[esi]
mov eax,[esi+item.x]
mov ebx,[esi+item.y]
mov ecx,[esi+item.xl]
mov edx,[esi+item.yl]
sub eax,[curs.x]
jg @f
add eax,ecx
jle @f
sub ebx,[curs.y]
jg @f
add ebx,edx
jle @f
mov [.sel],1
mov [.called],esi
jmp .end
@@:
add [.current],4
dec [.count]
jne .next0
.nobox:
mov [collision.sel],0
mov [.sel],0
.itemtest:
mov esi,[.table]
mov eax,[esi]
mov [.count],eax
add esi,eax
mov [.current],esi
.next1:
mov esi,[.current]
mov esi,[esi]
mov eax,[esi+item.x]
mov ebx,[esi+item.y]
mov ecx,[esi+item.xl]
mov edx,[esi+item.yl]
sub eax,[curs.x]
jg @f
add eax,ecx
jle @f
sub ebx,[curs.y]
jg @f
add ebx,edx
jle @f
mov [.sel],esi
mov [.called],esi
mov [collision.sel],1
mov [collision.table],esi
jmp .end
@@:
sub [.current],4
sub [.count],4
jne .next1
mov [.sel],0
jmp .end
.drag:
cmp [.drag?],1
je .move
cmp [.sel],0
je .end
mov eax,[curs.x]
sub eax,[.xs]
jge @f
neg eax
@@:
cmp eax,[.hysteresis]
jl @f
mov [.drag?],1
jmp .move
@@:
mov eax,[curs.y]
sub eax,[.ys]
jge @f
neg eax
@@:
cmp eax,[.hysteresis]
jl @f
mov [.drag?],1
@@:
.move:
cmp [.drag?],1
jne .end
mov eax,[delta.x]
mov ebx,[delta.y]
mov esi,[collision.sel]
mov [.count],esi
mov [.current],collision.table
.next2:
mov esi,[.current]
mov esi,[esi]
mov ecx,320
mov edx,200
sub ecx,[esi+item.xl]
sub edx,[esi+item.yl]
add [esi+item.x],eax
jge @f
mov dword[esi+item.x],0
@@:
cmp [esi+item.x],ecx
jl @f
mov [esi+item.x],ecx
@@:
add [esi+item.y],ebx
jge @f
mov dword[esi+item.y],0
@@:
cmp [esi+item.y],edx
jl @f
mov [esi+item.y],edx
@@:
add [selbox.x],eax
add [selbox.y],ebx
add [.current],4
dec [.count]
jne .next2
.end:
.itemdisp:
mov esi,[.table]
mov eax,[esi]
mov [.count],eax
add esi,4
mov [.current],esi
.next3:
mov esi,[.current]
mov esi,[esi]
mov eax,[esi+item.x]
mov ebx,[esi+item.y]
mov [put.x],eax
mov [put.y],ebx
mov esi,[esi+item.bmp]
call put
add [.current],4
sub [.count],4
jne .next3
sub [colvar],white-blue
cmp [collision.sel],0
je @f
.disp:
mov esi,[collision.sel]
mov [.count],esi
mov [.current],collision.table
.next4:
mov esi,[.current]
mov esi,[esi]
mov eax,[esi+item.x]
mov ebx,[esi+item.y]
mov [put.x],eax
mov [put.y],ebx
mov esi,[esi+item.bmp]
call put
add [.current],4
dec [.count]
jne .next4
@@:
add [colvar],white-blue
ret
.table rd 1
.count rd 1
.current rd 1
.drag? rd 1
.xs rd 1
.ys rd 1
.sel rd 1
.hysteresis dd 1
.called rd 1