0,0 → 1,1375 |
;constants |
;for keys |
KEY_ESC equ 27 |
KEY_PGDN equ 183 |
KEY_PGUP equ 184 |
KEY_LNDN equ 177 |
KEY_LNUP equ 178 |
KEY_RIGHT equ 179 |
KEY_LEFT equ 176 |
KEY_HOME equ 180 |
KEY_END equ 181 |
KEY_HOMETOP equ 251 ;Ctrl + '[' |
KEY_ENDBOTTOM equ 253 ;Ctrl + ']' |
|
use32 |
org 0x0 |
db 'MENUET01' ; 8 byte id |
dd 0x01 ; header version |
dd START ; start of code |
dd I_END ; size of image |
dd 0x80000 ; memory for app |
dd 0x80000 ; esp |
dd 0x0 , 0x0 ; I_Param , I_Icon |
|
include 'lang.inc' |
include 'macros.inc' |
|
|
START: ; start of execution |
|
mov eax,40 |
mov ebx,100111b ;event mouse |
int 0x40 |
mov dword [process_info+42],540 |
mov dword [process_info+46],414 |
call draw_window |
|
still: |
mov eax,10 ; wait here for event |
int 0x40 |
dec al ; redraw request ? |
je red |
dec al ; key in buffer ? |
je key |
dec al ; button in buffer ? |
je button |
; mouse event received |
mouse: |
mov eax,37 |
mov ebx,2 |
int 0x40 |
or eax,eax |
jz still |
cmp [menu_opened],1 |
jne still |
mov [menu_opened],0 |
|
red: ; redraw |
call redraw_window |
jmp still |
|
key: ; key |
mov eax,2 |
int 0x40 |
; test al,al |
; jnz still |
cmp ah,KEY_ESC |
jz close |
mov al,[o_s_flag] |
and al,8 ;set bit 3? |
jz edit_keys ;not - no output to filename area |
cmp ah,8 ;BACKSPACE |
jnz no_backspace |
dec [name_l] |
cmp [name_l],0 |
mov edx,filename |
je A1 |
jg @f |
mov [name_l],0 |
jmp A1 |
@@: |
add dl,[name_l] |
A1: |
sub [x_cursor],0x60000 |
mov [edx],byte 0 |
cmp [x_cursor],0xb0005 |
jge @f |
mov [x_cursor],0xb0005 |
@@: |
call redraw_window |
jmp still ;END BACKSPACE |
|
no_backspace: |
cmp ah,0x30 ;'0' |
jl A2 |
cmp ah,0x39 ;'9' |
jle bigsym |
cmp ah,65 ;'A' |
jbe bigsym |
cmp ah,90 ;'Z' |
jle bigsym |
cmp ah,97 ;'a' |
jbe smsym |
cmp ah,122;'z' |
jle smsym |
jmp still |
A2: |
cmp ah,46 ;'.' |
jz bigsym |
cmp ah,0x20 |
jz bigsym |
jmp still |
smsym: |
sub ah,32 |
bigsym: |
cmp [name_l],13 ;yes. filename length <13 |
jl @f |
sub [o_s_flag],8 ;not - disable output to filename area |
mov [x_cursor],0x680005; - set x-base & x-size |
jmp _end_keys |
@@: |
mov edx,filename ; |
add dl,[name_l] |
mov [edx],ah |
inc [name_l] |
add [x_cursor],0x60000 |
_end_keys: |
call redraw_window |
jmp still |
edit_keys: |
cmp ah,KEY_PGDN |
jnz @f |
call PgDn |
jmp still |
@@: |
cmp ah,KEY_PGUP |
jnz @f |
call PgUp |
jmp still |
@@: |
cmp ah,KEY_HOME ;Home |
jnz @f |
call Home |
jmp still |
@@: |
cmp ah,KEY_END ;Home |
jnz @f |
call _End |
jmp still |
@@: |
cmp ah,KEY_HOMETOP |
jnz @f |
call CtrlHome |
jmp still |
@@: |
cmp ah,KEY_ENDBOTTOM |
jnz @f |
call CtrlEnd |
jmp still |
@@: |
cmp ah,KEY_LNDN |
jnz @f |
call LnDn |
jmp still |
@@: |
cmp ah,KEY_LNUP |
jnz @f |
call LnUp |
jmp still |
@@: |
cmp ah,KEY_RIGHT ;Right |
jnz @f |
call Right |
jmp still |
@@: |
cmp ah,KEY_LEFT ;Left |
jnz @f |
call Left |
@@: |
;। ªâ¨à®¢ ¨¥ áâப¨ ¢ hex-¯à¥¤áâ ¢«¥¨¨ |
mov esi,[current] |
mov bl,[posx] |
add esi,0x10000 ;0x80000 |
cmp ah,0x30 |
jl still ;ah<'0' |
cmp ah,0x39 |
jle A23 ;ah='0'...'9' - ¯¥à¥¢®¤ ¨§ ᨬ¢®«®¢ ¢ hex |
;¯à®¢¥àª ª®¤ë áâ àè¨å hex-æ¨äà |
cmp ah,0x61 ;ah<'a' |
jl A27 ;¬®¦¥â ¡ëâì ¢¢®¤ïâáï ¡®«ì訥 ¡ãª¢ë? |
cmp ah,0x66 ;ah>'f' |
jg still |
sub ah,0x20 ;ª®¢¥àâ¨à㥬 ¢ ¡®«ì訥 ¡ãª¢ë |
jmp A24 |
A27: |
cmp ah,0x41 |
jl still ;ah<'A' |
cmp ah,0x46 |
jg still ;ah>'F' |
A24: |
add ah,9 |
A23: |
mov dl,[esi];®à¨£¨ «ìë© ¡ ©â |
and bl,1 ;¥á«¨ ¥ç¥â - । ªâ¨àã¥âáï ¬« ¤è¨© ¯®«ã¡ ©â, ç¥â - áâ à訩 |
jz hi_half_byte |
;¬« ¤è¨© ¯®«ã¡ ©â |
and ah,0x0f ;®¡ã«ï¥¬ áâ à訩 ¯®«ã¡ ©â ¢¢¥¤¥®© æ¨äàë |
;¥á«¨ ah = 0x30...0x39, â® ¢á¥ ®à¬ «ì® |
;¥á«¨ ah = 0x41...0x46, â® ¬¥âª¥ 24 ¯®«ã稬 |
;ah = 0x4A...0x4F ¨ ⮦¥ ¢á¥ ®à¬ «ì® |
and dl,0xf0 ;®¡ã«ï¥¬ ¬« ¤è¨© ¯®«ã¡ ©â 㠮ਣ¨ «ì®£® ¡ ©â |
jmp patch_byte |
hi_half_byte: |
;áâ à訩 ¯®«ã¡ ©â |
shl ah,4 ;®¤®¢à¥¬¥® ᤢ¨£ ¥¬ 㦮¥ § 票¥ ¢ áâ à訩 ¯®«ã¡ ©â |
;¨ ®¡ã«ï¥¬ ¬« ¤è¨© |
and dl,0x0f ;®¡ã«ï¥¬ áâ à訩 ¯®«ã¡ ©â 㠮ਣ¨ «ì®£® ¡ ©â |
patch_byte: |
or ah,dl ;®¡ê¥¤¨ï¥¬ ¯®«ã¡ ©âë |
mov [esi],ah;¯ â稬 ¢ ¯ ¬ï⨠|
mov ebx,0x20100 |
movzx ecx,ah ;¤«ï äãªæ¨¨ ¢ë¢®¤ ç¨á« |
;⥯¥àì ¤® à áç¨â âì ª®®à¤¨ âë ¢ë¢®¤ ¤«ï ç¨á« |
;edx = x shl 16 + y |
mov edx,[x_cursor] |
mov edi,[y_cursor] |
and edx,0xffff0000 |
shr edi,0x10 |
xor esi,esi |
or edx,edi |
mov eax,47 |
add edx,8 |
int 0x40 |
call redraw_window |
jmp still |
|
button: ; button |
mov eax,17 ; get id |
int 0x40 |
dec ah ;close programm button |
jne @f |
close: |
mov eax,-1 ; close this program |
int 0x40 |
@@: |
dec ah |
jne @f |
call redraw_window |
call menufile |
jmp still |
@@: |
dec ah ;menu 'coding' button |
jne @f |
call redraw_window |
call menucoding |
jmp still |
@@: |
dec ah ;menu 'Help' button |
jne @f |
call redraw_window |
call menuhelp |
jmp still |
@@: |
;now processed low_level menu buttons |
;id m_open = 5 |
;id m_save = 6 |
;id m_exit = 7 |
;id m_win2dos 8 |
;id m_win2koi 9 |
;id m_win2iso 10 |
;id m_dos2win 11 |
;id m_dos2koi 12 |
;id m_dos2iso 13 |
;id m_help 14 |
;id m_about 15 |
dec ah ;open? |
jne @f |
cmp [o_s_flag],0 ;disable 'Open' if flag !=0 |
jnz no_open |
; call redraw_window |
mov [color],0x0072b9fc |
call f2 ;set x_cursor & y_cursor for input filename |
mov [o_s_flag],8 ;for output to filename area |
no_open: |
call redraw_window |
jmp still |
@@: |
dec ah ;save? |
jne @f |
cmp [o_s_flag],1 ;enable save if flag = 1 |
jnz no_save |
movzx ecx,[name_l] ;begin clear filename string |
mov edi,filename |
xor al,al |
jecxz no_clear |
clear: |
mov [edi+ecx],al |
loop clear |
mov [name_l],al ;set filename length = 0 |
no_clear: ;ebd clear |
call f2 ;set x_cursor & y_cursor for input filename |
mov [o_s_flag],9 ;for output to filename area |
no_save: |
call redraw_window |
jmp still |
@@: |
dec ah ;exit? |
jne @f |
jmp close |
@@: |
dec ah ;m_win2dos? |
jne @f |
push dword WIN_TABLE |
push dword DOS_TABLE |
call coding |
call redraw_window |
jmp still |
@@: |
dec ah ;m_win2koi? |
jne @f |
push WIN_TABLE |
push KOI_TABLE |
call coding |
call redraw_window |
jmp still |
@@: |
dec ah ;m_win2iso? |
jne @f |
push WIN_TABLE |
push ISO_TABLE |
call coding |
call redraw_window |
jmp still |
@@: |
dec ah ;m_dos2win? |
jne @f |
push DOS_TABLE |
push WIN_TABLE |
call coding |
call redraw_window |
jmp still |
@@: |
dec ah ;m_dos2koi? |
jne @f |
push DOS_TABLE |
push KOI_TABLE |
call coding |
call redraw_window |
jmp still |
@@: |
dec ah ;dos2iso? |
jne @f |
push DOS_TABLE |
push ISO_TABLE |
call coding |
call redraw_window |
jmp still |
@@: |
dec ah ;m_help? |
jne @f |
;create new thread for output help info |
;parameter: address for entry_point thread |
push help_thread |
call create_process |
call redraw_window |
jmp still |
@@: |
dec ah ;m_about? |
jne @f |
;create new thread for output about info |
;parameter: address for entry_point thread |
push about_thread |
call create_process |
call redraw_window |
jmp still |
@@: |
;button 'Go' |
and [o_s_flag],1 |
jnz _savefile |
;open file |
mov eax,6 |
mov ebx,filename |
xor ecx,ecx |
or edx,-1 |
mov esi,0x10000 |
int 0x40 |
inc [o_s_flag] |
mov [sizefile],eax |
jmp end_Go |
_savefile: |
;save file |
mov ebx,filename |
mov ecx,0x10000 |
mov edx,[sizefile] |
xor esi,esi |
dec edx |
mov eax,33 |
int 0x40 |
end_Go: |
call CtrlHome |
jmp still |
|
Right: |
pushad |
mov al,[posx] |
inc al |
cmp al,0x20 |
jl @f |
mov [posx],0 |
mov [x_cursor],0x680005 |
mov [text_cursor],0x01200000 |
sub [current],0xf ;because [current] add 0x10 in LnDn |
call LnDn |
popad |
ret |
@@: |
mov [posx],al |
and al,1 |
jnz @f ;not increment [current] |
;increment |
add [x_cursor],0xa0000 |
sub [text_cursor],0x40000 |
inc [current] |
jmp end_r |
@@: |
add [x_cursor],0x60000 |
sub [text_cursor],0x60000 |
end_r: |
call redraw_window |
popad |
ret |
|
Left: |
pushad |
mov al,[posx] |
dec al |
jge @f |
mov [posx],0x1f |
mov [x_cursor],0x015e0005 |
mov [text_cursor],0x00840000 |
add [current],0x0f |
call LnUp |
popad |
ret |
@@: |
mov [posx],al |
and al,1 |
jnz @f ;decrement [current] |
;not decrement |
sub [x_cursor],0x60000 |
add [text_cursor],0x60000 |
jmp end_l |
@@: |
cmp [current],0 |
jle end_l |
sub [x_cursor],0xa0000 |
add [text_cursor],0x40000 |
dec [current] |
end_l: |
call redraw_window |
popad |
ret |
|
LnDn: |
pushad |
add [current],0x10 |
movzx ecx,[lines] |
cmp cl,[posy] |
jl @f ;when counter strings >= number strings in window |
add [y_cursor],0xa0000 |
inc [posy] |
call redraw_window |
popad |
ret |
@@: |
mov eax,0x10 |
xor edx,edx |
imul ecx |
sub eax,0x10 |
sub [end_str],eax |
; mov eax,[sizefile] |
; add eax,0x80000 |
; cmp eax,[end_str] |
; jge @f |
; mov [end_str],eax |
; @@: |
call draw_window |
popad |
ret |
|
LnUp: |
pushad |
sub [current],0x10 |
cmp [current],0 |
jge @f |
mov [current],0 |
@@: |
cmp [posy],3 |
jle @f ;when counter strings < number top string |
sub [y_cursor],0xa0000 |
dec [posy] |
call redraw_window |
popad |
ret |
@@: |
; movzx ecx,[lines] |
; mov eax,0x10 |
; xor edx,edx |
; imul ecx |
; add eax,0x10 |
sub [end_str],0x10 |
cmp [end_str],0x10000 |
jge @f |
mov [end_str],0x10000 |
@@: |
call redraw_window |
popad |
ret |
|
CtrlEnd: |
pushad |
popad |
ret |
|
CtrlHome: |
pushad |
mov [x_cursor],0x00680005 ;ãáâ ¢«¨¢ îâáï § 票ï, ª ª ¯à¨ ®âªàë⨨ |
mov [y_cursor],0x00280008 |
mov [text_cursor],0x01200000 |
mov [posx],0 |
mov [posy],3 |
call b_in_screen |
mov [end_str],0x10000 |
mov [current],0 |
call redraw_window |
popad |
ret |
|
_End: |
pushad |
mov [x_cursor],0x015e0005 |
mov [posx],0x1f |
mov [text_cursor],0x00840000 |
or [current],0xf |
call b_in_screen |
call redraw_window |
popad |
ret |
|
Home: |
pushad |
mov [x_cursor],0x00680005 ;ãáâ ¢«¨¢ îâáï § ç¥¨ï ¤«ï ç « áâப¨ |
mov [posx],0 |
mov [text_cursor],0x01200000 |
and [current],0xfffffff0 |
call b_in_screen |
call redraw_window |
popad |
ret |
|
PgDn: |
pushad |
xor edx,edx |
movzx ecx,[lines] |
mov eax,0x10 |
imul ecx |
add [current],eax |
add [end_str],eax |
call redraw_window |
popad |
ret |
|
PgUp: |
pushad |
xor edx,edx |
movzx ecx,[lines] |
mov eax,0x10 |
imul ecx |
sub [current],eax |
cmp [current],0 |
jge @f |
mov [current],0 |
@@: |
sub [end_str],eax |
cmp [end_str],0x10000 |
jge @f |
; call CtrlHome |
mov [end_str],0x10000 |
@@: |
call redraw_window |
popad |
ret |
|
b_in_screen: |
pushad |
call get_process_info |
mov eax,[process_info+0x2e] |
mov ebx,0x0a |
sub eax,0x3c |
cmp eax,0x10 ;now |
jg @f ;now |
mov [lines],0 ;now |
jmp C1 ;now |
@@: |
xor edx,edx |
div ebx |
mov [lines],al |
C1: |
popad |
ret |
|
|
|
output_screen: |
pushad |
movzx ecx,[lines] |
jecxz no_out ;now |
cmp [rflag],1 |
jz _redraw |
mov eax,[end_str] |
sub eax,0x80001 |
cmp eax,[sizefile] |
jl @f |
_redraw: |
xor edx,edx |
mov eax,0x10 |
imul ecx |
sub [end_str],eax |
cmp [end_str],0x10000 |
jge A3 |
mov [end_str],0x10000 |
A3: |
mov [rflag],0 |
@@: |
mov eax,0x28 |
@@: |
push ecx |
push eax |
call form_str |
mov ebx,0x01880000 |
add ebx,eax |
mov ecx,0x00ffffff |
add eax,10 |
mov edx,[end_str] |
push eax |
sub edx,0x10 |
mov esi,0x10 |
mov eax,4 |
int 0x40 |
pop eax |
pop ecx |
loop @b |
no_out: |
popad |
ret |
|
|
|
form_str: |
pushad |
mov ebp,[end_str] ;¯®á«¥¤¨© ¢ë¢¥¤¥ë© ¡ ©â |
xor edi,edi ;áç¥â稪 ¡ ©â <= 16 |
;¢ë¢¥á⨠¤à¥á |
mov ecx,ebp |
mov ebx,0x80100 ;8 æ¨äà, 16-à¨çë¥, ç¨á«® ¢ ecx |
sub ecx,0x10000 ;®à¬ «¨§ æ¨ï ¤à¥á |
mov edx,0x80000 ; ç «® ¯® |
add edx,[esp+0x24] ; ç «® ¯® |
mov esi,0x00ffffff ;梥â |
mov eax,47 ;¢ë¢¥á⨠ç¨á«® |
int 0x40 |
add edx,0x600000 ;0x40 - 8chars + 0x20 - space |
mov ebx,0x20100 ;2 æ¨äàë, 16-à¨çë¥, ç¨á«® ¢ ecx |
@@: |
mov ecx,[ebp+edi] ;ç¨á«® ¢ ecx |
inc edi |
and ecx,0xff |
cmp edi,0x11 |
jz endstr |
int 0x40 |
add edx,0x100000 |
jmp @b |
endstr: |
dec edi |
add ebp,edi |
mov [end_str],ebp |
popad |
ret 4 |
|
|
|
draw_cursor: |
pushad |
mov ebx,[x_cursor] |
mov ecx,[esp+0x24] |
mov edx,[color] |
mov eax,13 |
int 0x40 |
movzx edi,[o_s_flag] |
and edi,8 |
jnz @f |
add ebx,[text_cursor] |
int 0x40 |
@@: |
popad |
ret 4 |
|
f2: |
mov eax,[process_info+46] |
mov [x_cursor],0xb0005 |
sub eax,0x11 |
; mov [text_cursor],-1 |
shl eax,0x10 |
|
mov [y_filename_area],eax |
ret |
|
menufile: |
mov [menu_opened],1 |
mov ebx,[xf_menu];x-base+x_size for hi-level menu button |
mov edx,5;first id button for this group |
mov edi,3;counter buttons |
call f1 |
;output text for menu |
shr ecx,0x10 ;y-base button |
and ebx,0xffff0000 |
add ecx,0x6000f ;for y-base text |
mov esi,4 ;length text |
add ebx,ecx ;full base text |
mov edx,m_open |
mov ecx,[sc.work_button_text] |
or ecx,0x10000000 |
sub eax,4 |
int 0x40 |
add ebx,0x0c ;next full base text |
add edx,4 ;next string |
int 0x40 |
add ebx,0x0c |
add edx,4 |
int 0x40 |
ret |
|
menucoding: |
mov [menu_opened],1 |
mov ebx,[xe_menu] |
mov edx,8 ;first id |
mov edi,6 ;counter |
add ebx,0x10 ;add width buttons |
push edi |
call f1 |
pop edi |
shr ecx,0x10 |
and ebx,0xffff0000 |
add ecx,0x8000f |
mov esi,8 ;length text |
add ebx,ecx |
mov edx,m_win2dos |
mov ecx,[sc.work_button_text] |
or ecx,0x10000000 |
sub eax,4 |
@@: |
int 0x40 |
add ebx,0x0c |
add edx,8 ;next string |
dec edi |
jnz @b |
ret |
|
menuhelp: |
mov [menu_opened],1 |
mov ebx,[xh_menu] |
mov edx,14 ;first id |
add ebx,6 ;add width buttons |
mov edi,2 ;counter |
call f1 |
shr ecx,0x10 |
and ebx,0xffff0000 |
add ecx,0x8000f |
mov esi,4 ;length text |
add ebx,ecx |
mov edx,m_help |
mov ecx,[sc.work_button_text] |
or ecx,0x10000000 |
sub eax,4 |
int 0x40 |
add ebx,0x0c |
inc esi ;add lebgth output text |
add edx,4 |
int 0x40 |
ret |
|
f1:;uses for drawing low-level menu buttons |
;counter buttons get into |
;menufile,menucoding,menuhelp funcs. |
mov ecx,[y_menu] ;y-base+y_size for hi-level menu button |
mov esi,[sc.work_button] ;color buttons |
mov eax,8 |
push ecx ;for output text |
@@: |
add ecx,0xc0000 |
int 0x40 |
inc edx ;id |
dec edi ;counter |
jnz @b |
pop ecx ;for output text |
ret |
|
redraw_window: |
call get_process_info |
mov [rflag],1 |
call draw_window |
ret |
|
;this is debug func |
debug: |
pushad |
mov ecx,[esp+0x24] |
mov ebx,0x80100 |
mov edx,0x10000a0 |
mov eax,47 |
mov esi,0x00ffffff |
int 0x40 |
popad |
ret 4 |
|
; ********************************************* |
; ******* WINDOW DEFINITIONS AND DRAW ******** |
; ********************************************* |
|
draw_window: |
pushad |
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 |
; [x start] *65536 + [x size] |
mov ebx,[process_info+42] |
; [y start] *65536 + [y size] |
mov ecx,[process_info+46] |
mov edx,0x03000000 ; color of work area RRGGBB,8->color gl |
int 0x40 |
; WINDOW LABEL |
mov eax,4 ; function 4 : write text to window |
mov ebx,8*65536+8 ; [x start] *65536 + [y start] |
mov ecx,[sc.grab_text] |
or ecx,0x10000000 ; font 1 & color ( 0xF0RRGGBB ) |
mov edx,labelt ; pointer to text beginning |
mov esi,labellen-labelt ; text length |
int 0x40 |
;check for only header window output |
cmp dword [process_info+46],25 |
jle minimaze_view |
|
;MENU AREA |
mov eax,[process_info+42] ;x-size window |
mov ecx,[process_info+46] ;y-size window |
push ecx ;for using done |
mov ebx,0x40000 |
sub eax,8 |
mov edi,ecx |
add ebx,eax ;x-base + x-size |
sub edi,22 ;temporary value for menu area |
push ebx ;for drawing buttons area |
sub ecx,edi ;y-base menu area |
mov edx,[sc.work_graph] |
shl ecx,0x10 |
mov eax,13 |
add ecx,0x10 |
int 0x40 |
;MENU BUTTONS |
;now in hi-half ecx register begin Y-coord. menu area |
;in hi-half ebx begin X-coord. |
;menu 'File' |
mov esi,edx ;color |
and ecx,0xffff0000 |
and ebx,0xffff0000 |
add ecx,0x1000c |
add ebx,0x20028 ;40x12 |
mov edx,2 ;menu 'File' id = 2 |
mov [y_menu],ecx ;for low-level menus func. |
mov [xf_menu],ebx;for low-level menus func. |
mov eax,8 |
push ebx ;for output buttons texts |
int 0x40 |
;registers is't change |
;menu 'Coding' |
add ebx,0x290018 ;80x12 |
inc edx ;menu 'coding' id = 3 |
mov [xe_menu],ebx;for low-level menus func. |
int 0x40 |
;menu 'Help' |
add ebx,0x40ffe8 ;+0x280000 - 0x28, 40x12 |
inc edx ;menu 'Help' id = 4 |
mov [xh_menu],ebx;for low-level menus func. |
int 0x40 |
;MENU BUTTONS TEXTS |
;'File' |
pop ebx |
shr ecx,0x10 |
and ebx,0xffff0000 |
add ecx,3 |
mov eax,4 ; function 4 : write text to window |
add ebx,0x80000 |
mov edx,f_menu |
add ebx,ecx ; [x start] *65536 + [y start] |
mov esi,4 |
mov ecx,[sc.work_button_text] |
or ecx,0x10000000 ; font 1 & color ( 0xF0RRGGBB ) |
push esi ;for 'Help' menu text |
int 0x40 |
;'coding' |
;registers is't change |
add ebx,0x2d0000 |
;mov esi,6 |
add esi,2 |
; mov edx,e_menu |
add edx,4 |
int 0x40 |
;'Help' |
add ebx,0x3b0000 |
; mov esi,4 |
pop esi |
; mov edx,h_menu |
add edx,6 |
int 0x40 |
;LOW_LEVEL MENU |
;for every hi-level menu exists one procedure |
;in begin programm they are not calls, |
;but when user click on one item hi-level menu |
;or press hot keys, call one func. and after |
;end work this func. she is redraw window - |
;low-level menu is hide. Functions: |
;menufile,menucoding,menuhelp. |
;Thay uses global virables, top-left corner every |
;hi-level menu buttons: [xf_menu],[xe_menu],[xh_menu],[y_menu] |
|
;DRAW BUTTONS AREA |
pop ebx ;for push ebx into processed menu area: x-bzse + x-size |
; mov ecx,[process_info+46] |
pop ecx |
push ecx |
sub ecx,24 |
mov edx,[sc.work_graph] |
shl ecx,16 ;y start |
mov eax,13 |
add ecx,20 |
int 0x40 |
|
;filename input area |
; mov ecx,[process_info+46] |
pop ecx |
push ecx ;for info strings |
mov ebx,0x0008005a |
sub ecx,21 |
xor edx,edx |
shl ecx,16 |
mov [y_filename_area],ecx |
dec edx |
add ecx,16 |
mov eax,13 |
push ecx ;for button 'Go' |
int 0x40 |
|
;button 'Go', press in case open/save if filename input complete |
;button size = 24x16 |
mov eax,8 |
pop ecx ;y-base+y-size |
mov ebx,0x00680018;x-base+x-size |
dec ecx |
mov edx,0xff ;id |
mov esi,[sc.work_button] |
int 0x40 |
shr ecx,0x10 |
and ebx,0xffff0000 |
add ecx,0x50004 |
mov edx,b_go |
add ebx,ecx |
mov esi,2 |
mov ecx,[sc.work_button_text] |
or ecx,0x10000000 |
sub eax,4 |
int 0x40 |
|
;where output cursor? |
mov al,[o_s_flag] |
and al,8 |
je @f |
mov ecx,[y_filename_area] |
add ecx,0x40008 |
jmp cursor |
@@: ;o_s_flag<0 - not output cursor into filename area |
mov ecx,[y_cursor] |
cursor: |
push ecx |
call draw_cursor |
|
mov eax,[y_filename_area] |
mov ebx,0xa0000 |
mov edx,filename |
shr eax,0x10 |
and ebx,0xffff0000 |
add eax,4 |
xor ecx,ecx |
add ebx,eax |
movzx esi,[name_l] |
mov eax,4 |
int 0x40 |
|
;info strings |
; sizefile text |
; mov eax,[process_info+46] |
pop eax |
mov ebx,0x00840000 |
sub eax,18 |
xor ecx,ecx |
add ebx,eax |
mov edx,sizestr ; pointer to text beginning |
mov eax,4 |
mov esi,5 |
int 0x40 |
add ebx,0x00530000 |
inc esi |
; mov edx,offst |
add edx,5 |
inc esi |
int 0x40 |
;sizefile |
mov ecx,[sizefile] |
mov edx,ebx |
xor esi,esi |
sub edx,0x00350000 |
mov eax,47 |
mov ebx,0x80100 |
int 0x40 |
mov ecx,[current] |
add edx,0x005f0000 |
int 0x40 |
|
push [text_cursor] ;íâ® ¯®§¨æ¨ï ªãàá®à ¢ ⥪á⮢®© áâப¥ |
call draw_cursor |
mov ecx,[sizefile] |
jecxz minimaze_view |
call output_screen |
|
minimaze_view: |
mov eax,12 ; function 12:tell os about windowdraw |
mov ebx,2 ; 2, end of draw |
int 0x40 |
popad |
ret |
|
|
|
|
|
get_process_info: |
pushad |
mov eax,9 |
mov ebx,process_info |
xor ecx,ecx |
dec ecx |
int 0x40 |
popad |
ret |
|
coding: |
pushad |
mov ebp,0x10000 ;0x80000 |
mov edi,[esp+0x28] ;source table |
mov esi,[esp+0x24] ;destination table |
xor ecx,ecx ;index in file |
new_char: |
xor ebx,ebx ;index in tables |
not_c: |
mov ah,[ebp+ecx] ;load char |
cmp ah,[edi+ebx] ; |
jz @f |
inc ebx |
cmp ebx,0x40 |
jge end_table |
jmp not_c |
@@: |
mov al,[esi+ebx] |
inc ebx |
mov [ebp+ecx],al |
end_table: |
inc ecx |
cmp ecx,[sizefile] |
jle new_char |
popad |
ret 8 |
|
create_process: |
pushad |
mov eax,51 |
xor ebx,ebx |
mov ecx,[esp+0x24] |
inc ebx |
mov edx,0x7E000 ;0x1000 |
int 0x40 |
popad |
ret 4 |
|
help_thread: |
call help_window |
help_still: |
mov eax,10 |
int 0x40 |
dec eax |
jz help_red |
dec eax |
jz help_key |
dec eax |
jz help_button |
jmp help_still |
help_red: |
call help_window |
jmp help_still |
help_key: |
inc eax |
inc eax |
int 0x40 |
jmp help_still |
help_button: |
mov eax,17 |
int 0x40 |
dec ah |
jne help_still |
shr eax,8 |
dec eax |
int 0x40 |
|
help_window: |
pushad |
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,0x500140 ; [x start] *65536 + [x size] |
mov ecx,0x700110 ; [y start] *65536 + [y size] |
mov edx,0x03000000 ; color of work area RRGGBB,8->color gl |
int 0x40 |
; WINDOW LABEL |
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,help_label ; pointer to text beginning |
mov esi,14 ; text length |
int 0x40 |
; HELP TEXT |
add edx,14 ;help_text addr. |
add esi,37 ; = 51 - length 1 line |
mov ecx,0x00ffffff |
mov edi,15 |
@@: |
add ebx,0x10 |
int 0x40 |
add edx,51 |
dec edi |
jnz @b |
|
|
mov eax,12 ; function 12:tell os about windowdraw |
mov ebx,2 ; 2, end of draw |
int 0x40 |
popad |
ret |
|
about_thread: |
call about_window |
about_still: |
mov eax,10 |
int 0x40 |
dec eax |
jz about_red |
dec eax |
jz about_key |
dec eax |
jz about_button |
jmp about_still |
about_red: |
call about_window |
jmp about_still |
about_key: |
inc eax |
inc eax |
int 0x40 |
jmp about_still |
about_button: |
mov eax,17 |
int 0x40 |
dec ah |
jne about_still |
shr eax,8 |
dec eax |
int 0x40 |
|
about_window: |
pushad |
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,0x500140 ; [x start] *65536 + [x size] |
mov ecx,0x700110 ; [y start] *65536 + [y size] |
mov edx,0x03000000 ; color of work area RRGGBB,8->color gl |
int 0x40 |
; WINDOW LABEL |
mov eax,4 ; function 4 : write text to window |
mov ebx,8*65536+8 ; [x start] *65536 + [y start] |
mov ecx,[sc.work_button_text] |
or ecx,0x10000000 ; font 1 & color ( 0xF0RRGGBB ) |
mov edx,about_label ; pointer to text beginning |
mov esi,17 ; text length |
int 0x40 |
; ABOUT TEXT |
add edx,17 ;about_text addr. |
add esi,34 ; = 51 - length 1 line |
mov ecx,0x00ddeeff |
mov edi,15 |
@@: |
add ebx,0x10 |
int 0x40 |
add edx,51 |
dec edi |
jnz @b |
|
mov eax,12 ; function 12:tell os about windowdraw |
mov ebx,2 ; 2, end of draw |
int 0x40 |
popad |
ret |
|
; DATA AREA |
sizefile dd 0 |
current dd 0 ;current offset relative begin file. Uses as offset for patch. |
;Coordinates left hi-level menu buttons |
;Uses into low-level menu output. |
xf_menu dd 0 |
xe_menu dd 0 |
xh_menu dd 0 |
y_menu dd 0 ;top coord. menu |
y_filename_area dd 0 ;top coord. filename input area |
color dd 0 |
y_cursor dd 0x280008 ;y coord. shl 16 + y size for cursor |
x_cursor dd 0x680005 ;x coord. shl 16 + x size for cursor |
name_l db 0 ;counter chars into filename |
o_s_flag db 0 ; |
rflag dd 0; |
posx db 0 |
posy db 3 |
lines db 0 |
end_str dd 0x10000 ;addr. first byte for output |
text_cursor dd 0x01200000 |
|
filename: rb 13 |
|
b_go: db 'Go' |
|
sizestr: db 'SIZE:' |
|
offst: db 'OFFSET:' |
|
labelt: db 'HeEd' |
labellen: |
|
;text for hi-level menu buttons |
f_menu: db 'File' |
e_menu: db 'Coding' |
h_menu: db 'Help' |
;text for low-level menu buttons |
;menu File |
m_open: db 'Open' |
m_save: db 'Save' |
m_exit: db 'Exit' |
;menu coding |
m_win2dos: db 'Win->Dos' |
m_win2koi: db 'Win->Koi' |
m_win2iso: db 'Win->Iso' |
m_dos2win: db 'Dos->Win' |
m_dos2koi: db 'Dos->Koi' |
m_dos2iso: db 'Dos->Iso' |
;menu Help |
m_help: db 'Help' |
m_about: db 'About' |
;tables for coding |
WIN_TABLE: |
db 0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9 |
db 0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3 |
db 0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD |
db 0xDE,0xDF,0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7 |
db 0xE8,0xE9,0xEA,0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF1 |
db 0xF2,0xF3,0xF4,0xF5,0xF6,0xF7,0xF8,0xF9,0xFA,0xFB |
db 0xFC,0xFD,0xFE,0xFF |
DOS_TABLE: |
db 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89 |
db 0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93 |
db 0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D |
db 0x9E,0x9F,0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7 |
db 0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,0xE0,0xE1 |
db 0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB |
db 0xEC,0xED,0xEE,0xEF |
KOI_TABLE: |
db 0xE1,0xE2,0xF7,0xE7,0xE4,0xE5,0xF6,0xFA,0xE9,0xEA |
db 0xEB,0xEC,0xED,0xEE,0xEF,0xF0,0xF2,0xF3,0xF4,0xF5 |
db 0xE6,0xE8,0xE3,0xFE,0xFB,0xFD,0xFF,0xF9,0xF8,0xFC |
db 0xE0,0xF1,0xC1,0xC2,0xD7,0xC7,0xC4,0xC5,0xD6,0xDA |
db 0xC9,0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD2,0xD3 |
db 0xD4,0xD5,0xC6,0xC8,0xC3,0xDE,0xDB,0xDD,0xDF,0xD9 |
db 0xD8,0xDC,0xC0,0xD1 |
ISO_TABLE: |
db 0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,0xB8,0xB9 |
db 0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,0xC0,0xC1,0xC2,0xC3 |
db 0xC4,0xC5,0xC6,0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD |
db 0xCE,0xCF,0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7 |
db 0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xDF,0xE0,0xE1 |
db 0xE2,0xE3,0xE4,0xE5,0xE6,0xE7,0xE8,0xE9,0xEA,0xEB |
db 0xEC,0xED,0xEE,0xEF |
|
;text for help_window |
help_label: db 'Help for HeEd.' |
help_text: |
db '1.HeEd ¢ á®áâ®ï¨¨ ®âªàëâì ä ©« ⮫쪮 ®¤¨ à § ¨ ' |
db ' 㦮¥ ç¨á«® à § á®åà ¨âì ¥£®. ' |
db '2.ਠ®âªàë⨨ ä ©« ¡¥§ à áè¨à¥¨ï ¤® íâ® à áè¨-' |
db ' è¨à¥¨¥ ¢á¥ à ¢® 㪠§ë¢ âì ª ª âਠ¯à®¡¥« ¯®á«¥' |
db ' â®çª¨. ' |
db '3. ¬® ®âªàë⨥ ä ©« ¯à®¨á室¨â ¯à¨ ¦ ⨨ ª®¯ª¨' |
db ' "Go". ' |
db '4.®§¤ ¨¥ ®¢ëå ä ©«®¢ ¢ ¬¥î ¥ ¯à¥¤ãᬮâ८, ®' |
db ' ¬®¦® ¦¥ । ªâ¨à®¢ âì... ' |
db '5. ä ©« § ¯¨áë¢ ¥âáï ⮫쪮 ª®«¨ç¥á⢮ ¡ ©â, ª®â®-' |
db ' ஥ ¡ë«® à §¬¥à®¬ ä ©« ¤® ®âªàëâ¨ï. ' |
db '6.ਠ¦ ⨨ "Go" á ¯ãáâë¬ ¯®«¥¬ ¨¬¥¨ ä ©« ¢ë¢®-' |
db ' ¤¨âáï ¯ ¬ïâì á ¤à¥á 0å80000, ® à §¬¥à ä ©« ' |
db ' à ¢¥ 0xFFFFFFFF. ' |
db ' (á¬. ¨ä® "About") ' |
help_end: |
;text for about_window |
about_label: db 'About this funny.' |
about_text: |
db '¥ª®â®à ï ¨ä®à¬ æ¨ï ¤«ï â¥å, ªâ® § å®ç¥â ¤®¯¨á âì ' |
db 'áî¤ çâ®-⮠᢮¥: ª®¤ ¯à ªâ¨çªáª¨ ¥ ®¯â¨¬¨§¨à®¢ ,' |
db 'â ª çâ® à §®¡à âìáï ¡ã¤¥â ¥ â ª 㦠᫮¦®. âப¨ ' |
db '¤«ï ª®¯®ª ¬¥î ¤®«¦ë ¨¤â¨ ¯àאַ ¤à㣠§ ¤à㣮¬, ' |
db 'â. ª. ï ¯à¨ ¢ë¢®¤¥ ¨á¯®«ì§ãî ¥ mov esi,à §¬¥à ¨ ' |
db 'mov edx, ¤à¥á ¯à®áâ® ¯à¨¡ ¢«ïî ᬥ饨ï. â® ª -' |
db 'á ¥âáï ª®¤¨à®¢®ª ¨ à §¬¥à®¢ ä ©« ¤«ï á®åà ¥¨ï, ' |
db 'â® ®áâ ¥âáï ⮫쪮 ¤®¡ ¢¨âì ª®¯ª¨ ¬¥î á ⥪á⮬ ' |
db '(¯à¨ ¤®¡ ¢«¥¨¨ ¤® ãç¨âë¢ âì, çâ® ID ª®¯ª¨ ®¯®§-' |
db ' îâáï dec ah, ¥ ª ª cmp ah,ID).
᫨ ¢á¥ ¦¥ ¡ã-' |
db '¤¥â ¥¯à¨ïâ® à §¡¨à âìáï, â® ¬®¦¥â¥ ¯¨á âì ¨ ' |
db 'á¯à®á¨âì. â ¯à®£à ¬¬ ¡ë« ¯¨á ¢ 室¥ à §¡®-' |
db 'ப á GUI MeOS ¨ ¯®í⮬㠥 ¯à¥â¥¤ã¥â çâ®-â® ' |
db '¡®«ì襥, 祬 ¯à¨¬¥à. à®áâ® ¤®¥« íâ ⥬ , ¢ë-' |
db 'ª¨ãâì ¦ «ª®. mailto:babalbes@yandex.ru ' |
about_end: |
|
I_END: |
|
sc system_colors |
|
process_info: |
rb 1024 |
menu_opened db ? |
m_text: |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |