kolibrios-fun/programs/system/rdsave/trunk/rdsave.asm

213 lines
4.5 KiB
NASM
Raw Normal View History

;
; Save Ramdisk to HD and FD
; Mario79 2005
; Compile with FASM for Menuet
;
include 'lang.inc'
include 'macros.inc'
appname equ 'RDsave '
version equ '1.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 0x1000 ; memory for app
dd 0x1000 ; esp
dd 0x0 , 0x0 ; I_Param , I_Icon
;******************************************************************************
START: ; start of execution
xor eax,eax
mov edi,bootpath
mov ecx,128
rep stosd
mcall 6,filename,0,-1,bootpath
mov esi,bootpath+1
mov cx,512
start_search:
lodsb
cmp al,"'"
jz set_end_path
dec cx
cmp cx,0
ja start_search
set_end_path:
mov [esi-1],byte 0
mov eax,40
mov ebx,101b
int 0x40
red:
call draw_window
still:
mov eax, 10 ; wait here for event
int 0x40
dec eax ; redraw request ?
je red
; dec eax
; dec eax ; button in buffer ?
; je button
button: ; button
mov eax,17 ; get id
int 0x40
cmp ah,2
jne ah_3
mcall 18,6,1
jmp red
ah_3:
cmp ah,3
jne ah_4
mcall 18,6,2
jmp red
ah_4:
cmp ah,4
jne ah_5
mcall 18,6,3,bootpath+1
jmp red
ah_5:
cmp ah,5
jne ah_6
mcall 16,1
jmp red
ah_6:
cmp ah,6
jne ah_1
mcall 16,2
jmp red
ah_1:
cmp ah,1
je exit
jmp still
exit:
or eax,-1 ; close this program
int 0x40
; *********************************************
; ******* WINDOW DEFINITIONS AND DRAW ********
; *********************************************
draw_window:
mov eax,48
mov ebx,3
mov ecx,sc
mov edx,sizeof.system_colors
int 0x40
mov eax, 12 ; function 12:tell os about windowdraw
mov ebx, 1 ; 1, start of draw
int 0x40
; DRAW WINDOW
mov eax, 0 ; function 0 : define and draw window
mov ebx, 200*65536+230 ; [x start] *65536 + [x size]
mov ecx, 200*65536+260 ; [y start] *65536 + [y size]
mov edx, [sc.work] ; color of work area RRGGBB,8->color gl
or edx,0x33000000
mov edi,header ; WINDOW LABEL
int 0x40
mcall 8,<11,17>,<26,17>,2,[sc.work_button]
inc edx
mcall , ,<56,17>, ,
inc edx
mcall , ,<86,17>, ,
inc edx
mcall , ,<166,17>, ,
inc edx
mcall , ,<196,17>, ,
mov ecx,[sc.work_button_text]
or ecx,0x10000000
mcall 4,<17,31>, ,text_123,1
add ebx,30
add edx,1
mcall
add ebx,30
add edx,1
mcall
add ebx,80
add edx,1
mcall
add ebx,30
add edx,1
mcall
mov ecx,[sc.work_text]
or ecx,0x80000000
mcall ,<40,31>, ,text_1,
add ebx,30
mcall , , ,text_2,
add ebx,30
mcall , , ,text_3,
mcall ,<15,115>, ,text_4,
mcall ,<35,125>, ,text_5,
mcall ,<35,41>, ,text_6,
mcall ,<35,101>, ,text_6,
mcall ,<40,171>, ,text_7,
mcall ,<40,201>, ,text_8,
mcall ,<25,10>, ,text_9,
mcall ,<25,150>, ,text_10,
mov eax,12 ; function 12:tell os about windowdraw
mov ebx,2 ; 2, end of draw
int 0x40
ret
header db appname,version,0
text_123 db '12345'
if lang eq ru
text_1 db '<27> <20><><EFBFBD><EFBFBD><EFBFBD> <20>:\KOLIBRI',0
text_2 db '<27> <20><><EFBFBD> <20><><20>',0
text_3 db '<27><><EFBFBD><EFBFBD> <20><><E4A0A9> RD2HD.TXT',0
text_4 db '<27>.3 <20><><EFBFBD><><EFBFBD><E0A2AD><EFBFBD> <20><><EFBFBD><EFBFBD><E0A0AD><EFBFBD><EFBFBD>',0
text_5 db '<27>.<2E>. <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD>.',0
text_6 db '(<28><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2A2AE><EFBFBD><EFBFBD>)',0
text_7 db '<27><> /FD/1',0
text_8 db '<27><> /FD/2',0
text_9 db '<27><><EFBFBD><EFBFBD><E0A0AD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>:',0
text_10 db '<27><><EFBFBD><EFBFBD><E0A0AD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><E1AAA5>:',0
else
text_1 db 'To the folder C:\KOLIBRI',0
text_2 db 'To the root of C',0
text_3 db 'To path in the file RD2HD.TXT',0
text_4 db 'p.3 for backup, as the kernel',0
text_5 db 'can not boot from there.',0
text_6 db '(folder must exist)',0
text_7 db 'To /FD/1',0
text_8 db 'To /FD/2',0
text_9 db 'Save to hard disk:',0
text_10 db 'Save to floppy:',0
end if
filename db 'RD2HD TXT'
I_END:
sc system_colors
bootpath: