/kernel/tags/kolibri0.5.3.0/gui/window.inc |
---|
0,0 → 1,1704 |
get_titlebar_height: ; edi = window draw_data pointer |
mov al,[edi+WDATA.fl_wstyle] |
and al,0x0F |
cmp al,0x03 |
jne @f |
mov eax,[_skinh] |
ret |
@@: mov eax,21 |
ret |
get_rolledup_height: ; edi = window draw_data pointer |
mov al,[edi+WDATA.fl_wstyle] |
and al,0x0F |
cmp al,0x03 |
jne @f |
mov eax,[_skinh] |
add eax,3 |
ret |
@@: or al,al |
jnz @f |
mov eax,21 |
ret |
@@: mov eax,21+2 |
ret |
setwindowdefaults: |
pushad |
xor eax,eax |
mov ecx,0xc000 |
@@: |
inc eax |
add ecx,2 |
mov [ecx+0x000],ax ; process no |
mov [ecx+0x400],ax ; positions in stack |
cmp ecx,0xc400-2 ; the more high, the more surface |
jnz @b |
popad |
ret |
; eax = cx |
; ebx = cy |
; ecx = ex |
; edx = ey |
; èäåÿ: ïåðåáðàòü âñå îêíà, íà÷èíàÿ ñ ñàìîãî íèæíåãî, |
; è äëÿ êàæäîãî âûçâàòü setscreen |
align 4 |
calculatescreen: |
pushad |
cli |
mov esi, 1 |
xor eax, eax |
xor ebx, ebx |
mov ecx, [0xFE00] |
mov edx, [0xFE04] |
call setscreen |
mov ebp, [0x3004] ; number of processes |
cmp ebp, 1 |
jbe .finish |
align 4 |
.new_wnd: |
movzx edi, word [0xC400 + esi * 2] |
shl edi, 5 |
add edi, window_data |
test [edi+WDATA.fl_wstate],WSTATE_MINIMIZED |
jnz .not_wnd |
mov eax,[edi+WDATA.left] |
mov ebx,[edi+WDATA.top] |
mov ecx,[edi+WDATA.width] |
add ecx,eax |
mov edx,[edi+WDATA.height] |
add edx,ebx |
push esi |
movzx esi, word [0xC400 + esi * 2] |
call setscreen |
pop esi |
.not_wnd: |
inc esi |
dec ebp |
jnz .new_wnd |
.finish: |
sti |
popad |
ret |
virtual at esp |
ff_xsz dd ? |
ff_ysz dd ? |
ff_scale dd ? |
end virtual |
align 4 |
; ðåçåðâèðóåò ìåñòî ïîä îêíî çàäàííîãî ïðîöåññà |
setscreen: |
; eax x start |
; ebx y start |
; ecx x end |
; edx y end |
; esi process number |
pushad |
mov edi, esi ;;;word [esi*2+0xc400] |
shl edi, 8 |
add edi, 0x80000+0x80 ; address of random shaped window area |
cmp [edi], dword 0 |
jne .free_form |
; get x&y size |
sub ecx, eax |
sub edx, ebx |
inc ecx |
inc edx |
; get WinMap start |
mov edi, [0xFE00] ; screen_sx |
inc edi |
imul edi, ebx |
add edi, eax |
add edi, WinMapAddress |
.new_y: |
push ecx ; sx |
push edx |
mov edx, esi |
align 4 |
.new_x: |
mov byte [edi], dl |
inc edi |
dec ecx |
jnz .new_x |
pop edx |
pop ecx |
add edi, [0xFE00] |
inc edi |
sub edi, ecx |
dec edx |
jnz .new_y |
popad |
ret |
.read_byte: |
;eax - address |
;esi - slot |
push eax |
push ebx |
push ecx |
push edx |
mov edx,eax |
mov eax,esi |
lea ebx,[esp+12] |
mov ecx,1 |
call read_process_memory |
pop edx |
pop ecx |
pop ebx |
pop eax |
ret |
.free_form: |
; for (y=0; y <= x_size; y++) |
; for (x=0; x <= x_size; x++) |
; if (shape[coord(x,y,scale)]==1) |
; set_pixel(x, y, process_number); |
sub ecx, eax |
sub edx, ebx |
inc ecx |
inc edx |
push dword [edi+4] ; push scale first -> for loop |
; get WinMap start -> ebp |
push eax |
mov eax, [0xFE00] ; screen_sx |
inc eax |
imul eax, ebx ;ebx |
add eax, [esp] ;eax |
add eax, WinMapAddress |
mov ebp, eax |
mov edi, [edi] |
; mov eax, esi |
; shl eax, 5 |
; add edi, [eax+0x3000+0x10] |
pop eax |
; eax = x_start |
; ebx = y_start |
; ecx = x_size |
; edx = y_size |
; esi = process_number |
; edi = &shape |
; [scale] |
push edx ecx ;ebx eax |
xor ebx, ebx |
align 4 |
.ff_new_y: |
xor edx, edx |
align 4 |
.ff_new_x: |
; -- body -- |
mov ecx, [ff_scale] |
mov eax, [ff_xsz] |
shr eax, cl |
push ebx edx |
shr ebx, cl |
shr edx, cl |
imul eax, ebx |
add eax, edx |
pop edx ebx |
add eax, edi ;[ff_shape] |
call .read_byte |
; cmp byte [eax], 1 |
; jne @f |
test al,al |
jz @f |
mov eax, esi ; [ff_proc] |
mov [ebp], al |
@@: |
; -- end body -- |
inc ebp |
inc edx |
cmp edx, [ff_xsz] |
jb .ff_new_x |
sub ebp, [ff_xsz] |
add ebp, [0xFE00] ; screen.x |
inc ebp |
inc ebx |
cmp ebx, [ff_ysz] |
jb .ff_new_y |
pop ecx edx ; eax ebx first |
add esp, 4 |
popad |
ret |
display_settings: |
; eax = 0 ; DISPLAY redraw |
; ebx = 0 ; all |
; |
; eax = 1 ; BUTTON type |
; ebx = 0 ; flat |
; ebx = 1 ; 3D |
; eax = 2 ; set WINDOW colours |
; ebx = pointer to table |
; ecx = number of bytes define |
; eax = 3 ; get WINDOW colours |
; ebx = pointer to table |
; ecx = number of bytes wanted |
; eax = 4 ; get skin height |
; input : nothing |
; output : eax = skin height in pixel |
; eax = 5 ; get screen workarea |
; input : nothing |
; output : eax = [left]*65536+[right] |
; ebx = [top]*65536+[bottom] |
; eax = 6 ; set screen workarea |
; input : ecx = [left]*65536+[right] |
; edx = [top]*65536+[bottom] |
; output : nothing |
; eax = 7 ; get skin margins |
; input : nothing |
; output : eax = [left]*65536+[right] |
; ebx = [top]*65536+[bottom] |
; eax = 8 ; set window skin |
; input : ecx = pointer to file info block |
; output : eax = FS error code |
pushad |
test eax, eax ; redraw display |
jnz dspl0 |
test ebx, ebx |
jnz dspl0 |
cmp [windowtypechanged],dword 1 |
jne dspl00 |
mov [windowtypechanged],dword 0 |
redraw_screen_direct: |
mov [dlx],dword 0 |
mov [dly],dword 0 |
mov eax,[0xfe00] |
mov [dlxe],eax |
mov eax,[0xfe04] |
mov [dlye],eax |
mov eax,window_data |
call redrawscreen |
dspl00: |
popad |
ret |
dspl0: |
cmp eax,1 ; button type |
jne dspl1 |
and ebx,1 |
cmp ebx,[buttontype] |
je dspl9 |
mov [buttontype],ebx |
mov [windowtypechanged],dword 1 |
dspl9: |
popad |
ret |
dspl1: |
cmp eax,2 ; set common window colours |
jne no_com_colours |
mov [windowtypechanged],dword 1 |
mov esi,[0x3010] |
add esi,0x10 |
add ebx,[esi] |
mov esi,ebx |
mov edi,common_colours |
and ecx,127 |
cld |
rep movsb |
popad |
ret |
no_com_colours: |
cmp eax,3 ; get common window colours |
jne no_get_com |
mov esi,[0x3010] |
add esi,0x10 |
add ebx,[esi] |
mov edi,ebx |
mov esi,common_colours |
and ecx,127 |
cld |
rep movsb |
popad |
ret |
no_get_com: |
cmp eax,4 ; get skin height |
jne no_skin_height |
popad |
mov eax,[_skinh] |
mov [esp+36],eax |
ret |
no_skin_height: |
cmp eax,5 ; get screen workarea |
jne no_get_workarea |
popad |
mov eax,[screen_workarea.left-2] |
mov ax,word[screen_workarea.right] |
mov [esp+36],eax |
mov eax,[screen_workarea.top-2] |
mov ax,word[screen_workarea.bottom] |
mov [esp+24],eax |
ret |
no_get_workarea: |
cmp eax,6 ; set screen workarea |
jne no_set_workarea |
movsx eax,word[esp+16+2] |
movsx ebx,word[esp+16] |
cmp eax,ebx |
jge .lp1 |
or eax,eax;[0xFE00] |
jl @f |
mov [screen_workarea.left],eax |
@@: cmp ebx,[0xFE00] |
jg .lp1 |
mov [screen_workarea.right],ebx |
.lp1: movsx eax,word[esp+24+2] |
movsx ebx,word[esp+24] |
cmp eax,ebx |
jge .lp2 |
or eax,eax;[0xFE04] |
jl @f |
mov [screen_workarea.top],eax |
@@: cmp ebx,[0xFE04] |
jg .lp2 |
mov [screen_workarea.bottom],ebx |
.lp2: call repos_windows |
call calculatescreen |
; jmp redraw_screen_direct |
.exit: |
popad |
ret |
no_set_workarea: |
cmp eax,7 ; get skin margins |
jne no_get_skinmargins |
popad |
mov eax,dword[_skinmargins+0] |
mov [esp+36],eax |
mov eax,dword[_skinmargins+4] |
mov [esp+24],eax |
ret |
no_get_skinmargins: |
cmp eax,8 ; set window skin |
jne no_set_skin |
mov eax,ebx |
mov edi,[0x3010] |
add ebx,[edi+0x10] ; abs start of info block |
pushd [ebx+0] [ebx+4] [ebx+8] [ebx+12] |
mov dword[ebx+0],0 ; read |
mov dword[ebx+4],0 ; from the beginning |
mov dword[ebx+8],64 ; 32 KBytes maximum |
mov ecx,skin_data+64*512 |
sub ecx,[edi+0x10] |
mov dword[ebx+12],ecx ; destination |
push eax |
pushad |
call file_system |
popad |
pop eax |
popd [ebx+12] [ebx+8] [ebx+4] [ebx+0] |
cmp eax,ERROR_SUCCESS |
je @f |
cmp eax,ERROR_END_OF_FILE |
jne .exit |
@@: cmp [skin_data+64*512+SKIN_HEADER.ident],'SKIN' |
mov eax,ERROR_UNKNOWN_FS |
jne .exit |
mov esi,skin_data+64*512 |
mov edi,skin_data |
mov ecx,(64*512)/4 |
rep movsd |
call parse_skin_data |
call calculatescreen |
mov dword[esp+32+36],0 |
jmp redraw_screen_direct |
.exit: |
mov [esp+32+36],eax |
popad |
ret |
no_set_skin: |
popad |
ret |
repos_windows: |
mov ecx,[0x3004] |
mov esi,0x20*2 |
mov byte[0x0000fff0],1 |
dec ecx |
jge @f |
ret |
@@: mov [esi+WDATA.fl_redraw],1 |
test [esi+WDATA.fl_wstate],WSTATE_MAXIMIZED |
jz .lp2 |
mov eax,[screen_workarea.left] |
mov [esi+WDATA.left],eax |
sub eax,[screen_workarea.right] |
neg eax |
mov [esi+WDATA.width],eax |
mov eax,[screen_workarea.top] |
mov [esi+WDATA.top],eax |
test [esi+WDATA.fl_wstate],WSTATE_ROLLEDUP |
jnz .lp1 |
sub eax,[screen_workarea.bottom] |
neg eax |
mov [esi+WDATA.height],eax |
.lp1: add esi,0x20 |
loop @b |
ret |
.lp2: mov eax,[esi+WDATA.left] |
add eax,[esi+WDATA.width] |
mov ebx,[0x0000fe00] |
; inc ebx |
cmp eax,ebx |
jle .lp4 |
mov eax,[esi+WDATA.width] |
sub eax,ebx |
jle .lp3 |
mov [esi+WDATA.width],ebx |
.lp3: sub ebx,[esi+WDATA.width] |
mov [esi+WDATA.left],ebx |
.lp4: mov eax,[esi+WDATA.top] |
add eax,[esi+WDATA.height] |
mov ebx,[0x0000fe04] |
; inc ebx |
cmp eax,ebx |
jle .lp6 |
mov eax,[esi+WDATA.height] |
sub eax,ebx |
jle .lp5 |
mov [esi+WDATA.height],ebx |
.lp5: sub ebx,[esi+WDATA.height] |
mov [esi+WDATA.top],ebx |
.lp6: add esi,0x20 |
loop @b |
ret |
uglobal |
common_colours: |
times 128 db 0x0 |
endg |
check_window_position: |
pushad ; window inside screen ? |
movzx eax,word [edi+0] |
movzx ebx,word [edi+4] |
movzx ecx,word [edi+8] |
movzx edx,word [edi+12] |
mov esi,ecx ; check x pos |
add esi,eax |
cmp esi,[0xfe00] |
jbe x_pos_ok |
mov [edi+0],dword 0 |
xor eax, eax |
x_pos_ok: |
mov esi,edx ; check y pos |
add esi,ebx |
cmp esi,[0xfe04] |
jbe y_pos_ok |
mov [edi+4],dword 0 |
mov ebx,0 |
y_pos_ok: |
mov esi,ecx ; check x size |
add esi,eax |
cmp esi,[0xfe00] |
jbe x_size_ok |
mov ecx,[0xfe00] |
mov [edi+8],ecx |
x_size_ok: |
mov esi,edx ; check y size |
add esi,ebx |
cmp esi,[0xfe04] |
jbe y_size_ok |
mov edx,[0xfe04] |
mov [edi+12],edx |
y_size_ok: |
popad |
ret |
uglobal |
new_window_starting dd 0 |
endg |
sys_window_mouse: |
push eax |
mov eax,[timer_ticks] ;[0xfdf0] |
cmp [new_window_starting],eax |
jb swml1 |
mov [0xfff4],byte 0 ; no mouse background |
mov [0xfff5],byte 0 ; draw mouse |
mov [new_window_starting],eax |
swml1: |
pop eax |
ret |
drawwindow_I: |
pushad |
mov esi,[edx+24] ; rectangle |
mov eax,[edx+0] |
shl eax,16 |
add eax,[edx+0] |
add eax,[edx+8] |
mov ebx,[edx+04] |
shl ebx,16 |
add ebx,[edx+4] |
add ebx,[edx+12] |
call draw_rectangle |
mov ecx,[edx+20] ; grab bar |
push ecx |
mov esi,edx |
mov edx,[esi+04] |
add edx,1 |
mov ebx,[esi+04] |
add ebx,25 |
mov eax,[esi+04] |
add eax,[esi+12] |
cmp ebx,eax |
jb wdsizeok |
mov ebx,eax |
wdsizeok: |
push ebx |
drwi: |
mov ebx,edx |
shl ebx,16 |
add ebx,edx |
mov eax,[esi+00] |
inc eax |
shl eax,16 |
add eax,[esi+00] |
add eax,[esi+8] |
sub eax,1 |
push edx |
mov edx,0x80000000 |
mov ecx,[esi+20] |
and ecx,edx |
cmp ecx,edx |
jnz nofa |
mov ecx,[esi+20] |
sub ecx,0x00040404 |
mov [esi+20],ecx |
and ecx,0x00ffffff |
jmp faj |
nofa: |
mov ecx,[esi+20] |
and ecx,0x00ffffff |
faj: |
pop edx |
mov edi,0 |
call [draw_line] |
inc edx |
cmp edx,[esp] |
jb drwi |
add esp,4 |
pop ecx |
mov [esi+20],ecx |
mov edx,[esi+04] ; inside work area |
add edx,21+5 |
mov ebx,[esi+04] |
add ebx,[esi+12] |
cmp edx,ebx |
jg noinside |
mov eax,1 |
mov ebx,21 |
mov ecx,[esi+8] |
mov edx,[esi+12] |
mov edi,[esi+16] |
call [drawbar] |
noinside: |
popad |
ret |
draw_rectangle: |
r_eax equ [esp+28] ; x start |
r_ax equ [esp+30] ; x end |
r_ebx equ [esp+16] ; y start |
r_bx equ [esp+18] ; y end |
;esi ; color |
pushad |
mov ecx,esi ; yb,xb -> yb,xe |
;<<< 14.11.2004 Ivan Poddubny <faster and smaller> |
; mov eax,r_eax |
; shl eax,16 |
; mov ax,r_ax |
mov eax, r_eax |
rol eax, 16 |
;>>> 14.11.2004 Ivan Poddubny <faster and smaller> |
mov ebx,r_ebx |
shl ebx,16 |
mov bx,r_ebx |
xor edi, edi |
call [draw_line] |
mov ebx,r_bx ; ye,xb -> ye,xe |
shl ebx,16 |
mov bx,r_bx |
call [draw_line] |
mov ecx,esi ; ya,xa -> ye,xa |
mov eax,r_eax |
shl eax,16 |
mov ax,r_eax |
mov ebx,r_ebx |
shl ebx,16 |
mov bx,r_bx |
mov edi,0 |
call [draw_line] |
mov eax,r_ax ; ya,xe -> ye,xe |
shl eax,16 |
mov ax,r_ax |
call [draw_line] |
popad |
ret |
drawwindow_III: |
pushad |
mov edi,edx ; RECTANGLE |
mov eax,[edi+0] |
shl eax,16 |
mov ax,[edi+0] |
add ax,[edi+8] |
mov ebx,[edi+4] |
shl ebx,16 |
mov bx,[edi+4] |
add bx,[edi+12] |
mov esi,[edi+24] |
shr esi,1 |
and esi,0x007f7f7f |
push esi |
call draw_rectangle |
mov ecx,3 |
dw3l: |
add eax,1*65536-1 |
add ebx,1*65536-1 |
mov esi,[edi+24] |
call draw_rectangle |
dec ecx |
jnz dw3l |
pop esi |
add eax,1*65536-1 |
add ebx,1*65536-1 |
call draw_rectangle |
mov ecx,[edx+20] ; GRAB BAR |
push ecx |
mov esi,edx |
mov edx,[esi+04] |
add edx,4 |
mov ebx,[esi+04] |
add ebx,20 |
mov eax,[esi+04] |
add eax,[esi+12] |
cmp ebx,eax |
jb wdsizeok2 |
mov ebx,eax |
wdsizeok2: |
push ebx |
drwi2: |
mov ebx,edx |
shl ebx,16 |
add ebx,edx |
mov eax,[esi+00] |
shl eax,16 |
add eax,[esi+00] |
add eax,[esi+8] |
add eax,4*65536-4 |
mov ecx,[esi+20] |
test ecx,0x40000000 |
jz nofa3 |
add ecx,0x040404 |
nofa3: |
test ecx,0x80000000 |
jz nofa2 |
sub ecx,0x040404 |
nofa2: |
mov [esi+20],ecx |
and ecx,0xffffff |
xor edi, edi |
call [draw_line] |
inc edx |
cmp edx,[esp] |
jb drwi2 |
add esp,4 |
pop ecx |
mov [esi+20],ecx |
mov edx,[esi+04] ; WORK AREA |
add edx,21+5 |
mov ebx,[esi+04] |
add ebx,[esi+12] |
cmp edx,ebx |
jg noinside2 |
mov eax,5 |
mov ebx,20 |
mov ecx,[esi+8] |
mov edx,[esi+12] |
sub ecx,4 |
sub edx,4 |
mov edi,[esi+16] |
call [drawbar] |
noinside2: |
popad |
ret |
; activate window |
align 4 |
windowactivate: |
; esi = abs mem position in stack 0xC400+ |
pushad |
push esi |
movzx eax, word [esi] ; ax <- process no |
movzx eax, word [0xC000+eax*2] ; ax <- position in window stack |
xor esi, esi ; drop others |
waloop: |
cmp esi, dword [0x3004] |
jae wacont |
inc esi |
lea edi, [0xC000 + esi*2] |
mov bx, [edi] ; position of the current process |
cmp bx, ax |
jbe @f |
dec bx ; upper? => drop! |
mov [edi], bx |
@@: |
jmp waloop |
wacont: |
; set to no 1 |
pop esi ; esi = pointer at 0xC400 |
movzx eax, word [esi] |
mov bx, [0x3004] ; number of processes |
mov [0xC000+eax*2], bx ; this is the last (and the upper) |
;* start code - get active process (4) - Mario79 |
cli |
cmp [active_process_flag],1 |
jne @f |
mov [active_process_flag],0 |
jmp end_save_active_process |
@@: |
call save_active_process_stack |
end_save_active_process: |
mov [active_process],eax |
push eax |
mov eax,[active_process] |
shl eax,5 |
add eax,0x3000 |
mov [eax-twdw+31],byte 1 |
pop eax |
sti |
;* end code - get active process (4) - Mario79 |
; update on screen -window stack |
xor esi, esi |
waloop2: |
mov edi, [0x3004] |
cmp esi, edi |
jae wacont2 |
inc esi |
movzx ebx, word [esi*2 + 0xC000] |
mov [ebx*2 + 0xC400], si |
jmp waloop2 |
wacont2: |
mov [0xf400], byte 0 ; empty keyboard buffer |
mov [0xf500], byte 0 ; empty button buffer |
popad |
ret |
; check if window is necessary to draw |
checkwindowdraw: |
; edi = position in window_data+ |
mov esi, edi |
sub esi, window_data |
shr esi, 5 |
; esi = process number |
; <IP 15.08.2004> |
movzx eax, word [0xC000 + esi * 2] ; get value of the curr process |
lea esi, [0xC400 + eax * 2] ; get address of this process at 0xC400 |
; </IP 15.08.2004> |
push esi |
.new_check: |
pop esi |
add esi, 2 |
push esi |
mov eax, [0x3004] |
lea eax, word [0xC400 + eax * 2] ; number of the upper window |
cmp esi, eax |
ja .all_wnds_to_top |
movzx eax, word [esi] |
shl eax, 5 |
add eax, window_data |
mov esi, eax |
mov ebx, [edi+4] |
mov edx, [edi+12] |
add edx, ebx |
mov ecx, [esi+4] ; y check |
cmp ecx, edx |
jae .new_check |
mov eax, [esi+12] |
add ecx, eax |
cmp ebx, ecx |
ja .new_check |
mov eax, [edi+0] |
mov ecx, [edi+8] |
add ecx, eax |
mov edx, [esi+0] ; x check |
cmp edx, ecx |
jae .new_check |
mov ecx, [esi+8] |
add edx, ecx |
cmp eax, edx |
ja .new_check |
pop esi |
mov ecx,1 ; overlap some window |
ret |
.all_wnds_to_top: |
pop esi |
xor ecx, ecx ; passed all windows to top |
ret |
waredraw: ; if redraw necessary at activate |
pushad |
call checkwindowdraw ; draw window on activation ? |
test ecx, ecx |
jz .do_not_draw |
popad |
mov [0xfb44], byte 1 ; do draw mouse |
call windowactivate |
; update screen info |
pushad |
mov edi, [0x3004] ; the last process (number) |
movzx esi, word [0xC400 + edi * 2] |
shl esi, 5 |
add esi, window_data |
; coordinates of the upper window |
mov eax, [esi+00] ; cx |
mov ebx, [esi+04] ; cy |
mov ecx, [esi+08] ; sx |
mov edx, [esi+12] ; sy |
add ecx, eax ; ecx = x_end |
add edx, ebx ; edx = y_end |
mov edi, [0x3004] |
movzx esi, word [0xC400 + edi * 2] |
shl esi, 5 |
movzx esi, byte [esi + 0x3000 + 0xE] |
call setscreen ;;;calculatescreen ; setscreen |
popad |
cmp [0xff01], dword 1 ; if > 1 then activate process |
jbe .not_activate |
;;; mov eax, 10 ; wait for putimages to finish |
;;; call delay_hs |
mov [edi+31],byte 1 ; redraw flag for app |
mov [0xfb44],byte 0 ; mouse down checks |
ret |
.not_activate: |
; mov eax,5 ; wait for putimages to finish |
; call delay_hs |
mov [edi+31],byte 1 ; redraw flag for app |
mov ecx, 25 ;100 |
.waitflagdown: |
dec ecx |
jz .nowait |
; mov eax, 2 |
; call delay_hs |
cmp [edi+31], byte 0 ; wait flag to drop |
jnz .waitflagdown |
.nowait: |
; mov ecx,10 |
; .wait: |
; mov eax,1 ; wait for draw to finish |
; call delay_hs |
; loop .wait |
mov [0xfb44],byte 0 |
ret |
.do_not_draw: |
popad |
call windowactivate |
mov [0xfb44],byte 0 ; mouse down checks |
mov [0xfff4],byte 0 ; no mouse background |
mov [0xfff5],byte 0 ; draw mouse |
ret |
iglobal |
window_moving db 'K : Window - move/resize',13,10,0 |
window_moved db 'K : Window - done',13,10,0 |
endg |
; check window touch |
align 4 |
checkwindows: |
pushad |
cmp [0xff01],dword 1 ; activate request from app ? |
jbe .no_activate_request |
mov edi,[0xff01] ; process number |
shl edi,5 |
add edi,window_data |
mov ebx,[0xff01] |
movzx esi, word [0xC000 + ebx * 2] |
lea esi, [0xC400 + esi * 2] |
call waredraw |
;* start code - get active process (2) - Mario79 |
; mov eax,[0xff01] |
; mov [active_process],eax |
;* end code - get active process (2) - Mario79 |
mov [0xff01],dword 0 ; activated |
popad |
ret |
.no_activate_request: |
cmp [0xfb40],byte 0 ; mouse buttons pressed ? |
jne .mouse_buttons_pressed |
; cmp [window_minimize],2 |
; jne .no_activate_request_1 |
cmp [window_minimize],0 |
je .no_activate_request_2 |
cmp [window_minimize],1 |
je .mouse_buttons_pressed |
mov esi,[0x3004] |
movzx edi, word [0xC400 + esi * 2] |
shl edi, 5 |
add edi, window_data |
test [edi+WDATA.fl_wstate],WSTATE_MINIMIZED |
jnz .mouse_buttons_pressed |
; jne .no_activate_request_2 |
; .no_activate_request_1: |
; cmp [window_minimize],1 |
; jge .mouse_buttons_pressed |
; jmp .mouse_buttons_pressed |
.no_activate_request_2: |
mov [window_minimize],0 |
popad |
ret |
.mouse_buttons_pressed: |
mov esi,[0x3004] |
inc esi |
cwloop: |
cmp esi,2 |
jb .exit |
.temp_window_minimize_1: |
dec esi |
movzx edi, word [0xC400 + esi * 2] ; ebx |
shl edi, 5 |
add edi, window_data |
; mov edi, ebx |
mov ecx, [edi+0] |
mov edx, [edi+4] |
mov eax,ecx |
mov ebx,edx |
cmp [window_minimize],1 |
jge .window_minimize_no_check_mouse |
test [edi+WDATA.fl_wstate],WSTATE_MINIMIZED |
jnz cwloop |
movzx eax, word [0xfb0a] |
movzx ebx, word [0xfb0c] |
cmp ecx, eax |
jae cwloop |
cmp edx, ebx |
jae cwloop |
add ecx, [edi+8] |
add edx, [edi+12] |
cmp eax, ecx |
jae cwloop |
cmp ebx, edx |
jae cwloop |
.window_minimize_no_check_mouse: |
pushad |
mov eax, esi |
mov ebx, [0x3004] |
cmp eax, ebx ; is this window active? |
jz .move_resize_window |
; eax = position in windowing stack |
; redraw must ? |
lea esi, [0xC400 + esi * 2] |
call waredraw |
add esp, 32 |
.exit: |
popad |
ret |
.move_resize_window: ; MOVE OR RESIZE WINDOW |
popad |
; Check for user enabled fixed window |
mov edx, [edi+0x14] |
and edx, 0x0f000000 |
cmp edx, 0x01000000 |
jne .window_move_enabled_for_user |
popad |
ret |
.window_move_enabled_for_user: |
test [edi+WDATA.fl_wstate],WSTATE_ROLLEDUP |
jnz .no_resize_2 |
mov [do_resize_from_corner],byte 0 ; resize for skinned window |
mov edx, [edi+0x10] |
and edx, 0x0f000000 |
cmp edx, 0x02000000 |
jb .no_resize_2 ; not type 2 wnd |
mov edx, [edi+4] |
add edx, [edi+12] |
sub edx, 6 ; edx = y_end - 6 |
cmp ebx, edx ; ebx = mouse_y |
jb .no_resize_2 |
mov [do_resize_from_corner],byte 1 |
jmp .continue |
.no_resize_2: |
push eax |
call get_titlebar_height |
add eax,[edi+4] |
cmp ebx,eax |
pop eax |
jae .exit |
.continue: |
push esi |
mov esi, window_moving |
call sys_msg_board_str |
pop esi |
mov ecx, [timer_ticks] ;[0xfdf0] ; double-click ? |
mov edx, ecx |
sub edx, [latest_window_touch] |
mov [latest_window_touch], ecx |
mov [latest_window_touch_delta], edx |
mov cl, [0xfb40] ; save for shade check |
mov [do_resize], cl |
no_emulation_righ_button: |
mov ecx, [edi+0] |
mov edx, [edi+4] |
push eax ecx edx |
mov [dlx], ecx ; save for drawlimits |
mov [dly], edx |
mov eax, [edi+8] |
add ecx, eax |
mov eax, [edi+12] |
add edx, eax |
mov [dlxe], ecx |
mov [dlye], edx |
pop edx ecx eax |
sub eax, ecx |
sub ebx, edx |
mov esi, [0xfb0a] |
mov [0xf300], esi |
pushad ; wait for putimages to finish |
; mov eax,5 |
; call delay_hs |
mov eax,[edi+0] |
mov [npx],eax |
mov eax,[edi+4] |
mov [npy],eax |
popad |
push eax ; save old coordinates |
mov ax,[edi+00] |
mov word [oldc+00],ax |
mov ax,[edi+04] |
mov word [oldc+04],ax |
mov ax,[edi+8] |
mov word [oldc+8],ax |
mov word [npxe],ax |
mov ax,[edi+12] |
mov word [oldc+12],ax |
mov word [npye],ax |
pop eax |
test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED |
jnz @f |
call drawwindowframes |
@@: |
mov [reposition],0 |
mov [0xfb44],byte 1 ; no reaction to mouse up/down |
; move window |
newchm: |
mov [0xfff5],byte 1 |
call checkidle |
call checkEgaCga |
mov [0xfff4],byte 0 |
call [draw_pointer] |
pushad |
call stack_handler |
popad |
mov esi,[0xf300] |
cmp esi,[0xfb0a] |
je cwb |
mov cx,[0xfb0a] |
mov dx,[0xfb0c] |
sub cx,ax |
sub dx,bx |
push ax |
push bx |
test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED |
jnz @f |
call drawwindowframes |
@@: |
mov ax,[0xfe00] |
mov bx,[0xfe04] |
cmp [do_resize_from_corner],1 |
je no_new_position |
mov word [npx],word 0 ; x repos ? |
cmp ax,cx |
jb noreposx |
mov [reposition],1 |
sub ax,word [npxe] |
mov word [npx],ax |
cmp ax,cx |
jb noreposx |
mov word [npx],cx |
noreposx: |
mov word [npy],word 0 ; y repos ? |
cmp bx,dx |
jb noreposy |
mov [reposition],1 |
sub bx,word [npye] |
mov word [npy],bx |
cmp bx,dx |
jb noreposy |
mov word [npy],dx |
noreposy: |
no_new_position: |
cmp [do_resize_from_corner],0 ; resize from right corner |
je norepos_size |
pushad |
mov edx,edi |
sub edx,window_data |
shr edx,5 |
shl edx,8 |
add edx,0x80000 ; process base at 0x80000+ |
movzx eax,word [0xfb0a] |
cmp eax,[edi+0] |
jb nnepx |
sub eax,[edi+0] |
cmp eax,32 ; [edx+0x90+8] |
jge nnepx2 |
mov eax,32 ; [edx+0x90+8] |
nnepx2: |
mov [npxe],eax |
nnepx: |
call get_rolledup_height |
mov ebx,eax |
movzx eax,word [0xfb0c] |
cmp eax,[edi+4] |
jb nnepy |
sub eax,[edi+4] |
cmp eax,ebx ; [edx+0x90+12] |
jge nnepy2 |
mov eax,ebx ; [edx+0x90+12] |
nnepy2: |
mov [npye],eax |
nnepy: |
mov [reposition],1 |
popad |
norepos_size: |
pop bx |
pop ax |
test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED |
jnz @f |
call drawwindowframes |
@@: |
mov esi,[0xfb0a] |
mov [0xf300],esi |
cwb: |
cmp [0xfb40],byte 0 |
jne newchm |
; new position done |
mov [0xfff5],byte 1 |
mov cl,0 |
test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED |
jnz @f |
mov cl,[reposition] |
call drawwindowframes |
mov eax,[npx] |
mov [edi+0],eax |
mov eax,[npy] |
mov [edi+4],eax |
mov eax,[npxe] |
mov [edi+8],eax |
mov eax,[npye] |
mov [edi+12],eax |
@@: mov [reposition],cl |
cmp [reposition],1 ; save new position and size |
jne no_bounds_save |
; <IP 28.08.2004> |
push esi edi ecx |
mov esi,edi |
mov ecx,2 |
test [edi+WDATA.fl_wstate],WSTATE_ROLLEDUP or WSTATE_MAXIMIZED |
jnz @f |
add ecx,2 |
@@: sub edi,window_data |
shr edi,5 |
shl edi,8 |
add edi,0x80000+0x90 |
cld |
rep movsd |
pop ecx edi esi |
; </IP 28.08.2004> |
no_bounds_save: |
pushad ; WINDOW SHADE/FULLSCREEN |
cmp [reposition],1 |
je no_window_sizing |
mov edx,edi |
sub edx,window_data |
shr edx,5 |
shl edx,8 |
add edx,0x80000 ; process base at 0x80000+ |
cmp [window_minimize],0 |
je no_wnd_minimize_restore |
mov [reposition],1 |
wnd_minimize: |
cmp [window_minimize],1 |
jne wnd_restore |
or [edi+WDATA.fl_wstate],WSTATE_MINIMIZED |
jmp no_wnd_minimize_restore |
wnd_restore: |
cmp [window_minimize],2 |
jne no_wnd_minimize_restore |
and [edi+WDATA.fl_wstate],not WSTATE_MINIMIZED |
no_wnd_minimize_restore: |
cmp [do_resize],2 ; window shade ? |
jne no_window_shade |
mov [reposition],1 |
test [edi+WDATA.fl_wstate],WSTATE_ROLLEDUP |
jnz wnd_rolldown |
wnd_rollup: |
or [edi+WDATA.fl_wstate],WSTATE_ROLLEDUP |
call get_rolledup_height |
jmp @f |
wnd_rolldown: |
and [edi+WDATA.fl_wstate],not WSTATE_ROLLEDUP |
mov eax,[edx+0x90+BOX.height] |
test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED |
jz @f |
mov eax,[screen_workarea.bottom] |
sub eax,[screen_workarea.top] |
@@: mov [edi+WDATA.height],eax |
no_window_shade: |
cmp [do_resize],1 ; fullscreen/restore ? |
jne no_fullscreen_restore |
cmp [latest_window_touch_delta],dword 50 |
jg no_fullscreen_restore |
mov [reposition],1 |
test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED |
jnz restore_from_fullscreen |
or [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED |
mov eax,[screen_workarea.left] |
mov [edi+WDATA.left],eax |
sub eax,[screen_workarea.right] |
neg eax |
mov [edi+WDATA.width],eax |
mov eax,[screen_workarea.top] |
mov [edi+WDATA.top],eax |
test [edi+WDATA.fl_wstate],WSTATE_ROLLEDUP |
jnz @f |
sub eax,[screen_workarea.bottom] |
neg eax |
mov [edi+WDATA.height],eax |
@@: |
jmp no_fullscreen_restore |
restore_from_fullscreen: |
and [edi+WDATA.fl_wstate],not WSTATE_MAXIMIZED |
push [edi+WDATA.height] |
push edi ; restore |
lea esi, [edx + 0x90] |
mov ecx,4 |
cld |
rep movsd |
pop edi |
pop eax |
test [edi+WDATA.fl_wstate],WSTATE_ROLLEDUP |
jz @f |
mov [edi+WDATA.height],eax |
@@: |
no_fullscreen_restore: |
mov eax,[edi+4] ; check Y inside screen |
add eax,[edi+12] |
cmp eax,[0xfe04] |
jbe no_window_sizing |
mov eax,[edi+0] ; check X inside screen |
add eax,[edi+8] |
cmp eax,[0xfe00] |
jbe no_window_sizing |
mov eax,[0xfe00] |
sub eax,[edi+8] |
mov [edi+0],eax |
mov eax,[0xfe04] |
sub eax,[edi+12] |
mov [edi+4],eax |
no_window_sizing: |
popad |
cmp [reposition],0 |
je retwm |
pushad |
mov eax,[edi+00] |
mov ebx,[edi+04] |
mov ecx,[edi+8] |
mov edx,[edi+12] |
add ecx,eax |
add edx,ebx |
mov edi,[0x3004] |
shl edi,1 |
add edi,0xc400 |
movzx esi,byte [edi] |
shl esi,5 |
add esi,0x3000+0xe |
movzx esi,byte [esi] |
sub edi,draw_data |
shr edi,5 |
shl edi,8 |
add edi,0x80000+0x80 |
;cmp [edi],dword 0 |
;jne no_rect_shaped_move |
call setscreen |
jmp move_calculated |
no_rect_shaped_move: |
call calculatescreen |
move_calculated: |
popad |
mov [edi+WDATA.fl_redraw],1 |
mov [0xfff5],byte 1 ; no mouse |
push eax ebx ecx edx |
mov eax,[oldc+00] |
mov ebx,[oldc+04] |
mov ecx,[oldc+8] |
mov edx,[oldc+12] |
add ecx,eax |
add edx,ebx |
call calculatescreen |
pop edx ecx ebx eax |
mov eax,edi |
call redrawscreen |
mov ecx,100 ; wait to avoid mouse residuals |
waitre2: |
mov [0xfff5],byte 1 |
call checkidle |
cmp [edi+WDATA.fl_redraw],0 |
jz retwm |
loop waitre2 |
retwm: |
mov [0xfff5],byte 0 ; mouse pointer |
mov [0xfff4],byte 0 ; no mouse under |
mov [0xfb44],byte 0 ; react to mouse up/down |
mov esi,window_moved |
call sys_msg_board_str |
popad |
mov [window_minimize],0 |
; sti |
ret |
;temp_mouse_1 dw 0 |
;temp_mouse_2 dw 0 |
uglobal |
add_window_data dd 0 |
do_resize_from_corner db 0x0 |
reposition db 0x0 |
latest_window_touch dd 0x0 |
latest_window_touch_delta dd 0x0 |
do_resize db 0x0 |
oldc dd 0x0,0x0,0x0,0x0 |
dlx dd 0x0 |
dly dd 0x0 |
dlxe dd 0x0 |
dlye dd 0x0 |
npx dd 0x0 |
npy dd 0x0 |
npxe dd 0x0 |
npye dd 0x0 |
mpx dd 0x0 |
mpy dd 0x0 |
endg |
; draw negative window frames |
drawwindowframes: |
pushad |
mov eax,[npx] |
shl eax,16 |
add eax,[npx] |
add eax,[npxe] |
add eax,65536*1-1 |
mov ebx,[npy] |
shl ebx,16 |
add ebx,[npy] |
mov ecx,0x01000000 |
push edi |
mov edi,1 |
call [draw_line] |
pop edi |
mov eax,[npx] |
shl eax,16 |
add eax,[npx] |
add eax,[npxe] |
add eax,65536*1-1 |
mov ebx,[npy] |
add ebx,[npye] |
shl ebx,16 |
add ebx,[npy] |
add ebx,[npye] |
mov ecx,0x01000000 |
push edi |
mov edi,1 |
call [draw_line] |
pop edi |
mov eax,[npx] |
shl eax,16 |
add eax,[npx] |
mov ebx,[npy] |
shl ebx,16 |
add ebx,[npy] |
add ebx,[npye] |
mov ecx,0x01000000 |
push edi |
mov edi,1 |
call [draw_line] |
pop edi |
mov eax,[npx] |
add eax,[npxe] |
shl eax,16 |
add eax,[npx] |
add eax,[npxe] |
mov ebx,[npy] |
shl ebx,16 |
add ebx,[npy] |
add ebx,[npye] |
mov ecx,0x01000000 |
push edi |
mov edi,1 |
call [draw_line] |
mov edi,[0x3000] |
shl edi,5 |
add edi,window_data |
mov [edi+30],byte 1 |
pop edi |
popad |
ret |
random_shaped_window: |
; |
; eax = 0 giving address of data area |
; ebx address |
; ebx = 1 shape area scale |
; ebx 2^ebx scale |
test eax, eax |
jne rsw_no_address |
mov eax,[0x3000] |
shl eax,8 |
mov [eax+0x80000+0x80],ebx |
rsw_no_address: |
cmp eax,1 |
jne rsw_no_scale |
mov eax,[0x3000] |
shl eax,8 |
mov [eax+0x80000+0x84],bl |
rsw_no_scale: |
ret |
/kernel/tags/kolibri0.5.3.0/gui/button.inc |
---|
0,0 → 1,643 |
max_buttons=4095 |
dececx: |
push edx |
push ecx |
mov edx,2 |
.loop: |
cmp byte [esp+edx],0x20 |
jae @f |
mov [esp+edx],byte 0x20 |
@@: |
sub [esp+edx],byte 0x20 |
dec edx |
jns .loop |
pop ecx |
pop edx |
ret |
incecx: |
push edx |
push ecx |
mov edx,2 |
.loop: |
cmp byte [esp+edx],0xdf |
jbe @f |
mov [esp+edx],byte 0xdf |
@@: |
add [esp+edx],byte 0x20 |
dec edx |
jns .loop |
pop ecx |
pop edx |
ret |
incecx2: |
push edx |
push ecx |
mov edx,2 |
.loop: |
cmp byte [esp+edx],0xeb |
jbe @f |
mov [esp+edx],byte 0xeb |
@@: |
add [esp+edx],byte 0x14 |
dec edx |
jns .loop |
pop ecx |
pop edx |
ret |
drawbuttonframes: |
push esi |
push edi |
push eax |
push ebx |
push ecx |
push edx |
shr eax,16 |
shr ebx,16 |
mov edx,[0x3010] |
add eax,[edx-twdw] |
add ebx,[edx-twdw+4] |
mov cx,ax |
mov dx,bx |
shl eax,16 |
shl ebx,16 |
mov ax,cx |
mov bx,dx |
add ax,word [esp+12] |
mov esi,ebx |
mov edi,0 |
mov ecx,[esp+0] |
call incecx |
call [draw_line] |
movzx edx,word [esp+8] |
add ebx,edx |
shl edx,16 |
add ebx,edx |
mov ecx,[esp+0] |
call dececx |
call [draw_line] |
mov ebx,esi |
push edx |
mov edx,eax |
shr edx,16 |
mov ax,dx |
mov edx,ebx |
shr edx,16 |
mov bx,dx |
mov dx,[esp+8+4] |
add bx,dx |
pop edx |
mov edi,0 |
mov ecx,[esp+0] |
call incecx |
call [draw_line] |
mov esi,edx |
mov dx,[esp+12] |
add ax,dx |
shl edx,16 |
add eax,edx |
add ebx,1*65536 |
mov edx,esi |
mov ecx,[esp+0] |
call dececx |
call [draw_line] |
pop edx |
pop ecx |
pop ebx |
pop eax |
pop edi |
pop esi |
ret |
button_dececx: |
cmp [buttontype],dword 1 |
jne .finish |
; je bdece |
; ret |
; bdece: |
push eax |
mov eax,0x01 |
cmp edi,20 |
jg @f |
mov eax,0x02 |
@@: |
test ecx,0xff |
jz @f |
sub ecx,eax |
@@: |
shl eax,8 |
test ecx,0xff00 |
jz @f |
sub ecx,eax |
@@: |
shl eax,8 |
test ecx,0xff0000 |
jz @f |
sub ecx,eax |
@@: |
pop eax |
.finish: |
ret |
sys_button: |
test ecx,0x80000000 |
jnz remove_button |
push esi |
push edi |
push eax |
push ebx |
push ecx |
push edx |
or ax,ax |
jle noaddbutt |
or bx,bx |
jle noaddbutt |
test ecx,0x40000000 |
jnz button_no_draw |
pushad ; button body |
push ebx |
shr eax,16 |
shr ebx,16 |
mov edx,[0x3010] |
mov esi,[edx-twdw] |
mov edi,[edx-twdw+4] |
add eax,esi |
add ebx,edi |
mov cx,ax |
mov dx,bx |
shl eax,16 |
shl ebx,16 |
mov ax,cx |
mov bx,dx |
movzx ecx,word [4+32+esp+12] |
add eax,ecx |
mov ecx,[4+32+esp+0] |
cmp [buttontype],dword 0 |
je @f |
call incecx2 |
@@: |
movzx edi,word [esp] |
; <Ivan Poddubny 15.08.2004> |
pop edx |
and edx, 0xFFFF |
;;cli |
.newline: |
call button_dececx |
push edi |
xor edi, edi |
call [draw_line] |
pop edi |
add ebx,1*65536+1 ; [ y start | y end ] |
dec edx |
jnz .newline |
;;sti |
;; pop ebx |
; </Ivan Poddubny 15.08.2004> |
popad |
call drawbuttonframes |
button_no_draw: |
and ecx,0xffff |
mov edi,[0x3010] |
sub edi,twdw |
mov edi,[0xfe88] |
movzx eax,word [edi] |
cmp eax,max_buttons |
jge noaddbutt |
inc eax |
mov [edi],ax |
shl eax,4 |
add eax,edi |
mov bx,[0x3000] |
mov [eax],bx |
add eax,2 ; save button id number |
mov ebx,[esp+4] |
mov [eax],bx ; bits 0-15 |
shr ebx,16 |
mov [eax-2+0xc],bx; bits 16-31 |
add eax,2 ; x start |
mov bx,[esp+12+2] |
mov [eax],bx |
add eax,2 ; x size |
mov bx,[esp+12+0] |
mov [eax],bx |
add eax,2 ; y start |
mov bx,[esp+8+2] |
mov [eax],bx |
add eax,2 ; y size |
mov bx,[esp+8+0] |
mov [eax],bx |
noaddbutt: |
pop edx |
pop ecx |
pop ebx |
pop eax |
pop edi |
pop esi |
ret |
remove_button: |
and ecx,0x7fffffff |
rnewba2: |
mov edi,[0xfe88] |
mov eax,edi |
movzx ebx,word [edi] |
inc bx |
rnewba: |
dec bx |
jz rnmba |
add eax,0x10 |
mov dx,[0x3000] |
cmp dx,[eax] |
jnz rnewba |
cmp cx,[eax+2] |
jnz rnewba |
pushad |
mov ecx,ebx |
inc ecx |
shl ecx,4 |
mov ebx,eax |
add eax,0x10 |
call memmove |
dec dword [edi] |
popad |
jmp rnewba2 |
rnmba: |
ret |
find_pressed_button_frames: |
pushad |
movzx ebx,word [eax+0] |
shl ebx,5 |
add ebx,window_data |
movzx ecx,word [ebx+0] ; window x start |
movzx edx,word [eax+4] ; button x start |
add ecx,edx |
push ecx |
mov dx,[eax+6] ; button x size |
add cx,dx |
mov esi,ecx |
inc esi |
mov cx,[ebx+4] ; window y start |
mov dx,[eax+8] ; button y start |
add ecx,edx |
mov ebx,ecx |
mov dx,[eax+10] ; button y size |
add dx,cx |
inc dx |
pop eax |
; eax x beginning |
; ebx y beginning |
; esi x end |
; edx y end |
; ecx color |
mov [pressed_button_eax],eax |
mov [pressed_button_ebx],ebx |
mov [pressed_button_ecx],ecx |
mov [pressed_button_edx],edx |
mov [pressed_button_esi],esi |
popad |
ret |
uglobal |
pressed_button_eax dd 0 |
pressed_button_ebx dd 0 |
pressed_button_ecx dd 0 |
pressed_button_edx dd 0 |
pressed_button_esi dd 0 |
endg |
; negative button image |
negativebutton: |
; If requested, do not display button |
; boarder on press. |
test ebx,0x20000000 |
jz draw_negative_button |
ret |
draw_negative_button: |
pushad |
mov eax,[pressed_button_eax] |
mov ebx,[pressed_button_ebx] |
mov ecx,[pressed_button_ecx] |
mov edx,[pressed_button_edx] |
mov esi,[pressed_button_esi] |
mov ecx,0x01000000 |
dec edx |
push edx |
inc edx |
dec esi |
push esi |
inc esi |
push eax |
push ebx |
push ecx |
push edx |
push edi |
call [disable_mouse] |
bdbnewline: |
mov edi,1 ; force |
cmp eax,[esp+16] |
jz bneg |
cmp eax,[esp+20] |
jz bneg |
cmp ebx,[esp+12] |
jz bneg |
cmp ebx,[esp+24] |
jnz nbneg |
; jz bneg |
; jmp nbneg |
bneg: |
;;;call [disable_mouse] |
call [putpixel] |
nbneg: |
inc eax |
cmp eax,esi |
jnz bdbnewline |
mov eax,[esp+16] |
inc ebx |
cmp ebx,edx |
jnz bdbnewline |
add esp,28 |
popad |
ret |
; check buttons |
; 0000 word process number |
; 0002 word button id number : bits 0-15 |
; 0004 word x start |
; 0006 word x size |
; 0008 word y start |
; 000A word y size |
; 000C word button id number : bits 16-31 |
; |
; button table in 0x10 increments |
; |
; first at 0x10 |
checkbuttons: |
cmp [0xfb40],byte 0 ; mouse buttons pressed |
jnz @f |
ret |
@@: |
pushad |
xor esi, esi |
mov edi, [0xfe88] |
movzx edx, word [edi] |
test edx, edx |
jne @f |
popad |
ret |
@@: |
push esi |
inc edx |
push edx |
buttonnewcheck: |
pop edx |
pop esi |
inc esi |
cmp edx,esi |
jge bch |
popad ; no button pressed |
ret |
bch: |
push esi |
push edx |
mov eax,esi |
shl eax,4 |
add eax,edi |
;......................start 1/2 : modified by vhanla ............................. |
mov [buttonid],eax |
;......................end 1/2 : modified by vhanla ............................. |
; check that button is at top of windowing stack |
movzx ebx,word [eax] |
movzx ecx,word [0xC000 + ebx * 2] |
cmp ecx,[0x3004] |
jne buttonnewcheck |
; check that button start is inside window x/y end |
movzx ebx,word [eax+0] |
shl ebx,5 |
test [ebx+window_data+WDATA.fl_wstate],WSTATE_MINIMIZED |
jnz buttonnewcheck |
; add ebx,window_data |
; mov ecx,[window_data+ebx+8] ; window end X |
movzx edx,word [eax+4] ; button start X |
cmp edx, [window_data+ebx+8] ;ecx |
jge buttonnewcheck |
; mov ecx,[window_data+ebx+12] ; window end Y |
movzx edx, word [eax+8] ; button start Y |
cmp edx, [window_data+ebx+12] ;ecx |
jge buttonnewcheck |
; check coordinates |
; mouse x >= button x ? |
movzx ebx,word [eax+0] |
shl ebx,5 |
add ebx,window_data |
movzx ecx,word [ebx+0] ; window x start |
movzx edx,word [eax+4] ; button x start |
add edx,ecx |
mov cx,[0xfb0a] |
cmp edx,ecx |
jg buttonnewcheck |
movzx ebx,word [eax+6] ; button x size |
add edx,ebx |
cmp ecx,edx |
jg buttonnewcheck |
; mouse y >= button y ? |
movzx ebx,word [eax+0] |
shl ebx,5 |
add ebx,window_data |
movzx ecx,word [ebx+4] ; window y start |
movzx edx,word [eax+8] ; button y start |
add edx,ecx |
mov cx,[0xfb0c] |
cmp edx,ecx |
jg buttonnewcheck |
movzx ebx,word [eax+10] ; button y size |
add edx,ebx |
cmp ecx,edx |
jg buttonnewcheck |
; mouse on button |
pop edx |
pop esi |
mov bx,[eax+0xc] ; button id : bits 16-31 |
shl ebx,16 |
mov bx,[eax+2] ; button id : bits 00-16 |
push ebx |
mov [0xfb44],byte 1 ; no mouse down checks |
call find_pressed_button_frames |
call negativebutton |
pushad |
cbwaitmouseup: |
call checkidle |
call [draw_pointer] |
pushad |
call stack_handler |
popad |
cmp [0xfb40],byte 0 ; mouse buttons pressed ? |
jnz cbwaitmouseup |
popad |
call negativebutton |
mov [0xfff4],byte 0 ; no mouse background |
mov [0xfff5],byte 0 ; draw mouse |
;..................................... start 2/2 : modified by vhanla ............................. |
; check coordinates |
jmp afterbuttonid |
buttonid dd 0x0 ;here a will backup the eax value |
afterbuttonid: |
pusha |
; mouse x >= button x ? |
movzx ebx,word [eax+0] |
shl ebx,5 |
add ebx,window_data |
movzx ecx,word [ebx+0] ; window x start |
movzx edx,word [eax+4] ; button x start |
add edx,ecx |
mov cx,[0xfb0a] |
cmp edx,ecx |
jg no_on_button ;if we release the pointer out of the button area |
movzx ebx,word [eax+6] ; button x size |
add edx,ebx |
cmp ecx,edx |
jg no_on_button |
; mouse y >= button y ? |
movzx ebx,word [eax+0] |
shl ebx,5 |
add ebx,window_data |
movzx ecx,word [ebx+4] ; window y start |
movzx edx,word [eax+8] ; button y start |
add edx,ecx |
mov cx,[0xfb0c] |
cmp edx,ecx |
jg no_on_button |
movzx ebx,word [eax+10] ; button y size |
add edx,ebx |
cmp ecx,edx |
jg no_on_button |
popa |
mov [0xf500],byte 1 ; no of buttons in buffer |
pop ebx |
mov [0xf501],ebx ; lets put the button id in buffer |
push ebx |
pusha |
jmp yes_on_button |
no_on_button: |
mov [0xf500],byte 0 ; no of buttons in buffer |
yes_on_button: |
mov [0xfb44],byte 0 ; mouse down -> do not draw |
popa |
pop ebx |
popa |
ret |
;..................................... end 2/2 : modified by vhanla ................................ |
/kernel/tags/kolibri0.5.3.0/gui/skincode.inc |
---|
0,0 → 1,422 |
include "skindata.inc" |
skin_data = 0x00778000 |
load_skin_file: |
; eax = filename |
; edx = destination |
mov ebx,1 |
or ecx,-1 |
mov esi,12 |
call fileread |
ret |
struct SKIN_HEADER |
.ident dd ? |
.version dd ? |
.params dd ? |
.buttons dd ? |
.bitmaps dd ? |
ends |
struct SKIN_PARAMS |
.skin_height dd ? |
.margin.right dw ? |
.margin.left dw ? |
.margin.bottom dw ? |
.margin.top dw ? |
.colors.inner dd ? |
.colors.outer dd ? |
.colors.frame dd ? |
.colors_1.inner dd ? |
.colors_1.outer dd ? |
.colors_1.frame dd ? |
.dtp.size dd ? |
.dtp.data db 40 dup (?) |
ends |
struct SKIN_BUTTONS |
.type dd ? |
.pos: |
.left dw ? |
.top dw ? |
.size: |
.width dw ? |
.height dw ? |
ends |
struct SKIN_BITMAPS |
.kind dw ? |
.type dw ? |
.data dd ? |
ends |
load_skin: |
pushad |
mov [_skinh],22 |
mov eax,_skin_file |
mov edx,skin_data |
mov [edx+SKIN_HEADER.ident],'????' |
call load_skin_file |
cmp eax,ERROR_SUCCESS |
je @f |
cmp eax,ERROR_END_OF_FILE |
jne .exit |
@@: call parse_skin_data |
.exit: |
popad |
ret |
parse_skin_data: |
mov ebp,skin_data |
cmp [ebp+SKIN_HEADER.ident],'SKIN' |
jne .exit |
mov edi,skin_udata |
mov ecx,(skin_udata.end-skin_udata)/4 |
xor eax,eax |
cld |
rep stosd |
mov ebx,[ebp+SKIN_HEADER.params] |
add ebx,skin_data |
mov eax,[ebx+SKIN_PARAMS.skin_height] |
mov [_skinh],eax |
mov eax,[ebx+SKIN_PARAMS.colors.inner] |
mov [skin_active.colors.inner],eax |
mov eax,[ebx+SKIN_PARAMS.colors.outer] |
mov [skin_active.colors.outer],eax |
mov eax,[ebx+SKIN_PARAMS.colors.frame] |
mov [skin_active.colors.frame],eax |
mov eax,[ebx+SKIN_PARAMS.colors_1.inner] |
mov [skin_inactive.colors.inner],eax |
mov eax,[ebx+SKIN_PARAMS.colors_1.outer] |
mov [skin_inactive.colors.outer],eax |
mov eax,[ebx+SKIN_PARAMS.colors_1.frame] |
mov [skin_inactive.colors.frame],eax |
lea esi,[ebx+SKIN_PARAMS.dtp.data] |
mov edi,common_colours |
mov ecx,[ebx+SKIN_PARAMS.dtp.size] |
and ecx,127 |
rep movsb |
mov eax,dword[ebx+SKIN_PARAMS.margin.right] |
mov dword[_skinmargins+0],eax |
mov eax,dword[ebx+SKIN_PARAMS.margin.bottom] |
mov dword[_skinmargins+4],eax |
mov ebx,[ebp+SKIN_HEADER.bitmaps] |
add ebx,skin_data |
.lp1: cmp dword[ebx],0 |
je .end_bitmaps |
movzx eax,[ebx+SKIN_BITMAPS.kind] |
movzx ecx,[ebx+SKIN_BITMAPS.type] |
dec eax |
jnz .not_left |
xor eax,eax |
mov edx,skin_active.left.data |
or ecx,ecx |
jnz @f |
mov edx,skin_inactive.left.data |
@@: jmp .next_bitmap |
.not_left: |
dec eax |
jnz .not_oper |
mov esi,[ebx+SKIN_BITMAPS.data] |
add esi,skin_data |
mov eax,[esi+0] |
neg eax |
mov edx,skin_active.oper.data |
or ecx,ecx |
jnz @f |
mov edx,skin_inactive.oper.data |
@@: jmp .next_bitmap |
.not_oper: |
dec eax |
jnz .not_base |
mov eax,[skin_active.left.width] |
mov edx,skin_active.base.data |
or ecx,ecx |
jnz @f |
mov eax,[skin_inactive.left.width] |
mov edx,skin_inactive.base.data |
@@: jmp .next_bitmap |
.not_base: |
add ebx,8 |
jmp .lp1 |
.next_bitmap: |
mov ecx,[ebx+SKIN_BITMAPS.data] |
add ecx,skin_data |
mov [edx+4],eax |
mov eax,[ecx+0] |
mov [edx+8],eax |
add ecx,8 |
mov [edx+0],ecx |
add ebx,8 |
jmp .lp1 |
.end_bitmaps: |
mov ebx,[ebp+SKIN_HEADER.buttons] |
add ebx,skin_data |
.lp2: cmp dword[ebx],0 |
je .end_buttons |
mov eax,[ebx+SKIN_BUTTONS.type] |
dec eax |
jnz .not_close |
mov edx,skin_btn_close |
jmp .next_button |
.not_close: |
dec eax |
jnz .not_minimize |
mov edx,skin_btn_minimize |
jmp .next_button |
.not_minimize: |
add ebx,12 |
jmp .lp2 |
.next_button: |
movsx eax,[ebx+SKIN_BUTTONS.left] |
mov [edx+SKIN_BUTTON.left],eax |
movsx eax,[ebx+SKIN_BUTTONS.top] |
mov [edx+SKIN_BUTTON.top],eax |
movsx eax,[ebx+SKIN_BUTTONS.width] |
mov [edx+SKIN_BUTTON.width],eax |
movsx eax,[ebx+SKIN_BUTTONS.height] |
mov [edx+SKIN_BUTTON.height],eax |
add ebx,12 |
jmp .lp2 |
.end_buttons: |
.exit: |
ret |
sys_putimage_with_check: |
or ebx,ebx |
jz @f |
call sys_putimage |
@@: ret |
drawwindow_IV: |
;param1 - aw_yes |
pusha |
push edx |
mov edi,[esp] ; RECTANGLE |
mov ebp,skin_active |
cmp byte [esp+32+4+4],0 |
jne @f |
mov ebp,skin_inactive |
@@: |
mov eax,[edi+0] |
shl eax,16 |
mov ax,[edi+0] |
add ax,[edi+8] |
mov ebx,[edi+4] |
shl ebx,16 |
mov bx,[edi+4] |
add bx,[edi+12] |
; mov esi,[edi+24] |
; shr esi,1 |
; and esi,0x007f7f7f |
mov esi,[ebp+SKIN_DATA.colors.outer] |
call draw_rectangle |
mov ecx,3 |
_dw3l: |
add eax,1*65536-1 |
add ebx,1*65536-1 |
test ax,ax |
js no_skin_add_button |
test bx,bx |
js no_skin_add_button |
mov esi,[ebp+SKIN_DATA.colors.frame] ;[edi+24] |
call draw_rectangle |
dec ecx |
jnz _dw3l |
mov esi,[ebp+SKIN_DATA.colors.inner] |
add eax,1*65536-1 |
add ebx,1*65536-1 |
test ax,ax |
js no_skin_add_button |
test bx,bx |
js no_skin_add_button |
call draw_rectangle |
cmp dword[skin_data],'SKIN' |
je @f |
xor eax,eax |
xor ebx,ebx |
mov esi,[esp] |
mov ecx,[esi+8] |
inc ecx |
mov edx,[_skinh] |
mov edi,[common_colours+4] ; standard grab color |
call [drawbar] |
jmp draw_clientbar |
@@: |
mov esi,[esp] |
mov eax,[esi+8] ; window width |
mov edx,[ebp+SKIN_DATA.left.left] |
shl edx,16 |
mov ecx,[ebp+SKIN_DATA.left.width] |
shl ecx,16 |
add ecx,[_skinh] |
mov ebx, [ebp+SKIN_DATA.left.data] |
call sys_putimage_with_check |
mov esi,[esp] |
mov eax,[esi+8] |
sub eax,[ebp+SKIN_DATA.left.width] |
sub eax,[ebp+SKIN_DATA.oper.width] |
cmp eax,[ebp+SKIN_DATA.base.left] |
jng non_base |
xor edx,edx |
mov ecx,[ebp+SKIN_DATA.base.width] |
jecxz non_base |
div ecx |
inc eax |
mov ebx,[ebp+SKIN_DATA.base.data] |
mov ecx,[ebp+SKIN_DATA.base.width] |
shl ecx,16 |
add ecx,[_skinh] |
mov edx,[ebp+SKIN_DATA.base.left] |
sub edx,[ebp+SKIN_DATA.base.width] |
shl edx,16 |
baseskinloop: |
shr edx,16 |
add edx,[ebp+SKIN_DATA.base.width] |
shl edx,16 |
push eax ebx ecx edx |
call sys_putimage_with_check |
pop edx ecx ebx eax |
dec eax |
jnz baseskinloop |
non_base: |
mov esi,[esp] |
mov edx,[esi+8] |
sub edx,[ebp+SKIN_DATA.oper.width] |
inc edx |
shl edx,16 |
mov ebx,[ebp+SKIN_DATA.oper.data] |
mov ecx,[ebp+SKIN_DATA.oper.width] |
shl ecx,16 |
add ecx,[_skinh] |
call sys_putimage_with_check |
draw_clientbar: |
mov esi,[esp] |
mov edx,[esi+04] ; WORK AREA |
add edx,21+5 |
mov ebx,[esi+04] |
add ebx,[esi+12] |
cmp edx,ebx |
jg _noinside2 |
mov eax,5 |
mov ebx,[_skinh] |
mov ecx,[esi+8] |
mov edx,[esi+12] |
sub ecx,4 |
sub edx,4 |
mov edi,[esi+16] |
call [drawbar] |
_noinside2: |
cmp dword[skin_data],'SKIN' |
jne no_skin_add_button |
;* close button |
mov edi,[0xfe88] |
movzx eax,word [edi] |
cmp eax,1000 |
jge no_skin_add_button |
inc eax |
mov [edi],ax |
shl eax,4 |
add eax,edi |
mov bx,[0x3000] |
mov [eax],bx |
add eax,2 ; save button id number |
mov bx,1 |
mov [eax],bx |
add eax,2 ; x start |
xor ebx,ebx |
cmp [skin_btn_close.left],0 |
jge _bCx_at_right |
mov ebx,[esp] |
mov ebx,[ebx+8] |
inc ebx |
_bCx_at_right: |
add ebx,[skin_btn_close.left] |
mov [eax],bx |
add eax,2 ; x size |
mov ebx,[skin_btn_close.width] |
dec ebx |
mov [eax],bx |
add eax,2 ; y start |
mov ebx,[skin_btn_close.top] |
mov [eax],bx |
add eax,2 ; y size |
mov ebx,[skin_btn_close.height] |
dec ebx |
mov [eax],bx |
;* minimize button |
mov edi,[0xfe88] |
movzx eax,word [edi] |
cmp eax,1000 |
jge no_skin_add_button |
inc eax |
mov [edi],ax |
shl eax,4 |
add eax,edi |
mov bx,[0x3000] |
mov [eax],bx |
add eax,2 ; save button id number |
mov bx,65535 ;999 |
mov [eax],bx |
add eax,2 ; x start |
xor ebx,ebx |
cmp [skin_btn_minimize.left],0 |
jge _bMx_at_right |
mov ebx,[esp] |
mov ebx,[ebx+8] |
inc ebx |
_bMx_at_right: |
add ebx,[skin_btn_minimize.left] |
mov [eax],bx |
add eax,2 ; x size |
mov ebx,[skin_btn_minimize.width] |
dec ebx |
mov [eax],bx |
add eax,2 ; y start |
mov ebx,[skin_btn_minimize.top] |
mov [eax],bx |
add eax,2 ; y size |
mov ebx,[skin_btn_minimize.height] |
dec ebx |
mov [eax],bx |
no_skin_add_button: |
add esp,4 |
popa |
ret 4 |
/kernel/tags/kolibri0.5.3.0/gui/skindata.inc |
---|
0,0 → 1,52 |
; |
; WINDOW SKIN DATA |
; |
iglobal |
_skin_file_default db 'DEFAULT SKN',0 |
endg |
struct SKIN_DATA |
.colors.inner dd ? |
.colors.outer dd ? |
.colors.frame dd ? |
.left.data dd ? |
.left.left dd ? |
.left.width dd ? |
.oper.data dd ? |
.oper.left dd ? |
.oper.width dd ? |
.base.data dd ? |
.base.left dd ? |
.base.width dd ? |
ends |
struct SKIN_BUTTON |
.left dd ? |
.top dd ? |
.width dd ? |
.height dd ? |
ends |
uglobal |
align 4 |
skin_udata: |
_skinh dd ? |
_skinmargins rw 4 |
skin_btn_close SKIN_BUTTON |
skin_btn_minimize SKIN_BUTTON |
skin_active SKIN_DATA |
skin_inactive SKIN_DATA |
_skin_file rb 256 |
align 4 |
skin_udata.end: |
endg |
/kernel/tags/kolibri0.5.3.0/gui/event.inc |
---|
0,0 → 1,206 |
sys_getevent: |
call get_event_for_app |
mov [esp+36],eax |
ret |
align 4 |
sys_wait_event_timeout: |
mov ebx,[timer_ticks] |
add ebx,eax |
cmp ebx,[timer_ticks] |
jna .swfet2 |
.swfet1: |
call get_event_for_app |
test eax,eax |
jne .eventoccur_time |
call change_task |
cmp ebx,[timer_ticks] |
jg .swfet1 |
.swfet2: |
xor eax,eax |
.eventoccur_time: |
mov [esp+36],eax |
ret |
align 4 |
sys_waitforevent: |
call get_event_for_app |
test eax,eax |
jne eventoccur |
newwait: |
mov eax, [0x3010] |
mov [eax+0xA], byte 5 |
call change_task |
mov eax, [event_sched] |
eventoccur: |
mov [esp+36],eax |
ret |
get_event_for_app: |
pushad |
mov edi,[0x3010] ; WINDOW REDRAW |
test [edi],dword 1 |
jz no_eventoccur1 |
;mov edi,[0x3010] |
cmp [edi-twdw+31],byte 0 |
je no_eventoccur1 |
popad |
mov eax,1 |
ret |
no_eventoccur1: |
;mov edi,[0x3010] ; KEY IN BUFFER |
test [edi],dword 2 |
jz no_eventoccur2 |
mov ecx, [0x3000] |
movzx edx,word [0xC000+ecx*2] |
mov eax, [0x3004] |
cmp eax,edx |
jne no_eventoccur2 |
cmp [0xf400],byte 0 |
je no_eventoccur2 |
popad |
mov eax,2 |
ret |
no_eventoccur2: |
;mov edi,[0x3010] ; BUTTON IN BUFFER |
test [edi],dword 4 |
jz no_eventoccur3 |
cmp [0xf500],byte 0 |
je no_eventoccur3 |
mov ecx, [0x3000] |
movzx edx, word [0xC000+ecx*2] |
mov eax, [0x3004] |
cmp eax,edx |
jnz no_eventoccur3 |
popad |
mov eax,[0xf501] |
cmp eax,65535 |
je no_event_1 |
mov eax,3 |
ret |
no_event_1: |
mov [window_minimize],1 |
mov [0xf500],byte 0 |
xor eax, eax |
ret |
no_eventoccur3: |
;mov edi,[0x3010] ; mouse event |
test [edi],dword 00100000b |
jz no_mouse_event |
mov eax,[0x3000] |
shl eax,8 |
test [eax+0x80000+0xA8],dword 00100000b |
jz no_mouse_event |
and [eax+0x80000+0xA8],dword 0xffffffff-00100000b |
popad |
mov eax,6 |
ret |
no_mouse_event: |
;mov edi,[0x3010] ; DESKTOP BACKGROUND REDRAW |
test [edi],dword 16 |
jz no_eventoccur5 |
cmp [0xfff0],byte 2 |
jnz no_eventoccur5 |
popad |
mov eax,5 |
ret |
no_eventoccur5: |
;mov edi,[0x3010] ; IPC |
test [edi],dword 01000000b |
jz no_ipc |
mov eax,[0x3000] |
shl eax,8 |
test [eax+0x80000+0xA8],dword 01000000b |
jz no_ipc |
and [eax+0x80000+0xA8],dword 0xffffffff-01000000b |
popad |
mov eax,7 |
ret |
no_ipc: |
;mov edi,[0x3010] ; STACK |
test [edi],dword 10000000b |
jz no_stack_event |
mov eax,[0x3000] |
shl eax,8 |
test [eax+0x80000+0xA8],dword 10000000b |
jz no_stack_event |
and [eax+0x80000+0xA8],dword 0xffffffff-10000000b |
popad |
mov eax,8 |
ret |
no_stack_event: |
test byte [edi+1], 1 ; DEBUG |
jz no_debug_event |
mov eax, [0x3000] |
shl eax, 8 |
test [eax+0x80000+0xA8+1], byte 1 |
jz no_debug_event |
and byte [eax+0x80000+0xA8+1], not 1 |
popad |
mov eax, 9 |
ret |
no_debug_event: |
cmp dword [edi], 0xFFFF |
jbe no_events |
mov esi,0x2e0000 ; IRQ'S AND DATA |
mov ebx,0x00010000 |
xor ecx, ecx |
irq_event_test: |
mov edi,[0x3010] |
test [edi],ebx |
jz no_irq_event |
mov edi,ecx |
shl edi,2 |
add edi,irq_owner |
mov edx,[edi] |
mov eax,[0x3010] |
mov eax,[eax+0x4] |
cmp edx,eax |
jne no_irq_event |
cmp [esi],dword 0 |
jz no_irq_event |
mov eax,ecx |
add eax,16 |
mov [esp+28],eax |
popad |
ret |
no_irq_event: |
add esi,0x1000 |
shl ebx,1 |
inc ecx |
cmp ecx,16 |
jb irq_event_test |
no_events: |
popad |
xor eax, eax |
ret |
/kernel/tags/kolibri0.5.3.0/gui/font.inc |
---|
0,0 → 1,151 |
align 4 |
dtext: |
; eax x & y |
; ebx font ( 0xX0000000 ) & color ( 0x00RRGGBB ) |
; ecx start of text |
; edx length |
; edi 1 force |
test ebx,0x10000000 |
jnz dtext2 |
pushad |
mov esi, edx |
and esi, 0xff |
test esi, esi ; zero length ? |
jnz @f |
popad |
ret |
@@: |
align 4 |
.letnew: |
push eax ecx edx |
movzx ebx,ax |
shr eax,16 |
movzx edx,byte [ecx] |
mov ecx,[esp+3*4+32-16] |
call drawletter |
pop edx ecx eax |
add eax,6*65536 |
inc ecx |
dec edx |
jnz .letnew |
popad |
ret |
align 4 |
drawletter: |
;eax - x |
;ebx - y |
;ecx - color |
;edx - ascii code |
pushad |
call [disable_mouse] |
mov esi,9 |
lea ebp,[0x3F600+8*edx+edx] |
.symloop: |
push esi |
mov dl,byte [ebp] |
mov esi,8 |
.pixloop: |
test dl,1 |
jz .nopix |
call [putpixel] |
.nopix: |
shr dl,1 |
inc eax |
dec esi |
jnz .pixloop |
sub eax,8 |
inc ebx |
inc ebp |
pop esi |
dec esi |
jnz .symloop |
popad |
ret |
dtext2: |
; eax x & y |
; ebx color |
; ecx start of text |
; edx length |
; edi 1 force |
pushad |
mov esi,edx |
and esi,0xff |
test esi,esi ; zero length ? |
jnz @f |
popad |
ret |
@@: |
align 4 |
letnew2: |
push ecx |
push edx |
movzx ebx,ax |
shr eax,16 |
movzx edx,byte [ecx] |
mov ecx,[esp+2*4+32-16] |
call drawletter2 |
shl eax,16 |
add eax,ebx |
pop edx |
pop ecx |
inc ecx |
dec edx |
jnz letnew2 |
popad |
ret |
align 4 |
drawletter2: |
;eax - x |
;ebx - y |
;ecx - color |
;edx - symbol |
;edi - force? |
;result - eax=eax+sym_size |
pushad |
call [disable_mouse] |
shl edx,1 |
mov esi,9 |
lea ebp,[0x3EC00+4*edx+edx+1] |
.symloop: |
push esi |
mov dl,byte [ebp] |
xor esi,esi |
.pixloop: |
test dl,1 |
jz .nopix |
call [putpixel] |
.nopix: |
shr dl,1 |
inc esi |
inc eax |
cmp esi,8 |
jl .pixloop |
sub eax,8 |
inc ebx |
pop esi |
inc ebp |
dec esi |
jnz .symloop |
movzx edx,byte [ebp-10] |
add [esp+32-4],edx |
popad |
ret |
/kernel/tags/kolibri0.5.3.0/gui/mouse.inc |
---|
0,0 → 1,243 |
;mouseunder: |
; times 16*24 dd 0 |
label mouseunder dword at 0x6900 |
iglobal |
mousepointer: |
db 0x00,0x00,0x00,0x74,0x74,0x74,0x6e,0x6e,0x6e,0x6f |
db 0x6f,0x6f,0x71,0x71,0x71,0x75,0x75,0x75,0x79,0x79 |
db 0x79,0x7c,0x7c,0x7c,0x7e,0x7e,0x7e,0x80,0x80,0x80 |
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80 |
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80 |
db 0x80,0x00,0x00,0x00,0x63,0x63,0x63,0x63,0x63,0x63 |
db 0x66,0x66,0x66,0x6c,0x6c,0x6c,0x72,0x72,0x72,0x78 |
db 0x78,0x78,0x7c,0x7c,0x7c,0x7e,0x7e,0x7e,0x80,0x80 |
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80 |
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xc0 |
db 0xc0,0xc0,0x00,0x00,0x00,0x54,0x54,0x54,0x57,0x57 |
db 0x57,0x5f,0x5f,0x5f,0x68,0x68,0x68,0x71,0x71,0x71 |
db 0x77,0x77,0x77,0x7c,0x7c,0x7c,0x7e,0x7e,0x7e,0x80 |
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80 |
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xc0,0xc0,0xc0 |
db 0xc0,0xc0,0xc0,0x00,0x00,0x00,0x47,0x47,0x47,0x50 |
db 0x50,0x50,0x5b,0x5b,0x5b,0x67,0x67,0x67,0x70,0x70 |
db 0x70,0x77,0x77,0x77,0x7c,0x7c,0x7c,0x7e,0x7e,0x7e |
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80 |
db 0x80,0x80,0x80,0x80,0x80,0xff,0xff,0xff,0xc0,0xc0 |
db 0xc0,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x3f,0x3f,0x3f |
db 0x4b,0x4b,0x4b,0x59,0x59,0x59,0x66,0x66,0x66,0x70 |
db 0x70,0x70,0x77,0x77,0x77,0x7c,0x7c,0x7c,0x7e,0x7e |
db 0x7e,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80 |
db 0x80,0x80,0x80,0xff,0xff,0xff,0xc0,0xc0,0xc0,0xc0 |
db 0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x3a,0x3a |
db 0x3a,0x49,0x49,0x49,0x59,0x59,0x59,0x66,0x66,0x66 |
db 0x70,0x70,0x70,0x77,0x77,0x77,0x7c,0x7c,0x7c,0x7e |
db 0x7e,0x7e,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80 |
db 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0xc0,0xc0 |
db 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x39 |
db 0x39,0x39,0x49,0x49,0x49,0x59,0x59,0x59,0x66,0x66 |
db 0x66,0x71,0x71,0x71,0x78,0x78,0x78,0x7c,0x7c,0x7c |
db 0x7e,0x7e,0x7e,0x80,0x80,0x80,0x80,0x80,0x80,0xff |
db 0xff,0xff,0xff,0xff,0xff,0xc0,0xc0,0xc0,0xc0,0xc0 |
db 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0x00,0x00 |
db 0x39,0x39,0x39,0x4a,0x4a,0x4a,0x5a,0x5a,0x5a,0x68 |
db 0x68,0x68,0x72,0x72,0x72,0x79,0x79,0x79,0x7d,0x7d |
db 0x7d,0x7f,0x7f,0x7f,0x80,0x80,0x80,0xff,0xff,0xff |
db 0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0xc0,0xc0,0xc0 |
db 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0x00 |
db 0x00,0x3c,0x3c,0x3c,0x4e,0x4e,0x4e,0x5e,0x5e,0x5e |
db 0x6b,0x6b,0x6b,0x75,0x75,0x75,0x7a,0x7a,0x7a,0x7e |
db 0x7e,0x7e,0x80,0x80,0x80,0xff,0xff,0xff,0xff,0xff |
db 0xff,0xff,0xff,0xff,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0 |
db 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00 |
db 0x00,0x00,0x43,0x43,0x43,0x55,0x55,0x55,0x64,0x64 |
db 0x64,0x70,0x70,0x70,0x78,0x78,0x78,0x7d,0x7d,0x7d |
db 0x80,0x80,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xc0 |
db 0xc0,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x4e,0x4e,0x4e,0x5f,0x5f,0x5f,0x6d |
db 0x6d,0x6d,0x76,0x76,0x76,0x7c,0x7c,0x7c,0x80,0x80 |
db 0x80,0xff,0xff,0xff,0xc0,0xc0,0xc0,0x00,0x00,0x00 |
db 0xff,0xff,0xff,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x14 |
db 0x14,0x14,0x1b,0x1b,0x1b,0x29,0x29,0x29,0x3a,0x3a |
db 0x3a,0x4c,0x4c,0x4c,0x5d,0x5d,0x5d,0x6c,0x6c,0x6c |
db 0x75,0x75,0x75,0x7b,0x7b,0x7b,0x80,0x80,0x80,0xc0 |
db 0xc0,0xc0,0x00,0x00,0x00,0x2f,0x2f,0x2f,0x80,0x80 |
db 0x80,0xff,0xff,0xff,0xc0,0xc0,0xc0,0x00,0x00,0x00 |
db 0x21,0x21,0x21,0x2e,0x2e,0x2e,0x40,0x40,0x40,0x52 |
db 0x52,0x52,0x62,0x62,0x62,0x6f,0x6f,0x6f,0x77,0x77 |
db 0x77,0x7c,0x7c,0x7c,0x80,0x80,0x80,0x00,0x00,0x00 |
db 0x47,0x47,0x47,0x3b,0x3b,0x3b,0x80,0x80,0x80,0xff |
db 0xff,0xff,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x25,0x25 |
db 0x25,0x30,0x30,0x30,0x42,0x42,0x42,0x54,0x54,0x54 |
db 0x64,0x64,0x64,0x70,0x70,0x70,0x78,0x78,0x78,0x7d |
db 0x7d,0x7d,0x00,0x00,0x00,0x62,0x62,0x62,0x52,0x52 |
db 0x52,0x4a,0x4a,0x4a,0x43,0x43,0x43,0x80,0x80,0x80 |
db 0xff,0xff,0xff,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x33 |
db 0x33,0x33,0x42,0x42,0x42,0x54,0x54,0x54,0x64,0x64 |
db 0x64,0x71,0x71,0x71,0x79,0x79,0x79,0x7d,0x7d,0x7d |
db 0x72,0x72,0x72,0x6b,0x6b,0x6b,0x5f,0x5f,0x5f,0x5a |
db 0x5a,0x5a,0x54,0x54,0x54,0x80,0x80,0x80,0xff,0xff |
db 0xff,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x35,0x35,0x35 |
db 0x41,0x41,0x41,0x53,0x53,0x53,0x63,0x63,0x63,0x70 |
db 0x70,0x70,0x78,0x78,0x78,0x7d,0x7d,0x7d,0x77,0x77 |
db 0x77,0x73,0x73,0x73,0x6c,0x6c,0x6c,0x68,0x68,0x68 |
db 0x62,0x62,0x62,0x5a,0x5a,0x5a,0x80,0x80,0x80,0xff |
db 0xff,0xff,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x41,0x41 |
db 0x41,0x52,0x52,0x52,0x62,0x62,0x62,0x6f,0x6f,0x6f |
db 0x78,0x78,0x78,0x7d,0x7d,0x7d,0x7b,0x7b,0x7b,0x79 |
db 0x79,0x79,0x74,0x74,0x74,0x72,0x72,0x72,0x6e,0x6e |
db 0x6e,0x66,0x66,0x66,0x80,0x80,0x80,0xc0,0xc0,0xc0 |
db 0xc0,0xc0,0xc0,0x00,0x00,0x00,0x44,0x44,0x44,0x52 |
db 0x52,0x52,0x62,0x62,0x62,0x6e,0x6e,0x6e,0x77,0x77 |
db 0x77,0x7c,0x7c,0x7c,0x7e,0x7e,0x7e,0x7c,0x7c,0x7c |
db 0x7a,0x7a,0x7a,0x79,0x79,0x79,0x75,0x75,0x75,0x6f |
db 0x6f,0x6f,0x65,0x65,0x65,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x48,0x48,0x48,0x4b,0x4b,0x4b,0x56,0x56,0x56 |
db 0x65,0x65,0x65,0x70,0x70,0x70,0x78,0x78,0x78,0x7d |
db 0x7d,0x7d,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7e |
db 0x7e,0x7d,0x7d,0x7d,0x7a,0x7a,0x7a,0x76,0x76,0x76 |
db 0x6f,0x6f,0x6f,0x65,0x65,0x65,0x5c,0x5c,0x5c,0x56 |
db 0x56,0x56,0x58,0x58,0x58,0x60,0x60,0x60,0x6b,0x6b |
db 0x6b,0x73,0x73,0x73,0x7a,0x7a,0x7a,0x7d,0x7d,0x7d |
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f |
db 0x7f,0x7f,0x7d,0x7d,0x7d,0x7a,0x7a,0x7a,0x76,0x76 |
db 0x76,0x70,0x70,0x70,0x6a,0x6a,0x6a,0x66,0x66,0x66 |
db 0x66,0x66,0x66,0x6c,0x6c,0x6c,0x72,0x72,0x72,0x78 |
db 0x78,0x78,0x7c,0x7c,0x7c,0x7e,0x7e,0x7e,0x80,0x80 |
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80 |
db 0x7f,0x7f,0x7f,0x7d,0x7d,0x7d,0x7b,0x7b,0x7b,0x77 |
db 0x77,0x77,0x73,0x73,0x73,0x71,0x71,0x71,0x71,0x71 |
db 0x71,0x74,0x74,0x74,0x78,0x78,0x78,0x7b,0x7b,0x7b |
db 0x7d,0x7d,0x7d,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80 |
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80 |
db 0x80,0x7f,0x7f,0x7f,0x7d,0x7d,0x7d,0x7c,0x7c,0x7c |
db 0x7a,0x7a,0x7a,0x78,0x78,0x78,0x78,0x78,0x78,0x7a |
db 0x7a,0x7a,0x7c,0x7c,0x7c,0x7e,0x7e,0x7e,0x7f,0x7f |
db 0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80 |
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80 |
db 0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e |
db 0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e |
db 0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80 |
db 0x80,0x80 |
mousepointer1: |
db 0xff,0xff,0xff,0x06,0x06,0x06,0x0a,0x0a |
db 0x0a,0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0xff,0xff,0xff,0xff,0xff,0xff,0x19,0x19,0x19,0x16 |
db 0x16,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff |
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2e,0x2e,0x2e |
db 0x23,0x23,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff |
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f |
db 0x3f,0x29,0x29,0x29,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff |
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x47 |
db 0x47,0x47,0x2c,0x2c,0x2c,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff |
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff |
db 0x48,0x48,0x48,0x2c,0x2c,0x2c,0x16,0x16,0x16,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff |
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff |
db 0xff,0x48,0x48,0x48,0x2c,0x2c,0x2c,0x16,0x16,0x16 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff |
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff |
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff |
db 0xff,0xff,0x48,0x48,0x48,0x2c,0x2c,0x2c,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff |
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff |
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff |
db 0xff,0xff,0xff,0x48,0x48,0x48,0x2c,0x2c,0x2c,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff |
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff |
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff |
db 0xff,0xff,0xff,0xff,0x47,0x47,0x47,0x29,0x29,0x29 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff |
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff |
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff |
db 0xff,0xff,0xff,0xff,0xff,0x40,0x40,0x40,0x23,0x23 |
db 0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff |
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff |
db 0xff,0xaa,0xaa,0xaa,0x9f,0x9f,0x9f,0x8c,0x8c,0x8c |
db 0x70,0x70,0x70,0x4f,0x4f,0x4f,0x30,0x30,0x30,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff |
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x8f,0x8f,0x8f |
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff |
db 0xff,0xff,0x9c,0x9c,0x9c,0x87,0x87,0x87,0x6c,0x6c |
db 0x6c,0x4f,0x4f,0x4f,0x32,0x32,0x32,0x19,0x19,0x19 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff |
db 0xff,0xff,0x69,0x69,0x69,0x84,0x84,0x84,0xff,0xff |
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff |
db 0x92,0x92,0x92,0x79,0x79,0x79,0x59,0x59,0x59,0x3c |
db 0x3c,0x3c,0x24,0x24,0x24,0x11,0x11,0x11,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x37,0x37,0x37 |
db 0x5d,0x5d,0x5d,0x70,0x70,0x70,0x76,0x76,0x76,0xff |
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff |
db 0xff,0x75,0x75,0x75,0x51,0x51,0x51,0x31,0x31,0x31 |
db 0x19,0x19,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x16,0x16,0x16,0x2d,0x2d,0x2d,0x49,0x49 |
db 0x49,0x53,0x53,0x53,0x54,0x54,0x54,0xff,0xff,0xff |
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x78 |
db 0x78,0x78,0x54,0x54,0x54,0x30,0x30,0x30,0x16,0x16 |
db 0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x0f,0x0f,0x0f,0x1f,0x1f,0x1f,0x30,0x30,0x30,0x33 |
db 0x33,0x33,0x33,0x33,0x33,0x3b,0x3b,0x3b,0xff,0xff |
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff |
db 0x62,0x62,0x62,0x3b,0x3b,0x3b,0x1c,0x1c,0x1c,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08 |
db 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x24,0x24,0x24,0xff,0xff,0xff,0xff |
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6e,0x6e |
db 0x6e,0x48,0x48,0x48,0x25,0x25,0x25,0x0e,0x0e,0x0e |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x00 |
db 0x00,0x00,0x0a,0x0a,0x0a,0x09,0x09,0x09,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x29,0x29,0x29,0xff,0xff,0xff |
db 0xff,0xff,0xff,0x7c,0x7c,0x7c,0x71,0x71,0x71,0x50 |
db 0x50,0x50,0x2b,0x2b,0x2b,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x02,0x02,0x02,0x04,0x04,0x04,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x36,0x36,0x36,0x56,0x56 |
db 0x56,0x69,0x69,0x69,0x64,0x64,0x64,0x4a,0x4a,0x4a |
db 0x28,0x28,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x05,0x05,0x05 |
db 0x00,0x00,0x00,0x21,0x21,0x21,0x39,0x39,0x39,0x49 |
db 0x49,0x49,0x48,0x48,0x48,0x35,0x35,0x35,0x1d,0x1d |
db 0x1d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x1d,0x1d,0x1d,0x27,0x27,0x27 |
db 0x27,0x27,0x27,0x1d,0x1d,0x1d,0x0f,0x0f,0x0f,0x06 |
db 0x06,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
db 0x00,0x00,0x00,0x00 |
endg |