Subversion Repositories Kolibri OS

Rev

Rev 2432 | Rev 6763 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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