Subversion Repositories Kolibri OS

Rev

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

  1. ;Огромная благодарность Maxxxx32, Diamond, Heavyiron
  2. ;и другим программистам, а также
  3. ;Теплову Алексею (<Lrz> www.lrz.land.ru)
  4. use32
  5.   org 0x0
  6.   db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт
  7.   dd 0x1
  8.   dd start
  9.   dd i_end ; размер приложения
  10.   dd mem
  11.   dd stacktop
  12.   dd 0x0
  13.   dd sys_path
  14.  
  15. include '../../proc32.inc'
  16. include '../../macros.inc'
  17. include 'mem.inc'
  18. include 'dll.inc'
  19.  
  20. include '../../develop/libraries/box_lib/load_lib.mac'
  21. include '../../develop/libraries/box_lib/trunk/box_lib.mac'
  22.  
  23. min_window_w equ 485 ;минимальная ширина окна
  24. min_window_h equ 325 ;минимальная высота окна
  25. otst_panel_left equ 265
  26.  
  27. include 'tile_fun.inc'
  28. include 'pl_import.inc'
  29.  
  30.   @use_library
  31.  
  32. struct f70
  33.   func_n dd ?
  34.   param1 dd ?
  35.   param2 dd ?
  36.   param3 dd ?
  37.   param4 dd ?
  38.   rezerv db ?
  39.   name dd ?
  40. ends
  41.  
  42. fn_metki db 'pl_metki.lst',0
  43. fn_icon1 db 'tl_sys_16.png',0
  44. fn_icon2 db 'tl_nod_16.bmp',0
  45.  
  46. ini_name db 'planet_v.ini',0
  47. ini_sec  db 'Map',0
  48. ini_k_cache db 'Cache',0
  49. ini_def_cache db '/cache/sat',0
  50. ini_ext  db 'ext'
  51. .number  db '?'
  52. .def db 0 ;расширение по умолчанию
  53.  
  54.  
  55. align 4
  56. start:
  57.   load_libraries l_libs_start,load_lib_end
  58.  
  59. ;проверка на сколько удачно загузилась наша либа
  60.         mov     ebp,lib0
  61.         cmp     dword [ebp+ll_struc_size-4],0
  62.         jz      @f
  63.         mcall   -1      ;exit not correct
  64. @@:
  65.         mov     ebp,lib1
  66.         cmp     dword [ebp+ll_struc_size-4],0
  67.         jz      @f
  68.         mcall   -1      ;exit not correct
  69. @@:
  70.         mov     ebp,lib2
  71.         cmp     dword [ebp+ll_struc_size-4],0
  72.         jz      @f
  73.         mcall   -1      ;exit not correct
  74. @@:
  75.         mov     ebp,lib3
  76.         cmp     dword [ebp+ll_struc_size-4],0
  77.         jz      @f
  78.         mcall   -1      ;exit not correct
  79. @@:
  80.  
  81.   stdcall dll.Init,dword[lib_init]
  82.   stdcall dll.Init,dword[lib_init_ini]
  83.  
  84.   copy_path ini_name,sys_path,file_name,0x0
  85.   stdcall dword[ini_get_str],file_name,ini_sec,ini_k_cache,dword[edit1.text],dword[edit1.max],ini_def_cache
  86.   stdcall [str_len],dword[edit1.text],dword[edit1.max]
  87.   mov dword[edit1.size],eax
  88.   mov dword[edit1.pos],eax
  89.  
  90.   stdcall dword[tl_data_init], tree1
  91.   stdcall dword[tl_data_init], tree2
  92.  
  93. ;считываем расширения карт из *.ini файла
  94.   mov byte[ini_ext.number],'0'
  95. @@: ;считываем параметры от ext1 до ext9
  96.   inc byte[ini_ext.number]
  97.   stdcall dword[ini_get_str],file_name,ini_sec,ini_ext,txt_tile_type_0,dword[tree1.info_capt_len],ini_ext.def
  98.   cmp byte[txt_tile_type_0],0
  99.   je @f
  100.     stdcall dword[tl_node_add], txt_tile_type_0, 0, tree1
  101.   jmp @b
  102. @@:
  103.   mov byte[ini_ext.number],'0' ;считываем параметр от ext0 который будет выбран в списке
  104.   stdcall dword[ini_get_str],file_name,ini_sec,ini_ext,txt_tile_type_0,dword[tree1.info_capt_len],ini_ext.def
  105.   cmp byte[txt_tile_type_0],0
  106.   jne @f
  107.     mov dword[txt_tile_type_0],'.bmp' ;если в *.ini файле ничего нет добавляем расширение .bmp
  108.   @@:
  109.   stdcall dword[tl_node_add], txt_tile_type_0, 0, tree1
  110.  
  111. ; init bmp file
  112.   push dword RGB_TILE_SIZE+300 ;300 - запасные байты с учетом заголовка bmp файла
  113.   call mem.Alloc
  114.   mov [bmp_icon],eax
  115.  
  116.   stdcall array_tile_function, tile_00,max_tiles_count,tile_init
  117.   stdcall tiles_init_grid, tile_00,max_tiles_count,max_tiles_cols
  118.  
  119.   push dword TREE_ICON_SYS16_BMP_SIZE
  120.   call mem.Alloc
  121.   mov [tree_sys_icon],eax
  122.  
  123.   push dword TREE_ICON_NOD16_BMP_SIZE
  124.   call mem.Alloc
  125.   mov [tree_nod_icon],eax
  126.  
  127.   copy_path fn_icon1,sys_path,file_name,0x0
  128.   mov eax,70 ;load icon file
  129.   mov [run_file_70.func_n], 0
  130.   mov [run_file_70.param1], 0
  131.   mov [run_file_70.param2], 0
  132.   mov [run_file_70.param3], TREE_ICON_SYS16_BMP_SIZE
  133.   m2m [run_file_70.param4], [tree_sys_icon]
  134.   mov [run_file_70.rezerv], 0
  135.   mov [run_file_70.name], file_name
  136.   mov ebx,run_file_70
  137.   int 0x40
  138.   cmp ebx,0xffffffff
  139.   je @f
  140.     stdcall dword[img_decode], dword[tree_sys_icon],ebx,0
  141.     mov dword[data_icon],eax
  142.     stdcall dword[img_to_rgb2], dword[data_icon],dword[tree_sys_icon]
  143.     stdcall dword[img_destroy], dword[data_icon]
  144.  
  145.     m2m dword[tree1.data_img_sys],dword[tree_sys_icon]
  146.     m2m dword[tree2.data_img_sys],dword[tree_sys_icon]
  147.   @@:
  148.  
  149.  
  150.   copy_path fn_icon2,sys_path,file_name,0x0
  151.   mov eax,70 ;load icon file
  152.   mov [run_file_70.param3], TREE_ICON_NOD16_BMP_SIZE
  153.   m2m [run_file_70.param4], [tree_nod_icon]
  154.   mov ebx,run_file_70
  155.   int 0x40
  156.   cmp ebx,0xffffffff
  157.   je @f
  158.     stdcall dword[img_decode], dword[tree_nod_icon],ebx,0
  159.     mov dword[data_icon],eax
  160.     stdcall dword[img_to_rgb2], dword[data_icon],dword[tree_nod_icon]
  161.     stdcall dword[img_destroy], dword[data_icon]
  162.  
  163.     m2m dword[tree1.data_img],dword[tree_nod_icon]
  164.     m2m dword[tree2.data_img],dword[tree_nod_icon]
  165.   @@:
  166.  
  167.   mcall 40,0x27
  168.  
  169.   mcall 48,3,sc,sizeof.system_colors
  170.   ;установка системных цветов
  171.   edit_boxes_set_sys_color edit1,editboxes_end,sc
  172.   check_boxes_set_sys_color ch1,checkboxes_end,sc
  173.  
  174.   mov byte[file_name],0
  175.  
  176. red_win:
  177.   call draw_win
  178.   call but_MetLoad
  179.  
  180. still:
  181.   mov eax,10
  182.   mcall
  183.  
  184.   cmp al,0x1 ;изм. положение окна
  185.   jz red_win
  186.   cmp al,0x2
  187.   jz key
  188.   cmp al,0x3
  189.   jz button
  190.  
  191.   push dword ch2
  192.   call [check_box_mouse]
  193.   push dword ch1
  194.   call [check_box_mouse]
  195.  
  196.   stdcall [edit_box_mouse], edit1
  197.   stdcall [edit_box_mouse], edit2
  198.  
  199.   stdcall [tl_mouse], tree1
  200.   stdcall [tl_mouse], tree2
  201.  
  202.   jmp still
  203.  
  204. key:
  205.   push eax ebx
  206.   mcall 2
  207.   stdcall [edit_box_key], edit1
  208.   stdcall [edit_box_key], edit2
  209.  
  210.   push dword tree1
  211.   call [tl_key]
  212.   push dword tree2
  213.   call [tl_key]
  214.  
  215.   mov ebx,dword[el_focus] ;ўЄю-с√ ърЁЄр эх фтшурырё№ хёыш юъэр treelist т Їюъєёх
  216.   cmp ebx, dword tree1
  217.   je .end_f
  218.   cmp ebx, dword tree2
  219.   je .end_f
  220.  
  221.   ;ўЄю-с√ ърЁЄр эх фтшурырё№ хёыш ЄхъёЄют√х яюы  т Їюъєёх
  222.   test word[edit1.flags],10b ;ed_focus
  223.   jne .end_f
  224.   test word[edit2.flags],10b ;ed_focus
  225.   jne .end_f
  226.  
  227.     cmp ah,179 ;Right
  228.     jne @f
  229.       call CursorMoveRight
  230.     @@:
  231.     cmp ah,176 ;Left
  232.     jne @f
  233.     cmp dword[map.coord_x],0
  234.     je @f
  235.       dec dword[map.coord_x]
  236.       ;сдвигаем сетку тайлов вправо, что-бы часть тайлов совпали и пришлось меньше загружать новых
  237.       stdcall tiles_grid_move_right, tile_00,max_tiles_count,max_tiles_cols
  238.       call but_Refresh
  239.     @@:
  240.     cmp ah,177 ;Down
  241.     jne @f
  242.       call CursorMoveDown
  243.     @@:
  244.     cmp ah,178 ;Up
  245.     jne @f
  246.     cmp dword[map.coord_y],0
  247.     je @f
  248.       dec dword[map.coord_y]
  249.       ;сдвигаем сетку тайлов вниз
  250.       stdcall tiles_grid_move_down, tile_00,max_tiles_count,max_tiles_rows
  251.       call but_Refresh
  252.     @@:
  253.  
  254.     cmp ah,45 ;-
  255.     jne @f
  256.       call but_ZoomM
  257.     @@:
  258.     cmp ah,61 ;+
  259.     jne @f
  260.       call but_ZoomP
  261.     @@:
  262.  
  263.   .end_f:
  264.   pop ebx eax
  265.   jmp still
  266.  
  267.  
  268. align 4
  269. draw_win:
  270. pushad
  271.   mcall 12,1
  272.  
  273.   xor eax,eax
  274.   mov ebx,20*65536+min_window_w
  275.   mov ecx,20*65536+min_window_h
  276.   mov edx,[sc.work]
  277.   or  edx,0x33000000
  278.   mov edi,hed
  279.   mcall
  280.  
  281.   mcall 9,procinfo,-1
  282.  
  283.   cmp dword[procinfo.box.width],min_window_w ; проверяем ширину окна
  284.   jge @f
  285.     mov dword[procinfo.box.width],min_window_w ; если окно очень узкое, увеличиваем ширину для избежания глюков
  286.   @@:
  287.  
  288.   mov edi,dword[procinfo.box.width]
  289.   sub edi,min_window_w-otst_panel_left
  290.   mov dword[tree1.box_left],edi
  291.   mov dword[tree2.box_left],edi
  292.  
  293.   mov eax,dword[tree2.box_left] ;двигаем скроллинг
  294.   add eax,dword[tree2.box_width]
  295.   mov ebx,dword[tree2.p_scrol]
  296.   mov word[ebx+2],ax
  297.  
  298.   mov dword[edit2.left],edi
  299.   add dword[edit2.left],370-otst_panel_left
  300.  
  301.   stdcall dword[tl_draw],dword tree1
  302.   stdcall dword[tl_draw],dword tree2
  303.   mov dword[wScrMetki.all_redraw],1
  304.   push dword wScrMetki
  305.   call [scrollbar_ver_draw]
  306.  
  307.   mov eax,8 ;кнопка
  308.   mov ebx,145*65536+20
  309.   mov ecx,5*65536+25
  310.   mov edx,6
  311.   mov esi,[sc.work_button]
  312.   int 0x40
  313.  
  314.   mov ebx,100*65536+20
  315.   mov ecx,5*65536+25
  316.   mov edx,5
  317.   int 0x40
  318.  
  319.   mov bx,di
  320.   shl ebx,16
  321.   mov bx,100
  322.   mov ecx,265*65536+25
  323.   mov edx,9
  324.   int 0x40
  325.  
  326.   ;ebx ...
  327.   mov ecx,235*65536+25
  328.   mov edx,8
  329.   int 0x40
  330.  
  331.   mov bx,di
  332.   add bx,410-otst_panel_left
  333.   shl ebx,16
  334.   mov bx,55
  335.   ;mov ebx,410*65536+55
  336.   mov ecx,5*65536+25
  337.   mov edx,7
  338.   int 0x40
  339.  
  340.   mov bx,di
  341.   add bx,440-otst_panel_left
  342.   shl ebx,16
  343.   mov bx,30
  344.   ;mov ebx,440*65536+30
  345.   mov ecx,265*65536+25
  346.   mov edx,12
  347.   int 0x40
  348.  
  349.   mov bx,di
  350.   add bx,405-otst_panel_left
  351.   shl ebx,16
  352.   mov bx,30
  353.   ;mov ebx,405*65536+30
  354.   mov ecx,265*65536+25
  355.   mov edx,11
  356.   int 0x40
  357.  
  358.   mov bx,di
  359.   add bx,370-otst_panel_left
  360.   shl ebx,16
  361.   mov bx,30
  362.   ;mov ebx,370*65536+30
  363.   mov ecx,265*65536+25
  364.   mov edx,10
  365.   int 0x40
  366.  
  367.   mov eax,4 ;рисование текста
  368.   mov ebx,152*65536+13
  369.   mov ecx,[sc.work_button_text]
  370.   or  ecx,0x80000000
  371.   mov edx,txt_zoom_p
  372.   mcall
  373.  
  374.   mov ebx,107*65536+13
  375.   mov edx,txt_zoom_m
  376.   int 0x40
  377.  
  378.   mov bx,di
  379.   add bx,270-otst_panel_left
  380.   shl ebx,16
  381.   mov bx,243
  382.   ;mov ebx,270*65536+243
  383.   mov edx,txt151
  384.   int 0x40
  385.  
  386.   mov bx,di
  387.   add bx,270-otst_panel_left
  388.   shl ebx,16
  389.   mov bx,273
  390.   ;mov ebx,270*65536+273
  391.   mov edx,txt152
  392.   int 0x40
  393.  
  394.   mov bx,di
  395.   add bx,415-otst_panel_left
  396.   shl ebx,16
  397.   mov bx,13
  398.   ;mov ebx,415*65536+13
  399.   mov edx,txt_but_refresh
  400.   int 0x40
  401.  
  402.   mov bx,di
  403.   add bx,380-otst_panel_left
  404.   shl ebx,16
  405.   mov bx,275
  406.   ;mov ebx,380*65536+275
  407.   mov edx,txt_met_up
  408.   int 0x40
  409.  
  410.   mov bx,di
  411.   add bx,415-otst_panel_left
  412.   shl ebx,16
  413.   mov bx,275
  414.   ;mov ebx,415*65536+275
  415.   mov edx,txt_met_dn
  416.   int 0x40
  417.  
  418.  
  419.   mov bx,di
  420.   add bx,450-otst_panel_left
  421.   shl ebx,16
  422.   mov bx,275
  423.   ;mov ebx,450*65536+275
  424.   mov edx,txt_met_sh
  425.   int 0x40
  426.  
  427.   mov ecx,[sc.work_text]
  428.   or  ecx,0x80000000
  429.  
  430.   mov ebx,175*65536+13
  431.   mov edx,txt_cache
  432.   int 0x40
  433.  
  434.   mov bx,di
  435.   ;add bx,450-otst_panel_left
  436.   shl ebx,16
  437.   mov bx,35
  438.   ;mov ebx,265*65536+35
  439.   mov edx,txt141
  440.   int 0x40
  441.  
  442.   mov bx,135
  443.   ;mov ebx,265*65536+135
  444.   mov edx,txt142
  445.   int 0x40
  446.  
  447.   call draw_tiles
  448.  
  449.   push dword ch2
  450.   call [check_box_draw]
  451.   push dword ch1
  452.   call [check_box_draw]
  453.  
  454.   stdcall [edit_box_draw], edit1
  455.   stdcall [edit_box_draw], edit2
  456.  
  457.   mcall 12,2
  458. popad
  459.   ret
  460.  
  461.   head_f_i:
  462.   head_f_l  db 'Системная ошибка',0
  463.   err_message_found_lib0 db 'Не удалось найти библиотеку box_lib.obj',0
  464.   err_message_import0 db 'Ошибка при импорте библиотеки box_lib.obj',0
  465.   err_message_found_lib1 db 'Не удалось найти библиотеку libimg.obj',0
  466.   err_message_import1 db 'Ошибка при импорте библиотеки libimg.obj',0
  467.   err_message_found_lib2 db 'Не удалось найти библиотеку str.obj',0
  468.   err_message_import2 db 'Ошибка при импорте библиотеки str.obj',0
  469.   err_message_found_lib3 db 'Не удалось найти библиотеку libini.obj',0
  470.   err_message_import3 db 'Ошибка при импорте библиотеки libini.obj',0
  471.  
  472. system_dir0 db '/sys/lib/'
  473. boxlib_name db 'box_lib.obj',0
  474.  
  475. system_dir1 db '/sys/lib/'
  476. libimg_name db 'libimg.obj',0
  477.  
  478. system_dir2 db '/sys/lib/'
  479. strlib_name db 'str.obj',0
  480.  
  481. system_dir3 db '/sys/lib/'
  482. libini_name db 'libini.obj',0
  483.  
  484. ;library structures
  485. l_libs_start:
  486.   lib0 l_libs boxlib_name, sys_path, file_name, system_dir0, err_message_found_lib0, head_f_l, boxlib_import,err_message_import0, head_f_i
  487.   lib1 l_libs libimg_name, sys_path, file_name, system_dir1, err_message_found_lib1, head_f_l, libimg_import, err_message_import1, head_f_i
  488.   lib2 l_libs strlib_name, sys_path, file_name, system_dir2, err_message_found_lib2, head_f_l, strlib_import, err_message_import2, head_f_i
  489.   lib3 l_libs libini_name, sys_path, file_name, system_dir3, err_message_found_lib3, head_f_l, libini_import, err_message_import3, head_f_i
  490. load_lib_end:
  491.  
  492. align 4
  493. button:
  494.   mcall 17 ;получить код нажатой кнопки
  495.   cmp ah,5
  496.   jne @f
  497.     call but_ZoomM
  498.   @@:
  499.   cmp ah,6
  500.   jne @f
  501.     call but_ZoomP
  502.   @@:
  503.   cmp ah,7
  504.   jne @f
  505.     call but_Refresh
  506.   @@:
  507.  
  508.   cmp ah,9
  509.   jz  but_MetSave
  510.   cmp ah,8
  511.   jz  but_MetAdd
  512.  
  513.   cmp ah,10
  514.   jne @f
  515.     call but_met_up
  516.   @@:
  517.   cmp ah,11
  518.   jne @f
  519.     call but_met_dn
  520.   @@:
  521.   cmp ah,12
  522.   jne @f
  523.     call fun_goto_met
  524.   @@:
  525.   cmp ah,1
  526.   jne still
  527.  
  528. .exit:
  529.   push dword[bmp_icon]
  530.   call mem.Free
  531.   stdcall array_tile_function, tile_00,max_tiles_count,tile_destroy
  532.  
  533.   stdcall dword[tl_data_clear], tree1
  534.   mov dword[tree2.data_img_sys],0 ;ўшёЄшь єърчрЄхы№ эр ёшёЄхьэ√х шъюэъш,
  535.     ;Є. ъ. юэш с√ыш єфрыхэ√ тхЁїэхщ ЇєэъЎшхщ tl_data_clear
  536.     ;яютЄюЁэ√щ т√чют tl_data_clear схч ўшёЄъш єърчрЄхы  т√чтхЄ ю°шсъє
  537.   mov dword[tree2.data_img],0 ;ўшёЄшь єърчрЄхы№ эр шъюэъш єчыют
  538.   stdcall dword[tl_data_clear], tree2
  539.  
  540. ;  stdcall dword[img_destroy], dword[data_icon]
  541.   mcall -1 ;выход из программы
  542.  
  543.  
  544. ;input:
  545. ;data_rgb - pointer to rgb data
  546. ;size - count img pixels (size img data / 3(rgb) )
  547. align 4
  548. proc img_rgb_wdiv2 data_rgb:dword, size:dword
  549.   push eax ebx ecx edx
  550.   mov eax,dword[data_rgb]
  551.   mov ecx,dword[size] ;ecx = size
  552.   imul ecx,3
  553.   @@: ;чрЄхьэхэшх ЎтхЄр яшъёхыхщ
  554.     shr byte[eax],1
  555.     and byte[eax],0x7f
  556.     inc eax
  557.     loop @b
  558.  
  559.   mov eax,dword[data_rgb]
  560.   mov ecx,dword[size] ;ecx = size
  561.   shr ecx,1
  562.   @@: ;ёыюцхэшх ЎтхЄют яшъёхыхщ
  563.     mov ebx,dword[eax+3] ;ъюяшЁєхь ЎтхЄ ёюёхфэхую яшъёхы 
  564.     add word[eax],bx
  565.     shr ebx,16
  566.     add byte[eax+2],bl
  567.  
  568.     add eax,6 ;=2*3
  569.     loop @b
  570.  
  571.   mov eax,dword[data_rgb]
  572.   add eax,3
  573.   mov ebx,eax
  574.   add ebx,3
  575.   mov ecx,dword[size] ;ecx = size
  576.   shr ecx,1
  577.   dec ecx ;ыш°эшщ яшъёхы№
  578.   @@: ;яюфцрЄшх яшъёхыхщ
  579.     mov edx,dword[ebx]
  580.     mov word[eax],dx
  581.     shr edx,16
  582.     mov byte[eax+2],dl
  583.  
  584.     add eax,3
  585.     add ebx,6
  586.     loop @b
  587.  
  588.   pop edx ecx ebx eax
  589.   ret
  590. endp
  591.  
  592. ;input:
  593. ;data_rgb - pointer to rgb data
  594. ;size - count img pixels (size img data / 3(rgb) )
  595. ;size_w - width img in pixels
  596. align 4
  597. proc img_rgb_hdiv2, data_rgb:dword, size:dword, size_w:dword
  598.   pushad
  599.  
  600.   mov eax,dword[data_rgb] ;eax =
  601.   mov ecx,dword[size]     ;ecx = size
  602.   imul ecx,3
  603.   @@: ;чрЄхьэхэшх ЎтхЄр яшъёхыхщ
  604.     shr byte[eax],1
  605.     and byte[eax],0x7f
  606.     inc eax
  607.     loop @b
  608.  
  609.   mov eax,dword[data_rgb] ;eax =
  610.   mov edi,dword[size_w]
  611.   lea esi,[edi+edi*2] ;esi = width*3(rgb)
  612.   mov ebx,esi
  613.   add ebx,eax
  614.   mov ecx,dword[size]  ;ecx = size
  615.   shr ecx,1
  616.   xor edi,edi
  617.   @@: ;ёыюцхэшх ЎтхЄют яшъёхыхщ
  618.     mov edx,dword[ebx] ;ъюяшЁєхь ЎтхЄ эшцэхую яшъёхы 
  619.     add word[eax],dx
  620.     shr edx,16
  621.     add byte[eax+2],dl
  622.  
  623.     add eax,3
  624.     add ebx,3
  625.     inc edi
  626.     cmp edi,dword[size_w]
  627.     jl .old_line
  628.       add eax,esi
  629.       add ebx,esi
  630.       xor edi,edi
  631.     .old_line:
  632.     loop @b
  633.  
  634.  
  635.   mov eax,dword[data_rgb] ;eax =
  636.   add eax,esi ;esi = width*3(rgb)
  637.   mov ebx,esi
  638.   add ebx,eax
  639.   mov ecx,dword[size]  ;ecx = size
  640.   shr ecx,1
  641.   sub ecx,dword[size_w] ;ыш°э   ёЄЁюър яшъёхыхщ
  642.   xor edi,edi
  643.   @@: ;яюфцрЄшх яшъёхыхщ
  644.     mov edx,dword[ebx] ;ъюяшЁєхь ЎтхЄ эшцэхую яшъёхы 
  645.     mov word[eax],dx
  646.     shr edx,16
  647.     mov byte[eax+2],dl
  648.  
  649.     add eax,3
  650.     add ebx,3
  651.     inc edi
  652.     cmp edi,dword[size_w]
  653.     jl .old_line_2
  654.       add ebx,esi
  655.       xor edi,edi
  656.     .old_line_2:
  657.     loop @b
  658.  
  659.   popad
  660.   ret
  661. endp
  662.  
  663. ;input:
  664. ;data_rgb - pointer to rgb data
  665. ;size - count img pixels (size img data / 3(rgb) )
  666. align 4
  667. proc img_rgb_wmul2, data_rgb:dword, size:dword
  668.   push eax ebx ecx edx
  669.   ;eax - source
  670.   ;ebx - destination
  671.   mov ecx,dword[size] ;ecx = size
  672.   mov eax,ecx
  673.   dec eax
  674.   lea eax,[eax+eax*2] ;eax = (size-1)*3
  675.   mov ebx,eax ;ebx = size*3
  676.   add eax,dword[data_rgb] ;eax = pointer + size*3
  677.   add ebx,eax ;ebx = pointer + 2*size*3
  678.   @@:
  679.     mov edx,dword[eax] ;edx = pixel color
  680.     mov word[ebx],dx
  681.     mov word[ebx+3],dx
  682.     shr edx,16
  683.     mov byte[ebx+2],dl
  684.     mov byte[ebx+3+2],dl
  685.     sub eax,3
  686.     sub ebx,6
  687.     loop @b
  688.   pop edx ecx ebx eax
  689.   ret
  690. endp
  691.  
  692. ;функция для растягивания изображения по высоте в 2 раза
  693. ;в указателе data_rgb памяти должно быть в 2 раза больше чем size*3
  694. ;иначе при растягивании будет ошибка, выхода на чужую память
  695. ;input:
  696. ;data_rgb - pointer to rgb data
  697. ;size - count img pixels (size img data / 3(rgb) )
  698. ;size_w - width img in pixels
  699. align 4
  700. proc img_rgb_hmul2, data_rgb:dword, size:dword, size_w:dword
  701.   pushad
  702.  
  703.   mov esi,dword[size_w]
  704.   lea esi,[esi+esi*2] ;esi = width * 3(rgb)
  705.   mov eax,dword[size]
  706.   lea eax,[eax+eax*2]
  707.   mov edi,eax
  708.   shl edi,1
  709.   add eax,dword[data_rgb] ;eax = pointer to end pixel (old image) + 1
  710.   add edi,dword[data_rgb] ;edi = pointer to end pixel (new image) + 1
  711.   mov ebx,edi
  712.   sub ebx,esi
  713.  
  714.   .beg_line:
  715.   mov ecx,dword[size_w]
  716.   @@:
  717.     sub eax,3
  718.     sub ebx,3
  719.     sub edi,3
  720.  
  721.     mov edx,dword[eax] ;edx = pixel color
  722.     mov word[ebx],dx
  723.     mov word[edi],dx
  724.     shr edx,16
  725.     mov byte[ebx+2],dl
  726.     mov byte[edi+2],dl
  727.  
  728.     loop @b
  729.  
  730.   sub ebx,esi
  731.   sub edi,esi
  732.  
  733.   cmp eax,dword[data_rgb]
  734.   jg .beg_line
  735.  
  736.   popad
  737.   ret
  738. endp
  739.  
  740. ;input:
  741. ;data_rgb - pointer to rgb data
  742. ;size - count img pixels (size img data / 3(rgb) )
  743. ;size_w - width img in pixels
  744. align 4
  745. proc img_rgb_hoffs, data_rgb:dword, size:dword, size_w:dword, hoffs:dword
  746.   push eax ebx ecx edx esi
  747.  
  748.   mov esi,dword[size_w]
  749.   lea esi,[esi+esi*2] ;esi = width * 3(rgb)
  750.   imul esi,dword[hoffs]
  751.  
  752.   mov eax,dword[size]
  753.   lea eax,[eax+eax*2]
  754.   add eax,dword[data_rgb] ;eax = pointer to end pixel + 1
  755.   sub eax,3
  756.   mov ebx,eax
  757.   add ebx,esi
  758.  
  759.   mov ecx,dword[size]
  760.   dec ecx
  761.   @@:
  762.     mov edx,dword[eax] ;edx = pixel color
  763.     mov word[ebx],dx
  764.     shr edx,16
  765.     mov byte[ebx+2],dl
  766.  
  767.     sub eax,3
  768.     sub ebx,3
  769.     loop @b
  770.   pop esi edx ecx ebx eax
  771.   ret
  772. endp
  773.  
  774.  
  775. ;input:
  776. ;data_rgb - pointer to rgb data
  777. ;size_w_old - width img in pixels
  778. ;size_w_new - new width img in pixels
  779. ;size_h - height img in pixels
  780. align 4
  781. proc img_rgb_wcrop, data_rgb:dword, size_w_old:dword, size_w_new:dword, size_h:dword
  782.   pushad
  783.     mov eax, dword[size_w_old]
  784.     lea eax, dword[eax+eax*2] ;eax = width(old) * 3(rgb)
  785.     mov ebx, dword[size_w_new]
  786.     lea ebx, dword[ebx+ebx*2] ;ebx = width(new) * 3(rgb)
  787.     mov edx, dword[size_h]
  788.     ;dec edx
  789.     mov edi, dword[data_rgb] ;edi - получает данные
  790.     mov esi, edi
  791.     add edi, ebx
  792.     add esi, eax
  793.     cld
  794.   @@:
  795.     dec edx ;уменьшаем счетчик оставшихся строк на 1
  796.     cmp edx,0
  797.     jle @f
  798.  
  799.     mov ecx, ebx
  800.     rep movsb ;перенос (копирование) строки пикселей
  801. ;stdcall mem_copy,esi,edi,ebx
  802.  
  803.     add esi,eax ;переход на новую строчку изображения
  804.     sub esi,ebx
  805. ;add esi,eax
  806. ;add edi,ebx
  807.     jmp @b
  808.   @@:
  809.  
  810.   popad
  811.   ret
  812. endp
  813.  
  814. align 4
  815. proc mem_copy, source:dword, destination:dword, len:dword
  816.   push ecx esi edi
  817.     cld
  818.     mov esi, dword[source]
  819.     mov edi, dword[destination]
  820.     mov ecx, dword[len]
  821.     rep movsb
  822.   pop edi esi ecx
  823.   ret
  824. endp
  825.  
  826. align 4
  827. proc mem_clear, mem:dword, len:dword
  828.   push eax ecx edi
  829.     cld
  830.     xor al,al
  831.     mov edi, dword[mem]
  832.     mov ecx, dword[len]
  833.     repne stosb
  834.   pop edi ecx eax
  835.   ret
  836. endp
  837.  
  838.   txt_met_up db 24,0
  839.   txt_met_dn db 25,0
  840.   txt_met_sh db '*',0
  841.   txt_zoom_m db '-',0
  842.   txt_zoom_p db '+',0
  843.   txt151 db 'Добавить метку',0
  844.   txt152 db 'Сохранить метки',0
  845.   txt_but_refresh db 'Обновить',0
  846.   txt_cache db 'Cache:',0
  847.   txt141 db 'Вид карты',0
  848.   txt142 db 'Выбор метки',0
  849.  
  850. ; check_boxes
  851. ch1 check_box 5,  5, 6, 12, 0xffffd0, 0x800000, 0, ch_text1, 12,ch_flag_en
  852. ch2 check_box 5, 20, 6, 12, 0xffffd0, 0x800000, 0, ch_text2, 11,ch_flag_en
  853. checkboxes_end:
  854.  
  855. ch_text1 db 'брать сверху'
  856. ch_text2 db 'брать снизу'
  857.  
  858. edit1 edit_box 190, 215,  10, 0xd0ffff, 0xff, 0x80ff, 0, 0xa000, 500, ed_buffer.1, mouse_dd, 0
  859. edit2 edit_box 100, 370, 240, 0xd0ffff, 0xff, 0x80ff, 0, 0xa000,  30, ed_buffer.2, mouse_dd, 0
  860. editboxes_end:
  861.  
  862. tree1 tree_list 10,10, tl_list_box_mode+tl_key_no_edit, 16,16,\
  863.     0x8080ff,0x0000ff,0xffffff, 265,45,90,85, 0,0,0,\
  864.     el_focus, 0,fun_new_map_type
  865. tree2 tree_list 32,300, tl_draw_par_line, 16,16,\
  866.     0x8080ff,0x0000ff,0xffffff, 265,145,190,85, 0,12,0,\
  867.     el_focus, wScrMetki,fun_goto_met
  868.  
  869. align 4
  870. wScrMetki:
  871. .x:
  872. .size_x     dw 16 ;+0
  873. .start_x    dw 0 ;+2
  874. .y:
  875. .size_y     dw 100 ;+4
  876. .start_y    dw 0 ;+6
  877. .btn_high   dd 15 ;+8
  878. .type       dd 1  ;+12
  879. .max_area   dd 100  ;+16
  880. .cur_area   dd 30  ;+20
  881. .position   dd 0  ;+24
  882. .bckg_col   dd 0xeeeeee ;+28
  883. .frnt_col   dd 0xbbddff ;+32
  884. .line_col   dd 0  ;+36
  885. .redraw     dd 0  ;+40
  886. .delta      dw 0  ;+44
  887. .delta2     dw 0  ;+46
  888. .run_x:
  889. .r_size_x   dw 0  ;+48
  890. .r_start_x  dw 0  ;+50
  891. .run_y:
  892. .r_size_y   dw 0 ;+52
  893. .r_start_y  dw 0 ;+54
  894. .m_pos      dd 0 ;+56
  895. .m_pos_2    dd 0 ;+60
  896. .m_keys     dd 0 ;+64
  897. .run_size   dd 0 ;+68
  898. .position2  dd 0 ;+72
  899. .work_size  dd 0 ;+76
  900. .all_redraw dd 0 ;+80
  901. .ar_offset  dd 1 ;+84
  902.  
  903. ed_buffer: ;ЄхъёЄ фы  edit
  904.   .1: rb 502
  905.   .2: rb 32
  906.  
  907. el_focus dd tree1
  908.  
  909. tree_sys_icon dd 0
  910. tree_nod_icon dd 0
  911.  
  912. bmp_icon   dd 0 ;память для загрузки изображения
  913. data_icon  dd 0 ;память для преобразования картинки функциями libimg
  914.  
  915. run_file_70 f70
  916.  
  917.  
  918. txt_tile_path db 'tile path',0
  919.   rb 300
  920. txt_tile_type dd txt_tile_type_0 ;єърчрЄхы№ эр т√сЁрээ√щ Єшя Їрщыют
  921. txt_tile_type_0 db 0
  922.   rb 10
  923.  
  924. align 4
  925. map: ;ъююЁфшэрЄ√ ърЁЄ√
  926.   .coord_x dd 0 ;ъююЁфшэрЄр x
  927.   .coord_y dd 0 ;ъююЁфшэрЄр y
  928.   .zoom    db 1 ;ьрё°Єрс
  929.  
  930. align 4
  931. tile_00 rb size_tile_struc * max_tiles_count
  932.  
  933. ;¤ЄюЄ ъюф эх ьющ, юэ яЁхюсЁрчєхЄ ўшёыю т ёЄЁюъє
  934. ;input:
  935. ; eax = value
  936. ; edi = string buffer
  937. ;output:
  938. ; edi =
  939. align 4
  940. tl_convert_to_str:
  941.   pushad
  942.     mov dword[edi+1],0;0x20202020
  943.     call .str
  944.   popad
  945.   ret
  946.  
  947. align 4
  948. .str:
  949.   mov ecx,0x0a ;чрфрхЄё  ёшёЄхьр ёўшёыхэш  шчьхэ ■Єё  ЁхушёЄЁ√ ebx,eax,ecx,edx тїюфэ√х ярЁрьхЄЁ√ eax - ўшёыю
  950.     ;яЁхЁхтюф ўшёыр т ASCII ёЄЁюъє тчюфэ√х фрээ√х ecx=ёшёЄхьр ёўшёыхэ  edi рфЁхё ъєфр чряшё√трЄ№, сєфхь ёЄЁюъє, яЁшўхь ъюэхЎ яхЁхьхээющ
  951.   cmp eax,ecx  ;ёЁртэшЄ№ хёыш т eax ьхэ№°х ўхь т ecx Єю яхЁхщЄш эр @@-1 Є.х. эр pop eax
  952.   jb @f
  953.   xor edx,edx  ;юўшёЄшЄ№ edx
  954.   div ecx      ;ЁрчфхышЄ№ - юёЄрЄюъ т edx
  955.   push edx     ;яюыюцшЄ№ т ёЄхъ
  956.   ;dec edi             ;ёьх∙хэшх эхюсїюфшьюх фы  чряшёш ё ъюэЎр ёЄЁюъш
  957.   call .str;яхЁхщЄш эр ёрьє ёхс  Є.х. т√чтрЄ№ ёрьє ёхс  ш Єръ фю Єюую ьюьхэЄр яюър т eax эх ёЄрэхЄ ьхэ№°х ўхь т ecx
  958.   pop eax
  959.   @@: ;cmp al,10 ;яЁютхЁшЄ№ эх ьхэ№°х ыш чэрўхэшх т al ўхь 10 (фы  ёшёЄхь√ ёўшёыхэ  10 фрээр  ъюьрэфр - ыш°эр ))
  960.   or al,0x30  ;фрээр  ъюьрэфр ъюЁюўх  ўхь фтх т√°х
  961.   stosb       ;чряшёрЄ№ ¤ыхьхэЄ шч ЁхушёЄЁр al т  ўхъє ярь Єш es:edi
  962.   ret         ;тхЁэєЄ№ё  ўхэ№ шэЄхЁхёэ√щ їюф Є.ъ. яюър т ёЄхъх їЁрэшЄ№ё  ъюы-тю т√чютют Єю ёЄюы№ъю Ёрч ь√ ш сєфхь т√ч√трЄ№ё 
  963.  
  964.  
  965. hed db 'Planet viewer 09.02.10',0 ;подпись окна
  966.  
  967. sc system_colors  ;системные цвета
  968. mouse_dd dd 0 ;нужно для Shift-а в editbox
  969.   sys_path rb 4096
  970.   file_name:
  971.     rb 4096
  972. i_end:
  973.   procinfo process_information
  974.   rb 1024
  975. stacktop:
  976. mem:
  977.  
  978.