Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 4212 → Rev 4213

/programs/system/end/light/end.asm
2,62 → 2,74
; END
; KolibriOS Team 2005-2013
;
include "lang.inc"
include "..\..\..\macros.inc"
; <diamond> note that 'mov al,xx' is shorter than 'mov eax,xx'
; and if we know that high 24 bits of eax are zero, we can use 1st form
; the same about ebx,ecx,edx
 
meos_app_start
code
draw_window:
mov al,12
mcall ,1
use32 ; âêëþ÷èòü 32-áèòíûé ðåæèì àññåìáëåðà
org 0x0 ; àäðåñàöèÿ ñ íóëÿ
 
mov al,14
mcall ;eax=14 - get screen max x & max y
movzx ecx,ax
shr eax,17
shl eax,16
lea ebx,[eax-110 shl 16+222]
shr ecx,1
shl ecx,16
lea ecx,[ecx-65 shl 16+137]
db 'MENUET01' ; 8-áàéòíûé èäåíòèôèêàòîð MenuetOS
dd 0x01 ; âåðñèÿ çàãîëîâêà (âñåãäà 1)
dd START ; àäðåñ ïåðâîé êîìàíäû
dd IM_END ; ðàçìåð ïðîãðàììû
dd I_END ; êîëè÷åñòâî ïàìÿòè
dd stacktop ; àäðåñ âåðøèíû ñòåêà
dd 0x0 ; àäðåñ áóôåðà äëÿ ïàðàìåòðîâ
dd cur_dir_path
 
xor eax,eax
mcall , , ,0x019098b0,0x01000000 ;define and draw window
include 'lang.inc'
include '../../../macros.inc'
include '../../../proc32.inc'
include '../../../dll.inc'
include '../../../develop/libraries/box_lib/load_lib.mac'
include '../../../develop/libraries/box_lib/trunk/box_lib.mac'
 
mov al,13
mcall ,<0,223> ,<0,275>
mcall ,<1,221>,<1,136>,0xffffff
mcall ,<2,220>,<2,135>,0xe4dfe1
mcall ,<16,189>,<97,23>,0x9098b0
@use_library
 
mov al,8
mcall ,<16,90> ,<20,27>,4,0x990022 ;eax=8 - draw buttons
mcall ,<113,90>, ,2,0xaa7700
mcall , ,<54,27>,1,0x777777
mcall ,<16,90> , ,3,0x007700
mcall ,<17,186>,<98,20>,5,0xe4dfe1
align 4
START:
 
mov al,4
mcall ,<28,105>,0x80000000,label4 ;eax=4 - write text
mcall ,<35,24> ,0x80ffffff,label2
mcall ,<34,58> , ,label3
mcall ,<47,37> , ,label5
mcall ,<43,71> , ,label6
load_libraries l_libs_start,end_l_libs
inc eax
test eax,eax
jz close
 
mov al,12
mcall ,2
push dword check1
call [init_checkbox2]
 
stdcall dll.Init,[init_lib]
 
invoke ini_get_int,ini_file,asettings,aautosave,0
mov [autosave],eax
cmp eax,1
jne @f
bts dword [check1.flags],1
@@:
mcall 40,0x00000027
redraw:
call draw_window
still:
mov al,10
mcall ;wait here for event
dec eax
jz draw_window
jz redraw
dec eax
jnz button
jz key
dec eax
jz button
 
push dword check1
call [check_box_mouse2]
bt dword [check1.flags],1
jnc @f
mov [autosave],1
jmp still
@@:
mov [autosave],0
jmp still
key:
mov al,2
mcall ;eax=2 - get key code
mov al,ah
64,9 → 76,9
cmp al,13
jz restart
cmp al,19
jz run_rdsave
jz checkbox
cmp al,27
jz close_1
jz close
cmp al,180
jz restart_kernel
cmp al,181
74,45 → 86,127
jmp still
 
button:
mov al,17
mcall ;eax=17 - get pressed button id
mcall 17 ;eax=17 - get pressed button id
xchg al,ah
dec eax
jz close_1
jz close
dec eax
jz restart_kernel
dec eax
jz restart
dec eax
jnz run_rdsave
; dec eax ; we have only one button left, this is close button
; jnz still
jnz checkbox
 
power_off:
push 2
jmp mcall_and_close
 
restart:
push 3
jmp mcall_and_close
 
restart_kernel:
push 4
 
mcall_and_close:
invoke ini_set_int,ini_file,asettings,aautosave,[autosave]
cmp [autosave],1
jne no_save
mcall 70,rdsave
test eax,eax
js no_save
mov ecx,eax
mcall 18,21
mov ecx,eax
@@:
push ecx
mcall 23,50
dec eax
jnz no_red
call draw_window
no_red:
pop ecx
mov al,18
mcall ,9
mcall 9,proc_info
cmp [proc_info+50],9
je no_save
jmp @b
no_save:
pop ecx
mcall 18,9
 
close_1:
or eax,-1
mcall
close:
mcall -1
 
run_rdsave:
mov al,70
mcall ,rdsave
checkbox:
btc dword [check1.flags],1
jc .1
mov [autosave],1
jmp .draw
.1:
mov [autosave],0
.draw:
push dword check1
call [check_box_draw2]
jmp still
 
draw_window:
mov al,12
mcall ,1
 
mcall 14 ;eax=14 - get screen max x & max y
movzx ecx,ax
shr eax,17
shl eax,16
lea ebx,[eax-110 shl 16+222]
shr ecx,1
shl ecx,16
lea ecx,[ecx-70 shl 16+117]
 
xor eax,eax
mcall , , ,0x019098b0,0x01000000 ;define and draw window
 
mov al,13
mcall ,<0,223> ,<0,118>
mcall ,<1,221>,<1,116>,0xffffff
mcall ,<2,220>,<2,115>,0xe4dfe1
 
mov al,8
mcall ,<16,90> ,<20,27>,4,0x990022 ;eax=8 - draw buttons
mcall ,<113,90>, ,2,0xaa7700
mcall , ,<54,27>,1,0x777777
mcall ,<16,90> , ,3,0x007700
 
push dword check1
call [check_box_draw2]
mcall 4,<27,24> ,0x90ffffff,label2 ;eax=4 - write text
mcall ,<23,58> , ,label3
mcall ,<47,37> ,0x90ffffff,label5
mcall ,<44,71> , ,label6
 
mov al,12
mcall ,2
ret
 
data
include 'data.inc'
 
udata
;---------------------------------------------------------------------
IM_END:
;---------------------------------------------------------------------
align 4
 
meos_app_end
proc_info rb 1024
 
autosave rd 1
;---------------------------------------------------------------------
cur_dir_path:
rb 4096
;---------------------------------------------------------------------
library_path:
rb 4096
;---------------------------------------------------------------------
align 32
rb 4096
stacktop:
I_END: ; ìåòêà êîíöà ïðîãðàììû