Subversion Repositories Kolibri OS

Rev

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

  1. ;
  2. ;   Screenshooter for Kolibri
  3. ;
  4. ; version:      1.2
  5. ; last update:  08/09/2010
  6. ; written by:   Marat Zakiyanov aka Mario79, aka Mario
  7. ; changes:      select path for save with OpenDialog,
  8. ;               bag fix for threads stacks
  9. ;---------------------------------------------------------------------
  10. ; 01.06.09 - Š®¬¯®­¥­âë ¡¥àãâìáï ¨§ á¨á⥬­®© ¡¨¡«¨®â¥ª¨ <Lrz>
  11. ; €¢â®à ¯à®£à ¬¬ë …¢â¨å®¢ Œ ªá¨¬ (Maxxxx32)
  12. ; 24.07.2008 <Lrz> ®¡­®¢«¥­ editbox
  13. ; 01.02.07 - ®¡­®¢«ñ­ editbox
  14. ; 31.01.07 - ¢áñ ⥯¥àì à¨áã¥âáï ®â­®á¨â¥«ì­® ª«¨¥­â᪮© ®¡« áâ¨
  15. ; 02.11.10 - ˆá¯®«ì§ã¥âáï checkbox ¢¥àᨨ 2
  16.  
  17. format binary as ""
  18.  
  19. title equ 'Screenshooter v 1.2' ; ‡ £®«®¢®ª ®ª­ 
  20. include '../../develop/libraries/box_lib/load_lib.mac'
  21. include '../../develop/libraries/box_lib/trunk/box_lib.mac'
  22. ;include '../../develop/examples/editbox/trunk/editbox.inc'
  23. include '../../config.inc'              ;for nightbuild
  24. include '../../macros.inc'
  25. include 'txtbut.inc'
  26. include 'label.inc'
  27. include 'textwork.inc'
  28. include 'scrshoot.mac'
  29.  
  30. ;include 'macros.inc'  ; ¢áâ ¢«ï¥¬ ¬ ªà®áë
  31. ;        meos_header  cmdstr ; ¢áâ ¢«ï¥¬ § £®«®¢®ª ¯à®£à ¬¬ë
  32. use32                
  33.     org 0x0
  34.     db 'MENUET01'
  35.     dd 0x1
  36.     dd start
  37.     dd IM_END
  38.     dd i_end
  39.     dd stacktop
  40.     dd cmdstr
  41.     dd cur_dir_path
  42.  
  43. align 4
  44.         @use_library
  45.         use_txt_button                          ;  |
  46.         use_label                               ;  |-- GUI ª®¬¯®­¥­âë ¨ ­¥ª®â®àë¥ ¯à®æ¥¤ãàë
  47.         use_text_work                           ; /
  48. include 'scrwin.inc'  ; ¢áâ ¢«ï¥¬ ª®¤ ®ª­  ¯à¤¯à®á¬®âà 
  49. include 'scrsavef.inc'; ¢áâ ¢«ï¥¬ ¯à®æ¥¤ãàã á®åà ­¥­¨ï ä ©« 
  50.  
  51. include 'gp.inc'
  52. include 'srectwin.inc'
  53. include 'lang.inc'
  54.  
  55. macro get_sys_colors col_buf
  56. {
  57.         ;mov     eax,48
  58.         push    48
  59.         pop     eax
  60.         ;mov     ebx,3
  61.         push    3
  62.         pop     ebx
  63.         ;mov     ecx,col_buf
  64.         push    col_buf
  65.         pop     ecx
  66.         ;mov     edx,40
  67.         push    40
  68.         pop     edx
  69.         mcall
  70. }
  71.  
  72. ;--- ­ ç «® ¯à®£à ¬¬ë ---
  73. align 4
  74. start:
  75. ;sys_load_library  library_name, cur_dir_path, library_path, system_path, \
  76. ;err_message_found_lib, head_f_l, myimport, err_message_import, head_f_i
  77.  
  78. load_libraries l_libs_start,end_l_libs
  79.  
  80. ;if return code =-1 then exit, else nornary work
  81. ;        cmp     eax,-1
  82.         inc     eax
  83.         test    eax,eax
  84.         jz      close
  85. ;;;;;;;;;;;;;;;; init memory 68/11
  86.         mov     eax,68
  87.         mov     ebx,11
  88.         mcall
  89.         test    eax,eax
  90.         jz      close
  91.  
  92. ;--------------------------------------------------------------------- 
  93.         mov     edi,filename_area
  94.         mov     esi,start_temp_file_name
  95.         xor     eax,eax
  96.         cld
  97. @@:
  98.         lodsb
  99.         stosb
  100.         test    eax,eax
  101.         jnz     @b
  102.  
  103.  
  104.         mov     edi,fname_buf
  105.         mov     esi,ed_buffer.1
  106.         xor     eax,eax
  107.         cld
  108. @@:
  109.         lodsb
  110.         stosb
  111.         test    eax,eax
  112.         jnz     @b
  113.        
  114. ;OpenDialog     initialisation
  115.         push    dword OpenDialog_data
  116.         call    [OpenDialog_Init]
  117.  
  118. ; prepare for PathShow
  119.         push    dword PathShow_data_1
  120.         call    [PathShow_prepare]
  121. ;--------------------------------------------------------------------- 
  122.         ;mov     al,[gs:1280*4*1024]
  123.                     ; ãáâ ­ ¢«¨¢ ¥¬ ipc ¡ãää¥à
  124.         push    60
  125.         pop     eax
  126.         ;mov     ebx,1
  127.         xor     ebx,ebx
  128.         inc     ebx
  129.         mov     ecx,app_ipc
  130.         mov     edx,32
  131.         mcall
  132.  
  133.         push    66   ; ãáâ ­ ¢«¨¢ ¥¬ £«®¡ «ì­ãî £®àïçãî ª« ¢¨èã
  134.         pop     eax
  135.         push    eax
  136.         mov     ebx,4
  137.         mov     cl,55    ; 55 - PrintScrn
  138.         xor     edx,edx
  139.         mcall
  140.  
  141.         mov     ebx,app
  142.         call    get_slot_n
  143.         mov     [slot_n],ecx
  144.  
  145.         ; ãáâ ­ ¢«¨¢ ¥¬ ¬ áªã ᮡë⨩
  146.         set_events_mask (evm_redraw+evm_key+evm_button+evm_mouse+evm_ipc)
  147. ;¨­¨æ¨ «¨§ æ¨ï checkboxes
  148.         init_checkboxes2        check_boxes,check_boxes_end
  149.  
  150. ; á ¯à룠¥¬ ¯à¨ ª ¦¤®© ¯¥à¥à¨á®¢ª¥
  151. red:
  152.         get_procinfo app   ; ¯®«ãç ¥¬ ¨­ä®à¬ æ¨î ® ¯à®æ¥áá¥
  153.         get_sys_colors sc  ; ¯®«ãç ¥¬ á¨á⥬­ë¥ 梥â 
  154.  
  155.         ; ãáâ ­ ¢«¨¢ ¥¬ á¨á⥬­ë¥ æ¢¥â  ã GUI ª®¬¯®­¥­â®¢
  156.         txt_but_set_sys_color buttons,buttons_end,sc             ; \
  157.         labels_set_sys_color labels,labels_end,sc                ; |
  158.         check_boxes_set_sys_color2 check_boxes,check_boxes_end,sc; |
  159. ;       check_boxes_set_sys_color check_boxes,check_boxes_end,sc ; |
  160.         edit_boxes_set_sys_color editboxes,editboxes_end,sc      ; /
  161.  
  162.         get_screen_prop scr ; ¯®«ãç ¥¬ ¨­ä®à¬ æ¨î ®¡ íªà ­¥
  163. ;------------------------------------------------------------------------------
  164. ; Boot with "DIRECT" parameter - get screen and save
  165.         mov     eax,cmdstr
  166.         cmp     [eax],byte 0
  167.         je      no_boot
  168.  
  169.         cmp     [eax],dword 'DIRE'
  170.         jne     no_boot
  171.  
  172.         cmp     [eax+4],word 'CT'
  173.         jne     no_boot
  174.  
  175.         and     [ch2.flags],dword 0
  176.         or      [ch5.flags],dword 1
  177.         and     [ch3.flags],dword 0
  178.         mov     [OpenDialog_data.draw_window],dword draw_window_direct
  179.  
  180.         call    shoot
  181.         jmp     close
  182. ;------------------------------------------------------------------------------
  183. draw_window_direct:
  184.         mcall   12,1
  185.         mcall   14
  186. ; eax = [xsize]*65536 + [ysize]
  187.         mov     ebx,eax
  188.         shr     ebx,17
  189.         sub     ebx,100
  190.         shl     ebx,16
  191.         mov     bx,200
  192.         mov     ecx,eax
  193.         and     ecx,0xffff
  194.         shr     ecx,1
  195.         sub     ecx,50
  196.         shl     ecx,16
  197.         mov     cx,100
  198.         xor     eax,eax
  199.         xor     esi,esi
  200.         mcall   ,,,0x34ffffff,,grab_text
  201.  
  202.         mcall   4,<10,30>,0x90000000,saving
  203.        
  204.         mcall   12,2
  205.         ret
  206. ;------------------------------------------------------------------------------
  207. no_boot:
  208.         call    draw_window ; ¯¥à¥à¨á®¢ë¢ ¥¬ ®ª­®
  209. still:
  210.         wait_event red,key,button,mouse,ipc,still ; ¦¤¥¬ ᮡë⨩
  211.  
  212. key:
  213.         get_key
  214.         cmp     al,2
  215.         jne     @f
  216.         cmp     ah,55
  217.         jne     still
  218.         mov     [PrintScreen],1
  219.         call    shoot
  220.         mov     [PrintScreen],0
  221.         jmp     still
  222. @@:
  223. ;        key_edit_boxes editboxes,editboxes_end
  224. ;       push    dword edit1
  225. ;       call    [edit_box_key]
  226.  
  227.         push    dword edit2
  228.         call    [edit_box_key]
  229.  
  230.         push    dword edit3
  231.         call    [edit_box_key]
  232.  
  233.         push    dword edit4
  234.         call    [edit_box_key]
  235.  
  236.         jmp     still
  237. button:
  238.         get_pressed_button
  239.         cmp     ah,1
  240.         je      p_close
  241.         txt_but_ev buttons,buttons_end
  242.         jmp     still
  243. mouse:
  244.         get_active_window
  245.         cmp     eax,[slot_n]
  246.         jne     still
  247. ;----------------------------------
  248. ;       push    dword edit1
  249. ;       call    [edit_box_mouse]
  250.         push    dword edit2
  251.         call    [edit_box_mouse]
  252.         push    dword edit3
  253.         call    [edit_box_mouse]
  254.         push    dword edit4
  255.         call    [edit_box_mouse]
  256. ;----------------------------------
  257.         checkboxes_mouse2       check_boxes,check_boxes_end
  258. ;       push    dword ch1
  259. ;       call    [check_box_mouse]
  260. ;       push    dword ch2
  261. ;       call    [check_box_mouse]
  262. ;       push    dword ch3
  263. ;       call    [check_box_mouse]
  264. ;       push    dword ch4
  265. ;       call    [check_box_mouse]
  266. ;       push    dword ch5
  267. ;       call    [check_box_mouse]
  268. ;       push    dword ch6
  269. ;       call    [check_box_mouse]
  270. ;       push    dword use_rect
  271. ;       call    [check_box_mouse]
  272. ;-----------------------------------
  273. ;        mouse_check_boxes check_boxes,check_boxes_end
  274. ;        mouse_edit_boxes editboxes,editboxes_end
  275.         jmp     still
  276. ipc:
  277.         cmp     word [app_ipc+8],2
  278.         jne     @f
  279.         min_window
  280.         jmp     .clear_ipc
  281. @@:
  282.         cmp     word [app_ipc+8],3
  283.         jne     @f
  284.         mov     ecx,[slot_n]
  285.         activ_window
  286.         jmp     .clear_ipc
  287. @@:
  288.         call    draw_number
  289.         call    dr_st
  290.  
  291. .clear_ipc:
  292.         cld
  293.         xor     eax,eax
  294.         mov     ecx,32/4
  295.         mov     edi,app_ipc
  296.         rep     stosd
  297.         jmp     still
  298.  
  299. p_close:
  300.         btr     dword [flags],1
  301.  
  302.         bt      dword [flags],3
  303.         jnc     @f
  304.         mov    eax,18
  305.         mov     ebx,eax
  306.         mov     ecx,[set_rect_window_pid]
  307.         mcall
  308. @@:
  309.  
  310. close:
  311.         app_close
  312.  
  313. ;---------------------------------------------------------------------
  314. draw_PathShow:
  315.         pusha
  316.         mcall   13,<4,302>,<35,15>,0xffffff
  317. ; draw for PathShow
  318.         push    dword PathShow_data_1
  319.         call    [PathShow_draw]
  320.         popa
  321.         ret
  322. ;--------------------------------------------------------------------
  323. ;--- ¯à®®æ¥¤ãà  ¯¥à¥à¨á®¢ª¨ £« ¢­®£® ®ª­  ---------------------------
  324. ;--------------------------------------------------------------------
  325. draw_window:
  326. start_draw_window        ; ­ ç «® ¯¥à¥à¨á®¢ª¨
  327.         ; ®¯à¥¤¥«ï¥¬ ®ª­®
  328.         get_skin_height
  329.         mov     ebx,100*65536+320
  330.         mov     ecx,100*65536+220
  331.         add     cx,ax
  332.         mov     edx,[sc.work]
  333.         or      edx,0x34000000;0x33000000
  334.         xor     esi,esi
  335.         ;xor     edi,edi
  336.         mov     edi,grab_text
  337.         xor     eax,eax
  338.         mcall
  339.  
  340.         mov     eax,47             ; ¢ë¢®¤¨¬ ç¨á«  ¢ ®ª­®
  341.         mov     bx,4
  342.         shl     ebx,16
  343.         movsx   ecx,word [scr.width] ; è¨à¨­  íªà ­ 
  344.         mov     dx,95
  345.         shl     edx,16
  346.         mov     dx,[label1.top]
  347.         push    dx
  348.         mov     esi,[sc.work_text]
  349.         mcall
  350.         movsx   ecx,word [scr.height]   ; ¢ëá®â  íªà ­ 
  351.         mov     dx,[label2.top]
  352.         mcall
  353.         mov     bx,2
  354.         shl     ebx,16
  355.         movsx   ecx,word [scr.bitspp]   ; ¡¨â ­  ¯¨ªá¥«ì
  356.         mov     dx,240
  357.         shl     edx,16
  358.         pop     dx
  359.         mcall
  360.         mov     bx,6
  361.         shl     ebx,16
  362.         mov     ecx,[scr.bytesps]       ; ¡ ©â ­  áâபã
  363.         mov     dx,[label2.top]
  364.         mcall
  365.  
  366.         call    draw_number      ; ¯à®à¨á®¢ë¢ ¥¬ ­®¬¥à á­¨¬ª 
  367.         call    dr_st
  368.  
  369.         draw_labels labels,labels_end            ; ¬¥âª¨
  370. ;        draw_edit_boxes editboxes,editboxes_end  ; edit_box
  371. ;------ show check editbox -----------
  372. ;       push    dword edit1
  373. ;       call    [edit_box_draw]
  374.         push    dword edit2                                                                                                  
  375.         call    [edit_box_draw]
  376.         push    dword edit3
  377.         call    [edit_box_draw]
  378.         push    dword edit4
  379.         call    [edit_box_draw]
  380. ;------ end check all editbox -------
  381.  
  382.         call    draw_PathShow
  383.  
  384.         draw_txt_buttons buttons,buttons_end     ; ª­®¯ª¨
  385. ;        draw_check_boxes check_boxes,check_boxes_end ; ä« ¦ª¨
  386. ;------ check all checkbox ---------
  387. ;       push    dword ch1
  388. ;       call    [check_box_draw]
  389. ;       push    dword ch2
  390. ;       call    [check_box_draw]       
  391. ;       push    dword ch3
  392. ;       call    [check_box_draw]
  393. ;       push    dword ch4
  394. ;       call    [check_box_draw]
  395. ;       push    dword ch5
  396. ;       call    [check_box_draw]
  397. ;       push    dword ch6
  398. ;       call    [check_box_draw]
  399. ;       push    dword use_rect
  400. ;       call    [check_box_draw]
  401.  
  402.         checkboxes_draw2        check_boxes,check_boxes_end
  403.  
  404. ;------ end check all checkbox ------
  405.  
  406. stop_draw_window      ; ª®­¥æ ¯¥à¥à¨á®¢ª¨
  407. ret
  408.  
  409. shoot:
  410.         bt      dword [ch4.flags],1   ; ¢ª«î祭  «¨ § ¤¥à¦ª  ?
  411.         jnc     @f
  412.         draw_status delay_now
  413.         mov     edi,ed_buffer.2
  414.         call    zstr_to_int
  415.         mov     ebx,eax
  416.         delay
  417. @@:
  418.         call    get_mem_for_shoot; ¯®«ãç ¥¬ ¯ ¬ïâì ¤«ï á­¨¬ª 
  419.  
  420.  
  421.         bts     dword [flags],0       ; ­ã«¥¢®© ä« £ - á­¨¬®ª ¥áâì ¢ ¯ ¬ïâ¨
  422.  
  423.         ; ¤¥« ¥¬ á­¨¬®ª
  424.         draw_status shooting
  425.         mov     esi,scr
  426.         mov     edi,[scr_buf.ptr]
  427.         call    copy_screen_to_image
  428.  
  429.         bt      dword [use_rect.flags],1
  430.         jc      .use_rect
  431.         push    dword [scr]
  432.         jmp     @f
  433. .use_rect:
  434.         push    dword [rect.height]
  435. @@:
  436.         pop     dword [scr_buf.size]
  437.  
  438.         cmp     [autoshoot_flag],1
  439.         jne     .2
  440.        
  441.         bt      dword [ch5.flags],1  ; ¢ª«î祭® «¨  ¢â®á®åà ­¥­¨¥ ?
  442.         jnc     @f
  443.         call    save_file
  444. @@:
  445.         draw_status     shooted_ok
  446. .2:
  447.         bt      dword [flags],1
  448.         jnc     @f
  449.         ret
  450. @@:
  451.  
  452.         bt      dword [ch2.flags],1  ; ¯®ª § âì ®ª­® ¯à¥¤¯à®á¬®âà  ?
  453.         jnc     @f
  454.         cmp     [PrintScreen],0
  455.         jne     @f
  456.         call    show_scr_window
  457.         ret
  458. @@:
  459.         bt      dword [ch5.flags],1  ; ¢ª«î祭® «¨  ¢â®á®åà ­¥­¨¥ ?
  460.         jnc     @f
  461.        
  462.         call    [OpenDialog_data.draw_window]
  463. ; invoke OpenDialog
  464.         push    dword OpenDialog_data
  465.         call    [OpenDialog_Start]
  466.         cmp     [OpenDialog_data.status],1
  467.         je      .1
  468.         ret
  469. .1:
  470. ; prepare for PathShow
  471.         push    dword PathShow_data_1
  472.         call    [PathShow_prepare]
  473.        
  474.         call    [OpenDialog_data.draw_window]
  475.  
  476.         call    save_file
  477. @@:
  478.        
  479.         bt      word [ch3.flags],1   ; ¢®ááâ ­®¢¨âì ®ª­® ?
  480.         jnc     @f
  481.  
  482.         delay 100
  483.         mov     ecx,[slot_n]
  484.         activ_window
  485. @@:
  486. ret
  487.  
  488. ;--- ¯®«ãç¨âì ¯ ¬ïâì ¤«ï á­¨¬ª  ---
  489. get_mem_for_shoot:
  490. ;clean memory
  491.         mov     ecx,dword [scr_buf.ptr]
  492.         mov     ebx,13
  493.         mov     eax,68
  494.         mcall
  495.  
  496.         bt      dword [use_rect.flags],1 ; ä®âª âì ®¡« áâì íªà ­ 
  497.         jc      .use_area
  498.         movzx   ecx, word [scr.width]
  499.         movzx   ebx, word [scr.height]
  500.         jmp     @f
  501. .use_area:
  502.         call    read_rect
  503.         movzx   ecx, word [rect.width]
  504.         movzx   ebx, word [rect.height]
  505. @@:
  506.         imul    ecx,ebx
  507.         lea     ecx,[ecx*3]
  508. ;        add     ecx,i_end
  509.         mov     ebx,12
  510.         mov     eax,68
  511.         mcall
  512.         mov     [scr_buf.ptr],eax
  513.         add     eax,ecx
  514.         mov     [scr_buf.end_ptr],ecx
  515. ret
  516.  
  517. ;--- ᮤ âì ®ª­® ¯à®¥¤¯à®á¬®âà  ---
  518. show_scr_window:
  519. pusha
  520.         bt      dword [flags],0
  521.         jnc     @f
  522.         mov     eax,51
  523.         xor     ebx,ebx
  524.         inc     ebx
  525.         mov     ecx,scr_window
  526.         mov     edx,i_end_tread-512
  527.         mcall
  528. @@:
  529. popa
  530. ret
  531.  
  532. ;--- ¯à®ç¨â âì ¨ ­ à¨á®¢ âì ⥪ã騩 ­®¬¥à ---
  533. apply_number:
  534.         mov     edi,ed_buffer.3
  535.         call    zstr_to_int
  536.         mov     [cur_number],eax
  537.         call    draw_number
  538. ret
  539.  
  540. ;--- ¯à®æ¥¤ãà  ¯à®à¨á®¢ª¨ ⥪ã饣® ­®¬¥à  ---
  541. draw_number:
  542.         mov     edi,sign_n_input
  543.         call    zstr_to_int
  544.         mov     [sign_n],al
  545.         mov     eax,13
  546.         mov     ebx,150*65536+96
  547.         mov     cx,[label9.top]
  548.         shl     ecx,16
  549.         mov     cx,10
  550.         mov     edx,[sc.work]
  551.         mcall
  552.         mov     eax,47
  553.         movsx   bx,byte [sign_n]
  554.         shl     ebx,16
  555.         mov     ecx,[cur_number]
  556.         mov     dx,150
  557.         shl     edx,16
  558.         mov     dx,[label9.top]
  559.         mov     esi,[sc.work_text]
  560.         mcall
  561. ret
  562.  
  563. ;--- ¯à®æ¥¤ãà , § ¯ã᪠îé ï ¯®â®ª  ¢â®áꥬª¨ ---
  564. start_autoshoot:
  565.         bts     dword [flags],1
  566.         jc      @f
  567.         mov     eax,51
  568.         ;mov     ebx,1
  569.         xor     ebx,ebx
  570.         inc     ebx
  571.         mov     ecx,autoshoot
  572.         mov     edx,i_end_tread
  573.         mcall
  574. @@:
  575. ret
  576.  
  577. ;--- ®áâ ­ ¢«¨¢ ¥â íâ®â ¯®â®ª ---
  578. stop_autoshoot:
  579.         btr     dword [flags],1
  580. ret
  581.  
  582. ;--- 横« ¯®â®ª   ¢â®áꥬª¨ ---
  583. autoshoot:
  584.         mov     [autoshoot_flag],1
  585.         mov     ecx,[slot_n]
  586.         activ_window
  587. .next:
  588.         bt      dword [flags],1
  589.         jnc     close
  590.         mov     eax,60
  591.         mov     ebx,2
  592.         mov     ecx,[app.pid]
  593.         mov     edx,messages.draw_number
  594.         mov     esi,2
  595.         mcall
  596.         call    shoot
  597.         jmp     autoshoot.next
  598. .close:
  599.         mov     [autoshoot_flag],0
  600.         jmp     close
  601. ;--- ¯à®æ¥¤ãà  ¯à®à¨á®¢ª¨ áâப¨ á®áâ®ï­¨ï ---
  602. ; (¤®«¦­  ¢ë§ë¢ âìáï ¯®â®ª®¬ £« ¢­®£® ®ª­ )
  603. dr_st:
  604.         mov     eax,38              ; ®â१®ª
  605.         mov     ebx,0*65536+310
  606.         mov     ecx,198*65536+198
  607.         mov     edx,[sc.work_graph]
  608.         mcall
  609.  
  610.         mov     eax,13              ; ¯®«®áª 
  611.         mov     bx,310
  612.         mov     ecx,199*65536+15
  613.         mov     edx,[sc.work]
  614.         mcall
  615.  
  616.         mov     edi,status
  617.         call    draw_label
  618. ret
  619.  
  620. ;--- ¯à®æ¥¤ãà  ¯®«ã祭¨ï ­®¬¥à  á«®â  ¯®â®ª  ---
  621. ; ¢å®¤ ebx - ¡ãää¥à 1024 ¡ ©â
  622. ; ¢ë室 ecx - ­®¬¥à á«®â 
  623. get_slot_n:
  624.         mov     eax,9
  625.         xor     ecx,ecx
  626.         dec     ecx
  627.         mcall
  628.  
  629.         mov     edx,[ebx+30]
  630.         xor     ecx,ecx
  631. @@:
  632.         mov     eax,9
  633.         inc     ecx
  634.         mcall
  635.         cmp     [ebx+30],edx
  636.         je      @f
  637.         jmp     @b
  638. @@:
  639. ret
  640.  
  641. ;--- ¯à®æ¥¤ãà , § ¯ã᪠îé ï ¯®â®ª, ¤¥« î騩 1 á­¨¬®ª ---
  642. one_shoot:
  643.         mov     ecx,one_shoot_thread
  644.         mov     edx,shoot_esp
  645.         jmp     @f
  646. ;--- ¯à®æ¥¤à , § ¯ã᪠îé ï ¯®â®ª, á®åà ­ïî騩 á­¨¬®ª ---
  647. save_shoot:
  648. ; invoke OpenDialog
  649.         push    dword OpenDialog_data
  650.         call    [OpenDialog_Start]
  651.         cmp     [OpenDialog_data.status],1
  652.         je      .1
  653.         ret
  654. .1:
  655. ; prepare for PathShow
  656.         push    dword PathShow_data_1
  657.         call    [PathShow_prepare]
  658.  
  659.         call    draw_PathShow
  660.  
  661.         mov     ecx,save_shoot_thread
  662.         mov     edx,shoot_esp
  663. @@:
  664.         bts     dword [flags],2
  665.         jc      .running
  666.         bt      dword [flags],1
  667.         jc      .running
  668.  
  669.         mov     eax,51
  670.         ;mov     ebx,1
  671.         xor     ebx,ebx
  672.         inc     ebx
  673.         mcall
  674. .running:
  675. ret
  676.  
  677. ;--- ¯®â®ª, ¤¥« î騩 1 á­¨¬®ª ---
  678. one_shoot_thread:
  679.         mov     ecx,[slot_n]
  680.         activ_window
  681.         bt      dword [ch1.flags],1   ; ¬¨­¨¬¨§¨à®¢ âì ®ª­® ?
  682.         jnc      @f
  683.         mov     eax,60
  684.         mov     ebx,2
  685.         mov     ecx,[app.pid]
  686.         mov     edx,messages.min_window
  687.         mov     esi,2
  688.         mcall
  689. @@:
  690.         call    shoot
  691.         btr     dword [flags],2
  692.         jmp     close
  693.  
  694. ;--- ¯à®æ¥¤ãà , ®â¯à ¢«ïîé ï £« ¢­®¬ã ®ª­ã á®®¡é¥­¨¥ ® ¯¥à¥à¨á®¢ª¥
  695. ; áâப¨ á®áâ®ï­¨ï ---
  696. send_draw_status:
  697.         mov     eax,60
  698.         mov     ebx,2
  699.         mov     ecx,[app.pid]
  700.         mov     edx,messages.draw_status
  701.         mov     esi,2
  702.         mcall
  703. ret
  704.  
  705. ;--- ¯®â®ª, á®åà ­ï ä ©« ---
  706. save_shoot_thread:
  707.         mov     ecx,[slot_n]
  708.         activ_window
  709.         call    save_file
  710.         btr     dword [flags],2
  711.         jmp     close
  712.  
  713. ;--- ¯à®æ¥¤ãà , § ¯ã᪠îé ï ¯®â®ª ®ª­  ãáâ ­®¢ª¨ ®¡« á⨠áꥬª¨ ---
  714. show_set_rect_window:
  715.         bts     dword [flags],3
  716.         jc      @f
  717.         mov     eax,51
  718.         xor     ebx,ebx
  719.         inc     ebx
  720.         mov     ecx,set_rect_window
  721.         mov     edx,set_rect_window_esp
  722.         mcall
  723.  
  724.         mov     [set_rect_window_pid],eax
  725. ret
  726.  
  727. @@:
  728.         mov     eax,18
  729.         mov     ebx,eax
  730.         mov     ecx,[set_rect_window_pid]
  731.         mcall
  732.         btr     dword [flags],3
  733. ret
  734.  
  735. ;--- ¯®«ã祭¨¥ ¨­ä®à¬ æ¨¨ ®¡  ªâ¨¢­®¬ ®ª­¥ ---
  736. get_active_window_info:
  737.         mov    eax,18
  738.         mov    ebx,7
  739.         mcall
  740.  
  741.         mov     ecx,eax
  742.         mov     eax,9
  743.         mov     ebx,active_app
  744.         mcall
  745. ret
  746.  
  747. ;====================================================================
  748. ;=== ¤ ­­ë¥ ¯à®£à ¬¬ë ===============================================
  749. ;====================================================================
  750. messages:
  751. .draw_number dw 0
  752. .draw_status dw 1
  753. .min_window  dw 2
  754. .act_window  dw 3
  755.  
  756. grab_text:
  757.         db      title,0
  758.  
  759. labels:
  760. label1 label 5,5,0,text.1   ; è¨à¨­  íªà ­ 
  761. label2 label 5,15,0,text.2   ; ¢ëá®â  íªà ­ 
  762. label3 label 5,25,0,text.3   ; ¢¢¥¤¨â¥ ¨¬ï ä ©« 
  763. label4 label 150,5,0,text.4  ; ¡¨â ­  ¯¨ªá¥«ì
  764. label5 label 150,15,0,text.5  ; ¡ ©â ­  áâபã
  765. label6 label 115,138,0,text.6  ; 100 = 1 ᥪ.
  766. ;label7 label 10,190,0,text.7
  767. ;label8 label 10,225,0,text.8
  768. label9 label 5,52,0,text.9   ; ­®¬¥à ⥪ã饣® ᨬª 
  769. label10 label 5,185,0,text.10
  770. status label 5,201,0,no_shoot
  771. labels_end:
  772.  
  773. ;---------------------------------------------------------------------
  774. l_libs_start:
  775.  
  776. library01  l_libs system_dir_Boxlib+9, cur_dir_path, library_path, system_dir_Boxlib, \
  777. err_message_found_lib1, head_f_l, Box_lib_import, err_message_import1, head_f_i
  778.  
  779. library02  l_libs system_dir_ProcLib+9, cur_dir_path, library_path, system_dir_ProcLib, \
  780. err_message_found_lib2, head_f_l, ProcLib_import, err_message_import2, head_f_i
  781.  
  782. end_l_libs:
  783. ;---------------------------------------------------------------------
  784. editboxes:
  785. ;edit1 edit_box 300,5,35,cl_white,0,0,0,0,300,ed_buffer.1,mouse_dd,ed_focus,10,10       ; ¯ãâì ª ä ©«ã
  786. edit2 edit_box 35,75,134,cl_white,0,0,0,0,9,ed_buffer.2,mouse_dd,ed_figure_only,3,3         ; § ¤¥à¦ª 
  787. edit3 edit_box 35,165,164,cl_white,0,0,0,0,9,ed_buffer.3,mouse_dd,ed_figure_only    ;  ¢â®­ã¬¥à æ¨ï
  788. edit4 edit_box 16,165,181,cl_white,0,0,0,0,1,sign_n_input,mouse_dd,ed_figure_only,1
  789. editboxes_end:
  790. ;---------------------------------------------------------------------
  791. buttons:
  792. but1 txt_button 150,5,15,65,2,0,0,but_text.1,one_shoot             ; ᤥ« âì á­¨¬®ª
  793. but2 txt_button 145,160,15,65,3,0,0,but_text.2,save_shoot          ; á®åà ­¨âì á­¨¬®ª
  794. but3 txt_button 140,115,12,120,4,0,0,but_text.3,show_scr_window    ; ¯®ª § âì á­¨¬®ª
  795. but4 txt_button 80,205,15,163,5,0,0,but_text.4,apply_number        ; ¯à¨¬¥­¨âì ­®¬¥à
  796. but5 txt_button 150,5,15,85,6,0,0,but_text.5,start_autoshoot       ; ­ ç âì  ¢â®áêñ¬ªã
  797. but6 txt_button 145,160,15,85,7,0,0,but_text.6,stop_autoshoot      ; ®áâ ­®¢¨âì  ¢â®áêñ¬ªã
  798. but7 txt_button 40,205,10,150,8,0,0,but_text.7,show_set_rect_window ; § ¤ âì ®¡« áâì
  799. buttons_end:
  800. ;---------------------------------------------------------------------
  801. check_boxes:
  802. ch1 check_box2 (5 shl 16+11),(105 shl 16 +11),5,cl_white,0,0x80000000,ch_text.1,ch_flag_en+ch_flag_middle       ; ᢥà­ãâì ®ª­®
  803. ch2 check_box2 (5 shl 16+11),(120 shl 16 +11),5,cl_white,0,0x80000000,ch_text.2,ch_flag_en+ch_flag_middle       ; § â¥¬ ᤥ« âì  ªâ¨¢­ë¬
  804. ch3 check_box2 (1455 shl 16+11),(105 shl 16 +11),5,cl_white,0,0x80000000,ch_text.3,ch_flag_en+ch_flag_middle    ; ¯®ª § âì á­¨¬®ª
  805. ch4 check_box2 (5 shl 16+11),(135 shl 16 +11),5,cl_white,0,0x80000000,ch_text.4,ch_flag_en+ch_flag_middle       ; § ¤¥à¦ª 
  806. ch5 check_box2 (5 shl 16+11),(150 shl 16 +11),5,cl_white,0,0x80000000,ch_text.5,ch_flag_en+ch_flag_middle
  807. ch6 check_box2 (5 shl 16+11),(165 shl 16 +11),5,cl_white,0,0x80000000,ch_text.6,ch_flag_en+ch_flag_middle
  808. use_rect check_box2 (145 shl 16+11),(150 shl 16 +11),5,cl_white,0,0x80000000,ch_text.7,ch_flag_middle           ; ¨á¯. ®¡« áâì
  809. ;  ¢â®­ã¬¥à æ¨ï
  810. check_boxes_end:
  811. ;---------------------------------------------------------------------
  812. if lang eq ru
  813. text:
  814. .2 db '‚ëá®â  íªà ­ :',0
  815. .1 db '˜¨à¨­  íªà ­ :',0
  816. .3 db '‚¢¥¤¨â¥ ¯®«­ë© ¯ãâì ª ä ©«ã:',0
  817. .4 db '¨â ­  ¯¨ªá¥«ì:',0
  818. .5 db ' ©â ­  áâபã:',0
  819. .6 db '100 = 1 ᥪ㭤 ',0
  820. ;.7: db '‚¢¥¤¨â¥ ¨¬ï ä ©« :',0
  821. ;.8: db '‚¬¥áâ® "*" ¢ ¨¬¥­¨ ä ©«  ¡ã¤¥â ¢áâ ¢«ïâìáï ­®¬¥à.',0
  822. .9 db '®¬¥à ⥪ã饣® á­¨¬ª :',0
  823. .10 db 'Š®«¨ç¥á⢮ §­ ª®¢ ¢ ­®¬¥à¥:',0
  824.  
  825. but_text:
  826. .1 db '‘¤¥« âì á­¨¬®ª íªà ­ ',0
  827. .2 db '‘®åà ­¨âì á­¨¬®ª íªà ­ ',0
  828. .3 db '®ª § âì á­¨¬®ª ᥩç á',0
  829. .4 db 'à¨¬¥­¨âì',0
  830. .5 db ' ç âì  ¢â®áꥬªã',0
  831. .6 db 'Žáâ ­®¢¨âì  ¢â®áꥬªã',0
  832. .7 db '§ ¤ âì',0
  833.  
  834. ch_text:
  835. .1 db '‘¢¥à­ãâì ®ª­®',0
  836. .2 db '®ª § âì á­¨¬®ª',0
  837. .3 db '§ â¥¬ ᤥ« âì  ªâ¨¢­ë¬',0
  838. .4 db '‡ ¤¥à¦ª :',0
  839. .5 db '€¢â®á®åà ­¥­¨¥',0
  840. .6 db '€¢â®­ã¬¥à æ¨ï, ­ ç¨­ ï á',0
  841. .7 db 'Ž¡« áâì',0
  842.  
  843. no_shoot db '‘­¨¬®ª ­¥ ᤥ« ­',0
  844. shooting db '”®â®£à ä¨à®¢ ­¨¥...',0
  845. shooted_ok db '‘­¨¬®ª ᤥ« ­',0
  846. saving db '‘®åà ­¥­¨¥...',0
  847. saved_ok db '‘­¨¬®ª á®åà ­¥­',0
  848. delay_now db '‡ ¤¥à¦ª ...',0
  849. bad_file_name db 'ˆ¬ï ä ©«  ¢¢¥¤¥­® ­¥¢¥à­®',0
  850. disk_filled db '„¨áª § ¯®«­¥­',0
  851. bad_fat_table db '’ ¡«¨æ  FAT à §àã襭 ',0
  852. ac_den db '„®áâ㯠§ ¯à¥é¥­',0
  853. device_er db 'Žè¨¡ª  ãáâனá⢠',0
  854. not_shooted db '‘¤¥« ©â¥ á­¨¬®ª !!!',0
  855. no_file_name db '‚¢¥¤¨â¥ ¨¬ï ä ©«  !!!',0
  856. invalid_rect db '¥¤®¯ãáâ¨¬ë¥ à §¬¥àë ®¡« áâ¨',0
  857. keyforexit db 'â® ¢ è á­¨¬®ª. ‚ë室 - «î¡ ï ª« ¢¨è .',0
  858.  
  859.  
  860. else
  861. text:
  862. .2 db 'Screen width:',0
  863. .1 db 'Screen height:',0
  864. .3 db 'Enter full path to the file:',0
  865. .4 db 'Bits per pixel:',0
  866. .5 db 'Bytes per line:',0
  867. .6 db '100 = 1 second',0
  868. ;.7: db 'Enter name of file:',0
  869. ;.8: db 'Instead of "*" in filename the number will be included.',0
  870. .9 db 'Current photo number:',0
  871. .10 db 'Amount of digits in number:',0
  872.  
  873. but_text:
  874. .1 db 'Make screen photo',0
  875. .2 db 'Save screen photo',0
  876. .3 db 'Show photo now',0
  877. .4 db 'Apply',0
  878. .5 db 'Start autoshooting',0
  879. .6 db 'Stop autoshooting',0
  880. .7 db 'Set',0
  881.  
  882. ch_text:
  883. .1 db 'Minimize window',0
  884. .2 db 'Show photo',0
  885. .3 db 'then make active',0
  886. .4 db 'Delay:',0
  887. .5 db 'Autosave',0
  888. .6 db 'Start numeration from',0
  889. .7 db 'Area',0
  890.  
  891. no_shoot db 'There is no photo',0
  892. shooting db 'Photographing...',0
  893. shooted_ok db 'Photo created',0
  894. saving db 'Saving...',0
  895. saved_ok db 'Photo saved',0
  896. delay_now db 'Delay...',0
  897. bad_file_name db 'File name is wrong',0
  898. disk_filled db 'Disk is full',0
  899. bad_fat_table db 'FAT table destroyed',0
  900. ac_den db 'Access denied',0
  901. device_er db 'Device error',0
  902. not_shooted db 'Make a photo !!!',0
  903. no_file_name db 'Enter file name !!!',0
  904. invalid_rect db 'Wrong area size',0
  905. keyforexit db 'This is your screenshot. Press any key.',0
  906.  
  907. end if
  908.  
  909.  
  910.  
  911.  
  912. ;---------------------------------------------------------------------
  913. PathShow_data_1:
  914. .type                   dd 0    ;+0
  915. .start_y                dw 38   ;+4
  916. .start_x                dw 6    ;+6
  917. .font_size_x            dw 6    ;+8     ; 6 - for font 0, 8 - for font 1
  918. .area_size_x            dw 300  ;+10
  919. .font_number            dd 0    ;+12    ; 0 - monospace, 1 - variable
  920. .background_flag        dd 0    ;+16
  921. .font_color             dd 0x0  ;+20
  922. .background_color       dd 0x0  ;+24
  923. .text_pointer           dd fname_buf    ;+28
  924. .work_area_pointer      dd text_work_area       ;+32
  925. .temp_text_length       dd 0    ;+36
  926. ;---------------------------------------------------------------------
  927. OpenDialog_data:
  928. .type                   dd 1    ; Save
  929. .procinfo               dd procinfo     ;+4
  930. .com_area_name          dd communication_area_name      ;+8
  931. .com_area               dd 0    ;+12
  932. .opendir_pach           dd temp_dir_pach        ;+16
  933. .dir_default_pach       dd communication_area_default_pach      ;+20
  934. .start_path             dd open_dialog_path     ;+24
  935. .draw_window            dd draw_window  ;+28
  936. .status                 dd 0    ;+32
  937. .openfile_pach          dd fname_buf    ;+36
  938. .filename_area          dd filename_area        ;+40
  939. .filter_area            dd Filter
  940. .x:
  941. .x_size                 dw 420 ;+48 ; Window X size
  942. .x_start                dw 10 ;+50 ; Window X position
  943. .y:
  944. .y_size                 dw 320 ;+52 ; Window y size
  945. .y_start                dw 10 ;+54 ; Window Y position
  946.  
  947. communication_area_name:
  948.         db 'FFFFFFFF_open_dialog',0
  949. open_dialog_path:
  950. if __nightbuild eq yes
  951.         db '/sys/MANAGERS/opendial',0
  952. else
  953.         db '/sys/File Managers/opendial',0
  954. end if
  955. communication_area_default_pach:
  956.         db '/sys',0
  957.  
  958. Filter:
  959. dd      Filter.end - Filter
  960. .1:
  961. db      'BMP',0
  962. .end:
  963. db      0
  964.  
  965. start_temp_file_name:   db '1.bmp',0
  966.  
  967. ;---------------------------------------------------------------------
  968. sign_n_input:
  969.         db      '2',0
  970.  
  971. PrintScreen     db  0
  972. autoshoot_flag  db  0
  973.        
  974. app_ipc ipc_buffer 32
  975. align 4
  976.  
  977. mouse_flag: dd 0x0
  978. ;---------------------------------------------------------------------
  979. align 4
  980.  
  981. ed_buffer:
  982. .1: db '/sys/1.bmp',0
  983. ;rb 287
  984. .2:
  985.         db '100',0
  986.         rb 6
  987. .3:
  988.         rb 10
  989. ;--------------------------------------------------------------------- 
  990. IM_END:
  991. ;---------------------------------------------------------------------
  992. structure_of_potock:
  993. rb 100
  994. ;---------------------------------------------------------------------
  995. align 4
  996.  
  997. cur_number        dd      ?
  998.  
  999. sign_n        db      ?
  1000.  
  1001. slot_n        dd ?
  1002.  
  1003. flags        dd ?
  1004.  
  1005. scr_buf:
  1006. .ptr        dd      ?
  1007. .end_ptr        dd      ?
  1008. .size:
  1009. .height        dw      ?
  1010. .width        dw      ?
  1011.  
  1012. fs_struc:
  1013. .funk_n        dd      ?
  1014.         dd      ?
  1015.         dd      ?
  1016. .bytes_to_write  dd      ?
  1017. .data_ptr        dd    ?,?
  1018. .fn_ptr        dd      ?
  1019.  
  1020. sf_buf:
  1021. .bmp_header   dd      ?
  1022. .bmp_area     dd      ?
  1023. .end          dd      ?
  1024.  
  1025. set_rect_window_pid dd ?
  1026. set_rect_window_slot dd ?
  1027. ;---------------------------------------------------------------------
  1028. align 4
  1029. rect_input_buffer:
  1030. .left rb 6
  1031. .top  rb 6
  1032. .width  rb 6
  1033. .height rb 6
  1034.  
  1035. cmdstr rb 257
  1036. ;---------------------------------------------------------------------
  1037. align 4
  1038.  
  1039. file_name:
  1040.         rb      1058
  1041.  
  1042. scr screen_prop
  1043. rect:
  1044. .left dw ?
  1045. .top dw ?
  1046. .height dw ?
  1047. .width dw ?
  1048.  
  1049. sc sys_color_table
  1050. app procinfo        ; ¨­ä®à¬ æ¨ï ® £« ¢­®¬ ®ª­¥
  1051. active_app procinfo ; ¨­ä®à¬ æ¨ï ®¡  ªâ¨¢­®¬ ®ª­¥
  1052. set_rect_window_procinfo procinfo  ; ¨­ä®à¬ æ¨ï ®¡ ®ª­¥ ®¡« áâ¨
  1053. ;---------------------------------------------------------------------
  1054.         rb 512             ; á⥪ ¯®â®ª  ä®âª ­ìï
  1055. shoot_esp:
  1056. ;---------------------------------------------------------------------
  1057.         rb 512     ; á⥪ ®ª­  ®¡« áâ¨
  1058. set_rect_window_esp:
  1059. ;---------------------------------------------------------------------
  1060. ;        app_end    ; ª®­¥æ ¯à®£à ¬¬ë
  1061. mouse_dd        rd 1
  1062. ;---------------------------------------------------------------------
  1063. align 4
  1064. cur_dir_path:
  1065.         rb 4096
  1066. ;---------------------------------------------------------------------
  1067. library_path:
  1068.         rb 4096
  1069. ;---------------------------------------------------------------------
  1070. temp_dir_pach:
  1071.         rb 4096
  1072. ;---------------------------------------------------------------------
  1073. text_work_area:
  1074.         rb 1024
  1075. ;---------------------------------------------------------------------
  1076. fname_buf:
  1077.         rb 4096
  1078. ;---------------------------------------------------------------------
  1079. procinfo:
  1080.         rb 1024
  1081. ;---------------------------------------------------------------------
  1082. filename_area:
  1083.         rb 256
  1084. ;---------------------------------------------------------------------
  1085.         rb 1024
  1086. i_end_tread:
  1087. ;---------------------------------------------------------------------
  1088.         rb 1024
  1089. stacktop:
  1090. ;---------------------------------------------------------------------
  1091. i_end: