Subversion Repositories Kolibri OS

Rev

Rev 5643 | Rev 5671 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;Огромная благодарность всем, кто помогал: кодом/советом/дизайном ...
  2.  
  3. use32
  4.   org 0x0
  5.   db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт
  6.   dd 0x01
  7.   dd start
  8.   dd i_end ; размер приложения
  9.   dd mem
  10.   dd stacktop
  11.   dd file_name ; command line
  12.   dd sys_path
  13.  
  14. MAX_COLOR_WORD_LEN equ 40
  15. maxChars equ 100002 ;(...+2)
  16. BUF_SIZE equ 4096 ;buffer for copy|paste
  17. maxSyntaxFileSize equ 410000
  18. TOOLBAR_ICONS_SIZE equ 1200*20
  19.  
  20. include '../../proc32.inc'
  21. ;include '../../config.inc'
  22. include '../../macros.inc'
  23. include '../../dll.inc'
  24. include '../../develop/libraries/box_lib/load_lib.mac'
  25. include '../../develop/libraries/box_lib/trunk/box_lib.mac'
  26. include '../../system/desktop/trunk/kglobals.inc'
  27. include '../../system/desktop/trunk/unpacker.inc'
  28. include 'lang.inc'
  29.  
  30. include 't_data.inc'
  31. include 'strlen.inc'
  32. include 't_draw.inc' ;draw main window functions
  33. include 't_button.inc' ;text work functions
  34. include 'wnd_k_words.inc'
  35.  
  36. @use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
  37.  
  38.  
  39. ;Макрос для загрузки изображений с использованием библиотеки libimg.obj
  40. ;для использования макроса нужны переменные:
  41. ; - run_file_70 FileInfoBlock
  42. ; - image_data dd 0
  43. macro load_image_file path,buf,size
  44. {
  45.         ;path - может быть переменной или строковым параметром
  46.         if path eqtype '' ;проверяем задан ли строкой параметр path
  47.                 jmp @f
  48.                         local .path_str
  49.                         .path_str db path ;формируем локальную переменную
  50.                         db 0
  51.                 @@:
  52.                 ;32 - стандартный адрес по которому должен быть буфер с системным путем
  53.                 copy_path .path_str,[32],file_name,0x0
  54.         else
  55.                 copy_path path,[32],file_name,0x0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой
  56.         end if
  57.  
  58.         stdcall mem.Alloc, dword size ;выделяем память для изображения
  59.         mov [buf],eax
  60.  
  61.         mov eax,70 ;70-я функция работа с файлами
  62.         mov [run_file_70.Function], 0
  63.         mov [run_file_70.Position], 0
  64.         mov [run_file_70.Flags], 0
  65.         mov [run_file_70.Count], dword size
  66.         m2m [run_file_70.Buffer], [buf]
  67.         mov byte[run_file_70+20], 0
  68.         mov [run_file_70.FileName], file_name
  69.         mov ebx,run_file_70
  70.         int 0x40 ;загружаем файл изображения
  71.         cmp ebx,0xffffffff
  72.         je @f
  73.                 ;определяем вид изображения и переводим его во временный буфер image_data
  74.                 stdcall dword[img_decode], dword[buf],ebx,0
  75.                 mov dword[image_data],eax
  76.                 ;преобразуем изображение к формату rgb
  77.                 stdcall dword[img_to_rgb2], dword[image_data],dword[buf]
  78.                 ;удаляем временный буфер image_data
  79.                 stdcall dword[img_destroy], dword[image_data]
  80.         @@:
  81. }
  82.  
  83. image_data dd 0 ;указатель на временную память. для нужен преобразования изображения
  84. icon_tl_sys dd 0 ;указатель на память для хранения системных иконок
  85.  
  86. align 4
  87. start:
  88.         mcall 48,3,sc,sizeof.system_colors
  89.  
  90.         mcall 68,11
  91.         or eax,eax
  92.         jz button.exit
  93.  
  94.         mcall 66,1,1 ;scan code
  95.         mcall 40,0xC0000027
  96.  
  97.         mov esi,file_name
  98.         call strlen
  99.         mov ecx,eax
  100.         mov edi,openfile_path
  101.         cld
  102.         rep movsb ;копируем имя файла в буфер openfile_path
  103.  
  104. load_libraries l_libs_start,load_lib_end
  105.  
  106. ;проверка на сколько удачно загузились библиотеки
  107. mov     ebp,lib0
  108. .test_lib_open:
  109.         cmp     dword [ebp+ll_struc_size-4],0
  110.         jz      @f
  111.         mcall -1 ;exit not correct
  112. @@:
  113.         add ebp,ll_struc_size
  114.         cmp ebp,load_lib_end
  115.         jl .test_lib_open
  116.  
  117. ;---------------------------------------------------------------------
  118.         stdcall [ted_init], tedit0
  119.         stdcall dword[tl_data_init], tree1
  120.  
  121. ; OpenDialog initialisation
  122.         stdcall [OpenDialog_Init],OpenDialog_data
  123.  
  124. ; kmenu initialisation 
  125.         stdcall [kmenu_init], sc
  126.        
  127.         stdcall [ksubmenu_new]
  128.         mov [main_menu], eax
  129.        
  130.         stdcall [ksubmenu_new]
  131.         mov [main_menu_file], eax
  132.        
  133.         stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_File_New, 3
  134.         stdcall [ksubmenu_add], [main_menu_file], eax
  135.         stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_File_Open, 4
  136.         stdcall [ksubmenu_add], [main_menu_file], eax
  137.         stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_File_Save, 5
  138.         stdcall [ksubmenu_add], [main_menu_file], eax
  139.         stdcall [kmenuitem_new], KMENUITEM_SEPARATOR, 0, 0
  140.         stdcall [ksubmenu_add], [main_menu_file], eax
  141.         stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_File_Exit, 199
  142.         stdcall [ksubmenu_add], [main_menu_file], eax
  143.        
  144.         stdcall [kmenuitem_new], KMENUITEM_SUBMENU, sz_main_menu_File, [main_menu_file]
  145.         stdcall [ksubmenu_add], [main_menu], eax
  146.  
  147. ; init toolbar file
  148.         load_image_file 'te_icon.png', bmp_icon,TOOLBAR_ICONS_SIZE*2 ;умножение на 2 для серых кнопок
  149.         mov eax,[bmp_icon]
  150.         add eax,TOOLBAR_ICONS_SIZE
  151.         stdcall img_to_gray, [bmp_icon],eax,(TOOLBAR_ICONS_SIZE)/3
  152. ;---------------------------------------------------------------------
  153. ; читаем файл с курсорами и линиями
  154.         load_image_file 'tl_sys_16.png', icon_tl_sys,54+3*256*13
  155.         mov eax,dword[icon_tl_sys]
  156.         mov dword[tree1.data_img_sys],eax
  157. ;---------------------------------------------------------------------
  158. ; читаем файл с иконками узлов
  159.         load_image_file 'tl_nod_16.png', icon_tl_sys,54+3*256*2
  160.         mov eax,dword[icon_tl_sys]
  161.         mov dword[tree1.data_img],eax
  162. ;------------------------------------------------------------------------------
  163.   copy_path fn_syntax_dir,sys_path,file_name,0x0 ;берем путь к папке с файлами синтаксиса
  164.   mov eax,70
  165.   mov ebx,tree_file_struct
  166.   int 0x40
  167.  
  168. cmp ebx,-1
  169. je .end_dir_init
  170.  
  171.   mov eax,dir_mem
  172.   add eax,32+4+1+3+4*6+8
  173. mov ecx,ebx
  174. @@:
  175.   cmp byte[eax],'.' ;фильтруем файлы с именами '.' и '..'
  176.   je .filter
  177.     ;0x10000 ;1*2^16 - где 1 номер иконки с книгой
  178.     stdcall dword[tl_node_add], eax,0x10000, tree1
  179.  
  180.     stdcall dword[tl_cur_next], tree1
  181.   .filter:
  182.   add eax,304
  183.   loop @b
  184.   stdcall dword[tl_cur_beg],tree1 ;ставим курсор на начало списка
  185. .end_dir_init:
  186.  
  187. ;--- load ini file ---
  188.         copy_path ini_name,sys_path,file_name,0
  189.         ;window startup pozition
  190.         stdcall dword[ini_get_int],file_name,ini_sec_window,key_window_l,ini_def_window_l
  191.         mov word[wnd_s_pos+2],ax
  192.         stdcall dword[ini_get_int],file_name,ini_sec_window,key_window_w,ini_def_window_w
  193.         mov word[wnd_s_pos],ax
  194.         stdcall dword[ini_get_int],file_name,ini_sec_window,key_window_t,ini_def_window_t
  195.         mov word[wnd_s_pos+6],ax
  196.         stdcall dword[ini_get_int],file_name,ini_sec_window,key_window_h,ini_def_window_h
  197.         mov word[wnd_s_pos+4],ax
  198.         ;scrool type
  199.         stdcall dword[ini_get_int],file_name,ini_sec_window,key_scroll_type,ini_def_scroll_type
  200.         mov [wScr.type],eax
  201.         mov [hScr.type],eax
  202.         mov [ws_dir_lbox.type],eax
  203.     mov [w_scr_t3.type],eax
  204.         ;symbol size
  205.         stdcall dword[ini_get_int],file_name,ini_sec_window,key_symbol_w,ini_def_symbol_w
  206.         mov dword[tedit0.rec.width],eax
  207.         stdcall dword[ini_get_int],file_name,ini_sec_window,key_symbol_h,ini_def_symbol_h
  208.         mov dword[tedit0.rec.height],eax
  209.         lea eax,[eax+eax*2]
  210.         mov dword[tedit0.rec.top],eax
  211.         ;файловые расширения
  212.         xor edx,edx
  213.         mov ebx,synt_auto_open
  214.         @@:
  215.                 ;берем имя файла
  216.                 stdcall dword[ini_get_str],file_name,ini_sec_options,key_synt_file,ebx,32,ini_def_synt_f
  217.                 cmp byte[ebx],0
  218.                 je @f
  219.                 inc byte[key_synt_file.numb]
  220.                 add ebx,32
  221.                 ;берем расширения
  222.                 stdcall dword[ini_get_str],file_name,ini_sec_options,key_synt_ext,ebx,32,ini_def_synt_f
  223.                 inc byte[key_synt_ext.numb]
  224.                 add ebx,32
  225.                 inc edx
  226.                 cmp edx,max_synt_auto_open
  227.                 jl @b
  228.         @@:
  229.  
  230. ;--- load color option file ---
  231.         mov ebx,dword[fn_col_option]
  232.         call open_unpac_synt_file
  233.  
  234. ;--- get cmd line ---
  235.         cmp byte[openfile_path+3],0 ;openfile_path
  236.         je @f ;if file names exist
  237.                 mov esi,openfile_path
  238.                 call strlen ;eax=strlen
  239.                 call but_no_msg_OpenFile
  240.         @@:
  241.  
  242.  
  243.  
  244. align 4
  245. red_win:
  246.   call draw_window
  247.  
  248. align 4
  249. still:
  250.         mcall 10
  251.         cmp dword[exit_code],1
  252.         je button.exit
  253.  
  254.         cmp al,1 ;изменилось положение окна
  255.         jz red_win
  256.         cmp al,2
  257.         jz key
  258.         cmp al,3
  259.         jz button
  260.         cmp al,6 ;мышь
  261.         jne @f
  262.                 jmp mouse
  263.         @@:
  264.         jmp still
  265.  
  266. align 4
  267. draw_window:
  268.         mcall 12,1
  269.  
  270.         mov edx,[sc.work]
  271.         or  edx,0x73000000
  272.         mov edi,hed
  273.         mcall 0,dword[wnd_s_pos],dword[wnd_s_pos+4]
  274.  
  275.         mcall 9,procinfo,-1
  276.         mov edi,tedit0 ;значение edi нужно для EvSize и ted_wnd_t
  277.         call EvSize
  278.  
  279.         mov eax,13 ;верхний прямоугольник, для очистки верхней панели
  280.         xor ebx,ebx
  281.         mov ecx,ted_wnd_t
  282.         mov bx,word[procinfo.client_box.width]
  283.         inc bx
  284.         int 0x40
  285.  
  286.         call draw_but_toolbar
  287.        
  288.         stdcall [kmainmenu_draw], [main_menu]
  289.  
  290.         stdcall [ted_draw], tedit0
  291.  
  292.         mcall 12,2
  293.         ret
  294.  
  295. align 4
  296. mouse:
  297.         stdcall [kmainmenu_dispatch_cursorevent], [main_menu]
  298.         stdcall [ted_mouse], tedit0
  299.  
  300.         cmp byte[tedit0.panel_id],TED_PANEL_FIND ;if not panel
  301.         jne @f
  302.                 stdcall [edit_box_mouse], dword edit2
  303.         @@:
  304.         cmp byte[tedit0.panel_id],TED_PANEL_SYNTAX ;if not panel
  305.         jne .mouse_end
  306.         stdcall [tl_mouse], tree1
  307. .mouse_end:
  308.         jmp still
  309. ;---------------------------------------------------------------------
  310.  
  311. ;output:
  312. ; ah = symbol
  313. align 4
  314. proc KeyConvertToASCII, table:dword
  315.   push ebx
  316.   mov ebx,dword[table] ;convert scan to ascii
  317.   ror ax,8
  318.   xor ah,ah
  319.   add bx,ax
  320.   mov ah,byte[ebx]
  321.   pop ebx
  322.   ret
  323. endp
  324.  
  325. align 4
  326. key:
  327.   mcall 66,3 ;66.3 получить состояние управляющих клавиш
  328.   xor esi,esi
  329.   mov ecx,1
  330.   test al,0x03 ;[Shift]
  331.   jz @f
  332.     mov cl,2
  333.     or esi,KM_SHIFT
  334.   @@:
  335.   test al,0x0c ;[Ctrl]
  336.   jz @f
  337.     or esi,KM_CTRL
  338.   @@:
  339.   test al,0x30 ;[Alt]
  340.   jz @f
  341.     mov cl,3
  342.     or esi,KM_ALT
  343.   @@:
  344.   test al,0x80 ;[NumLock]
  345.   jz @f
  346.     or esi,KM_NUMLOCK
  347.   @@:
  348.  
  349.   mcall 26,2,,conv_tabl ;26.2 получить раскладку клавиатуры
  350.   mcall 2 ;получаем код нажатой клавиши
  351.   stdcall [tl_key], tree1
  352.  
  353.   test word [edit2.flags],10b;ed_focus ; если не в фокусе, выходим
  354.   je @f
  355.     cmp ah,0x80 ;if key up
  356.     ja still
  357.     cmp ah,42 ;[Shift] (left)
  358.     je still
  359.     cmp ah,54 ;[Shift] (right)
  360.     je still
  361.     cmp ah,56 ;[Alt]
  362.     je still
  363.     cmp ah,29 ;[Ctrl]
  364.     je still
  365.     cmp ah,69 ;[Pause Break]
  366.     je still
  367.  
  368.     stdcall KeyConvertToASCII, dword conv_tabl
  369.     stdcall [edit_box_key], dword edit2
  370.     jmp still
  371.   @@:
  372.  
  373.   stdcall [ted_key], tedit0, conv_tabl,esi
  374.   jmp still
  375.  
  376. align 4
  377. button:
  378.  
  379.   mcall 17 ;получить код нажатой кнопки
  380.   cmp ah,3
  381.   jne @f
  382.     call ted_but_new_file
  383.   @@:
  384.   cmp ah,4
  385.   jne @f
  386.     call ted_but_open_file
  387.   @@:
  388.   cmp ah,5
  389.   jne @f
  390.     call ted_but_save_file
  391.   @@:
  392.   cmp ah,6
  393.   jne @f
  394.     stdcall [ted_but_select_word], tedit0
  395.   @@:
  396.   cmp ah,7
  397.   jne @f
  398.     stdcall [ted_but_cut], tedit0
  399.   @@:
  400.   cmp ah,8
  401.   jne @f
  402.     stdcall [ted_but_copy], tedit0
  403.   @@:
  404.   cmp ah,9
  405.   jne @f
  406.     stdcall [ted_but_paste], tedit0
  407.   @@:
  408.   cmp ah,10
  409.   jne @f
  410.     call ted_but_find
  411.   @@:
  412.   cmp ah,11
  413.   jne @f
  414.     call but_replace
  415.   @@:
  416.   cmp ah,12
  417.   jne @f
  418.     call but_find_key_w
  419.   @@:
  420.   cmp ah,13
  421.   jne @f
  422.     stdcall [ted_but_sumb_upper], tedit0
  423.   @@:
  424.   cmp ah,14
  425.   jne @f
  426.     stdcall [ted_but_sumb_lover], tedit0
  427.   @@:
  428.   cmp ah,15
  429.   jne @f
  430.     stdcall [ted_but_reverse], tedit0
  431.   @@:
  432.   cmp ah,16
  433.   jne @f
  434.     stdcall [ted_but_undo], tedit0
  435.   @@:
  436.   cmp ah,17
  437.   jne @f
  438.     stdcall [ted_but_redo], tedit0
  439.   @@:
  440.   cmp ah,18
  441.   jne @f
  442.     stdcall but_sumb_invis, tedit0
  443.   @@:
  444.   cmp ah,19
  445.   jne @f
  446.     stdcall but_k_words_show, tedit0
  447.   @@:
  448.   cmp ah,20
  449.   jne @f
  450.     stdcall but_synt_show, tedit0
  451.   @@:
  452.   cmp ah,21
  453.   jne @f
  454.     stdcall [ted_but_convert_by_table],tedit0,tbl_1251_866
  455.   @@:
  456.   cmp ah,22
  457.   jne @f
  458.     stdcall [ted_but_convert_by_table],tedit0,tbl_866_1251
  459.   @@:
  460.  
  461.   cmp ah,200
  462.   jne @f
  463.     stdcall ted_but_open_syntax, tedit0
  464.   @@:
  465.   cmp ah,201
  466.   jne @f
  467.     stdcall [ted_but_find_next], tedit0
  468.   @@:
  469.  
  470.   cmp ah,1
  471.   je .exit
  472.  
  473.   cmp ah,199
  474.   je .exit
  475.  
  476.   jmp still
  477. .exit:
  478.         cmp dword[exit_code],1
  479.         je @f
  480.         stdcall [ted_can_save], tedit0
  481.         cmp al,1
  482.         jne @f
  483.                 stdcall [mb_create],msgbox_2,thread ;message: save changes in file?
  484.                 stdcall [mb_setfunctions],msgbox_2E_funct
  485.                 jmp still
  486.         @@:
  487.         stdcall mem.Free,[bmp_icon]
  488.         cmp dword[unpac_mem],0
  489.         je @f
  490.                 stdcall mem.Free,[unpac_mem]
  491.         @@:
  492.  
  493.         stdcall [ted_delete], tedit0
  494.         stdcall dword[tl_data_clear], tree1
  495.         mcall -1 ;выход из программы
  496.  
  497. edit2 edit_box TED_PANEL_WIDTH-1, 0, 20, 0xffffff, 0xff80, 0xff0000, 0xff, 0x4080, 300, buf_find, mouse_dd, 0
  498.  
  499. unpac_mem dd 0
  500.  
  501. if lang eq ru
  502.   head_f_i:
  503.   head_f_l db 'Системная ошибка',0
  504.   err_message_found_lib0 db 'Не найдена библиотека ',39,'box_lib.obj',39,0
  505.   err_message_import0 db 'Ошибка при импорте библиотеки ',39,'box_lib.obj',39,0
  506.   err_message_found_lib1 db 'Не найдена библиотека ',39,'msgbox.obj',39,0
  507.   err_message_import1 db 'Ошибка при импорте библиотеки ',39,'msgbox.obj',39,0
  508.   err_message_found_lib2 db 'Не найдена библиотека ',39,'proc_lib.obj',39,0
  509.   err_message_import2 db 'Ошибка при импорте библиотеки ',39,'proc_lib.obj',39,0
  510.   err_message_found_lib_3 db 'Не найдена библиотека ',39,'libimg.obj',39,0
  511.   err_message_import_3 db 'Ошибка при импорте библиотеки ',39,'libimg.obj',39,0
  512.   err_message_found_lib_4 db 'Не найдена библиотека ',39,'libini.obj',39,0
  513.   err_message_import_4 db 'Ошибка при импорте библиотеки ',39,'libini.obj',39,0
  514.   err_message_found_lib_5 db 'Не найдена библиотека ',39,'libkmenu.obj',39,0
  515.   err_message_import_5 db 'Ошибка при импорте библиотеки ',39,'libkmenu.obj',39,0
  516. else
  517.   head_f_i:
  518.   head_f_l db 'System error',0
  519.   err_message_found_lib0 db 'Sorry I cannot found library ',39,'box_lib.obj',39,0
  520.   err_message_import0 db 'Error on load import library ',39,'box_lib.obj',39,0
  521.   err_message_found_lib1 db 'Sorry I cannot found library ',39,'msgbox.obj',39,0
  522.   err_message_import1 db 'Error on load import library ',39,'msgbox.obj',39,0
  523.   err_message_found_lib2 db 'Sorry I cannot found library ',39,'proc_lib.obj',39,0
  524.   err_message_import2 db 'Error on load import library ',39,'proc_lib.obj',39,0
  525.   err_message_found_lib_3 db 'Sorry I cannot found library ',39,'libimg.obj',39,0
  526.   err_message_import_3 db 'Error on load import library ',39,'libimg.obj',39,0
  527.   err_message_found_lib_4 db 'Sorry I cannot found library ',39,'libini.obj',39,0
  528.   err_message_import_4 db 'Error on load import library ',39,'libini.obj',39,0
  529.   err_message_found_lib_5 db 'Sorry I cannot found library ',39,'libkmenu.obj',39,0
  530.   err_message_import_5 db 'Error on load import library ',39,'libkmenu.obj',39,0
  531. end if
  532.  
  533. ;library structures
  534. l_libs_start:
  535.         lib0 l_libs lib_name_0, sys_path, file_name, system_dir_0,\
  536.                 err_message_found_lib0, head_f_l, import_box_lib,err_message_import0, head_f_i
  537.         lib1 l_libs lib_name_1, sys_path, file_name, system_dir_1,\
  538.                 err_message_found_lib1, head_f_l, import_msgbox_lib, err_message_import1, head_f_i
  539.         lib2 l_libs lib_name_2, sys_path, file_name, system_dir_2,\
  540.                 err_message_found_lib2, head_f_l, import_proclib, err_message_import2, head_f_i
  541.         lib3 l_libs lib_name_3, sys_path, file_name, system_dir_3,\
  542.                 err_message_found_lib_3, head_f_l, import_libimg, err_message_import_3, head_f_i
  543.         lib4 l_libs lib_name_4, sys_path, file_name, system_dir_4,\
  544.                 err_message_found_lib_4, head_f_l, import_libini, err_message_import_4, head_f_i
  545.         lib5 l_libs lib_name_5, sys_path, file_name, system_dir_5,\
  546.                 err_message_found_lib_5, head_f_l, import_libkmenu, err_message_import_5, head_f_i
  547. load_lib_end:
  548.  
  549. IncludeIGlobals
  550. hed db 'TextEdit '
  551. i_end:
  552.         openfile_path: ;полный путь к файлу с которым идет работа
  553.                 rb 4096
  554.         dir_mem rb 32+304*count_of_dir_list_files
  555.         wnd_s_pos: ;место для настроек стартовой позиции окна
  556.                 rq 1
  557.         last_open_synt_file rb 32 ;имя последнего подключенного файла синтаксиса
  558.         buf rb BUF_SIZE ;буфер для копирования и вставки
  559.         buf_find rb 302 ;буфер для поиска текста
  560. IncludeUGlobals
  561.         align 16
  562.         procinfo process_information
  563.                 rb 1024
  564.         thread:
  565.         rb 1024
  566.     thread_coords:
  567.         rb 1024
  568. stacktop:
  569.         sys_path: ;путь откуда запустился исполняемый файл
  570.                 rb 4096
  571.         file_name: ;параметры запуска
  572.                 rb 4096
  573.         syntax_path: ;имя подключаемого файла синтаксиса
  574.                 rb 4096
  575.         plugin_path:
  576.                 rb 4096
  577.         text_work_area: ;путь к файлу, который показывается в окне
  578.                 rb 4096
  579.         filename_area: ;имя файла для диалога открытия/закрытия
  580.                 rb 256
  581.         file_info:
  582.                 rb 40
  583. mem:
  584.