forked from KolibriOS/kolibrios
229 lines
4.2 KiB
NASM
229 lines
4.2 KiB
NASM
|
;WARNING! Spaghetti code, size optimized
|
||
|
|
||
|
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
|
||
|
|
||
|
include "lang.inc"
|
||
|
include "macros.inc" ; - 30 bytes !!!
|
||
|
|
||
|
|
||
|
START:
|
||
|
red: ; redraw
|
||
|
call draw_window
|
||
|
|
||
|
still:
|
||
|
|
||
|
mov eax,10 ; wait here for event
|
||
|
int 0x40
|
||
|
|
||
|
cmp eax,1 ; redraw request ?
|
||
|
je red
|
||
|
cmp eax,2 ; key in buffer ?
|
||
|
je key
|
||
|
cmp eax,3 ; button in buffer ?
|
||
|
je button
|
||
|
|
||
|
; jmp still
|
||
|
key: ; key
|
||
|
; just read it and ignore
|
||
|
int 0x40
|
||
|
jmp still
|
||
|
|
||
|
button: ; button
|
||
|
mov eax,17 ; get id
|
||
|
int 0x40
|
||
|
cmp ah,1 ; button id=1 ?
|
||
|
je close
|
||
|
cmp ah,2
|
||
|
je ramdiskcopy
|
||
|
cmp ah,3
|
||
|
je ramdiskupdate
|
||
|
jmp togglewrite
|
||
|
close:
|
||
|
or eax,-1 ; close this program
|
||
|
jmp callsys
|
||
|
ramdiskcopy:
|
||
|
mov eax,16
|
||
|
xor ebx,ebx
|
||
|
inc ebx
|
||
|
jmp callsys
|
||
|
ramdiskupdate:
|
||
|
mov eax,16
|
||
|
xor ebx,ebx
|
||
|
inc ebx
|
||
|
inc ebx
|
||
|
jmp callsys
|
||
|
togglewrite:
|
||
|
call togglefdcwrite
|
||
|
callsys:
|
||
|
int 0x40
|
||
|
jmp still
|
||
|
|
||
|
; get fdc settings for writing & invert them.
|
||
|
togglefdcwrite:
|
||
|
mov eax,16
|
||
|
mov ebx,4
|
||
|
int 0x40
|
||
|
xchg ecx,eax
|
||
|
xor ecx,1
|
||
|
mov eax,16
|
||
|
dec ebx
|
||
|
int 0x40
|
||
|
|
||
|
mov [esp], dword still ; change return address !
|
||
|
;run trough drawwindow :]
|
||
|
|
||
|
; *********************************************
|
||
|
; ******* WINDOW DEFINITIONS AND DRAW ********
|
||
|
; *********************************************
|
||
|
|
||
|
|
||
|
draw_window:
|
||
|
|
||
|
|
||
|
mov eax,12 ; function 12:tell os about windowdraw
|
||
|
xor ebx,ebx ; 1, start of draw
|
||
|
inc ebx
|
||
|
int 0x40
|
||
|
|
||
|
; DRAW WINDOW
|
||
|
xor eax,eax ; function 0 : define and draw win
|
||
|
mov ebx,100*65536+250 ; [x start] *65536 + [x size]
|
||
|
mov ecx,100*65536+120 ; [y start] *65536 + [y size]
|
||
|
mov edx,0x03ffffff ; color of work area RRGGBB,8->color gl
|
||
|
int 0x40
|
||
|
|
||
|
;The important part, the buttons & text.
|
||
|
|
||
|
mov ebx,9*65536+36
|
||
|
mov ecx,41*65536+14
|
||
|
xor edx,edx
|
||
|
inc edx
|
||
|
inc edx
|
||
|
;mov edx,2
|
||
|
call clickbox
|
||
|
|
||
|
mov ebx,67*65536+49
|
||
|
inc edx
|
||
|
call clickbox
|
||
|
|
||
|
mov ebx,12*65536+12
|
||
|
mov ecx,81*65536+12
|
||
|
inc edx
|
||
|
call clickbox
|
||
|
|
||
|
mov ecx,96*65536+12
|
||
|
xor edx,edx
|
||
|
call clickbox
|
||
|
|
||
|
mov edi,0x10000000
|
||
|
mov edx,titlebar
|
||
|
mov ebx,9*65536+9
|
||
|
mov ecx,0x10ffffff
|
||
|
call print
|
||
|
|
||
|
; mov edx,h1
|
||
|
mov ebx,11*65536+28
|
||
|
mov ecx,0x10808080
|
||
|
call print
|
||
|
|
||
|
; mov edx,comtext
|
||
|
add ebx,15
|
||
|
xchg ecx,edi
|
||
|
call print
|
||
|
|
||
|
; mov edx,h2
|
||
|
add ebx,25
|
||
|
xchg ecx,edi
|
||
|
call print
|
||
|
|
||
|
; mov edx,setwrite
|
||
|
add ebx,15
|
||
|
xchg ecx,edi
|
||
|
call print
|
||
|
|
||
|
; mov edx,setread
|
||
|
add ebx,15
|
||
|
xchg ecx,edi
|
||
|
call print
|
||
|
|
||
|
mov eax,16
|
||
|
mov ebx,4
|
||
|
int 0x40
|
||
|
test al,1
|
||
|
je nowritex
|
||
|
; mov edx,xsign
|
||
|
mov ebx,14*65536+83
|
||
|
xchg ecx,edi
|
||
|
call print
|
||
|
nowritex:
|
||
|
mov eax,12 ; function 12:tell os about windowdraw
|
||
|
mov ebx,2 ; 2, end of draw
|
||
|
int 0x40
|
||
|
ret
|
||
|
|
||
|
clickbox:
|
||
|
pusha
|
||
|
mov edi,edx
|
||
|
cmp edx, 0
|
||
|
je .disabledbox
|
||
|
mov eax,8 ; function 8 : define and draw button
|
||
|
int 0x40
|
||
|
.disabledbox:
|
||
|
inc ecx
|
||
|
inc ebx
|
||
|
mov eax,13
|
||
|
mov edx, 0x808080
|
||
|
int 0x40
|
||
|
cmp edi,0
|
||
|
je .grayed
|
||
|
mov edx,0x80
|
||
|
.grayed:
|
||
|
sub ebx,65536
|
||
|
sub ecx,65536
|
||
|
int 0x40
|
||
|
add ebx,65534
|
||
|
add ecx,65534
|
||
|
mov edx,0xffffff
|
||
|
int 0x40
|
||
|
popa
|
||
|
ret
|
||
|
|
||
|
print:
|
||
|
mov eax,edx
|
||
|
xor esi,esi
|
||
|
addchar:
|
||
|
inc eax
|
||
|
inc esi
|
||
|
cmp [eax],byte 0
|
||
|
jne addchar
|
||
|
mov eax,4
|
||
|
int 0x40
|
||
|
add edx,esi
|
||
|
inc edx
|
||
|
ret
|
||
|
|
||
|
|
||
|
; DATA AREA
|
||
|
|
||
|
titlebar: db 'RD2FD',0
|
||
|
h1: db 'Commands',0
|
||
|
comtext: db 'Copy or Update ramdisk to floppy',0
|
||
|
h2: db 'Settings',0
|
||
|
setwrite: db ' Write directly to floppy',0
|
||
|
setread: db ' Read directly from floppy',0
|
||
|
xsign: db 'X',0
|
||
|
I_END:
|
||
|
|
||
|
|
||
|
|
||
|
|