Files
kolibrios/programs/end/trunk/end.asm
Andrey Halyavin (halyavin) 8eba058ee9 I forget to include lang.inc file in END application. Now this is fixed.
git-svn-id: svn://kolibrios.org@59 a494cfbc-eb01-0410-851d-a64ba20cac60
2006-03-17 17:14:40 +00:00

212 lines
3.8 KiB
NASM
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
;
; END
;
; <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
include "lang.inc"
include "macros.inc"
meos_app_start
code
do_draw:
mov eax,48
mov ebx,3
mov ecx,sc
mov edx,sizeof.system_colors
int 0x40
mov al,12 ; eax=12 - tell os about redraw start
mov bl,1
int 0x40
mov al,14 ; eax=14 - get screen max x & max y
int 0x40
movzx ecx,ax
shr eax,17
; sub eax,110
shl eax,16
; mov ebx,eax
; add ebx,220
lea ebx,[eax-110*10000h+220]
shr ecx,1
; sub ecx,50
shl ecx,16
; add ecx,100
sub ecx,50*10000h - 100
mov eax,0 ; define and draw window
mov edx,[sc.work_button]
mov esi,edx ;[sc.work_button]
xor edi,edi
int 0x40
xor edx,edx
mov al,13
mcall ,14 shl 16+90,25 shl 16+27
push ebx
mcall ,117 shl 16+90,
xchg ebx,[esp]
mcall ,,59 shl 16+27
pop ebx
mcall
mov al,8
inc edx
mcall ,15 shl 16+87,26 shl 16+24,,0xdd7700
inc edx
mcall ,118 shl 16+87,,,0xbbbb ;cccc
inc edx
mcall ,15 shl 16+87,60 shl 16+24,,0xbb00
inc edx
mcall ,118 shl 16+87,,,0xbbbbbb ;cccccc
mov al,4 ; 0x00000004 = write text
mov ebx,75*65536+10
mov ecx,[sc.work_button_text] ; 8b window nro - RR GG BB color
or ecx,0x10000000
mov edx,label1 ; pointer to text beginning
mov esi,label1_len ; text length
int 0x40
mov ecx,0x10ffffff
mov ebx,25*65536+30
mov edx,label2 ; pointer to text beginning
mov esi,label2_len ; text length
int 0x40
mov ebx,20*65536+64
mov edx,label3 ; pointer to text beginning
mov esi,label3_len ; text length
int 0x40
mov ecx,0xffffff
mov ebx,45*65536+41
mov edx,label4 ; pointer to text beginning
mov esi,label4_len ; text length
int 0x40
mov ebx,40*65536+75
mov edx,label5 ; pointer to text beginning
mov esi,label5_len ; text length
int 0x40
mov al,12 ; tell os about redraw end
mov ebx,2
int 0x40
still:
mov eax,10 ; wait here for event
int 0x40
dec eax
jz do_draw
dec eax
jnz button
key:
mov al,2 ; now eax=2 - get key code
int 40h
mov al,ah
cmp al,13
jz restart
cmp al,27
jz close_1
cmp al,180
jz restart_kernel
cmp al,181
jz power_off
jmp still
button:
mov al,17 ; now eax=17 - get pressed button id
int 0x40
xchg al,ah
dec eax
jz power_off
dec eax
jz restart_kernel
dec eax
jz restart
; we have only one button left, this is close button
; dec eax
; jnz still
close_1:
or eax,-1
int 40h
power_off:
push 2
jmp mcall_and_close
restart:
push 3
jmp mcall_and_close
restart_kernel:
push 4
mcall_and_close:
pop ecx
mcall 18,9
jmp close_1
data
if lang eq ru
label1:
db '‚€˜ <E2809A>Ž<EFBFBD>:'
label1_len = $ - label1
label2:
db '‚›Š‹ž—ˆ’œ Ÿ„<C5B8>Ž'
label2_len = $ - label2
label3:
db '<27><EFBFBD>…‡€<E280A1>Š ŽŒ…<C592>€'
label3_len = $ - label3
label4:
db '(End) (Home)'
label4_len = $ - label4
label5:
db '(Enter) (Esc)'
label5_len = $ - label5
else
label1:
db ' SELECT:'
label1_len = $ - label1
label2:
db 'POWER OFF KERNEL'
label2_len = $ - label2
label3:
db ' RESTART CANCEL'
label3_len = $ - label3
label4:
db '(End) (Home)'
label4_len = $ - label4
label5:
db '(Enter) (Esc)'
label5_len = $ - label5
end if
udata
sc system_colors
meos_app_end