Subversion Repositories Kolibri OS

Rev

Rev 2628 | 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
 
5158 hidnplayr 17
format binary as ""
18
 
2246 leency 19
title equ 'Screenshooter v 1.2' ; Заголовок окна
1109 Lrz 20
include '../../develop/libraries/box_lib/load_lib.mac'
1373 IgorA 21
include '../../develop/libraries/box_lib/trunk/box_lib.mac'
1098 Lrz 22
;include '../../develop/examples/editbox/trunk/editbox.inc'
1702 Lrz 23
include '../../config.inc'		;for nightbuild
1098 Lrz 24
include '../../macros.inc'
25
include 'txtbut.inc'
26
include 'label.inc'
27
include 'textwork.inc'
1228 Lrz 28
include 'scrshoot.mac'
205 heavyiron 29
 
1098 Lrz 30
;include 'macros.inc'  ; вставляем макросы
31
;        meos_header  cmdstr ; вставляем заголовок программы
1373 IgorA 32
use32
1098 Lrz 33
    org 0x0
34
    db 'MENUET01'
35
    dd 0x1
36
    dd start
1608 mario79 37
    dd IM_END
1098 Lrz 38
    dd i_end
1608 mario79 39
    dd stacktop
1098 Lrz 40
    dd cmdstr
41
    dd cur_dir_path
42
 
43
align 4
1373 IgorA 44
	@use_library
45
	use_txt_button				;  |
46
	use_label				;  |-- GUI компоненты и некоторые процедуры
47
	use_text_work				; /
1228 Lrz 48
include 'scrwin.inc'  ; вставляем код окна прдпросмотра
49
include 'scrsavef.inc'; вставляем процедуру сохранения файла
50
 
307 Lrz 51
include 'gp.inc'
52
include 'srectwin.inc'
310 heavyiron 53
include 'lang.inc'
1373 IgorA 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
 
205 heavyiron 72
;--- начало программы ---
1098 Lrz 73
align 4
74
start:
1608 mario79 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
 
1098 Lrz 80
;if return code =-1 then exit, else nornary work
81
;        cmp     eax,-1
1373 IgorA 82
	inc	eax
83
	test	eax,eax
84
	jz	close
1098 Lrz 85
;;;;;;;;;;;;;;;; init memory 68/11
1373 IgorA 86
	mov	eax,68
87
	mov	ebx,11
88
	mcall
89
	test	eax,eax
90
	jz	close
1098 Lrz 91
 
1608 mario79 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
;---------------------------------------------------------------------
1373 IgorA 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
205 heavyiron 132
 
1373 IgorA 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
205 heavyiron 140
 
1373 IgorA 141
	mov	ebx,app
142
	call	get_slot_n
143
	mov	[slot_n],ecx
205 heavyiron 144
 
1373 IgorA 145
	; устанавливаем маску событий
146
	set_events_mask (evm_redraw+evm_key+evm_button+evm_mouse+evm_ipc)
1685 lrz 147
;инициализация checkboxes
148
	init_checkboxes2	check_boxes,check_boxes_end
205 heavyiron 149
 
150
; сюда прыгаем при каждой перерисовке
151
red:
1373 IgorA 152
	get_procinfo app   ; получаем информацию о процессе
153
	get_sys_colors sc  ; получаем системные цвета
205 heavyiron 154
 
1373 IgorA 155
	; устанавливаем системные цвета у GUI компонентов
156
	txt_but_set_sys_color buttons,buttons_end,sc		 ; \
157
	labels_set_sys_color labels,labels_end,sc		 ; |
1685 lrz 158
	check_boxes_set_sys_color2 check_boxes,check_boxes_end,sc; |
159
;	check_boxes_set_sys_color check_boxes,check_boxes_end,sc ; |
1373 IgorA 160
	edit_boxes_set_sys_color editboxes,editboxes_end,sc	 ; /
205 heavyiron 161
 
1373 IgorA 162
	get_screen_prop scr ; получаем информацию об экране
2628 mario79 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:
1373 IgorA 208
	call	draw_window ; перерисовываем окно
205 heavyiron 209
still:
1373 IgorA 210
	wait_event red,key,button,mouse,ipc,still ; ждем событий
205 heavyiron 211
 
212
key:
1373 IgorA 213
	get_key
214
	cmp	al,2
215
	jne	@f
216
	cmp	ah,55
1608 mario79 217
	jne	still
218
	mov	[PrintScreen],1
1373 IgorA 219
	call	shoot
1608 mario79 220
	mov	[PrintScreen],0
1373 IgorA 221
	jmp	still
205 heavyiron 222
@@:
1098 Lrz 223
;        key_edit_boxes editboxes,editboxes_end
1608 mario79 224
;	push	dword edit1
225
;	call	[edit_box_key]
1098 Lrz 226
 
1373 IgorA 227
	push	dword edit2
228
	call	[edit_box_key]
1098 Lrz 229
 
1373 IgorA 230
	push	dword edit3
231
	call	[edit_box_key]
1098 Lrz 232
 
1373 IgorA 233
	push	dword edit4
234
	call	[edit_box_key]
1098 Lrz 235
 
1373 IgorA 236
	jmp	still
205 heavyiron 237
button:
1373 IgorA 238
	get_pressed_button
239
	cmp	ah,1
240
	je	p_close
241
	txt_but_ev buttons,buttons_end
242
	jmp	still
205 heavyiron 243
mouse:
1373 IgorA 244
	get_active_window
245
	cmp	eax,[slot_n]
246
	jne	still
1098 Lrz 247
;----------------------------------
1608 mario79 248
;	push	dword edit1
249
;	call	[edit_box_mouse]
1373 IgorA 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]
1098 Lrz 256
;----------------------------------
1685 lrz 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]
1098 Lrz 272
;-----------------------------------
273
;        mouse_check_boxes check_boxes,check_boxes_end
274
;        mouse_edit_boxes editboxes,editboxes_end
1373 IgorA 275
	jmp	still
205 heavyiron 276
ipc:
1373 IgorA 277
	cmp	word [app_ipc+8],2
278
	jne	@f
279
	min_window
280
	jmp	.clear_ipc
205 heavyiron 281
@@:
1373 IgorA 282
	cmp	word [app_ipc+8],3
283
	jne	@f
284
	mov	ecx,[slot_n]
285
	activ_window
286
	jmp	.clear_ipc
1100 Lrz 287
@@:
1373 IgorA 288
	call	draw_number
289
	call	dr_st
205 heavyiron 290
 
291
.clear_ipc:
1373 IgorA 292
	cld
293
	xor	eax,eax
294
	mov	ecx,32/4
295
	mov	edi,app_ipc
296
	rep	stosd
297
	jmp	still
205 heavyiron 298
 
299
p_close:
1373 IgorA 300
	btr	dword [flags],1
307 Lrz 301
 
1373 IgorA 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
307 Lrz 308
@@:
309
 
205 heavyiron 310
close:
1373 IgorA 311
	app_close
205 heavyiron 312
 
1608 mario79 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
205 heavyiron 322
;--------------------------------------------------------------------
323
;--- прооцедура перерисовки главного окна ---------------------------
324
;--------------------------------------------------------------------
325
draw_window:
1373 IgorA 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
205 heavyiron 339
 
1373 IgorA 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
205 heavyiron 365
 
1373 IgorA 366
	call	draw_number	 ; прорисовываем номер снимка
367
	call	dr_st
205 heavyiron 368
 
1373 IgorA 369
	draw_labels labels,labels_end		 ; метки
1098 Lrz 370
;        draw_edit_boxes editboxes,editboxes_end  ; edit_box
371
;------ show check editbox -----------
1608 mario79 372
;	push	dword edit1
373
;	call	[edit_box_draw]
1373 IgorA 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]
1098 Lrz 380
;------ end check all editbox -------
381
 
1608 mario79 382
	call	draw_PathShow
383
 
1373 IgorA 384
	draw_txt_buttons buttons,buttons_end	 ; кнопки
1098 Lrz 385
;        draw_check_boxes check_boxes,check_boxes_end ; флажки
386
;------ check all checkbox ---------
1685 lrz 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
 
1098 Lrz 404
;------ end check all checkbox ------
405
 
205 heavyiron 406
stop_draw_window      ; конец перерисовки
407
ret
408
 
409
shoot:
1373 IgorA 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
205 heavyiron 417
@@:
1373 IgorA 418
	call	get_mem_for_shoot; получаем память для снимка
205 heavyiron 419
 
420
 
1373 IgorA 421
	bts	dword [flags],0       ; нулевой флаг - снимок есть в памяти
205 heavyiron 422
 
1373 IgorA 423
	; делаем снимок
424
	draw_status shooting
425
	mov	esi,scr
426
	mov	edi,[scr_buf.ptr]
427
	call	copy_screen_to_image
205 heavyiron 428
 
1373 IgorA 429
	bt	dword [use_rect.flags],1
430
	jc	.use_rect
431
	push	dword [scr]
432
	jmp	@f
307 Lrz 433
.use_rect:
1373 IgorA 434
	push	dword [rect.height]
307 Lrz 435
@@:
1373 IgorA 436
	pop	dword [scr_buf.size]
205 heavyiron 437
 
1610 mario79 438
	cmp	[autoshoot_flag],1
439
	jne	.2
440
 
441
	bt	dword [ch5.flags],1  ; включено ли автосохранение ?
442
	jnc	@f
443
	call	save_file
444
@@:
1373 IgorA 445
	draw_status	shooted_ok
1610 mario79 446
.2:
1373 IgorA 447
	bt	dword [flags],1
448
	jnc	@f
449
	ret
205 heavyiron 450
@@:
451
 
1373 IgorA 452
	bt	dword [ch2.flags],1  ; показать окно предпросмотра ?
453
	jnc	@f
1610 mario79 454
	cmp	[PrintScreen],0
1608 mario79 455
	jne	@f
1373 IgorA 456
	call	show_scr_window
1100 Lrz 457
	ret
205 heavyiron 458
@@:
1608 mario79 459
	bt	dword [ch5.flags],1  ; включено ли автосохранение ?
460
	jnc	@f
461
 
2628 mario79 462
	call	[OpenDialog_data.draw_window]
1608 mario79 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]
2628 mario79 473
 
474
	call	[OpenDialog_data.draw_window]
1608 mario79 475
 
476
	call	save_file
477
@@:
478
 
1373 IgorA 479
	bt	word [ch3.flags],1   ; восстановить окно ?
480
	jnc	@f
205 heavyiron 481
 
1373 IgorA 482
	delay 100
483
	mov	ecx,[slot_n]
484
	activ_window
205 heavyiron 485
@@:
486
ret
487
 
307 Lrz 488
;--- получить память для снимка ---
205 heavyiron 489
get_mem_for_shoot:
1098 Lrz 490
;clean memory
1373 IgorA 491
	mov	ecx,dword [scr_buf.ptr]
492
	mov	ebx,13
493
	mov	eax,68
494
	mcall
1098 Lrz 495
 
1373 IgorA 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
307 Lrz 501
.use_area:
1373 IgorA 502
	call	read_rect
503
	movzx	ecx, word [rect.width]
504
	movzx	ebx, word [rect.height]
307 Lrz 505
@@:
1373 IgorA 506
	imul	ecx,ebx
507
	lea	ecx,[ecx*3]
1098 Lrz 508
;        add     ecx,i_end
1373 IgorA 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
205 heavyiron 515
ret
516
 
517
;--- содать окно проедпросмотра ---
518
show_scr_window:
519
pusha
1373 IgorA 520
	bt	dword [flags],0
521
	jnc	@f
522
	mov	eax,51
523
	xor	ebx,ebx
524
	inc	ebx
525
	mov	ecx,scr_window
1610 mario79 526
	mov	edx,i_end_tread-512
1373 IgorA 527
	mcall
205 heavyiron 528
@@:
529
popa
530
ret
531
 
532
;--- прочитать и нарисовать текущий номер ---
533
apply_number:
1373 IgorA 534
	mov	edi,ed_buffer.3
535
	call	zstr_to_int
536
	mov	[cur_number],eax
537
	call	draw_number
205 heavyiron 538
ret
539
 
540
;--- процедура прорисовки текущего номера ---
541
draw_number:
1373 IgorA 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
205 heavyiron 561
ret
562
 
563
;--- процедура, запускающая поток автосъемки ---
564
start_autoshoot:
1373 IgorA 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
1610 mario79 572
	mov	edx,i_end_tread
1373 IgorA 573
	mcall
205 heavyiron 574
@@:
575
ret
576
 
577
;--- останавливает этот поток ---
578
stop_autoshoot:
1373 IgorA 579
	btr	dword [flags],1
205 heavyiron 580
ret
581
 
582
;--- цикл потока автосъемки ---
583
autoshoot:
1610 mario79 584
	mov	[autoshoot_flag],1
1373 IgorA 585
	mov	ecx,[slot_n]
586
	activ_window
205 heavyiron 587
.next:
1373 IgorA 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
1610 mario79 598
.close:
599
	mov	[autoshoot_flag],0
600
	jmp	close
205 heavyiron 601
;--- процедура прорисовки строки состояния ---
602
; (должна вызываться потоком главного окна)
603
dr_st:
1373 IgorA 604
	mov	eax,38		    ; отрезок
605
	mov	ebx,0*65536+310
606
	mov	ecx,198*65536+198
607
	mov	edx,[sc.work_graph]
608
	mcall
205 heavyiron 609
 
1373 IgorA 610
	mov	eax,13		    ; полоска
611
	mov	bx,310
612
	mov	ecx,199*65536+15
613
	mov	edx,[sc.work]
614
	mcall
205 heavyiron 615
 
1373 IgorA 616
	mov	edi,status
617
	call	draw_label
205 heavyiron 618
ret
619
 
620
;--- процедура получения номера слота потока ---
621
; вход ebx - буффер 1024 байт
622
; выход ecx - номер слота
623
get_slot_n:
1373 IgorA 624
	mov	eax,9
625
	xor	ecx,ecx
626
	dec	ecx
627
	mcall
205 heavyiron 628
 
1373 IgorA 629
	mov	edx,[ebx+30]
630
	xor	ecx,ecx
205 heavyiron 631
@@:
1373 IgorA 632
	mov	eax,9
633
	inc	ecx
634
	mcall
635
	cmp	[ebx+30],edx
636
	je	@f
637
	jmp	@b
205 heavyiron 638
@@:
639
ret
640
 
307 Lrz 641
;--- процедура, запускающая поток, делающий 1 снимок ---
205 heavyiron 642
one_shoot:
1373 IgorA 643
	mov	ecx,one_shoot_thread
644
	mov	edx,shoot_esp
645
	jmp	@f
307 Lrz 646
;--- процедра, запускающая поток, сохраняющий снимок ---
205 heavyiron 647
save_shoot:
1608 mario79 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
 
1373 IgorA 661
	mov	ecx,save_shoot_thread
662
	mov	edx,shoot_esp
205 heavyiron 663
@@:
1373 IgorA 664
	bts	dword [flags],2
665
	jc	.running
666
	bt	dword [flags],1
667
	jc	.running
205 heavyiron 668
 
1373 IgorA 669
	mov	eax,51
670
	;mov     ebx,1
671
	xor	ebx,ebx
672
	inc	ebx
673
	mcall
205 heavyiron 674
.running:
675
ret
676
 
307 Lrz 677
;--- поток, делающий 1 снимок ---
205 heavyiron 678
one_shoot_thread:
1373 IgorA 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
205 heavyiron 689
@@:
1373 IgorA 690
	call	shoot
691
	btr	dword [flags],2
692
	jmp	close
205 heavyiron 693
 
307 Lrz 694
;--- процедура, отправляющая главному окну сообщение о перерисовке
695
; строки состояния ---
205 heavyiron 696
send_draw_status:
1373 IgorA 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
205 heavyiron 703
ret
704
 
307 Lrz 705
;--- поток, сохраняюий файл ---
205 heavyiron 706
save_shoot_thread:
1373 IgorA 707
	mov	ecx,[slot_n]
708
	activ_window
709
	call	save_file
710
	btr	dword [flags],2
711
	jmp	close
205 heavyiron 712
 
307 Lrz 713
;--- процедура, запускающая поток окна установки области съемки ---
714
show_set_rect_window:
1373 IgorA 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
307 Lrz 723
 
1373 IgorA 724
	mov	[set_rect_window_pid],eax
307 Lrz 725
ret
726
 
727
@@:
1373 IgorA 728
	mov	eax,18
729
	mov	ebx,eax
730
	mov	ecx,[set_rect_window_pid]
731
	mcall
732
	btr	dword [flags],3
307 Lrz 733
ret
734
 
735
;--- получение информации об активном окне ---
736
get_active_window_info:
1373 IgorA 737
	mov    eax,18
738
	mov    ebx,7
739
	mcall
307 Lrz 740
 
1373 IgorA 741
	mov	ecx,eax
742
	mov	eax,9
743
	mov	ebx,active_app
744
	mcall
307 Lrz 745
ret
746
 
205 heavyiron 747
;====================================================================
748
;=== данные программы ===============================================
749
;====================================================================
750
messages:
751
.draw_number dw 0
752
.draw_status dw 1
753
.min_window  dw 2
1100 Lrz 754
.act_window  dw 3
205 heavyiron 755
 
756
grab_text:
1373 IgorA 757
	db	title,0
307 Lrz 758
 
205 heavyiron 759
labels:
307 Lrz 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 сек.
205 heavyiron 766
;label7 label 10,190,0,text.7
767
;label8 label 10,225,0,text.8
307 Lrz 768
label9 label 5,52,0,text.9   ; номер текущего симка
769
label10 label 5,185,0,text.10
770
status label 5,201,0,no_shoot
205 heavyiron 771
labels_end:
772
 
1608 mario79 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
;---------------------------------------------------------------------
205 heavyiron 784
editboxes:
1608 mario79 785
;edit1 edit_box 300,5,35,cl_white,0,0,0,0,300,ed_buffer.1,mouse_dd,ed_focus,10,10	; путь к файлу
1373 IgorA 786
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 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
205 heavyiron 789
editboxes_end:
1608 mario79 790
;---------------------------------------------------------------------
205 heavyiron 791
buttons:
1373 IgorA 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	   ; сохранить снимок
307 Lrz 794
but3 txt_button 140,115,12,120,4,0,0,but_text.3,show_scr_window    ; показать снимок
1373 IgorA 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	   ; остановить автосъёмку
307 Lrz 798
but7 txt_button 40,205,10,150,8,0,0,but_text.7,show_set_rect_window ; задать область
205 heavyiron 799
buttons_end:
1608 mario79 800
;---------------------------------------------------------------------
205 heavyiron 801
check_boxes:
2246 leency 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		; исп. область
205 heavyiron 809
; автонумерация
810
check_boxes_end:
1608 mario79 811
;---------------------------------------------------------------------
205 heavyiron 812
if lang eq ru
813
text:
307 Lrz 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
205 heavyiron 820
;.7: db 'Введите имя файла:',0
821
;.8: db 'Вместо "*" в имени файла будет вставляться номер.',0
307 Lrz 822
.9 db 'Номер текущего снимка:',0
823
.10 db 'Количество знаков в номере:',0
205 heavyiron 824
 
825
but_text:
307 Lrz 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
205 heavyiron 833
 
834
ch_text:
1685 lrz 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
205 heavyiron 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
307 Lrz 856
invalid_rect db 'Недопустимые размеры области',0
2431 leency 857
keyforexit db 'Это ваш снимок. Выход - любая клавиша.',0
310 heavyiron 858
 
2431 leency 859
 
310 heavyiron 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:
1685 lrz 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
310 heavyiron 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
1098 Lrz 902
not_shooted db 'Make a photo !!!',0
310 heavyiron 903
no_file_name db 'Enter file name !!!',0
904
invalid_rect db 'Wrong area size',0
2432 leency 905
keyforexit db 'This is your screenshot. Press any key.',0
310 heavyiron 906
 
205 heavyiron 907
end if
908
 
2431 leency 909
 
910
 
911
 
1608 mario79 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:
1702 Lrz 950
if __nightbuild eq yes
951
	db '/sys/MANAGERS/opendial',0
952
else
1608 mario79 953
	db '/sys/File Managers/opendial',0
1702 Lrz 954
end if
1608 mario79 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
;---------------------------------------------------------------------
205 heavyiron 968
sign_n_input:
1373 IgorA 969
	db	'2',0
205 heavyiron 970
 
1608 mario79 971
PrintScreen	db  0
1610 mario79 972
autoshoot_flag	db  0
1608 mario79 973
 
205 heavyiron 974
app_ipc ipc_buffer 32
1098 Lrz 975
align 4
205 heavyiron 976
 
451 heavyiron 977
mouse_flag: dd 0x0
1608 mario79 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
;---------------------------------------------------------------------
451 heavyiron 992
structure_of_potock:
993
rb 100
1608 mario79 994
;---------------------------------------------------------------------
1098 Lrz 995
align 4
996
 
1373 IgorA 997
cur_number	  dd	  ?
205 heavyiron 998
 
1373 IgorA 999
sign_n	      db      ?
205 heavyiron 1000
 
1373 IgorA 1001
slot_n	      dd ?
205 heavyiron 1002
 
1373 IgorA 1003
flags	     dd ?
205 heavyiron 1004
 
1005
scr_buf:
1373 IgorA 1006
.ptr	    dd	    ?
1007
.end_ptr	dd	?
205 heavyiron 1008
.size:
1009
.height        dw      ?
1373 IgorA 1010
.width	      dw      ?
205 heavyiron 1011
 
1012
fs_struc:
1013
.funk_n        dd      ?
1373 IgorA 1014
	dd	?
1015
	dd	?
1016
.bytes_to_write  dd	 ?
1017
.data_ptr	 dd    ?,?
205 heavyiron 1018
.fn_ptr        dd      ?
1019
 
1020
sf_buf:
1021
.bmp_header   dd      ?
1022
.bmp_area     dd      ?
1373 IgorA 1023
.end	      dd      ?
205 heavyiron 1024
 
307 Lrz 1025
set_rect_window_pid dd ?
1026
set_rect_window_slot dd ?
1608 mario79 1027
;---------------------------------------------------------------------
1098 Lrz 1028
align 4
307 Lrz 1029
rect_input_buffer:
1030
.left rb 6
1031
.top  rb 6
1373 IgorA 1032
.width	rb 6
307 Lrz 1033
.height rb 6
1034
 
205 heavyiron 1035
cmdstr rb 257
1608 mario79 1036
;---------------------------------------------------------------------
1098 Lrz 1037
align 4
205 heavyiron 1038
 
1039
file_name:
1373 IgorA 1040
	rb	1058
205 heavyiron 1041
 
1042
scr screen_prop
307 Lrz 1043
rect:
1044
.left dw ?
1045
.top dw ?
1046
.height dw ?
1047
.width dw ?
1048
 
205 heavyiron 1049
sc sys_color_table
1373 IgorA 1050
app procinfo	    ; информация о главном окне
307 Lrz 1051
active_app procinfo ; информация об активном окне
1052
set_rect_window_procinfo procinfo  ; информация об окне области
1608 mario79 1053
;---------------------------------------------------------------------
1054
	rb 512		   ; стек потока фотканья
1055
shoot_esp:
1056
;---------------------------------------------------------------------
1057
	rb 512	   ; стек окна области
1058
set_rect_window_esp:
1059
;---------------------------------------------------------------------
1098 Lrz 1060
;        app_end    ; конец программы
1214 Lrz 1061
mouse_dd	rd 1
1608 mario79 1062
;---------------------------------------------------------------------
1098 Lrz 1063
align 4
1608 mario79 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
1098 Lrz 1086
i_end_tread:
1608 mario79 1087
;---------------------------------------------------------------------
1088
	rb 1024
1089
stacktop:
1090
;---------------------------------------------------------------------
1098 Lrz 1091
i_end: