*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 @@
iglobal
saverd_fileinfo:
dd 2 ; subfunction: write
dd 0 ; (reserved)
dd 0 ; (reserved)
dd 1440*1024 ; size 1440 Kb
dd 0x100000 - std_application_base_address ; base address
db 0
.name:
dd ?
endg
sysfn_saveramdisk: ; 18.6 = SAVE FLOPPY IMAGE (HD version only) sysfn_saveramdisk: ; 18.6 = SAVE FLOPPY IMAGE (HD version only)
cmp ebx,1 call restorefatchain
jnz img_save_hd_1 mov eax, saverd_fileinfo - std_application_base_address
mov edx,bootpath ; path = '/KOLIBRI ' mov [saverd_fileinfo.name], ebx
jmp img_save_hd_3 pushad
img_save_hd_1: push eax
cmp ebx,2 call file_system_lfn
jnz img_save_hd_2 pop eax
mov edx,bootpath2 ; path = 0 (root dir) popad
jmp img_save_hd_3 mov [esp+36], eax
img_save_hd_2:
cmp ebx,3
jnz exit_for_anyone
mov edx,[0x3010]
mov edx,[edx+TASKDATA.mem_start]
add edx,ecx
img_save_hd_3:
call reserve_hd1
call reserve_hd_channel
call restorefatchain ; restore FAT !!!
mov eax,image_save
mov ebx,1440*1024 ; size 1440 Kb
mov ecx,0x100000 ; address of image
call file_write
call free_hd_channel
mov [esp+36],eax
ret 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,109 +1,182 @@
; ;
; 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 use32 ; ¢ª«îç¨âì 32-¡¨â­ë© ०¨¬  áᥬ¡«¥à 
org 0x0 org 0x0 ;  ¤à¥á æ¨ï á ­ã«ï
db 'MENUET01' ; 8 byte id db 'MENUET01' ; 8-¡ ©â­ë© ¨¤¥­â¨ä¨ª â®à MenuetOS
dd 0x01 ; header version dd 0x01 ; ¢¥àá¨ï § £®«®¢ª  (¢á¥£¤  1)
dd START ; start of code dd START ;  ¤à¥á ¯¥à¢®© ª®¬ ­¤ë
dd I_END ; size of image dd I_END ; à §¬¥à ¯à®£à ¬¬ë
dd 0x1000 ; memory for app dd 0x1000 ; ª®«¨ç¥á⢮ ¯ ¬ïâ¨
dd 0x1000 ; esp dd 0x1000 ;  ¤à¥á ¢¥à設ë áâíª 
dd 0x0 , 0x0 ; I_Param , I_Icon dd 0x0 ;  ¤à¥á ¡ãä¥à  ¤«ï ¯ à ¬¥â஢ (­¥ ¨á¯®«ì§ã¥âáï)
dd 0x0 ; § à¥§¥à¢¨à®¢ ­®
include 'editbox.inc'
use_edit_box
;****************************************************************************** ;---------------------------------------------------------------------
;--- <20>€—€Ž <20><>Žƒ<C5BD>€ŒŒ ----------------------------------------------
;---------------------------------------------------------------------
START:
START: ; start of execution mov eax, 40
xor eax,eax mov ebx, 100111b
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 int 0x40
red: ; ¯¥à¥à¨á®¢ âì ®ª­®
call draw_window ; ¢ë§ë¢ ¥¬ ¯à®æ¥¤ãàã ®âà¨á®¢ª¨ ®ª­ 
red: ;---------------------------------------------------------------------
call draw_window ;--- –ˆŠ‹ Ž<><C5BD><EFBFBD>ŽŠˆ Ž<E28098>ˆ‰ ----------------------------------------
;---------------------------------------------------------------------
still: still:
mov eax, 10 ; wait here for event push 10
int 0x40 pop eax
int 40h
dec eax ; redraw request ? dec eax ; ¯¥à¥à¨á®¢ âì ®ª­®?
je red jz red ; ¥á«¨ ¤  - ­  ¬¥âªã red
; dec eax dec eax
; dec eax ; button in buffer ? jz key
; je button dec eax
jz button
mouse:
button: ; button mouse_edit_boxes editbox,editbox_end
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 jmp still
exit: button:
or eax,-1 ; close this program mov al,17 ; ¯®«ãç¨âì ¨¤¥­â¨ä¨ª â®à ­ ¦ â®© ª­®¯ª¨
int 0x40 int 0x40
cmp ah,1 ; ª­®¯ª  á id=1("§ ªàëâì")?
jne noclose
or eax,-1 ; äã­ªæ¨ï -1: § ¢¥àè¨âì ¯à®£à ¬¬ã
int 0x40
; ********************************************* noclose:
; ******* WINDOW DEFINITIONS AND DRAW ******** cmp ah,2
; ********************************************* jne path_2
call clear_err
mov al,16
mov ebx,1
int 0x40
call check_for_error
jmp still
path_2:
cmp ah,3
jne path_3
call clear_err
mov al,16
mov ebx,2
int 0x40
call check_for_error
jmp still
path_3:
cmp ah,4
jne path_4
call clear_err
mov al,18
mov ebx,6
mov ecx,path3
int 0x40
call check_for_error
jmp still
path_4:
call clear_err
mov eax,18
mov ebx,6
mov ecx,path4
int 0x40
call check_for_error
jmp still
key:
mov al,2
int 0x40
key_edit_boxes editbox,editbox_end
jmp still
check_for_error: ;Ž¡à ¡®â稪 ®è¨¡®ª
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:
@ -113,100 +186,149 @@ draw_window:
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 ; ‘Ž‡„€ðŒ ŽŠ<C5BD>Ž
mov ebx, 200*65536+230 ; [x start] *65536 + [x size] xor eax,eax ; äã­ªæ¨ï 0 : ®¯à¥¤¥«¨âì ¨ ®âà¨á®¢ âì ®ª­®
mov ecx, 200*65536+260 ; [y start] *65536 + [y size] mov ebx,200 shl 16 + 270 ; [x áâ àâ] *65536 + [x à §¬¥à]
mov edx, [sc.work] ; color of work area RRGGBB,8->color gl mov ecx,200 shl 16 + 190 ; [y áâ àâ] *65536 + [y à §¬¥à]
mov edx,[sc.work] ; 梥â à ¡®ç¥© ®¡« á⨠RRGGBB,8->color gl
or edx,0x33000000 or edx,0x33000000
mov edi,header ; WINDOW LABEL mov edi,header ; ‡€ƒŽ‹Ž‚ŽŠ ŽŠ<C5BD>
int 0x40 int 0x40
mcall 8,<11,17>,<26,17>,2,[sc.work_button] draw_edit_boxes editbox,editbox_end ;à¨á®¢ ­¨¥ edit box'®¢
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] mov al,13 ;®âà¨á®¢ª  ⥭¥© ª­®¯®ª
or ecx,0x10000000 mov ebx,194 shl 16 + 60
mcall 4,<17,31>, ,text_123,1 mov ecx,34 shl 16 +15
add ebx,30 mov edx,0x444444
add edx,1 int 0x40
mcall
add ebx,30
add edx,1
mcall
add ebx,80
add edx,1
mcall
add ebx,30
add edx,1
mcall
add ecx,20 shl 16
int 0x40
add ecx,20 shl 16
int 0x40
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] mov ecx,[sc.work_text]
or ecx,0x80000000 or ecx,0x80000000
mcall ,<40,31>, ,text_1, mov edx,label1
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 int 0x40
ret
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 ; ¢ë室¨¬ ¨§ ¯à®æ¥¤ãàë
;---------------------------------------------------------------------
;--- „€<E2809E><E282AC><20><>Žƒ<C5BD>€ŒŒ ----------------------------------------------
;---------------------------------------------------------------------
header db appname,version,0 header db appname,version,0
text_123 db '12345' 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:
I_END: ; ¬¥âª  ª®­æ  ¯à®£à ¬¬ë
sc system_colors sc system_colors
bootpath: path4 rb 1025;1024+1