15,11 → 15,13 |
dd START ; start address |
dd I_END ; file size |
dd 28000h ; memory |
dd 28000h ; stack pointer (0x10000+ - work area for os) |
dd 10000h ; stack pointer |
dd 0,0 ; parameters, reserved |
|
include 'lang.inc' |
include 'macros.inc' |
include 'kglobals.inc' |
include 'unpacker.inc' |
;****************************************************************************** |
|
|
141,16 → 143,13 |
mov ebx,1 |
mov ecx,1 |
int 0x40 |
mov eax,48 |
mov ebx,0 |
mov ecx,0 |
int 0x40 |
jmp still |
jmp doapply |
no_3d: |
|
cmp ah,15 ; set flat buttons |
jne no_flat |
mcall 48, 1, 0 |
doapply: |
mcall 48, 0, 0 |
jmp still |
no_flat: |
163,10 → 162,7 |
mov ecx,color_table |
mov edx,10*4 |
int 0x40 |
mov eax,48 |
mov ebx,0 |
mov ecx,0 |
int 0x40 |
jmp doapply |
no_apply: |
|
cmp ah,17 ; load skin file |
275,43 → 271,50 |
|
|
load_file: |
pushad |
xor eax, eax |
mov ebx, read_info |
mov dword [ebx], eax ; subfunction: read |
mov dword [ebx+4], eax ; offset (low dword) |
mov dword [ebx+8], eax ; offset (high dword) |
mov dword [ebx+12], 40 ; read colors file: 4*10 bytes |
mov dword [ebx+16], color_table ; address |
mcall 70 |
ret |
|
mov [read_info.mode] ,0 |
mov [read_info.start_block],0 |
mov [read_info.blocks] ,1 |
mov [read_info.address] ,color_table |
mov [read_info.workarea] ,0x10000 |
mcall 58, read_info |
load_skin_file: |
xor eax, eax |
mov ebx, read_info |
mov dword [ebx], eax ; subfunction: read |
mov dword [ebx+4], eax ; offset (low dword) |
mov dword [ebx+8], eax ; offset (high dword) |
mov dword [ebx+12], 32*1024 ; read: max 32 KBytes |
mov dword [ebx+16], 0x10000 ; address |
mcall 70 |
|
; call draw_colours |
mov esi, 0x10000 |
|
popad |
ret |
cmp dword [esi], 'KPCK' |
jnz notpacked |
cmp dword [esi+4], 32*1024 ; max 32 KBytes |
ja doret |
push 0x20000 |
push esi |
call unpack |
mov esi, 0x20000 |
notpacked: |
|
load_skin_file: |
pushad |
cmp dword[esi+SKIN_HEADER.ident],'SKIN' |
jne doret |
|
mov [read_info.mode] ,0 |
mov [read_info.start_block],0 |
mov [read_info.blocks] ,64 |
mov [read_info.address] ,0x20000 |
mov [read_info.workarea] ,0x10000 |
mcall 58, read_info |
mov edi,0x18000 |
mov ecx,0x8000/4 |
rep movsd |
|
cmp dword[0x20000+SKIN_HEADER.ident],'SKIN' |
jne @f |
|
mov esi,fname |
mov edi,skin_info.fname |
mov ecx,257 |
rep movsb |
|
mov esi,0x20000 |
mov edi,0x18000 |
mov ecx,0x8000/4 |
rep movsd |
|
mov ebp,0x18000 |
mov esi,[ebp+SKIN_HEADER.params] |
add esi,ebp |
319,25 → 322,21 |
mov edi,color_table |
mov ecx,10 |
rep movsd |
@@: |
doret: |
|
popad |
ret |
|
|
save_file: |
pushad |
|
mov [write_info.mode] ,1 |
mov [write_info.bytes2write],10*4 |
mov [write_info.address] ,color_table |
mov [write_info.workarea] ,0x10000 |
mcall 58, write_info |
|
popad |
mov ebx, write_info |
mov dword [ebx], 2 ; subfunction: write |
and dword [ebx+4], 0 ; (reserved) |
and dword [ebx+8], 0 ; (reserved) |
mov dword [ebx+12], 10*4 ; bytes to write |
mov dword [ebx+16], color_table ; address |
mcall 70 |
ret |
|
|
read_string: |
|
pusha |
357,7 → 356,7 |
int 0x40 |
cmp eax,2 |
jne read_done |
mov eax,2 |
; mov eax,2 |
int 0x40 |
shr eax,8 |
cmp eax,13 |
381,8 → 380,7 |
|
read_done: |
|
mov ecx, fname |
add ecx, 88 |
mov ecx, fname+88 |
sub ecx, edi |
mov eax, 0 |
cld |
1041,8 → 1039,12 |
|
color dd 0 |
|
IncludeIGlobals |
|
I_END: |
|
IncludeUGlobals |
|
read_info: |
.mode dd ? ; read |
.start_block dd ? ; first block |