Subversion Repositories Kolibri OS

Compare Revisions

No changes between revisions

Regard whitespace Rev 2538 → Rev 2537

/programs/system/icon/trunk/iconstrp.png
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/data.inc
File deleted
\ No newline at end of file
/programs/system/icon/trunk/debug.inc
File deleted
\ No newline at end of file
/programs/system/icon/trunk/mouse.inc
File deleted
/programs/system/icon/trunk/dat_area.inc
File deleted
\ No newline at end of file
/programs/system/icon/trunk/icon.asm
5,13 → 5,6
;* 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
40,15 → 33,17
; 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*4
ICON_SIZE equ 32*32*3
;RAW_SIZE equ ICON_SIZE*32 ;350000
;GIF_SIZE equ 12*1024 ;45000
REC_SIZE equ 80
ICONS_DAT equ '/sys/icons.dat'
ICON_APP equ '/sys/icon'
ICON_STRIP equ '/rd/1/iconstrp.png'
ICONS_DAT equ '/sys/ICONS.DAT'
ICON_APP equ '/sys/ICON'
ICON_STRIP equ '/sys/ICONSTRP.GIF'
;------------------------------------------------------------------------------
use32
org 0x0
59,59 → 54,47
dd I_END ; memory for app
dd stack_area ; esp
dd I_Param ; boot parameters
dd path ; path
dd 0x0 ; path
;------------------------------------------------------------------------------
include '../../../macros.inc'
include 'lang.inc'
include '../../../macros.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,[procinfo+32]
mov ecx,[process_table+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
; 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]
; 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
mov [strip_file],eax
mov edi,eax
; convert GIF to RAW
call ReadGIF
; back memeory to system
mcall 68,13,[finfo.point]
mov eax,[raw_pointer]
mov eax,[eax+8]
mov eax,dword[edi+4]
shr eax,5
mov [icon_count],eax
; load ICON.DAT
118,14 → 101,8
call load_ic
boot_str:
cmp [I_Param],dword 'BOOT'
je START2
;------------------------------------------------------------------------------
; ICON EDITOR MODE - START1 entering label
;------------------------------------------------------------------------------
START1:
je load_icon_list2
call load_icon_list
;------------------------------------------------------------------------------
align 4
red:
call draw_window ; at first, draw the window
mov esi,[current_icon]
145,66 → 122,46
mcall 17 ; get id
shr eax,8
 
; dps "button id: "
; dpd eax
; newline_1
 
cmp eax,1 ; button id=1 ?
je close
;--------------------------------------
align 4
noclose:
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
@@:
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
mov ebx,[cur_band] ;eax
cmp eax,31 ; right arrow to icons bar
je arrow.right
jne .no_back
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:
 
add ebx,8
mov eax,[icon_count]
sub eax,8
cmp ebx,eax
jae still ;.drwic2
cmp eax,ebx
jae .drwic2
 
add ebx,1
xor ebx,ebx
jmp .drwic2
;--------------------------------------
align 4
.left:
.no_back:
cmp eax,30 ; left arrow to icons bar
jne .no_side
 
test ebx,ebx
jz still
jnz .dec
 
sub ebx,1
mov ebx,[icon_count]
and ebx,0xfffffff8
add ebx,8
;--------------------------------------
align 4
.dec:
sub ebx,8
;--------------------------------------
align 4
.drwic2:
mov [cur_band],ebx
;--------------------------------------
212,9 → 169,11
.drwic1:
call draw_icon
jmp still
;------------------------------------------------------------------------------
;--------------------------------------
align 4
ico:
.no_side:
cmp eax,32
jne .no_ico
push ebx
mcall 37,1
pop ebx
227,15 → 186,27
cmp ecx,[icon_count]
jae still
 
mov [sel_icon1],eax
mov ecx,eax
add eax,ebx
call itoa
jmp arrow.drwic1
;------------------------------------------------------------------------------
jmp .drwic1
;--------------------------------------
align 4
apply:
.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
; (1) save list
mov ebx,finfo
mov ebx,finfo ; Change by spraid
mov dword[ebx],2
mov edx,REC_SIZE
imul edx,dword [icons]
245,7 → 216,7
mcall 70
; (2) terminate all icons
or ecx,-1
mcall 9,procinfo
mcall 9,process_table
mov edi,[ebx+30]
;--------------------------------------
align 4
256,13 → 227,12
newread:
inc esi
mov ecx,esi
mcall 9,procinfo
 
mcall 9,process_table
cmp edi,[ebx+30]
je newread
 
cmp esi,eax
jg .apply_changes
jg apply_changes
 
mov eax,[ebx+10]
and eax,not 20202020h
273,7 → 243,7
;--------------------------------------
align 4
@@:
xor eax,eax
mov eax,51
cmp eax,[ebx+42]
jne newread
 
282,22 → 252,43
 
mov ecx,esi
mcall 18,2
 
jmp newread2
;--------------------------------------
;------------------------------------------------------------------------------
align 4
.apply_changes:
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:
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
add_icon:
no_apply:
cmp eax,22 ; user pressed the 'add icon' button
jne no_add_icon
 
mov ebx,24*65536+250+8*14
mcall 4,,0xc0ff0000,add_text,,0xffffff
 
354,9 → 345,12
no_f:
call draw_btns ;draw_window
jmp still
;------------------------------------------------------------------------------
;--------------------------------------
align 4
remove_icon:
no_add_icon:
cmp eax,23 ; user pressed the remove icon button
jne no_remove_icon
mov ebx,24*65536+250+8*14
mcall 4,,0xc0ff0000,rem_text,,0xffffff
428,9 → 422,11
add ebx,40
mov [cur_btn],ebx
jmp red
;------------------------------------------------------------------------------
;--------------------------------------
align 4
press_button_for_icon_position:
no_remove_icon:
cmp eax,40 ; user pressed button for icon position
jb still
mov edi,eax
sub eax,40
mov edx,eax
458,12 → 454,14
align 4
band:
add esi,12
call ASCII_to_icon_number
call atoi
and eax,0xfffff8
mov [cur_band],eax
call draw_btns
jmp still
;------------------------------------------------------------------------------
current_icon dd icon_data
;------------------------------------------------------------------------------
align 4
print_strings:
pusha
489,6 → 487,8
popa
ret
;------------------------------------------------------------------------------
iconlst db ICONS_DAT,0
;------------------------------------------------------------------------------
align 4
load_icon_list:
mov edi,icons_reserved ; clear reserved area
539,6 → 539,10
ret
;------------------------------------------------------------------------------
align 4
positions dd 3,16,47
str_lens db 8,30,30
;------------------------------------------------------------------------------
align 4
read_string:
pusha
sub eax,11
684,7 → 688,7
mov esi,47
;--------------------------------------
align 4
.newline:
newline:
mov ecx,[edx]
add edx,4
mcall
691,7 → 695,7
add ebx,14
add edx,47
cmp [edx],byte 'x'
jne .newline
jne newline
;--------------------------------------
align 4
draw_btns:
739,7 → 743,7
ror ebx,16
add ecx,20 shl 16
inc ah
cmp ah,8
cmp ah,8 ;9
jbe newbline
 
call print_strings
752,7 → 756,7
mcall 13,<(33-20),(34*8+2)>,<(260-24),(37+15-2)>,0xffffff
mov esi,[current_icon]
add esi,12
call ASCII_to_icon_number
call atoi
push eax
cmp eax,[cur_band]
jb .nou
768,10 → 772,11
align 4
.nou:
mov eax,[cur_band]
and eax,0xfffffff8
push eax
imul eax,ICON_SIZE
mov ebx,[strip_file]
add ebx,eax
lea ebx,[ebx+8+eax]
mov ecx,8
mov edx,(33-18) shl 16+238
;--------------------------------------
778,10 → 783,7
align 4
.nxt:
push ecx
pusha
mov ebp,0
mcall 65,,<32,32>,,32
popa
mcall 7,,<32,32>
pop ecx
add ebx,ICON_SIZE
add edx,34 shl 16
804,131 → 806,540
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
;------------------------------------------------------------------------------
; ICON PROCESSING MODE - START2 entering label
; 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
;------------------------------------------------------------------------------
align 4
START2:
mcall 40,10000b ; only Event 5 - draw background
mcall 51,1,START_mouse_thread,stack_mouse_thread
thread:
sub esp,12
mov ebp,esp
sub esp,16
call draw_window2
mov [create_thread_event],1
mcall 40,010101b
;------------------------------------------------------------------------------
align 4
still2:
mcall 10
cmp eax,1
je red2
 
mcall 15,8
cmp eax,3
je button2
 
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
 
mov ecx,[icons]
mov ebx,icon_data
jmp still2
;------------------------------------------------------------------------------
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
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
.start_new:
push ebx ecx
mov [adress_of_icon_data],ebx
mov eax,[ebx]
call calc_icon_pos
mov [current_X],ebx
mov [current_Y],eax
 
call draw_picture
pop ecx ebx
add ebx,REC_SIZE
dec ecx
jnz .start_new
@@:
call get_bg_info
mcall 67,[ebp+0],[ebp+4],51,51
;--------------------------------------
align 4
.lp1:
call draw_window2
jmp still2
;------------------------------------------------------------------------------
align 4
draw_picture:
mov eax,[current_X]
cmp eax,[x_right]
ja .exit
button2:
mcall 17
cmp ah, 2
jnz still2
 
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
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
;--------------------------------------
align 4
@@:
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
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
;--------------------------------------
align 4
.exit:
.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
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
@@:
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 [ebp-4],eax
mov [image],image_area
 
shl eax,12 ; multiply x4096
add eax,[strip_file]
mov esi,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
 
mov edi,[draw_area]
add edi,(52-32)/2*4+8
mov ebx,32
cld
mov edi,[strip_file]
lea edi,[eax+edi+8]
xor ecx,ecx
mov esi,edi
 
mov [pixpos],0
;--------------------------------------
; loop Y start
align 4
.y:
mov ecx,32
rep movsd
new_line:
push ecx ; Y
xor ebx,ebx
;--------------------------------------
; loop X start
align 4
newb:
mov ecx,[esp]
push ebx ; X
add edi,(52-32)*4
dec ebx
jnz .y
cmp ebx,10
jb yesbpix
cmp ebx,42
jge yesbpix
cmp ecx,31 ;2
jg yesbpix
 
call draw_text
push esi
mov esi,edi
add esi,[pixpos]
;--------------------------------------
add [pixpos],3
mov eax,[esi]
and eax,0xffffff
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]
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
ret
;------------------------------------------------------------------------------
align 4
draw_text:
mov esi,[adress_of_icon_data] ;[ebp+8]
mov esi,[ebp+8]
add esi,3
push edi
mov edi,title
959,10 → 1370,7
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
990,143 → 1398,127
mcall
 
inc ebx
mov ecx,0xffffff ; white text
or ecx,0x08000000 ; redirect the output to the user area
mcall
mcall ,,0xffffff
mov [draw_pic],0
ret
;------------------------------------------------------------------------------
; *********************************************
; ******* WINDOW DEFINITIONS AND DRAW ********
; *********************************************
align 4
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
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
;--------------------------------------
align 4
.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
draw_icon2_1:
; change to next thread if mutex is blocked
mov eax,68
mov ebx,1
;--------------------------------------
align 4
.done:
pop esi
mov eax,ebx
ret
;------------------------------------------------------------------------------
draw_icon2:
xchg [load_pic],bl ;mutex
test bl,bl
je draw_icon_end
mcall
jmp draw_icon2
;--------------------------------------
align 4
itoa:
add esi,2
mov ebx,10
mov ecx,3
draw_icon_end:
; change to next thread if mutex is blocked
mov eax,68
mov ebx,1
;--------------------------------------
align 4
.l0:
xor edx,edx
div ebx
add dl,'0'
mov [esi],dl
dec esi
loop .l0
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
ret
;------------------------------------------------------------------------------
align 4
get_bg_info:
mcall 39,1 ; get background size
mov [bgrxy],eax
tl dd 8
yw: dd 51
ya dd 0
cur_btn dd 40
 
mov ebx,eax
shr eax,16
and ebx,0xffff
mov [bgrx],eax
mov [bgry],ebx
draw_pic db 0
load_pic db 0
create_thread_event db 0
mcall 48,5
mov [warea.by_x],eax
mov [warea.by_y],ebx
image dd image_area
mcall 14
add eax,0x00010001
mov [scrxy],eax
ret
IncludeUGlobals
;------------------------------------------------------------------------------
IM_END:
;------------------------------------------------------------------------------
align 4
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
bgrx dd ?
bgry dd ?
 
shl eax,6 ;imul eax,64
add eax,16
movzx ebx,[warea.left]
add eax,ebx
jmp x_done
;--------------------------------------
bgrxy dd ?
warea:
.by_x:
.right dw ?
.left dw ?
.by_y:
.bottom dw ?
.top dw ?
scrxy dd ?
bgrdrawtype dd ?
 
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
;------------------------------------------------------------------------------
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
;--------------------------------------
param_str rb 31
;------------------------------------------------------------------------------
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
 
shl eax,6 ;imul eax,80
add eax,16
movzx ebx,[warea.top]
add eax,ebx
jmp y_done
;--------------------------------------
process_table:
rb 0x400
;------------------------------------------------------------------------------
align 4
no_up:
sub eax,9
shl eax,6 ;imul eax,80
sub eax,16-1
movzx ebx,[warea.bottom]
add eax,ebx
;--------------------------------------
icon_data:
rb 0x1000
;------------------------------------------------------------------------------
align 4
y_done:
pop ebx
ret
rb 0x1000
stack_area:
;------------------------------------------------------------------------------
include 'mouse.inc'
align 4
I_Param:
rb 0x100 ; max 256
;------------------------------------------------------------------------------
include 'data.inc'
align 4
thread_stack:
rb 0x100*48 ; max 48 icons
;------------------------------------------------------------------------------
IM_END:
align 4
image_area:
rb 52*52*3
;------------------------------------------------------------------------------
include 'dat_area.inc'
;------------------------------------------------------------------------------
I_END:
;------------------------------------------------------------------------------
/programs/system/icon/trunk/iconstrp.gif
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
0,0 → 1,485
; GIF LITE v3.0 by Willow
; Written in pure assembler by Ivushkin Andrey aka Willow
; Modified by Diamond
;
; This include file will contain functions to handle GIF image format
;
; Created: August 15, 2004
; Last changed: June 24, 2007
 
; Requires kglobals.inc (iglobal/uglobal macro)
; (program must 'include "kglobals.inc"' and say 'IncludeUGlobal'
; somewhere in uninitialized data area).
 
; Configuration: [changed from program which includes this file]
; 1. The constant COLOR_ORDER: must be one of
; PALETTE - for 8-bit image with palette (sysfunction 65)
; MENUETOS - for MenuetOS and KolibriOS color order (sysfunction 7)
; OTHER - for standard color order
; 2. Define constant GIF_SUPPORT_INTERLACED if you want to support interlaced
; GIFs.
; 3. Single image mode vs multiple image mode:
; if the program defines the variable 'gif_img_count' of type dword
; somewhere, ReadGIF will enter multiple image mode: gif_img_count
; will be initialized with image count, output format is GIF_list,
; the function GetGIFinfo retrieves Nth image info. Otherwise, ReadGIF
; uses single image mode: exit after end of first image, output is
; <dd width,height, times width*height[*3] db image>
 
if ~ (COLOR_ORDER in <PALETTE,MENUETOS,OTHER>)
; This message may not appear under MenuetOS, so watch...
display 'Please define COLOR_ORDER: PALETTE, MENUETOS or OTHER',13,10
end if
 
if defined gif_img_count
; virtual structure, used internally
 
struct GIF_list
NextImg rd 1
Left rw 1
Top rw 1
Width rw 1
Height rw 1
Delay rd 1
Displacement rd 1 ; 0 = not specified
; 1 = do not dispose
; 2 = restore to background color
; 3 = restore to previous
if COLOR_ORDER eq PALETTE
Image rd 1
end if
ends
 
struct GIF_info
Left rw 1
Top rw 1
Width rw 1
Height rw 1
Delay rd 1
Displacement rd 1
if COLOR_ORDER eq PALETTE
Palette rd 1
end if
ends
 
; ****************************************
; FUNCTION GetGIFinfo - retrieve Nth image info
; ****************************************
; in:
; esi - pointer to image list header
; ecx - image_index (0...img_count-1)
; edi - pointer to GIF_info structure to be filled
 
; out:
; eax - pointer to RAW data, or 0, if error
 
GetGIFinfo:
push esi ecx edi
xor eax,eax
jecxz .eloop
.lp:
mov esi,[esi]
test esi,esi
jz .error
loop .lp
.eloop:
lodsd
movsd
movsd
movsd
movsd
if COLOR_ORDER eq PALETTE
lodsd
mov [edi],esi
else
mov eax,esi
end if
.error:
pop edi ecx esi
ret
 
end if
 
_null fix 0x1000
 
; ****************************************
; FUNCTION ReadGIF - unpacks GIF image
; ****************************************
; in:
; esi - pointer to GIF file in memory
; edi - pointer to output image list
 
; out:
; eax - 0, all OK;
; eax - 1, invalid signature;
; eax >=8, unsupported image attributes
;
 
ReadGIF:
push esi edi
mov [.cur_info],edi
xor eax,eax
mov [.globalColor],eax
if defined gif_img_count
mov [gif_img_count],eax
mov [.anim_delay],eax
mov [.anim_disp],eax
end if
inc eax
cmp dword[esi],'GIF8'
jne .ex ; signature
mov ecx,[esi+0xa]
add esi,0xd
mov edi,esi
test cl,cl
jns .nextblock
mov [.globalColor],esi
call .Gif_skipmap
.nextblock:
cmp byte[edi],0x21
jne .noextblock
inc edi
if defined gif_img_count
cmp byte[edi],0xf9 ; Graphic Control Ext
jne .no_gc
movzx eax,word [edi+3]
mov [.anim_delay],eax
mov al,[edi+2]
shr al,2
and eax,7
mov [.anim_disp],eax
add edi,7
jmp .nextblock
.no_gc:
end if
inc edi
.block_skip:
movzx eax,byte[edi]
lea edi,[edi+eax+1]
test eax,eax
jnz .block_skip
jmp .nextblock
.noextblock:
mov al,8
cmp byte[edi],0x2c ; image beginning
jne .ex
if defined gif_img_count
inc [gif_img_count]
end if
inc edi
mov esi,[.cur_info]
if defined gif_img_count
add esi,4
end if
xchg esi,edi
if defined GIF_SUPPORT_INTERLACED
movzx ecx,word[esi+4]
mov [.width],ecx
movzx eax,word[esi+6]
imul eax,ecx
if ~(COLOR_ORDER eq PALETTE)
lea eax,[eax*3]
end if
mov [.img_end],eax
inc eax
mov [.row_end],eax
and [.pass],0
test byte[esi+8],40h
jz @f
if ~(COLOR_ORDER eq PALETTE)
lea ecx,[ecx*3]
end if
mov [.row_end],ecx
@@:
end if
if defined gif_img_count
movsd
movsd
mov eax,[.anim_delay]
stosd
mov eax,[.anim_disp]
stosd
else
movzx eax,word[esi+4]
stosd
movzx eax,word[esi+6]
stosd
add esi,8
end if
push edi
mov ecx,[esi]
inc esi
test cl,cl
js .uselocal
push [.globalColor]
mov edi,esi
jmp .setPal
.uselocal:
call .Gif_skipmap
push esi
.setPal:
movzx ecx,byte[edi]
inc ecx
mov [.codesize],ecx
dec ecx
if ~(COLOR_ORDER eq PALETTE)
pop [.Palette]
end if
lea esi,[edi+1]
mov edi,.gif_workarea
xor eax,eax
lodsb ; eax - block_count
add eax,esi
mov [.block_ofs],eax
mov [.bit_count],8
mov eax,1
shl eax,cl
mov [.CC],eax
mov ecx,eax
inc eax
mov [.EOI],eax
mov eax, _null shl 16
.filltable:
stosd
inc eax
loop .filltable
if COLOR_ORDER eq PALETTE
pop eax
pop edi
push edi
scasd
push esi
mov esi,eax
mov ecx,[.CC]
@@:
lodsd
dec esi
bswap eax
shr eax,8
stosd
loop @b
pop esi
pop eax
mov [eax],edi
else
pop edi
end if
if defined GIF_SUPPORT_INTERLACED
mov [.img_start],edi
add [.img_end],edi
add [.row_end],edi
end if
.reinit:
mov edx,[.EOI]
inc edx
push [.codesize]
pop [.compsize]
call .Gif_get_sym
cmp eax,[.CC]
je .reinit
call .Gif_output
.cycle:
movzx ebx,ax
call .Gif_get_sym
cmp eax,edx
jae .notintable
cmp eax,[.CC]
je .reinit
cmp eax,[.EOI]
je .end
call .Gif_output
.add:
mov dword [.gif_workarea+edx*4],ebx
cmp edx,0xFFF
jae .cycle
inc edx
bsr ebx,edx
cmp ebx,[.compsize]
jne .noinc
inc [.compsize]
.noinc:
jmp .cycle
.notintable:
push eax
mov eax,ebx
call .Gif_output
push ebx
movzx eax,bx
call .Gif_output
pop ebx eax
jmp .add
.end:
if defined GIF_SUPPORT_INTERLACED
mov edi,[.img_end]
end if
if defined gif_img_count
mov eax,[.cur_info]
mov [eax],edi
mov [.cur_info],edi
add esi,2
xchg esi,edi
.nxt:
cmp byte[edi],0
jnz .continue
inc edi
jmp .nxt
.continue:
cmp byte[edi],0x3b
jne .nextblock
xchg esi,edi
and dword [eax],0
end if
xor eax,eax
.ex:
pop edi esi
ret
 
.Gif_skipmap:
; in: ecx - image descriptor, esi - pointer to colormap
; out: edi - pointer to area after colormap
 
and ecx,111b
inc ecx ; color map size
mov ebx,1
shl ebx,cl
lea ebx,[ebx*2+ebx]
lea edi,[esi+ebx]
ret
 
.Gif_get_sym:
mov ecx,[.compsize]
push ecx
xor eax,eax
.shift:
ror byte[esi],1
rcr eax,1
dec [.bit_count]
jnz .loop1
inc esi
cmp esi,[.block_ofs]
jb .noblock
push eax
xor eax,eax
lodsb
test eax,eax
jnz .nextbl
mov eax,[.EOI]
sub esi,2
add esp,8
jmp .exx
.nextbl:
add eax,esi
mov [.block_ofs],eax
pop eax
.noblock:
mov [.bit_count],8
.loop1:
loop .shift
pop ecx
rol eax,cl
.exx:
xor ecx,ecx
ret
 
.Gif_output:
push esi eax edx
mov edx,.gif_workarea
.next:
push word[edx+eax*4]
mov ax,word[edx+eax*4+2]
inc ecx
cmp ax,_null
jnz .next
shl ebx,16
mov bx,[esp]
.loop2:
pop ax
 
if COLOR_ORDER eq PALETTE
stosb
else
lea esi,[eax+eax*2]
add esi,[.Palette]
 
if COLOR_ORDER eq MENUETOS
mov esi,[esi]
bswap esi
shr esi,8
mov [edi],esi
add edi,3
else
movsb
movsb
movsb
end if
end if
 
if defined GIF_SUPPORT_INTERLACED
cmp edi,[.row_end]
jb .norowend
mov eax,[.width]
if ~(COLOR_ORDER eq PALETTE)
lea eax,[eax*3]
end if
push eax
sub edi,eax
add eax,eax
cmp [.pass],3
jz @f
add eax,eax
cmp [.pass],2
jz @f
add eax,eax
@@:
add edi,eax
pop eax
cmp edi,[.img_end]
jb .nextrow
mov edi,[.img_start]
inc [.pass]
add edi,eax
cmp [.pass],3
jz @f
add edi,eax
cmp [.pass],2
jz @f
add edi,eax
add edi,eax
@@:
.nextrow:
add eax,edi
mov [.row_end],eax
xor eax,eax
.norowend:
end if
 
loop .loop2
pop edx eax esi
ret
 
uglobal
align 4
ReadGIF.globalColor rd 1
ReadGIF.cur_info rd 1 ; image table pointer
ReadGIF.codesize rd 1
ReadGIF.compsize rd 1
ReadGIF.bit_count rd 1
ReadGIF.CC rd 1
ReadGIF.EOI rd 1
if ~(COLOR_ORDER eq PALETTE)
ReadGIF.Palette rd 1
end if
ReadGIF.block_ofs rd 1
if defined GIF_SUPPORT_INTERLACED
ReadGIF.row_end rd 1
ReadGIF.img_end rd 1
ReadGIF.img_start rd 1
ReadGIF.pass rd 1
ReadGIF.width rd 1
end if
if defined gif_img_count
ReadGIF.anim_delay rd 1
ReadGIF.anim_disp rd 1
end if
ReadGIF.gif_workarea rb 16*1024
endg
/data/eng/iconstrp.png
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.png:ICONSTRP.PNG index_htm:INDEX.HTM \
icons.dat:ICONS.DAT iconstrp.gif:ICONSTRP.GIF 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.gif
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.png
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.png:ICONSTRP.PNG index_htm:INDEX.HTM \
icons.dat:ICONS.DAT iconstrp.gif:ICONSTRP.GIF 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.gif
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.png
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.png:ICONSTRP.PNG index_htm:INDEX.HTM \
icons.dat:ICONS.DAT iconstrp.gif:ICONSTRP.GIF 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.gif
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/Vortex86MX-eng/iconstrp.png
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/iconstrp.gif
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/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.png:ICONSTRP.PNG index_htm:INDEX.HTM \
icons.dat:ICONS.DAT iconstrp.gif:ICONSTRP.GIF 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 \