forked from KolibriOS/kolibrios
1 line
4.4 KiB
NASM
1 line
4.4 KiB
NASM
|
use32
org 0x0
db 'MENUET01' ; 8 byte id
dd 38 ; required os
dd STARTAPP ; program start
dd I_END ; program image size
dd 0x1000000 ; required amount of memory
dd 0x1000000 ; stack heap
dd app_path
dd 0x0
include 'kinc/proc32.inc'
include 'kinc/macros.inc'
include 'kinc/dll.inc'
PATH_MAX_CHARS equ 255
STARTAPP:
; Initialize memory
mcall 68, 11
or eax,eax
jz close_app
;Import libraries
stdcall dll.Load,importTable
test eax, eax
jnz close_app
invoke ini_get_int, aIni, aMain, aButton, 0
mov ecx, eax
mcall 48, 1
invoke ini_get_int, aIni, aMain, aBg, 0
cmp eax, 1
jnz set_bg
set_program:
invoke ini_get_str, aIni, aMain, aProgram, sz_buffer, PATH_MAX_CHARS, 0
invoke ini_get_str, aIni, aMain, aParam, sz_param, PATH_MAX_CHARS, 0
stdcall RunProgram, sz_buffer, sz_param
jmp set_skin
set_bg:
invoke ini_get_str, aIni, aMain, aWallpaper, sz_param, PATH_MAX_CHARS, 0
mov byte [sz_buffer + 0],'\'
mov byte [sz_buffer + 1], 'S'
mov byte [sz_buffer + 2], '_'
mov byte [sz_buffer + 3], '_'
mov edi, 0
@@:
mov ah, byte [sz_param + edi]
mov byte [sz_buffer + edi + 4], ah
inc edi
cmp byte [sz_param + edi], 0
jne @b
mov byte [sz_buffer + edi + 4], 0
mcall 70, is_kiv
set_skin:
invoke ini_get_str, aIni, aMain, aSkin, sz_param, PATH_MAX_CHARS, 0
mcall 48, 8, sz_param
close_app:
mcall -1
proc RunProgram stdcall, app_path:dword, app_param:dword
pusha
mov dword [InfoStructure], 7 ; run program
mov dword [InfoStructure+4], 0 ; flags
mov eax, [app_param]
mov dword [InfoStructure+8], eax ; pointer to the parametrs
mov dword [InfoStructure+12], 0 ; reserved
mov dword [InfoStructure+16], 0 ; reserved
mov dword [InfoStructure+20], 0 ; reserved
mov eax, [app_path]
mov dword [InfoStructure+21], eax ; pointer to the file name
mcall 70, InfoStructure
popa
ret
endp
align 16
importTable:
library \
libini, 'libini.obj'
import libini, \
ini_get_str ,'ini_get_str', \
ini_set_str ,'ini_set_str', \
ini_get_int ,'ini_get_int', \
ini_set_int ,'ini_set_int'
InfoStructure:
dd 0x0 ; subfunction number
dd 0x0 ; position in the file in bytes
dd 0x0 ; upper part of the position address
dd 0x0 ; number of bytes to read
dd 0x0 ; pointer to the buffer to write data
db 0
dd 0 ; pointer to the filename
aIni db '/rd/1/settings/eskin.ini',0
aMain db 'main',0
aBg db 'bg',0
aButton db '3d',0
aSkin db 'skin',0
aWallpaper db 'wallpaper',0
aProgram
|