dnm: .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