forked from KolibriOS/kolibrios
228 lines
4.3 KiB
NASM
Executable File
228 lines
4.3 KiB
NASM
Executable File
;---------------------------------------------------------------------
|
|
;
|
|
; DOCPAK FOR KOLIBRI v1.2
|
|
; Written in pure assembly by Ivushkin Andrey aka Willow
|
|
;
|
|
;---------------------------------------------------------------------
|
|
|
|
FILE_COUNT=0
|
|
DEF_FILE equ 'g'
|
|
|
|
macro embed_docdir_file fn
|
|
{
|
|
forward
|
|
local label,label2,label3
|
|
dd label2-label
|
|
dd label-label3
|
|
label3:
|
|
db fn
|
|
label:
|
|
file '%DOCDIR%' # fn
|
|
label2:
|
|
FILE_COUNT=FILE_COUNT+1
|
|
}
|
|
macro embed_local_file fn
|
|
{
|
|
forward
|
|
local label,label2,label3
|
|
dd label2-label
|
|
dd label-label3
|
|
label3:
|
|
db fn
|
|
label:
|
|
file fn
|
|
label2:
|
|
FILE_COUNT=FILE_COUNT+1
|
|
}
|
|
|
|
use32
|
|
org 0x0
|
|
db 'MENUET01' ; 8 byte id
|
|
dd 0x01 ; header version
|
|
dd start ; start of code
|
|
dd I_END ; size of image
|
|
dd I_END+0x400 ; memory for app
|
|
dd I_END+0x400 ; esp
|
|
dd my_param , 0x0 ; I_Param , I_Icon
|
|
include '../../../macros.inc'
|
|
include 'lang.inc'
|
|
|
|
start:
|
|
cmp [my_param],0
|
|
je red
|
|
cmp [my_param],'a'
|
|
jb .par_a
|
|
cmp [my_param],'z'
|
|
jbe .ok2
|
|
.par_a:
|
|
mov [my_param],DEF_FILE
|
|
.ok2:
|
|
movzx ecx,[my_param]
|
|
mov [my_param],'*'
|
|
.open:
|
|
sub ecx,'a'-1
|
|
mov edx,embedded
|
|
xor esi,esi
|
|
.list:
|
|
lea edx,[edx+esi+8]
|
|
mov esi,[edx-8]
|
|
add edx,[edx-4]
|
|
test esi,esi
|
|
jz .close
|
|
loop .list
|
|
push edx
|
|
; convert number in esi to decimal representation
|
|
mov ecx, 10
|
|
push -'0'
|
|
mov eax, esi
|
|
@@:
|
|
xor edx, edx
|
|
div ecx
|
|
push edx
|
|
test eax, eax
|
|
jnz @b
|
|
mov edi, fsize
|
|
@@:
|
|
pop eax
|
|
add al, '0'
|
|
stosb
|
|
jnz @b
|
|
mcall 70,fileinfo
|
|
mov ecx,eax
|
|
mcall 5,20
|
|
pop edx
|
|
mcall 60,2
|
|
cmp [my_param],'*'
|
|
jne still
|
|
.close:
|
|
mcall -1
|
|
|
|
red:
|
|
mov [my_param],'a'
|
|
|
|
mcall 48, 3, sc, sizeof.system_colors
|
|
|
|
mcall 12,1
|
|
|
|
BTN_H equ 21
|
|
|
|
mov edx,[sc.work]
|
|
or edx,0x34000000
|
|
mcall 0, <220,141>, <30,FILECOUNT*(BTN_H+3)+37>, , ,title
|
|
|
|
mov ecx,FILECOUNT
|
|
mov ebx,23 shl 16+100
|
|
mov esi,[sc.work_button]
|
|
mov edi,5 shl 16+BTN_H
|
|
mov edx,10
|
|
mov eax,8
|
|
.btnlp:
|
|
push ecx
|
|
mcall ,,edi
|
|
add edi,(BTN_H+3) shl 16
|
|
inc edx
|
|
pop ecx
|
|
loop .btnlp
|
|
mov ecx,FILECOUNT
|
|
mov edx,embedded
|
|
xor edi,edi
|
|
mov ebx,30 shl 16+8
|
|
mov eax,4
|
|
.list:
|
|
lea edx,[edx+edi+8]
|
|
mov edi,[edx-8]
|
|
pusha
|
|
sub ebx,20 shl 16
|
|
mov ecx, [sc.work_text]
|
|
or ecx, 0x30000000
|
|
mcall ,,,my_param,1
|
|
inc [my_param]
|
|
popa
|
|
push ecx
|
|
mov esi, [edx-4]
|
|
sub esi, 4 ;remove .txt extension
|
|
mov ecx, [sc.work_button_text]
|
|
or ecx, 0x30000000
|
|
mcall
|
|
pop ecx
|
|
add esi, 4
|
|
add edx, esi
|
|
add ebx,(BTN_H+3)
|
|
loop .list
|
|
mcall 12,2
|
|
|
|
still:
|
|
mcall 10
|
|
cmp eax,1
|
|
je red
|
|
cmp eax,2
|
|
jne .nokey
|
|
mcall 2
|
|
cmp ah,27 ;Esc
|
|
je start.close
|
|
cmp ah,'a'
|
|
jb still
|
|
cmp ah,'a'+FILECOUNT
|
|
jae still
|
|
jmp .cxax
|
|
.nokey:
|
|
mcall 17
|
|
cmp ah,1
|
|
je start.close
|
|
sub ah,10-'a'
|
|
.cxax:
|
|
movzx ecx,ah
|
|
jmp start.open
|
|
|
|
fileinfo:
|
|
dd 7
|
|
dd 0
|
|
dd param
|
|
dd 0 ,0
|
|
db '/sys/TINYPAD',0
|
|
|
|
param db '*'
|
|
fsize:
|
|
times 10 db '0'
|
|
db 0
|
|
|
|
embedded:
|
|
|
|
; Please use only filenames w/o path!
|
|
|
|
; -- Start of embedding area ------
|
|
embed_docdir_file 'CREDITS.TXT' ;a
|
|
if lang eq ru_RU
|
|
embed_docdir_file 'GNU.TXT' ;b
|
|
else
|
|
embed_docdir_file 'COPYING.TXT' ;b
|
|
end if
|
|
embed_docdir_file 'HOT_KEYS.TXT' ;c
|
|
embed_local_file 'FASM.TXT' ;d
|
|
embed_docdir_file 'MTDBG.TXT' ;e
|
|
if lang eq ru_RU
|
|
embed_local_file 'SYSFUNCR.TXT' ;f
|
|
else
|
|
embed_local_file 'SYSFUNCS.TXT' ;f
|
|
end if
|
|
embed_local_file 'STACK.TXT' ;g
|
|
embed_docdir_file 'KFAR_KEYS.TXT' ;h
|
|
embed_docdir_file 'INI.TXT' ;i
|
|
embed_docdir_file 'OPENDIAL.TXT' ;j
|
|
; -- End of embedding area -------
|
|
|
|
dd 0
|
|
FILECOUNT = FILE_COUNT
|
|
|
|
if ~ FILECOUNT>0
|
|
error 'No embedded files'
|
|
end if
|
|
|
|
my_param db 0
|
|
rb 256
|
|
I_END:
|
|
|
|
title db 'Doc Pack',0
|
|
|
|
sc system_colors
|