kolibrios/programs/system/scrsaver/scrsaver.asm

91 lines
2.2 KiB
NASM
Raw Normal View History

use32
org 0
db 'MENUET01'
dd 0x01,start,i_end,e_end,e_end,0,0
include 'proc32.inc'
include 'macros.inc'
include 'dll.inc'
include 'debug-fdo.inc'
__DEBUG__ = 1
__DEBUG_LEVEL__ = 1
DEFAULT_TIMEOUT_MINS = 15
start:
mcall 68, 11
mcall 40, EVM_KEY + EVM_BACKGROUND + EVM_MOUSE
stdcall dll.Load,@IMPORT
test eax, eax
jnz exit
invoke ini.get_str, ini_file, ini_section, ini_key_program, ini_program_buf, ini_program_buf.size, 0
cmp [ini_program_buf], 0 ; if nothing set then exit
je exit
invoke ini.get_int, ini_file, ini_section, ini_key_timeout, DEFAULT_TIMEOUT_MINS
imul eax, 60*100 ; cs
mov [timeout], eax
; r1647 by Nasarus
; mcall 66, 4, 57, 0 ; hot key for {Space}
; mcall 66, 4, 28, 0 ; hot key for {Enter}
still:
mcall 23, [timeout]
test eax, eax
jz run_saver
cmp eax, 2 ; key
jnz still
mcall
; r1647 by Nasarus
; cmp al, 2 ; hot key?
; jnz still ; no hotkey, evenets handling go on
; movzx edx, ah
; mcall 72, 1, 2 ; transfer key code to active window after interception
jmp still
run_saver:
invoke ini.get_str, ini_file, ini_section, ini_key_program, ini_program_buf, ini_program_buf.size, ini_program_default
; run actual screensaver
mcall 70, f70
cmp eax, 0
jg exit
neg eax
DEBUGF 1, 'Screen saver not found: %d: %s\n', eax, ini_program_buf
exit:
mcall -1
sz ini_file, '/sys/settings/system.ini',0
sz ini_section, 'screensaver',0
sz ini_key_timeout, 'timeout',0
timeout dd ?
sz ini_key_program, 'program',0
sz ini_program_default, '/sys/demos/spiral',0
sz program_params, '@ss',0
f70: ; run
dd 7, 0, program_params, 0, 0
db 0
dd ini_program_buf
align 4
@IMPORT:
library \
libini , 'libini.obj'
import libini, \
ini.get_str, 'ini_get_str', \
ini.get_int, 'ini_get_int'
include_debug_strings
i_end:
align 4
sz ini_program_buf, 1024 dup(?)
rb 0x100
e_end: