kolibrios-fun/programs/panel/trunk/@PANEL.ASM

2107 lines
36 KiB
NASM
Raw Normal View History

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;
; MENUBAR for MenuetOS - Compile with fasm ;
; ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
use32
org 0x0
db 'MENUET01' ; 8 byte id
dd 0x01 ; required OS version
dd START ; program start
dd I_END ; program image size
dd 0xB000 ; reguired amount of memory - 64 Kb
dd 0xA000 ; esp
dd 0x0,0x0 ; param, icon
include 'lang.inc'
include 'macros.inc'
width dd 305
buttons dd 1 ; 0 no frames ; 1 frames
soften_up dd 1 ; 0 no ; 1 yes
soften_down dd 0 ; 0 no ; 1 yes
minimize_left dd 1
minimize_right dd 1
icons_position dd 95
menu_enable dd 1
setup_enable dd 0
graph_text dd 1
soften_middle dd 1 ; 0 no ; 1 yes
icons dd 1 ; 0 defaults ; 1 activate
dat db 'PANEL DAT'
PANEL_HEIGHT = 18
;mainalive db 1
;correct_display:
; mov eax,15
; mov ebx,3
; int 0x40
; mcall 5, 300
; jmp correct_display
chlangproc:
; mcall 18, 7
; mov [my_process],eax
begin_2:
mcall 40,0b ; 0
begin:
.begin:
mcall 5, eax
begin_3:
mcall 18, 7
mov [active_process],eax
; cmp [mainalive], 0
; je .exit
mcall 66, 3
mov ah,al
and al,100000b
cmp al,100000b
je change_start_end
mov al,ah
and al,10000b
cmp al,10000b
je change_start_end
mov al,ah
and al,1000b
cmp al,1000b
je change_key_lang_1
mov al,ah
and al,100b
cmp al,100b
je change_key_lang_1
mov al,ah
and al,1111b
cmp al,11b
jne begin
mcall 19, file_sys, syslang
call syslang_music
; mcall 5, 25
begin_1:
mov ecx,[active_process]
mcall 18, 3
mcall 5, 25
jmp begin
change_key_lang_1:
mov al,ah
and al,11b
cmp al,01b
je change_key_lang
cmp al,10b
jne begin
change_key_lang:
mcall 19, file_sys, chlang
call chlang_music
; mcall 5, 25
jmp begin_1
change_start_end:
mov al,ah
and al,1100b
cmp al,1000b
je start_end
cmp al,100b
jne start_menu
start_end:
; mov ecx,[my_process]
; mcall 18, 3
mcall 18,12
cmp al,1
je scan_codes
cmp ah,255
jne begin
start_end_application:
mcall 19,file_end,0
mcall 5 ,50
jmp begin
scan_codes:
cmp ah,88
je start_end_application
jmp begin
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
cmp al,1
je scan_codes2
cmp ah,72 ;232
je start_menu_application
cmp ah,73 ;233
je start_menu_application
cmp ah,0x35 ;b6 ;53
je kill_active_application
cmp ah,0x9
jne begin
jmp begin
kill_active_application:
mcall 18, 7
mov ecx,eax
; mcall 9, area9
; mov eax,area9
; mov ecx,[eax+4]
mcall 18, 2
jmp begin
start_menu_application:
mcall 19,filename,0
call menu_music
mcall 5,50
jmp begin
scan_codes2:
cmp ah,91
je start_menu_application
cmp ah,92
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
my_process dd 0
calendar_music:
mcall 55, eax, , , calendarmusic
ret
setup_music:
mcall 55,eax, , ,setupmusic
ret
sysmeter_music:
mcall 55,eax, , ,sysmetermusic
ret
button_music:
mcall 55,eax, , ,buttonmusic
ret
syslang_music:
mcall 55, eax, , , syslangmusic
ret
chlang_music:
mcall 55, eax, , , chlangmusic
ret
menu_music:
mcall 55,eax, , ,menumusic
ret
chlangmusic: db 0x82,0x60,0x83,0x65,0x82,0x60,0
syslangmusic: db 0x82,0x65,0x83,0x70,0x82,0x65,0
menumusic: db 0x82,0x50,0x84,0x48,0x82,0x50,0x84,0x53,0x82,0x51,0
activatemusic: db 0x83,0x30,0x85,0x60,0
buttonmusic: db 0x85,0x25,0x85,0x40,0
sysmetermusic: db 0x85,0x35,0x85,0x45,0
setupmusic: db 0x85,0x40,0x85,0x50,0
calendarmusic: db 0x85,0x37,0x85,0x48,0
; .exit: mcall -1
START:
mov eax, 6
mov ebx, dat
mov ecx, 0
mov edx, -1
mov esi, I_END
int 0x40
mov eax,40
mov ebx,0101b
int 0x40
mov edi,width
mov esi,I_END
mov eax,0
new_number:
cmp [esi],byte ';'
je number_ready
imul eax,10
movzx ebx,byte [esi]
sub ebx,'0'
add eax,ebx
inc esi
jmp new_number
number_ready:
mov [edi],eax
mov eax,0
add edi,4
inc esi
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]
mcall 48,6
call set_variables
mcall 51, 1, chlangproc, 0xB000
; mcall 5, 5
; mcall 51, 1, correct_display, 0xA800
start_after_minimize:
call draw_window
call draw_info
call draw_running_applications
mov eax, 23
mov ebx, 30
int 0x40
still:
; mcall 13,<390,70>,<3,11>,0xffffff
; mov ecx,[button_presssed_alt]
; mcall 47,0x80100,ecx ,400 shl 16+5,0
call draw_info
call draw_running_applications
mov eax, 23
mov ebx, 20
int 0x40
cmp eax,1 ; redraw ?
jz red
cmp eax,3 ; button ?
jz button
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
button: ; button
mov eax,17
int 0x40
cmp ah,50
jb no_activate
cmp ah,70
jg no_activate
movzx ecx,byte ah
sub ecx,52
shl ecx,2
mov eax,18
mov ebx,3
mov ecx,[app_list+ecx]
int 0x40
; cmp [music_type],0
; je still
mcall 55,eax, , ,activatemusic
jmp still
no_activate:
cmp ah,101 ; minimize to left
je left_button
cmp ah,102 ; minimize to right
je right_button
cmp ah,byte 1 ; start/terminate menu
jnz noselect
call menu_handler
; cmp [music_type],0
; je still
call menu_music
jmp still
noselect:
cmp ah,byte 2 ; start calendar
jnz noid15 ;noclock
mov eax, 19
mov ebx, file6
xor ecx, ecx
int 0x40
call calendar_music
jmp still
; noclock:
; cmp ah,byte 11 ; start file 1
; jnz nob1
; mov eax,19
; mov ebx,file1
; int 0x40
; jmp still
; nob1:
; cmp ah,byte 12 ; start file 2
; jnz nob2
; mov eax,19
; mov ebx,file2
; int 0x40
; jmp still
; nob2:
; cmp ah,byte 13 ; start file 3
; jnz nob3
; mov eax,19
; mov ebx,file3
; int 0x40
; jmp still
; nob3:
; cmp ah,14 ; start file 4
; jne noid14
; mov eax,19
; mov ebx,file4
; mov ecx,file4_par
; int 0x40
; jmp still
; noid14:
; cmp ah,15 ; start file 5
; jne noid15
; mov eax,19
; mov ebx,file5
; int 0x40
; jmp still
noid15:
cmp ah,16
jne noid16
mcall 19, file_sys, chlang
call chlang_music
mcall 5, 25
jmp still
noid16:
cmp ah,17
jne noid17
mcall 19, file_sys, syslang
call syslang_music
mcall 5, 25
jmp still
noid17:
cmp ah,18
jne noid18
mcall 19, sysmeter, 0
call sysmeter_music
jmp still
noid18:
cmp ah,19
jne noid19
; inc [music_type]
; and [music_type],1
mcall 18,8,2
; mcall 18,8
; mov [sound_flag],al
; mcall 15,4,2
mcall 15,3
jmp red
noid19:
cmp ah,20 ; start system setup
jnz noid20
mov eax, 19
mov ebx, file_sys
xor ecx, ecx
int 0x40
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
cmp [icons],1
jne dr_ret
call calculate_applications
cmp edi,[running_applications]
jne noret
popa
ret
noret:
; cmp edi,[running_applications]
; jge no_application_decrease
call draw_window
; no_application_decrease:
mov [running_applications],edi
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
mov ebx,0x8000
int 0x40
push eax
push ecx
cmp eax,ecx
jb norpl2
cmp byte [0x8000+10], '@'
je norpl
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 '
; 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
shl ebx,16
imul ebx,6*10
add ebx,17 shl 16+54
mov ecx,3 shl 16+14
xor edx,edx
sub ebx,10 shl 16
int 0x40
sub ebx,1 shl 16
mov bx,1
mov ecx,4 shl 16+12
int 0x40
sub ebx,1 shl 16
mov ecx,5 shl 16+10
int 0x40
add ebx,56 shl 16
mov ecx,4 shl 16+12
int 0x40
add ebx,1 shl 16
mov ecx,5 shl 16+10
int 0x40
inc [contrast]
and [contrast],1
cmp [contrast],1
je contrast1
mov edx,0x88ff
jmp contrast2
contrast1:
mov edx,0x55ff
contrast2:
sub ebx,55 shl 16
mov bx,54
mov ecx,4 shl 16+12
; mov edx,0x66ff
int 0x40
sub ebx,1 shl 16
mov bx,1
mov ecx,5 shl 16+10
int 0x40
add ebx,55 shl 16
int 0x40
mov eax,4
mov ebx,edi
inc ebx
shl ebx,16
imul ebx,6*10 ;13
add ebx,20*65536+7
mov ecx,0xffffff ;[wcolor]
; add ecx,0x303030
mov edx,0x8000+10
mov esi,11
sub ebx,10 shl 16
int 0x40
norpl2:
inc edi
norpl:
pop ecx
pop eax
inc ecx
cmp edi,[max_applications]
jb newpr
nompr:
dr_ret:
popa
ret
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
cld
rep stosd
mov edi,0
mov ecx,2
cnewpr:
mov eax,9
mov ebx,0x8000
int 0x40
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 '
je cnorpl
; cmp [0x8000+12],dword 'NEL '
; 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
inc edi
cnorpl:
inc ecx
cmp eax,ecx
jge cnewpr
ret
draw_application_buttons:
pusha
cmp [icons],1
jne da_ret
mov eax,14
int 0x40
shr eax,16
cmp eax,639
jne now1
mov [max_applications],7 ;6
now1:
cmp eax,799
jne now2
mov [max_applications],9 ;10 ;8
now2:
cmp eax,1023
jne now3
mov [max_applications],12 ;13 ;8
now3:
cmp eax,1279
jne now4
mov [max_applications],17 ;18 ;8
now4:
mov edi,1
nb:
mov eax,8
mov ebx,edi
shl ebx,16
imul ebx,6*10 ;13
add ebx,15*65536+10*6-1 ;13
mov ecx,1*65536+17
mov edx,edi
add edx,51
cmp [buttons],1
je bufr
or edx,0x60000000
bufr:
mov esi,[wcolor]
sub ebx,11 shl 16
int 0x40
inc edi
cmp edi,[max_applications]
jbe nb
da_ret:
popa
ret
menu_handler:
mov eax, 19
mov ebx, filename
xor ecx, ecx
int 0x40
ret
draw_small_right:
pusha
mov eax,12
mov ebx,1
int 0x40
mov eax,0
mov edx,[wcolor]
mov esi,edx
mov edi,edx
or edx, 0x01000000
int 0x40
mov eax,8
mov ebx,0*65536+9
mov ecx,0*65536
mov cx,[b_size_y]
mov edx,1
mov esi,[wcolor]
int 0x40
mov eax,4
mov ebx,2*65536+16
cmp [graph_text],1
jne nos3
mov ebx,2*65536+7
nos3:
mov ecx,[wcolor]
add ecx,0x303030
mov edx,hidetext
mov esi,1
int 0x40
mov eax,12
mov ebx,2
int 0x40
popa
ret
draw_small_left:
pusha
mov eax,12
mov ebx,1
int 0x40
mov eax,0
mov edx,[wcolor]
mov esi,edx
mov edi,edx
or edx, 0x01000000
int 0x40
cmp [graph_text],1
je nos4
mov eax,8
mov ebx,0*65536+9
mov ecx,0*65536+18-6
mov edx,2
mov esi,[wcolor]
int 0x40
mov eax,4
mov ebx,2*65536+4
mov ecx,[wcolor]
add ecx,0x303030
mov edx,hidetext+2
mov esi,1
int 0x40
nos4:
mov eax,8
mov ebx,0*65536+9
mov ecx,13*65536+25
cmp [graph_text],1
jne nos6
mov ecx,0*65536
mov cx,word [b_size_y]
nos6:
mov edx,1
mov esi,[wcolor]
int 0x40
mov eax,4
mov ebx,3*65536+22
cmp [graph_text],1
jne nos7
mov ebx,3*65536+7
nos7:
mov ecx,[wcolor]
add ecx,0x303030
mov edx,hidetext+1
mov esi,1
int 0x40
mov eax,12
mov ebx,2
int 0x40
popa
ret
;-------------------------------------------------
right_button:
call button_music
mov [small_draw],dword draw_small_right
mcall 14
shr eax, 16
mov ebx, eax
mov ecx, -1
mov edx, 9
sub ebx, edx
mov esi, -1
mcall 67
call draw_small_right
mov eax, 23
mov ebx, 30
int 0x40
jmp small_wait
;-------------------------------------------------
left_button:
call button_music
mov [small_draw],dword draw_small_left
mov ebx, 0
mov edx, 9
mov ecx, -1
mov esi, -1
mcall 67
call draw_small_left
mov eax, 23
mov ebx, 30
int 0x40
;-------------------------------------------------
small_wait:
mov eax, 10
int 0x40
cmp eax,1
jne no_win
call [small_draw]
jmp small_wait
no_win:
mov eax,17
int 0x40
cmp ah,1
jne no_full
mov eax, 14 ; get screen max x & max y
int 0x40
mov edx, eax
shr edx, 16
xor ebx, ebx
mov ecx, -1
mov esi, -1
mcall 67 ; x0 y0 xs ys
call button_music
jmp still
no_full:
call menu_handler
jmp small_wait
set_variables:
pusha
mov [b_size_y],dword 38
cmp [graph_text],1
jne noy2
mov [b_size_y],dword 18
noy2:
mov [button_frames],0x0
cmp [buttons],0
jne no_frames
mov [button_frames],0x40000000
no_frames:
mov eax,48 ; 3d button look
mov ebx,1
mov ecx,1
int 0x40
mov eax,0x40404040 ; dividers for processes
mov edi,pros
mov ecx,10
cld
rep stosd
popa
ret
; eax = number (1 or 2)
; ebx = language id
draw_flag:
pusha
; cmp [graph_text],0
; je mini_flag
; eax = 2 BIG
; eax = 1 small
mov edx,ebx
mov ebx,[maxx]
and eax,1
imul eax,17 ;17
sub ebx,eax
sub ebx,76 ;79 ;28
pushad
; dec ebx
sub ebx,2
shl ebx, 16
add ebx, 15 ;25
mov ecx, 4*65536+13
mov edx,0
mov eax,13
int 0x40
add ebx,1 shl 16
sub ebx,2
mov ecx, 5 shl 16+11
cmp [type_lang],1
je label_1
mov edx,0xff ;[wcolor]
jmp label_2
label_1:
mov edx,0x7700
label_2:
mov eax, 13
int 0x40
popad
shl ebx,16
add ebx,7 ;24
mov ecx,[bte] ; color
dec edx
shl edx,1
add edx,flag_text
mov esi,2
mov eax,4
int 0x40
mov ebx,[maxx]
sub ebx,48
shl ebx,16
mov bx,34
mov ecx,3 shl 16+14
xor edx,edx
mov eax,13
int 0x40
add ebx,1 shl 16
sub ebx,2
mov ecx,4 shl 16+12
mov edx,0x66cc
int 0x40
popa
ret
;mini_flag:
; popa
; ret
; ***************************************************
; ********* WINDOW DEFINITIONS AND DRAW *************
; ***************************************************
draw_window:
pusha
mov [running_applications],-1
mov [checks],-1
mov eax, 12 ; tell os about redraw
mov ebx, 1
int 0x40
mov eax, 48
mov ebx, 3
mov ecx, system_colours
mov edx, 10*4
int 0x40
mov eax, [system_colours+4*6]
mov [wcolor], eax
mov eax,14 ; get screen max x & max y
int 0x40
cmp [width],0
je no_def_width
and eax,0xffff
mov ebx,[width]
shl ebx,16
add eax,ebx
no_def_width:
mov ebx,eax
mov [screenxy],ebx
shr ebx,16
sub ax,38
shl eax,16
mov ecx,eax
add ecx,0*65536+38
cmp [graph_text],1
jne no_text_1
mov cx,PANEL_HEIGHT
add ecx,20*65536
no_text_1:
mov eax, 0 ; DEFINE AND DRAW WINDOW
mov edx, [wcolor]
or edx, 0x01000000 ; do not draw the window
mov esi, [wcolor]
or esi, 0x01000000 ; unmovable window
mov edi, [wcolor]
int 0x40
movzx ebx,word [screenxy+2]
mov ecx,0*65536+0
mov edx,[wcolor]
add edx,0x161616
newline:
sub edx,0x040404
mov eax,38
cmp [soften_up],1
jne no_su
and edx,0x00FFFFFF
int 0x40
no_su:
pusha
cmp [soften_down],1
jne no_sd
sub edx,0x141414
mov edi,[b_size_y]
shl edi,16
add edi,[b_size_y]
add ecx,edi
sub ecx,3*65536+3
and edx,0x00FFFFFF
int 0x40
no_sd:
popa
add ecx,1*65536+1
cmp cx,5
jb newline
cmp [soften_middle],1
jne no_sm
movzx ebx,word [screenxy+2]
mov ecx,5*65536+5
mov esi,stripe
mov edx,[wcolor]
newline3:
add edx,[esi]
add esi,4
mov eax,38
and edx,0x00FFFFFF
int 0x40
add ecx,1*65536+1
cmp cx,15
jb newline3
no_sm:
cmp [minimize_left],1
jne no_mleft
mov eax,8 ; ABS LEFT
mov ebx,0 *65536+9
mov ecx,1 *65536
add ecx,[b_size_y]
dec ecx
mov edx,101
add edx,[button_frames]
mov esi,[wcolor]
int 0x40
mov eax,4 ; HIDE TEXT
mov ebx,2*65536+17
cmp [graph_text],1
jne no_y1
mov bx,7
no_y1:
mov ecx,[wcolor]
add ecx,0x303030
mov edx,hidetext
mov esi,1
int 0x40
no_mleft:
movzx eax,word [screenxy+2]
mov [maxx],eax
cmp [minimize_right],1
jne no_mright
mov eax,[maxx]
sub eax,77
shl eax,16
mov ebx,eax
add ebx,67
mov eax,8 ; ABS RIGHT
mov ecx,1 *65536
add ecx,[b_size_y]
dec ecx
add ebx,68*65536
mov bx,9
mov edx,102
add edx,[button_frames]
mov esi,[wcolor]
int 0x40
mov edx,hidetext+1
mov eax,4
mov ebx,[maxx]
sub ebx,6
shl ebx,16
mov bx,17
cmp [graph_text],1
jne no_y2
mov bx,7
no_y2:
mov ecx,[wcolor]
add ecx,0x303030
mov esi,1
int 0x40
no_mright:
call draw_menuet_icon
call draw_program_icons
mov [ptime],0
call draw_info
call draw_application_buttons
; mov ecx,[button_presssed_alt]
; mcall 47,0x80100,ecx ,400 shl 16+5,0
mov eax,12
mov ebx,2
int 0x40
popa
ret
draw_menuet_icon:
pusha
cmp [menu_enable],1
jne no_menu
mov eax, 8 ; M BUTTON
mov ebx, 10*65536 + 47
cmp [minimize_left], 0
jne @f
sub ebx, 10*65536
@@:
mov ecx, 1*65536
add ecx, [b_size_y]
dec ecx
mov edx, 0x20000001
add edx, [button_frames]
mov esi, [wcolor]
int 0x40
cmp [graph_text], 1
jne no_mtext
push ebx
mov eax,13
mov ebx,12 shl 16+44 ;51
mov ecx,1 shl 16+17
xor edx,edx
int 0x40
; mov ebx,63 shl 16+1
mov ebx,56 shl 16+1
mov ecx,2 shl 16+15
int 0x40
mov ebx,57 shl 16+1
mov ecx,4 shl 16+11
int 0x40
mov ebx,58 shl 16+1
mov ecx,6 shl 16+7
int 0x40
; mov ebx,66 shl 16+1
; mov ecx,9 shl 16+1
; int 0x40
mov ebx,13 shl 16+43 ;50
mov ecx,2 shl 16+15
mov edx,0x7700
int 0x40
; mov ebx,62 shl 16+1
; mov ecx,3 shl 16+14
; int 0x40
mov ebx,56 shl 16+1
mov ecx,4 shl 16+11
int 0x40
mov ebx,57 shl 16+1
mov ecx,6 shl 16+7
int 0x40
pop ebx
mov eax, 4
mov bx, 7
add ebx, 8*65536
mov ecx, 0x10ffffff
mov edx, m_text
mov esi, 4
int 0x40
popa
ret
no_mtext:
mov eax,[wcolor]
mov [m_icon+4],eax
mov eax,6 ; load file
mov ebx,m_bmp
mov ecx,0
mov edx,200000
mov esi,image
mov edi,0
int 0x40
mov eax,40
mov ebx,0
mov edi,image+53
new_m_pix:
; movzx ecx,byte [edi]
; shr ecx,5
mov cl,[edi]
cmp cl,10
jb nopix
mov cl,[edi+1]
cmp cl,10
jb nopix
mov cl,[edi+2]
cmp cl,10
jb nopix
pusha
cmp [minimize_left],0
jne no_m_s2
sub ebx,10
no_m_s2:
; mov edx,[ecx*4+m_icon]
mov edx,[edi+1]
mov ecx,eax
mov eax,1
add ebx,12
int 0x40
popa
nopix:
add edi,3
add ebx,1
cmp ebx,40
jnz new_m_pix
mov ebx,0
dec eax
jnz new_m_pix
no_menu:
popa
ret
draw_program_icons:
pusha
cmp [icons],0
jne dp_ret
mov edi,1
push edi
new_icon_file:
pusha
mov edx,[esp+32]
add edx,10
push edx
mov esi,[wcolor]
mov ecx,1*65536
add ecx,[b_size_y]
dec ecx
mov eax,edi
dec eax
imul eax,40
mov ebx,eax
add ebx,[icons_position]
shl ebx,16
mov bx,39
pop edx
add edx,[button_frames]
or edx, 0x20000000
mov eax,8
int 0x40
popa
mov ecx,[esp]
add ecx,48
mov [iconf+6],cl
mov eax,6 ; load file
mov ebx,iconf
mov ecx,0
mov edx,200000
mov esi,image
int 0x40
mov eax,0
mov ebx,32
mov edi,image+51+32*33*3
np2: ; new pixel of file
mov edx,[edi]
and edx,0xffffff
cmp eax,3 ; Y draw limits
jb nopix2
cmp eax,36
jg nopix2
cmp ebx,38 ; X draw limits
jg nopix2
cmp ebx,2
jb nopix2
cmp edx,0
jz nopix2
cmp [graph_text],1
jne no_icon_text
pusha
mov ebx,[esp+32]
dec ebx
imul ebx,40
add ebx,8
add ebx,[icons_position]
shl ebx,16
mov bx,7
mov eax,4
mov ecx,0xffffff
mov edx,[esp+32]
dec edx
imul edx,4
add edx,mi_text
mov esi,4
int 0x40
popa
jmp nopix2
no_icon_text:
mov esi,[esp]
pusha
push edx
mov ecx,eax
add ecx,2
mov eax,esi
dec eax
imul eax,40
add ebx,eax
add ebx,3
add ebx,[icons_position]
pop edx
mov eax,1
int 0x40
popa
nopix2:
sub edi,3
dec ebx
jnz np2
mov ebx,32
add eax,1
cmp eax,32
jnz np2
add dword [esp],1
mov edi,[esp]
cmp dword [esp],4
jbe new_icon_file
add esp,4
mov eax,4
mov ebx,40
imul ebx,3
add ebx,[icons_position]
add ebx,10
shl ebx,16
mov bx,23
mov ecx,[wcolor]
mov edx,gpl
mov esi,3
int 0x40
dp_ret:
popa
ret
draw_info: ; draw cpu usage, time, date
pusha
cmp [setup_enable],1
jne no_setup
cmp [minimize_right],0
jne no_m_r
add [maxx],10
no_m_r:
mov eax,3
int 0x40
cmp eax,[ptime]
jz _ret
mov [ptime],eax
call draw_cpu_usage
mov eax,[maxx] ; blink sec
sub eax,33
shl eax,16
mov ebx,eax
add ebx,9
mov eax,3
int 0x40
cmp [graph_text],1
jne no_y4
sub bx,2
no_y4:
mov ecx,eax
shr ecx,16
and ecx,1
mov edx,[bte]
sub edx,[wcolor]
imul ecx,edx
add ecx,[wcolor]
mov edx,sec
mov eax,4
mov esi,1
int 0x40
mov eax,26 ; check for change in time or country
mov ebx,5
int 0x40
mov edx,eax
mov eax,26
mov ebx,2
mov ecx,9
int 0x40
add edx,eax
mov eax,3
int 0x40
and eax,0xffff
add edx,eax
cmp edx,[checks]
je _ret
mov [checks],edx
mov ebx,[maxx]
sub ebx,48 ;;94 ;;74
shl ebx,16
add ebx,33 ;;84 ;;64
mov eax,8 ; time/date button
mov ecx,3 *65536
add ecx,[b_size_y]
; dec ecx
sub cx,5
mov edx,2+0x20000000
mov esi,[wcolor]
int 0x40
pusha
mov eax,13
add ebx,10*65536-16
add ecx,5*65536-8
mov edx,[wcolor]
int 0x40
popa
and edx,0xffff
add edx,[button_frames]
int 0x40
mov eax,8
mov ebx,[maxx]
sub ebx,77 ;80
shl ebx,16
add ebx,12
mov ecx,5 shl 16+10
mov edx,16+0x20000000 ;button 16
mov esi,[wcolor]
int 0x40
sub ebx,17 shl 16
inc edx ;button 17
int 0x40
add ebx,33 shl 16
mov bx,8
inc edx ;button 18
int 0x40
sub ebx,47 shl 16
mov bx,10
inc edx ;button 19
int 0x40
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
mov ebx,5
int 0x40
mov ebx,eax
mov eax,1
mov [type_lang],al
call draw_flag
mov eax,26
mov ebx,2
mov ecx,9
int 0x40
mov ebx,eax
mov eax,2
mov [type_lang],al
call draw_flag
mcall 18,8,1
mov [sound_flag],al
mov ebx,[maxx]
sub ebx,109 ;112 ;28
shl ebx,16
mov bx,12
mov ecx, 4*65536+13
mov edx,0
mov eax,13
int 0x40
add ebx,1 shl 16
sub bx,2
mov ecx,5 shl 16+11
mov edx,0xcc
int 0x40
add ebx,1 shl 16
mov bx,5
mov ecx,8 shl 16+5
mov edx,0xdddd00
int 0x40
add ebx,5 shl 16
mov bx,1
mov ecx,7 shl 16+7
int 0x40
add ebx,1 shl 16
mov ecx,6 shl 16+9
int 0x40
add ebx,1 shl 16
mov ecx,5 shl 16+11
int 0x40
; cmp [music_type],0
; jne dalshe
cmp [sound_flag],0
je dalshe
sub ebx,8 shl 16
ror ebx,16
mov cx,bx
rol ebx,16
mov bx,cx
add bx,8
mov ecx,5 shl 16+15
mov edx,0xff0000
mov eax,38
int 0x40
add ebx,1 shl 16
inc bx
int 0x40
rol ecx,16
int 0x40
sub ebx,1 shl 16
dec bx
int 0x40
dalshe:
mov ebx,[maxx]
sub ebx,123
shl ebx,16
mov bx,12
mov ecx, 4*65536+13
mov edx,0
mov eax,13
int 0x40
add ebx,1 shl 16
sub bx,2
mov ecx,5 shl 16+11
mov edx,0xffcc00
int 0x40
mov eax,4
mov ebx,[maxx]
sub ebx,121
shl ebx,16
mov bx,7
mov ecx,0x10000000
mov edx,file_sys
mov esi,1
int 0x40
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
; mov esi,1
; mov ecx,0x60a060 ;[wcolor]
; add ecx,0x303030
; mov eax,4
; int 0x40
; add ebx,1 shl 16
; int 0x40
; add ebx,1 shl 16
; int 0x40
; add ebx,1 shl 16
; int 0x40
; add ebx,1 shl 16
; mov ecx,0x60a060 ;[wcolor]
; int 0x40
; add ebx,1 shl 16
; int 0x40
; add ebx,1 shl 16
; sub ecx,0x303030
; int 0x40
; sub ebx,6 shl 16
; mov bx,1
; mov ecx,2 shl 16+15
; mov edx,0x60a060 ;[wcolor]
; add edx,0x303030
; mov eax,13
; int 0x40
; add ebx,1 shl 16
; mov bx,1
; mov edx,0x60a060 ;[wcolor]
; int 0x40
; add ebx,1 shl 16
; mov bx,1
; sub edx,0x303030
; int 0x40
; add ebx,1 shl 16
; mov edx,[wcolor]
; int 0x40
mov eax,3 ; get time
int 0x40
movzx ebx,al
shr eax,8
movzx ecx,al
shr eax,8
movzx edx,al
; ebx ecx edx h m s
push ebx
push ecx
mov eax,[maxx]
sub eax,32
shl eax,16
mov ebx,eax
add ebx,9
mov ecx,[bte]
cmp [graph_text],1
jne no_y3
sub bx,2
mov ecx,0xffffff
no_y3:
mov edx,[esp] ; __:_X
and edx,15
mov eax,4
add ebx,10*65536
add edx,text
mov esi,1
int 0x40
pop edx ; __:X_
shr edx,4
and edx,15
mov eax,4
sub ebx,6*65536
add edx,text
mov esi,1
int 0x40
mov edx,[esp] ; _X:__
and edx,15
mov eax,4
sub ebx,11*65536
add edx,text
mov esi,1
int 0x40
pop edx ; X_:__
shr edx,4
and edx,15
mov eax,4
sub ebx,6*65536
add edx,text
mov esi,1
int 0x40
call draw_cpu_usage
_ret:
cmp [minimize_right],0
jne no_m_r2
sub [maxx],10
no_m_r2:
no_setup:
popa
ret
draw_cpu_usage:
pusha
mov [ysi],30
cmp [graph_text],1
jne @f
mov [ysi],10
@@:
mov eax,18 ; TSC / SEC
mov ebx,5
int 0x40
shr eax,20
push eax
mov eax,18 ; IDLE / SEC
mov ebx,4
int 0x40
shr eax,20
xor edx,edx
imul eax,[ysi]
cdq
pop ebx
inc ebx
div ebx
push eax
mov eax,13
mov ebx,[maxx]
sub ebx,60 ;;65
shl ebx,16
mov bx,8
push ebx
mov eax,13
mov ecx,5*65536
add cx,word [ysi]
inc cx
push ebx
inc ecx
sub ebx,1 shl 16
add ebx,2
xor edx,edx
int 0x40
dec ecx
pop ebx
mov edx,0xff0000 ;[wcolor]
; sub edx,0x303030
int 0x40
pop ebx
pop eax
; push ebx
inc eax
mov ecx,5*65536
mov cx,ax
; pop ebx
push ecx
push ebx
sub ecx,1 shl 16
add ecx,1
sub ebx,1 shl 16
add ebx,2
mov eax,13
xor edx,edx
int 0x40
pop ebx
pop ecx
mov edx,0x44aa44 ;[wcolor]
; add edx,0x00101010
int 0x40
popa
ret
; DATA
stripe:
dd -0x010101
dd -0x010101
dd -0x020202
dd -0x010101
dd -0x000000
dd 0x000000
dd 0x010101
dd 0x020202
dd 0x010101
dd 0x010101
m_icon:
dd 0x0
dd 0x808080
dd 0x000000
dd 0x000000
dd 0xffffff
lsz m_text,\
ru, "<22><><EFBFBD><EFBFBD>",\
en, "MENU"
mi_text db 'WAVETETRBGRDGPL '
flag_text db 'EnFiGeRuFr'
type_lang db 0
;music_type db 1
sound_flag db 0
button_frames dd 0x0
checks dd -1
hidetext db 0x11,0x10,0x1e
iconf db 'MBAR_IX BMP'
m_bmp db 'MENUET BMP'
sysmeter db 'SYSMETER '
file_end db 'END '
file_sys db 'SETUP '
filename db 'MENU '
turn_text db '><'
;file1 db 'SB '
;file2 db 'TETRIS '
;file3 db 'PIC4 '
;file4 db 'TINYPAD '
;file4_par db 'COPYING.TXT',0
;file5 db 'MFASM '
file6 db 'CALENDAR '
gpl db 'GPL'
chlang db 'LANG',0
syslang db 'SLAN',0
contrast db 0
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
ptime dd 0x0
maxx dd 0x0
text db '0123456789'
page_a1 db '< >'
bte dd 0xccddee
wcolor dd 0x506070
sec db ': '
pros db ' '
db ' '
screenxy dd 0x0
stcount dd 0x0
I_END:
screen_size:
.height dw ?
.width dw ?
area9 rb 100
system_colours rd 10
app_list rd 50
tictable:
rd 256
image: