;-------------------------------------------------------------------- ; v.016 30.07.2011 ; Start with open file path ; Show working file path ; Some optimization ; ; Marat Zakiyanov aka Mario79, aka Mario ;-------------------------------------------------------------------- ; v.015 08.03.2010 ; Support for OpenDialog - Open and Save ; Some optimization ; ; Marat Zakiyanov aka Mario79, aka Mario ;-------------------------------------------------------------------- ; v.014 05.02.2010 ; ; PageUp, PageDown - áâà ¨æ ¢¢¥àå/¢¨§ ; Ctrl+UP, Ctrl+Down - ¯à®ªàã⪠áâà ¨æë áâப㠢¢¥àå/¢¨§ ¡¥§ á¬¥é¥¨ï ªãàá®à ; Home,End - ¢ ç «®/ª®¥æ áâப¨ ; Ctrl+Home, Ctrl+End - ª ¯¥à¢®¬ã/¯®á«¥¤¥¬ã ¡ ©âã ä ©« ; Left, Right - ªãàá®à ¢«¥¢®/¢¯à ¢® ; Ctrl+O - ®âªàëâì ä ©« ; Ctrl+S - á®åà ¨âì ; Ctrl+F - ¯®¨áª (+Tab ¤«ï OptionBox) ; Ctrl+G - ¯¥à¥å®¤ ᬥ饨¥ (+Tab ¤«ï OptionBox) ; Ctrl+B - ¢ë¤¥«¨âì ¡«®ª ; ESC - áïâì ¢ë¤¥«¥¨¥ ; Ctrl+C - ª®¯¨à®¢ âì ¡«®ª ; Ctrl+V - ¢áâ ¢¨âì ¢ ¢ë¤¥«¥ãî ®¡« áâì ; Ctrl+X - ¢ë१ âì ¢ë¤¥«¥ãî ®¡« áâì (¢ ¡ãä¥à) ; n - ¨¢¥àâ¨à®¢ âì ¡ ©â ¯®¤ ªãàá®à®¬ ; Ins - ०¨¬ § ¬¥ë/¢áâ ¢ª¨ (¯® 㬮«ç ¨î) ; Del - ¢ ०¨¬¥ ¢áâ ¢ª¨ - 㤠«¨âì ¡ ©â ¯®¤ ªãàá®à®¬ ; BackSpace - ¢ ०¨¬¥ ¢áâ ¢ª¨ - 㤠«¨âì ¡ ©â ¯¥à¥¤ ªãàá®à®¬ ; ~ - ᬥ ª®¤¨à®¢ª¨ (cp866,cp1251) ; Shift+~ - ᬥ ª®¤¨à®¢ª¨ (cp866 ¨«¨ cp1251,koi8-r) ; ¬ïâì ¯¥à¥à á¯à¥¤¥«ï¥âáï 㢥«¨ç¥¨¥ i umen'shenie. ; ” ©« § £à㦠¥âáï 楫¨ª®¬. ; Œ ªà®áë load_lib.mac, editbox_ex ¨ ¡¨¡«¨®â¥ªã box_lib.obj ᮧ¤ «¨: ; <Lrz> - Alexey Teplov / €«¥ªá¥© ’¥¯«®¢ ; Mario79, Mario - Marat Zakiyanov / Œ à â ‡ ª¨ï®¢ ; Diamondz - Evgeny Grechnikov / …¢£¥¨© ƒà¥ç¨ª®¢ ¨ ¤à. ; ; staper@inbox.ru ; babalbes@yandex.ru ;-------------------------------------------------------------------- use32 org 0x0 db 'MENUET01' dd 0x1 dd START ;program start dd I_END ;program image size dd (D_END+0x600) and not 3 ;required amount of memory dd (D_END+0x600) and not 3 ;stack dd fname_buf dd cur_dir_path ;-------------------------------------------------------------------- _title equ 'HeEd 0.16', 0 include 'lang.inc' include '../../../config.inc' ;for nightbuild include '../../../macros.inc' include '../../libraries/box_lib/trunk/box_lib.mac' include '../../libraries/box_lib/load_lib.mac' @use_library ;-------------------------------------------------------------------- times 16 dd 0 frgrd_color equ 0xfefefe bkgrd_color equ 0x000000 kursred_color equ 0x0039ff kurstxt_color equ 0x708090 text_color equ 0xaaaaaa panel_clr1 equ 0xe9e9e2 panel_clr2 equ 0x8b8b89 panel_clr3 equ 0x777777;eaeae3 ;-------------------------------------------------------------------- palitra: .1 dd frgrd_color,bkgrd_color ;梥⠥¢ë¤¥«¥®£® ᨬ¢®« .2 dd frgrd_color,text_color ;«¥¢ë©,¯à ¢ë© á⮫¡æë,ç áâì ¨¦¥© áâப¨ .3 dd kursred_color,frgrd_color ;ªãàá®à .4 dd kurstxt_color,bkgrd_color ;ªãàá®à ¢ ⥪á⮢®© ®¡« á⨠.5 dd panel_clr1,not text_color ;¨¦ïï ¯ ¥«ì ;-------------------------------------------------------------------- FIRST_HEX equ 0*65536+24 scroll_width_size equ 15 ;-------------------------------------------------------------------- struct f70 func_n rd 1 param1 rd 1 param2 rd 1 param3 rd 1 param4 rd 1 rezerv rb 1 name rd 1 ends ;-------------------------------------------------------------------- START: mcall 68,11 load_libraries l_libs_start,end_l_libs ;-------------------------------------------------------------------- ;OpenDialog initialisation push dword OpenDialog_data call [OpenDialog_Init] ;-------------------------------------------------------------------- mov esi,fname_buf cmp [esi],byte 0 je .start_temp_file_name cld @@: lodsb test al,al jne @b std @@: lodsb cmp al,'/' jne @b add esi,2 jmp .selected_start_file_name ;-------------------------------------------------------------------- .start_temp_file_name: mov esi,start_temp_file_name .selected_start_file_name: mov edi,filename_area xor eax,eax cld @@: lodsb stosb test eax,eax jnz @b mcall 40,0x27 mcall 68,12,32*1024 ;áâà ¨çë© ¡ãä¥à mov [screen_table],eax mcall 68,12,4*1024 mov [file_buffer],eax mcall 68,12,1024 mov [copy_buf],eax ;à §¬¥à ⥪ã饣® ¯ã⨠mov esi,cur_dir_path @@: cmp byte [esi],0 je @f inc esi jmp @b ;------------------------------------- @@: sub esi,cur_dir_path mov [edit1.pos],esi mov [edit1.size],esi ;®¡é¥á¨áâ¥¬ë¥ ª« ¢¨è¨ ¤«ï Shift+ªãàá®àë ; mcall 66,4,75,1 ; mcall 66,,77 ; mcall 66,,72 ; mcall 66,,80 call ready_screen_buffer ; jmp open_file mcall 9,procinfo,-1 mov ecx,[ebx+30] ; PID mcall 18,21 mov [active_process],eax ; WINDOW SLOT ;-------------------------------------------------------------------- ; open the file if program has a file path, when it was launched cmp [fname_buf],byte 0 jne open_dialog.start ;-------------------------------------------------------------------- redraw_all: call control_minimal_window_size call draw_window_1 still: mcall 10 cmp eax,6 je mouse dec al jz redraw_all dec al jz key dec al jz button jmp still ;--------------------------------------------------------------------- control_minimal_window_size: pusha mcall 9,procinfo,-1 mov eax,[ebx+70] test eax,10b jnz .end test eax,100b jnz .end test eax,1b jnz .end mov esi,-1 mov eax,procinfo mov eax,[eax+46] cmp eax,299 jae @f mov esi,299 mcall 67,-1,ebx,ebx @@: mov edx,-1 mov eax,procinfo mov eax,[eax+42] cmp eax,399 jae @f mov edx,399 mcall 67,-1,ebx,,ebx @@: .end: popa ret ;--------------------------------------------------------------------- red: call ready_screen_buffer call main_area jmp still ;--------------------------------------------------------------------- draw_window_1: call start_draw call draw_window mov eax,[threath_buf+70] test eax,10b jnz .end test eax,100b jnz .end call show_file_size call show_codepage call show_insert call ready_screen_buffer call main_area .end: ret ;--------------------------------------------------------------------- key: mcall 2 dec al jz still dec al jz key.syst cmp ah,2 je Ctrl_B ;¢ë¤¥«¨âì ¡«®ª cmp ah,3 je Ctrl_C ;copy cmp ah,6 je Ctrl_F ;find cmp ah,7 je Ctrl_G ;go to cmp ah,8 je BackSpace cmp ah,15 je open_dialog ;open_file ;Ctrl+O cmp ah,19 je open_dialog_save ;save_file ;Ctrl+S cmp ah,22 je Ctrl_V ;paste cmp ah,24 je Ctrl_X ;cut cmp ah,27 je ESC cmp ah,48 jb still cmp ah,57 jbe input_from_keyboard ;0-9 cmp ah,65 jb still cmp ah,70 jbe input_from_keyboard ;A-F cmp ah,81 jne @f call Ctrl_DOWN jmp red ;-------------------------------------- @@: cmp ah,82 jne @f call Ctrl_UP jmp red ;-------------------------------------- @@: cmp ah,84 jne @f call Ctrl_HOME jmp red ;-------------------------------------- @@: cmp ah,85 je Ctrl_END cmp ah,96 je change_codepage ;â¨«ì¤ , cp866 - cp1251 cmp ah,97 jb still cmp ah,102 jbe input_from_keyboard ;a-f cmp ah,126 jne @f xor ah,ah jmp change_codepage ;Shift+~, koi8-r ;-------------------------------------- @@: cmp ah,110 je invert_byte ;n cmp ah,176 jne @f call LEFT jmp red ;-------------------------------------- @@: cmp ah,177 jne @f call DOWN jmp red ;-------------------------------------- @@: cmp ah,178 je UP cmp ah,179 je RIGHT cmp ah,180 jne @f call HOME jmp red ;-------------------------------------- @@: cmp ah,181 je END_ cmp ah,182 je DEL cmp ah,183 je PGDN cmp ah,184 je PGUP cmp ah,185 je Insert jmp still ;-------------------------------------- .syst: cmp ah,72 cmp ah,75 cmp ah,77 cmp ah,80 jmp still ;-------------------------------------------------------------------- button: mcall 17 dec ah jnz still jmp close_prog ;-------------------------------------------------------------------- align 4 mouse: mcall 18,7 cmp [active_process],eax jne still mcall 37,7 test eax,eax jz .menu_bar_1;.mouse bt eax,15 jc @f ;®¡à ¡®âª ª®«ñᨪ ¬ëè¨ mov ecx,eax shl ecx,2 .1: call Ctrl_DOWN loop .1 jmp red ;-------------------------------------- @@: xor ecx,ecx sub cx,ax shl cx,2 .2: call Ctrl_UP loop .2 jmp red ;-------------------------------------------------------------------- .menu_bar_1: call .set_mouse_flag @@: push dword menu_data_1 ;mouse event for Menu 1 call [menu_bar_mouse] cmp [menu_data_1.click],dword 1 jne .menu_bar_2 cmp [menu_data_1.cursor_out],dword 0 jne .analyse_out_menu_1 jmp .menu_bar_1 ;-------------------------------------------------------------------- .menu_bar_2: push dword menu_data_2 call [menu_bar_mouse] cmp [menu_data_2.click],dword 1 jne .menu_bar_3 cmp [menu_data_2.cursor_out],dword 0 jne .analyse_out_menu_2 jmp .menu_bar_1 ;-------------------------------------------------------------------- .menu_bar_3: push dword menu_data_3 call [menu_bar_mouse] cmp [menu_data_3.click],dword 1 jne .scroll_bar cmp [menu_data_3.cursor_out],dword 0 jne .analyse_out_menu_3 jmp .menu_bar_1 ;-------------------------------------------------------------------- .set_mouse_flag: xor eax,eax inc eax mov [menu_data_1.get_mouse_flag],eax mov [menu_data_2.get_mouse_flag],eax mov [menu_data_3.get_mouse_flag],eax ret ;-------------------------------------------------------------------- .analyse_out_menu_1: cmp [menu_data_1.cursor_out],dword 1 je open_dialog cmp [menu_data_1.cursor_out],dword 2 je open_dialog_save ;save_file cmp [menu_data_1.cursor_out],dword 3 je close_prog jmp still ;-------------------------------------------------------------------- .analyse_out_menu_2: cmp [menu_data_2.cursor_out],dword 1 jne @f add [bytes_per_line],4 jmp redraw_all ;-------------------------------------- @@: cmp [menu_data_2.cursor_out],dword 2 jne @f add [bytes_per_line],8 jmp redraw_all ;-------------------------------------- @@: cmp [menu_data_2.cursor_out],dword 3 jne @f cmp [bytes_per_line],4 je still sub [bytes_per_line],4 jmp redraw_all ;-------------------------------------- @@: cmp [menu_data_2.cursor_out],dword 4 jne still cmp [bytes_per_line],8 jbe still sub [bytes_per_line],8 jmp redraw_all ;-------------------------------------------------------------------- .analyse_out_menu_3: ;analyse result of Menu 2 cmp [menu_data_3.cursor_out],dword 1 jne still call create_help_window jmp still ;-------------------------------------------------------------------- .scroll_bar: ; mcall 37,2 ; test eax,eax ; jnz @f ; btr [flags],5 ; btr [flags],7 ; jmp still .mouse: .vertical: mcall 37,2 test eax,eax jnz @f btr [flags],5 btr [flags],7 jmp still ;-------------------------------------- @@: bt [flags],5 jc @f bt [flags],7 jc .horizontal_0 mcall 37,1 shr eax,16 cmp ax,[scroll_bar_data_vertical.start_x] jb .horizontal sub ax,[scroll_bar_data_vertical.start_x] cmp ax,[scroll_bar_data_vertical.size_x] jge still @@: ; cmp [scroll_bar_data_vertictal.delta2],0 ; jne .horizontal ; mov eax,[scroll_bar_data_vertical.max_area] ; cmp eax,[scroll_bar_data_vertical.cur_area] ; jbe .horizontal ; mouse event for Vertical ScrollBar mov edi,[screen_table] mov edi,[edi] cmp edi,[file_size] jae still push dword scroll_bar_data_vertical ;draw for Vertical ScrollBar call [scrollbar_ver_mouse] xor edx,edx mov ebx,[scroll_bar_data_vertical.max_area] sub ebx,[scroll_bar_data_vertical.cur_area] mov eax,[file_size] mov esi,[bytes_per_line] mov ecx,[scroll_bar_data_vertical.position] div esi xor edx,edx mul ecx div ebx mul esi cmp eax,[file_size] jng @f sub eax,esi;[bytes_per_line] @@: mov ecx,[cursor] inc ecx shr ecx,1 add ecx,eax @@: cmp ecx,[file_size] jle @f sub ecx,esi;[bytes_per_line] sub eax,esi;[bytes_per_line] jmp @b ;-------------------------------------- @@: mov [begin_offset],eax bts [flags],5 mov eax,scroll_bar_data_vertical.redraw xor ebx,ebx ; cmp [eax],ebx ; je @f mov [eax],ebx jmp red ;-------------------------------------------------------------------- ;@@: ; cmp [scroll_bar_data_vertical.delta2],0 ; jne still .horizontal: mov eax,[scroll_bar_data_horizontal.max_area] cmp eax,[scroll_bar_data_horizontal.cur_area] jbe .other mcall 37,1 cmp ax,[scroll_bar_data_horizontal.start_y] jb still sub ax,[scroll_bar_data_horizontal.start_y] cmp ax,[scroll_bar_data_horizontal.size_y] jge still ; mouse event for Horizontal ScrollBar .horizontal_0: ; mcall 37,2 ; test eax,eax ; jnz @f ; btr [flags],5 ; btr [flags],7 ; jmp still ;@@:; bt [flags],7 ; jc @f ; mcall 37,1 ; shr eax,16 ; cmp ax,[scroll_bar_data_vertical.start_x] ; jb .horizontal ; sub ax,[scroll_bar_data_vertical.start_x] ; cmp ax,[scroll_bar_data_vertical.size_x] ; jge still ;@@: ; mouse event for Vertical ScrollBar mov eax,[ready_screen_buffer.string_size] shr eax,1 cmp eax,[len_str_scr] jle still push dword scroll_bar_data_horizontal ;draw for Horizontal ScrollBar call [scrollbar_hor_mouse] xor edx,edx mov eax,[scroll_bar_data_horizontal.position] mov ebx,[ready_screen_buffer.string_size] shr ebx,1 mul ebx mov ebx,[scroll_bar_data_horizontal.max_area] sub ebx,[scroll_bar_data_horizontal.cur_area] div ebx mov [beg_str_scr],eax add eax,[len_str_scr] mov ebx,[ready_screen_buffer.string_size] shr ebx,1 cmp eax,ebx jle @f mov eax,[ready_screen_buffer.string_size] shr eax,1 sub eax,[len_str_scr] mov [beg_str_scr],eax @@: mov eax,scroll_bar_data_horizontal.redraw xor ebx,ebx cmp [eax],ebx je .other mov [eax],ebx ; call draw_window call main_area bts [flags],7 jmp still ;-------------------------------------------------------------------- .other: ; cmp [scroll_bar_data_vertical.delta2],0 ; jne still ; cmp [scroll_bar_data_horizontal.delta2],0 ; jne still jmp still ;-------------------------------------------------------------------- align 4 ready_screen_buffer: mov [.fl],0 mov esi,[screen_table] add esi,4 mov ecx,[number_strings] mov [.number_strings],cx push [cursor] pop [.cursor] push [file_size] pop [.length_to_end] mov edi,[begin_offset] mov [.shblock_end],0 mov [.shblock_beg],0 bt [flags],8 jnc @f mov eax,[shblock_beg] add eax,[file_buffer] mov [.shblock_beg],eax mov eax,[shblock_end] add eax,[file_buffer] mov [.shblock_end],eax @@: mov [.offset],edi sub [.length_to_end],edi jz .pre_next_string add edi,[file_buffer] .next_string: mov word [esi],0x2020 add esi,2 mov eax,0x20302030 mov dword [esi],eax mov dword [esi+4],eax mov dword [esi+8],eax mov dword [esi+12],eax push edi mov ecx,8 mov edi,[.offset] @@: mov eax,edi and eax,0xF cmp al,10 sbb al,69h das mov [esi+ecx*2-2],al shr edi,4 loop @b mov word [esi+16],0x203a ;¤¢®¥â®ç¨¥ mov eax,[bytes_per_line] add [.offset],eax mov [.string_size],2+4*4+4+2 add esi,4*4+4+2 pop edi mov [.temp],edi push [.cursor] pop [.cursor_temp] ;hex § 票ï mov dword [esi-4],0x20202020 mov edx,[bytes_per_line] .next_group: mov ecx,[group_bytes] .next_byte: mov al,[edi] ror ax,4 cmp al,10 sbb al,69h das mov [esi],al mov byte [esi+1],0x20 cmp edi,[.shblock_end] ja @f cmp edi,[.shblock_beg] jl @f mov byte [esi+1],(0x20+3*4) @@: dec [.cursor] jnz @f mov byte [esi+1],(0x20+2*4) @@: shr ax,16-4 cmp al,10 sbb al,69h das mov [esi+2],al mov byte [esi+3],0x20 cmp edi,[.shblock_end] ja @f cmp edi,[.shblock_beg] jl @f mov byte [esi+3],(0x20+3*4) @@: dec [.cursor] jnz @f mov byte [esi+3],(0x20+2*4) @@: mov word [esi+4],0x2020 add [.string_size],6 add esi,6 inc edi dec [.length_to_end] jz .to_null dec ecx jz @f dec edx jnz .next_byte jz .ascii @@: mov word [esi],0x2020 add esi,2 add [.string_size],2 dec edx jnz .next_group;byte sub esi,2 sub [.string_size],2 jz .ascii .ascii: push edi mov edi,[.temp] mov word [esi],0x2020 mov ebx,[.cursor_temp] add esi,2 add [.string_size],2 mov ecx,[bytes_per_line] @@: mov al,[edi] mov [esi],al mov byte [esi+1],0x20 dec ebx jnz .s1 mov byte [esi+1],(0x20+3*4) .s1: dec ebx jnz .s2 mov byte [esi+1],(0x20+3*4) .s2: inc edi add esi,2 add [.string_size],2 loop @b pop edi mov edx,[bytes_per_line] dec [.number_strings] jnz .next_string ret ;--------------------------------------------------------------------- .fl db 0 .fl_buf dd 0 .to_null: dec [.fl] mov [.fl_buf],edi jmp .pre_next_byte0 ;-------------------------------------------------------------------- .pre_next_string: mov word [esi],0x2020 add esi,2 mov eax,0x20302030 mov dword [esi],eax mov dword [esi+4],eax mov dword [esi+8],eax mov dword [esi+12],eax mov ecx,8 mov edi,[.offset] @@: mov eax,edi and eax,0xF cmp al,10 sbb al,69h das mov [esi+ecx*2-2],al shr edi,4 loop @b mov word [esi+16],0x203a ;¤¢®¥â®ç¨¥ mov eax,[bytes_per_line] add [.offset],eax mov [.string_size],2+4*4+4+2 add esi,4*4+4+2 push [.cursor] pop [.cursor_temp] ;hex § 票ï mov dword [esi-4],0x20202020 mov edx,[bytes_per_line] .pre_next_group: mov ecx,[group_bytes] .pre_next_byte: mov dword [esi],0x20202020 dec [.cursor] jnz @f mov byte [esi+1],(0x20+2*4) @@: dec [.cursor] jnz @f mov byte [esi+3],(0x20+2*4) @@: mov word [esi+4],0x2020 add [.string_size],6 add esi,6 .pre_next_byte0: dec ecx jz @f dec edx jnz .pre_next_byte jz .pre_ascii @@: mov word [esi],0x2020 add esi,2 add [.string_size],2 dec edx jnz .pre_next_group;byte sub esi,2 sub [.string_size],2 jz .pre_ascii .pre_ascii: mov word [esi],0x2020 add esi,2 add [.string_size],2 mov ecx,[bytes_per_line] cmp [.fl],0 ;¯à®¢¥àª ä« £ jne .last_ascii mov ebx,[.cursor_temp] @@: mov word [esi],0x2020 dec ebx jnz .ps1 mov byte [esi+1],(0x20+3*4) .ps1: dec ebx jnz .ps2 mov byte [esi+1],(0x20+3*4) .ps2: add esi,2 add [.string_size],2 .1: loop @b mov edx,[bytes_per_line] dec [.number_strings] jnz .pre_next_string ret ;--------------------------------------------------------------------- ;ª®à४⮠®¡à ¡ âë¢ ¥¬ ä¨ «ìãî áâபã ä ©« , ¤«¨ ª®â®à®© ¢ ਠ⨢ .last_ascii: mov ebx,[.fl_buf] sub ebx,[.temp] sub ecx,ebx mov edi,[.temp] mov [.fl],0 @@: mov al,[edi] mov [esi],al mov byte [esi+1],0x20 dec [.cursor_temp] jnz .la1 mov byte [esi+1],(0x20+3*4) .la1: dec [.cursor_temp] jnz .la2 mov byte [esi+1],(0x20+3*4) .la2: inc edi add esi,2 add [.string_size],2 dec ebx jnz @b inc ecx jmp .1 ;-------------------------------------------------------------------- .string_size dd 16 .number_strings dw 0 .length_to_end dd 0 .temp dd 0 .offset dd 0 .cursor dd 0 .cursor_temp dd 0 .shblock_beg dd 0 .shblock_end dd 0 ;-------------------------------------------------------------------- align 4 main_area: mov ecx,[number_strings] mov [.number_strings],cx push [len_str_scr] pop [.len_str_scr] mov eax,[ready_screen_buffer.string_size] shr eax,1 mov [.string_size],eax mov edi,[screen_table] mov edi,[edi] cmp [file_size],edi jbe .4 xor edx,edx ;¯®«§ã®ª mov ebx,[scroll_bar_data_vertical.max_area] sub ebx,[scroll_bar_data_vertical.cur_area] mov ecx,[file_size] mov eax,[current_offset] test eax,eax jnz .3 inc eax .3: mul ebx test ecx,ecx jnz .5 inc ecx .5: div ecx mov [scroll_bar_data_vertical.position],eax mcall 37,2 ;ª¯®¯ª ¬ëè¨ ¦ â - ¥â á¬ëá« ¯¥à¥à¨á®¢ë¢ âì ScrollBar test eax,eax jnz .4 push dword scroll_bar_data_vertical call [scrollbar_ver_mouse] push dword scroll_bar_data_vertical ;draw for Vertical ScrollBar call [scrollbar_ver_draw] ; push dword scroll_bar_data_vertical ;draw for Vertical ScrollBar ; call [scrollbar_ver_draw] ; xor eax,eax ; inc eax ; mov [scroll_bar_data_vertical.all_redraw],eax ; push dword scroll_bar_data_vertical ;draw for Vertical ScrollBar ; call [scrollbar_ver_draw] ; xor eax,eax ;reset all_redraw flag ; mov [scroll_bar_data_vertical.all_redraw],eax .4: mov esi,0x000001 ;梥⠨ ç¨á«® ¡¨â ¯¨ªá¥«ì mov edx,FIRST_HEX ;ª®®à¤¨ âë ¯¥à¢®£® hex call show_current_offset mov edi,[screen_table] add edi,4 mov ecx,[beg_str_scr] sub [.string_size],ecx shl ecx,1 add edi,ecx .out: push edi movzx ebx,byte [edi] cmp bl,128 ;¯à®¢¥àª ¯à¨ ¤«¥¦®áâì ᨬ¢®« ª à áè¨à¥®© â ¡«¨æ¥ jb .7 add ebx,[codepage_offset] .7: movzx edi,byte [edi+1] lea edi,[(edi*2-0x40)] add edi,palitra shl bx,4 add ebx,font_buffer mov ecx,8*65536+16 mov ebp,0 mcall 65 pop edi add edi,2 add edx,8*65536 dec [.len_str_scr] jz .loop_str dec [.string_size] jz .next_string push edi movzx ebx,byte [edi] cmp bl,128 jb .8 add ebx,[codepage_offset] .8: movzx edi,byte [edi+1] lea edi,[(edi*2-0x40)] add edi,palitra shl bx,4 add ebx,font_buffer mcall pop edi add edi,2 add edx,8*65536 dec [.len_str_scr] jz .loop_str dec [.string_size] jnz .out jz .next_string ; WTF? ;-------------------------------------------------------------------- .string_size dd 0 .number_strings dw 0 .len_str_scr dd 0 ;-------------------------------------------------------------------- @@: pushad mov ecx,edx shl ecx,16 mov ebx,edx shr ebx,16 cmp bx,[scroll_bar_data_vertical.start_x] jge .ls1 mov ax,[scroll_bar_data_vertical.start_x] sub ax,bx shl ebx,16 mov bx,ax mov cx,16 mcall 13,,,frgrd_color .ls1: popad jmp @f ;-------------------------------------------------------------------- .loop_str: bt [flags],6 jc @b @@: dec [.string_size] jz .next_string add edi,2 add edx,8*65536 jmp @b ;-------------------------------------- @@:;®ç¨á⪠䮮¢ë¬ 梥⮬ ¥§ ªà è¥ëå ®¡« á⥩ pushad ror edx,16 mov dx,16 mov ecx,edx mov edx,frgrd_color movzx ebx,[scroll_bar_data_vertical.start_x] mov ax,[scroll_bar_data_vertical.size_x] test ax,ax jnz .no_inc_ebx inc ebx .no_inc_ebx: sub ecx,2*65536 mov cx,2 mcall 13 popad pushad mov ecx,edx shl ecx,16 mov ebx,edx shr ebx,16 cmp bx,[scroll_bar_data_vertical.start_x] jge .10 mov ax,[scroll_bar_data_vertical.start_x] sub ax,bx shl ebx,16 mov bx,ax mov cx,16 mov ax,[scroll_bar_data_vertical.size_x] test ax,ax jnz .no_inc_ebx_2 inc ebx .no_inc_ebx_2: mcall 13,,,frgrd_color .10: popad jmp @f ;-------------------------------------------------------------------- .next_string: bt [flags],6 jc @b @@: push [len_str_scr] pop [.len_str_scr] mov eax,[ready_screen_buffer.string_size] shr eax,1 mov [.string_size],eax ;ª®à४æ¨ï á¬¥é¥¨ï ¢å®¤ëå ¤ ëå mov ecx,[beg_str_scr] sub [.string_size],ecx sub eax,ecx shl ecx,1 add edi,ecx shl eax,19 sub edx,eax add edx,18 dec [.number_strings] jnz .out btr [flags],6 jmp end_draw ;-------------------------------------------------------------------- align 4 show_current_offset: pushad push edx ;¢ë¢®¤ ⥪ã饣® á¬¥é¥¨ï ¢ ä ©«¥ mov edi,palitra.5 mov eax,[begin_offset] mov ebx,[cursor] dec ebx shr bx,1 add ebx,eax mov [current_offset],ebx mov edx,[low_area] lea eax,[8*8+8+8] shl eax,16 add edx,eax mov ecx,8 call hex_output lea eax,[8*8+14] shl eax,16 add edx,eax push edx ;¤¢®¨ç®¥ § 票¥ ¡ ©â mov edx,[file_buffer] add edx,ebx;[current_offset] xor eax,eax cmp ebx,[file_size] jae @f mov al,[edx] @@: mov bx,2 mov ebp,8 xor ecx,ecx xor edx,edx @@: div bx or cl,dl ror ecx,4 dec ebp jnz @b mov ebx,ecx pop edx mov ecx,8 call hex_output ;¤¥áïâ¨ç®¥ push edx mov edx,[file_buffer] mov ebx,[current_offset] add edx,ebx xor eax,eax inc ebx cmp ebx,[file_size] ;0 ¥á«¨ § £à ¨æ¥© ä ©« jb @f mov edx,D_END @@: mov al,[edx] xor ebx,ebx ; mov ebp,3 mov cl,10 @@: div cl mov bl,ah xor ah,ah shl ebx,8 test al,al ; dec ebp jnz @b shr ebx,8 cmp byte [edx],100 jb .1 mov ebp,3 jmp @f ;-------------------------------------- .1: mov ebp,1 cmp byte [edx],10 jb @f mov ebp,2 @@: mov al,bl shr ebx,8 cmp al,10 sbb al,69h das shl eax,8 ; test bx,bx dec ebp jnz @b mov ecx,8*65536+16 pop edx add edx,(8*8+30)*65536;268*65536 mov edi,palitra.5 mov ebp,0 push dword 3 @@: shr eax,8 xor ebx,ebx mov bl,al shl ebx,4 add ebx,font_buffer push eax mcall 65 pop eax sub edx,8*65536 dec dword [esp] jnz @b add esp,4 ; mov edx,[low_area] ;¢ë¢®¤ esp ; add edx,298*65536 ; mov ebx,esp ; mov ecx,8 ; call hex_output pop edx popad ret ;--------------------------------------------------------------------- align 4 hex_output: ;¢ë¢®¤ hex áâப¨ ¨§ 8 ᨬ¢®«®¢ pushad mov edi,(hex8_string) ; ¤à¥á ¡ãä¥à mov dword [edi],0x30303030 mov dword [edi+4],0x30303030 push ecx .1: mov eax,ebx and eax,0xF cmp al,10 sbb al,69h das mov [edi+ecx-1],al shr ebx,4 loop .1 mov ecx,8*65536+16 .2: push edi xor ebx,ebx mov al,[edi] shl eax,4 add eax,font_buffer xchg eax,ebx mov edi,palitra.5 mov ebp,0 mcall 65 add edx,8*65536 pop edi inc edi dec dword [esp] jnz .2 add esp,4 popad ret ;------------------------------------------------------ align 4 input_from_keyboard: xor al,al sub ah,48 cmp ah,9 jle .1 sub ah,7 cmp ah,15 jle .1 sub ah,32 .1: bt [flags],1 jnc .2 mov ebx,[cursor] and bl,1 jz .2 inc [file_size] call raspred_mem mov edi,[current_offset] add edi,[file_buffer] mov esi,[file_buffer] add esi,[file_size] dec esi @@: cmp edi,esi ja @f mov bl,[esi] mov [esi+1],bl dec esi jmp @b ;-------------------------------------- @@: call show_file_size mov ebx,[current_offset] add ebx,[file_buffer] mov byte [ebx],0 .2: mov ecx,[current_offset] add ecx,[file_buffer] ;á¬. ¯¥à¢ãî ¢¥àá¨î heed.asm mov dl,[ecx] ;®à¨£¨ «ìë© ¡ ©â mov ebx,[cursor] and bl,1 ;¥ç¥â - । ªâ¨à㥬 áâ à訩 ¯®«ã¡ ©â jnz .hi_half_byte ;çñâ - áâ à訩 and dl,0xf0 ;®¡ã«ï¥¬ ¬«. ¯-¡ ©â ®à¨£¨ «ì®£® ¡ ©â jmp .patch_byte ;-------------------------------------- .hi_half_byte: ;®¤®¢à¥¬¥® ᤢ¨£ ¥¬ 㦮¥ § 票¥ ¢ áâ ¯-â ¨ ®¡ã«ï¥¬ ¬« ¤è¨© shl ax,4 and dl,0x0f ;®¡ã«ï¥¬ áâ à訩 ¯®«ã¡ ©â 㠮ਣ¨ «ì®£® ¡ ©â .patch_byte: or ah,dl mov [ecx],ah jmp RIGHT ;-------------------------------------------------------------------- raspred_mem: pushad xor edx,edx mov ecx,4096 mov eax,[file_size] inc eax div ecx cmp eax,[prev_f_size_bl] ja @f je .ret cmp [file_size],4096 jbe .ret mov [prev_f_size_bl],eax xor edx,edx mul ecx mov ecx,eax jmp .1 ;-------------------------------------- @@: mov [prev_f_size_bl],eax xor edx,edx mul ecx add ecx,eax .1: mcall 68,20,,[file_buffer] .ret: popad ret ;-------------------------------------------------------------------- align 4 show_file_size: mov ebx,[file_size] mov edx,[low_area]; mov esi,1 mov ecx,8 call hex_output ret ;--------------------------------------------------------------------- align 4 create_title: mov edi,title_buf mov esi,title cld @@: lodsb stosb test al,al jne @b mov [edi-1],byte ' ' mov esi,fname_buf @@: lodsb stosb test al,al jne @b ret ;--------------------------------------------------------------------- align 4 draw_window: call create_title xor esi,esi mcall 0,100*65536+653,100*65536+360,((0x73 shl 24) + frgrd_color),,title_buf ;title mcall 9,threath_buf,-1 ; cmp byte [threath_buf+70],3 ;®ª® á¢ñàãâ® ¢ § £®«®¢®ª? ; jnae @f mov eax,[threath_buf+70] test eax,10b jnz .@d test eax,100b jz @f .@d: call end_draw ret ;-------------------------------------- @@: cmp dword [threath_buf+66],(24*4) ;¯à®¢¥àª ¬¨¨¬ «ì®© ¢ëá®âë jae @f mov esi,dword [threath_buf+46] sub esi,dword [threath_buf+66] add esi,24*4 mcall 67,-1,-1,-1, jmp .@d ;-------------------------------------- @@: cmp dword [threath_buf+62],(26*6) ;¯à®¢¥àª ¬¨¨¬ «ì®© è¨à¨ë jae @f mov edx,dword [threath_buf+42] sub edx,dword [threath_buf+62] add edx,26*6 mcall 67,-1,-1,,-1 jmp .@d ;-------------------------------------- @@: mov eax,[file_size] mov ebx,[bytes_per_line] xor edx,edx div ebx mov [scroll_bar_data_vertical.size_x],0 cmp eax,[number_strings] jl @f mov [scroll_bar_data_vertical.size_x],scroll_width_size @@: mov eax,dword [threath_buf+62] ;è¨à¨ ª«¨¥â᪮© ®¡« á⨠sub ax,[scroll_bar_data_vertical.size_x] mov [scroll_bar_data_vertical.start_x],ax mov eax,dword [threath_buf+66] ;¢ëá®â ª«¨¥â᪮© ®¡« á⨠sub eax,24+24-11 mov [scroll_bar_data_vertical.size_y],ax mov ebx,eax push eax add ebx,20 mov [scroll_bar_data_vertical.max_area],ebx mov ebx,[scroll_bar_data_vertical.btn_high] shl ebx,1 add ebx,20 mov [scroll_bar_data_vertical.cur_area],ebx pop eax sub eax,3 mov ebx,18 xor edx,edx div bx mov [number_strings],eax ;ª®«-¢® hex áâப ¢ ®ª¥ mov ebx,[bytes_per_line] mul ebx mov edi,[screen_table] ;ª®«-¢® ¡ ©â®¢ ¤«ï ¢ë¢®¤ mov dword [edi],eax push eax mov ebx,dword [threath_buf+62] inc ebx mov ecx,(FIRST_HEX-18) ror ecx,16 mov cx,18 ror ecx,16 mcall 13,,,frgrd_color ;¯®«®á ᢥàåã mcall ,,18,panel_clr1 ;¢¥àåïï ¯ ¥«ì dec ebx mcall 38,,<18,18>,panel_clr2 mov ecx,dword [threath_buf+66] sub cx,18 push cx shl ecx,16 pop cx mcall ,,,panel_clr3 ;¨¦ïï ¯ ¥«ì inc ebx add ecx,1*65536 mov cx,18 mcall 13,,,panel_clr1 mov eax,dword [threath_buf+62] sub eax,scroll_width_size shr eax,3 ;div 8 mov [len_str_scr],eax mov eax,[len_str_scr] shl eax,1 cmp eax,[ready_screen_buffer.string_size] jae @f mov edi,[screen_table] mov eax,[bytes_per_line] sub dword [edi],eax dec [number_strings] @@: shr ecx,16 mov edx,ecx mov ecx,(FIRST_HEX) shr ecx,16 mov eax,[number_strings] lea ebx,[eax*8];*18 lea ebx,[ebx*2] lea eax,[eax*2] add eax,ebx add cx,ax add cx,21 sub dx,cx shl ecx,16 add cx,dx sub ecx,1*65536 movzx ebx, word [scroll_bar_data_vertical.start_x] inc ebx mcall 13,,,frgrd_color pop eax cmp eax,[file_size] jge @f ; push dword scroll_bar_data_vertical ; call [scrollbar_ver_mouse] xor eax,eax inc eax mov [scroll_bar_data_vertical.all_redraw],eax push dword scroll_bar_data_vertical ;draw for Vertical ScrollBar call [scrollbar_ver_draw] xor eax,eax ;reset all_redraw flag mov [scroll_bar_data_vertical.all_redraw],eax @@: push dword menu_data_1 ;draw for Menu 1 call [menu_bar_draw] push dword menu_data_2 ;draw for Menu 2 call [menu_bar_draw] push dword menu_data_3 ;draw for Menu 3 call [menu_bar_draw] ;;; mov eax,dword [threath_buf+66] add eax,8*65536-15 mov [low_area],eax mov ebx,[beg_str_scr] mov [beg_str_scr],0 mov eax,[len_str_scr] shl eax,1 cmp eax,[ready_screen_buffer.string_size] jae @f mov [beg_str_scr],ebx movzx eax,word [threath_buf+66] sub eax,34 mov [scroll_bar_data_horizontal.start_y],ax ;cur_area/(size_x-30)=len_str_scr/string_size mov eax,dword [threath_buf+62] sub ax,[scroll_bar_data_vertical.size_x] mov [scroll_bar_data_horizontal.size_x],ax sub eax,[scroll_bar_data_horizontal.btn_high] sub eax,[scroll_bar_data_horizontal.btn_high] mov [scroll_bar_data_horizontal.max_area],eax xor edx,edx mov ebx,[len_str_scr] mul ebx mov ebx,[ready_screen_buffer.string_size] shr ebx,1 div ebx mov [scroll_bar_data_horizontal.cur_area],eax push dword scroll_bar_data_horizontal ;draw for Horizontal ScrollBar call [scrollbar_hor_mouse] xor eax,eax inc eax mov [scroll_bar_data_horizontal.all_redraw],eax push dword scroll_bar_data_horizontal ;draw for Vertical ScrollBar call [scrollbar_hor_draw] xor eax,eax ;reset all_redraw flag mov [scroll_bar_data_horizontal.all_redraw],eax @@: mov eax,[low_area] mov edi,[screen_table] mov esi,[bytes_per_line] mov ecx,esi shl ecx,1 mov eax,[edi] mov ebx,[cursor] inc ebx shr ebx,1 @@: cmp eax,ebx jge @f add [begin_offset],esi sub [cursor],ecx sub ebx,esi jmp @b ;-------------------------------------- @@: bts [flags],6 ret ;-------------------------------------------------------------------- align 4 start_draw: mcall 12,1 ret ;-------------------------------------------------------------------- end_draw: mcall 12,2 ret ;-------------------------------------------------------------------- close_prog: mcall -1 ;-------------------------------------------------------------------- change_codepage: ;¬¥ï¥¬ ¢â®àãî ¯®«®¢¨ã â ¡«¨æë test ah,ah jnz @f btc [flags],4 jc .1 push [codepage_offset] pop [codepage_offset_previous] mov [codepage_offset],2*128 jmp .end ;-------------------------------------- .1: push [codepage_offset_previous] pop [codepage_offset] jmp .end ;-------------------------------------- @@: cmp [codepage_offset],0 jne @f add [codepage_offset],128 jmp .end ;-------------------------------------- @@: mov [codepage_offset],0 .end: call show_codepage jmp red ;-------------------------------------------------------------------- show_codepage: mov ebp,6 mov edx,dword [threath_buf+62] sub edx,73 shl edx,16 add edx,[low_area] mov edi,string_cp866 cmp [codepage_offset],0 je @f add edi,6 cmp [codepage_offset],128 je @f add edi,6 @@: mov ecx,8*65536+16 mov esi,1 push ebp mov ebp,0 @@: xor ebx,ebx push edi mov bl,[edi] shl bx,4 add ebx,font_buffer mov edi,palitra.5 mcall 65 add edx,8*65536 pop edi inc edi dec dword [esp] jnz @b add esp,4 ret ;-------------------------------------------------------------------- show_insert: ;®â®¡à ¦¥¨¥ ०¨¬ ¢áâ ¢ª¨/§ ¬¥ë mov ebp,3 mov edx,dword [threath_buf+62] sub edx,120 shl edx,16 ; mov edx,428*65536+335 add edx,[low_area] mov edi,string_ins push ebp mov ecx,8*65536+16 mov esi,1 mov ebp,0 .1: xor ebx,ebx push edi bt [flags],1 jnc .2 mov bl,[edi] shl bx,4 .2: add ebx,font_buffer mov edi,palitra.5 mcall 65 add edx,8*65536 pop edi inc edi dec dword [esp] jnz .1 add esp,4 ret ;------------------------------------------------------------------------------- ;help window create_help_window: pushad cmp [help_is_open_already], 1 jne @f mov ECX, [help_window_pid] mcall 18, 21 xchg EAX, ECX mcall 18, 3 popad ret ;--------------------------------------------------------------------- @@: mcall 51,1,.thread,(.threat_stack+16*4) mov [help_is_open_already], 1 mov [help_window_pid], EAX popad ret ;-------------------------------------------------------------------- .thread: call .window ;-------------------------------------------------------------------- .still: mcall 10 dec al jz .red dec al jz .key dec al jz .button jmp .still ;-------------------------------------------------------------------- and [help_is_open_already], 0 mcall -1 .button: mcall 17,1 cmp ah,1 jne @f and [help_is_open_already], 0 mcall -1 @@: cmp ah,2 jne @f mov edi,(help_end-help_text)/51 movzx eax,[cur_help_string] sub edi,13 sub edi,eax jz .still inc [cur_help_string] jmp .red ;-------------------------------------- @@: cmp ah,3 jne .still cmp [cur_help_string],0 je .still dec [cur_help_string] jmp .red ;-------------------------------------------------------------------- .key: mcall 2 jmp .still ;-------------------------------------------------------------------- .red: call .window jmp .still ;-------------------------------------------------------------------- .window: pushad mcall 12,1 mcall 0,50*65536+320,0x70*65536+240,0x13000000,,help_but_text mcall 8,<130,20>,<6,12>,2,0xaaaaaa mcall ,<150,20>,,3, mov ebx,8*65536+15 mov ecx,0x00DDDDDD xor edx,edx movzx eax,byte [cur_help_string] mov edi,(help_end-help_text)/51 sub edi,eax mov esi,51 mul si mov edx,help_text add edx,eax mov eax,4 @@: add ebx,0x10 mcall add edx,51 dec edi jnz @b mcall 12,2 popad ret ;-------------------------------------------------------------------- .threat_stack: times 16 dd 0 ;-------------------------------------------------------------------- open_file: mov [func_70.func_n],5 mov [func_70.param1],0 mov [func_70.param2],0 mov [func_70.param3],0 mov [func_70.param4],bufferfinfo mov [func_70.rezerv],0 mov [func_70.name],file_name mcall 70,func_70 test al,al ;ä ©« ©¤¥? jz @f mcall 4,400*65536+31,0x80CC0000,error_open_file_string jmp open_file ;-------------------------------------------------------------------- @@: ; mov edx,[blocks_counter] ; mov edi,[blocks_table] ; @@: mov ecx,[edi] ;¢ë᢮¡®¦¤ ¥¬: ; mcall 68,13 ;¡«®ª¨ ä ©« ; add edi,8 ; dec edx ; jnz @b ; mcall 68,13,[blocks_table] ;â ¡«¨æã mov eax, dword [bufferfinfo+32] ;ª®¯¨à㥬 à §¬¥à ä ©« mov [file_size],eax ; mov ebx,65536 ;64Š ¡«®ª ; xor edx,edx ; div ebx ; push dx ;¤«¨ ¯®á«¥¤¥£® ¡«®ª ; test dx,dx ; jz @f ; inc eax ; @@: test eax,eax ; jnz @f ; inc eax ; @@: mov [blocks_counter],eax ; sal eax,3;*8 ;à §¬¥à â ¡«¨æë á ¨¤¥ªá ¬¨ ¡«®ª®¢ ;; add eax,32 ;à¥è ¥¬ ¯à®¡«¥¬ã á 32Œ ä ©« ¬¨ ; mov ecx,eax ;¢ë¤¥«ï¥¬ ¯ ¬ïâì: ; mcall 68,12 ;¯®¤ â ¡«¨æã ; mov [blocks_table],eax ; mov edi,eax ; mov ecx,[blocks_counter] ; @@: mov dword [edi+4],65536 ; add edi,8 ; loop @b ; xor edx,edx ; pop dx ;¤«¨ ¯®á«¥¤¥£® ¡«®ª ; mov dword [edi-4],edx ; mov edx,[blocks_counter] ; mov edi,[blocks_table] ;@@: mcall 68,12,[edi+4] ;¯®¤ ¡«®ª ; mov [edi],eax ; add edi,8 ; dec edx ; jnz @b mcall 68,13,[file_buffer] test eax,eax jnz @f ;§¤¥áì ®è¨¡ª ¥ ®á¢®¡®¦¤¥¨¥ ¡«®ª @@: mcall 68,12,[file_size] mov [file_buffer],eax ;;¨¬¥¥¬ â ¡«¨æã: [ DWORD 㪠§ â¥«ì ¯¥à¢ë© í«¥¬¥â ¡«®ª : DWORD ¤«¨ ¡«®ª ] ; mov ecx,[blocks_counter] ;®âªàë¢ ¥¬ ä ©« ; mov edi,[blocks_table] mov [func_70.func_n],0 mov [func_70.param1],0 mov [func_70.param2],0 mov [func_70.rezerv],0 mov [func_70.name],file_name ;@@: push dword [file_size];dword [edi+4] pop dword [func_70.param3] push dword [file_buffer];dword [edi] pop dword [func_70.param4] mcall 70,func_70 ; add edi,8 ; add dword [func_70.param1],65536 ; loop @b test eax,eax jz @f ;®è¨¡ª ç⥨ï @@: call Ctrl_HOME jmp redraw_all ;------------------------------------------------------------------------------- open_dialog_save: mov [OpenDialog_data.type],1 ; Save push dword OpenDialog_data call [OpenDialog_Start] ; cmp [OpenDialog_data.status],2 ; OpenDialog does not start ;; je .sysxtree ; some kind of alternative, instead OpenDialog ; je save_file cmp [OpenDialog_data.status],1 jne still mov esi,fname_buf mov edi,file_name cld @@: cmp byte [esi],0 je @f movsb jmp @b ;-------------------------------------- @@: mov byte [edi],0 sub esi,path mov [edit1.size],esi mov [edit1.pos],esi ; jmp save_file ;------------------------------------------------------------------------------- save_file: ;á®åà 塞 ä ©« mov [func_70.func_n],2 mov [func_70.param1],0 mov [func_70.param2],0 push [file_size] pop [func_70.param3] push [file_buffer] pop [func_70.param4] mov [func_70.rezerv],0 mov [func_70.name],file_name mcall 70,func_70 cmp al,0 ;á®åà ñ 㤠ç®? je redraw_all mcall 4,400*65536+31,0x80CC0000,error_save_file_string jmp save_file ;------------------------------------------------------------------------------- draw_ed_box: ;à¨á®¢ ¨¥ edit box' .1: push eax ebx ecx edx mcall 13,180*65536+220,25*65536+70,0xaaaaaa bt [flags],9 jnc @f mcall 4,246*65536+35,0x80ffffff,sel_text @@: bt [flags],2 jnc @f push dword Option_boxs call [option_box_draw] @@: bt [flags],3 jnc @f push dword Option_boxs2 call [option_box_draw] @@: mov eax,ed_box_data mov ecx,[eax] @@: add eax,4 push dword [eax] call [edit_box_draw] loop @b pop edx ecx ebx eax .2: mcall 10 cmp al,6 je .mouse cmp al,3 je .button cmp al,2 je .keys cmp al,1 jne .2 call draw_window mov eax,[threath_buf+70] test eax,10b jnz .2 test eax,100b jnz .2 call main_area bt [flags],2 jnc @f push dword Option_boxs call [option_box_draw] @@: bt [flags],3 jnc @f push dword Option_boxs2 call [option_box_draw] @@: jmp .1 ;-------------------------------------------------------------------- .mouse: bt [flags],2 jnc @f push dword Option_boxs call [option_box_mouse] @@: bt [flags],3 jnc @f push dword Option_boxs2 call [option_box_mouse] @@: jmp .2 ;-------------------------------------------------------------------- .keys: mcall 2 cmp ah,13 je .4 cmp ah,27 je .3 bt [flags],2 ;¯à®¢¥àª ¯à¨¬¥¨¬®áâì ᨬ¢®«®¢ 0-9,a-b jnc .eb2 .eb1: cmp ah,9 jne .eb1_1 push edx mov edx,[option_group1] cmp edx,op1 jne @f mov edx,op2 jmp .eb1_2 ;-------------------------------------- @@: cmp edx,op2 jne @f mov edx,op3 jmp .eb1_2 ;-------------------------------------- @@: mov edx,op1 .eb1_2: mov [option_group1],edx pop edx jmp .1 ;-------------------------------------- .eb1_1: cmp ah,48 jb .eb1_3 cmp ah,57 jbe .eb cmp ah,102 jg .eb1_3 cmp ah,97 jge .eb .eb1_3: cmp ah,182 je .eb cmp ah,8 je .eb cmp ah,176 je .eb cmp ah,179 je .eb dec [edit2.shift] dec [edit2.shift+4] push dword [ed_box_data+4]; [esp] call [edit_box_draw] jmp .2 ;-------------------------------------- .eb2: bt [flags],3 jnc .eb3 cmp ah,9 jne .eb2_2 push edx mov edx,[option_group2] cmp edx,op11 jne @f mov edx,op12 jmp .eb2_1 ;-------------------------------------- @@: mov edx,op11 .eb2_1: mov [option_group2],edx pop edx jmp .1 ;-------------------------------------- .eb2_2: cmp ah,182 je .eb cmp ah,8 je .eb cmp ah,176 je .eb cmp ah,179 je .eb mov edx,[option_group2] cmp edx,op11 jne .eb cmp ah,48 jb .eb2_3 cmp ah,57 jbe .eb cmp ah,102 jg .eb2_3 cmp ah,97 jge .eb .eb2_3: dec [edit3.shift] dec [edit3.shift+4] push dword [ed_box_data+4];[esp] call [edit_box_draw] jmp .2 ;-------------------------------------- .eb3: bt [flags],9 jnc .eb cmp ah,9 je .eb3_1 cmp ah,182 je .eb3_2 cmp ah,8 je .eb3_2 cmp ah,176 je .eb3_2 cmp ah,179 je .eb3_2 cmp ah,48 jb .eb3_3 cmp ah,57 jbe .eb3_2 cmp ah,102 jg .eb3_3 cmp ah,97 jge .eb3_2 .eb3_3: push edx mov edx,[edit4.flags] and edx,2 jz @f pop edx dec [edit4.shift] dec [edit4.shift+4] jmp .2 ;-------------------------------------- @@: pop edx dec [edit5.shift] dec [edit5.shift+4] jmp .2 ;-------------------------------------- .eb3_1: push edx mov edx,[edit4.flags] and edx,2 jz @f pop edx mov [edit5.flags],2 mov [edit4.flags],0 jmp .eb3_2 ;-------------------------------------- @@: pop edx mov [edit4.flags],2 mov [edit5.flags],0 .eb3_2: push dword [ed_box_data+4] call [edit_box_key] push dword [ed_box_data+8] call [edit_box_key] jmp .1 ;-------------------------------------- .eb: push dword [ed_box_data+4];[esp] call [edit_box_key] jmp .2 ;-------------------------------------------------------------------- .button: mcall 17 cmp ah,1 jne .2 jmp close_prog .3: btr [flags],2 btr [flags],3 add esp,4 jmp redraw_all .4: mcall 13,180*65536+220,25*65536+70,frgrd_color ret ;-------------------------------------------------------------------- strtohex: ;enter: edi - pointer to string,ebx - pointer to size of string; exit: eax in hex mov esi,hex8_string @@: mov ah,[edi+ecx-1] ;®¡à ¡®âª ¢¢¥¤ñëå ᨬ¢®«®¢ sub ah,48 cmp ah,9 jbe .1 sub ah,7 cmp ah,15 jbe .1 sub ah,32 .1: mov [esi+ecx-1],ah dec ecx jnz @b mov ecx,[ebx] xor eax,eax .2: shl eax,4 or al,[esi] inc esi dec ecx jnz .2 ret Ctrl_G: bts [flags],2 mov dword [ed_box_data],1 mov dword [ed_box_data+4],edit2 call draw_ed_box btr [flags],2 mov ecx,[edit2.size] test ecx,ecx jz .end cmp ecx,8 jg Ctrl_G mov edi,go_to_string mov ebx,edit2.size call strtohex cmp eax,[file_size] ;¢ë¡®à check_box' jg Ctrl_G mov edx,[option_group1] cmp edx,op1 ;abs je .abs cmp edx,op2 jne .back add eax,[current_offset] ;forward cmp eax,[file_size] jg Ctrl_G mov edi,[screen_table] mov edi,[edi] xor edx,edx @@: add edx,edi cmp eax,edx jg @b sub edx,edi mov [begin_offset],edx sub eax,edx shl eax,1 inc eax mov [cursor],eax jmp .end ;-------------------------------------------------------------------- .back: cmp eax,[current_offset] ;back jg Ctrl_G mov edi,[screen_table] mov edi,[edi] mov ebx,[current_offset] sub ebx,eax xor edx,edx @@: add edx,edi cmp edx,ebx jb @b sub edx,edi mov [begin_offset],edx sub ebx,edx mov edx,ebx shl edx,1 inc edx mov [cursor],edx jmp .end ;-------------------------------------------------------------------- .abs: mov esi,[screen_table] mov esi,[esi] xor ebx,ebx .3: add ebx,esi cmp eax,ebx jg .3 sub ebx,esi cmp ebx,[file_size] jg Ctrl_G mov [begin_offset],ebx sub eax,ebx shl eax,1 inc eax mov [cursor],eax .end: jmp red ;-------------------------------------------------------------------- Ctrl_B: bts [flags],9 mov dword [ed_box_data],2 mov dword [ed_box_data+4],edit4 mov dword [ed_box_data+8],edit5 call draw_ed_box btr [flags],9 mov ecx,[edit4.size] test ecx,ecx jz .end cmp ecx,8 jg Ctrl_B mov edi,sel1_string mov ebx,edit4.size call strtohex cmp eax,[file_size] jge Ctrl_B push eax ;from mov ecx,[edit5.size] test ecx,ecx jz .end cmp ecx,8 jg Ctrl_B mov edi,sel2_string mov ebx,edit5.size call strtohex cmp eax,[file_size] jb @f pop eax jmp Ctrl_B @@: pop [shblock_beg] cmp eax,[shblock_beg] jae @f xchg eax,[shblock_beg] @@: mov [shblock_end],eax bts [flags],8 .end: jmp red ;-------------------------------------------------------------------- Ctrl_F: bts [flags],3 mov dword [ed_box_data],1 mov dword [ed_box_data+4],edit3 call draw_ed_box btr [flags],3 mov ecx,[edit3.size] test ecx,ecx jz .end cmp ecx,8 jg Ctrl_F mov edi,find_string mov edx,[option_group2] cmp edx,op11 jne .find mov eax,find_string push dword [eax] push dword [eax+4] bts [flags],0 mov ebx,edit3.size call strtohex mov ecx,[edit3.size] bt cx,0 jnc .3 inc ecx shl eax,4 .3: shr ecx,1 .4: mov [edi+ecx-1],al shr eax,8 loop .4 .find: mov esi,[current_offset] mov ebx,[file_size] mov eax,ebx add eax,[file_buffer] add esi,[file_buffer] .5: mov ecx,[edit3.size] cmp edx,op11 jne .7 bt cx,0 jnc .6 inc ecx .6: shr ecx,1 .7: cld @@: cmp esi,eax jg .end cmpsb je .8 mov edi,find_string jmp .5 ;-------------------------------------- .8: loop @b sub esi,[file_buffer] mov ecx,[edit3.size] cmp edx,op11 jne .10 bt cx,0 jnc .9 inc ecx .9: shr ecx,1 .10: sub esi,ecx xor edx,edx mov edi,[screen_table] mov edi,[edi] @@: add edx,edi cmp edx,esi jb @b sub edx,edi mov [begin_offset],edx sub esi,edx shl esi,1 inc esi mov [cursor],esi .end: bt [flags],0 jnc @f mov eax,find_string pop dword [eax+4] pop dword [eax] btr [flags],0 @@: jmp red ;-------------------------------------------------------------------- invert_byte: mov ebx,[current_offset] cmp ebx,[file_size] jae still add ebx,[file_buffer] not byte [ebx] jmp red ;-------------------------------------------------------------------- Insert: ;¯¥à¥ª«î票¥ ०¨¬ ¢áâ ¢ª¨/§ ¬¥ë btc [flags],1 ;not [insert_mod] call show_insert jmp red ;-------------------------------------------------------------------- DEL: bt [flags],1 jnc still mov edi,[current_offset] mov esi,[file_buffer] mov edx,[file_size] test edx,edx jz still dec edx cmp edi,edx jbe @f call LEFT call LEFT jmp red @@: jb @f call LEFT call LEFT @@: cmp edi,edx je @f mov al,[edi+esi+1] mov [edi+esi],al inc edi jmp @b @@: dec [file_size] call show_file_size jmp red ;-------------------------------------------------------------------- BackSpace: bt [flags],1 ;cmp [insert_mod],0 jnc still ;je still mov edi,[current_offset] mov esi,[file_buffer] mov edx,[file_size] test edx,edx jz still test edi,edi jz still call LEFT call LEFT cmp [cursor],2 jne @f cmp edx,1 jne @f dec [cursor] @@: cmp edi,edx jge @f mov al,[edi+esi] mov [edi+esi-1],al inc edi jmp @b ;-------------------------------------- @@: dec [file_size] call show_file_size jmp red ;-------------------------------------------------------------------- Ctrl_UP: cmp [begin_offset],0 je @f mov eax,[bytes_per_line] sub [begin_offset],eax @@: ret ;-------------------------------------------------------------------- Ctrl_DOWN: mov eax,[cursor] dec eax shr eax,1 add eax,[begin_offset] mov ebx,[bytes_per_line] add eax,ebx cmp eax,[file_size] jge @f add [begin_offset],ebx @@: ret ;-------------------------------------------------------------------- UP: mov eax,[current_offset] cmp eax,[bytes_per_line] jb still mov eax,[cursor] dec ax shr ax,1 cmp eax,[bytes_per_line] jge @f mov eax,[bytes_per_line] sub [begin_offset],eax jmp red @@: mov eax,[bytes_per_line] shl ax,1 sub [cursor],eax jmp red ;-------------------------------------------------------------------- DOWN: ; áâப㠢¨§ mov eax,[current_offset] add eax,[bytes_per_line] bt [flags],1 jnc @f dec eax @@: cmp eax,[file_size] jge still ;¥á«¨ ¬ë ¯®á«¥¤¥© áâப¥ ä ©« , â® á⮯ mov eax,[screen_table] mov eax,[eax] mov edx,[cursor] dec dx shr dx,1 add edx,[bytes_per_line] cmp eax,edx ; ¯®á«¥¤¥© áâப¥? jbe @f mov eax,[bytes_per_line] shl ax,1 add [cursor],eax ret @@: mov eax,[bytes_per_line] add [begin_offset],eax ret ;-------------------------------------------------------------------- LEFT: cmp [cursor],1 jbe @f dec [cursor] jmp .end ;-------------------------------------- @@: cmp [begin_offset],0 ;ªãàá®à ¯¥à¢®© áâப¥ ᮠᬥ饨¥¬ 0? jne @f ;¨ ç¥ á¬¥é ¥¬ á ¯à®ªàã⪮© ¢¢¥àå ¢¢¥àå ¨ ¢ ª®¥æ áâப¨ ; inc [cursor] jmp .end;still ;⮣¤ á⮯ ;-------------------------------------- @@: mov eax,[bytes_per_line] sub [begin_offset],eax shl ax,1 dec eax add [cursor],eax .end: ret ;-------------------------------------------------------------------- RIGHT: mov ecx,[begin_offset] ;¢ëç¨á«ï¥¬ ᬥ饨¥ ªãàá®à mov edx,[cursor] ;¤«ï ¯à®¢¥àª¨ áãé¥á⢮¢ ¨ï shr edx,1 ;á«¥¤ãî饣® ᨬ¢®« add ecx,edx bt [flags],1 jnc @f dec ecx ;áà ¢¨¢ ¥¬ á à §¬¥à®¬ ä ©« @@: cmp ecx,[file_size] ;¯®«®¦¥¨¥¬ ªãàá®à - ¥ ¤ «¥¥ 1 ¡ ©â ®â ª®æ ä ©« jge red cmp [file_size],0 je still mov eax,[screen_table] mov eax,[eax] mov ecx,[begin_offset] cmp eax,edx ;áà ¢¥¨¥ ¨¦îî áâபã jbe @f inc [cursor] ;ªãàá®à ¢¯à ¢® jmp red ;-------------------------------------- @@: mov ecx,[bytes_per_line] ;á¬¥é ¥¬áï áâà®çªã ¢¨§ add [begin_offset],ecx ;á ¯à®ªàã⪮© shl cx,1 dec cx sub [cursor],ecx jmp red ;-------------------------------------------------------------------- PGDN: mov edi,[screen_table] mov eax,[edi] shl eax,1 add eax,[begin_offset] cmp eax,[file_size] ;¥áâì «¨ ¢®§¬®¦®áâì ᬥáâ¨âìáï áâà ¨æã? jg Ctrl_END mov eax,[edi] add [begin_offset],eax ; mov ebx,[cursor] ; dec ebx ; xor ecx,ecx ; bt ebx,0 ; jnc @f ; inc ecx ; @@: shr ebx,1 ; add ebx,eax ; @@: cmp ebx,[file_size] ; jbe @f ; sub ebx,[bytes_per_line] ; jmp @b ; @@: sub ebx,eax ; shl ebx,1 ; inc ebx ; add ebx,ecx ; mov [cursor],ebx jmp red ;-------------------------------------------------------------------- PGUP: mov eax,[screen_table] mov eax,[eax] mov edx,[begin_offset] cmp eax,edx jbe @f call Ctrl_HOME jmp red ;-------------------------------------- @@: sub [begin_offset],eax jmp red ;-------------------------------------------------------------------- HOME: mov eax,[cursor] dec ax shr ax,1 mov ecx,[bytes_per_line] xor edx,edx div ecx shl dx,1 sub [cursor],edx bt [cursor],0 jc @f dec [cursor] @@: ret ;-------------------------------------------------------------------- END_: mov eax,[cursor] dec ax shr ax,1 mov ecx,[bytes_per_line] xor edx,edx div ecx mov eax,[current_offset] sub eax,edx add eax,[bytes_per_line] mov edx,[file_size] cmp eax,edx jbe @f sub edx,eax add eax,edx @@: sub eax,[begin_offset] shl eax,1 test eax,eax jz red dec eax mov [cursor],eax jmp red ;-------------------------------------------------------------------- Ctrl_HOME: mov [begin_offset],0 mov [cursor],1 ret ;-------------------------------------------------------------------- Ctrl_END: mov eax,[file_size] mov ecx,[screen_table] mov ecx,[ecx] xor edx,edx div ecx test dx,dx jnz @f test eax,eax jz @f mov edx,ecx dec eax @@: push dx xor dx,dx mul ecx pop dx shl edx,1 cmp edx,1 jg @f mov edx,2 @@: dec edx mov [begin_offset],eax mov [cursor],edx jmp red ;-------------------------------------------------------------------- ESC: btr [flags],8 jmp red ;-------------------------------------------------------------------- copy_to_buf: bt [flags],8 jnc .1 mov eax,[shblock_end] sub eax,[shblock_beg] inc eax mov ecx,eax mov [copy_len],eax mcall 68,20,,[copy_buf] mov esi,[shblock_beg] mov edi,[copy_buf] add esi,[file_buffer] mov ecx,[copy_len] cld @@: movsb loop @b bts [flags],10 xor eax,eax ret ;--------------------------------------------------------------------- .1: or eax,-1 ret ;-------------------------------------------------------------------- Ctrl_C: call copy_to_buf jmp still ;-------------------------------------------------------------------- shblock_sz dd 0 ;-------------------------------------------------------------------- Ctrl_V: bt [flags],10 jnc still bt [flags],8 jnc .past_kurs ;¢áâ ¢«ï¥¬ ¡«®ª ¢ ¢ë¤¥«¥ãî ®¡« áâì mov ebx,[shblock_end] sub ebx,[shblock_beg] inc ebx mov [shblock_sz],ebx mov esi,[copy_buf] mov edi,[file_buffer] add edi,[shblock_beg] mov eax,[copy_len] .1: cld @@: movsb dec eax jz .del dec ebx jnz @b .add: push esi edi eax push [file_size] add [file_size],eax call raspred_mem pop ecx mov edi,[esp+4] add ecx,[file_buffer] sub ecx,edi inc ecx mov edi,[file_size] add edi,[file_buffer] mov esi,edi sub esi,eax std @@: movsb loop @b pop eax edi esi cld @@: movsb dec eax jnz @b mov eax,[shblock_beg] add eax,[copy_len] dec eax mov [shblock_end],eax jmp red ;-------------------------------------- .del: dec ebx jz red mov ecx,[file_size] add ecx,[file_buffer] sub ecx,edi mov esi,edi add esi,ebx cld @@: movsb loop @b sub [file_size],ebx call raspred_mem mov eax,[shblock_beg] add eax,[copy_len] dec eax mov [shblock_end],eax jmp red ;-------------------------------------------------------------------- ;¥á«¨ ¡«®ª ¥ ¢ë¤¥«¥, â® ¢áâ ¢«ï¥¬ ¡«®ª ¯¥à¥¤ ªãàá®à®¬ .past_kurs: ; bt [flags],1 ; jnc still ; mov esi,[file_buffer] ; add esi,[current_offset] ; jmp red jmp still ;-------------------------------------------------------------------- Ctrl_X: bt [flags],1 jnc still call copy_to_buf test eax,eax jnz still mov ecx,[file_size] sub ecx,[copy_len] sub ecx,[shblock_beg] inc ecx mov ebx,[file_size] mov edi,[shblock_beg] mov esi,[shblock_end] inc esi add esi,[file_buffer] add edi,[file_buffer] add ebx,[file_buffer] cld @@: cmp esi,ebx je .1 movsb loop @b .1: mov eax,[file_size] sub eax,[copy_len] mov [file_size],eax btr [flags],8 mov eax,[shblock_beg] mov esi,[screen_table] mov esi,[esi] xor ebx,ebx .3: add ebx,esi cmp eax,ebx jg .3 sub ebx,esi ; cmp ebx,[file_size] ; jg Ctrl_G mov [begin_offset],ebx sub eax,ebx shl eax,1 inc eax mov [cursor],eax jmp red ;--------------------------------------------------------------------- open_dialog: mov [OpenDialog_data.type],0 ; Open push dword OpenDialog_data call [OpenDialog_Start] ; cmp [OpenDialog_data.status],2 ; OpenDialog does not start ; je .sysxtree ; some kind of alternative, instead OpenDialog cmp [OpenDialog_data.status],1 jne still .start: mov esi,fname_buf .load: mov edi,file_name cld @@: cmp byte [esi],0 je @f movsb jmp @b @@: mov byte [edi],0 sub esi,path mov [edit1.size],esi mov [edit1.pos],esi jmp open_file ;--------------------------------------------------------------------- ;----------------------- DATA AREA------------------------ ;-------------------------------------------------------------------- align 4 ProcLib_import: OpenDialog_Init dd aOpenDialog_Init OpenDialog_Start dd aOpenDialog_Start ;OpenDialog__Version dd aOpenDialog_Version dd 0 dd 0 aOpenDialog_Init db 'OpenDialog_init',0 aOpenDialog_Start db 'OpenDialog_start',0 ;aOpenDialog_Version db 'Version_OpenDialog',0 ;--------------------------------------------------------------------- align 4 Box_lib_import: edit_box_draw dd aEdit_box_draw edit_box_key dd aEdit_box_key edit_box_mouse dd aEdit_box_mouse version_ed dd aVersion_ed option_box_draw dd aOption_box_draw option_box_mouse dd aOption_box_mouse version_op dd aVersion_op scrollbar_ver_draw dd aScrollbar_ver_draw scrollbar_ver_mouse dd aScrollbar_ver_mouse scrollbar_hor_draw dd aScrollbar_hor_draw scrollbar_hor_mouse dd aScrollbar_hor_mouse version_scrollbar dd aVersion_scrollbar menu_bar_draw dd aMenu_bar_draw menu_bar_mouse dd aMenu_bar_mouse version_menu_bar dd aVersion_menu_bar dd 0 dd 0 aEdit_box_draw db 'edit_box',0 aEdit_box_key db 'edit_box_key',0 aEdit_box_mouse db 'edit_box_mouse',0 aVersion_ed db 'version_ed',0 aOption_box_draw db 'option_box_draw',0 aOption_box_mouse db 'option_box_mouse',0 aVersion_op db 'version_op',0 aScrollbar_ver_draw db 'scrollbar_v_draw',0 aScrollbar_ver_mouse db 'scrollbar_v_mouse',0 aScrollbar_hor_draw db 'scrollbar_h_draw',0 aScrollbar_hor_mouse db 'scrollbar_h_mouse',0 aVersion_scrollbar db 'version_scrollbar',0 aMenu_bar_draw db 'menu_bar_draw',0 aMenu_bar_mouse db 'menu_bar_mouse',0 aVersion_menu_bar db 'version_menu_bar',0 ;--------------------------------------------------------------------- align 4 scroll_bar_data_vertical: .x: .size_x dw scroll_width_size;+0 .start_x dw 565 ;+2 .y: .size_y dw 284 ;+4 .start_y dw 19 ;+6 .btn_high dd scroll_width_size ;+8 .type dd 0 ;+12 .max_area dd 300+20 ;+16 .cur_area dd 50 ;+20 .position dd 0 ;+24 .bckg_col dd 0xAAAAAA ;+28 .frnt_col dd 0xCCCCCC ;+32 .line_col dd 0 ;+36 .redraw dd 0 ;+40 .delta dw 0 ;+44 .delta2 dw 0 ;+46 .run_x: .r_size_x dw 0 ;+48 .r_start_x dw 0 ;+50 .run_y: .r_size_y dw 0 ;+52 .r_start_y dw 0 ;+54 .m_pos dd 0 ;+56 .m_pos_2 dd 0 ;+60 .m_keys dd 0 ;+64 .run_size dd 0 ;+68 .position2 dd 0 ;+72 .work_size dd 0 ;+76 .all_redraw dd 0 ;+80 .ar_offset dd 10 ;+84 ;--------------------------------------------------------------------- align 4 scroll_bar_data_horizontal: .x: .size_x dw 300 ;0 ;+0 .start_x dw 0 ;0 ;+2 .y: .size_y dw scroll_width_size ;0 ;+4 .start_y dw 300 ;0 ;+6 .btn_high dd scroll_width_size ;+8 .type dd 0 ;+12 .max_area dd 300 ;+16 .cur_area dd 30 ;+20 .position dd 1 ;+24 .bckg_col dd 0xAAAAAA ;+28 .frnt_col dd 0xCCCCCC ;+32 .line_col dd 0 ;+36 .redraw dd 0 ;+40 .delta dw 0 ;+44 .delta2 dw 0 ;+46 .run_x: .r_size_x dw 0 ;+48 .r_start_x dw 0 ;+50 .run_y: .r_size_y dw 0 ;+52 .r_start_y dw 0 ;+54 .m_pos dd 0 ;+56 .m_pos_2 dd 0 ;+60 .m_keys dd 0 ;+64 .run_size dd 0 ;+68 .position2 dd 0 ;+72 .work_size dd 0 ;+76 .all_redraw dd 0 ;+80 .ar_offset dd 10 ;+84 ;--------------------------------------------------------------------- align 4 menu_data_1: .type: dd 0 ;+0 .x: .size_x dw 40 ;+4 .start_x dw 2 ;+6 .y: .size_y dw 15 ;+8 .start_y dw 2 ;+10 .text_pointer: dd menu_text_area ;0 ;+12 .pos_pointer: dd menu_text_area.1 ;0 ;+16 .text_end dd menu_text_area.end ;0 ;+20 .mouse_pos dd 0 ;+24 .mouse_keys dd 0 ;+28 .x1: if lang eq ru .size_x1 dw 4*2+9*6 ;+32 else .size_x1 dw 40 ;+32 end if .start_x1 dw 2 ;+34 .y1: .size_y1 dw 100 ;+36 .start_y1 dw 18 ;+38 .bckg_col dd 0xeeeeee ;+40 .frnt_col dd 0xff ;+44 .menu_col dd 0xffffff ;+48 .select dd 0 ;+52 .out_select dd 0 ;+56 .buf_adress dd 0 ;+60 .procinfo dd 0 ;+64 .click dd 0 ;+68 .cursor dd 0 ;+72 .cursor_old dd 0 ;+76 .interval dd 16 ;+80 .cursor_max dd 0 ;+84 .extended_key dd 0 ;+88 .menu_sel_col dd 0x00cc00 ;+92 .bckg_text_col dd 0 ;+96 .frnt_text_col dd 0xffffff ;+100 .mouse_keys_old dd 0 ;+104 .font_height dd 8 ;+108 .cursor_out dd 0 ;+112 .get_mouse_flag dd 0 ;+116 menu_text_area: if lang eq ru db '” ©«',0 .1: db 'Žâªàëâì',0 db '‘®åà ¨âì',0 db '‚ë室',0 else db 'File',0 .1: db 'Open',0 db 'Save',0 db 'Exit',0 end if .end: db 0 ;--------------------------------------------------------------------- align 4 menu_data_2: .type: dd 0 ;+0 .x: .size_x dw 40 ;+4 .start_x dw 43 ;+6 .y: .size_y dw 15 ;+8 .start_y dw 2 ;+10 .text_pointer: dd menu_text_area_2 ;0 ;+12 .pos_pointer: dd menu_text_area_2.1 ;0 ;+16 .text_end dd menu_text_area_2.end ;0 ;+20 .mouse_pos dd 0 ;+24 .mouse_keys dd 0 ;+28 .x1: .size_x1 dw 4*2+5*6 ;+32 .start_x1 dw 43 ;+34 .y1: .size_y1 dw 100 ;+36 .start_y1 dw 18 ;+38 .bckg_col dd 0xeeeeee ;+40 .frnt_col dd 0xff ;+44 .menu_col dd 0xffffff ;+48 .select dd 0 ;+52 .out_select dd 0 ;+56 .buf_adress dd 0 ;+60 .procinfo dd 0 ;+64 .click dd 0 ;+68 .cursor dd 0 ;+72 .cursor_old dd 0 ;+76 .interval dd 16 ;+80 .cursor_max dd 0 ;+84 .extended_key dd 0 ;+88 .menu_sel_col dd 0x00cc00 ;+92 .bckg_text_col dd 0 ; +96 .frnt_text_col dd 0xffffff ;+100 .mouse_keys_old dd 0 ;+104 .font_height dd 8 ;+108 .cursor_out dd 0 ;+112 .get_mouse_flag dd 0 ;+116 menu_text_area_2: if lang eq ru db '‚¨¤',0 .1: else db 'View',0 .1: end if db 'Add 4',0 db 'Add 8',0 db 'Sub 4',0 db 'Sub 8',0 .end: db 0 ;--------------------------------------------------------------------- align 4 menu_data_3: .type: dd 0 ;+0 .x: if lang eq ru .size_x dw 4*2+7*6 ;+32 else .size_x dw 40 ;+4 end if .start_x dw 84 ;+6 .y: .size_y dw 15 ;+8 .start_y dw 2 ;+10 .text_pointer: dd menu_text_area_3 ;0 ;+12 .pos_pointer: dd menu_text_area_3.1 ;0 ;+16 .text_end dd menu_text_area_3.end ;0 ;+20 .mouse_pos dd 0 ;+24 .mouse_keys dd 0 ;+28 .x1: if lang eq ru .size_x1 dw 4*2+7*6 ;+32 else .size_x1 dw 40 ;+32 end if .start_x1 dw 84 ;+34 .y1: .size_y1 dw 100 ;+36 .start_y1 dw 18 ;+38 .bckg_col dd 0xeeeeee ;+40 .frnt_col dd 0xff ;+44 .menu_col dd 0xffffff ;+48 .select dd 0 ;+52 .out_select dd 0 ;+56 .buf_adress dd 0 ;+60 .procinfo dd 0 ;+64 .click dd 0 ;+68 .cursor dd 0 ;+72 .cursor_old dd 0 ;+76 .interval dd 16 ;+80 .cursor_max dd 0 ;+84 .extended_key dd 0 ;+88 .menu_sel_col dd 0x00cc00 ;+92 .bckg_text_col dd 0 ; +96 .frnt_text_col dd 0xffffff ;+100 .mouse_keys_old dd 0 ;+104 .font_height dd 8 ;+108 .cursor_out dd 0 ;+112 .get_mouse_flag dd 0 ;+116 menu_text_area_3: if lang eq ru db '‘¯à ¢ª ',0 .1: db '‘¯à ¢ª ',0 else db 'Help',0 .1: db 'Help',0 end if .end: db 0 ;--------------------------------------------------------------------- edit1 edit_box 200,190,27,0xffffff,0x6a9480,0,0xAABBCC,0,134,cur_dir_path,ed_focus,ed_focus,6,6 ;ä ©« ®âªàëâì\á®åà ¨âì edit2 edit_box 55,270,29,0xeeeeee,0x6a9480,0,0xAABBCC,4,8,go_to_string,ed_focus,ed_focus,0,0 ;¯¥à¥å®¦¤ ᬥ饨¥ edit3 edit_box 55,270,29,0xeeeeee,0x6a9480,0,0xAABBCC,4,8,find_string,ed_focus,ed_focus,0,0 ;¯®¨áª edit4 edit_box 55,220,49,0xeeeeee,0x6a9480,0,0xAABBCC,4,8,sel1_string,ed_focus,ed_focus,0,0 ;¢ë¤¥«¨âì ¡«®ª ç.ᬥé. edit5 edit_box 55,300,49,0xeeeeee,0x6a9480,0,0xAABBCC,4,8,sel2_string,ed_focus,0,0,0 ;¢ë¤¥«¨âì ¡«®ª ª®.ᬥé. op1 option_box option_group1,210,50,6,12,0xffffff,0,0,op_text.1,op_text.e1-op_text.1,1 op2 option_box option_group1,310,50,6,12,0xFFFFFF,0,0,op_text.2,op_text.e2-op_text.2 op3 option_box option_group1,310,65,6,12,0xffffff,0,0,op_text.3,op_text.e3-op_text.3 op11 option_box option_group2,210,50,6,12,0xffffff,0,0,op_text2.11,op_text2.e11-op_text2.11 op12 option_box option_group2,310,50,6,12,0xffffff,0,0,op_text2.21,op_text2.e21-op_text2.21 option_group1 dd op1 ;㪠§ ⥫¨, ®¨ ®â®¡à ¦ îâáï ¯® 㬮«ç ¨î, ª®£¤ ¢ë¢®¤¨âáï option_group2 dd op11 ;¯à¨«®¦¥¨¥ Option_boxs dd op1,op2,op3,0 Option_boxs2 dd op11,op12,0 op_text: ; ‘®¯à®¢®¦¤ î騩 ⥪áâ ¤«ï 祪 ¡®ªá®¢ if lang eq ru .1 db '€¡á®«î⮥' .e1: .2 db '‚¯¥à¥¤' .e2: .3 db ' § ¤' .e3: else .1 db 'Absolutely' .e1: .2 db 'Forward' .e2: .3 db 'Back' .e3: end if op_text2: .11 db 'Hex' .e11: .21 db 'ASCII' .e21: ;-------------------------------------------------------------------- system_dir_Boxlib db '/sys/lib/box_lib.obj',0 system_dir_ProcLib db '/sys/lib/proc_lib.obj',0 sel_text db "From to",0 help_but_text = menu_text_area_3 ;db 'Help',0 head_f_i: if lang eq ru head_f_l db '®è¨¡ª ',0 err_message_found_lib1 db 'box_lib.obj - ¥ ©¤¥!',0 err_message_found_lib2 db 'proc_lib.obj - ¥ ©¤¥!',0 err_message_import1 db 'box_lib.obj - Žè¨¡ª ¨¬¯®àâ !',0 err_message_import2 db 'proc_lib.obj - Žè¨¡ª ¨¬¯®àâ !',0 error_open_file_string db "” ©« ¥ ©¤¥!",0 error_save_file_string db "” ©« ¥ á®åà ¥!",0 else head_f_l db 'error',0 err_message_found_lib1 db 'box_lib.obj - Not found!',0 err_message_found_lib2 db 'proc_lib.obj - Not found!',0 err_message_import1 db 'box_lib.obj - Wrong import!',0 err_message_import2 db 'proc_lib.obj - Wrong import!',0 error_open_file_string db "Isn't found!",0 error_save_file_string db "Isn't saved!",0 end if string_cp866 db ' cp866' string_cp1251 db 'cp1251' string_koi8r db 'koi8-r' string_ins db 'Ins' align 4 number_strings dd 16 ;ª®«¨ç¥á⢮ áâப «¨á⥠;bytes_per_line dd 16 ;ª®«-¢® á⮫¡æ®¢ group_bytes dd 8 bytes_per_line dd 16 ;blocks_counter dd 1 ;blocks_table dd 0 cursor dd 1 flags dw 001000010b ;¡¨â 0: ¢ edit_box - ¢®á¯à¨ï⨥/(¥) ¢á¥å ¢¢®¤¨¬ëå ᨬ¢®«®¢ ;1: 0/1 - ०¨¬ § ¬¥ë/¢áâ ¢ª¨ ;2: ¢ edit_box - ®¡à ¡®âª Ctrl_G ;3: ¢ edit_box - ®¡à ¡®âª Ctrl_F ;4: ¢ change_codepage - ¥á«¨ ¯®¤ïâ, â® ¢®ááâ ®¢¨âì ¯à¥¤ë¤ãéãî ª®¤¨à®¢ªã ;5: vertical_scroll_bar move ;6: ¯®« ï ¯¥à¥à¨á®¢ª ®ª ;7: horizontal_scroll_bar move ;8: 1 - ¢ë¤¥«¥ ¡«®ª ;9: ¢ edit_box - ®¡à ¡®âª Ctrl_B ;10: ¢ ¯ ¬ï⨠"¢¨á¨â" ᪮¯¨à®¢ ë© ¡«®ª ;-------------------------------------------------------------------- help_text: if lang eq ru db 'Ctrl+O - ®âªàëâì ä ©« ' db 'Ctrl+S - á®åà ¨âì ' db 'PageUp, PageDown - áâà ¨æ ¢¢¥àå/¢¨§ ' db 'Ctrl+UP, Ctrl+Down - ¯à®ªàã⪠áâà ¨æë áâà®- ' db ' ªã ¢¢¥àå/¢¨§ ¡¥§ á¬¥é¥¨ï ªãàá®à ' db 'Home,End - ¢ ç «®/ª®¥æ áâப¨ ' db 'Ctrl+Home, Ctrl+End - ¢ ç «®/ª®¥æ ä ©« ' db 'Left, Right, UP, DN - ªãàá®à ¢«¥¢®/¢¯à ¢®/¢ëè¥/¨¦¥' db 'n - ¨¢¥àâ¨à®¢ âì ¡ ©â ' db 'Ins - ०¨¬ § ¬¥ë/¢áâ ¢ª¨ ' db ' Del - 㤠«¨âì ¡ ©â ¯®¤ ªãàá®à®¬ ' db ' BackSpace - 㤠«¨âì ¡ ©â ¯¥à¥¤ ªãàá®à®¬ ' db '~ - ᬥ ª®¤¨à®¢®ª cp866,cp1251 ' db 'Shift+~ - cp866/cp1251,koi8r ' db 'Ctrl+F - ¯®¨áª ' db 'Ctrl+G - ¯¥à¥å®¤ ᬥ饨¥ ' db 'Ctrl+B - ¢ë¤¥«¨âì ¡«®ª ' db 'ESC - áïâì ¢ë¤¥«¥¨¥ ' db 'Ctrl+C - ª®¯¨à®¢ âì ¡«®ª ' db 'Ctrl+V - ¢áâ ¢¨âì ¢ ¢ë¤¥«¥ãî ®¡« áâì' db 'Ctrl+X - ¢ë१ âì ¢ ¡ãä¥à ' else db 'Ctrl+O - open file ' db 'Ctrl+S - save file ' db 'PageUp, PageDown - page up/down ' db 'Ctrl+UP, Ctrl+Down - scroll page by one string ' db ' up/down without cursor movement' db 'Home,End - at the start/end of string ' db 'Ctrl+Home, Ctrl+End - at the start/end of file ' db 'Left, Right, Up, Dn - move cursor to the lft/rght..' db 'n - invert byte ' db 'Ins - replace/past mode ' db ' Del - delete byte under cursor ' db ' BackSpace - delete byte before cursor ' db '~ - change codepages cp866,cp1251' db 'Shift+~ - cp866/cp1251,koi8r ' db 'Ctrl+F - find ' db 'Ctrl+G - go to offset ' db 'Ctrl+B - select area ' db 'ESC - deselect area ' db 'Ctrl+C - copy area ' db 'Ctrl+V - past into area from buf ' db 'Ctrl+X - cut area into buffer ' end if help_end: ;-------------------------------------------------------------------- ;align 4096 font_buffer file 'cp866-8x16' ;ASCII+cp866 (+ð,ñ) cp1251 file 'cp1251-8x16' koi8_r file 'koi8-r-8x16' title db _title ;--------------------------------------------------------------------- l_libs_start: ; load_library boxlib_name,cur_dir_path,buf_cmd_lin,system_path,\ ; err_message_found_lib,head_f_l,myimport,err_message_import,head_f_i library01 l_libs system_dir_Boxlib+9, cur_dir_path, buf_cmd_lin, system_dir_Boxlib, \ err_message_found_lib1, head_f_l, Box_lib_import, err_message_import1, head_f_i library02 l_libs system_dir_ProcLib+9, cur_dir_path, buf_cmd_lin, system_dir_ProcLib, \ err_message_found_lib2, head_f_l, ProcLib_import, err_message_import2, head_f_i end_l_libs: ;--------------------------------------------------------------------- OpenDialog_data: .type dd 0 .procinfo dd procinfo ;+4 .com_area_name dd communication_area_name ;+8 .com_area dd 0 ;+12 .opendir_pach dd temp_dir_pach ;+16 .dir_default_pach dd communication_area_default_pach ;+20 .start_path dd open_dialog_path ;+24 .draw_window dd draw_window_1 ;+28 .status dd 0 ;+32 .openfile_pach dd fname_buf ;+36 .filename_area dd filename_area ;+40 .filter_area dd Filter .x: .x_size dw 420 ;+48 ; Window X size .x_start dw 10 ;+50 ; Window X position .y: .y_size dw 320 ;+52 ; Window y size .y_start dw 10 ;+54 ; Window Y position communication_area_name: db 'FFFFFFFF_open_dialog',0 open_dialog_path: if __nightbuild eq yes db '/sys/MANAGERS/opendial',0 else db '/sys/File Managers/opendial',0 end if communication_area_default_pach: db '/rd/1',0 Filter: dd Filter.end - Filter.1 .1: ;db 'BIN',0 ;db 'DAT',0 .end: db 0 start_temp_file_name: db 'temp.bin',0 ;--------------------------------------------------------------------- I_END: ;-------------------------------------------------------------------- file_name: cur_dir_path rb 4096 buf_cmd_lin rb 0 procinfo: ;opendialog threath_buf: rb 0x400 path: rb 1024+16 ;opendialog screen_table rd 1 begin_offset rd 1 file_buffer rd 1 copy_buf rd 1 copy_len rd 1 current_offset rd 1 ; rd 1 ;¯®¤ áâ à訩 dword codepage_offset rd 1 codepage_offset_previous rd 1 low_area rd 1 ;ª®®à¤¨ âë ¨¦¥© áâப¨ right_table_xy rd 1 prev_f_size_bl rd 1 len_str_scr rd 1 beg_str_scr rd 1 shblock_beg rd 1 ;ᬥ饨¥ ç « ¡«®ª shblock_end rd 1 ;ᬥ饨¥ ª®æ ¡«®ª ;mouse_flag rd 1 file_size rd 1 ; rd 1 ;¯®¤ áâ à訩 dword active_process rd 1 ed_box_data: rd 8 ;¯¥à¢ë© dword -ª®«-¢® í«¥¬¥â®¢ ¤«ï ®¡à ¡®âª¨, ¤ «¥¥ 㪠§ ⥫¨ editX; bufferfinfo rb 40 hex8_string rb 9 ;¡ãä¥à ¤«ï hex_output go_to_string rb 9 find_string rb 17 sel1_string rb 9 sel2_string rb 9 cur_help_string rb 1 ;®¬¥à áâப¨, á ª®â®à®© ¢ë¢®¤¨âáï ⥪áâ ¢ help - ®ª¥ help_is_open_already rb 1 ;¥á«¨ ®ª® á¯à ¢ª¨ ®âªàëâ®, â® §¤¥áì 1 help_window_pid rd 1 func_70 f70 ;--------------------------------------------------------------------- title_buf: rb 4096 ;--------------------------------------------------------------------- fname_buf: rb 4096 ;--------------------------------------------------------------------- temp_dir_pach: rb 4096 ;--------------------------------------------------------------------- filename_area: rb 256 ;--------------------------------------------------------------------- D_END: