*new function 18/6 with LFN support from diamond 26.09.06 (see docs)

*new RDsave from me
*end - added button to run rdsave
*cpu - title with fn0

git-svn-id: svn://kolibrios.org@341 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
heavyiron 2007-02-12 05:14:58 +00:00
parent cc80eeaa07
commit 579829b9f9
7 changed files with 1357 additions and 299 deletions

View File

@ -1,27 +1,22 @@
sysfn_saveramdisk: ; 18.6 = SAVE FLOPPY IMAGE (HD version only) iglobal
cmp ebx,1 saverd_fileinfo:
jnz img_save_hd_1 dd 2 ; subfunction: write
mov edx,bootpath ; path = '/KOLIBRI ' dd 0 ; (reserved)
jmp img_save_hd_3 dd 0 ; (reserved)
img_save_hd_1: dd 1440*1024 ; size 1440 Kb
cmp ebx,2 dd 0x100000 - std_application_base_address ; base address
jnz img_save_hd_2 db 0
mov edx,bootpath2 ; path = 0 (root dir) .name:
jmp img_save_hd_3 dd ?
img_save_hd_2: endg
cmp ebx,3 sysfn_saveramdisk: ; 18.6 = SAVE FLOPPY IMAGE (HD version only)
jnz exit_for_anyone call restorefatchain
mov edx,[0x3010] mov eax, saverd_fileinfo - std_application_base_address
mov edx,[edx+TASKDATA.mem_start] mov [saverd_fileinfo.name], ebx
add edx,ecx pushad
img_save_hd_3: push eax
call reserve_hd1 call file_system_lfn
call reserve_hd_channel pop eax
call restorefatchain ; restore FAT !!! popad
mov eax,image_save mov [esp+36], eax
mov ebx,1440*1024 ; size 1440 Kb ret
mov ecx,0x100000 ; address of image
call file_write
call free_hd_channel
mov [esp+36],eax
ret

View File

@ -676,19 +676,12 @@
<EFBFBD> ΰ ¬¥βΰλ: <EFBFBD> ΰ ¬¥βΰλ:
* eax = 18 - ­®¬¥ΰ δγ­<CEB3>樨 * eax = 18 - ­®¬¥ΰ δγ­<CEB3>樨
* ebx = 6 - ­®¬¥ΰ ―®¤δγ­<CEB3>樨 * ebx = 6 - ­®¬¥ΰ ―®¤δγ­<CEB3>樨
* ecx ®¯à¥¤¥«ï¥â ¯ãâì ª ä ©«ã: * ecx = 㪠§ â¥«ì ­  áâபã á ¯®«­ë¬ ¨¬¥­¥¬ ä ©« 
* 1 = ¢ ¯ ¯ª¥ "/KOLIBRI" (­ ¯à¨¬¥à, "/hd0/1/kolibri/kolibri.img")
* 2 = ¢ ª®à­¥¢®¬ ª â «®£¥
* 3 = edx 㪠§ë¢ ¥â ­  ¯ãâì (¨¬¥­  ¯ ¯®ª ¢ ä®à¬ â¥ 8+3,
à §¤¥«ñ­­ë¥ '/')
‚®§Άΰ ι ¥¬®¥ §­ η¥­¨¥: ‚®§Άΰ ι ¥¬®¥ §­ η¥­¨¥:
* eax = 0 - γα―¥θ­® * eax = 0 - γα―¥θ­®
* ¨­ η¥ eax = <20>®¤ ®θ¨΅<C2A8>¨ δ ©«®Ά®© α¨α⥬λ * ¨­ η¥ eax = <20>®¤ ®θ¨΅<C2A8>¨ δ ©«®Ά®© α¨α⥬λ
‡ ¬¥η ­¨ο: ‡ ¬¥η ­¨ο:
* ˆ¬ï ä ©«  䨪á¨à®¢ ­®, "kolibri.img" (£«®¡ «ì­ ï ¯¥à¥¬¥­­ ï ï¤à 
image_save ¨§ preboot.inc)
* <20>  ª ª®¬ à §¤¥«¥ ª ª®£® ¤¨áª  ä ©« ¡ã¤¥â á®åà ­ñ­, ®¯à¥¤¥«ï¥âáï
¯®¤ä㭪樥© 7 ¨ ¯®¤ä㭪樥© 8 ä㭪樨 21.
* ‚α¥ ― <C2A0>¨ Ά γ<> § ­­®¬ ―γβ¨ ¤®«¦­λ αγι¥αβΆ®Ά βμ, ¨­ η¥ Ά¥ΰ­ρβαο * ‚α¥ ― <C2A0>¨ Ά γ<> § ­­®¬ ―γβ¨ ¤®«¦­λ αγι¥αβΆ®Ά βμ, ¨­ η¥ Ά¥ΰ­ρβαο
§­ η¥­¨¥ 5, "δ ©« ­¥ ­ ©¤¥­". §­ η¥­¨¥ 5, "δ ©« ­¥ ­ ©¤¥­".

View File

@ -671,19 +671,12 @@ Returned value:
Parameters: Parameters:
* eax = 18 - function number * eax = 18 - function number
* ebx = 6 - subfunction number * ebx = 6 - subfunction number
* ecx defines path to the file: * ecx = pointer to the full path to file
* 1 = in the folder "/KOLIBRI" (for example, "/hd0/1/kolibri/kolibri.img")
* 2 = in the root folder
* 3 = edx points to the path (names of folders in the format 8+3,
divided by '/')
Returned value: Returned value:
* eax = 0 - success * eax = 0 - success
* else eax = error code of the file system * else eax = error code of the file system
Çàìå÷àíèÿ: Remarks:
* Filename is fixed, "kolibri.img" (global kernel variable
'image_save' from 'preboot.inc')
* Drive and partition are defined by subfunction 7
and subfunction 8 of function 21.
* All folders in the given path must exist, otherwise function * All folders in the given path must exist, otherwise function
returns value 5, "file not found". returns value 5, "file not found".

View File

@ -126,7 +126,7 @@ still_end:
;close program if we going to reboot ;close program if we going to reboot
close: close:
mov eax,-1 ; close this program or eax,-1 ; close this program
int 0x40 int 0x40
draw_next_process: draw_next_process:
@ -479,19 +479,12 @@ draw_window:
xor eax,eax ; function 0 : define and draw window xor eax,eax ; function 0 : define and draw window
mov ebx,[winxpos] ; [x start] *65536 + [x size] mov ebx,[winxpos] ; [x start] *65536 + [x size]
mov ecx,[winypos] ; [y start] *65536 + [y size] mov ecx,[winypos] ; [y start] *65536 + [y size]
mov edx,0x03ddffdd ;ffffff ; color of work area RRGGBB,8->color mov edx,0x13ddffdd ;ffffff ; color of work area RRGGBB,8->color
mov esi,0x805080d0 ; color of grab bar RRGGBB,8->color gl mov edi,header ; WINDOW CAPTION;
mov edi,0x005080d0 ; color of frames RRGGBB
int 0x40 int 0x40
; WINDOW CAPTION
mov eax,4 ; function 4 : write text to window mov eax,4 ; function 4 : write text to window
mov ebx,8*65536+8 ; [x start] *65536 + [y start]
mov ecx,0x10ffffff ; font 1 & color ( 0xF0RRGGBB )
mov edx,labelt ; pointer to text beginning
mov esi,labellen-labelt ; text length
int 0x40
mov ebx,22*65536+35 ; draw info text with function 4 mov ebx,22*65536+35 ; draw info text with function 4
xor ecx,ecx xor ecx,ecx
mov edx,text mov edx,text
@ -601,9 +594,7 @@ tbts_2 db '>'
tbts_3 db 'START' tbts_3 db 'START'
tbte_2: tbte_2:
labelt: header db 'Prozesse - Ctrl/Alt/Del',0
db 'Prozesse - Ctrl/Alt/Del'
labellen:
else if lang eq et else if lang eq et
text: text:
@ -617,9 +608,7 @@ tbts_2 db '>'
tbts_3 db 'START' tbts_3 db 'START'
tbte_2: tbte_2:
labelt: header db 'Protsessid - Ctrl/Alt/Del',0
db 'Protsessid - Ctrl/Alt/Del'
labellen:
else else
text: text:
@ -633,9 +622,7 @@ tbts_2 db '>'
tbts_3 db 'RUN' tbts_3 db 'RUN'
tbte_2: tbte_2:
labelt: header db 'Processes - Ctrl/Alt/Del',0
db 'Processes - Ctrl/Alt/Del'
labellen:
end if end if

View File

@ -29,19 +29,14 @@ do_draw:
movzx ecx,ax movzx ecx,ax
shr eax,17 shr eax,17
; sub eax,110
shl eax,16 shl eax,16
; mov ebx,eax
; add ebx,220
lea ebx,[eax-110*10000h+220] lea ebx,[eax-110*10000h+220]
shr ecx,1 shr ecx,1
; sub ecx,50
shl ecx,16 shl ecx,16
; add ecx,100 sub ecx,50*10000h - 120
sub ecx,50*10000h - 100
mov eax,0 ; define and draw window xor eax,eax ; define and draw window
mov edx,[sc.work] mov edx,[sc.work]
mov esi,edx mov esi,edx
mov edi,edx mov edi,edx
@ -51,11 +46,12 @@ do_draw:
mov al,13 mov al,13
mcall ,18 shl 16+90,29 shl 16+27 mcall ,18 shl 16+90,29 shl 16+27
push ebx push ebx
mcall ,121 shl 16+90, mcall ,121 shl 16+90
xchg ebx,[esp] xchg ebx,[esp]
mcall ,,63 shl 16+27 mcall ,,63 shl 16+27
pop ebx pop ebx
mcall mcall
mcall ,179 shl 16+30,99 shl 16+15
xor edx,edx xor edx,edx
mov al,8 mov al,8
@ -67,38 +63,38 @@ do_draw:
mcall ,15 shl 16+87,60 shl 16+24,,0x9900 mcall ,15 shl 16+87,60 shl 16+24,,0x9900
inc edx inc edx
mcall ,118 shl 16+87,,,0xaaaaaa ;cccccc mcall ,118 shl 16+87,,,0xaaaaaa ;cccccc
inc edx
mcall ,175 shl 16+30,95 shl 16+15,,[sc.work_button]
mov al,4 ; 0x00000004 = write text mov al,4 ; 0x00000004 = write text
mov ebx,75*65536+10 mov ebx,75*65536+10
mov ecx,[sc.work_text] ; 8b window nro - RR GG BB color mov ecx,[sc.work_text] ; 8b window nro - RR GG BB color
or ecx,0x10000000 or ecx,0x90000000
mov edx,label1 ; pointer to text beginning mov edx,label1 ; pointer to text beginning
mov esi,label1_len ; text length
int 0x40 int 0x40
mov ecx,0xeeeeee ; 8b window nro - RR GG BB color mov ebx,15*65536+101
or ecx,0x10000000 mov edx,label4
int 0x40
mov ecx,0x90eeeeee ; 8b window nro - RR GG BB color
mov ebx,25*65536+30 mov ebx,25*65536+30
mov edx,label2 ; pointer to text beginning mov edx,label2 ; pointer to text beginning
mov esi,label2_len ; text length
int 0x40 int 0x40
mov ebx,20*65536+64 mov ebx,20*65536+64
mov edx,label3 ; pointer to text beginning mov edx,label3
mov esi,label3_len ; text length
int 0x40 int 0x40
mov ebx,45*65536+41 mov ebx,45*65536+41
mov edx,label4 ; pointer to text beginning mov edx,label5
mov esi,label4_len ; text length
int 0x40 int 0x40
mov ebx,40*65536+75 mov ebx,40*65536+75
mov edx,label5 ; pointer to text beginning mov edx,label6
mov esi,label5_len ; text length
int 0x40 int 0x40
mov al,12 ; tell os about redraw end mov al,12 ;end of redraw
mov ebx,2 mov ebx,2
int 0x40 int 0x40
@ -135,6 +131,8 @@ still:
jz restart_kernel jz restart_kernel
dec eax dec eax
jz restart jz restart
dec eax
jnz run_rdsave
; we have only one button left, this is close button ; we have only one button left, this is close button
; dec eax ; dec eax
; jnz still ; jnz still
@ -157,75 +155,67 @@ mcall_and_close:
mcall 18,9 mcall 18,9
jmp close_1 jmp close_1
run_rdsave:
mov eax,70
mov ebx,rdsave
int 0x40
jmp still
data data
if lang eq ru if lang eq ru
label1: label1:
db '‚€˜ <E2809A>Ž<EFBFBD>:' db '‚ è ¢ë¡®à:',0
label1_len = $ - label1
label2: label2:
db '‚›Š‹ž—ˆ’œ Ÿ„<C5B8>Ž' db '‚몫îç¨âì Ÿ¤à®',0
label2_len = $ - label2
label3: label3:
db '<27><EFBFBD>…‡€<E280A1>Š ŽŒ…<C592>€' db '<27>¥à¥§ ¯ã᪠Žâ¬¥­ ',0
label3_len = $ - label3 label4:
db '‘®åà ­¨âì ­ áâனª¨',0
else if lang eq en else if lang eq en
label1: label1:
db ' SELECT:' db ' SELECT:',0
label1_len = $ - label1
label2: label2:
db 'POWER OFF KERNEL' db 'POWER OFF KERNEL',0
label2_len = $ - label2
label3: label3:
db ' RESTART CANCEL' db ' RESTART CANCEL',0
label3_len = $ - label3 label4:
db 'Save settings',0
else if lang eq et else if lang eq et
label1: label1:
db ' VALI:' db ' VALI:',0
label1_len = $ - label1
label2: label2:
db 'LÜLITA VÄLJA KERNEL' db 'LÜLITA VÄLJA KERNEL',0
label2_len = $ - label2
label3: label3:
db ' RESTART TÜHISTA' db ' RESTART TÜHISTA',0
label3_len = $ - label3 label4:
db 'Save settings',0
else else
label1: label1:
db 'WAEHLEN:' db 'WAEHLEN:',0
label1_len = $ - label1
label2: label2:
db ' BEENDEN KERNEL' db ' BEENDEN KERNEL',0
label2_len = $ - label2
label3: label3:
db ' NEUSTART ABBRECHEN' db ' NEUSTART ABBRECHEN',0
label3_len = $ - label3 label4:
db 'Save settings',0
end if end if
label4:
db '(End) (Home)'
label4_len = $ - label4
label5: label5:
db '(Enter) (Esc)' db '(End) (Home)',0
label5_len = $ - label5 label6:
db '(Enter) (Esc)',0
rdsave:
dd 7
dd 0
dd 0
dd 0
dd 0
db '/rd/1/rdsave',0
udata udata
sc system_colors sc system_colors

View File

@ -0,0 +1,978 @@
; <Lrz> 01.02.2007 ¤®à ¡®âª  edit_box, ¨á¯à ¢¨« ¡ £¨.
; <Lrz> 26.01.2007 ­®à¬ «ì­ ï à ¡®â  ª®¬¯®­¥­â  ¨á¯à ¢¨« äãªæ¨î .check_offset
; <Lrz> 24.01.2007 ¯®ä¨ªá¨« ¡ £¨, ¢ë§¢ ­­ë¥ ­¥¯à ¢¨«ì­ë¬ ª®¤®¬ )).
; <Lrz> 22.01.2007 ¨§¡ ¢¨«áï ®â £«îª®¢ ¯à¨ à ¡®â¥ á ¢ë¤¥«¥­¨¥¬ ¨ 㤠«¥­¨¥¬, ª®à४⭠ï à ¡®â  ª« ¢¨è del & backspase
; <Lrz> 20.01.2007 ॠ«¨§®¢ « ¢ë¤¥«¥­¨¥ ⥪áâ  ¯® shift
; <Lrz> 12.12.2006 ॠ«¨§®¢ « ¯®¤¤¥à¦ªã ª­®¯ª¨ insert ¨ ᥣ®¤ï ª®¬¯®­¥­â ¯®ç⨠ࠡ®â ¥â!!!!
; <Lrz> 07.12.2006 ¯à®¤®«¦ ¥âáï à ¡®â  ­ ¤ ¯¥à¥à ¡®âª®© ª®¬¯®­¥­â ,¨§¬¥­¥­¨ï¬ ¯®¤¢¥à£«¨áì ¬­®£¨¥ ä㭪樨, ¯¥à¥à ¡®â ­ ¢ë¢®¤ ⥪áâ ,   â ª¦¥  «£®à¨â¬ ¢­¥á¥­¨ï ᨬ¢®«®¢.
; <Lrz> 03.09.2006 ¯® ¢®§¬®¦­®á⨠®âª § «áï ®â 16 ¡¨â­®©  à¨ä¬¥â¨ª¨, ¤®¡ ¢¨« ­®¢ë¥ ¡ £¨
; <Lrz> 09.08.2006 ¯à®¨§¢¥¤¥­  ®¯â¨¬¨§ æ¨ï à ¡®âë ª®­¯®ª DEL ¨ Backspace, 㬥­ì襭 à §¬¥à ¢ë¯®«­ï¥¬®£® ª®¤ .
; <Lrz> 21.07.2006 ¤®¡ ¢«¥­  äã­ªæ¨ï ª­®¯ª¨ Del, ⥯¥àì ¬®¦­® 㤠«ïâì ᨬ¢®«ë ¯à¨ ¯®¬®é¨ ¤ ­­®© ª« ¢¨è¨
; €¢â®à: …¢â¨å®¢ Œ ªá¨¬ (Maxxxx32) email: maxxxxm@mail.ru
; „ â  ¯®á«¥¤­¨å ¨§¬¥­¥­¨©: 13.06.06 10:40
; <EFBFBD> ¯¨è¨â¥ ¢ ¨á室­®¬ ª®¤¥ ᢮¥© ¯à®£à ¬¬ë use_edit_box,
; íâ® ¢áâ ¢¨â ­¥®¡å®¤¨¬ë¥ ¯à®æ¥¤ãàë ¢ ª®¤ ¢ è¥© ¯à®£à ¬¬ë.
; <EFBFBD>à®æ¥¤ãàë:
; edit_box.draw - ¯®«­ ï ¯¥à¥à¨á®¢ª ;
; edit_box.key - ®¡à ¡®âª  ª« ¢¨ âãàë;
; edit_box.mouse - ®¡à ¡®âª  ¬ëè¨;
; edit_box.focus - ãáâ ­®¢ª  䮪ãá ;
; edit_box.blur - ¥£® à §¬ë¢ ­¨¥;
; edit_box.get_n - ¯®«ãç¨âì ª®«¨ç¥á⢮ ¯à®à¨á®¢ë¢ ¥¬ëå ᨬ¢®«®¢.
; <EFBFBD>ਠ¢ë§®¢¥ «î¡ëå ¨§ íâ¨å ¯à®æ¥¤ãà ¢ ॣ¨áâॠedi á«¥¤ã¥â
; ®áâ ¢¨âì 㪠§ â¥«ì ­  áâàãªâãàã.
; <EFBFBD>ਬ¥à áâàãªâãàë:
; some_edit edit_box 100,10,30,0x00ffffff,0,0x00aaaaaa,0,255,some_edit_text
; ¤«¨­ , ¢ëá®â , ¢¥àå, 梥â ä®­ , 梥â à ¬ª¨, ¥á«¨ ¢ë¡à ­,
; 梥â à ¬ª¨, ¥á«¨ ­¥ ¢ë¡à ­, ¬ ªá¨¬ «ì­®¥ ª®«¨ç¥á⢮ ᨬ¢®«®¢,
; 㪠§ â¥«ì ­  ¡ãä¥à, £¤¥ ¡ã¤ãâ åà ­¨âáï ᨬ¢®«ë. <EFBFBD>ãä¥à ¤®«¦¥­
; ®ª ­ç¨¢ âìáï ­ã«¥¬, ­ ¯à¨¬¥à ¥á«¨ ¬ ªá¨¬ «ì­®¥ ª®«¨ç¥á⢮ 255:
; some_edit_text:
; rb 256 ;255+1
; <EFBFBD>ਬ¥à ¢ë§®¢  ¯à®æ¥¤ãàë:
; mov edi,some_edit
; call edit_box.draw
; <EFBFBD>ਠ¢ë§®¢¥ ¯à®æ¥¤ãàë edit_box.key ª®¤ ª« ¢¨è¨ ¤®«¦¥­
; ­ å®¤¨âáï ¢ ah, â® ¥áâì ¯¥à¥¤ ¢ë§®¢®¬ í⮩ ¯à®æ¥¤ãàë ­ ¤® ¢ë§¢ âì
; 2-ãî á¨á¥¬­ãî äã­ªæ¨î, ­ ¯à¨¬¥à:
; mov eax,2
; int 0x40
; mov edi,some_edit1
; call edit_box.key
; mov edi,some_edit2
; call edit_box.key
; <EFBFBD>¥à¥¤ ¢ë§®¢®¬ ®¡à ¡®â稪  ¬ëè¨ á«¥¤ã¥â ¯à®¢¥à¨âì, ï¥âáï «¨ ®ª­®
;  ªâ¨¢­ë¬.
; …᫨ 饫箪 ¬ëè¨ ¡ë« ¯à®©§¢¥¤¥­ §  ¯à¥¤¥« ¬¨ edit box
; 䮪ãá â¥àï¥âáï.
macro use_edit_box
{
edit_box:
ed_width equ [edi] ;è¨à¨­  ª®¬¯®­¥­â 
ed_left equ [edi+4] ;¯®«®¦¥­¨¥ ¯® ®á¨ å
ed_top equ [edi+8] ;¯®«®¦¥­¨¥ ¯® ®á¨ ã
ed_color equ [edi+12] ;梥â ä®­  ª®¬¯®­¥­â 
ed_focus_border_color equ [edi+16] ;梥â à ¬ª¨ ª®¬¯®­¥­â 
ed_blur_border_color equ [edi+20] ;梥⠭¥  ªâ¨¢­®£® ª®¬¯®­¥­â 
ed_text_color equ [edi+24] ;梥â ⥪áâ 
ed_max equ [edi+28] ;ª®«-¢® ᨬ¢®«®¢ ª®â®àë¥ ¬®¦­® ¬ ªá¨¬ «ì­® ¢¢¥áâ¨
ed_text equ [edi+32] ;㪠§ â¥«ì ­  ¡ãä¥à
ed_flags equ [edi+36] ;ä« £¨
ed_size equ [edi+38] ;ª®«-¢® ᨬ¢®«®¢
ed_pos equ [edi+42] ;¯®§¨æ¨ï ªãàá®à 
ed_offset equ [edi+46] ;ᬥ饭¨¥
cl_curs_x equ [edi+50] ;¯à¥¤ë¤ã饥 ª®®à¤¨­ â  ªãàá®à  ¯® å
cl_curs_y equ [edi+54] ;¯à¥¤ë¤ã饥 ª®®à¤¨­ â  ªãàá®à  ¯® ã
ed_shift_pos equ [edi+58]
ed_height=14 ; ¢ëá®â 
shift_color=0x6a9480
ed_insert=10000b
ed_insert_cl=1111111111101111b
;==========================================================
;=== ¯à®æ¥¤ãà  ¯à®à¨á®¢ª¨ =================================
;==========================================================
.draw:
pusha
;--- à¨á㥬 à ¬ªã ---
call .draw_border ; ”ã­ªæ¨ï áâ ¡¨«ì­ 
.draw_bg_cursor_text:
;--- ¨§¬¥­ï¥¬ ᬥ饭¨¥, ¥á«¨ ­ ¤® ---
call .check_offset ;¢ëç¨á«¥­¨¥ ¯®§¨æ¨¨ ªãàá®à  áâ ¡¨«ì­ 
;--- à¨á㥬 ¢­ãâ७­îî ®¡« áâì ---
call .draw_bg ;­ à¨á®¢ âì ¯àאַ㣮«ì­¨ª à ¡®ç¥© ®¡« áâ¨
.draw_cursor_text:
;--- à¨á㥬 ªãàá®à ---
;--- ¬®¦¥â ¥£® ­¥ ­ ¤® à¨á®¢ âì ----
test word ed_flags,ed_focus
je @f
call .draw_cursor
@@:
call .draw_text
popa
ret
;.str:
; mov ecx,0x0a ;§ ¤ ¥âáï á¨á⥬  áç¨á«¥­¨ï ¨§¬¥­ïîâáï ॣ¨áâàë ebx,eax,ecx,edx ¢å®¤­ë¥ ¯ à ¬¥âàë eax - ç¨á«®
; ;¯à¥à¥¢®¤ ç¨á«  ¢ ASCII áâப㠢§®¤­ë¥ ¤ ­­ë¥ ecx=á¨á⥬  áç¨á«¥­ï edi  ¤à¥á ªã¤  § ¯¨á뢠âì, ¡ã¤¥¬ áâபã, ¯à¨ç¥¬ ª®­¥æ ¯¥à¥¬¥­­®©
; cmp eax,ecx ;áà ¢­¨âì ¥á«¨ ¢ eax ¬¥­ìè¥ ç¥¬ ¢ ecx â® ¯¥à¥©â¨ ­  @@-1 â.¥. ­  pop eax
; jb @f
; xor edx,edx ;®ç¨áâ¨âì edx
; div ecx ;à §¤¥«¨âì - ®áâ â®ª ¢ edx
; push edx ;¯®«®¦¨âì ¢ á⥪
; ;dec edi ;ᬥ饭¨¥ ­¥®¡å®¤¨¬®¥ ¤«ï § ¯¨á¨ á ª®­æ  áâப¨
; call .str;¯¥à¥©â¨ ­  á ¬ã ᥡï â.¥. ¢ë§¢ âì á ¬ã á¥¡ï ¨ â ª ¤® ⮣® ¬®¬¥­â  ¯®ª  ¢ eax ­¥ áâ ­¥â ¬¥­ìè¥ ç¥¬ ¢ ecx
; pop eax
; @@: ;cmp al,10 ;¯à®¢¥à¨âì ­¥ ¬¥­ìè¥ «¨ §­ ç¥­¨¥ ¢ al 祬 10 (¤«ï á¨á⥬ë áç¨á«¥­ï 10 ¤ ­­ ï ª®¬ ­¤  - «¨è­ ï))
; ;sbb al,$69 ;- ç¥áâ­® ¤ ­­ ï ¨­áâàãªæ¨ï ¬¥­ï § áâ ¢«ï¥â § ¤ã¬ âìáï â.¥. ï ­¥ §­ î ª ª íâ® à ¡®â ¥â
; ;das ;¯®á«¥ ¤ ­­®© ª®¬ ­¤ë ª ª ¡ë ¯à®¨á室¨â 㬥­ì襭¨¥ al ­  66h (¢ ª­¨£¥ ­ ¯¨á ­® ¤à㣮¥)
; or al,0x30 ;¤ ­­ ï ª®¬ ­¤  ª®à®ç¥ 祬 ¤¢¥ ¢ëè¥
; stosb ;§ ¯¨á âì í«¥¬¥­â ¨§ ॣ¨áâà  al ¢ ï祪㠯 ¬ï⨠es:edi
;
; ret ;¢¥à­ãâìáï ç¥­ì ¨­â¥à¥á­ë© 室 â.ª. ¯®ª  ¢ á⥪¥ åà ­¨âìáï ª®«-¢® ¢ë§®¢®¢ â® á⮫쪮 à § ¬ë ¨ ¡ã¤¥¬ ¢ë§ë¢ âìáï
;----------------------------------------------------------
;--- ¯à®æ¥¤ãà  ¯à®à¨á®¢ª¨ ⥪áâ  --------------------------
;----------------------------------------------------------
.draw_text:
;--- ¢ëç¨á«ï¥¬, ᪮«ìª® ¯®¬¥é ¥âáï ᨬ¢®«®¢ ---
;--- çâ®¡ë ¬ãá®à ­¥ à¨á®¢ âì ---
call .get_n
mov esi,ed_size
mov ebx,ed_offset
sub esi,ebx
cmp eax,esi
jae @F
mov esi,eax ;çâ®¡ë ­¥ ¢ë室¨âì §  ¯à¥¤¥«ë íªà ­ 
;--- à¨á㥬 ⥪áâ ---
@@: mov eax,4
mov ebx,ed_left
mov edx,ed_offset
add ebx,2
shl ebx,16
mov bx,ed_top
add ebx,4
mov ecx,ed_text_color
add edx,ed_text
int 0x40
ret
;----------------------------------------------------------
;--- ¯à®æ¥¤ãà  ¯à®à¨á®¢ª¨ ä®­  ----------------------------
;¢å®¤­ë¥ ¤ ­­ë¥
;eax
;edx - color
;----------------------------------------------------------
.draw_bg_eax:
mov ecx,ed_top
add ecx,1
shl ecx,16
mov cx,13
mov eax,13
int 0x40
ret
jmp @f
.draw_bg:
mov ebx,ed_left
add ebx,1
shl ebx,16
mov bx,ed_width
sub ebx,1
@@:
mov ecx,ed_top
mov eax,13
add ecx,1
shl ecx,16
mov edx,ed_color
mov cx,ed_height
sub ecx,1
int 0x40
ret
;----------------------------------------------------------
;--- ¯à®æ¥¤ãà  ¯®«ã祭¨ï ª®«¨ç¥á⢠ ᨬ¢®«®¢ ¢ ⥪ã饩 é¨à¨­¥ ª®¬¯®­¥­â  --------------
;----------------------------------------------------------
.get_n:
mov eax,ed_width ;¯®«ã祬 è¨à¨­ã ª®¬¯®­¥­â 
xor edx,edx ;१ã«ìâ â à á¯®«®£ ¥âáï ¢ ¯ à¥ edx:eax ¢ eax - ®áâ â®ª
sub eax,4 ;¢ëç⨬ 4
mov ebx,6 ;§ £à㧬¨ ¤¥«¨â¥«ì
div ebx ;à §¬¤¥«¨¬ ­  6
ret
;----------------------------------------------------------
;--- ¯à®æ¥¤ãà  à¨á®¢ ­¨ï ªãàá®à  --------------------------
;----------------------------------------------------------
.clear_cursor:
mov edx,ed_color
test word ed_flags,ed_shift
je @f
mov edx,shift_color
@@:
mov ebx,cl_curs_x
mov ecx,cl_curs_y
jmp .draw_curs
.draw_cursor:
mov edx,ed_text_color
@@:
mov ebx,ed_pos
mov ecx,ed_offset
sub ebx,ecx
lea ebx,[ebx*2+ebx]
shl ebx,1
;imul ebx,6
add bx,ed_left
mov ecx,ed_top
inc ebx
add ecx,2
mov ebp,ebx
shl ebx,16
mov bx,bp
mov ebp,ecx
shl ecx,16
mov cx,bp
add cx,ed_height-4
mov cl_curs_x,ebx
mov cl_curs_y,ecx
.draw_curs:
mov eax,38
int 0x40
ret
;----------------------------------------------------------
;--- ¯à®æ¥¤ãà  à¨á®¢ ­¨ï à ¬ª¨ ----------------------------
;----------------------------------------------------------
.draw_border:
;--- 梥â à ¬ª¨ ---
test dword ed_flags,ed_focus
mov edx,ed_focus_border_color
jne @f
mov edx,ed_blur_border_color
@@:
;--- ᢥàåã ---
mov eax,38
mov ebx,ed_left
mov ecx,ebx
shl ebx,16
mov bx,cx
add bx,ed_width
mov ecx, ed_top
mov esi,ecx
shl ecx,16
mov cx,si
int 0x40
;--- á­¨§ã ---
mov esi,ecx
add ecx,ed_height
mov ebp,ecx
shl ecx,16
mov cx,bp
int 0x40
;--- á«¥¢  ---
mov cx,si
mov ebp,ebx
sub bx,ed_width
int 0x40
;--- á¯à ¢  ---
mov ebx,ebp
shl ebx,16
mov bx,bp
int 0x40
ret
;----------------------------------------------------------
;--- ¯à®¢¥àª , § è¥« «¨ ªãàá®à §  £à ­¨æë ¨, ¥á«¨ ­ ¤®, ---
;--- ¨§¬¥­ï¥¬ ᬥ饭¨¥ ------------------------------------
;--- eax = -1, ¥á«¨ ­¥ ¨§¬¥­¨«®áì ¨«¨ eax = 0, ¥á«¨
; ¨§¬¥­¨«®áì
;----------------------------------------------------------
.check_offset:
pushad
mov ecx,ed_pos
mov ebx,ed_offset
cmp ebx,ecx
ja .sub_8
push ebx
call .get_n ;¯®«ã稬 ª®«-¢® ᨬ¢®«®¢ ¢ ¯ à¥ ॣ¨áâ஢ edx:eax
pop ebx
mov edx,ebx
add edx,eax ;ed_offset+width editbox
cmp edx,ecx
ja @f
mov edx,ed_size
cmp edx,ecx
je .add_end
sub edx,ecx
cmp edx,8
jbe .add_8
add ebx,8
jmp .chk_d
.sub_8: cmp ecx,0
je .sub_min
cmp ebx,8
jbe .sub_min
sub ebx,8 ;ebx=ed_offset
jmp .chk_d
.sub_min:
xor ebx,ebx
jmp .chk_d
.add_end:sub edx,eax
mov ebx,edx
jmp .chk_d
.add_8: add ebx,edx
; ;----------- ®â« ¤ª 
; pushad
; mov [data_of_code],0
; mov eax,ebx;ed_offset
; mov edi,data_of_code
; call .str
; ;à¨á®¢ ­¨¥ ä®­ 
; mov eax,13
; mov ebx,178*65536+36
; mov ecx,28*65536+10
; xor edx,edx
; int 0x40
; ;¢ë¢®¤ §­ ç¥­¨ï ­  íªà ­
; mov eax,4
; mov ebx,180*65536+30
; mov ecx,0x10DDBBCC
; mov edx,data_of_code
; mov esi,4
; int 0x40
; popad
; ;----------- ®â« ¤ª 
.chk_d: mov ed_offset,ebx
call .draw_bg
mov dword [esp+28],-1
popad
ret
@@:
mov dword [esp+28],0
popad
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; mov ebx,eax
; mov eax,ed_pos
; xor edx,edx
; idiv ebx
; xor edx,edx
; imul eax,ebx
; mov ed_offset,eax
; pop ebx
; cmp ax,bx
; je @f
;;;;;;;; ¤ ­­ë¥ ¤«ï § ªà è¨¢ ­¨ï ¢á¥© ¯®«®áë ¯àאַ㣮«ì­¨ª 
; mov ebx,ed_left
; inc ebx
; shl ebx,16
; mov bx,ed_width
; dec ebx
; mov edx,ed_color
; call .draw_bg_eax
; mov dword [esp+28],0
;@@: popad
; ret
;==========================================================
;=== ®¡à ¡®âª  ª« ¢¨ âãàë =================================
;==========================================================
.key:
pusha
test word ed_flags,ed_focus ; ¥á«¨ ­¥ ¢ 䮪ãá¥, ¢ë室¨¬
je .no_figure ;@f
xor ecx,ecx
push eax
inc ecx
mov eax,66
mov ebx,3
int 0x40
test al,0x03
je @f
or word ed_flags,ed_shift
@@: pop eax
;----------------------------------------------------------
;--- ¯à®¢¥à塞, çâ® ­ ¦ â® --------------------------------
;----------------------------------------------------------
cmp ah,8
jz .backspace
cmp ah,0xb6
jz .delete
cmp ah,176
jz .left
cmp ah,179
jz .right
cmp ah,180
jz .home
cmp ah,181
jz .end
cmp ah,185 ;insert
jz .insert
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;‡ £«ã誠 ­  ®¡à ¡®âªã ª« ¢¨è ¢¢¥àå ¨ ¢­¨§
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
cmp ah,177
jz .no_figure
cmp ah,178
jz .no_figure
cmp ah,27 ;ESC - ª« ¢¨è  ))
jz .no_figure
;--- ­ ¦ â  ¤àã£ ï ª« ¢¨è  ---
test word ed_flags,ed_figure_only ; ⮫쪮 æ¨äàë ?
jz @f
cmp ah,'0'
jb .no_figure
cmp ah,'9'
ja .no_figure
;¯à®¢¥àª  ­  shift
@@: test word ed_flags,ed_shift_on
je @f
;‚室­ë¥ ¤ ­­ë¥ edx=ed_size;ecx=ed_pos
push eax
mov edx,ed_size
mov ecx,ed_pos
call .del_char
;;;;
mov eax,ed_shift_pos
mov ebx,ed_size
sub ebx,eax
mov ed_size,ebx
pop eax
; ¯à®¢¥à塞, ­ å®¤¨âáï «¨ ªãàá®à ¢ ª®­æ¥
@@: mov ecx,ed_size
mov edx, ed_max
cmp ecx,edx
jae .no_figure
mov ebx, ed_pos
cmp ebx,edx
jl @f ; ¥á«¨ ¬¥­ìè¥ ¨«¨ à ¢­®
.no_figure:
popa
ret
.insert: test word ed_flags,ed_insert ;not word ed_insert
je .insert_1
and word ed_flags,ed_insert_cl
jmp .no_figure
.insert_1:
or word ed_flags,ed_insert
jmp .no_figure
.ins_v:
dec dword [ebp+38];ed_size ;processing is insert
sub esi,ecx
add esi,ebx
mov edi,esi
jmp .In_k
@@: ; ᤢ¨£ ¥¬ ᨬ¢®«ë ¯®á«¥ ªãàá®à  ¢¯à ¢®
mov ecx,ed_size
push edi eax
mov ebp,edi
mov esi,ed_text ; “ª § â¥«ì ­  ¡ãä¥à
;<EFBFBD>㤥¬ à ¡®â âì á® áâப®©
add esi,ecx ;add ed_size ¤®¡ ¢¨¬ max size
mov edi,esi
cmp ecx,ebx ;…᫨ ã ­ á ¯®§¨æ¨ï ªãàá®à  = ⥪ã饬ã à §¬¥àã ­ ¯¥ç â ­­ëå ᨬ¢®«®¢ â.¥. ªãàá®à á⮨⠢ ª®­æ¥
je .In_k
test word [ebp+36],ed_insert ;IF insert is enable â.ª. edi ¨§¬¥­¥­  ¤à¥á㥬 ç¥à¥§ ebp
jne .ins_v
sub ecx,ebx ;<EFBFBD> ©¤¥¬ ª®«-¢® ᨬ¢®«®¢ ¤«ï ¯¥à¥¤¢¨¦¥­¨ï.
inc edi ;‘¬¥á⨬ ­ è¨ ᨬ¢®«ë ¢ ¯à ¢®
std
inc ecx
@@:
;--------
lodsb
stosb
;--------
loop @b
.In_k: cld
pop eax
mov al,ah
stosb
pop edi
; ¢áâ ¢«ï¥¬ ª®¤ ª« ¢¨è¨ â㤠, £¤¥ ªãàá®à
; 㢥«¨ç¨¢ ¥¬ §­ ç¥­¨¥ à §¬¥à  ¨ ¯®§¨æ¨¨
inc dword ed_size
inc dword ed_pos
call .draw_all2
jmp .shift;.draw_cursor_text
.delete:
mov edx,ed_size
mov ecx,ed_pos
cmp edx,ecx
jg .bac_del
test word ed_flags,ed_shift_on
jne .del_bac
popa
ret
.bac_del:
call .del_char
jmp .draw_all
;--- ­ ¦ â  ª« ¢¨è  backspace ---
.backspace:
; ¯à®¢¥à塞, ªãàá®à ã «¥¢®£® ªà ï ?
mov edx,ed_size
mov ecx,ed_pos
test ecx,ecx
jnz .del_bac
test word ed_flags,ed_shift_on
jne .bac_del
popa
ret
.del_bac:
cmp edx,ecx ;if ed_pos=ed_size
je @f
dec ecx
call .del_char
@@: test word ed_flags,ed_shift_on
jne .bac_del
dec dword ed_pos
.draw_all:
push .shift;.draw_cursor_text;eax
test word ed_flags,ed_shift_on
je @f
mov eax,ed_shift_pos
mov ebx,ed_size
sub ebx,eax
mov ed_size,ebx
jmp .draw_all2
@@: dec dword ed_size
.draw_all2:
and word ed_flags,ed_shift_cl
call .clear_cursor
call .check_offset
;;;;;;;;;;;;;;;
test eax,eax
jne @f
call .draw_bg
ret
;;;;;;;;;;;;;;;
@@: call .get_n
push eax
mov ebx,ed_offset
add eax,ebx ;eax = w_off= ed_offset+width
mov ebx,ed_size
cmp eax,ebx
jb @f
mov eax,ed_pos
sub ebx,eax
mov ecx,ed_offset
sub eax,ecx
jmp .nxt
@@: mov ebx,ed_pos
push ebx
sub eax,ebx
mov ebx,eax ;It is don't optimal
pop eax ;ed_pos
mov ecx,ed_offset
sub eax,ecx
.nxt:
mov ebp,eax ;¯à®¢¥àª  ­  ¢ë室 § ªà è¨¢ ¥¬®© ®¡« á⨠§  ¯à¥¤¥«ë ¤«¨­ë
add ebp,ebx
pop edx
cmp ebp,edx
je @f
inc ebx
@@: mov edx,ebx
lea ebx,[eax*2+eax]
shl ebx,1
add ebx,ed_left
inc ebx
shl ebx,16
lea ecx,[edx*2+edx]
shl ecx,1
mov bx,cx
mov edx,ed_color
call .draw_bg_eax
ret
; jmp .shift
;--- ­ ¦ â  ª« ¢¨è  left ---
.left: call .sh_enable
mov ebx,ed_pos
test ebx,ebx
jz .nd_k
call .clear_cursor
dec dword ed_pos
jmp .nd_k
;--- ­ ¦ â  ª« ¢¨è  right ---
.right: call .sh_enable
mov ebx,ed_pos
cmp ebx,ed_size
je .nd_k
call .clear_cursor
inc dword ed_pos
jmp .nd_k
.home: call .sh_enable
mov ebx,ed_pos
test ebx,ebx
jz .nd_k
call .clear_cursor
xor eax,eax
mov ed_pos,eax
jmp .nd_k
.end: call .sh_enable
mov ebx,ed_pos
cmp ebx,dword ed_size
je .nd_k
call .clear_cursor
mov eax,ed_size
mov ed_pos,eax
.nd_k: call .check_offset
;test eax,eax
;jz .draw_bg_cursor_text
call .draw_cursor
.shift: ;;;;;;;SHIFT
call .draw_bg ;­¥ ®¯â¨¬ «ì­®
test word ed_flags,ed_shift
je .f_exit
;;;;;;SHIFT end
mov eax,dword ed_pos
mov ebx,dword ed_shift_pos
cmp eax,ebx
jae .sh_n
push eax ;¬¥­ì襥 ¢ eax
push ebx ;¡®«ì襥
jmp .sh_n1
;¥á«¨ ¨­ ç¥
.sh_n: push ebx
push eax
.sh_n1:
; jmp .draw_all2
;;;;;;;;;;;;;;;;;;;;;;;;;
;call .clear_cursor
call .check_offset
call .get_n
mov edx,eax ;size of ed_box
; push eax
mov ecx,ed_offset
add eax,ecx ;eax = w_off= ed_offset+width
mov ebp,eax ;save
pop ebx ;¡®«ì襥
pop eax ;¬¥­ì襥
cmp eax,ecx ;áà ¢­¥­¨¥ á ¬¥­ì襣® á offset.
jae .f_f ;¥á«¨ ¡®«ìè¥
xor eax,eax
cmp ebp,ebx ; ¢­¨¬ à §¬¥à w_off á ¡®«ì訬
jb @f
sub ebx,ecx
jmp .nxt_f
@@: mov ebx,ebp
sub ebx,ecx
jmp .nxt_f
.f_f:
sub eax,ecx
cmp ebp,ebx ; ¢­¨¬ à §¬¥à w_off á ¡®«ì訬
jle @f
sub ebx,ecx
sub ebx,eax
jmp .nxt_f
@@:
mov ebx,ebp
sub ebx,ecx
sub ebx,eax
.nxt_f:
mov edx,ebx
lea ebx,[eax*2+eax]
shl ebx,1
add ebx,ed_left
inc ebx
shl ebx,16
lea ecx,[edx*2+edx]
shl ecx,1
mov bx,cx
mov edx,shift_color
call .draw_bg_eax
and word ed_flags,1111111111111011b
jmp .draw_cursor_text
;;;;;;;;;;;;;;;;;;;;;
.f_exit: and word ed_flags,ed_shift_cl
jmp .draw_cursor_text
;¯à®¢¥àª  á®áâ®ï­¨ï shift ¡ë« «¨ ®­ ­ ¦ â à ­ìè¥?
.sh_enable:
test word ed_flags,ed_shift
je @f
test word ed_flags,ed_shift_on
jne .sh_ext_en
push dword ed_pos
pop dword ed_shift_pos
or word ed_flags,ed_shift_on
ret
@@: and word ed_flags,ed_shift_cl
.sh_ext_en: ret
;- 㤠«¥­¨¥ ᨬ¢®« 
;‚室­ë¥ ¤ ­­ë¥ edx=ed_size;ecx=ed_pos
.del_char:
mov esi,ed_text
test word ed_flags,ed_shift_on
je @f
mov eax,dword ed_shift_pos
mov ebx,esi
cmp eax,ecx
jae .dh_n
mov ed_pos,eax ;çâ® ¡ë ­¥ ¡ë«® ã¡¥£ ­¨ï ªãàá®à 
mov ebp,ecx
sub ebp,eax
add ebx,eax ;eax ¬¥­ìè¥
sub edx,ecx
add esi,ecx
mov ed_shift_pos,ebp
jmp .del_ch_sh
;¥á«¨ ¨­ ç¥
.dh_n:
mov ebp,eax
sub ebp,ecx
add ebx,ecx
sub edx,eax
add esi,eax
mov ed_shift_pos,ebp
jmp .del_ch_sh
@@: add esi,ecx ;㪠§ â¥«ì + ᬥ饭¨¥ ª ॠ«ì­®¬ã ¡ãää¥àã
mov ebx,esi
inc esi
cld
sub edx,ecx
.del_ch_sh:
push edi
mov edi,ebx
@@:
lodsb
stosb
dec edx
jns @b
pop edi
ret
;==========================================================
;=== ®¡à ¡®âª  ¬ëè¨ =======================================
;==========================================================
.mouse:
pusha
;----------------------------------------------------------
;--- ¯®«ãç ¥¬ á®áâ®ï­¨¥ ª­®¯®ª ¬ëè¨ -----------------------
;----------------------------------------------------------
mov eax,37
mov ebx,2
int 0x40
;----------------------------------------------------------
;--- ¯à®¢¥à塞 á®áâ®ï­¨¥ ----------------------------------
;----------------------------------------------------------
test eax,1
jnz .mouse_left_button
@@: popa
ret
.mouse_left_button:
;----------------------------------------------------------
;--- ¯®«ãç ¥¬ ª®®à¤¨­ âë ¬ëè¨ -----------------------------
;----------------------------------------------------------
mov eax,37
xor ebx,ebx
inc ebx
int 0x40
;----------------------------------------------------------
;--- ¯à®¢¥à塞, ¯®¯ ¤ ¥â «¨ ªãàá®à ¢ edit box -------------
;----------------------------------------------------------
mov ebx,ed_top
cmp ax,bx
jl ._blur;.mouse_end_no_focus
add bx,ed_height
cmp ax,bx
jg ._blur;.mouse_end_no_focus
shr eax,16
mov bx,ed_left
cmp ax,bx
jl ._blur;.mouse_end_no_focus
add bx,ed_width
cmp ax,bx
jg ._blur;.mouse_end_no_focus
;--- ¨§¬¥­ï¥¬ ¯®§¨æ¨î ªãàá®à  ---
push eax
call .clear_cursor
pop eax
xor dx,dx
sub ax,ed_left
add ax,2
mov bx,6
div bx
add ax,ed_offset
cmp ax,ed_size
jna @f
mov ax,ed_size
@@:
mov ed_pos,ax
call .check_offset
call .draw_cursor
;----------------------------------------------------------
;--- ¯à®æ¥¤ãà  ãáâ ­®¢ª¨ 䮪ãá  ---------------------------
;----------------------------------------------------------
bts word ed_flags,1
jc .mouse_pressed
call .draw_cursor
call .draw_border
.mouse_pressed:
popa
ret
;.mouse_end_no_focus:
; call .blur
;popa
;ret
;.blur:
;pusha
._blur:
test word ed_flags,ed_always_focus
jne @f
btr word ed_flags,1 ; ¥á«¨ ­¥ ¢ 䮪ãá¥, ¢ë室¨¬
jnc @f
call .clear_cursor
call .draw_border
@@:
popa
ret
;----------------------------------------------------------
;--- ¯à®æ¥¤ãà  à §¬ë¢ ­¨ï 䮪ãá  --------------------------
;----------------------------------------------------------
;.blur:
;pusha
;._blur:
;btr ed_flags,1
;jnc @f
;call .draw_border
;call .clear_cursor
;@@:
;popa
;ret
}
ed_figure_only=1000000000000000b
ed_always_focus=100000000000000b
ed_focus=10b
ed_shift_on=1000b
ed_shift=100b
ed_shift_cl=1111111111110011b
macro draw_edit_boxes start,end
{
mov edi,start
mov ecx,((end-start)/ed_struc_size)
@@:
call edit_box.draw
add edi,ed_struc_size
loop @b
}
macro mouse_edit_boxes start,end
{
mov edi,start
mov ecx,((end-start)/ed_struc_size)
@@:
call edit_box.mouse
add edi,ed_struc_size
loop @b
}
macro key_edit_boxes start,end
{
mov edi,start
mov ecx,((end-start)/ed_struc_size)
@@:
call edit_box.key
add edi,ed_struc_size
loop @b
}
ed_struc_size=62
struc edit_box width,left,top,color,focus_border_color,\
blur_border_color,text_color,max,text,flags,size
{
.width dd width
.left dd left
.top dd top
.color dd color
.focus_border_color dd focus_border_color
.blur_border_color dd blur_border_color
.text_color dd text_color
.max dd max
.text dd text
.flags dw flags+0
.size dd size+0
.pos dd 0
.offset dd 0
.cl_curs_x dd 0
.cl_curs_y dd 0
.shift dd 0
}
macro edit_boxes_set_sys_color start,end,color_table
{
mov edi,start
mov ecx,((end-start)/ed_struc_size)
mov esi,color_table
@@:
mov eax,[esi+36]
mov ebx,[esi+20]
mov ed_focus_border_color,eax
shr bh,1
shr bl,1
shr ah,1
shr al,1
add ah,bh
add al,bl
ror eax,16
ror ebx,16
shr bl,1
shr al,1
add al,bl
ror eax,16
mov ed_blur_border_color,eax
add edi,ed_struc_size
loop @b
}
macro draw_edit_box ed_ptr
{
mov edi,ed_ptr
call edit_box.draw
}
macro mouse_edit_box ed_ptr
{
mov edi,ed_ptr
call edit_box.mouse
}
macro key_edit_box ed_ptr
{
mov edi,ed_ptr
call edit_box.key
}

View File

@ -1,212 +1,334 @@
; ;
; Save Ramdisk to HD and FD ; RDsave ¤«ï Kolibri (0.6.5.0 ¨ áâ àè¥)
;
; Mario79 2005 ; Mario79 2005
; Compile with FASM for Menuet ; Heavyiron 12.02.2007
; ;
; Š®¬¯¨«¨à®¢ âì FASM'®¬
;
;---------------------------------------------------------------------
include 'lang.inc' include 'lang.inc'
include 'macros.inc' include 'macros.inc'
appname equ 'RDsave ' appname equ 'RDsave '
version equ '1.1' version equ '1.2'
use32 ; ¢ª«îç¨âì 32-¡¨â­ë© ०¨¬  áᥬ¡«¥à 
org 0x0 ;  ¤à¥á æ¨ï á ­ã«ï
use32 db 'MENUET01' ; 8-¡ ©â­ë© ¨¤¥­â¨ä¨ª â®à MenuetOS
org 0x0 dd 0x01 ; ¢¥àá¨ï § £®«®¢ª  (¢á¥£¤  1)
dd START ;  ¤à¥á ¯¥à¢®© ª®¬ ­¤ë
dd I_END ; à §¬¥à ¯à®£à ¬¬ë
dd 0x1000 ; ª®«¨ç¥á⢮ ¯ ¬ïâ¨
dd 0x1000 ;  ¤à¥á ¢¥à設ë áâíª 
dd 0x0 ;  ¤à¥á ¡ãä¥à  ¤«ï ¯ à ¬¥â஢ (­¥ ¨á¯®«ì§ã¥âáï)
dd 0x0 ; § à¥§¥à¢¨à®¢ ­®
db 'MENUET01' ; 8 byte id include 'editbox.inc'
dd 0x01 ; header version use_edit_box
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
;---------------------------------------------------------------------
;--- <20>€—€Ž <20><>Žƒ<C5BD>€ŒŒ ----------------------------------------------
;---------------------------------------------------------------------
;****************************************************************************** START:
mov eax, 40
mov ebx, 100111b
int 0x40
red: ; ¯¥à¥à¨á®¢ âì ®ª­®
call draw_window ; ¢ë§ë¢ ¥¬ ¯à®æ¥¤ãàã ®âà¨á®¢ª¨ ®ª­ 
;---------------------------------------------------------------------
START: ; start of execution ;--- –ˆŠ‹ Ž<><C5BD><EFBFBD>ŽŠˆ Ž<E28098>ˆ‰ ----------------------------------------
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: still:
mov eax, 10 ; wait here for event push 10
pop eax
int 40h
dec eax ; ¯¥à¥à¨á®¢ âì ®ª­®?
jz red ; ¥á«¨ ¤  - ­  ¬¥âªã red
dec eax
jz key
dec eax
jz button
mouse:
mouse_edit_boxes editbox,editbox_end
jmp still
button:
mov al,17 ; ¯®«ãç¨âì ¨¤¥­â¨ä¨ª â®à ­ ¦ â®© ª­®¯ª¨
int 0x40 int 0x40
dec eax ; redraw request ? cmp ah,1 ; ª­®¯ª  á id=1("§ ªàëâì")?
je red jne noclose
; dec eax or eax,-1 ; äã­ªæ¨ï -1: § ¢¥àè¨âì ¯à®£à ¬¬ã
; dec eax ; button in buffer ?
; je button
button: ; button
mov eax,17 ; get id
int 0x40 int 0x40
noclose:
cmp ah,2 cmp ah,2
jne ah_3 jne path_2
mcall 18,6,1 call clear_err
jmp red mov al,16
ah_3: mov ebx,1
int 0x40
call check_for_error
jmp still
path_2:
cmp ah,3 cmp ah,3
jne ah_4 jne path_3
mcall 18,6,2 call clear_err
jmp red mov al,16
ah_4: mov ebx,2
int 0x40
call check_for_error
jmp still
path_3:
cmp ah,4 cmp ah,4
jne ah_5 jne path_4
mcall 18,6,3,bootpath+1 call clear_err
jmp red mov al,18
ah_5: mov ebx,6
cmp ah,5 mov ecx,path3
jne ah_6 int 0x40
mcall 16,1 call check_for_error
jmp red jmp still
ah_6: path_4:
cmp ah,6 call clear_err
jne ah_1 mov eax,18
mcall 16,2 mov ebx,6
jmp red mov ecx,path4
int 0x40
ah_1: call check_for_error
cmp ah,1
je exit
jmp still jmp still
exit: key:
or eax,-1 ; close this program mov al,2
int 0x40 int 0x40
key_edit_boxes editbox,editbox_end
jmp still
; ********************************************* check_for_error: ;Ž¡à ¡®â稪 ®è¨¡®ª
; ******* WINDOW DEFINITIONS AND DRAW ******** cmp eax,0
; ********************************************* jne err1
mov ecx,[sc.work_text]
mov edx,ok
jmp print
err1:
cmp eax,1
jne err3
mov ecx,0xdd2222
mov edx,error11
jmp print
err3:
cmp eax,3
jne err5
mov ecx,0xdd2222
mov edx,error3
jmp print
err5:
cmp eax,5
jne err8
mov ecx,0xdd2222
mov edx,error5
jmp print
err8:
cmp eax,8
jne err9
mov ecx,0xdd2222
mov edx,error8
jmp print
err9:
cmp eax,9
jne err10
mov ecx,0xdd2222
mov edx,error9
jmp print
err10:
cmp eax,10
jne err11
mov ecx,0xdd2222
mov edx,error10
jmp print
err11:
mov ecx,0xdd2222
mov edx,error11
jmp print
print:
mov eax,4 ;­ ¤¯¨á¨
mov ebx,20 shl 16 + 148
or ecx,0x80000000
int 0x40
ret
clear_err:
mov al,13
mov ebx,15 shl 16 + 240
mov ecx,145 shl 16 +15
mov edx,[sc.work]
int 0x40
ret
;---------------------------------------------------------------------
;--- Ž<><C5BD>…„…<E280B9>ˆˆ Ž<C5BD>ˆŽŠ€ ŽŠ<C5BD>€ ----------------------------------
;---------------------------------------------------------------------
draw_window: draw_window:
mov eax,48 mov eax,48
mov ebx,3 mov ebx,3
mov ecx,sc mov ecx,sc
mov edx,sizeof.system_colors mov edx,sizeof.system_colors
int 0x40 int 0x40
mov eax, 12 ; function 12:tell os about windowdraw mov eax,12 ; äã­ªæ¨ï 12: á®®¡é¨âì Ž‘ ®¡ ®âà¨á®¢ª¥ ®ª­ 
mov ebx, 1 ; 1, start of draw mov bl,1 ; 1 - ­ ç¨­ ¥¬ à¨á®¢ âì
int 0x40 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] ; ‘Ž‡„€ðŒ ŽŠ<C5BD>Ž
inc edx xor eax,eax ; äã­ªæ¨ï 0 : ®¯à¥¤¥«¨âì ¨ ®âà¨á®¢ âì ®ª­®
mcall , ,<56,17>, , mov ebx,200 shl 16 + 270 ; [x áâ àâ] *65536 + [x à §¬¥à]
inc edx mov ecx,200 shl 16 + 190 ; [y áâ àâ] *65536 + [y à §¬¥à]
mcall , ,<86,17>, , mov edx,[sc.work] ; 梥â à ¡®ç¥© ®¡« á⨠RRGGBB,8->color gl
inc edx or edx,0x33000000
mcall , ,<166,17>, , mov edi,header ; ‡€ƒŽ‹Ž‚ŽŠ ŽŠ<C5BD>
inc edx int 0x40
mcall , ,<196,17>, ,
mov ecx,[sc.work_button_text] draw_edit_boxes editbox,editbox_end ;à¨á®¢ ­¨¥ edit box'®¢
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] mov al,13 ;®âà¨á®¢ª  ⥭¥© ª­®¯®ª
or ecx,0x80000000 mov ebx,194 shl 16 + 60
mcall ,<40,31>, ,text_1, mov ecx,34 shl 16 +15
add ebx,30 mov edx,0x444444
mcall , , ,text_2, int 0x40
add ebx,30
mcall , , ,text_3,
mcall ,<15,115>, ,text_4,
mcall ,<35,125>, ,text_5,
mcall ,<35,41>, ,text_6, add ecx,20 shl 16
mcall ,<35,101>, ,text_6, int 0x40
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 add ecx,20 shl 16
mov ebx,2 ; 2, end of draw int 0x40
int 0x40
ret add ecx,40 shl 16
int 0x40
mov eax,8 ;®âà¨á®¢ª  ª­®¯®ª
sub ebx,4 shl 16
sub ecx,4 shl 16
mov edx,5
mov esi,[sc.work_button]
int 0x40
sub ecx,40 shl 16
dec edx
int 0x40
sub ecx,20 shl 16
dec edx
int 0x40
sub ecx,20 shl 16
dec edx
int 0x40
mov al,4 ;­ ¤¯¨á¨
mov ebx,45 shl 16 + 12
mov ecx,[sc.work_text]
or ecx,0x80000000
mov edx,label1
int 0x40
mov ebx,150 shl 16 + 35
mov edx,path1
int 0x40
add ebx,20
mov edx,path2
int 0x40
mov ebx,75 shl 16 + 75
mov edx,path3
int 0x40
mov ebx,30 shl 16 + 97
mov edx,label2
int 0x40
mov ebx,40 shl 16 + 135
mov edx,label3
int 0x40
mov ecx,[sc.work_button_text]
or ecx,0x80000000
mov ebx,195 shl 16 + 35
mov edx,save
int 0x40
add ebx,20
int 0x40
add ebx,20
int 0x40
add ebx,40
int 0x40
mov al,12 ; äã­ªæ¨ï 12: á®®¡é¨âì Ž‘ ®¡ ®âà¨á®¢ª¥ ®ª­ 
mov ebx,2 ; 2, § ª®­ç¨«¨ à¨á®¢ âì
int 0x40
ret ; ¢ë室¨¬ ¨§ ¯à®æ¥¤ãàë
header db appname,version,0 ;---------------------------------------------------------------------
;--- „€<E2809E><E282AC><20><>Žƒ<C5BD>€ŒŒ ----------------------------------------------
;---------------------------------------------------------------------
text_123 db '12345' header db appname,version,0
editbox:
edit1 edit_box 170,10,113,0xffffff,0,0,0,1024,path4,ed_focus
editbox_end:
path1 db '/fd/1/',0
path2 db '/fd/2/',0
path3 db '/hd0/1/kolibri.img',0
if lang eq ru if lang eq ru
save db '‘®åà ­¨âì',0
text_1 db ' ¯ ¯ªã :\KOLIBRI',0 label1 db '‚ë¡¥à¨â¥ ®¤¨­ ¨§ ¢ à¨ ­â®¢:',0
text_2 db ' ª®à¥­ì ¤¨áª  ',0 label2 db 'ˆ«¨ ¢¢¥¤¨â¥ ¯®«­ë© ¯ãâì ª ä ©«ã:',0
text_3 db '<27>ãâì ¢ ä ©«¥ RD2HD.TXT',0 label3 db '‚ᥠ¯ ¯ª¨ ¤®«¦­ë áãé¥á⢮¢ âì',0
text_4 db '¯.3 ¤«ï १¥à¢­®£® á®åà ­¥­¨ï',0 ok db 'RAM-¤¨áª á®åà ­¥­ ãᯥ譮',0
text_5 db 'â.ª. ¢ ï¤à¥ ¥£® ­¥â.',0 error3 db '<27>¥¨§¢¥áâ­ ï ä ©«®¢ ï á¨á⥬ ',0
text_6 db '(¯ ¯ª  ¤®«¦­  ¯à¨áãâá⢮¢ âì)',0 error5 db '<27>¥áãé¥áâ¢ãî騩 ¯ãâì',0
text_7 db '<27>  /FD/1',0 error8 db '<27>¥â ¬¥áâ  ­  ¤¨áª¥',0
text_8 db '<27>  /FD/2',0 error9 db '’ ¡«¨æ  FAT à §àã襭 ',0
text_9 db '‘®åà ­¥­¨¥ ­  ¦¥á⪨© ¤¨áª:',0 error10 db '„®áâ㯠§ ¯à¥é¥­',0
text_10 db '‘®åà ­¥­¨¥ ­  ¤¨áª¥âã:',0 error11 db 'Žè¨¡ª  ãáâனá⢠',0
else else
save db ' Save',0
text_1 db 'To the folder C:\KOLIBRI',0 label1 db 'Select one of the variants:',0
text_2 db 'To the root of C',0 label2 db ' Or enter full path to file:',0
text_3 db 'To path in the file RD2HD.TXT',0 label3 db ' All folders must exist',0
text_4 db 'p.3 for backup, as the kernel',0 ok db 'RAM-drive was saved successfully',0
text_5 db 'can not boot from there.',0 error3 db 'Unknown file system',0
text_6 db '(folder must exist)',0 error5 db 'Incorrect path',0
text_7 db 'To /FD/1',0 error8 db 'Disk is full',0
text_8 db 'To /FD/2',0 error9 db 'FAT table corrupted',0
text_9 db 'Save to hard disk:',0 error10 db 'Access denied',0
text_10 db 'Save to floppy:',0 error11 db 'Device error',0
end if end if
filename db 'RD2HD TXT' ;---------------------------------------------------------------------
I_END:
sc system_colors I_END: ; ¬¥âª  ª®­æ  ¯à®£à ¬¬ë
bootpath:
sc system_colors
path4 rb 1025;1024+1