Subversion Repositories Kolibri OS

Compare Revisions

No changes between revisions

Regard whitespace Rev 2537 → Rev 2538

/data/Vortex86MX-eng/iconstrp.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/data/Vortex86MX-eng/Makefile
239,7 → 239,7
OTHER_FILES:=autorun.dat:AUTORUN.DAT \
background.gif:background.gif default.skn:DEFAULT.SKN \
e80:E80 graph:GRAPH hdread:HDREAD \
icons.dat:ICONS.DAT iconstrp.gif:ICONSTRP.GIF index_htm:INDEX.HTM \
icons.dat:ICONS.DAT iconstrp.png:ICONSTRP.PNG index_htm:INDEX.HTM \
kernel.mnt:KERNEL.MNT kerpack:KERPACK keymap.key:KEYMAP.KEY \
kuzkina.mid:KUZKINA.MID lang.inc:LANG.INC lang.ini:LANG.INI \
menu.dat:MENU.DAT \
/data/Vortex86MX-eng/iconstrp.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/data/eng/iconstrp.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/data/eng/Makefile
245,7 → 245,7
OTHER_FILES:=autorun.dat:AUTORUN.DAT \
background.gif:background.gif default.skn:DEFAULT.SKN \
e80:E80 graph:GRAPH hdread:HDREAD \
icons.dat:ICONS.DAT iconstrp.gif:ICONSTRP.GIF index_htm:INDEX.HTM \
icons.dat:ICONS.DAT iconstrp.png:ICONSTRP.PNG index_htm:INDEX.HTM \
kernel.mnt:KERNEL.MNT kerpack:KERPACK keymap.key:KEYMAP.KEY \
kuzkina.mid:KUZKINA.MID lang.inc:LANG.INC lang.ini:LANG.INI \
menu.dat:MENU.DAT \
/data/eng/iconstrp.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/data/new-stack/iconstrp.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/data/new-stack/Makefile
169,7 → 169,7
# Spaces should be represented as |.
OTHER_FILES:=autorun.dat:AUTORUN.DAT \
background.gif:background.gif default.skn:DEFAULT.SKN \
icons.dat:ICONS.DAT iconstrp.gif:ICONSTRP.GIF index_htm:INDEX.HTM \
icons.dat:ICONS.DAT iconstrp.png:ICONSTRP.PNG index_htm:INDEX.HTM \
kernel.mnt:KERNEL.MNT kerpack:KERPACK keymap.key:KEYMAP.KEY \
lang.inc:LANG.INC lang.ini:LANG.INI \
menu.dat:MENU.DAT \
/data/new-stack/iconstrp.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/data/rus/iconstrp.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/data/rus/Makefile
238,7 → 238,7
OTHER_FILES:=autorun.dat:AUTORUN.DAT \
background.gif:background.gif default.skn:DEFAULT.SKN \
e80:E80 graph:GRAPH hdread:HDREAD \
icons.dat:ICONS.DAT iconstrp.gif:ICONSTRP.GIF index_htm:INDEX.HTM \
icons.dat:ICONS.DAT iconstrp.png:ICONSTRP.PNG index_htm:INDEX.HTM \
kernel.mnt:KERNEL.MNT kerpack:KERPACK keymap.key:KEYMAP.KEY \
kuzkina.mid:KUZKINA.MID lang.inc:LANG.INC lang.ini:LANG.INI \
menu.dat:MENU.DAT \
/data/rus/iconstrp.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/programs/system/icon/trunk/gif_lite.inc
File deleted
/programs/system/icon/trunk/iconstrp.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Deleted: svn:mime-type
-application/octet-stream
\ No newline at end of property
/programs/system/icon/trunk/dat_area.inc
0,0 → 1,78
;------------------------------------------------------------------------------
align 4
bgrx rd 1
bgry rd 1
 
bgrxy rd 1
 
warea:
.by_x:
.right rw 1
.left rw 1
.by_y:
.bottom rw 1
.top rw 1
 
scrxy rd 1
 
icons rd 1
addr rd 1
 
cur_str rd 1
cur_band rd 1
 
icon_count rd 1
strip_file rd 1
 
icon_position: rd 1 ; [ebp-4] 'AA-F' or...
adress_of_icon_data: rd 1 ; [ebp+8]
adress_of_icon_data_2: rd 1 ; [ebp+8]
current_X: rd 1
current_Y: rd 1
current_X_mouse_thread: rd 1
current_Y_mouse_thread: rd 1
 
draw_area: rd 1
 
x_left: rd 1
x_right: rd 1
y_top: rd 1
y_bottom: rd 1
;------------------------------------------------------------------------------
curx1 rd 1
cury1 rd 1
curx2 rd 1
cury2 rd 1
click_pos rd 1
;------------------------------------------------------------------------------
align 4
redraw_all_icon: rb 1
;------------------------------------------------------------------------------
align 4
param_str rb 31
;------------------------------------------------------------------------------
align 4
procinfo process_information
;------------------------------------------------------------------------------
align 4
path:
icon_data:
rb 0x1000
;------------------------------------------------------------------------------
align 4
rb 0x400
stack_mouse_thread:
;------------------------------------------------------------------------------
align 4
rb 0x400
stack_area:
;------------------------------------------------------------------------------
align 4
I_Param:
rb 0x100 ; max 256
;------------------------------------------------------------------------------
align 4
library_path:
rb 0x1000
;------------------------------------------------------------------------------
/programs/system/icon/trunk/data.inc
0,0 → 1,199
;------------------------------------------------------------------------------
tl dd 8
yw: dd 51
ya dd 0
cur_btn dd 40
;------------------------------------------------------------------------------
; DATA AREA
bcolor dd 0x335599
;------------------------------------------------------------------------------
icon_table:
times 4 db 'xxxx xxxx'
times 2 db ' '
times 1 db ' '
times 2 db 'xxxx xxxx'
; times 1 db ' '
;------------------------------------------------------------------------------
icons_reserved:
times 9 db ' '
;------------------------------------------------------------------------------
if lang eq ru
text:
db 255,255,255,0, ' ’…Š‘’ '
db 255,255,255,0, ' Žƒ€ŒŒ€ '
db 255,255,255,0, ' €€Œ…’› '
db 255,255,255,0, ' ˆŒ…ˆ’œ '
db 255,255,255,0, ' „Ž€‚ˆ’œ “„€‹ˆ’œ '
db 0,0,0,0, '€†Œˆ’… € Ž‡ˆ–ˆž ˆŠŽŠˆ „‹Ÿ …„€Š’ˆŽ‚€ˆŸ '
db 'x' ; <- END MARKER, DONT DELETE
 
add_text db '€†Œˆ’… € Ž‡ˆ–ˆž …ˆ‘Ž‹œ‡“…ŒŽ‰ ˆŠŽŠˆ ',0
rem_text db '€†Œˆ’… € Ž‡ˆ–ˆž ˆ‘Ž‹œ‡“…ŒŽ‰ ˆŠŽŠˆ ',0
title db 'Œ¥­¥¤¦¥à ¨ª®­®ª',0
 
else if lang eq ge
text:
db 255,255,255,0, ' TITLE '
db 255,255,255,0, ' APP NAME '
db 255,255,255,0, ' PARAMETER '
db 255,255,255,0, ' ANWENDEN '
db 255,255,255,0, ' HINZUFUEGEN ENTFERNEN '
db 0,0,0,0, 'AUF BUTTON KLICKEN, UM ICON ZU EDITIEREN '
db 'x' ; <- END MARKER, DONT DELETE
 
add_text db 'AUF UNBENUTZTE ICONPOSITION KLICKEN ',0
rem_text db 'ICON ANKLICKEN; DAS GELOESCHT WERDEN SOLL ',0
title db 'Icon Manager',0
 
else
text:
db 255,255,255,0, ' TITLE '
db 255,255,255,0, ' APP NAME '
db 255,255,255,0, ' PARAMETERS '
db 255,255,255,0, ' APPLY CHANGES '
db 255,255,255,0, ' ADD ICON REMOVE ICON '
db 0,0,0,0, 'CLICK BUTTON ON ICON POSITION FOR EDIT '
db 'x' ; <- END MARKER, DONT DELETE
add_text db 'CLICK ON A NOT USED POSITION ',0
rem_text db 'CLICK ICON POSITION; YOU WANT TO DELETE ',0
title db 'Icon Manager',0
 
end if
;------------------------------------------------------------------------------
arrows db '</>'
;------------------------------------------------------------------------------
iconname:
db ICON_APP,0
;------------------------------------------------------------------------------
icon_default:
db 'AA-SYSXTREE-000-/RD/1/SYSXTREE '
db '- *'
db 13,10
;------------------------------------------------------------------------------
rep_text:
if lang eq ru
db '‡€—Šˆ - ˆ‡ , ‚›€ #'
else
db 'ICONS - OF , SELECTED'
end if
 
rep_text_len:
;------------------------------------------------------------------------------
align 4
finfo_start:
dd 7
dd 0
.params dd 0
dd 0
dd 0
db 0
dd finfo.path
;------------------------------------------------------------------------------
align 4
finfo:
dd 5
dd 0
dd 0
.size dd 0
.point dd procinfo
.path:
db ICON_STRIP,0
rb 31-($-.path)
;------------------------------------------------------------------------------
align 4
positions dd 3,16,47
str_lens db 8,30,30
 
current_icon dd icon_data
 
iconlst db ICONS_DAT,0
 
;image dd image_area
;------------------------------------------------------------------------------
; not change this section!!!
; start section
;------------------------------------------------------------------------------
align 4
image_file dd 0 ;+0
raw_pointer dd 0 ;+4
return_code dd 0 ;+8
img_size dd 0 ;+12
deflate_unpack dd 0 ;+16 ; not use for scaling
raw_pointer_2 dd 0 ;+20 ; not use for scaling
;------------------------------------------------------------------------------
; end section
;------------------------------------------------------------------------------
system_dir_CnvPNG db '/sys/lib/cnv_png.obj',0
system_dir_UNPACK db '/sys/lib/archiver.obj',0
 
er_message_found_lib1 db 'cnv_png.obj - Not found!',0
er_message_import1 db 'cnv_png.obj - Wrong import!',0
 
err_message_found_lib2 db 'archiver.obj - Not found!',0
err_message_import2 db 'archiver.obj - Wrong import!',0
 
ihead_f_i:
ihead_f_l db 'Errors of plugins:',0
 
;plugins_directory db 'plugins/',0
plugins_directory db 0
;------------------------------------------------------------------------------
l_libs_start:
 
library01 l_libs system_dir_CnvPNG+9,path,library_path,system_dir_CnvPNG,\
er_message_found_lib1,ihead_f_l,cnv_png_import,er_message_import1,ihead_f_i,plugins_directory
 
library02 l_libs system_dir_UNPACK+9,path,library_path,system_dir_UNPACK,\
err_message_found_lib2,ihead_f_l,UNPACK_import,err_message_import2,ihead_f_i,plugins_directory
 
end_l_libs:
;---------------------------------------------------------------------
align 4
cnv_png_import:
.Start dd aCP_Start
.Version dd aCP_Version
.Check dd aCP_Check
.Assoc dd aCP_Assoc
dd 0
dd 0
aCP_Start db 'START',0
aCP_Version db 'version',0
aCP_Check db 'Check_Header',0
aCP_Assoc db 'Associations',0
;---------------------------------------------------------------------
align 4
UNPACK_import:
;unpack_Version dd aUnpack_Version
;unpack_PluginLoad dd aUnpack_PluginLoad
;unpack_OpenFilePlugin dd aUnpack_OpenFilePlugin
;unpack_ClosePlugin dd aUnpack_ClosePlugin
;unpack_ReadFolder dd aUnpack_ReadFolder
;unpack_SetFolder dd aUnpack_SetFolder
;unpack_GetFiles dd aUnpack_GetFiles
;unpack_GetOpenPluginInfo dd aUnpack_GetOpenPluginInfo
;unpack_Getattr dd aUnpack_Getattr
;unpack_Open dd aUnpack_Open
;unpack_Read dd aUnpack_Read
;unpack_Setpos dd aUnpack_Setpos
;unpack_Close dd aUnpack_Close
;unpack_DeflateUnpack dd aUnpack_DeflateUnpack
unpack_DeflateUnpack2 dd aUnpack_DeflateUnpack2
dd 0
dd 0
 
;aUnpack_Version db 'version',0
;aUnpack_PluginLoad db 'plugin_load',0
;aUnpack_OpenFilePlugin db 'OpenFilePlugin',0
;aUnpack_ClosePlugin db 'ClosePlugin',0
;aUnpack_ReadFolder db 'ReadFolder',0
;aUnpack_SetFolder db 'SetFolder',0
;aUnpack_GetFiles db 'GetFiles',0
;aUnpack_GetOpenPluginInfo db 'GetOpenPluginInfo',0
;aUnpack_Getattr db 'getattr',0
;aUnpack_Open db 'open',0
;aUnpack_Read db 'read',0
;aUnpack_Setpos db 'setpos',0
;aUnpack_Close db 'close',0
;aUnpack_DeflateUnpack db 'deflate_unpack',0
aUnpack_DeflateUnpack2 db 'deflate_unpack2',0
;------------------------------------------------------------------------------
/programs/system/icon/trunk/debug.inc
0,0 → 1,147
macro debug_print str
{
local ..string, ..label
 
jmp ..label
..string db str,0
..label:
 
pushf
pushad
mov edx,..string
call debug_outstr
popad
popf
}
 
dps fix debug_print
 
macro debug_print_dec arg
{
pushf
pushad
if ~arg eq eax
mov eax,arg
end if
call debug_outdec
popad
popf
}
 
dpd fix debug_print_dec
 
;---------------------------------
debug_outdec: ;(eax - num, edi-str)
push 10 ;2
pop ecx ;1
push -'0' ;2
.l0:
xor edx,edx ;2
div ecx ;2
push edx ;1
test eax,eax ;2
jnz .l0 ;2
.l1:
pop eax ;1
add al,'0' ;2
call debug_outchar ; stosb
jnz .l1 ;2
ret ;1
;---------------------------------
 
debug_outchar: ; al - char
pushf
pushad
mov cl,al
mov eax,63
mov ebx,1
int 0x40
popad
popf
ret
 
debug_outstr:
mov eax,63
mov ebx,1
@@:
mov cl,[edx]
test cl,cl
jz @f
int 40h
inc edx
jmp @b
@@:
ret
 
_debug_crlf db 13, 10, 0
 
macro newline_1
{
pushf
pushad
mov edx, _debug_crlf
call debug_outstr
popad
popf
}
 
macro newline
{
pushf
pushad
mov edx, _debug_crlf
call debug_outstr
popad
popf
}
 
macro print message
{
dps message
newline
}
 
macro pregs
{
dps "EAX: "
dpd eax
dps " EBX: "
dpd ebx
newline
dps "ECX: "
dpd ecx
dps " EDX: "
dpd edx
newline
}
 
macro debug_print_hex arg
{
pushf
pushad
if ~arg eq eax
mov eax, arg
end if
call debug_outhex
popad
popf
}
dph fix debug_print_hex
 
debug_outhex:
; eax - number
mov edx, 8
.new_char:
rol eax, 4
movzx ecx, al
and cl, 0x0f
mov cl, [__hexdigits + ecx]
pushad
mcall 63, 1
popad
dec edx
jnz .new_char
ret
 
__hexdigits:
db '0123456789ABCDEF'
/programs/system/icon/trunk/icon.asm
5,6 → 5,13
;* Compile with flat assembler *
;* *
;********************************
; version: 3.00
; last update: 02/04/2012
; changed by: Marat Zakiyanov aka Mario79, aka Mario
; changes: Program used only 2 threads: draw and mouse
; Used new kernel functions: 25, 34, 15.8, 4 (redirect).
; Used PNG icons with transparent.
;---------------------------------------------------------------------
; version: 2.11
; last update: 19/03/2012
; changed by: Marat Zakiyanov aka Mario79, aka Mario
33,17 → 40,15
; SPraid, Dunkaist
;---------------------------------------------------------------------
; version: 2.00
; last update: 22|02|2005
; last update: 22/02/2005
; changed by: Willow and Mario79
; changes: modified for work with new multi-thread ICON.
;******************************************************************************
ICON_SIZE equ 32*32*3
;RAW_SIZE equ ICON_SIZE*32 ;350000
;GIF_SIZE equ 12*1024 ;45000
ICON_SIZE equ 32*32*4
REC_SIZE equ 80
ICONS_DAT equ '/sys/ICONS.DAT'
ICON_APP equ '/sys/ICON'
ICON_STRIP equ '/sys/ICONSTRP.GIF'
ICONS_DAT equ '/sys/icons.dat'
ICON_APP equ '/sys/icon'
ICON_STRIP equ '/rd/1/iconstrp.png'
;------------------------------------------------------------------------------
use32
org 0x0
54,47 → 59,59
dd I_END ; memory for app
dd stack_area ; esp
dd I_Param ; boot parameters
dd 0x0 ; path
dd path ; path
;------------------------------------------------------------------------------
include 'lang.inc'
include '../../../macros.inc'
include 'lang.inc'
include '../../../develop/libraries/box_lib/load_lib.mac'
COLOR_ORDER equ MENUETOS
include 'gif_lite.inc'
;include 'debug.inc'
purge newline
;------------------------------------------------------------------------------
@use_library ;use load lib macros
;------------------------------------------------------------------------------
START: ; start of execution
mcall 68,11
;---------------------------------------------------------------------
load_libraries l_libs_start,end_l_libs
test eax,eax
jnz close
; unpack deflate
mov eax,[unpack_DeflateUnpack2]
mov [deflate_unpack],eax
;---------------------------------------------------------------------
; get size of file ICONSTRP.GIF
mcall 70,finfo
test eax,eax
jnz close
; get memory for ICONSTRP.GIF
mov ecx,[process_table+32]
mov ecx,[procinfo+32]
mov [finfo.size],ecx
mov [img_size],ecx
mcall 68,12
mov [finfo.point],eax
mov [image_file],eax
; load ICONSTRP.GIF
mov [finfo],dword 0
mcall 70,finfo
test eax,eax
jnz close
; calculate and get memory for RAW data
mov esi,[finfo.point]
movzx eax,word [esi+6] ;x
movzx edi,word [esi+8] ;y
imul eax,edi ;x*y
lea edi,[eax+eax*2] ; multiply x3
mov ecx,edi
mcall 68,12
; convert PNG to RAW
xor eax,eax
mov [return_code],eax
 
push image_file
call [cnv_png_import.Start]
 
mov eax,[raw_pointer]
mov eax,[eax+28]
add eax,[raw_pointer]
mov [strip_file],eax
mov edi,eax
; convert GIF to RAW
call ReadGIF
; back memeory to system
mcall 68,13,[finfo.point]
 
mov eax,dword[edi+4]
mov eax,[raw_pointer]
mov eax,[eax+8]
shr eax,5
mov [icon_count],eax
; load ICON.DAT
101,8 → 118,14
call load_ic
boot_str:
cmp [I_Param],dword 'BOOT'
je load_icon_list2
je START2
;------------------------------------------------------------------------------
; ICON EDITOR MODE - START1 entering label
;------------------------------------------------------------------------------
START1:
call load_icon_list
;------------------------------------------------------------------------------
align 4
red:
call draw_window ; at first, draw the window
mov esi,[current_icon]
122,46 → 145,66
mcall 17 ; get id
shr eax,8
 
; dps "button id: "
; dpd eax
; newline_1
 
cmp eax,1 ; button id=1 ?
je close
mov esi,[current_icon]
add esi,12
mov ebx,[cur_band]
cmp eax,11
jb @f
cmp eax,13
ja @f
call read_string
jmp still
;--------------------------------------
align 4
noclose:
mov esi,[current_icon]
add esi,12
mov ebx,[cur_band] ;eax
@@:
cmp eax,21 ; apply changes
je apply
cmp eax,22 ; user pressed the 'add icon' button
je add_icon
cmp eax,23 ; user pressed the remove icon button
je remove_icon
 
cmp eax,30 ; left arrow to icons bar
je arrow.left
cmp eax,31 ; right arrow to icons bar
jne .no_back
je arrow.right
 
add ebx,8
cmp eax,32
je ico
 
cmp eax,40 ; user pressed button for icon position
jae press_button_for_icon_position
jmp still
;------------------------------------------------------------------------------
align 4
arrow:
.right:
 
mov eax,[icon_count]
cmp eax,ebx
jae .drwic2
sub eax,8
cmp ebx,eax
jae still ;.drwic2
 
xor ebx,ebx
add ebx,1
jmp .drwic2
;--------------------------------------
align 4
.no_back:
cmp eax,30 ; left arrow to icons bar
jne .no_side
 
.left:
test ebx,ebx
jnz .dec
jz still
 
mov ebx,[icon_count]
and ebx,0xfffffff8
add ebx,8
sub ebx,1
;--------------------------------------
align 4
.dec:
sub ebx,8
;--------------------------------------
align 4
.drwic2:
mov [cur_band],ebx
;--------------------------------------
169,11 → 212,9
.drwic1:
call draw_icon
jmp still
;--------------------------------------
;------------------------------------------------------------------------------
align 4
.no_side:
cmp eax,32
jne .no_ico
ico:
push ebx
mcall 37,1
pop ebx
186,27 → 227,15
cmp ecx,[icon_count]
jae still
 
mov [sel_icon1],eax
mov ecx,eax
add eax,ebx
call itoa
jmp .drwic1
;--------------------------------------
jmp arrow.drwic1
;------------------------------------------------------------------------------
align 4
.no_ico:
cmp eax,11
jb no_str
cmp eax,13
jg no_str
call read_string
jmp still
;--------------------------------------
align 4
no_str:
cmp eax,21 ; apply changes
jne no_apply
apply:
; (1) save list
mov ebx,finfo ; Change by spraid
mov ebx,finfo
mov dword[ebx],2
mov edx,REC_SIZE
imul edx,dword [icons]
216,7 → 245,7
mcall 70
; (2) terminate all icons
or ecx,-1
mcall 9,process_table
mcall 9,procinfo
mov edi,[ebx+30]
;--------------------------------------
align 4
227,12 → 256,13
newread:
inc esi
mov ecx,esi
mcall 9,process_table
mcall 9,procinfo
 
cmp edi,[ebx+30]
je newread
 
cmp esi,eax
jg apply_changes
jg .apply_changes
 
mov eax,[ebx+10]
and eax,not 20202020h
243,7 → 273,7
;--------------------------------------
align 4
@@:
mov eax,51
xor eax,eax
cmp eax,[ebx+42]
jne newread
 
252,43 → 282,22
 
mov ecx,esi
mcall 18,2
 
jmp newread2
;------------------------------------------------------------------------------
;--------------------------------------
align 4
finfo_start:
dd 7
dd 0
.params dd 0
dd 0
dd 0
db 0
dd finfo.path
;------------------------------------------------------------------------------
align 4
finfo:
dd 5
dd 0
dd 0
.size dd 0 ;GIF_SIZE
.point dd process_table ;gif_file
.path:
db ICON_STRIP,0
rb 31-($-.path)
;------------------------------------------------------------------------------
align 4
apply_changes:
.apply_changes:
mov ebx, finfo_start
mov dword [ebx+8], boot_str+6
mov esi, iconname
call lst_path
mcall 70
mcall 68,1
mcall 15,3
jmp still
;------------------------------------------------------------------------------
align 4
no_apply:
cmp eax,22 ; user pressed the 'add icon' button
jne no_add_icon
 
add_icon:
mov ebx,24*65536+250+8*14
mcall 4,,0xc0ff0000,add_text,,0xffffff
 
345,12 → 354,9
no_f:
call draw_btns ;draw_window
jmp still
;--------------------------------------
;------------------------------------------------------------------------------
align 4
no_add_icon:
cmp eax,23 ; user pressed the remove icon button
jne no_remove_icon
remove_icon:
mov ebx,24*65536+250+8*14
mcall 4,,0xc0ff0000,rem_text,,0xffffff
422,11 → 428,9
add ebx,40
mov [cur_btn],ebx
jmp red
;--------------------------------------
;------------------------------------------------------------------------------
align 4
no_remove_icon:
cmp eax,40 ; user pressed button for icon position
jb still
press_button_for_icon_position:
mov edi,eax
sub eax,40
mov edx,eax
454,14 → 458,12
align 4
band:
add esi,12
call atoi
call ASCII_to_icon_number
and eax,0xfffff8
mov [cur_band],eax
call draw_btns
jmp still
;------------------------------------------------------------------------------
current_icon dd icon_data
;------------------------------------------------------------------------------
align 4
print_strings:
pusha
487,8 → 489,6
popa
ret
;------------------------------------------------------------------------------
iconlst db ICONS_DAT,0
;------------------------------------------------------------------------------
align 4
load_icon_list:
mov edi,icons_reserved ; clear reserved area
539,10 → 539,6
ret
;------------------------------------------------------------------------------
align 4
positions dd 3,16,47
str_lens db 8,30,30
;------------------------------------------------------------------------------
align 4
read_string:
pusha
sub eax,11
688,7 → 684,7
mov esi,47
;--------------------------------------
align 4
newline:
.newline:
mov ecx,[edx]
add edx,4
mcall
695,7 → 691,7
add ebx,14
add edx,47
cmp [edx],byte 'x'
jne newline
jne .newline
;--------------------------------------
align 4
draw_btns:
743,7 → 739,7
ror ebx,16
add ecx,20 shl 16
inc ah
cmp ah,8 ;9
cmp ah,8
jbe newbline
 
call print_strings
756,7 → 752,7
mcall 13,<(33-20),(34*8+2)>,<(260-24),(37+15-2)>,0xffffff
mov esi,[current_icon]
add esi,12
call atoi
call ASCII_to_icon_number
push eax
cmp eax,[cur_band]
jb .nou
772,11 → 768,10
align 4
.nou:
mov eax,[cur_band]
and eax,0xfffffff8
push eax
imul eax,ICON_SIZE
mov ebx,[strip_file]
lea ebx,[ebx+8+eax]
add ebx,eax
mov ecx,8
mov edx,(33-18) shl 16+238
;--------------------------------------
783,7 → 778,10
align 4
.nxt:
push ecx
mcall 7,,<32,32>
pusha
mov ebp,0
mcall 65,,<32,32>,,32
popa
pop ecx
add ebx,ICON_SIZE
add edx,34 shl 16
806,540 → 804,131
mcall ,,,,0xff0000
ret
;------------------------------------------------------------------------------
; DATA AREA
bcolor dd 0x335599
;------------------------------------------------------------------------------
icon_table:
times 4 db 'xxxx xxxx'
times 2 db ' '
times 1 db ' '
times 2 db 'xxxx xxxx'
; times 1 db ' '
;------------------------------------------------------------------------------
icons_reserved:
times 9 db ' '
;------------------------------------------------------------------------------
if lang eq ru
text:
db 255,255,255,0, ' ’…Š‘’ '
db 255,255,255,0, ' Žƒ€ŒŒ€ '
db 255,255,255,0, ' €€Œ…’› '
db 255,255,255,0, ' ˆŒ…ˆ’œ '
db 255,255,255,0, ' „Ž€‚ˆ’œ “„€‹ˆ’œ '
db 0,0,0,0, '€†Œˆ’… € Ž‡ˆ–ˆž ˆŠŽŠˆ „‹Ÿ …„€Š’ˆŽ‚€ˆŸ '
db 'x' ; <- END MARKER, DONT DELETE
 
add_text db '€†Œˆ’… € Ž‡ˆ–ˆž …ˆ‘Ž‹œ‡“…ŒŽ‰ ˆŠŽŠˆ ',0
rem_text db '€†Œˆ’… € Ž‡ˆ–ˆž ˆ‘Ž‹œ‡“…ŒŽ‰ ˆŠŽŠˆ ',0
title db 'Œ¥­¥¤¦¥à ¨ª®­®ª',0
 
else if lang eq ge
text:
db 255,255,255,0, ' TITLE '
db 255,255,255,0, ' APP NAME '
db 255,255,255,0, ' PARAMETER '
db 255,255,255,0, ' ANWENDEN '
db 255,255,255,0, ' HINZUFUEGEN ENTFERNEN '
db 0,0,0,0, 'AUF BUTTON KLICKEN, UM ICON ZU EDITIEREN '
db 'x' ; <- END MARKER, DONT DELETE
 
add_text db 'AUF UNBENUTZTE ICONPOSITION KLICKEN ',0
rem_text db 'ICON ANKLICKEN; DAS GELOESCHT WERDEN SOLL ',0
title db 'Icon Manager',0
 
else
text:
db 255,255,255,0, ' TITLE '
db 255,255,255,0, ' APP NAME '
db 255,255,255,0, ' PARAMETERS '
db 255,255,255,0, ' APPLY CHANGES '
db 255,255,255,0, ' ADD ICON REMOVE ICON '
db 0,0,0,0, 'CLICK BUTTON ON ICON POSITION FOR EDIT '
db 'x' ; <- END MARKER, DONT DELETE
add_text db 'CLICK ON A NOT USED POSITION ',0
rem_text db 'CLICK ICON POSITION; YOU WANT TO DELETE ',0
title db 'Icon Manager',0
 
end if
;------------------------------------------------------------------------------
arrows db '</>'
;------------------------------------------------------------------------------
iconname:
db ICON_APP,0
;------------------------------------------------------------------------------
icon_default:
db 'AA-SYSXTREE-000-/RD/1/SYSXTREE '
db '- *'
db 13,10
;------------------------------------------------------------------------------
rep_text:
if lang eq ru
db '‡€—Šˆ - ˆ‡ , ‚›€ #'
else
db 'ICONS - OF , SELECTED'
end if
 
rep_text_len:
;------------------------------------------------------------------------------
align 4
get_bg_info:
mcall 39,4
mov [bgrdrawtype],eax
 
mcall 39,1 ; get background size
mov [bgrxy],eax
 
mov ebx,eax
shr eax,16
and ebx,0xffff
mov [bgrx],eax
mov [bgry],ebx
ret
;------------------------------------------------------------------------------
align 4
calc_icon_pos:
movzx eax,byte [ebp-20] ; x position
sub eax,'A' ;eax - number of letter
cmp eax,4
jg no_left
 
shl eax,6 ;imul eax,64
add eax,16
movzx ebx,[warea.left]
add eax,ebx
jmp x_done
;--------------------------------------
align 4
no_left:
sub eax,9
sal eax,6 ;imul eax,64
sub eax,16+52-1
movzx ebx,[warea.right]
add eax,ebx
;--------------------------------------
align 4
x_done:
mov [ebp-12],eax
movzx eax,byte [ebp-20+1] ; y position
sub eax,'A' ; eax - number of letter
cmp eax,4
jg no_up
 
shl eax,6 ;imul eax,80
add eax,16
movzx ebx,[warea.top]
add eax,ebx
jmp y_done
;--------------------------------------
align 4
no_up:
sub eax,9
shl eax,6 ;imul eax,80
sub eax,16-1
movzx ebx,[warea.bottom]
add eax,ebx
;--------------------------------------
align 4
y_done:
mov [ebp-8],eax
ret
;--------------------------------------
align 4
;START2:
load_icon_list2:
call get_bg_info
 
mcall 48,5
mov [warea.by_x],eax
mov [warea.by_y],ebx
 
mcall 14
add eax,0x00010001
mov [scrxy],eax
;--------------------------------------
align 4
apply_changes2:
mov edi,[icons]
mov esi,icon_data
mov ebp,thread_stack+0x100 ;0x5000 ; threads stack starting point
;--------------------------------------
align 4
start_new:
mov eax,[esi]
mov [ebp-20],eax
call calc_icon_pos
 
mov edx,ebp
mov dword[ebp-4],esi
mcall 51,1,thread
add ebp,0x100
; change to next thread if mutex is blocked
mov eax,68
mov ebx,1
;--------------------------------------
align 4
wait_thread_start: ;wait until thread draw itself first time
cmp [create_thread_event],bl ;mutex
jz wait_thread_end
mcall
jmp wait_thread_start
;--------------------------------------
align 4
wait_thread_end:
dec [create_thread_event] ;reset event
add esi,REC_SIZE
dec edi
jnz start_new
;--------------------------------------
align 4
close:
or eax,-1
mcall
;------------------------------------------------------------------------------
; esp-28 = start of thread stack
; esp-24 = ???
; esp-20 = 'AA-F' or...
; esp-16 = ebp-4 - area of f. 15.6
; esp-12 = ebp+0 = X
; esp-8 = ebp+4 = Y
; esp-4 = ebp+8 = adress of icon_data
; ICON PROCESSING MODE - START2 entering label
;------------------------------------------------------------------------------
align 4
thread:
sub esp,12
mov ebp,esp
sub esp,16
call draw_window2
mov [create_thread_event],1
mcall 40,010101b
START2:
mcall 40,10000b ; only Event 5 - draw background
mcall 51,1,START_mouse_thread,stack_mouse_thread
;------------------------------------------------------------------------------
align 4
still2:
mcall 10
cmp eax,1
je red2
 
cmp eax,3
je button2
mcall 15,8
mov ecx,eax
shr ecx,16
mov [x_left],ecx
and eax,0xffff
mov [x_right],eax
 
mov ecx,ebx
shr ecx,16
mov [y_top],ecx
and ebx,0xffff
mov [y_bottom],ebx
 
call get_bg_info
call draw_icon2_1
jmp still2
;------------------------------------------------------------------------------
mov ecx,[icons]
mov ebx,icon_data
;--------------------------------------
align 4
red2:
mcall 14
add eax,0x00010001
mov [scrxy],eax
mcall 48,5
mov [warea.by_x],eax
mov [warea.by_y],ebx
add ebp,+12
.start_new:
push ebx ecx
mov [adress_of_icon_data],ebx
mov eax,[ebx]
call calc_icon_pos
add ebp,-12
mcall 9,process_table,-1
mov eax,[process_table+process_information.box.left]
cmp eax,[ebp+0]
jne @f
mov eax,[process_table+process_information.box.top]
cmp eax,[ebp+4]
je .lp1
;--------------------------------------
align 4
@@:
call get_bg_info
mcall 67,[ebp+0],[ebp+4],51,51
;--------------------------------------
align 4
.lp1:
call draw_window2
mov [current_X],ebx
mov [current_Y],eax
 
call draw_picture
pop ecx ebx
add ebx,REC_SIZE
dec ecx
jnz .start_new
jmp still2
;------------------------------------------------------------------------------
align 4
button2:
mcall 17
cmp ah, 2
jnz still2
draw_picture:
mov eax,[current_X]
cmp eax,[x_right]
ja .exit
 
mcall 9,process_table,-1
mov ecx,[ebx+30] ; PID
mcall 18,21
mov edx,eax ; SLOT
mcall 18,7
cmp edx,eax ; compare with active SLOT
jne @f
mov ecx,edx
mcall 18,1 ; set to down
call draw_window2
add eax,52
cmp eax,[x_left]
jb .exit
 
mov eax,[current_Y]
cmp eax,[y_bottom]
ja .exit
 
add eax,52
cmp eax,[y_top]
jb .exit
;--------------------------------------
align 4
@@:
mov esi,[ebp+8]
mov ebx,1
mov edi,finfo.path
call fill_paths
inc ebx
mov edi,param_str
mov dword[finfo_start+8],edi
call fill_paths
cmp byte[edi],0
jne .no0
and dword[finfo_start+8],0
mov edi,[adress_of_icon_data] ;[ebp+8]
lea esi,[edi+12]
call ASCII_to_icon_number
; protect for icon area RAW size limit
cmp eax,[icon_count]
jbe @f
;--------------------------------------
align 4
.no0:
mov ebx,finfo_start
mcall 70
jmp still2
;------------------------------------------------------------------------------
align 4
fill_paths:
push esi edi
movzx ecx,byte[str_lens+ebx]
add esi,[positions+ebx*4]
push esi
add esi,ecx
;--------------------------------------
align 4
.l1:
dec esi
cmp byte[esi],' '
jnz .found
loop .l1
pop esi
jmp .noms
;--------------------------------------
align 4
.found:
lea ecx,[esi+1]
pop esi
sub ecx,esi
rep movsb
;--------------------------------------
align 4
.noms:
and byte[edi],0
pop edi esi
.exit:
ret
;--------------------------------------
align 4
atoi:
push esi
xor eax,eax
xor ebx,ebx
;--------------------------------------
align 4
.nxt:
lodsb
cmp al,'0'
jb .done
cmp al,'9'
ja .done
sub eax,'0'
; multiply x10
shl ebx,1 ; multiply x2
lea ebx,[ebx+ebx*4] ; multiply x5
add ebx,eax
jmp .nxt
;--------------------------------------
align 4
.done:
pop esi
mov eax,ebx
ret
;--------------------------------------
align 4
itoa:
add esi,2
mov ebx,10
mov ecx,3
;--------------------------------------
align 4
.l0:
xor edx,edx
div ebx
add dl,'0'
mov [esi],dl
dec esi
loop .l0
ret
;------------------------------------------------------------------------------
align 4
draw_picture:
mcall 15,6
test eax,eax
jnz @f
mcall 68,1
jmp draw_picture
@@:
mov [ebp-4],eax
mov [image],image_area
push eax
mcall 68,12,52*52*4+8
mov [draw_area],eax
mov ebx,52
mov [eax],ebx
mov [eax+4],ebx
pop eax
 
mov edi,[ebp+8]
lea esi,[edi+12]
call atoi
cmp eax,[icon_count]
ja toponly.ex
; imul eax,(32*3*32)
lea eax,[eax+eax*2] ; multiply x3
shl eax,10 ; multiply x1024
shl eax,12 ; multiply x4096
add eax,[strip_file]
mov esi,eax
mov edi,[strip_file]
lea edi,[eax+edi+8]
xor ecx,ecx
mov esi,edi
 
mov [pixpos],0
mov edi,[draw_area]
add edi,(52-32)/2*4+8
mov ebx,32
cld
;--------------------------------------
; loop Y start
align 4
new_line:
push ecx ; Y
xor ebx,ebx
;--------------------------------------
; loop X start
align 4
newb:
mov ecx,[esp]
push ebx ; X
.y:
mov ecx,32
rep movsd
 
cmp ebx,10
jb yesbpix
cmp ebx,42
jge yesbpix
cmp ecx,31 ;2
jg yesbpix
add edi,(52-32)*4
dec ebx
jnz .y
 
push esi
mov esi,edi
add esi,[pixpos]
;--------------------------------------
add [pixpos],3
mov eax,[esi]
and eax,0xffffff
call draw_text
 
pop esi
 
cmp eax,0
je yesbpix
cmp eax,0xfffcff ;f5f5f5
je yesbpix
jmp nobpix
;--------------------------------------
align 4
yesbpix:
stretch:
cmp [bgrdrawtype],dword 2
jne nostretch
mov eax,[ebp+4]
add eax,ecx
imul eax,[bgry]
cdq
movzx ebx,word [scrxy]
div ebx
imul eax,[bgrx]
push eax
mov eax,[ebp+0]
add eax,[esp+4]
imul eax,[bgrx]
cdq
movzx ebx,word [scrxy+2]
div ebx
add eax,[esp]
add esp,4
jmp notiled
;--------------------------------------
align 4
nostretch:
cmp [bgrdrawtype],dword 1
jne notiled
mov eax,[ebp+4]
add eax,ecx
cdq
movzx ebx,word [bgrxy]
div ebx
mov eax,edx
imul eax,[bgrx]
push eax
mov eax,[ebp+0]
add eax,[esp+4]
movzx ebx,word [bgrxy+2]
cdq
div ebx
mov eax,edx
add eax,[esp]
add esp,4
;--------------------------------------
align 4
notiled:
lea ecx,[eax+eax*2]
add ecx,[ebp-4]
mov eax,[ecx]
;--------------------------------------
align 4
nobpix:
mov edx,eax
mov eax,[image]
 
mov [eax],dl
inc eax
ror edx,8
mov [eax],dl
inc eax
ror edx,8
mov [eax],dl
inc eax
mov [image],eax
 
pop ebx
 
inc ebx
mov eax,[yw]
inc eax
cmp ebx,eax
jb newb
 
pop ecx
 
inc ecx
mov eax,[ya]
add [pixpos],eax
 
cmp [top],1
jne notop
 
cmp ecx,38
je toponly
;--------------------------------------
align 4
notop:
cmp ecx,52
jnz new_line
;--------------------------------------
align 4
toponly:
mcall 15,7,[ebp-4]
test eax,eax
jnz @f
mcall 68,1
jmp toponly
@@:
xor edx,edx
mcall 7,image_area,<52,52>
;--------------------------------------
align 4
.ex:
mov [load_pic],0
mov edx,[current_X] ;[ebp+0]
shl edx,16
add edx,[current_Y] ;[ebp+4]
mov ebx,[draw_area]
add ebx,8
mcall 25,,<52,52>
mcall 68,13,[draw_area]
ret
;------------------------------------------------------------------------------
align 4
draw_text:
mov esi,[ebp+8]
mov esi,[adress_of_icon_data] ;[ebp+8]
add esi,3
push edi
mov edi,title
1370,7 → 959,10
sub ebx,eax
xor ecx,ecx ; black shade of text
or ecx,0x08000000 ; redirect the output to the user area
add ebx,1 shl 16 ;*65536+1
mov edi,[draw_area]
mcall 4,,,title,[tl]
 
inc ebx
1398,127 → 990,143
mcall
 
inc ebx
mcall ,,0xffffff
mov [draw_pic],0
mov ecx,0xffffff ; white text
or ecx,0x08000000 ; redirect the output to the user area
mcall
ret
;------------------------------------------------------------------------------
; *********************************************
; ******* WINDOW DEFINITIONS AND DRAW ********
; *********************************************
align 4
draw_window2:
mcall 12,1
; DRAW WINDOW
xor eax,eax ; function 0 : define and draw window
mov ebx,[ebp+0-2]
mov ecx,[ebp+4-2]
mov bx,[yw] ; [x start] *65536 + [x size]
mov cx,51 ; [y start] *65536 + [y size]
mov edx,0x41000000 ; color of work area RRGGBB,8->color gl
mcall
mcall 8,51,50,0x40000002 ; button
ASCII_to_icon_number:
;
; in:
; esi - adress of icon ASCII text number (line start + 12)
;
; out:
; eax - number of icon
;
push esi
xor eax,eax
xor ebx,ebx
;--------------------------------------
align 4
draw_icon2_1:
; change to next thread if mutex is blocked
mov eax,68
mov ebx,1
.next:
lodsb
cmp al,'0'
jb .done
cmp al,'9'
ja .done
sub eax,'0'
; multiply x10
shl ebx,1 ; multiply x2
lea ebx,[ebx+ebx*4] ; multiply x5
add ebx,eax
jmp .next
;--------------------------------------
align 4
draw_icon2:
xchg [load_pic],bl ;mutex
test bl,bl
je draw_icon_end
mcall
jmp draw_icon2
;--------------------------------------
.done:
pop esi
mov eax,ebx
ret
;------------------------------------------------------------------------------
align 4
draw_icon_end:
; change to next thread if mutex is blocked
mov eax,68
mov ebx,1
itoa:
add esi,2
mov ebx,10
mov ecx,3
;--------------------------------------
align 4
draw_icon_2:
xchg [draw_pic],bl ;mutex
test bl,bl
je draw_icon_end_2
mcall
jmp draw_icon_2
;--------------------------------------
align 4
draw_icon_end_2:
call draw_picture
call draw_text
mcall 12,2
.l0:
xor edx,edx
div ebx
add dl,'0'
mov [esi],dl
dec esi
loop .l0
ret
;------------------------------------------------------------------------------
tl dd 8
yw: dd 51
ya dd 0
cur_btn dd 40
align 4
get_bg_info:
mcall 39,1 ; get background size
mov [bgrxy],eax
 
draw_pic db 0
load_pic db 0
create_thread_event db 0
mov ebx,eax
shr eax,16
and ebx,0xffff
mov [bgrx],eax
mov [bgry],ebx
 
image dd image_area
mcall 48,5
mov [warea.by_x],eax
mov [warea.by_y],ebx
 
IncludeUGlobals
mcall 14
add eax,0x00010001
mov [scrxy],eax
ret
;------------------------------------------------------------------------------
IM_END:
;------------------------------------------------------------------------------
align 4
bgrx dd ?
bgry dd ?
calc_icon_pos:
; in:
; eax - dword [icon_position]
; out:
; eax - current Y
; ebx - current X
push eax
movzx eax,al
sub eax,'A' ;eax - number of letter
cmp eax,4
jg no_left
 
bgrxy dd ?
warea:
.by_x:
.right dw ?
.left dw ?
.by_y:
.bottom dw ?
.top dw ?
scrxy dd ?
bgrdrawtype dd ?
shl eax,6 ;imul eax,64
add eax,16
movzx ebx,[warea.left]
add eax,ebx
jmp x_done
;--------------------------------------
align 4
no_left:
sub eax,9
sal eax,6 ;imul eax,64
sub eax,16+52-1
movzx ebx,[warea.right]
add eax,ebx
;--------------------------------------
align 4
x_done:
mov ebx,eax
pop eax
push ebx
movzx eax,ah
sub eax,'A' ; eax - number of letter
cmp eax,4
jg no_up
 
pixpos dd ?
top dd ?
icons dd ?
addr dd ?
cur_str dd ?
cur_band dd ?
sel_icon1 rd 1
icon_count rd 1
strip_file rd 1
;------------------------------------------------------------------------------
shl eax,6 ;imul eax,80
add eax,16
movzx ebx,[warea.top]
add eax,ebx
jmp y_done
;--------------------------------------
align 4
param_str rb 31
;------------------------------------------------------------------------------
no_up:
sub eax,9
shl eax,6 ;imul eax,80
sub eax,16-1
movzx ebx,[warea.bottom]
add eax,ebx
;--------------------------------------
align 4
process_table:
rb 0x400
y_done:
pop ebx
ret
;------------------------------------------------------------------------------
align 4
icon_data:
rb 0x1000
include 'mouse.inc'
;------------------------------------------------------------------------------
align 4
rb 0x1000
stack_area:
include 'data.inc'
;------------------------------------------------------------------------------
align 4
I_Param:
rb 0x100 ; max 256
IM_END:
;------------------------------------------------------------------------------
align 4
thread_stack:
rb 0x100*48 ; max 48 icons
include 'dat_area.inc'
;------------------------------------------------------------------------------
align 4
image_area:
rb 52*52*3
I_END:
;------------------------------------------------------------------------------
I_END:
/programs/system/icon/trunk/iconstrp.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/programs/system/icon/trunk/mouse.inc
0,0 → 1,174
;------------------------------------------------------------------------------
align 4
START_mouse_thread:
mcall 40,100000b ; only Event 6 - Mouse
;------------------------------------------------------------------------------
align 4
still_mouse:
mcall 10
align 4
mouse:
mcall 37,2
cmp eax,1 ; åñëè íå ëåâàÿ, âîçâðàò
jne still_mouse
; êîîðäèíàòû êóðñîðà
xor ebx,ebx
mcall 37
 
mov ebx,eax ; eax = cursor_x
shr eax,16 ; ebx = cursor_y
and ebx,0xffff
mov [curx1],eax ; curx1 = cursor_x
mov [cury1],ebx ; cury1 = cursor_y
; êîìó ïðèíàäëåæèò òî÷êà?
mcall 34,[curx1],[cury1]
cmp al,1 ; 1 - ÿäðî
jne still_mouse
;--------------------------------------
align 4
@@: ; ïîäîæä¸ì, ïîêà ïîëüçîâàòåëü íå îòïóñòèë ïðàâóþ êíîïêó ìûøè
mcall 37,2 ; íàæàòû ëè êíîïêè ìûøè?
test eax,1 ; åñëè îòïóñòèë
jz @f ; èä¸ì â íà÷àëî ãëàâíîãî öèêëà
 
mcall 68,1 ; èíà÷å ïåðåêëþ÷èìñÿ íà ñëåäóþùèé ïîòîê ñèñòåìû è êîãäà
jmp @b ; âûïîëíåíèå âåðíåòñÿ ýòîìó ïîòîêó, ïðîâåðèì ìûøü îïÿòü
;--------------------------------------
align 4
@@:
; êîîðäèíàòû êóðñîðà
xor ebx,ebx
mcall 37
 
mov ebx,eax ; eax = cursor_x
shr eax,16 ; ebx = cursor_y
and ebx,0xffff
mov [curx2],eax ; curx1 = cursor_x
mov [cury2],ebx ; cury1 = cursor_y
; êîìó ïðèíàäëåæèò òî÷êà?
mcall 34,[curx2],[cury2]
cmp al,1 ; 1 - ÿäðî
jne still_mouse
; check for icon by click down
call check_icons_position
mov eax,[click_pos]
test eax,eax
jz still_mouse
push eax
mov eax,[curx2]
mov [curx1],eax
mov eax,[cury2]
mov [cury1],eax
; check for icon by click up
call check_icons_position
pop eax
mov ebx,[click_pos]
test ebx,ebx
jz still_mouse
cmp eax,ebx
jne still_mouse
;--------------------------------------
align 4
start_appl:
mov esi,[adress_of_icon_data_2] ;[ebp+8]
mov ebx,1
mov edi,finfo.path
call fill_paths
inc ebx
mov edi,param_str
mov dword[finfo_start+8],edi
call fill_paths
cmp byte[edi],0
jne .no0
and dword[finfo_start+8],0
;--------------------------------------
align 4
.no0:
mov ebx,finfo_start
mcall 70
jmp still_mouse
;------------------------------------------------------------------------------
align 4
fill_paths:
push esi edi
movzx ecx,byte[str_lens+ebx]
add esi,[positions+ebx*4]
push esi
add esi,ecx
;--------------------------------------
align 4
.l1:
dec esi
cmp byte[esi],' '
jnz .found
loop .l1
pop esi
jmp .noms
;--------------------------------------
align 4
.found:
lea ecx,[esi+1]
pop esi
sub ecx,esi
rep movsb
;--------------------------------------
align 4
.noms:
and byte[edi],0
pop edi esi
ret
;------------------------------------------------------------------------------
align 4
check_icons_position:
mov ecx,[icons]
mov ebx,icon_data
;--------------------------------------
align 4
.loop:
push ebx ecx
mov [adress_of_icon_data_2],ebx
mov eax,[ebx]
call calc_icon_pos
 
mov [current_X_mouse_thread],ebx
mov [current_Y_mouse_thread],eax
mov eax,[curx1]
mov ebx,[current_X_mouse_thread]
cmp eax,ebx
jb .next
add ebx,52
cmp eax,ebx
ja .next
mov eax,[cury1]
mov ebx,[current_Y_mouse_thread]
cmp eax,ebx
jb .next
add ebx,52
cmp eax,ebx
ja .next
 
pop ecx ebx
mov eax,[adress_of_icon_data_2]
mov [click_pos],eax
ret
;--------------------------------------
align 4
.next:
pop ecx ebx
add ebx,REC_SIZE
dec ecx
jnz .loop
; all icons survived!
xor eax,eax
mov [click_pos],eax
ret
;------------------------------------------------------------------------------