Subversion Repositories Kolibri OS

Compare Revisions

No changes between revisions

Regard whitespace Rev 50 → Rev 51

/programs/desktop/trunk/desktop.asm
1,9 → 1,10
;
; UNIFORM WINDOW COLOURS
; UNIFORM WINDOW COLOURS & SKIN
;
; Compile with FASM for Menuet
;
; < russian edition by Ivan Poddubny >
; < skin selection by Mike Semenyako >
;
 
;******************************************************************************
13,7 → 14,7
dd 1 ; header version
dd START ; start address
dd I_END ; file size
dd 20000h ; memory
dd 28000h ; memory
dd 10000h ; stack pointer (0x10000+ - work area for os)
dd 0;,0 ; parameters, reserved
 
22,7 → 23,47
;******************************************************************************
 
 
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
 
 
START: ; start of execution
 
mov eax,48 ; get current colors
32,14 → 73,14
int 0x40
 
cld
mov esi, default_file
mov esi,default_skn
mov edi, fname
mov ecx, default_file.size
mov ecx,default_skn.size
rep movsb
mov [skin_info.fname],0
mov [skin_info.workarea],0x10000
call load_skin_file
 
mov [read_info.address], color_table
mov [read_info.workarea], 0x10000
mov [read_info.start_block], 0
 
red:
call draw_window ; at first, draw the window
71,6 → 112,25
mov eax,17 ; get id
int 0x40
 
cmp ah,11 ; read string
jne no_string
call read_string
jmp still
no_string:
 
cmp ah,12 ; load file
jne no_load
call load_file
call draw_window
jmp still
no_load:
 
cmp ah,13 ; save file
jne no_save
call save_file
jmp still
no_save:
 
cmp ah,14 ; set 3d buttons
jne no_3d
mov eax,48
91,8 → 151,9
jmp still
no_flat:
 
cmp ah,51 ; apply
cmp ah,16 ; apply
jne no_apply
apply_direct:
mov eax,48
mov ebx,2
mov ecx,color_table
104,6 → 165,22
int 0x40
no_apply:
 
cmp ah,17 ; load skin file
jne no_load_skin
call load_skin_file
call draw_window
jmp still
no_load_skin:
 
cmp ah,18 ; apply skin
jne no_apply_skin
cmp [skin_info.fname],0
je no_apply_skin
mcall 48,8,skin_info
call draw_window
jmp still
no_apply_skin:
 
cmp ah,31
jb no_new_colour
cmp ah,41
124,28 → 201,9
int 0x40
noid1:
 
cmp ah,11 ; read string
jne no_string
call read_string
jmp still
no_string:
 
cmp ah,12 ; load file
jne no_load
call load_file
call draw_window
jmp still
no_load:
 
cmp ah,13 ; save file
jne no_save
call save_file
jmp still
no_save:
 
jmp still
 
 
draw_cursor:
 
pusha
174,9 → 232,9
cmp ebx,32
jbe no_color
 
cmp ebx,280 ; CHANGE COLOR
cmp ebx,266 ; CHANGE COLOR
jb no_color
cmp ebx,280+20*3
cmp ebx,266+20*3
jg no_color
 
cmp ecx,30+128
184,7 → 242,7
cmp ecx,30
jb no_color
 
sub ebx,280
sub ebx,266
mov eax,ebx
cdq
mov ebx,20
212,11 → 270,47
pushad
 
mov [read_info.mode], 0
mov [read_info.start_block],0
mov [read_info.blocks], 1
mov [read_info.address] ,color_table
mov [read_info.workarea] ,0x10000
mcall 58, read_info
 
call draw_colours
popad
ret
 
load_skin_file:
pushad
 
mov [read_info.mode] ,0
mov [read_info.start_block],0
mov [read_info.blocks] ,64
mov [read_info.address] ,0x20000
mov [read_info.workarea] ,0x10000
mcall 58, read_info
 
cmp dword[0x20000+SKIN_HEADER.ident],'SKIN'
jne @f
 
mov esi,fname
mov edi,skin_info.fname
mov ecx,257
rep movsb
 
mov esi,0x20000
mov edi,0x18000
mov ecx,0x8000/4
rep movsd
 
mov ebp,0x18000
mov esi,[ebp+SKIN_HEADER.params]
add esi,ebp
lea esi,[esi+SKIN_PARAMS.dtp.data]
mov edi,color_table
mov ecx,10
rep movsd
@@:
 
popad
ret
 
226,6 → 320,8
 
mov [write_info.mode], 1
mov [write_info.bytes2write], 10*4
mov [write_info.address] ,color_table
mov [write_info.workarea] ,0x10000
mcall 58, write_info
 
popad
238,7 → 334,7
 
mov edi,fname
mov al,'_'
mov ecx,54
mov ecx,87
cld
rep stosb
 
270,13 → 366,13
call print_text
 
inc edi
cmp edi, fname+54
cmp edi, fname+87
jne f11
 
read_done:
 
mov ecx, fname
add ecx, 55
add ecx, 88
sub ecx, edi
mov eax, 0
cld
292,12 → 388,12
print_text:
pushad
 
mpack ebx, 16, 6*54+4
mpack ecx, 234, 10
mpack ebx,15,6*87+4
mpack ecx,(30+18*10+2),11
mcall 13, , , [w_work]
 
mpack ebx, 17, 235
mcall 4, , [w_work_text], fname, 54
mpack ebx,17,(30+18*10+4)
mcall 4,,[w_work_text],fname,87
 
popad
ret
308,13 → 404,13
pusha
 
mov eax,13
mov ebx,280*65536+60
mov ebx,266*65536+60
mov ecx,170*65536+30
mov edx,[color]
int 0x40
 
; mov eax,13
mov ebx,280*65536+60
mov ebx,266*65536+60
mov ecx,200*65536+10
mov edx,[w_work]
int 0x40
322,7 → 418,7
mov eax,47
mov ebx,0+1*256+8*65536
mov ecx,[color]
mov edx,280*65536+201
mov edx,272*65536+201
mov esi,[w_work_text]
int 0x40
 
338,12 → 434,12
mov esi,color_table
 
mov ebx,225*65536+32
mov ecx,37*65536+12
mov ecx,32*65536+12
newcol:
mov eax,13
mov edx,[esi]
int 0x40
add ecx,20*65536
add ecx,18*65536
add esi,4
cmp esi,color_table+4*9
jbe newcol
353,7 → 449,190
ret
 
 
draw_framerect: ; ebx,ecx
push ebx ecx
add bx,[esp+6]
mov cx,[esp+2]
dec ebx
mcall 38
add cx,[esp]
rol ecx,16
add cx,[esp]
sub ecx,0x00010001
mcall
mov ebx,[esp+4]
mov ecx,[esp]
mov bx,[esp+6]
add cx,[esp+2]
dec ecx
mcall
add bx,[esp+4]
rol ebx,16
add bx,[esp+4]
sub ebx,0x00010001
mcall
add esp,8
ret
 
find_bitmap:
mov edi,[ebp+SKIN_HEADER.bitmaps]
add edi,ebp
xor ebx,ebx
.lp1: cmp dword[edi],0
je .lp2
cmp dword[edi+0],eax
jne @f
mov ebx,[edi+SKIN_BITMAPS.data]
add ebx,ebp
mov ecx,[ebx-2]
mov cx,[ebx+4]
add ebx,8
.lp2: ret
@@: add edi,8
jmp .lp1
 
draw_skin:
mcall 13,<345,206>,<20,191>,0x00FFFFFF
mov ebp,0x18000
mov edi,[ebp+SKIN_HEADER.params]
add edi,ebp
mpack ebx,345+45,150
mpack ecx,20+10,140
mov edx,[edi+SKIN_PARAMS.colors_1.outer]
call draw_framerect
mpack ebx,345+45+4,150-8
mpack ecx,20+10+4,140-8
mov edx,[edi+SKIN_PARAMS.colors_1.inner]
call draw_framerect
mcall 13,<345+45+1,148>,<20+10+1,3>,[edi+SKIN_PARAMS.colors_1.frame]
add ecx,135*65536
mcall
mcall ,<345+45+1,3>,<20+10+1,138>
add ebx,145*65536
mcall
mcall ,<345+45+5,140>,<20+10+5,130>,dword[edi+SKIN_PARAMS.dtp.data+system_colors.work]
 
mov eax,0x00000001 ; left, inactive
call find_bitmap
mcall 7,,,<345+45,20+10>
 
pushd [ebx-8]
mov eax,0x00000003 ; base, inactive
call find_bitmap
pop edx
mov esi,345+45+150-1
sub esi,edx
shl edx,16
add edx,(345+45)*65536+20+10
mcall 7
@@: rol edx,16
add dx,[ebx-8]
cmp dx,si
ja @f
rol edx,16
mcall 7
jmp @b
@@:
 
mov eax,0x00000002 ; oper, inactive
call find_bitmap
mov edx,ecx
shr edx,16
neg edx
shl edx,16
add edx,(345+45+150)*65536+20+10
mcall 7
 
mov ebp,0x18000
mov edi,[ebp+SKIN_HEADER.params]
add edi,ebp
mov eax,dword[edi+SKIN_PARAMS.margin.left-2]
mov ax,word[edi+SKIN_PARAMS.skin_height]
sub ax,[edi+SKIN_PARAMS.margin.bottom]
shr ax,1
add ax,[edi+SKIN_PARAMS.margin.top]
add ax,-4
push eax
lea ebx,[eax+(345+45)*65536+20+10]
mcall 4,,dword[edi+SKIN_PARAMS.dtp.data+system_colors.grab_text],test_text,test_text.size
 
;---------------------------------------------------------
 
mov edi,[ebp+SKIN_HEADER.params]
add edi,ebp
mpack ebx,345+10,150
mpack ecx,20+40,140
mov edx,[edi+SKIN_PARAMS.colors.outer]
call draw_framerect
mpack ebx,345+10+4,150-8
mpack ecx,20+40+4,140-8
mov edx,[edi+SKIN_PARAMS.colors.inner]
call draw_framerect
mcall 13,<345+10+1,148>,<20+40+1,3>,[edi+SKIN_PARAMS.colors.frame]
add ecx,135*65536
mcall
mcall ,<345+10+1,3>,<20+40+1,138>
add ebx,145*65536
mcall
mcall ,<345+10+5,140>,<20+40+5,130>,dword[edi+SKIN_PARAMS.dtp.data+system_colors.work]
 
mov eax,0x00010001 ; left, inactive
call find_bitmap
mcall 7,,,<345+10,20+40>
 
pushd [ebx-8]
mov eax,0x00010003 ; base, inactive
call find_bitmap
pop edx
mov esi,345+10+150-1
sub esi,edx
shl edx,16
add edx,(345+10)*65536+20+40
mcall 7
@@: rol edx,16
add dx,[ebx-8]
cmp dx,si
ja @f
rol edx,16
mcall 7
jmp @b
@@:
 
mov eax,0x00010002 ; oper, inactive
call find_bitmap
mov edx,ecx
shr edx,16
neg edx
shl edx,16
add edx,(345+10+150)*65536+20+40
mcall 7
 
mov ebp,0x18000
mov edi,[ebp+SKIN_HEADER.params]
add edi,ebp
pop eax
lea ebx,[eax+(345+10)*65536+20+40]
mcall 4,,dword[edi+SKIN_PARAMS.dtp.data+system_colors.grab_text],test_text,test_text.size
 
;----------------------------------------------------------------------
 
mov edi,[ebp+SKIN_HEADER.buttons]
add edi,ebp
.lp1: cmp dword[edi],0
je .lp2
mov ebx,dword[edi+SKIN_BUTTONS.left-2]
mov bx,[edi+SKIN_BUTTONS.width]
mov ecx,dword[edi+SKIN_BUTTONS.top-2]
mov cx,[edi+SKIN_BUTTONS.height]
add ebx,(345+10+150)*65536
add ecx,(20+40)*65536
dec ebx
dec ecx
mcall 8,,,0x40000000
add edi,12
jmp .lp1
.lp2: ret
 
; *********************************************
; ******* WINDOW DEFINITIONS AND DRAW ********
; *********************************************
380,8 → 659,8
 
; DRAW WINDOW
mov eax,0 ; function 0 : define and draw window
mov ebx,110*65536+360 ; [x start] *65536 + [x size]
mov ecx,50*65536+300 ; [y start] *65536 + [y size]
mov ebx,110*65536+555 ; [x start] *65536 + [x size]
mov ecx,50*65536+255 ; [y start] *65536 + [y size]
mov edx,[w_work] ; color of work area RRGGBB,8->color
or edx,0x02000000
mov esi,[w_grab] ; color of grab bar RRGGBB,8->color gl
401,60 → 680,81
int 0x40
; CLOSE BUTTON
mov eax,8 ; function 8 : define and draw button
mov ebx,(360-19)*65536+12 ; [x start] *65536 + [x size]
mov ebx,(555-19)*65536+12 ; [x start] *65536 + [x size]
mov ecx,4*65536+12 ; [y start] *65536 + [y size]
mov edx,1 ; button id
mov esi,[w_grab_button] ; button color RRGGBB
int 0x40
 
if lang eq ru
load_w = (5*2+6*9)
save_w = (5*2+6*9)
flat_w = (5*2+6*7)
apply_w = (5*2+6*9)
else
load_w = (5*2+6*6)
save_w = (5*2+6*6)
flat_w = (5*2+6*4)
apply_w = (5*2+6*7)
end if
 
; mov eax,8 ; FILENAME BUTTON
mov ebx,280*65536+60
mov ecx,250*65536+14
mov edx,11
mov esi,[w_work_button]
mov ebx,5*65536+545
mov ecx,212*65536+10
mov edx,0x4000000B
int 0x40
 
; mov eax,8 ; SAVE BUTTON
mov ebx,280*65536+29
mov ecx,270*65536+14
; mov eax,8 ; LOAD BUTTON
mov ebx,15*65536+load_w
mov ecx,(30+18*11)*65536+14
mov edx,12
mov esi,[w_work_button]
int 0x40
 
; mov eax,8 ; LOAD BUTTON
add ebx,30*65536
; mov eax,8 ; SAVE BUTTON
add ebx,(load_w+2)*65536-load_w+save_w
inc edx
int 0x40
 
; mov eax,8 ; 3D
mov ebx,15*65536+35
mov ecx,275*65536+14
mov ebx,(340-t1.size*6-13)*65536+(5*2+6*4)
inc edx
int 0x40
; mov eax,8 ; FLAT
if lang eq ru
add ebx,40*65536+7
else
add ebx,40*65536
end if
add ebx,(5*2+6*4+2)*65536-(5*2+6*4)+flat_w
inc edx
int 0x40
 
; mov eax,8 ; APPLY BUTTON
add ebx,(flat_w+6+2)*65536-flat_w+apply_w
inc edx
int 0x40
 
; mov eax,8 ; LOAD SKIN BUTTON
mov ebx,(336+(555-335)/2-t2.size*6/2)*65536+load_w
inc edx
int 0x40
 
; mov eax,8 ; APPLY SKIN BUTTON
add ebx,(load_w+6+2)*65536-load_w+apply_w
inc edx
int 0x40
 
mov eax, 4
mov ebx, 281*65536+254
mov ebx, (339-t1.size*6-12)*65536+(30+18*11+4)
mov ecx, [w_work_button_text]
mov edx, t1
mov esi, t1.size
int 0x40
 
; mov eax, 4
mov ebx, 277*65536+274
mov ebx,(336+(555-335)/2-t2.size*6/2)*65536+(30+18*11+4)
mov edx, t2
mov esi, t2.size
int 0x40
 
 
mov eax,38 ; R G B COLOR GLIDES
mov ebx,280*65536+300 ;295
mov ebx,266*65536+285
mov ecx,30*65536+30
mov edx,0xff0000
.newl:
476,22 → 776,17
 
mov edx,31 ; BUTTON ROW
mov ebx,15*65536+200
mov ecx,35*65536+14
mov ecx,30*65536+14
mov esi,[w_work_button]
newb:
mov eax,8
int 0x40
add ecx,20*65536
add ecx,18*65536
inc edx
cmp edx,40
jbe newb
 
; mov eax,8 ; APPLY BUTTON
add ecx,20*65536
mov edx,51
int 0x40
 
mov ebx,20*65536+39 ; ROW OF TEXTS
mov ebx,15*65536+34 ; ROW OF TEXTS
mov ecx,[w_work_button_text]
mov edx,text
mov esi,32
498,7 → 793,7
newline:
mov eax,4
int 0x40
add ebx,20
add ebx,18
add edx,32
cmp [edx],byte 'x'
jne newline
505,8 → 800,26
 
call draw_colours
 
mcall 13,<5,546>,<212,11>,[w_work]
mcall 13,<337,7>,<2,250>,[w_frame]
shr edx,1
and edx,0x007F7F7F
mcall 38,<336,336>,<20,250>
add ebx,0x00080008
mcall
sub ebx,0x00040004
mcall ,,<0,255>
mcall ,<5,550>,<211,211>
add ecx,0x000C000C
mcall
 
call print_text
 
cmp dword[0x18000+SKIN_HEADER.ident],'SKIN'
jne @f
call draw_skin
@@:
 
mov eax,12 ; function 12:tell os about windowdraw
mov ebx,2 ; 2, end of draw
int 0x40
528,8 → 841,7
ru, ' ’…Š‘’ ‚ €Ž—…‰ Ž‹€‘’ˆ ',\
ru, ' ƒ€”ˆŠ€ ‚ €Ž—…‰ Ž‹€‘’ˆ ',\
ru, ' ',\
ru, ' ˆŒ…ˆ’œ ',\
ru, ' 3D ‹Ž‘Š ',\
ru, ' ‡€ƒ“‡ˆ’œ ‘Ž•€ˆ’œ ',\
ru, 'x',\
en, ' WINDOW FRAME ',\
en, ' WINDOW GRAB BAR ',\
542,26 → 854,28
en, ' WINDOW WORK AREA TEXT ',\
en, ' WINDOW WORK AREA GRAPH ',\
en, ' ',\
en, ' APPLY CHANGES ',\
en, ' 3D FLAT ',\
en, ' LOAD SAVE ',\
en, 'x'
 
 
lsz t1,\
ru, ' 3D ‹Ž‘Šˆ… ˆŒ…ˆ’œ ',\
en, ' 3D FLAT APPLY '
 
lsz t2,\
ru, ' ‡€ƒ ‘Ž• ',\
en, ' LOAD SAVE '
ru, ' ‡€ƒ“‡ˆ’œ ˆŒ…ˆ’œ ',\
en, ' LOAD APPLY ',\
 
lsz t1,\
ru, ' ”€‰‹ ',\
en, ' FILENAME '
lsz test_text,\
ru, '‡ £®«®¢®ª',\
en, 'Caption'
 
lsz labelt,\
ru, '€‘’Ž‰Š€ –‚…’Ž‚',\
en, 'DESKTOP COLOURS - DEFINE COLOR AND CLICK ON TARGET'
 
sz default_skn, '/RD/1/DEFAULT.SKN',0
 
sz default_file, '/RD/1/DEFAULT.DTP'
 
color dd 0
 
I_END:
583,6 → 897,14
.workarea dd ?
end virtual
 
skin_info:
.mode dd ?
.start_block dd ?
.blocks dd ?
.address dd ?
.workarea dd ?
.fname rb 256+1
 
app_colours:
 
w_frame dd ?
/programs/desktop/trunk/macros.inc
197,17 → 197,30
}
 
 
macro struct name
; structure definition helper
macro struct name, [arg]
{
common
name@struct equ name
struc name arg {
}
 
macro struct_helper name
{
match xname,name
\{
virtual at 0
name name
sizeof.#name = $ - name
xname xname
sizeof.#xname = $ - xname
name equ sizeof.#xname
end virtual
\}
}
 
ends fix } struct_helper name@struct
 
; structures used in MeOS
struc process_information
{
struct process_information
.cpu_usage dd ? ; +0
.window_stack_position dw ? ; +4
.window_stack_value dw ? ; +6
222,11 → 235,9
.y_size dd ? ; +46
.slot_state dw ? ; +50
rb (1024-52)
}
struct process_information
ends
 
struc system_colors
{
struct system_colors
.frame dd ?
.grab dd ?
.grab_button dd ?
237,8 → 248,7
.work_button_text dd ?
.work_text dd ?
.work_graph dd ?
}
struct system_colors
ends
 
 
; constants
/programs/grscreen/trunk/grscreen.asm
30,12 → 30,6
db "MenuetOS RE #8",13,10
 
START:
; load system colors
mcall 58, read_info
 
; set system colors
mcall 48, 2, sc, sizeof.system_colors
 
; set stretch backgound
mcall 15, 4, 2
 
96,14 → 90,6
 
;------------------------------------------------------------------------------
 
read_info:
.mode dd 0
.start_block dd 0
.blocks dd 1
.address dd sc
.workarea dd work_area
.path db "/rd/1/myblue.dtp",0
 
start_info:
.mode dd 16
dd 0
122,9 → 108,6
I_END:
;rd 256
 
sc system_colors
rb 512-40
 
align 32
work_area:
 
/programs/icon/trunk/gif_lite.inc
0,0 → 1,328
; GIF LITE v2.0 by Willow
; Written in pure assembler by Ivushkin Andrey aka Willow
;
; This include file will contain functions to handle GIF image format
;
; Created: August 15, 2004
; Last changed: September 9, 2004
 
; Change COLOR_ORDER in your program
; if colors are displayed improperly
 
if ~ (COLOR_ORDER in <MENUETOS,OTHER>)
; This message may not appear under MenuetOS, so watch...
display 'Please define COLOR_ORDER: MENUETOS or OTHER',13,10
end if
 
; virtual structure, used internally
 
struc GIF_list
{
.NextImg rd 1
.Left rw 1
.Top rw 1
.Width rw 1
.Height rw 1
}
 
struc GIF_info
{
.Left rw 1
.Top rw 1
.Width rw 1
.Height rw 1
}
 
_null fix 0x1000
 
; ****************************************
; 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:
add esi,4
movsd
movsd
mov eax,esi
.error:
pop edi ecx esi
ret
 
; ****************************************
; FUNCTION ReadGIF - unpacks GIF image
; ****************************************
; in:
; esi - pointer to GIF file in memory
; edi - pointer to output image list
; eax - pointer to work area (MIN 16 KB!)
 
; out:
; eax - 0, all OK;
; eax - 1, invalid signature;
; eax >=8, unsupported image attributes
;
; ecx - number of images
 
ReadGIF:
push esi edi
mov [.table_ptr],eax
mov [.cur_info],edi
xor eax,eax
mov [.globalColor],eax
mov [.img_count],eax
inc eax
cmp dword[esi],'GIF8'
jne .er ; signature
mov ecx,[esi+0xa]
inc eax
add esi,0xd
mov edi,esi
bt ecx,7
jnc .nextblock
mov [.globalColor],esi
call .Gif_skipmap
.nextblock:
cmp byte[edi],0x21
jne .noextblock
inc edi
cmp byte[edi],0xf9 ; Graphic Control Ext
jne .no_gc
add edi,7
jmp .nextblock
.no_gc:
cmp byte[edi],0xfe ; Comment Ext
jne .no_comm
inc edi
.block_skip:
movzx eax,byte[edi]
lea edi,[edi+eax+1]
cmp byte[edi],0
jnz .block_skip
inc edi
jmp .nextblock
.no_comm:
cmp byte[edi],0xff ; Application Ext
jne .nextblock
add edi,13
jmp .block_skip
.noextblock:
cmp byte[edi],0x2c ; image beginning
jne .er
inc [.img_count]
inc edi
mov esi,[.cur_info]
add esi,4
xchg esi,edi
movsd
movsd
push edi
movzx ecx,word[esi]
inc esi
bt ecx,7
jc .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
pop [.Palette]
lea esi,[edi+1]
mov edi,[.table_ptr]
xor eax,eax
cld
lodsb ; eax - block_count
add eax,esi
mov [.block_ofs],eax
mov [.bit_count],8
mov eax,1
shl eax,cl
mov [.CC],eax
inc eax
mov [.EOI],eax
lea ecx,[eax-1]
mov eax, _null shl 16
.filltable:
stosd
inc eax
loop .filltable
pop edi
mov [.img_start],edi
.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:
push eax
mov eax,[.table_ptr]
mov [eax+edx*4],ebx
pop eax
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
.er:
pop edi
jmp .ex
.end:
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
xor eax,eax
stosd
mov ecx,[.img_count]
.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,[.table_ptr]
.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
 
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
movsw
movsb
end if
 
loop .loop2
pop edx eax esi
ret
 
.globalColor rd 1
.img_count rd 1
.cur_info rd 1 ; image table pointer
.img_start rd 1
.codesize rd 1
.compsize rd 1
.bit_count rd 1
.CC rd 1
.EOI rd 1
.Palette rd 1
.block_ofs rd 1
.table_ptr rd 1
/programs/icon/trunk/icon.asm
1,114 → 1,924
;
; ICON APPLICATION
;
; Compile with FASM for Menuet
;
; 22.02.05 Mario79
; 1) multi-threading
; 2)dinamic load BMP files
; 3)type on desktop with function 7
; 4)Image in memory only 8000h (32Kb) for all 48 icons.
; Old version ICON 5000h*48(decimal)=960Kb.
;
;********************************
;* *
;* DESKTOP ICON MANAGER *
;* *
;* Compile with flat assembler *
;* *
;********************************
; 22.02.05 was modified for work with new multi-thread ICON.
;******************************************************************************
RAW_SIZE equ 350000
ICON_SIZE equ 32*32*3
GIF_SIZE equ 45000
REC_SIZE equ 80
ICON_LST equ '/RD/1/ICON2.LST'
;ICON_APP equ '/hd/1/me/icon2';
ICON_APP equ '/RD/1/ICON2'
;ICON_STRIP equ '/HD/1/ME/ICONSTRP.GIF'
ICON_STRIP equ '/RD/1/ICONSTRP.GIF'
 
use32
 
org 0x0
db 'MENUET01' ; 8 byte id
dd 0x01 ; header version
dd START ; start of code
dd I_END ; size of image
dd icon_data+0x30000 ; memory for app
dd icon_data+0x30000 ; esp
dd I_Param , 0x0 ; I_Param , I_Icon
include 'macros.inc'
COLOR_ORDER equ MENUETOS
include 'gif_lite.inc'
;include 'debug.inc'
purge newline
;******************************************************************************
START: ; start of execution
mcall 58,finfo
cmp ebx,GIF_SIZE
ja close
mov esi,gif_file
mov edi,strip_file
mov eax,icon_data
call ReadGIF
movzx eax,word[strip_file+10]
shr eax,5
mov [icon_count],eax
call load_ic
boot_str:
cmp [I_Param],dword 'BOOT'
je load_icon_list2
call load_icon_list
red:
call draw_window ; at first, draw the window
mov esi,[current_icon]
jmp band
still:
 
db 'MENUET01'
dd 0x01
dd START
dd I_END
dd 0x8000
dd 0x8000
dd I_Param , 0x0
mov eax,10 ; wait here for event
int 0x40
 
include 'lang.inc'
include 'macros.inc'
cmp eax,1 ; redraw request ?
je red
cmp eax,2 ; key in buffer ?
je key
cmp eax,3 ; button in buffer ?
je button
 
get_bg_info:
mov eax,39
mov ebx,4
jmp still
 
key: ; key
mov eax,2 ; just read it and ignore
int 0x40
mov [bgrdrawtype],eax
jmp still
 
mov eax,39 ; get background size
mov ebx,1
button: ; button
mov eax,17 ; get id
int 0x40
mov [bgrxy],eax
 
shr eax,8
 
cmp eax,1 ; button id=1 ?
je close
noclose:
mov esi,[current_icon]
add esi,12
mov ebx,[cur_band];eax
cmp eax,31
jne .no_back
add ebx,8
mov eax,[icon_count]
cmp eax,ebx
jae .drwic2
xor ebx,ebx
jmp .drwic2
.no_back:
cmp eax,30
jne .no_side
test ebx,ebx
jnz .dec
mov ebx,[icon_count]
and ebx,0xfffffff8
add ebx,8
.dec:
sub ebx,8
.drwic2:
mov [cur_band],ebx
.drwic1:
call draw_icon
jmp still
.no_side:
cmp eax,32
jne .no_ico
push ebx
mcall 37,1
pop ebx
shr eax,16
sub eax,33-19
mov edi,34
xor edx,edx
div edi
lea ecx,[ebx+eax]
cmp ecx,[icon_count]
jae still
mov [sel_icon1],eax
mov ecx,eax
add eax,ebx
call itoa
jmp .drwic1
.no_ico:
cmp eax,11
jb no_str
cmp eax,13
jg no_str
call read_string
jmp still
no_str:
 
 
cmp eax,21 ; apply changes
jne no_apply
 
; (1) save list
 
mov ebx,finfo
mov dword[ebx],1
mov edx,REC_SIZE
imul edx,dword [icons]
mov [ebx+8],edx
mov esi,iconlst
call lst_path
mcall 58
 
; (2) terminate all icons
mov eax,9
mov ebx,I_END
mov ecx,-1
int 0x40
mov edi,[ebx+30]
newread2:
mov esi,1
newread:
inc esi
mov eax,9
mov ebx,I_END
mov ecx,esi
int 0x40
cmp edi,[ebx+30]
je newread
cmp esi,eax
jg all_terminated
 
cmp [I_END+10],dword 'ICON'
jne newread
mov eax,51
cmp eax,[I_END+42]
jne newread
cmp eax,[I_END+46]
jne newread
 
mov eax,18
mov ebx,2
mov ecx,esi
int 0x40
 
jmp newread2
 
finfo:
dd 0
dd 0
dd GIF_SIZE/512
dd gif_file
dd icon_data
.path:
db ICON_STRIP,0
rb 31-($-.path)
 
all_terminated:
 
apply_changes:
 
mov ebx,finfo
mov dword[ebx],16
mov dword[ebx+8],boot_str+6
mov esi,iconname
call lst_path
mcall 58
jmp still
 
no_apply:
 
cmp eax,22 ; user pressed the 'add icon' button
jne no_add_icon
 
mov eax,13
mov ebx,24*65536+270
mov ecx,(250+8*14)*65536+8
mov edx,0xffffff
int 0x40
mov eax,4
mov ebx,24*65536+250+8*14
mov ecx,0xff0000
mov edx,add_text
mov esi,add_text_len-add_text
int 0x40
 
mov eax,10
int 0x40
cmp eax,3
jne still
mov eax,17
int 0x40
shr eax,8
cmp eax,40
jb no_f
mov edi,eax
sub eax,40
 
xor edx,edx ; bcd -> 10
mov ebx,16
div ebx
imul eax,10
add eax,edx
 
mov ebx,eax
shr eax,16
and ebx,0xffff
mov [bgrx],eax
mov [bgry],ebx
add ebx,icons_reserved
cmp [ebx],byte 'x'
je no_f
mov [ebx],byte 'x'
 
mov [cur_btn],edi
xor edx,edx
mov ebx,10
div ebx
add eax,65
add edx,65
mov [icon_default+0],dl
mov [icon_default+1],al
 
inc dword [icons]
mov edi,[icons]
dec edi
imul edi,REC_SIZE
add edi,icon_data
 
mov [current_icon],edi
 
mov esi,icon_default
mov ecx,REC_SIZE
cld
rep movsb
mov esi,[current_icon]
jmp band
no_f:
 
call draw_btns;draw_window
 
jmp still
 
no_add_icon:
 
 
cmp eax,23 ; user pressed the remove icon button
jne no_remove_icon
 
mov eax,13
mov ebx,24*65536+270
mov ecx,(250+8*14)*65536+8
mov edx,0xffffff
int 0x40
mov eax,4
mov ebx,24*65536+250+8*14
mov ecx,0xff0000
mov edx,rem_text
mov esi,rem_text_len-rem_text
int 0x40
 
mov eax,10
int 0x40
cmp eax,3
jne no_f;ound
mov eax,17
int 0x40
shr eax,8
cmp eax,40
jb red;no_f;ound
sub eax,40
 
xor edx,edx
mov ebx,16
div ebx
imul eax,10
add eax,edx
 
mov ebx,eax
add ebx,icons_reserved
cmp [ebx],byte 'x'
jne red
mov [ebx],byte ' '
 
xor edx,edx
mov ebx,10
div ebx
shl eax,8
mov al,dl
 
add eax,65*256+65
 
mov esi,icon_data
mov edi,REC_SIZE
imul edi,[icons]
add edi,icon_data
news:
cmp word [esi],ax
je foundi
add esi,REC_SIZE
cmp esi,edi
jb news
jmp red
 
foundi:
 
mov ecx,edi
sub ecx,esi
 
mov edi,esi
add esi,REC_SIZE
 
cld
rep movsb
 
dec [icons]
 
mov eax,icon_data
mov [current_icon],eax
movzx ebx,word[eax]
sub bx,'AA'
shl bl,4
shr ebx,4
add ebx,40
mov [cur_btn],ebx
 
jmp red
 
no_remove_icon:
 
cmp eax,40 ; user pressed button for icon position
jb no_on_screen_button
mov edi,eax
sub eax,40
mov edx,eax
shl eax,4
and edx,0xf
mov dh,ah
add edx,65*256+65
 
mov esi,icon_data
mov ecx,[icons]
cld
findl1:
cmp dx,[esi]
je foundl1
add esi,REC_SIZE
loop findl1
jmp still
 
foundl1:
 
mov [current_icon],esi
mov [cur_btn],edi
band:
add esi,12
call atoi
and eax,0xfffff8
mov [cur_band],eax
call draw_btns
 
jmp still
 
no_on_screen_button:
 
 
jmp still
 
 
current_icon dd icon_data
 
 
print_strings:
 
pusha
 
mov eax,13 ; clear text area
mov ebx,100*65536+180
mov ecx,(278+12)*65536+40
mov edx,0xffffff
int 0x40
 
xor edi,edi
mov eax,4 ; icon text
mov ebx,100*65536+278+14
mov ecx,3
.ll:
push ecx
mov ecx,0x000000
mov edx,[current_icon]
add edx,[positions+edi*4]
movzx esi,byte[str_lens+edi]
inc edi
int 0x40
add ebx,14
pop ecx
loop .ll
 
popa
ret
 
START:
iconlst db ICON_LST,0
 
load_icon_list:
mov eax,6
mov ebx,icon_lst
xor ecx,ecx
mov edx,-1
 
mov edi,icons_reserved ; clear reserved area
mov eax,32
mov ecx,10*9
cld
rep stosb
 
mov ecx,[icons] ; set used icons to reserved area
mov esi,icon_data
int 0x40
ldl1:
movzx ebx,byte [esi+1]
sub ebx,65
imul ebx,10
movzx eax,byte [esi]
add ebx,eax
sub ebx,65
add ebx,icons_reserved
mov [ebx],byte 'x'
add esi,REC_SIZE
loop ldl1
ret
 
add eax,10
lst_path:
mov ecx,30
mov edi,finfo.path
rep movsb
ret
 
load_ic:
mov ebx,finfo
mov dword[ebx+8],(48*REC_SIZE)shr 9+1
mov dword[ebx+12],icon_data
mov dword[ebx+16],gif_file
mov esi,iconlst
call lst_path
mcall 58
lea eax,[ebx+10]
xor edx,edx
mov ebx,52
mov ebx,REC_SIZE
div ebx
mov [icons],eax
ret
 
call get_bg_info
 
mov eax,14
positions dd 3,16,47
str_lens db 8,30,30
 
read_string:
pusha
sub eax,11
movzx ecx,byte[str_lens+eax]
mov [cur_str],ecx
mov eax,[positions+eax*4]
 
mov edi,[current_icon]
add edi,eax
mov [addr],edi
 
add edi,ecx
 
.l1:
dec edi
cmp byte[edi],' '
jne .found
mov byte[edi],'_'
loop .l1
dec edi
.found:
inc edi
push edi
call print_strings
 
pop edi
f11:
mov eax,10
int 0x40
add eax,0x00010001
mov [scrxy],eax
cmp eax,2
jz fbu
jmp rs_done
fbu:
mov eax,2
int 0x40
shr eax,8
cmp eax,13
je rs_done
cmp eax,8
jnz nobsl
cmp edi,[addr]
jz f11
dec edi
mov [edi],byte '_'
call print_strings
jmp f11
nobsl:
cmp eax,31
jbe f11
mov [edi],al
call print_strings
 
apply_changes:
inc edi
mov esi,[addr]
add esi,[cur_str]
cmp esi,edi
jnz f11
 
mov edi,[icons]
mov esi,icon_data
mov ebp,0x5000 ; threads stack starting point
rs_done:
 
start_new:
movzx eax,byte [esi] ; x position
mov ecx,[addr]
add ecx,[cur_str]
sub ecx,edi
mov eax,32
cld
rep stosb
call print_strings
popa
ret
 
; *********************************************
; ******* WINDOW DEFINITIONS AND DRAW ********
; *********************************************
 
 
draw_window:
 
mov eax,12 ; function 12:tell os about windowdraw
mov ebx,1 ; 1, start of draw
int 0x40
 
; DRAW WINDOW
mov eax,0
mov ebx,210*65536+300
mov ecx,30*65536+390-14
mov edx,0x03ffffff
mov esi,0x808899ff
mov edi,0x008899ff
int 0x40
 
; WINDOW LABEL
mov eax,4
mov ebx,8*65536+8
mov ecx,0x10ffffff
mov edx,labelt
mov esi,labellen-labelt
int 0x40
 
mov eax,13 ; WINDOW AREA
mov ebx,20*65536+260
mov ecx,35*65536+200
mov edx,0x3366cc
int 0x40
 
mov eax,38 ; VERTICAL LINE ON WINDOW AREA
mov ebx,150*65536+150
mov ecx,35*65536+235
mov edx,0xffffff
int 0x40
 
mov eax,38 ; HOROZONTAL LINE ON WINDOW AREA
mov ebx,20*65536+280
mov ecx,135*65536+135
mov edx,0xffffff
int 0x40
 
mov eax,8 ; TEXT ENTER BUTTONS
mov ebx,20*65536+72
mov ecx,(275+1+14)*65536+13-2
mov edx,11
mov esi,[bcolor]
int 0x40
inc edx
add ecx,14*65536
int 0x40
inc edx
add ecx,14*65536
int 0x40
 
; mov eax,8 ; APPLY AND SAVE CHANGES BUTTON
mov ebx,20*65536+259
mov ecx,(329+2)*65536+15-4
mov edx,21
mov esi,[bcolor]
int 0x40
 
; mov eax,8 ; ADD ICON BUTTON
mov ebx,20*65536+129-2
add ecx,14*65536
inc edx
int 0x40
 
; mov eax,8 ; REMOVE ICON BUTTON
add ebx,(130+2)*65536
inc edx
int 0x40
 
mcall ,<20-14,8>,<260-23,32>,30+1 shl 30 ; IMAGE BUTTON
inc edx
add ebx,(36*7+26) shl 16
mcall
add edx,1+1 shl 29
mov ebx,(33-19) shl 16+(34*8)
mcall
mcall 4,<23-15,273-24>,0,arrows,1
add ebx,(36*7+27)shl 16
add edx,2
mcall
dec edx
mcall ,<120,250>
lea edx,[ebx+8 shl 16]
mov ecx,[icon_count]
mcall 47,0x30000,,,0
 
;;
mov ebx,24*65536+250+14+14+14
mov ecx,0xffffff
mov edx,text
mov esi,47
newline:
mov ecx,[edx]
add edx,4
mov eax,4
int 0x40
add ebx,14
add edx,47
cmp [edx],byte 'x'
jne newline
draw_btns:
;;
mov eax,0 ; DRAW BUTTONS ON WINDOW AREA
mov ebx,20*65536+25
mov ecx,35*65536+19
mov edi,icon_table
mov edx,40
newbline:
 
cmp [edi],byte 'x'
jne no_button
 
mov esi,0x5577cc
cmp [edi+90],byte 'x'
jne nores
mov esi,0xcc5555
cmp edx,[cur_btn]
jne nores
mov esi,0xe7e05a
nores:
 
push eax
mov eax,8
int 0x40
pop eax
 
no_button:
 
add ebx,26*65536
 
inc edi
inc edx
 
inc al
cmp al,9
jbe newbline
mov al,0
 
add edx,6
 
ror ebx,16
mov bx,20
ror ebx,16
add ecx,20*65536
 
inc ah
cmp ah,8;9
jbe newbline
call print_strings
call draw_icon
mov eax,12 ; function 12:tell os about windowdraw
mov ebx,2 ; 2, end of draw
int 0x40
 
ret
 
draw_icon:
mcall 13,<33-20,34*8+2>,<260-24,37+15-2>,0xffffff
mov esi,[current_icon]
add esi,12
call atoi
push eax
cmp eax,[cur_band]
jb .nou
sub eax,[cur_band]
cmp eax,7
ja .nou
imul eax,34 shl 16
lea ebx,[eax+(33-19) shl 16]
mov bx,34
mcall 13,,<236+35,3>,0xff0000
mov eax,[esp]
.nou:
mov eax,[cur_band]
and eax,0xfffffff8
push eax
imul eax,ICON_SIZE
lea ebx,[strip_file+12+eax]
mov ecx,8
mov edx,(33-18) shl 16+238
.nxt:
push ecx
mcall 7,,<32,32>
pop ecx
add ebx,ICON_SIZE
add edx,34 shl 16
loop .nxt
 
mcall 4,<45,280-2>,0,rep_text,rep_text_len-rep_text
lea edx,[ebx+(8*5)shl 16]
pop ecx
mcall 47,0x30000,,,0xff
add ecx,7
add edx,(3*8+4)shl 16
mcall
mov ecx,[icon_count]
add edx,(5*8+4)shl 16
mcall
pop ecx
add edx,(10*8+4)shl 16
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
 
labelt:
db ' áâனª  à ¡®ç¥£® á⮫ '
labellen:
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, '€†Œˆ’… € Ž‡ˆ–ˆž ˆŠŽŠˆ „‹Ÿ …„€Š’ˆŽ‚€ˆŸ '
db 'x' ; <- END MARKER, DONT DELETE
 
labelt:
db 'Icon Manager'
labellen:
end if
 
;ya dd 0
 
add_text db '€†Œˆ’… € Ž‡ˆ–ˆž …ˆ‘Ž‹œ‡“…ŒŽ‰ ˆŠŽŠˆ'
add_text_len:
 
rem_text db '€†Œˆ’… € Ž‡ˆ–ˆž ˆ‘Ž‹œ‡“…ŒŽ‰ ˆŠŽŠˆ'
rem_text_len:
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:
 
;//////////////////////////
get_bg_info:
mov eax,39
mov ebx,4
int 0x40
mov [bgrdrawtype],eax
 
mov eax,39 ; get background size
mov ebx,1
int 0x40
mov [bgrxy],eax
 
mov ebx,eax
shr eax,16
and ebx,0xffff
mov [bgrx],eax
mov [bgry],ebx
ret
 
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,24
add eax,16
movzx ebx,[warea.left]
add eax,ebx
jmp x_done
no_left:
sub eax,9
shl eax,6 ;imul eax,64
sub eax,24+32-1
movzx ebx,word [scrxy+2]
sal eax,6 ;imul eax,64
sub eax,16+52-1
movzx ebx,[warea.right]
add eax,ebx
x_done:
; mov [xpos],eax
mov [ebp-12],eax
 
movzx eax,byte [esi+1] ; y position
movzx eax,byte [ebp-20+1] ; y position
sub eax,'A' ; eax - number of letter
cmp eax,4
jg no_up
lea eax,[eax+4*eax]
shl eax,4 ;imul eax,80
add eax,34
shl eax,6 ;imul eax,80
add eax,16
movzx ebx,[warea.top]
add eax,ebx
jmp y_done
no_up:
sub eax,9
lea eax,[eax+4*eax]
shl eax,4 ;imul eax,80
movzx ebx,word [scrxy]
sub eax,32-1
shl eax,6 ;imul eax,80
sub eax,16-1
movzx ebx,[warea.bottom]
add eax,ebx
y_done:
; mov [ypos],eax
mov [ebp-8],eax
ret
 
;START2:
load_icon_list2:
mov eax,finfo
mov dword[eax],16
mov dword[eax+8],param_str
call get_bg_info
 
mcall 48,5
mov [warea.by_x],eax
mov [warea.by_y],ebx
 
mov eax,14
int 0x40
add eax,0x00010001
mov [scrxy],eax
 
apply_changes2:
 
mov edi,[icons]
mov esi,icon_data
mov ebp,0x5000 ; threads stack starting point
 
start_new:
mov eax,[esi]
mov [ebp-20],eax
call calc_icon_pos
 
mov eax,51
mov ebx,1
mov ecx,thread
116,7 → 926,7
mov edx,ebp
; sub edx,4
; mov [edx],esi
mov [ebp-4],esi
mov dword[ebp-4],esi
int 0x40
; add [thread_stack],0x100
add ebp,0x100
132,9 → 942,10
dec [create_thread_event] ;reset event
 
 
add esi,50+2
add esi,REC_SIZE
dec edi
jnz start_new
close:
or eax,-1
int 0x40
 
142,64 → 953,167
; pop ebp ;ebp - address of our icon
sub esp,12
mov ebp,esp
call draw_window
sub esp,16
call draw_window2
mov [create_thread_event],1
mov eax,40
mov ebx,010101b
int 0x40
jmp still
red:
call draw_window
 
still:
still2:
 
mov eax,10
int 0x40
 
