Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
205 heavyiron 1
; Автор программы Евтихов Максим (Maxxxx32)
307 Lrz 2
; 01.02.07 - обновлён editbox
3
; 31.01.07 - всё теперь рисуется относительно клиентской области
205 heavyiron 4
macro draw_status text_ptr
5
{
6
	mov	[status.text],dword text_ptr
7
	call	send_draw_status
8
}
9
 
10
 
307 Lrz 11
title equ 'Screenshooter v 0.9' ; Заголовок окна
205 heavyiron 12
include 'macros.inc'  ; вставляем макросы
13
	meos_header  cmdstr ; вставляем заголовок программы
14
include 'scrwin.inc'  ; вставляем код окна прдпросмотра
15
include 'scrsavef.inc'; вставляем процедуру сохранения файла
16
	use_edit_box   ; \
17
	use_txt_button ;  |
307 Lrz 18
	use_label      ;  |-- GUI компоненты и некоторые процедуры
205 heavyiron 19
	use_check_box  ;  |
20
	use_text_work  ; /
307 Lrz 21
include 'gp.inc'
22
include 'srectwin.inc'
310 heavyiron 23
include 'lang.inc'
205 heavyiron 24
;--- начало программы ---
25
	app_start
307 Lrz 26
	;mov     al,[gs:1280*4*1024]
205 heavyiron 27
		    ; устанавливаем ipc буффер
28
	push	60
29
	pop	eax
30
	;mov     ebx,1
31
	xor	ebx,ebx
32
	inc	ebx
33
	mov	ecx,app_ipc
34
	mov	edx,32
35
	int	0x40
36
 
37
	push	66   ; устанавливаем глобальную горячую клавишу
38
	pop	eax
39
	push	eax
40
	mov	ebx,4
41
	mov	cl,55	 ; 55 - PrintScrn
42
	xor	edx,edx
43
	int	0x40
44
 
45
	mov	ebx,app
46
	call	get_slot_n
47
	mov	[slot_n],ecx
48
 
49
	; устанавливаем маску событий
50
	set_events_mask (evm_redraw+evm_key+evm_button+evm_mouse+evm_ipc)
51
 
52
; сюда прыгаем при каждой перерисовке
53
red:
54
	get_procinfo app   ; получаем информацию о процессе
55
	get_sys_colors sc  ; получаем системные цвета
56
 
57
	; устанавливаем системные цвета у GUI компонентов
58
	txt_but_set_sys_color buttons,buttons_end,sc		 ; \
59
	labels_set_sys_color labels,labels_end,sc		 ; |
60
	check_boxes_set_sys_color check_boxes,check_boxes_end,sc ; |
61
	edit_boxes_set_sys_color editboxes,editboxes_end,sc	 ; /
62
 
63
	get_screen_prop scr ; получаем информацию об экране
64
	call	draw_window ; перерисовываем окно
65
still:
66
	wait_event red,key,button,mouse,ipc,still ; ждем событий
67
 
68
key:
69
	get_key
70
	cmp	al,2
71
	jne	@f
72
	cmp	ah,55
73
	jne	@f
74
	call	shoot
75
	jmp	still
76
@@:
77
	key_edit_boxes editboxes,editboxes_end
78
	jmp	still
79
button:
80
	get_pressed_button
81
	cmp	ah,1
82
	je	p_close
83
	txt_but_ev buttons,buttons_end
84
	jmp	still
85
mouse:
86
	get_active_window
87
	cmp	eax,[slot_n]
88
	jne	still
89
	mouse_check_boxes check_boxes,check_boxes_end
90
	mouse_edit_boxes editboxes,editboxes_end
91
	jmp	still
92
ipc:
93
	cmp	word [app_ipc+8],2
94
	jne	@f
95
	min_window
96
	jmp	.clear_ipc
97
@@:
98
 
99
	call	draw_number
100
	call	dr_st
101
 
102
.clear_ipc:
103
	cld
104
	xor	eax,eax
105
	movr	 ecx,32
106
	mov	edi,app_ipc
107
	rep	stosb
108
	jmp	still
109
 
110
p_close:
111
	btr	dword [flags],1
307 Lrz 112
 
113
	bt	dword [flags],3
114
	jnc	@f
115
	movr	eax,18
116
	mov	ebx,eax
117
	mov	ecx,[set_rect_window_pid]
118
	int	0x40
119
@@:
120
 
205 heavyiron 121
close:
122
	app_close
123
 
124
;--------------------------------------------------------------------
125
;--- прооцедура перерисовки главного окна ---------------------------
126
;--------------------------------------------------------------------
127
draw_window:
128
start_draw_window	 ; начало перерисовки
307 Lrz 129
	; определяем окно
130
	get_skin_height
205 heavyiron 131
	mov	ebx,100*65536+320
307 Lrz 132
	mov	ecx,100*65536+220
133
	add	cx,ax
205 heavyiron 134
	mov	edx,[sc.work]
307 Lrz 135
	add	edx,0x33000000;0x33000000
205 heavyiron 136
	xor	esi,esi
307 Lrz 137
	;xor     edi,edi
138
	mov	edi,grab_text
139
	xor	eax,eax
205 heavyiron 140
	int	0x40
141
 
142
	movr	 eax,47 	    ; выводим числа в окно
143
	mov	bx,4
144
	shl	ebx,16
145
	movsx	ecx,word [scr.width] ; ширина экрана
146
	mov	dx,95
147
	shl	edx,16
148
	mov	dx,[label1.top]
149
	push	dx
150
	mov	esi,[sc.work_text]
151
	int	0x40
152
	movsx	ecx,word [scr.height]	; высота экрана
153
	mov	dx,[label2.top]
154
	int	0x40
155
	mov	bx,2
156
	shl	ebx,16
157
	movsx	ecx,word [scr.bitspp]	; бит на пиксель
158
	mov	dx,240
159
	shl	edx,16
160
	pop	dx
161
	int	0x40
162
	mov	bx,6
163
	shl	ebx,16
164
	mov	ecx,[scr.bytesps]	; байт на строку
165
	mov	dx,[label2.top]
166
	int	0x40
167
 
168
	call	draw_number	 ; прорисовываем номер снимка
169
	call	dr_st
170
 
171
	draw_labels labels,labels_end		 ; метки
172
	draw_edit_boxes editboxes,editboxes_end  ; edit_box
173
	draw_txt_buttons buttons,buttons_end	 ; кнопки
174
	draw_check_boxes check_boxes,check_boxes_end ; флажки
175
stop_draw_window      ; конец перерисовки
176
ret
177
 
178
shoot:
179
	bt	dword [ch4.flags],1   ; включена ли задержка ?
180
	jnc	@f
181
	draw_status delay_now
182
	mov	edi,ed_buffer.2
183
	call	zstr_to_int
184
	mov	ebx,eax
185
	delay
186
@@:
187
	call	get_mem_for_shoot; получаем память для снимка
188
 
189
 
190
	bts	dword [flags],0       ; нулевой флаг - снимок есть в памяти
191
 
192
	; делаем снимок
193
	draw_status shooting
194
	mov	esi,scr
195
	mov	edi,[scr_buf.ptr]
196
	call	copy_screen_to_image
197
 
307 Lrz 198
	bt	dword [use_rect.flags],1
199
	jc	.use_rect
205 heavyiron 200
	push	dword [scr]
307 Lrz 201
	jmp	@f
202
.use_rect:
203
	push	dword [rect.height]
204
@@:
205 heavyiron 205
	pop	dword [scr_buf.size]
206
 
207
	bt	dword [ch5.flags],1  ; включено ли автосохранение ?
208
	jnc	@f
209
	call	save_file
210
@@:
211
	draw_status	shooted_ok
212
 
213
	bt	dword [flags],1
214
	jnc	@f
215
	ret
216
@@:
217
 
218
	bt	dword [ch2.flags],1  ; показать окно предпросмотра ?
219
	jnc	@f
220
	call	show_scr_window
221
@@:
222
	bt	word [ch3.flags],1   ; восстановить окно ?
223
	jnc	@f
224
 
225
	delay 100
226
	mov	ecx,[slot_n]
227
	activ_window
228
@@:
229
ret
230
 
307 Lrz 231
;--- получить память для снимка ---
205 heavyiron 232
get_mem_for_shoot:
233
	mov	[scr_buf.ptr],dword __app_end
307 Lrz 234
	bt	dword [use_rect.flags],1 ; фоткать область экрана
235
	jc	.use_area
236
	movzx	ecx, word [scr.width]
237
	movzx	ebx, word [scr.height]
238
	jmp	@f
239
.use_area:
240
	call	read_rect
241
	movzx	ecx, word [rect.width]
242
	movzx	ebx, word [rect.height]
243
@@:
205 heavyiron 244
	imul	ecx,ebx
245
	lea	ecx,[ecx*3]
246
	add	ecx,__app_end
247
	mov	[scr_buf.end_ptr],ecx
248
	xor	ebx,ebx
249
	inc	ebx
250
	mov	eax,64
251
	int	0x40
252
ret
253
 
254
;--- содать окно проедпросмотра ---
255
show_scr_window:
256
pusha
257
	bt	dword [flags],0
258
	jnc	@f
259
	mov	eax,51
260
	xor	ebx,ebx
261
	inc	ebx
262
	movr	 ecx,scr_window
263
	mov	edx,__app_end-1000
264
	int	0x40
265
@@:
266
popa
267
ret
268
 
269
;--- прочитать и нарисовать текущий номер ---
270
apply_number:
271
	mov	edi,ed_buffer.3
272
	call	zstr_to_int
273
	mov	[cur_number],eax
274
	call	draw_number
275
ret
276
 
277
;--- процедура прорисовки текущего номера ---
278
draw_number:
279
	mov	edi,sign_n_input
280
	call	zstr_to_int
281
	mov	[sign_n],al
282
	movr	 eax,13
307 Lrz 283
	mov	ebx,150*65536+96
205 heavyiron 284
	mov	cx,[label9.top]
285
	shl	ecx,16
286
	mov	cx,10
287
	mov	edx,[sc.work]
288
	int	0x40
289
	movr	 eax,47
290
	movsx	bx,byte [sign_n]
291
	shl	ebx,16
292
	mov	ecx,[cur_number]
307 Lrz 293
	mov	dx,150
205 heavyiron 294
	shl	edx,16
295
	mov	dx,[label9.top]
296
	mov	esi,[sc.work_text]
297
	int	0x40
298
ret
299
 
300
;--- процедура, запускающая поток автосъемки ---
301
start_autoshoot:
302
	bts	dword [flags],1
303
	jc	@f
304
	movr	 eax,51
305
	;mov     ebx,1
306
	xor	ebx,ebx
307
	inc	ebx
308
	mov	ecx,autoshoot
309
	mov	edx,__app_end-512
310
	int	0x40
311
@@:
312
ret
313
 
314
;--- останавливает этот поток ---
315
stop_autoshoot:
316
	btr	dword [flags],1
317
ret
318
 
319
;--- цикл потока автосъемки ---
320
autoshoot:
321
	mov	ecx,[slot_n]
322
	activ_window
323
.next:
324
	bt	dword [flags],1
325
	jnc	close
326
	movr	 eax,60
327
	movr	 ebx,2
328
	mov	ecx,[app.pid]
329
	mov	edx,messages.draw_number
330
	mov	esi,2
331
	int	0x40
332
	call	shoot
333
	jmp	autoshoot.next
334
 
335
;--- процедура прорисовки строки состояния ---
336
; (должна вызываться потоком главного окна)
337
dr_st:
338
	movr	 eax,38 	     ; отрезок
307 Lrz 339
	mov	ebx,0*65536+310
340
	mov	ecx,198*65536+198
205 heavyiron 341
	mov	edx,[sc.work_graph]
342
	int	0x40
343
 
344
	movr	 eax,13 	     ; полоска
345
	mov	bx,310
307 Lrz 346
	mov	ecx,199*65536+15
205 heavyiron 347
	mov	edx,[sc.work]
348
	int	0x40
349
 
350
	mov	edi,status
351
	call	draw_label
352
ret
353
 
354
;--- процедура получения номера слота потока ---
355
; вход ebx - буффер 1024 байт
356
; выход ecx - номер слота
357
get_slot_n:
358
	movr	 eax,9
359
	xor	ecx,ecx
360
	dec	ecx
361
	int	0x40
362
 
307 Lrz 363
	mov	edx,[ebx+30]
205 heavyiron 364
	xor	ecx,ecx
365
@@:
366
	movr	 eax,9
367
	inc	ecx
368
	int	0x40
307 Lrz 369
	cmp	[ebx+30],edx
205 heavyiron 370
	je	@f
371
	jmp	@b
372
@@:
373
ret
374
 
307 Lrz 375
;--- процедура, запускающая поток, делающий 1 снимок ---
205 heavyiron 376
one_shoot:
377
	mov	ecx,one_shoot_thread
378
	mov	edx,shoot_esp
379
	jmp	@f
307 Lrz 380
;--- процедра, запускающая поток, сохраняющий снимок ---
205 heavyiron 381
save_shoot:
382
	mov	ecx,save_shoot_thread
383
	mov	edx,shoot_esp
384
@@:
385
	bts	dword [flags],2
386
	jc	.running
387
	bt	dword [flags],1
388
	jc	.running
389
 
390
	movr	 eax,51
391
	;mov     ebx,1
392
	xor	ebx,ebx
393
	inc	ebx
394
	int	0x40
395
.running:
396
ret
397
 
307 Lrz 398
;--- поток, делающий 1 снимок ---
205 heavyiron 399
one_shoot_thread:
400
	mov	ecx,[slot_n]
401
	activ_window
402
	bt	dword [ch1.flags],1   ; минимизировать окно ?
403
	jnc	 @f
404
	movr	 eax,60
405
	movr	 ebx,2
406
	mov	ecx,[app.pid]
407
	mov	edx,messages.min_window
408
	mov	esi,2
409
	int	0x40
410
@@:
411
	call	shoot
412
	btr	dword [flags],2
413
	jmp	close
414
 
307 Lrz 415
;--- процедура, отправляющая главному окну сообщение о перерисовке
416
; строки состояния ---
205 heavyiron 417
send_draw_status:
418
	movr	 eax,60
419
	movr	 ebx,2
420
	mov	ecx,[app.pid]
421
	mov	edx,messages.draw_status
422
	mov	esi,2
423
	int	0x40
424
ret
425
 
307 Lrz 426
;--- поток, сохраняюий файл ---
205 heavyiron 427
save_shoot_thread:
428
	mov	ecx,[slot_n]
429
	activ_window
430
	call	save_file
431
	btr	dword [flags],2
432
	jmp	close
433
 
307 Lrz 434
;--- процедура, запускающая поток окна установки области съемки ---
435
show_set_rect_window:
436
	bts	dword [flags],3
437
	jc	@f
438
	movr	 eax,51
439
	xor	ebx,ebx
440
	inc	ebx
441
	mov	ecx,set_rect_window
442
	mov	edx,set_rect_window_esp
443
	int	0x40
444
 
445
	mov	[set_rect_window_pid],eax
446
ret
447
 
448
@@:
449
	movr	eax,18
450
	mov	ebx,eax
451
	mov	ecx,[set_rect_window_pid]
452
	int	0x40
453
	btr	dword [flags],3
454
ret
455
 
456
;--- получение информации об активном окне ---
457
get_active_window_info:
458
	movr	eax,18
459
	movr	ebx,7
460
	int	0x40
461
 
462
	mov	ecx,eax
463
	movr	eax,9
464
	mov	ebx,active_app
465
	int	0x40
466
ret
467
 
205 heavyiron 468
;====================================================================
469
;=== данные программы ===============================================
470
;====================================================================
471
messages:
472
.draw_number dw 0
473
.draw_status dw 1
474
.min_window  dw 2
475
 
476
 
477
grab_text:
307 Lrz 478
	db	title,0
479
 
205 heavyiron 480
labels:
307 Lrz 481
label1 label 5,5,0,text.1   ; ширина экрана
482
label2 label 5,15,0,text.2   ; высота экрана
483
label3 label 5,25,0,text.3   ; введите имя файла
484
label4 label 150,5,0,text.4  ; бит на пиксель
485
label5 label 150,15,0,text.5  ; байт на строку
486
label6 label 115,138,0,text.6  ; 100 = 1 сек.
205 heavyiron 487
;label7 label 10,190,0,text.7
488
;label8 label 10,225,0,text.8
307 Lrz 489
label9 label 5,52,0,text.9   ; номер текущего симка
490
label10 label 5,185,0,text.10
491
status label 5,201,0,no_shoot
205 heavyiron 492
labels_end:
493
 
494
editboxes:
307 Lrz 495
edit1 edit_box 300,5,35,cl_white,0,0,0,1024,ed_buffer.1,ed_focus	 ; путь к файлу
496
edit2 edit_box 35,75,134,cl_white,0,0,0,9,ed_buffer.2,ed_figure_only	 ; задержка
497
edit3 edit_box 35,165,164,cl_white,0,0,0,9,ed_buffer.3,ed_figure_only
498
edit4 edit_box 16,165,181,cl_white,0,0,0,1,sign_n_input,ed_figure_only,1
205 heavyiron 499
editboxes_end:
500
 
501
buttons:
307 Lrz 502
but1 txt_button 150,5,15,65,2,0,0,but_text.1,one_shoot		  ; сделать снимок
503
but2 txt_button 145,160,15,65,3,0,0,but_text.2,save_shoot	   ; сохранить снимок
504
but3 txt_button 140,115,12,120,4,0,0,but_text.3,show_scr_window    ; показать снимок
505
but4 txt_button 80,205,15,163,5,0,0,but_text.4,apply_number	   ; применить номер
506
but5 txt_button 150,5,15,85,6,0,0,but_text.5,start_autoshoot	 ; начать автосъёмку
507
but6 txt_button 145,160,15,85,7,0,0,but_text.6,stop_autoshoot	  ; остановить автосъёмку
508
but7 txt_button 40,205,10,150,8,0,0,but_text.7,show_set_rect_window ; задать область
205 heavyiron 509
buttons_end:
510
 
511
check_boxes:
307 Lrz 512
ch1 check_box 5,105,cl_white,0,0,ch_text.1,(ch_text.2-ch_text.1)  ; свернуть окно
513
ch2 check_box 5,120,cl_white,0,0,ch_text.2,(ch_text.3-ch_text.2)  ; затем сделать активным
514
ch3 check_box 145,105,cl_white,0,0,ch_text.3,(ch_text.4-ch_text.3) ; показать снимок
515
ch4 check_box 5,135,cl_white,0,0,ch_text.4,(ch_text.5-ch_text.4)  ;
516
ch5 check_box 5,150,cl_white,0,0,ch_text.5,(ch_text.6-ch_text.5)
517
ch6 check_box 5,165,cl_white,0,0,ch_text.6,(ch_text.7-ch_text.6)
518
use_rect check_box 145,150,cl_white,0,0,ch_text.7,(ch_text.8-ch_text.7) ; исп. область
205 heavyiron 519
; автонумерация
520
check_boxes_end:
521
 
522
if lang eq ru
523
text:
307 Lrz 524
.2 db 'Высота экрана:',0
525
.1 db 'Ширина экрана:',0
526
.3 db 'Введите полный путь к файлу:',0
527
.4 db 'Бит на пиксель:',0
528
.5 db 'Байт на строку:',0
529
.6 db '100 = 1 секунда',0
205 heavyiron 530
;.7: db 'Введите имя файла:',0
531
;.8: db 'Вместо "*" в имени файла будет вставляться номер.',0
307 Lrz 532
.9 db 'Номер текущего снимка:',0
533
.10 db 'Количество знаков в номере:',0
205 heavyiron 534
 
535
but_text:
307 Lrz 536
.1 db 'Сделать снимок экрана',0
537
.2 db 'Сохранить снимок экрана',0
538
.3 db 'Показать снимок сейчас',0
539
.4 db 'Применить',0
540
.5 db 'Начать автосъемку',0
541
.6 db 'Остановить автосъемку',0
542
.7 db 'задать',0
205 heavyiron 543
 
544
ch_text:
545
.1 db 'Свернуть окно';,0
546
.2 db 'Показать снимок';,0
547
.3 db 'затем сделать активным';,0
307 Lrz 548
.4 db 'Задержка:';,0
549
.5 db 'Автосохранение';,0
550
.6 db 'Автонумерация, начиная с';,0
551
.7 db 'Область'
552
.8:
205 heavyiron 553
 
554
no_shoot db 'Снимок не сделан',0
555
shooting db 'Фотографирование...',0
556
shooted_ok db 'Снимок сделан',0
557
saving db 'Сохранение...',0
558
saved_ok db 'Снимок сохранен',0
559
delay_now db 'Задержка...',0
560
bad_file_name db 'Имя файла введено неверно',0
561
disk_filled db 'Диск заполнен',0
562
bad_fat_table db 'Таблица FAT разрушена',0
563
ac_den db 'Доступ запрещен',0
564
device_er db 'Ошибка устройства',0
565
not_shooted db 'Сделайте снимок !!!',0
566
no_file_name db 'Введите имя файла !!!',0
307 Lrz 567
invalid_rect db 'Недопустимые размеры области',0
310 heavyiron 568
 
569
else
570
text:
571
.2 db 'Screen width:',0
572
.1 db 'Screen height:',0
573
.3 db 'Enter full path to the file:',0
574
.4 db 'Bits per pixel:',0
575
.5 db 'Bytes per line:',0
576
.6 db '100 = 1 second',0
577
;.7: db 'Enter name of file:',0
578
;.8: db 'Instead of "*" in filename the number will be included.',0
579
.9 db 'Current photo number:',0
580
.10 db 'Amount of digits in number:',0
581
 
582
but_text:
583
.1 db 'Make screen photo',0
584
.2 db 'Save screen photo',0
585
.3 db 'Show photo now',0
586
.4 db 'Apply',0
587
.5 db 'Start autoshooting',0
588
.6 db 'Stop autoshooting',0
589
.7 db 'Set',0
590
 
591
ch_text:
592
.1 db 'Minimize window';,0
593
.2 db 'Show photo';,0
594
.3 db 'then make active';,0
595
.4 db 'Delay:';,0
596
.5 db 'Autosave';,0
597
.6 db 'Start numeration from';,0
598
.7 db 'Area'
599
.8:
600
 
601
no_shoot db 'There is no photo',0
602
shooting db 'Photographing...',0
603
shooted_ok db 'Photo created',0
604
saving db 'Saving...',0
605
saved_ok db 'Photo saved',0
606
delay_now db 'Delay...',0
607
bad_file_name db 'File name is wrong',0
608
disk_filled db 'Disk is full',0
609
bad_fat_table db 'FAT table destroyed',0
610
ac_den db 'Access denied',0
611
device_er db 'Device error',0
612
not_shooted db 'Make photo !!!',0
613
no_file_name db 'Enter file name !!!',0
614
invalid_rect db 'Wrong area size',0
615
 
205 heavyiron 616
end if
617
 
618
sign_n_input:
619
	db	'2',0
620
 
621
app_ipc ipc_buffer 32
622
 
451 heavyiron 623
mouse_flag: dd 0x0
624
structure_of_potock:
625
rb 100
626
 
205 heavyiron 627
cur_number	  dd	  ?
628
 
629
sign_n	      db      ?
630
 
631
slot_n	      dd ?
632
 
633
flags	     dd ?
634
 
635
scr_buf:
636
.ptr	    dd	    ?
637
.end_ptr	dd	?
638
.size:
639
.height        dw      ?
640
.width	      dw      ?
641
 
642
fs_struc:
643
.funk_n        dd      ?
644
	dd	?
645
	dd	?
646
.bytes_to_write  dd	 ?
647
.data_ptr	 dd    ?,?
648
.fn_ptr        dd      ?
649
 
650
sf_buf:
651
.bmp_header   dd      ?
652
.bmp_area     dd      ?
653
.end	      dd      ?
654
 
307 Lrz 655
set_rect_window_pid dd ?
656
set_rect_window_slot dd ?
657
 
658
rect_input_buffer:
659
.left rb 6
660
.top  rb 6
661
.width	rb 6
662
.height rb 6
663
 
205 heavyiron 664
cmdstr rb 257
665
 
666
ed_buffer:
667
.1: rb 1025
668
.2: rb 10
669
.3: rb 10
670
 
671
file_name:
672
	rb	1058
673
 
674
scr screen_prop
307 Lrz 675
rect:
676
.left dw ?
677
.top dw ?
678
.height dw ?
679
.width dw ?
680
 
681
 
205 heavyiron 682
sc sys_color_table
307 Lrz 683
app procinfo	    ; информация о главном окне
684
active_app procinfo ; информация об активном окне
685
set_rect_window_procinfo procinfo  ; информация об окне области
686
shoot_esp rb 512		   ; стек потока фотканья
687
set_rect_window_esp rb 512	   ; стек окна области
205 heavyiron 688
	app_end    ; конец программы