cmp eax,1
je red
je red2
cmp eax,3
je button
je button2
cmp eax,5
jne still
jne still2
 
call get_bg_info
mov eax,5
mov ebx,1
call draw_icon
call draw_icon2
 
jmp still
jmp still2
 
key:
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,I_END,-1
mov eax,[I_END+process_information.x_start]
cmp eax,[ebp+0]
jne @f
mov eax,[I_END+process_information.y_start]
cmp eax,[ebp+4]
je .lp1
@@: call get_bg_info
mcall 67,[ebp+0],[ebp+4],51,51
 
.lp1: call draw_window2
jmp still2
 
key2:
mov eax,2
int 0x40
 
jmp still
jmp still2
 
button:
button2:
mov eax,17
int 0x40
 
; mcall 55,eax, , ,klick_music
 
mov ebx,[ebp+8]
add ebx,19
mov esi,[ebp+8]
mov ebx,1
mov edi,finfo.path
call fill_paths
inc ebx
mov edi,param_str
mov dword[finfo+8],param_str
call fill_paths
cmp byte[edi],0
jne .no0
and dword[finfo+8],0
.no0:
; lea ebx,[ebp+19]
mov eax,19
xor ecx,ecx
mov ebx,finfo
mov eax,58
int 0x40
; dph eax
cmp eax,1024
jae still2
mcall 55,eax, , ,klick_music
jmp still
jmp still2
 
klick_music db 0x85,0x60,0x85,0x70,0x85,0x65,0
 
fill_paths:
push esi edi
; dps '>'
movzx ecx,byte[str_lens+ebx]
add esi,[positions+ebx*4]
push esi
; mov edx,esi
add esi,ecx
 
.l1:
dec esi
cmp byte[esi],' '
jnz .found
loop .l1
pop esi
jmp .noms
.found:
lea ecx,[esi+1]
pop esi
sub ecx,esi
rep movsb
.noms:
and byte[edi],0
; call debug_outstr
; dps <'<',13,10>
pop edi esi
ret
 
atoi:
push esi
xor eax,eax
xor ebx,ebx
.nxt:
lodsb
cmp al,'0'
jb .done
cmp al,'9'
ja .done
sub eax,'0'
imul ebx,10
add ebx,eax
jmp .nxt
.done:
pop esi
mov eax,ebx
ret
 
itoa:
; mov esi,[current_icon]
add esi,2
mov ebx,10
mov ecx,3
.l0:
xor edx,edx
div ebx
add dl,'0'
mov [esi],dl
dec esi
loop .l0
; and byte[esi],0
ret
 
draw_picture:
mov [image],0x3000
mov edi,[ebp+8]
lea esi,[edi+12]
call atoi
cmp eax,[icon_count]
ja toponly.ex
imul eax,(32*3*32)
lea edi,[eax+strip_file+12]
xor ebx,ebx
xor ecx,ecx
mov esi,data_from_file+54+32*3*33-96
mov esi,edi;strip_file+12+(32*3*32)*2
 
mov [pixpos],0
mov [pixpos2],32
newb:
push ebx
push ecx
208,20 → 1122,15
jb yesbpix
cmp ebx,42
jge yesbpix
cmp ecx,32
cmp ecx,31;2
jg yesbpix
 
push esi
mov esi,data_from_file+54+32*3*33-96
sub esi,[pixpos]
mov esi,edi
add esi,[pixpos]
 
dec [pixpos2]
cmp [pixpos2],0
jne no_correction_pixpos
add [pixpos],192
mov [pixpos2],32
no_correction_pixpos:
sub [pixpos],3
add [pixpos],3
mov eax,[esi]
and eax,0xffffff
 
229,7 → 1138,7
 
cmp eax,0
je yesbpix
cmp eax,0xf5f5f5
cmp eax,0xfffcff ;f5f5f5
je yesbpix
jmp nobpix
 
296,6 → 1205,7
 
mov edx,eax
mov eax,[image]
mov [eax],edx
mov [eax],dl
inc eax
ror edx,8
305,7 → 1215,6
mov [eax],dl
inc eax
mov [image],eax
 
inc ebx
mov eax,[yw]
inc eax
335,6 → 1244,7
mov ecx,52 shl 16 + 52
xor edx,edx
int 0x40
.ex:
mov [load_pic],0
ret
 
341,8 → 1251,7
draw_text:
 
mov esi,[ebp+8]
add esi,33
; lea esi,[ebp+33]
add esi,3
push edi
mov edi,labelt
mov ecx,8
350,12 → 1259,12
rep movsb
pop edi
mov eax,labelt
news:
news2:
cmp [eax],byte 33
jb founde
inc eax
cmp eax,labelt+11
jb news
cmp eax,labelt+8;11
jb news2
founde:
sub eax,labelt
mov [tl],eax
397,30 → 1306,12
mov [draw_pic],0
ret
 
load_icon_file:
mov ebx,[ebp+8]
add ebx,5
; lea ebx,[ebp+5]
 
mov eax,6
xor ecx,ecx
mov edx,-1
mov esi,data_from_file
int 0x40
 
ret
 
; for y = 32 to 0
; for x = 0 to 32
; if (pix[y][x]==0) then
; pix[y][x]=background(x,y);
 
; *********************************************
; ******* WINDOW DEFINITIONS AND DRAW ********
; *********************************************
 
 
draw_window:
draw_window2:
 
mov eax,12 ; function 12:tell os about windowdraw
mov ebx,1 ; 1, start of draw
445,16 → 1336,14
 
mov eax,5
mov ebx,1
draw_icon:
draw_icon2:
xchg [load_pic],bl
test bl,bl
je draw_icon_end
int 0x40
jmp draw_icon
jmp draw_icon2
draw_icon_end:
 
call load_icon_file
 
mov eax,5
mov ebx,1
draw_icon_2:
469,13 → 1358,6
mov ebx,process_table
mov ecx,-1
int 0x40
; mov eax,process_table
; add eax,34
; mov ebx,[eax]
; mov [xpos],ebx
; add eax,4
; mov ebx,[eax]
; mov [ypos],ebx
 
call draw_picture
call draw_text
486,13 → 1368,10
 
ret
 
 
 
icon_lst db 'ICON LST'
 
tl dd 8
yw dd 51
ya dd 0
cur_btn dd 40
 
;xpos dd 15
;ypos dd 185
500,23 → 1379,11
load_pic db 0
create_thread_event db 0
 
labelt:
db 'SETUP '
labellen:
 
bgrxy dd 0x0
scrxy dd 0x0
bgrdrawtype dd 0x0
 
pixpos dd 0
pixpos2 db 0
 
top dd 0
 
image dd 0x3000
;thread_stack dd 0x5000
 
icons dd 0
;icons dd 0
 
 
I_Param:
524,11 → 1391,37
icon_data = I_END+0x1400
process_table = I_END+0x2400
 
I_END:
;I_END:
 
bgrx dd ?
bgry dd ?
data_from_file:
rb 54 ;header
raw_data:
rb 32*32
param_str rb 31
 
;//////////////////////////
 
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
gif_file rb GIF_SIZE
strip_file rb RAW_SIZE
;I_Param:
 
; icon_data = I_END+256
 
I_END:
Property changes:
Deleted: svn:eol-style
-native
\ No newline at end of property
/programs/panel/trunk/setup.asm
File deleted
Property changes:
Deleted: svn:eol-style
-native
\ No newline at end of property
/programs/panel/trunk/@PANEL.ASM
124,6 → 124,7
start_menu:
mcall 18,12
mov [button_presssed_alt],eax
mov [draw_window_1],1
; mov ecx,eax
; mcall 47,0x40100, ,10 shl 16+5,0
; mov eax,ecx
159,8 → 160,29
je start_menu_application
cmp ah,83 ;62
je kill_active_application
cmp ah,71 ;179
jne no_test_179
cmp [page_list],15
je @f
inc [page_list]
mov [draw_window_1],1
@@:
jmp begin
 
no_test_179:
cmp ah,72 ;180
jne no_test_180
cmp [page_list],0
je @f
dec [page_list]
mov [draw_window_1],1
@@:
jmp begin
 
no_test_180:
 
jmp begin
 
button_presssed_alt dd 0
 
active_process dd 0
239,6 → 261,9
cmp [esi],byte 'x'
jne new_number
 
mcall 14
mov [screen_size],eax
 
mcall 48,5
mov ecx,eax
lea edx,[ebx-PANEL_HEIGHT-1]
280,6 → 305,22
jmp still
 
red: ; redraw window
 
mcall 14
movzx ecx,ax
mov edx,eax
shr edx,16
cmp [screen_size.height],ax
jne @f
rol eax,16
cmp [screen_size.width],ax
je .lp1
rol eax,16
@@: mov [screen_size],eax
sub ecx,PANEL_HEIGHT
mcall 67,0,,,PANEL_HEIGHT
 
.lp1:
call draw_window
call draw_info
jmp still
419,11 → 460,31
call setup_music
 
noid20:
cmp ah,21
jnz noid21
cmp [page_list],15
je @f
inc [page_list]
jmp red
@@:
jmp still
 
noid21:
cmp ah,22
jnz noid22
cmp [page_list],0
je @f
dec [page_list]
jmp red
@@:
jmp still
 
noid22:
 
jmp still
 
 
 
draw_running_applications:
 
pusha
449,7 → 510,17
mov edi,0
mov ecx,2
mov [contrast],0
mov eax,[max_applications]
mov ebx,[page_list]
xor edx,edx
mul ebx
cmp eax,0
je @f
inc eax
@@:
mov [draw_start_position],eax
 
 
newpr:
 
mov eax,9
464,8 → 535,13
 
cmp byte [0x8000+10], '@'
je norpl
cmp [0x8000+11],dword 'CON '
cmp [0x8000+10],dword 'ICON'
jne .noicon
cmp dword[0x8000+42],51
jne .noicon
cmp dword[0x8000+46],51
je norpl
.noicon:
cmp [0x8000+11],dword 'ENU '
je norpl
; cmp [0x8000+12],dword 'NEL '
472,7 → 548,9
; je norpl
cmp [0x8000+10],dword ' '
je norpl
 
dec [draw_start_position]
cmp [draw_start_position],0
jg norpl
mov eax,13
mov ebx,edi
inc ebx
562,6 → 640,16
 
calculate_applications:
 
mov eax,[max_applications]
mov ebx,[page_list]
xor edx,edx
mul ebx
cmp eax,0
je @f
inc eax
@@:
mov [draw_start_position],eax
 
mov edi,app_list
mov ecx,20
mov eax,0xff
579,6 → 667,13
 
cmp byte [0x8000+10], '@'
je cnorpl
cmp [0x8000+10],dword 'ICON'
jne .noicon
cmp dword[0x8000+42],51
jne .noicon
cmp dword[0x8000+46],51
je cnorpl
.noicon:
cmp [0x8000+11],dword 'CON '
je cnorpl
cmp [0x8000+11],dword 'ENU '
587,6 → 682,9
; je cnorpl
cmp [0x8000+10],dword ' '
je cnorpl
dec [draw_start_position]
cmp [draw_start_position],0
jg cnorpl
 
mov [app_list+edi*4],ecx
 
619,15 → 717,15
now1:
cmp eax,799
jne now2
mov [max_applications],10 ;8
mov [max_applications],9 ;10 ;8
now2:
cmp eax,1023
jne now3
mov [max_applications],13 ;8
mov [max_applications],12 ;13 ;8
now3:
cmp eax,1279
jne now4
mov [max_applications],18 ;8
mov [max_applications],17 ;18 ;8
now4:
mov edi,1
 
1041,6 → 1139,7
mov eax,38
cmp [soften_up],1
jne no_su
and edx,0x00FFFFFF
int 0x40
no_su:
 
1053,6 → 1152,7
add edi,[b_size_y]
add ecx,edi
sub ecx,3*65536+3
and edx,0x00FFFFFF
int 0x40
no_sd:
popa
1073,6 → 1173,7
add esi,4
 
mov eax,38
and edx,0x00FFFFFF
int 0x40
add ecx,1*65536+1
cmp cx,15
1551,6 → 1652,15
sub ebx,14 shl 16
inc edx ;button 20
int 0x40
sub ebx,12 shl 16
mov bx,8
mov ecx,6 shl 16+10
inc edx ;button 21
int 0x40
sub ebx,18 shl 16
inc edx ;button 22
int 0x40
 
; flags
 
mov eax,26
1655,6 → 1765,45
add ebx,1 shl 16
int 0x40
 
mov edx,0
mov eax,13
mov ebx,[maxx]
sub ebx,134
shl ebx,16
mov bx,9
mov ecx,6 shl 16+11
int 0x40
sub ebx,18 shl 16
int 0x40
add ebx,19 shl 16
sub bx,2
mov ecx,7 shl 16+9
mov edx,0xffffff
int 0x40
sub ebx,18 shl 16
int 0x40
 
mov eax,4
mov edx,page_a1
mov ebx,[maxx]
sub ebx,150
shl ebx,16
mov bx,8
mov esi,4
int 0x40
add ebx,1 shl 16
int 0x40
 
mov eax,47
mov ebx,0x10100
mov ecx,[page_list]
mov edx,[maxx]
sub edx,141
shl edx,16
mov dx,7
mov esi,0xffffff
int 0x40
 
; sub ebx,14 shl 16
; mov bx,7
; mov edx,turn_text
1857,9 → 2006,6
 
ret
 
 
 
 
; DATA
 
stripe:
1923,6 → 2069,10
running_applications dd 0x100
max_applications dd 11
 
page_list dd 0
draw_start_position dd 0
draw_window_1 db 0
 
b_size_y: dd 0x0
ysi dd 0
small_draw dd 0x0
1930,6 → 2080,7
ptime dd 0x0
maxx dd 0x0
text db '0123456789'
page_a1 db '< >'
bte dd 0xccddee
 
wcolor dd 0x506070
1942,6 → 2093,11
stcount dd 0x0
 
I_END:
 
screen_size:
.height dw ?
.width dw ?
 
area9 rb 100
system_colours rd 10
app_list rd 50
/programs/vrr/trunk/vrr.asm
258,12 → 258,10
push eax
push ebx
push edx
call kill_all
mov eax,21
mov ebx,13
mov ecx,4
int 40h
call ref_screen
pop edx
pop ecx
pop eax
279,7 → 277,6
mov eax,[currvm]
mov [oldvm],eax
mov [currvm],edx
call kill_all
pop edx
push edx
mov eax,21
289,7 → 286,6
pop edx
pop ebx
pop ecx
call ref_screen
retn
; IN: eax = 0/1 - -/+ 1Hz
307,23 → 303,6
pop ebx
retn
ref_screen:
push eax
push ebx
push ecx
mov eax,5
mov ebx,100
int 40h
mov eax,19
mov ebx,strt
xor ecx,ecx
int 40h
pop ecx
pop ebx
pop eax
retn
get_pid:
mov eax,9
mov ebx,buffer
353,28 → 332,6
mov [currvm],ecx
retn
kill_all:
call get_pid
mov ecx,[totp]
ka_loc_00:
push ecx
push ecx
mov eax,9
mov ebx,buffer
int 40h
pop ecx
mov eax,[mypid]
cmp eax,[ebx+30]
je ka_loc_02
mov eax,18
mov ebx,2
int 40h
ka_loc_02:
pop ecx
loop ka_loc_00
retn
get_initial_videomode:
retn