Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
1429 mario79 1
;************************************************************************
2033 mario79 2
; v.016 30.07.2011
3
; Start with open file path
4
; Show working file path
5
; Some optimization
6
;
7
; Marat Zakiyanov aka Mario79, aka Mario
8
;************************************************************************
1429 mario79 9
; v.015 08.03.2010
10
; Support for OpenDialog - Open and Save
11
; Some optimization
2033 mario79 12
;
13
; Marat Zakiyanov aka Mario79, aka Mario
1429 mario79 14
;************************************************************************
15
; v.014 05.02.2010
16
;
17
; PageUp, PageDown      - страница вверх/вниз
18
; Ctrl+UP, Ctrl+Down    - прокрутка страницы на строку вверх/вниз без смещения курсора
19
; Home,End              - в начало/конец строки
20
; Ctrl+Home, Ctrl+End   - к первому/последнему байту файла
21
; Left, Right           - курсор влево/вправо
22
; Ctrl+O                - открыть файл
23
; Ctrl+S                - сохранить
24
; Ctrl+F                - поиск (+Tab для OptionBox)
25
; Ctrl+G                - переход на смещение (+Tab для OptionBox)
26
; Ctrl+B                - выделить блок
27
; ESC                   - снять выделение
28
; Ctrl+C		- копировать блок
29
; Ctrl+V		- вставить в выделенную область
30
; Ctrl+X		- вырезать выделенную область (в буфер)
31
; n                     - инвертировать байт под курсором
32
; Ins                   - режим замены/вставки (по умолчанию)
33
;   Del                 - в режиме вставки - удалить байт под курсором
34
;   BackSpace           - в режиме вставки - удалить байт перед курсором
35
; ~                     - смена кодировки (cp866,cp1251)
36
; Shift+~               - смена кодировки (cp866 или cp1251,koi8-r)
31 halyavin 37
 
1429 mario79 38
; Память перераспределяется на увеличение i umen'shenie.
39
; Файл загружается целиком.
31 halyavin 40
 
1429 mario79 41
; Макросы load_lib.mac, editbox_ex и библиотеку box_lib.obj создали:
42
;  - Alexey Teplov / Алексей Теплов
43
; Mario79, Mario - Marat Zakiyanov / Марат Закиянов
44
; Diamondz - Evgeny Grechnikov / Евгений Гречников и др.
45
;
46
; staper@inbox.ru
47
; babalbes@yandex.ru
31 halyavin 48
 
1429 mario79 49
use32
50
	org	0x0
51
	db	'MENUET01'
52
	dd	0x1
53
	dd	START	;program start
54
	dd	I_END	;program image	size
55
	dd	(D_END+0x600) and not 3	;required amount of memory
56
	dd	(D_END+0x600) and not 3	;stack
2033 mario79 57
	dd	fname_buf
1429 mario79 58
	dd	cur_dir_path
31 halyavin 59
 
2033 mario79 60
_title	equ 'HeEd 0.16', 0
31 halyavin 61
 
1429 mario79 62
include	'lang.inc'
1702 Lrz 63
include '../../../config.inc'		;for nightbuild
1429 mario79 64
include '../../../macros.inc'
65
include	'../../libraries/box_lib/trunk/box_lib.mac'
66
include	'../../libraries/box_lib/load_lib.mac'
485 heavyiron 67
 
1429 mario79 68
@use_library
31 halyavin 69
 
1429 mario79 70
times	16	dd	0
71
 
72
frgrd_color	equ	0xfefefe
73
bkgrd_color	equ	0x000000
74
kursred_color	equ	0x0039ff
75
kurstxt_color	equ	0x708090
76
text_color	equ	0xaaaaaa
77
 
78
panel_clr1	equ	0xe9e9e2
79
panel_clr2	equ	0x8b8b89
80
panel_clr3	equ	0x777777;eaeae3
81
 
82
 
83
palitra:
84
.1	dd	frgrd_color,bkgrd_color	;цвет невыделенного символа
85
.2	dd	frgrd_color,text_color	;левый,правый столбцы,часть нижней строки
86
.3	dd	kursred_color,frgrd_color	;курсора
87
.4	dd	kurstxt_color,bkgrd_color	;курсора в текстовой области
88
.5	dd	panel_clr1,not	text_color	;нижняя панель
89
 
90
FIRST_HEX equ 0*65536+24
91
scroll_width_size equ 15
92
 
93
struct	f70
94
	func_n	rd 1
95
	param1	rd 1
96
	param2	rd 1
97
	param3	rd 1
98
	param4	rd 1
99
	rezerv	rb 1
100
	name	rd 1
101
ends
102
 
103
START:
104
	mcall	68,11
1510 mario79 105
 
106
load_libraries l_libs_start,end_l_libs
2033 mario79 107
;--------------------------------------------------------------------
1429 mario79 108
;OpenDialog	initialisation
1510 mario79 109
	push    dword OpenDialog_data
110
	call    [OpenDialog_Init]
2033 mario79 111
;--------------------------------------------------------------------
112
	mov	esi,fname_buf
113
	cmp	[esi],byte 0
114
	je	.start_temp_file_name
115
 
116
	cld
117
@@:
118
	lodsb
119
	test	al,al
120
	jne	@b
121
 
122
	std
123
@@:
124
	lodsb
125
	cmp	al,'/'
126
	jne	@b
127
	add	esi,2
128
	jmp	.selected_start_file_name
129
;--------------------------------------------------------------------
130
.start_temp_file_name:
131
	mov	esi,start_temp_file_name
132
.selected_start_file_name:
1439 mario79 133
	mov	edi,filename_area
134
	xor	eax,eax
135
	cld
136
@@:
137
	lodsb
138
	stosb
139
	test	eax,eax
140
	jnz	@b
141
 
1429 mario79 142
	mcall	40,0x27
143
 
144
	mcall	68,12,32*1024	;страничный буфер
145
	mov	[screen_table],eax
146
	mcall	68,12,4*1024
2033 mario79 147
 
1429 mario79 148
	mov	[file_buffer],eax
149
 
150
	mcall	68,12,1024
151
	mov	[copy_buf],eax
152
 
153
 
154
	;размер	текущего пути
155
	mov	esi,cur_dir_path
156
@@:
157
	cmp	byte [esi],0
158
	je	@f
159
	inc	esi
160
	jmp	@b
161
@@:
162
	sub	esi,cur_dir_path
163
	mov	[edit1.pos],esi
164
	mov	[edit1.size],esi
165
 
166
	;общесистемные клавиши для Shift+курсоры
167
;	mcall	66,4,75,1
168
;	mcall	66,,77
169
;	mcall	66,,72
170
;	mcall	66,,80
171
 
172
	call	ready_screen_buffer
173
;	jmp	open_file
1753 mario79 174
	mcall	9,procinfo,-1
175
	mov	ecx,[ebx+30]	; PID
176
	mcall	18,21
177
	mov	[active_process],eax	; WINDOW SLOT
2033 mario79 178
;--------------------------------------------------------------------
179
; open the file if program has a file path, when it was launched
180
	cmp	[fname_buf],byte 0
181
	jne	open_dialog.start
182
;--------------------------------------------------------------------
1429 mario79 183
redraw_all:
1586 mario79 184
	call	control_minimal_window_size
1429 mario79 185
	call	draw_window_1
31 halyavin 186
still:
1429 mario79 187
	mcall	10
31 halyavin 188
 
1429 mario79 189
	cmp	eax,6
190
	je	mouse
191
	dec	al
192
	jz	redraw_all
193
	dec	al
194
	jz	key
195
	dec	al
196
	jz	button
197
	jmp	still
1586 mario79 198
;---------------------------------------------------------------------
199
control_minimal_window_size:
200
	pusha
201
	mcall	9,procinfo,-1
202
	mov		eax,[ebx+70]
203
	test	eax,10b
204
	jnz		.end
205
	test	eax,100b
206
	jnz		.end
207
	test	eax,1b
208
	jnz		.end
209
	mov		esi,-1
210
	mov		eax,procinfo
211
	mov		eax,[eax+46]
1650 Nasarus 212
	cmp		eax,299
1586 mario79 213
	jae		@f
1650 Nasarus 214
	mov		esi,299
1586 mario79 215
	mcall	67,-1,ebx,ebx
216
@@:
217
	mov		edx,-1
218
	mov		eax,procinfo
219
	mov		eax,[eax+42]
1650 Nasarus 220
	cmp		eax,399
1586 mario79 221
	jae		@f
1650 Nasarus 222
	mov		edx,399
1586 mario79 223
	mcall	67,-1,ebx,,ebx
224
@@:
225
.end:
226
	popa
227
	ret
228
;---------------------------------------------------------------------
229
red:
230
	call	ready_screen_buffer
1429 mario79 231
	call	main_area
232
	jmp	still
1586 mario79 233
;---------------------------------------------------------------------
1429 mario79 234
draw_window_1:
235
	call	start_draw
236
	call	draw_window
237
	call	show_file_size
238
	call	show_codepage
239
	call	show_insert
240
	call	ready_screen_buffer
241
	call	main_area
242
	ret
1586 mario79 243
;---------------------------------------------------------------------
1429 mario79 244
key:
245
	mcall	2
246
	dec	al
247
	jz	still
248
	dec	al
249
	jz	key.syst
250
	cmp	ah,2
251
	je	Ctrl_B	;выделить блок
252
	cmp	ah,3
253
	je	Ctrl_C	;copy
254
	cmp	ah,6
255
	je	Ctrl_F	;find
256
	cmp	ah,7
257
	je	Ctrl_G	;go to
258
	cmp	ah,8
259
	je	BackSpace
260
	cmp	ah,15
1431 mario79 261
	je	open_dialog ;open_file ;Ctrl+O
1429 mario79 262
	cmp	ah,19
1431 mario79 263
	je	open_dialog_save ;save_file ;Ctrl+S
1429 mario79 264
	cmp	ah,22
265
	je	Ctrl_V	;paste
266
	cmp	ah,24
267
	je	Ctrl_X	;cut
268
	cmp	ah,27
269
	je	ESC
270
	cmp	ah,48
271
	jb	still
272
	cmp	ah,57
273
	jbe	input_from_keyboard	;0-9
274
	cmp	ah,65
275
	jb	still
276
	cmp	ah,70
277
	jbe	input_from_keyboard	;A-F
278
	cmp	ah,81
279
	jne	@f
280
	call	Ctrl_DOWN
281
	jmp	red
31 halyavin 282
@@:
1429 mario79 283
	cmp	ah,82
284
	jne	@f
285
	call	Ctrl_UP
286
	jmp	red
287
@@:
288
	cmp	ah,84
289
	jne	@f
290
	call	Ctrl_HOME
291
	jmp	red
292
@@:
293
	cmp	ah,85
294
	je	Ctrl_END
295
	cmp	ah,96
296
	je	change_codepage	;тильда, cp866 - cp1251
297
	cmp	ah,97
298
	jb	still
299
	cmp	ah,102
300
	jbe	input_from_keyboard ;a-f
301
	cmp	ah,126
302
	jne	@f
303
	xor	ah,ah
304
	jmp	change_codepage	;Shift+~, koi8-r
305
@@:
306
	cmp	ah,110
307
	je	invert_byte ;n
308
	cmp	ah,176
309
	jne	@f
310
	call	LEFT
311
	jmp	red
312
@@:
313
	cmp	ah,177
314
	jne	@f
315
	call	DOWN
316
	jmp	red
317
@@:
318
	cmp	ah,178
319
	je	UP
320
	cmp	ah,179
321
	je	RIGHT
322
	cmp	ah,180
323
	jne	@f
324
	call	HOME
325
	jmp	red
326
@@:
327
	cmp	ah,181
328
	je	END_
329
	cmp	ah,182
330
	je	DEL
331
	cmp	ah,183
332
	je	PGDN
333
	cmp	ah,184
334
	je	PGUP
335
	cmp	ah,185
336
	je	Insert
337
	jmp	still
338
.syst:
339
	cmp	ah,72
340
	cmp	ah,75
341
	cmp	ah,77
342
	cmp	ah,80
343
	jmp	still
31 halyavin 344
 
1429 mario79 345
button:
346
	mcall	17
347
	dec	ah
348
	jnz	still
1650 Nasarus 349
 
1429 mario79 350
	jmp	close_prog
31 halyavin 351
 
1429 mario79 352
align	4
353
mouse:
1753 mario79 354
	mcall	18,7
355
	cmp	[active_process],eax
356
	jne	still
357
 
1429 mario79 358
	mcall	37,7
359
	test	eax,eax
360
	jz	.menu_bar_1;.mouse
361
	bt	eax,15
362
	jc	@f	;обработка колёсика мыши
363
	mov	ecx,eax
364
	shl	ecx,2
365
.1:
366
	call	Ctrl_DOWN
367
	loop	.1
368
	jmp	red
369
@@:
370
	xor	ecx,ecx
371
	sub	cx,ax
372
	shl	cx,2
373
.2:
374
	call	Ctrl_UP
375
	loop	.2
376
	jmp	red
31 halyavin 377
 
1429 mario79 378
.menu_bar_1:
379
	call	.set_mouse_flag
380
@@:
381
	push	dword menu_data_1	;mouse event for Menu 1
382
	call	[menu_bar_mouse]
383
	cmp	[menu_data_1.click],dword 1
384
	jne	.menu_bar_2
385
	cmp	[menu_data_1.cursor_out],dword 0
386
	jne	.analyse_out_menu_1
387
	jmp	.menu_bar_1
388
.menu_bar_2:
389
	push	dword menu_data_2
390
	call	[menu_bar_mouse]
391
	cmp	[menu_data_2.click],dword 1
392
	jne	.menu_bar_3
393
	cmp	[menu_data_2.cursor_out],dword 0
394
	jne	.analyse_out_menu_2
395
	jmp	.menu_bar_1
396
.menu_bar_3:
397
	push	dword menu_data_3
398
	call	[menu_bar_mouse]
399
	cmp	[menu_data_3.click],dword 1
400
	jne	.scroll_bar
401
	cmp	[menu_data_3.cursor_out],dword 0
402
	jne	.analyse_out_menu_3
403
	jmp	.menu_bar_1
31 halyavin 404
 
1429 mario79 405
.set_mouse_flag:
406
	xor	eax,eax
407
	inc	eax
408
	mov	[menu_data_1.get_mouse_flag],eax
409
	mov	[menu_data_2.get_mouse_flag],eax
410
	mov	[menu_data_3.get_mouse_flag],eax
411
	ret
31 halyavin 412
 
1429 mario79 413
.analyse_out_menu_1:
414
	cmp	[menu_data_1.cursor_out],dword 1
415
	je	open_dialog
416
	cmp	[menu_data_1.cursor_out],dword 2
417
	je	open_dialog_save	;save_file
418
	cmp	[menu_data_1.cursor_out],dword 3
419
	je	close_prog
420
	jmp	still
31 halyavin 421
 
1429 mario79 422
.analyse_out_menu_2:
423
	cmp	[menu_data_2.cursor_out],dword 1
424
	jne	@f
425
	add	[bytes_per_line],4
426
	jmp	redraw_all
427
@@:
428
	cmp	[menu_data_2.cursor_out],dword 2
429
	jne	@f
430
	add	[bytes_per_line],8
431
	jmp	redraw_all
432
@@:
433
	cmp	[menu_data_2.cursor_out],dword 3
434
	jne	@f
435
	cmp	[bytes_per_line],4
436
	je	still
437
	sub	[bytes_per_line],4
438
	jmp	redraw_all
439
@@:
440
	cmp	[menu_data_2.cursor_out],dword 4
441
	jne	still
442
	cmp	[bytes_per_line],8
443
	jbe	still
444
	sub	[bytes_per_line],8
445
	jmp	redraw_all
31 halyavin 446
 
1429 mario79 447
.analyse_out_menu_3:	;analyse result of Menu 2
448
	cmp	[menu_data_3.cursor_out],dword 1
449
	jne	still
450
	call	create_help_window
451
	jmp	still
31 halyavin 452
 
1429 mario79 453
.scroll_bar:
454
;	mcall	37,2
455
;	test	eax,eax
456
;	jnz	@f
457
;	btr	[flags],5
458
;	btr	[flags],7
459
;	jmp	still
31 halyavin 460
 
1429 mario79 461
.mouse:
462
.vertical:
463
	mcall	37,2
464
	test	eax,eax
465
	jnz	@f
466
	btr	[flags],5
467
	btr	[flags],7
468
	jmp	still
469
@@:
470
	bt	[flags],5
471
	jc	@f
472
	bt	[flags],7
473
	jc	.horizontal_0
31 halyavin 474
 
1429 mario79 475
	mcall	37,1
476
	shr	eax,16
477
	cmp	ax,[scroll_bar_data_vertical.start_x]
478
	jb	.horizontal
479
	sub	ax,[scroll_bar_data_vertical.start_x]
480
	cmp	ax,[scroll_bar_data_vertical.size_x]
481
	jge	still
31 halyavin 482
 
483
 
1429 mario79 484
@@:
485
;	cmp	[scroll_bar_data_vertictal.delta2],0
486
	;	jne	.horizontal
31 halyavin 487
 
1429 mario79 488
;	mov	eax,[scroll_bar_data_vertical.max_area]
489
;	cmp	eax,[scroll_bar_data_vertical.cur_area]
490
;	jbe	.horizontal
31 halyavin 491
 
1429 mario79 492
	;	mouse event for Vertical ScrollBar
493
	mov	edi,[screen_table]
494
	mov	edi,[edi]
495
	cmp	edi,[file_size]
496
	jae	still
497
	push	dword scroll_bar_data_vertical	;draw for Vertical ScrollBar
498
	call	[scrollbar_ver_mouse]
31 halyavin 499
 
1429 mario79 500
	xor	edx,edx
501
	mov	ebx,[scroll_bar_data_vertical.max_area]
502
	sub	ebx,[scroll_bar_data_vertical.cur_area]
503
	mov	eax,[file_size]
504
	mov	esi,[bytes_per_line]
505
	mov	ecx,[scroll_bar_data_vertical.position]
506
	div	esi
507
	xor	edx,edx
508
	mul	ecx
509
	div	ebx
510
	mul	esi
511
	cmp	eax,[file_size]
512
	jng	@f
513
	sub	eax,esi;[bytes_per_line]
514
@@:
515
	mov	ecx,[cursor]
516
	inc	ecx
517
	shr	ecx,1
518
	add	ecx,eax
519
@@:
520
	cmp	ecx,[file_size]
521
	jle	@f
522
	sub	ecx,esi;[bytes_per_line]
523
	sub	eax,esi;[bytes_per_line]
524
	jmp	@b
525
@@:
526
	mov	[begin_offset],eax
527
	bts	[flags],5
31 halyavin 528
 
1429 mario79 529
	mov	eax,scroll_bar_data_vertical.redraw
530
	xor	ebx,ebx
531
;	cmp	[eax],ebx
532
;	je	@f
533
	mov	[eax],ebx
534
	jmp	red
535
;@@:
536
;	cmp	[scroll_bar_data_vertical.delta2],0
537
;	jne	still
538
.horizontal:
539
	mov	eax,[scroll_bar_data_horizontal.max_area]
540
	cmp	eax,[scroll_bar_data_horizontal.cur_area]
541
	jbe	.other
31 halyavin 542
 
1429 mario79 543
	mcall	37,1
544
	cmp	ax,[scroll_bar_data_horizontal.start_y]
545
	jb	still
546
	sub	ax,[scroll_bar_data_horizontal.start_y]
547
	cmp	ax,[scroll_bar_data_horizontal.size_y]
548
	jge	still
31 halyavin 549
 
1429 mario79 550
	; mouse event for Horizontal ScrollBar
551
.horizontal_0:
552
;	mcall	37,2
553
;	test	eax,eax
554
;	jnz	@f
555
;	btr	[flags],5
556
;	btr	[flags],7
557
;	jmp	still
558
;@@:;	bt	[flags],7
559
;	jc	@f
31 halyavin 560
 
1429 mario79 561
;	mcall	37,1
562
;	shr	eax,16
563
;	cmp	ax,[scroll_bar_data_vertical.start_x]
564
;	jb	.horizontal
565
;	sub	ax,[scroll_bar_data_vertical.start_x]
566
;	cmp	ax,[scroll_bar_data_vertical.size_x]
567
;	jge	still
568
;@@:
569
	; mouse event for Vertical ScrollBar
31 halyavin 570
 
1429 mario79 571
	mov	eax,[ready_screen_buffer.string_size]
572
	shr	eax,1
573
	cmp	eax,[len_str_scr]
574
	jle	still
575
	push	dword scroll_bar_data_horizontal	;draw for Horizontal ScrollBar
576
	call	[scrollbar_hor_mouse]
31 halyavin 577
 
1429 mario79 578
	xor	edx,edx
579
	mov	eax,[scroll_bar_data_horizontal.position]
580
	mov	ebx,[ready_screen_buffer.string_size]
581
	shr	ebx,1
582
	mul	ebx
583
	mov	ebx,[scroll_bar_data_horizontal.max_area]
584
	sub	ebx,[scroll_bar_data_horizontal.cur_area]
585
	div	ebx
586
	mov	[beg_str_scr],eax
587
	add	eax,[len_str_scr]
588
	mov	ebx,[ready_screen_buffer.string_size]
589
	shr	ebx,1
590
	cmp	eax,ebx
591
	jle	@f
592
	mov	eax,[ready_screen_buffer.string_size]
593
	shr	eax,1
594
	sub	eax,[len_str_scr]
595
	mov	[beg_str_scr],eax
596
@@:
597
	mov	eax,scroll_bar_data_horizontal.redraw
598
	xor	ebx,ebx
599
	cmp	[eax],ebx
600
	je	.other
601
	mov	[eax],ebx
602
;	call	draw_window
603
	call	main_area
604
	bts	[flags],7
605
	jmp	still
606
.other:
607
;	cmp	[scroll_bar_data_vertical.delta2],0
608
;	jne	still
609
;	cmp	[scroll_bar_data_horizontal.delta2],0
610
;	jne	still
611
	jmp	still
31 halyavin 612
 
613
 
614
 
1429 mario79 615
;------------------------------------------------
31 halyavin 616
 
1429 mario79 617
;------------------------------------------------
31 halyavin 618
 
619
 
1429 mario79 620
align	4
621
ready_screen_buffer:
622
	mov	[.fl],0
623
	mov	esi,[screen_table]
624
	add	esi,4
625
	mov	ecx,[number_strings]
626
	mov	[.number_strings],cx
627
	push	[cursor]
628
	pop	[.cursor]
629
	push	[file_size]
630
	pop	[.length_to_end]
631
	mov	edi,[begin_offset]
31 halyavin 632
 
1429 mario79 633
	mov	[.shblock_end],0
634
	mov	[.shblock_beg],0
635
	bt	[flags],8
636
	jnc	@f
637
	mov	eax,[shblock_beg]
638
	add	eax,[file_buffer]
639
	mov	[.shblock_beg],eax
640
	mov	eax,[shblock_end]
641
	add	eax,[file_buffer]
642
	mov	[.shblock_end],eax
643
@@:
644
	mov	[.offset],edi
645
	sub	[.length_to_end],edi
646
	jz	.pre_next_string
647
	add	edi,[file_buffer]
31 halyavin 648
 
1429 mario79 649
.next_string:
650
	mov	word [esi],0x2020
651
	add	esi,2
652
	mov	eax,0x20302030
653
	mov	dword [esi],eax
654
	mov	dword [esi+4],eax
655
	mov	dword [esi+8],eax
656
	mov	dword [esi+12],eax
657
	push	edi
658
	mov	ecx,8
659
	mov	edi,[.offset]
660
@@:
661
	mov	eax,edi
662
	and	eax,0xF
663
	cmp	al,10
664
	sbb	al,69h
665
	das
666
	mov	[esi+ecx*2-2],al
667
	shr	edi,4
668
	loop	@b
669
	mov	word [esi+16],0x203a	;двоеточие
670
	mov	eax,[bytes_per_line]
671
	add	[.offset],eax
672
	mov	[.string_size],2+4*4+4+2
673
	add	esi,4*4+4+2
674
	pop	edi
675
	mov	[.temp],edi
676
	push	[.cursor]
677
	pop	[.cursor_temp]
31 halyavin 678
 
1429 mario79 679
	;hex	значения
680
	mov	dword [esi-4],0x20202020
31 halyavin 681
 
1429 mario79 682
	mov	edx,[bytes_per_line]
683
.next_group:
684
	mov	ecx,[group_bytes]
31 halyavin 685
 
1429 mario79 686
.next_byte:
687
	mov	al,[edi]
688
	ror	ax,4
689
	cmp	al,10
690
	sbb	al,69h
691
	das
692
	mov	[esi],al
693
	mov	byte [esi+1],0x20
694
	cmp	edi,[.shblock_end]
695
	ja	@f
696
	cmp	edi,[.shblock_beg]
697
	jl	@f
698
	mov	byte [esi+1],(0x20+3*4)
699
@@:
700
	dec	[.cursor]
701
	jnz	@f
702
	mov	byte [esi+1],(0x20+2*4)
703
@@:
704
	shr	ax,16-4
705
	cmp	al,10
706
	sbb	al,69h
707
	das
708
	mov	[esi+2],al
709
	mov	byte [esi+3],0x20
710
	cmp	edi,[.shblock_end]
711
	ja	@f
712
	cmp	edi,[.shblock_beg]
713
	jl	@f
714
	mov	byte [esi+3],(0x20+3*4)
715
@@:
716
	dec	[.cursor]
717
	jnz	@f
718
	mov	byte [esi+3],(0x20+2*4)
719
@@:
720
	mov	word [esi+4],0x2020
721
	add	[.string_size],6
722
	add	esi,6
723
	inc	edi
724
	dec	[.length_to_end]
725
	jz	.to_null
726
	dec	ecx
727
	jz	@f
728
	dec	edx
729
	jnz	.next_byte
730
	jz	.ascii
731
@@:
732
	mov	word [esi],0x2020
733
	add	esi,2
734
	add	[.string_size],2
735
	dec	edx
736
	jnz	.next_group;byte
737
	sub	esi,2
738
	sub	[.string_size],2
739
	jz	.ascii
740
.ascii:
741
	push	edi
742
	mov	edi,[.temp]
743
	mov	word [esi],0x2020
744
	mov	ebx,[.cursor_temp]
745
	add	esi,2
746
	add	[.string_size],2
747
	mov	ecx,[bytes_per_line]
748
@@:
749
	mov	al,[edi]
750
	mov	[esi],al
751
	mov	byte [esi+1],0x20
752
	dec	ebx
753
	jnz	.s1
754
	mov	byte [esi+1],(0x20+3*4)
755
.s1:
756
	dec	ebx
757
	jnz	.s2
758
	mov	byte [esi+1],(0x20+3*4)
759
.s2:
760
	inc	edi
761
	add	esi,2
762
	add	[.string_size],2
763
	loop	@b
764
	pop	edi
765
	mov	edx,[bytes_per_line]
766
	dec	[.number_strings]
767
	jnz	.next_string
768
	ret
769
 
770
.fl	db 0
771
.fl_buf	dd 0
772
.to_null:
773
	dec	[.fl]
774
	mov	[.fl_buf],edi
775
	jmp	.pre_next_byte0
776
 
777
.pre_next_string:
778
	mov	word [esi],0x2020
779
	add	esi,2
780
	mov	eax,0x20302030
781
	mov	dword [esi],eax
782
	mov	dword [esi+4],eax
783
	mov	dword [esi+8],eax
784
	mov	dword [esi+12],eax
785
	mov	ecx,8
786
	mov	edi,[.offset]
787
@@:
788
	mov	eax,edi
789
	and	eax,0xF
790
	cmp	al,10
791
	sbb	al,69h
792
	das
793
	mov	[esi+ecx*2-2],al
794
	shr	edi,4
795
	loop	@b
796
	mov	word [esi+16],0x203a	;двоеточие
797
	mov	eax,[bytes_per_line]
798
	add	[.offset],eax
799
	mov	[.string_size],2+4*4+4+2
800
	add	esi,4*4+4+2
801
	push	[.cursor]
802
	pop	[.cursor_temp]
803
 
804
	;hex значения
805
	mov	dword [esi-4],0x20202020
806
 
807
	mov	edx,[bytes_per_line]
808
.pre_next_group:
809
	mov	ecx,[group_bytes]
810
 
811
.pre_next_byte:
812
	mov	dword [esi],0x20202020
813
	dec	[.cursor]
814
	jnz	@f
815
	mov	byte [esi+1],(0x20+2*4)
816
@@:
817
	dec	[.cursor]
818
	jnz	@f
819
	mov	byte [esi+3],(0x20+2*4)
820
@@:
821
	mov	word [esi+4],0x2020
822
	add	[.string_size],6
823
	add	esi,6
824
.pre_next_byte0:
825
	dec	ecx
826
	jz	@f
827
	dec	edx
828
	jnz	.pre_next_byte
829
	jz	.pre_ascii
830
@@:
831
	mov	word [esi],0x2020
832
	add	esi,2
833
	add	[.string_size],2
834
	dec	edx
835
	jnz	.pre_next_group;byte
836
	sub	esi,2
837
	sub	[.string_size],2
838
	jz	.pre_ascii
839
 
840
.pre_ascii:
841
	mov	word [esi],0x2020
842
	add	esi,2
843
	add	[.string_size],2
844
	mov	ecx,[bytes_per_line]
845
	cmp	[.fl],0	;проверка флага
846
	jne	.last_ascii
847
	mov	ebx,[.cursor_temp]
848
@@:
849
	mov	word [esi],0x2020
850
	dec	ebx
851
	jnz	.ps1
852
	mov	byte [esi+1],(0x20+3*4)
853
.ps1:
854
	dec	ebx
855
	jnz	.ps2
856
	mov	byte [esi+1],(0x20+3*4)
857
.ps2:
858
	add	esi,2
859
	add	[.string_size],2
860
.1:
861
	loop	@b
862
	mov	edx,[bytes_per_line]
863
	dec	[.number_strings]
864
	jnz	.pre_next_string
865
	ret
866
 
867
;корректно обрабатываем финальную строку файла, длина которой вариативна
868
.last_ascii:
869
	mov	ebx,[.fl_buf]
870
	sub	ebx,[.temp]
871
	sub	ecx,ebx
872
	mov	edi,[.temp]
873
	mov	[.fl],0
874
@@:
875
	mov	al,[edi]
876
	mov	[esi],al
877
	mov	byte [esi+1],0x20
878
	dec	[.cursor_temp]
879
	jnz	.la1
880
	mov	byte [esi+1],(0x20+3*4)
881
.la1:
882
	dec	[.cursor_temp]
883
	jnz	.la2
884
	mov	byte [esi+1],(0x20+3*4)
885
.la2:
886
	inc	edi
887
	add	esi,2
888
	add	[.string_size],2
889
	dec	ebx
890
	jnz	@b
891
	inc	ecx
892
	jmp	.1
893
 
894
.string_size	dd 16
895
.number_strings	dw 0
896
.length_to_end	dd 0
897
.temp		dd 0
898
.offset		dd 0
899
.cursor		dd 0
900
.cursor_temp	dd 0
901
.shblock_beg	dd 0
902
.shblock_end	dd 0
903
 
904
 
905
align	4
906
main_area:
907
	mov	ecx,[number_strings]
908
	mov	[.number_strings],cx
909
	push	[len_str_scr]
910
	pop	[.len_str_scr]
911
	mov	eax,[ready_screen_buffer.string_size]
912
	shr	eax,1
913
	mov	[.string_size],eax
914
	mov	edi,[screen_table]
915
	mov	edi,[edi]
916
	cmp	[file_size],edi
917
	jbe	.4
918
	xor	edx,edx	;ползунок
919
	mov	ebx,[scroll_bar_data_vertical.max_area]
920
	sub	ebx,[scroll_bar_data_vertical.cur_area]
921
	mov	ecx,[file_size]
922
	mov	eax,[current_offset]
923
	test	eax,eax
924
	jnz	.3
925
	inc	eax
926
.3:
927
	mul	ebx
928
	test	ecx,ecx
929
	jnz	.5
930
	inc	ecx
931
.5:
932
	div	ecx
933
	mov	[scroll_bar_data_vertical.position],eax
934
 
935
	mcall	37,2	;кпопка	мыши нажата - нет смысла перерисовывать ScrollBar
936
	test	eax,eax
937
	jnz	.4
938
	push	dword scroll_bar_data_vertical
939
	call	[scrollbar_ver_mouse]
940
 
941
	push	dword scroll_bar_data_vertical	;draw for Vertical ScrollBar
942
	call	[scrollbar_ver_draw]
943
 
944
;	push	dword scroll_bar_data_vertical	;draw for Vertical ScrollBar
945
;	call	[scrollbar_ver_draw]
946
 
947
;	xor	eax,eax
948
;	inc	eax
949
;	mov	[scroll_bar_data_vertical.all_redraw],eax
950
;	push	dword scroll_bar_data_vertical	;draw for Vertical ScrollBar
951
;	call	[scrollbar_ver_draw]
952
;	xor	eax,eax	;reset	all_redraw	flag
953
;	mov	[scroll_bar_data_vertical.all_redraw],eax
954
 
955
.4:
956
	mov	esi,0x000001	;цвет и число бит на пиксель
957
	mov	edx,FIRST_HEX	;координаты первого hex
958
	call	show_current_offset
959
	mov	edi,[screen_table]
960
	add	edi,4
961
	mov	ecx,[beg_str_scr]
962
	sub	[.string_size],ecx
963
	shl	ecx,1
964
	add	edi,ecx
965
.out:
966
	push	edi
967
	movzx	ebx,byte [edi]
968
	cmp	bl,128	;проверка на принадлежность символа к расширенной таблице
969
	jb	.7
970
	add	ebx,[codepage_offset]
971
.7:
972
	movzx	edi,byte [edi+1]
973
	lea	edi,[(edi*2-0x40)]
974
	add	edi,palitra
975
	shl	bx,4
976
	add	ebx,font_buffer
977
	mov	ecx,8*65536+16
978
	mov	ebp,0
979
	mcall	65
980
	pop	edi
981
 
982
	add	edi,2
983
	add	edx,8*65536
984
 
985
	dec	[.len_str_scr]
986
	jz	.loop_str
987
	dec	[.string_size]
988
	jz	.next_string
989
 
990
	push	edi
991
	movzx	ebx,byte [edi]
992
	cmp	bl,128
993
	jb	.8
994
	add	ebx,[codepage_offset]
995
.8:
996
	movzx	edi,byte [edi+1]
997
	lea	edi,[(edi*2-0x40)]
998
	add	edi,palitra
999
	shl	bx,4
1000
	add	ebx,font_buffer
1001
	mcall
1002
	pop	edi
1003
 
1004
	add	edi,2
1005
	add	edx,8*65536
1006
 
1007
	dec	[.len_str_scr]
1008
	jz	.loop_str
1009
	dec	[.string_size]
1010
	jnz	.out
1011
	jz	.next_string
1012
 
1013
.string_size	dd 0
1014
.number_strings	dw 0
1015
.len_str_scr	dd 0
1016
 
1017
@@:
1018
	pushad
1019
	mov	ecx,edx
1020
	shl	ecx,16
1021
	mov	ebx,edx
1022
	shr	ebx,16
1023
	cmp	bx,[scroll_bar_data_vertical.start_x]
1024
	jge	.ls1
1025
	mov	ax,[scroll_bar_data_vertical.start_x]
1026
	sub	ax,bx
1027
	shl	ebx,16
1028
	mov	bx,ax
1029
	mov	cx,16
1030
	mcall	13,,,frgrd_color
1031
.ls1:
1032
	popad
1033
	jmp	@f
1034
.loop_str:
1035
	bt	[flags],6
1036
	jc	@b
1037
@@:
1038
	dec	[.string_size]
1039
	jz	.next_string
1040
	add	edi,2
1041
	add	edx,8*65536
1042
	jmp	@b
1043
 
1044
@@:;очистка фоновым цветом незакрашенных областей
1045
	pushad
1046
	ror	edx,16
1047
	mov	dx,16
1048
	mov	ecx,edx
1049
	mov	edx,frgrd_color
1050
	movzx	ebx,[scroll_bar_data_vertical.start_x]
1051
	sub	ecx,2*65536
1052
	mov	cx,2
1053
	mcall	13
1054
	popad
1055
 
1056
	pushad
1057
	mov	ecx,edx
1058
	shl	ecx,16
1059
	mov	ebx,edx
1060
	shr	ebx,16
1061
	cmp	bx,[scroll_bar_data_vertical.start_x]
1062
	jge	.10
1063
	mov	ax,[scroll_bar_data_vertical.start_x]
1064
	sub	ax,bx
1065
	shl	ebx,16
1066
	mov	bx,ax
1067
	mov	cx,16
1068
	mcall	13,,,frgrd_color
1069
.10:
1070
	popad
1071
	jmp	@f
1072
.next_string:
1073
	bt	[flags],6
1074
	jc	@b
1075
@@:
1076
	push	[len_str_scr]
1077
	pop	[.len_str_scr]
1078
	mov	eax,[ready_screen_buffer.string_size]
1079
	shr	eax,1
1080
	mov	[.string_size],eax	;коррекция смещения входных данных
1081
	mov	ecx,[beg_str_scr]
1082
	sub	[.string_size],ecx
1083
	sub	eax,ecx
1084
	shl	ecx,1
1085
	add	edi,ecx
1086
 
1087
	shl	eax,19
1088
	sub	edx,eax
1089
	add	edx,18
1090
	dec	[.number_strings]
1091
	jnz	.out
1092
	btr	[flags],6
1093
	jmp	end_draw
1094
 
1095
 
1096
align	4
1097
show_current_offset:
1098
	pushad
1099
	push	edx	;вывод текущего смещения в файле
1100
	mov	edi,palitra.5
1101
	mov	eax,[begin_offset]
1102
	mov	ebx,[cursor]
1103
	dec	ebx
1104
	shr	bx,1
1105
	add	ebx,eax
1106
	mov	[current_offset],ebx
1107
	mov	edx,[low_area]
1108
	lea	eax,[8*8+8+8]
1109
	shl	eax,16
1110
	add	edx,eax
1111
	mov	ecx,8
1112
	call	hex_output
1113
	lea	eax,[8*8+14]
1114
	shl	eax,16
1115
	add	edx,eax
1116
	push	edx
1117
	;двоичное значение байта
1118
	mov	edx,[file_buffer]
1119
	add	edx,ebx;[current_offset]
1120
	xor	eax,eax
1121
	cmp	ebx,[file_size]
1122
	jae	@f
1123
	mov	al,[edx]
1124
@@:
1125
	mov	bx,2
1126
	mov	ebp,8
1127
	xor	ecx,ecx
1128
	xor	edx,edx
1129
@@:
1130
	div	bx
1131
	or	cl,dl
1132
	ror	ecx,4
1133
	dec	ebp
1134
	jnz	@b
1135
	mov	ebx,ecx
1136
	pop	edx
1137
	mov	ecx,8
1138
	call	hex_output
1139
 
1140
	;десятичное
1141
	push	edx
1142
	mov	edx,[file_buffer]
1143
	mov	ebx,[current_offset]
1144
	add	edx,ebx
1145
	xor	eax,eax
1146
	inc	ebx
1147
	cmp	ebx,[file_size]	;0 если за границей файла
1148
	jb	@f
1149
	mov	edx,D_END
1150
@@:
1151
	mov	al,[edx]
1152
	xor	ebx,ebx
1153
;	mov	ebp,3
1154
	mov	cl,10
1155
@@:
1156
	div	cl
1157
	mov	bl,ah
1158
	xor	ah,ah
1159
	shl	ebx,8
1160
	test	al,al
1161
;	dec	ebp
1162
	jnz	@b
1163
	shr	ebx,8
1164
	cmp	byte [edx],100
1165
	jb	.1
1166
	mov	ebp,3
1167
	jmp	@f
1168
.1:
1169
	mov	ebp,1
1170
	cmp	byte [edx],10
1171
	jb	@f
1172
	mov	ebp,2
1173
@@:
1174
	mov	al,bl
1175
	shr	ebx,8
1176
	cmp	al,10
1177
	sbb	al,69h
1178
	das
1179
	shl	eax,8
1180
;	test	bx,bx
1181
	dec	ebp
1182
	jnz	@b
1183
 
1184
	mov	ecx,8*65536+16
1185
	pop	edx
1186
	add	edx,(8*8+30)*65536;268*65536
1187
	mov	edi,palitra.5
1188
	mov	ebp,0
1189
	push	dword 3
1190
@@:
1191
	shr	eax,8
1192
	xor	ebx,ebx
1193
	mov	bl,al
1194
	shl	ebx,4
1195
	add	ebx,font_buffer
1196
	push	eax
1197
	mcall	65
1198
	pop	eax
1199
	sub	edx,8*65536
1200
	dec	dword [esp]
1201
	jnz	@b
1202
	add	esp,4
1203
;	mov	edx,[low_area]	;вывод esp
1204
;	add	edx,298*65536
1205
;	mov	ebx,esp
1206
;	mov	ecx,8
1207
;	call	hex_output
1208
	pop	edx
1209
	popad
1210
	ret
1211
 
1212
 
1213
align	4
1214
hex_output:	;вывод hex строки из 8 символов
1215
	pushad
1216
	mov	edi,(hex8_string)	;адрес буфера
1217
	mov	dword [edi],0x30303030
1218
	mov	dword [edi+4],0x30303030
1219
	push	ecx
1220
.1:
1221
	mov	eax,ebx
1222
	and	eax,0xF
1223
	cmp	al,10
1224
	sbb	al,69h
1225
	das
1226
	mov	[edi+ecx-1],al
1227
	shr	ebx,4
1228
	loop	.1
1229
	mov	ecx,8*65536+16
1230
.2:
1231
	push	edi
1232
	xor	ebx,ebx
1233
	mov	al,[edi]
1234
	shl	eax,4
1235
	add	eax,font_buffer
1236
	xchg	eax,ebx
1237
	mov	edi,palitra.5
1238
	mov	ebp,0
1239
	mcall	65
1240
	add	edx,8*65536
1241
	pop	edi
1242
	inc	edi
1243
	dec	dword [esp]
1244
	jnz	.2
1245
	add	esp,4
1246
	popad
1247
	ret
1248
;------------------------------------------------------
1249
align	4
1250
input_from_keyboard:
1251
	xor	al,al
1252
	sub	ah,48
1253
	cmp	ah,9
1254
	jle	.1
1255
	sub	ah,7
1256
	cmp	ah,15
1257
	jle	.1
1258
	sub	ah,32
1259
.1:
1260
	bt	[flags],1
1261
	jnc	.2
1262
	mov	ebx,[cursor]
1263
	and	bl,1
1264
	jz	.2
1265
	inc	[file_size]
1266
	call	raspred_mem
1267
	mov	edi,[current_offset]
1268
	add	edi,[file_buffer]
1269
	mov	esi,[file_buffer]
1270
	add	esi,[file_size]
1271
	dec	esi
1272
@@:
1273
	cmp	edi,esi
1274
	ja	@f
1275
	mov	bl,[esi]
1276
	mov	[esi+1],bl
1277
	dec	esi
1278
	jmp	@b
1279
@@:
1280
	call	show_file_size
1281
	mov	ebx,[current_offset]
1282
	add	ebx,[file_buffer]
1283
	mov	byte [ebx],0
1284
.2:
1285
	mov	ecx,[current_offset]
1286
	add	ecx,[file_buffer]
1287
	;см.	первую	версию	heed.asm
1288
	mov	dl,[ecx]	;оригинальный байт
1289
	mov	ebx,[cursor]
1290
	and	bl,1	;нечет - редактируем старший полубайт
1291
	jnz	.hi_half_byte ;чёт - старший
1292
	and	dl,0xf0	;обнуляем мл. п-байт оригинального байта
1293
	jmp	.patch_byte
1294
.hi_half_byte:	;одновременно сдвигаем нужное значение в ст п-т и обнуляем младший
1295
	shl	ax,4
1296
	and	dl,0x0f	;обнуляем старший полубайт у оригинального байта
1297
.patch_byte:
1298
	or	ah,dl
1299
	mov	[ecx],ah
1300
	jmp	RIGHT
1301
 
1302
raspred_mem:
1303
	pushad
1304
	xor	edx,edx
1305
	mov	ecx,4096
1306
	mov	eax,[file_size]
1307
	inc	eax
1308
	div	ecx
1309
	cmp	eax,[prev_f_size_bl]
1310
	ja	@f
1311
	je	.ret
1312
	cmp	[file_size],4096
1313
	jbe	.ret
1314
	mov	[prev_f_size_bl],eax
1315
	xor	edx,edx
1316
	mul	ecx
1317
	mov	ecx,eax
1318
	jmp	.1
1319
@@:
1320
	mov	[prev_f_size_bl],eax
1321
	xor	edx,edx
1322
	mul	ecx
1323
	add	ecx,eax
1324
.1:
1325
	mcall	68,20,,[file_buffer]
1326
.ret:
1327
	popad
1328
	ret
1329
;---------------------------------------
1330
 
1331
align	4
1332
show_file_size:
1333
	mov	ebx,[file_size]
1334
	mov	edx,[low_area];
1335
	mov	esi,1
1336
	mov	ecx,8
1337
	call	hex_output
1338
	ret
2033 mario79 1339
;---------------------------------------------------------------------
1429 mario79 1340
align	4
2033 mario79 1341
create_title:
1342
	mov	edi,title_buf
1343
	mov	esi,title
1344
	cld
1345
@@:
1346
	lodsb
1347
	stosb
1348
	test	al,al
1349
	jne	@b
1350
	mov	[edi-1],byte ' '
1351
	mov	esi,fname_buf
1352
@@:
1353
	lodsb
1354
	stosb
1355
	test	al,al
1356
	jne	@b
1357
	ret
1358
;---------------------------------------------------------------------
1359
align	4
31 halyavin 1360
draw_window:
2033 mario79 1361
	call	create_title
1586 mario79 1362
	xor	esi,esi
2033 mario79 1363
	mcall	0,100*65536+653,100*65536+360,((0x73 shl 24) + frgrd_color),,title_buf	;title
1429 mario79 1364
	mcall	9,threath_buf,-1
1365
	cmp	byte [threath_buf+70],3	;окно свёрнуто в заголовок?
1366
	jnae	@f
1367
.@d:
1368
	call	end_draw
1369
	add	esp,4
1370
	jmp	still
1371
@@:
1372
	cmp	dword [threath_buf+66],(24*4)	;проверка минимальной высоты
1373
	jae	@f
1374
	mov	esi,dword [threath_buf+46]
1375
	sub	esi,dword [threath_buf+66]
1376
	add	esi,24*4
1377
	mcall	67,-1,-1,-1,
1378
	jmp	.@d
1379
@@:
1380
	cmp	dword [threath_buf+62],(26*6)	;проверка минимальной ширины
1381
	jae	@f
1382
	mov	edx,dword [threath_buf+42]
1383
	sub	edx,dword [threath_buf+62]
1384
	add	edx,26*6
1385
	mcall	67,-1,-1,,-1
1386
	jmp	.@d
1387
@@:
1388
	mov	eax,[file_size]
1389
	mov	ebx,[bytes_per_line]
1390
	xor	edx,edx
1391
	div	ebx
1392
	mov	[scroll_bar_data_vertical.size_x],0
1393
	cmp	eax,[number_strings]
1394
	jl	@f
1395
	mov	[scroll_bar_data_vertical.size_x],scroll_width_size
1396
@@:
1397
	mov	eax,dword [threath_buf+62]	;ширина клиентской области
1398
	sub	ax,[scroll_bar_data_vertical.size_x]
1399
	mov	[scroll_bar_data_vertical.start_x],ax
1400
	mov	eax,dword [threath_buf+66]	;высота клиентской области
1401
	sub	eax,24+24-11
1402
	mov	[scroll_bar_data_vertical.size_y],ax
1403
	mov	ebx,eax
1404
	push	eax
1405
	add	ebx,20
1406
	mov	[scroll_bar_data_vertical.max_area],ebx
1407
	mov	ebx,[scroll_bar_data_vertical.btn_high]
1408
	shl	ebx,1
1409
	add	ebx,20
1410
	mov	[scroll_bar_data_vertical.cur_area],ebx
1411
	pop	eax
1412
	sub	eax,3
1413
	mov	ebx,18
1414
	xor	edx,edx
1415
	div	bx
1416
	mov	[number_strings],eax	;кол-во hex строк в окне
1417
	mov	ebx,[bytes_per_line]
1418
	mul	ebx
1419
	mov	edi,[screen_table]	;кол-во байтов для вывода
1420
	mov	dword [edi],eax
31 halyavin 1421
 
1429 mario79 1422
	push	eax
31 halyavin 1423
 
1429 mario79 1424
	mov	ebx,dword [threath_buf+62]
1425
	inc	ebx
1426
	mov	ecx,(FIRST_HEX-18)
1427
	ror	ecx,16
1428
	mov	cx,18
1429
	ror	ecx,16
1430
	mcall	13,,,frgrd_color	;полоса сверху
31 halyavin 1431
 
1429 mario79 1432
	mcall	,,18,panel_clr1	;верхняя панель
31 halyavin 1433
 
1429 mario79 1434
	dec	ebx
1435
	mcall	38,,<18,18>,panel_clr2
1436
	mov	ecx,dword [threath_buf+66]
1437
	sub	cx,18
1438
	push	cx
1439
	shl	ecx,16
1440
	pop	cx
1441
	mcall	,,,panel_clr3	;нижняя панель
1442
	add	ecx,1*65536
1443
	mov	cx,18
1444
;	inc	ebx
1445
	mcall	13,,,panel_clr1
31 halyavin 1446
 
1447
 
1429 mario79 1448
	mov	eax,dword [threath_buf+62]
1449
	sub	eax,scroll_width_size
1450
	shr	eax,3	;div 8
1451
	mov	[len_str_scr],eax
31 halyavin 1452
 
1453
 
1429 mario79 1454
	mov	eax,[len_str_scr]
1455
	shl	eax,1
1456
	cmp	eax,[ready_screen_buffer.string_size]
1457
	jae	@f
31 halyavin 1458
 
1429 mario79 1459
	mov	edi,[screen_table]
1460
	mov	eax,[bytes_per_line]
1461
	sub	dword [edi],eax
1462
	dec	[number_strings]
31 halyavin 1463
 
1429 mario79 1464
@@:
1465
	shr	ecx,16
1466
	mov	edx,ecx
1467
	mov	ecx,(FIRST_HEX)
1468
	shr	ecx,16
1469
	mov	eax,[number_strings]
1470
	lea	ebx,[eax*8];*18
1471
	lea	ebx,[ebx*2]
1472
	lea	eax,[eax*2]
1473
	add	eax,ebx
1474
	add	cx,ax
1475
	add	cx,21
1476
	sub	dx,cx
1477
	shl	ecx,16
1478
	add	cx,dx
1479
	sub	ecx,1*65536
1480
	movzx	ebx,	word [scroll_bar_data_vertical.start_x]
1481
	mcall	13,,,frgrd_color
31 halyavin 1482
 
1429 mario79 1483
	pop	eax
31 halyavin 1484
 
1429 mario79 1485
	cmp	eax,[file_size]
1486
	jge	@f
1487
;	push	dword scroll_bar_data_vertical
1488
;	call	[scrollbar_ver_mouse]
1489
	xor	eax,eax
1490
	inc	eax
1491
	mov	[scroll_bar_data_vertical.all_redraw],eax
1492
	push	dword scroll_bar_data_vertical	;draw for Vertical ScrollBar
1493
	call	[scrollbar_ver_draw]
1494
	xor	eax,eax	;reset all_redraw flag
1495
	mov	[scroll_bar_data_vertical.all_redraw],eax
1496
@@:
1497
	push	dword menu_data_1	;draw for Menu 1
1498
	call	[menu_bar_draw]
1499
	push	dword menu_data_2	;draw for Menu 2
1500
	call	[menu_bar_draw]
1501
	push	dword menu_data_3	;draw for Menu 3
1502
	call	[menu_bar_draw]
31 halyavin 1503
 
1429 mario79 1504
;;;
31 halyavin 1505
 
1429 mario79 1506
	mov	eax,dword [threath_buf+66]
1507
	add	eax,8*65536-15
1508
	mov	[low_area],eax
31 halyavin 1509
 
1429 mario79 1510
	mov	ebx,[beg_str_scr]
1511
	mov	[beg_str_scr],0
1512
	mov	eax,[len_str_scr]
1513
	shl	eax,1
1514
	cmp	eax,[ready_screen_buffer.string_size]
1515
	jae	@f
31 halyavin 1516
 
1429 mario79 1517
	mov	[beg_str_scr],ebx
1518
	movzx	eax,word [threath_buf+66]
1519
	sub	eax,34
1520
	mov	[scroll_bar_data_horizontal.start_y],ax
31 halyavin 1521
 
1429 mario79 1522
;cur_area/(size_x-30)=len_str_scr/string_size
31 halyavin 1523
 
1429 mario79 1524
	mov	eax,dword [threath_buf+62]
1525
	sub	ax,[scroll_bar_data_vertical.size_x]
1526
	mov	[scroll_bar_data_horizontal.size_x],ax
1527
	sub	eax,[scroll_bar_data_horizontal.btn_high]
1528
	sub	eax,[scroll_bar_data_horizontal.btn_high]
1529
	mov	[scroll_bar_data_horizontal.max_area],eax
1530
	xor	edx,edx
1531
	mov	ebx,[len_str_scr]
1532
	mul	ebx
1533
	mov	ebx,[ready_screen_buffer.string_size]
1534
	shr	ebx,1
1535
	div	ebx
1536
	mov	[scroll_bar_data_horizontal.cur_area],eax
31 halyavin 1537
 
1429 mario79 1538
	push	dword scroll_bar_data_horizontal	;draw for Horizontal ScrollBar
1539
	call	[scrollbar_hor_mouse]
1540
	xor	eax,eax
1541
	inc	eax
1542
	mov	[scroll_bar_data_horizontal.all_redraw],eax
1543
	push	dword scroll_bar_data_horizontal	;draw for Vertical ScrollBar
1544
	call	[scrollbar_hor_draw]
1545
	xor	eax,eax	;reset all_redraw flag
1546
	mov	[scroll_bar_data_horizontal.all_redraw],eax
1547
@@:
1548
	mov	eax,[low_area]
1549
	mov	edi,[screen_table]
1550
	mov	esi,[bytes_per_line]
1551
	mov	ecx,esi
1552
	shl	ecx,1
1553
	mov	eax,[edi]
1554
	mov	ebx,[cursor]
1555
	inc	ebx
1556
	shr	ebx,1
1557
@@:
1558
	cmp	eax,ebx
1559
	jge	@f
1560
	add	[begin_offset],esi
1561
	sub	[cursor],ecx
1562
	sub	ebx,esi
1563
	jmp	@b
1564
@@:
1565
	bts	[flags],6
1566
	ret
31 halyavin 1567
 
1429 mario79 1568
align	4
1569
start_draw:
1570
	mcall	12,1
1571
	ret
31 halyavin 1572
 
1429 mario79 1573
end_draw:
1574
	mcall	12,2
1575
	ret
31 halyavin 1576
 
1429 mario79 1577
close_prog:
1578
	mcall	-1
1579
;-------------------------------------------------------------------------------
1580
change_codepage:	;меняем вторую половину таблицы
1581
	test	ah,ah
1582
	jnz	@f
1583
	btc	[flags],4
1584
	jc	.1
1585
	push	[codepage_offset]
1586
	pop	[codepage_offset_previous]
1587
	mov	[codepage_offset],2*128
1588
	jmp	.end
1589
.1:
1590
	push	[codepage_offset_previous]
1591
	pop	[codepage_offset]
1592
	jmp	.end
1593
@@:
1594
	cmp	[codepage_offset],0
1595
	jne	@f
1596
	add	[codepage_offset],128
1597
	jmp	.end
1598
@@:
1599
	mov	[codepage_offset],0
1600
.end:
1601
	call	show_codepage
1602
	jmp	red
31 halyavin 1603
 
1429 mario79 1604
show_codepage:
1605
	mov	ebp,6
1606
	mov	edx,dword [threath_buf+62]
1607
	sub	edx,73
1608
	shl	edx,16
1609
	add	edx,[low_area]
1610
	mov	edi,string_cp866
1611
	cmp	[codepage_offset],0
1612
	je	@f
1613
	add	edi,6
1614
	cmp	[codepage_offset],128
1615
	je	@f
1616
	add	edi,6
1617
@@:
1618
	mov	ecx,8*65536+16
1619
	mov	esi,1
1620
	push	ebp
1621
	mov	ebp,0
1622
@@:
1623
	xor	ebx,ebx
1624
	push	edi
1625
	mov	bl,[edi]
1626
	shl	bx,4
1627
	add	ebx,font_buffer
1628
	mov	edi,palitra.5
1629
	mcall	65
1630
	add	edx,8*65536
1631
	pop	edi
1632
	inc	edi
1633
	dec	dword [esp]
1634
	jnz	@b
1635
	add	esp,4
1636
	ret
31 halyavin 1637
 
1429 mario79 1638
show_insert:	;отображение режима вставки/замены
1639
	mov	ebp,3
1640
	mov	edx,dword [threath_buf+62]
1641
	sub	edx,120
1642
	shl	edx,16	; mov edx,428*65536+335
1643
	add	edx,[low_area]
1644
	mov	edi,string_ins
1645
	push	ebp
1646
	mov	ecx,8*65536+16
1647
	mov	esi,1
1648
	mov	ebp,0
1649
.1:
1650
	xor	ebx,ebx
1651
	push	edi
1652
	bt	[flags],1
1653
	jnc	.2
1654
	mov	bl,[edi]
1655
	shl	bx,4
1656
.2:
1657
	add	ebx,font_buffer
1658
	mov	edi,palitra.5
1659
	mcall	65
1660
	add	edx,8*65536
1661
	pop	edi
1662
	inc	edi
1663
	dec	dword [esp]
1664
	jnz	.1
1665
	add	esp,4
1666
	ret
1667
;-------------------------------------------------------------------------------
1668
	;help window
1669
create_help_window:
1670
	pushad
1650 Nasarus 1671
        cmp	[help_is_open_already], 1
1672
        jne	@f
1673
  	mov     ECX, [help_window_pid]
1674
        mcall   18, 21
1675
        xchg    EAX, ECX
1676
        mcall   18, 3
1677
	popad
1678
        ret
1679
@@:
1429 mario79 1680
	mcall	51,1,.thread,(.threat_stack+16*4)
1650 Nasarus 1681
        mov     [help_is_open_already], 1
1682
        mov     [help_window_pid], EAX
1429 mario79 1683
	popad
1684
	ret
1685
.thread:
1686
	call	.window
1687
.still:
1688
	mcall	10
1689
	dec	al
1690
	jz	.red
1691
	dec	al
1692
	jz	.key
1693
	dec	al
1694
	jz	.button
1695
	jmp	.still
1650 Nasarus 1696
        and	[help_is_open_already], 0
1429 mario79 1697
	mcall	-1
1698
.button:
1699
	mcall	17,1
1700
	cmp	ah,1
1701
	jne	@f
1650 Nasarus 1702
        and	[help_is_open_already], 0
1429 mario79 1703
	mcall	-1
1704
@@:
1705
	cmp	ah,2
1706
	jne	@f
1707
	mov	edi,(help_end-help_text)/51
1708
	movzx	eax,[cur_help_string]
1709
	sub	edi,13
1710
	sub	edi,eax
1711
	jz	.still
1712
	inc	[cur_help_string]
1713
	jmp	.red
1714
@@:
1715
	cmp	ah,3
1716
	jne	.still
1717
	cmp	[cur_help_string],0
1718
	je	.still
1719
	dec	[cur_help_string]
1720
	jmp	.red
31 halyavin 1721
 
1429 mario79 1722
.key:
1723
	mcall	2
1724
	jmp	.still
1017 diamond 1725
 
1429 mario79 1726
.red:
1727
	call	.window
1728
	jmp	.still
31 halyavin 1729
 
1429 mario79 1730
.window:
1731
	pushad
1732
	mcall	12,1
1733
	mcall	0,50*65536+320,0x70*65536+240,0x13000000,,help_but_text
1734
	mcall	8,<130,20>,<6,12>,2,0xaaaaaa
1735
	mcall	,<150,20>,,3,
1736
	mov	ebx,8*65536+15
1737
	mov	ecx,0x00DDDDDD
1738
	xor	edx,edx
1739
	movzx	eax,byte [cur_help_string]
1740
	mov	edi,(help_end-help_text)/51
1741
	sub	edi,eax
1742
	mov	esi,51
1743
	mul	si
1744
	mov	edx,help_text
1745
	add	edx,eax
1746
	mov	eax,4
1747
@@:
1748
	add	ebx,0x10
1749
	mcall
1750
	add	edx,51
1751
	dec	edi
1752
	jnz	@b
1753
	mcall	12,2
1754
	popad
1755
	ret
31 halyavin 1756
 
1429 mario79 1757
.threat_stack:	times	16	dd	0
1758
;-------------------------------------------------
31 halyavin 1759
 
1429 mario79 1760
open_file:
1761
	mov	[func_70.func_n],5
1762
	mov	[func_70.param1],0
1763
	mov	[func_70.param2],0
1764
	mov	[func_70.param3],0
1765
	mov	[func_70.param4],bufferfinfo
1766
	mov	[func_70.rezerv],0
1767
	mov	[func_70.name],file_name
1768
	mcall	70,func_70
31 halyavin 1769
 
1429 mario79 1770
	test	al,al	;файл найден?
1771
	jz	@f
1772
	mcall	4,400*65536+31,0x80CC0000,error_open_file_string
1773
	jmp	open_file
1774
@@:
1775
;	mov	edx,[blocks_counter]
1776
;	mov	edi,[blocks_table]
1777
;	@@:	mov	ecx,[edi]	;высвобождаем:
1778
;	mcall	68,13	;блоки файла
1779
;	add	edi,8
1780
;	dec	edx
1781
;	jnz	@b
1782
;	mcall	68,13,[blocks_table]	;таблицу
31 halyavin 1783
 
1429 mario79 1784
	mov	eax,	dword [bufferfinfo+32]	;копируем размер файла
1785
	mov	[file_size],eax
31 halyavin 1786
 
1429 mario79 1787
;	mov	ebx,65536	;64КБ блок
1788
;	xor	edx,edx
1789
;	div	ebx
1790
;	push	dx	;длина последнего блока
1791
;	test	dx,dx
1792
;	jz	@f
1793
;	inc	eax
1794
;	@@:	test	eax,eax
1795
;	jnz	@f
1796
;	inc	eax
1797
;	@@:	mov	[blocks_counter],eax
1798
;	sal	eax,3;*8	;размер таблицы с индексами блоков
1799
;;	add	eax,32	;решаем	проблему с 32МБ файлами
31 halyavin 1800
 
1429 mario79 1801
;	mov	ecx,eax	;выделяем память:
1802
;	mcall	68,12	;под таблицу
1803
;	mov	[blocks_table],eax
1804
;	mov	edi,eax
1805
;	mov	ecx,[blocks_counter]
1806
;	@@:	mov	dword [edi+4],65536
1807
;	add	edi,8
1808
;	loop	@b
1809
;	xor	edx,edx
1810
;	pop	dx	;длина последнего блока
1811
;	mov	dword [edi-4],edx
1812
 
1813
;	mov	edx,[blocks_counter]
1814
;	mov	edi,[blocks_table]
1815
;@@:	mcall	68,12,[edi+4]	;под блок
1816
;	mov	[edi],eax
1817
;	add	edi,8
1818
;	dec	edx
1819
;	jnz	@b
1820
 
1821
	mcall	68,13,[file_buffer]
1822
	test	eax,eax
1823
	jnz	@f
1824
	;здесь ошибка на не освобождение блока
1825
@@:
1826
	mcall	68,12,[file_size]
1827
	mov	[file_buffer],eax
1828
 
1829
;;имеем таблицу: [ DWORD указатель на первый элемент блока : DWORD длина блока ]
1830
 
1831
;	mov	ecx,[blocks_counter]	;открываем файл
1832
;	mov	edi,[blocks_table]
1833
	mov	[func_70.func_n],0
1834
	mov	[func_70.param1],0
1835
	mov	[func_70.param2],0
1836
	mov	[func_70.rezerv],0
1837
	mov	[func_70.name],file_name
1838
;@@:
1839
	push	dword [file_size];dword [edi+4]
1840
	pop	dword [func_70.param3]
1841
	push	dword [file_buffer];dword [edi]
1842
	pop	dword [func_70.param4]
1843
	mcall	70,func_70
1844
;	add	edi,8
1845
;	add	dword [func_70.param1],65536
1846
;	loop	@b
1847
 
1848
	test	eax,eax
1849
	jz	@f
1850
	;ошибка чтения
1851
@@:
1852
	call	Ctrl_HOME
1853
 
1854
	jmp	redraw_all
1855
;-------------------------------------------------------------------------------
1856
open_dialog_save:
1857
	mov	[OpenDialog_data.type],1	; Save
1510 mario79 1858
 
1859
	push    dword OpenDialog_data
1860
	call    [OpenDialog_Start]
1861
 
1862
;	cmp	[OpenDialog_data.status],2	; OpenDialog does not start
1863
;;	je	.sysxtree	; some kind of alternative, instead OpenDialog
1864
;	je	save_file
1429 mario79 1865
	cmp	[OpenDialog_data.status],1
1866
	jne	still
1867
	mov	esi,fname_buf
1868
	mov	edi,file_name
1869
	cld
1870
@@:
1871
	cmp	byte [esi],0
1872
	je	@f
1873
	movsb
1874
	jmp	@b
1875
@@:
1876
	mov	byte [edi],0
1877
	sub	esi,path
1878
	mov	[edit1.size],esi
1879
	mov	[edit1.pos],esi
1510 mario79 1880
;	jmp	save_file
1429 mario79 1881
;-------------------------------------------------------------------------------
1882
save_file:	;сохраняем файл
1883
	mov	[func_70.func_n],2
1884
	mov	[func_70.param1],0
1885
	mov	[func_70.param2],0
1886
	push	[file_size]
1887
	pop	[func_70.param3]
1888
	push	[file_buffer]
1889
	pop	[func_70.param4]
1890
	mov	[func_70.rezerv],0
1891
	mov	[func_70.name],file_name
1892
	mcall	70,func_70
1893
	cmp	al,0	;сохранён удачно?
1894
	je	redraw_all
1895
	mcall	4,400*65536+31,0x80CC0000,error_save_file_string
1896
	jmp	save_file
1897
;-------------------------------------------------------------------------------
1898
draw_ed_box:	;рисование edit box'а
1899
.1:
1900
	push	eax	ebx	ecx	edx
1901
	mcall	13,180*65536+220,25*65536+70,0xaaaaaa
1902
	bt	[flags],9
1903
	jnc	@f
1904
	mcall	4,246*65536+35,0x80ffffff,sel_text
1905
@@:
1906
	bt	[flags],2
1907
	jnc	@f
1908
	push	dword Option_boxs
1909
	call	[option_box_draw]
1910
@@:
1911
	bt	[flags],3
1912
	jnc	@f
1913
	push	dword Option_boxs2
1914
	call	[option_box_draw]
1915
@@:
1916
	mov	eax,ed_box_data
1917
	mov	ecx,[eax]
1918
@@:
1919
	add	eax,4
1920
	push	dword [eax]
1921
	call	[edit_box_draw]
1922
	loop	@b
1923
	pop	edx	ecx	ebx	eax
1924
.2:
1925
	mcall	10
1926
	cmp	al,6
1927
	je	.mouse
1928
	cmp	al,3
1929
	je	.button
1930
	cmp	al,2
1931
	je	.keys
1932
	cmp	al,1
1933
	jne	.2
1934
	call	draw_window
1935
	call	main_area
1936
	bt	[flags],2
1937
	jnc	@f
1938
	push	dword Option_boxs
1939
	call	[option_box_draw]
1940
@@:
1941
	bt	[flags],3
1942
	jnc	@f
1943
	push	dword Option_boxs2
1944
	call	[option_box_draw]
1945
@@:
1946
	jmp	.1
1947
 
1948
.mouse:
1949
	bt	[flags],2
1950
	jnc	@f
1951
	push	dword Option_boxs
1952
	call	[option_box_mouse]
1953
@@:
1954
	bt	[flags],3
1955
	jnc	@f
1956
	push	dword Option_boxs2
1957
	call	[option_box_mouse]
1958
@@:
1959
	jmp	.2
1960
 
1961
.keys:
1962
	mcall	2
1963
	cmp	ah,13
1964
	je	.4
1965
	cmp	ah,27
1966
	je	.3
1967
 
1968
	bt	[flags],2	;проверка на применимость символов 0-9,a-b
1969
	jnc	.eb2
1970
.eb1:
1971
	cmp	ah,9
1972
	jne	.eb1_1
1973
	push	edx
1974
	mov	edx,[option_group1]
1975
	cmp	edx,op1
1976
	jne	@f
1977
	mov	edx,op2
1978
	jmp	.eb1_2
1979
@@:
1980
	cmp	edx,op2
1981
	jne	@f
1982
	mov	edx,op3
1983
	jmp	.eb1_2
1984
@@:
1985
	mov	edx,op1
1986
.eb1_2:
1987
	mov	[option_group1],edx
1988
	pop	edx
1989
	jmp	.1
1990
.eb1_1:
1991
	cmp	ah,48
1992
	jb	.eb1_3
1993
	cmp	ah,57
1994
	jbe	.eb
1995
	cmp	ah,102
1996
	jg	.eb1_3
1997
	cmp	ah,97
1998
	jge	.eb
1999
.eb1_3:
2000
	cmp	ah,182
2001
	je	.eb
2002
	cmp	ah,8
2003
	je	.eb
2004
	cmp	ah,176
2005
	je	.eb
2006
	cmp	ah,179
2007
	je	.eb
2008
	dec	[edit2.shift]
2009
	dec	[edit2.shift+4]
2010
 
2011
	push	dword [ed_box_data+4];	[esp]
2012
	call	[edit_box_draw]
2013
	jmp	.2
2014
 
2015
.eb2:
2016
	bt	[flags],3
2017
	jnc	.eb3
2018
	cmp	ah,9
2019
	jne	.eb2_2
2020
	push	edx
2021
	mov	edx,[option_group2]
2022
	cmp	edx,op11
2023
	jne	@f
2024
	mov	edx,op12
2025
	jmp	.eb2_1
2026
@@:
2027
	mov	edx,op11
2028
.eb2_1:
2029
	mov	[option_group2],edx
2030
	pop	edx
2031
	jmp	.1
2032
.eb2_2:
2033
	cmp	ah,182
2034
	je	.eb
2035
	cmp	ah,8
2036
	je	.eb
2037
	cmp	ah,176
2038
	je	.eb
2039
	cmp	ah,179
2040
	je	.eb
2041
	mov	edx,[option_group2]
2042
	cmp	edx,op11
2043
	jne	.eb
2044
	cmp	ah,48
2045
	jb	.eb2_3
2046
	cmp	ah,57
2047
	jbe	.eb
2048
	cmp	ah,102
2049
	jg	.eb2_3
2050
	cmp	ah,97
2051
	jge	.eb
2052
.eb2_3:
2053
	dec	[edit3.shift]
2054
	dec	[edit3.shift+4]
2055
	push	dword [ed_box_data+4];[esp]
2056
	call	[edit_box_draw]
2057
	jmp	.2
2058
.eb3:
2059
	bt	[flags],9
2060
	jnc	.eb
2061
	cmp	ah,9
2062
	je	.eb3_1
2063
	cmp	ah,182
2064
	je	.eb3_2
2065
	cmp	ah,8
2066
	je	.eb3_2
2067
	cmp	ah,176
2068
	je	.eb3_2
2069
	cmp	ah,179
2070
	je	.eb3_2
2071
	cmp	ah,48
2072
	jb	.eb3_3
2073
	cmp	ah,57
2074
	jbe	.eb3_2
2075
	cmp	ah,102
2076
	jg	.eb3_3
2077
	cmp	ah,97
2078
	jge	.eb3_2
2079
.eb3_3:
2080
	push	edx
2081
	mov	edx,[edit4.flags]
2082
	and	edx,2
2083
	jz	@f
2084
	pop	edx
2085
	dec	[edit4.shift]
2086
	dec	[edit4.shift+4]
2087
	jmp	.2
2088
@@:
2089
	pop	edx
2090
	dec	[edit5.shift]
2091
	dec	[edit5.shift+4]
2092
	jmp	.2
2093
.eb3_1:
2094
	push	edx
2095
	mov	edx,[edit4.flags]
2096
	and	edx,2
2097
	jz	@f
2098
	pop	edx
2099
	mov	[edit5.flags],2
2100
	mov	[edit4.flags],0
2101
	jmp	.eb3_2
2102
@@:
2103
	pop	edx
2104
	mov	[edit4.flags],2
2105
	mov	[edit5.flags],0
2106
.eb3_2:
2107
	push	dword [ed_box_data+4]
2108
	call	[edit_box_key]
2109
	push	dword [ed_box_data+8]
2110
	call	[edit_box_key]
2111
	jmp	.1
2112
 
2113
.eb:
2114
	push	dword [ed_box_data+4];[esp]
2115
	call	[edit_box_key]
2116
	jmp	.2
2117
 
2118
.button:
2119
	mcall	17
2120
	cmp	ah,1
2121
	jne	.2
2122
	jmp	close_prog
2123
.3:
2124
	btr	[flags],2
2125
	btr	[flags],3
2126
	add	esp,4
2127
	jmp	redraw_all
2128
.4:
2129
	mcall	13,180*65536+220,25*65536+70,frgrd_color
2130
	ret
2131
 
2132
 
2133
;-------------------------------------------------
2134
;-------------------------------------------------
2135
;-------------------------------------------------
2136
 
2137
strtohex:
2138
;enter: edi - pointer to string,ebx - pointer to size of string; exit: eax in hex
2139
	mov	esi,hex8_string
2140
@@:
2141
	mov	ah,[edi+ecx-1]	;обработка введённых символов
2142
	sub	ah,48
2143
	cmp	ah,9
2144
	jbe	.1
2145
	sub	ah,7
2146
	cmp	ah,15
2147
	jbe	.1
2148
	sub	ah,32
2149
.1:
2150
	mov	[esi+ecx-1],ah
2151
	dec	ecx
2152
	jnz	@b
2153
	mov	ecx,[ebx]
2154
	xor	eax,eax
2155
.2:
2156
	shl	eax,4
2157
	or	al,[esi]
2158
	inc	esi
2159
	dec	ecx
2160
	jnz	.2
2161
	ret
2162
 
2163
Ctrl_G:
2164
	bts	[flags],2
2165
	mov	dword [ed_box_data],1
2166
	mov	dword [ed_box_data+4],edit2
2167
	call	draw_ed_box
2168
	btr	[flags],2
2169
	mov	ecx,[edit2.size]
2170
	test	ecx,ecx
2171
	jz	.end
2172
	cmp	ecx,8
2173
	jg	Ctrl_G
2174
 
2175
	mov	edi,go_to_string
2176
	mov	ebx,edit2.size
2177
	call	strtohex
2178
 
2179
	cmp	eax,[file_size]	;выбор check_box'а
2180
	jg	Ctrl_G
2181
	mov	edx,[option_group1]
2182
	cmp	edx,op1	;abs
2183
	je	.abs
2184
	cmp	edx,op2
2185
	jne	.back
2186
	add	eax,[current_offset]	;forward
2187
	cmp	eax,[file_size]
2188
	jg	Ctrl_G
2189
	mov	edi,[screen_table]
2190
	mov	edi,[edi]
2191
	xor	edx,edx
2192
@@:
2193
	add	edx,edi
2194
	cmp	eax,edx
2195
	jg	@b
2196
	sub	edx,edi
2197
	mov	[begin_offset],edx
2198
	sub	eax,edx
2199
	shl	eax,1
2200
	inc	eax
2201
	mov	[cursor],eax
2202
	jmp	.end
2203
 
2204
.back:
2205
	cmp	eax,[current_offset]	;back
2206
	jg	Ctrl_G
2207
	mov	edi,[screen_table]
2208
	mov	edi,[edi]
2209
	mov	ebx,[current_offset]
2210
	sub	ebx,eax
2211
	xor	edx,edx
2212
@@:
2213
	add	edx,edi
2214
	cmp	edx,ebx
2215
	jb	@b
2216
	sub	edx,edi
2217
	mov	[begin_offset],edx
2218
	sub	ebx,edx
2219
	mov	edx,ebx
2220
	shl	edx,1
2221
	inc	edx
2222
	mov	[cursor],edx
2223
	jmp	.end
2224
.abs:
2225
	mov	esi,[screen_table]
2226
	mov	esi,[esi]
2227
	xor	ebx,ebx
2228
.3:
2229
	add	ebx,esi
2230
	cmp	eax,ebx
2231
	jg	.3
2232
	sub	ebx,esi
2233
	cmp	ebx,[file_size]
2234
	jg	Ctrl_G
2235
	mov	[begin_offset],ebx
2236
	sub	eax,ebx
2237
	shl	eax,1
2238
	inc	eax
2239
	mov	[cursor],eax
2240
.end:
2241
	jmp	red
2242
 
2243
Ctrl_B:
2244
	bts	[flags],9
2245
	mov	dword [ed_box_data],2
2246
	mov	dword [ed_box_data+4],edit4
2247
	mov	dword [ed_box_data+8],edit5
2248
	call	draw_ed_box
2249
	btr	[flags],9
2250
 
2251
	mov	ecx,[edit4.size]
2252
	test	ecx,ecx
2253
	jz	.end
2254
	cmp	ecx,8
2255
	jg	Ctrl_B
2256
 
2257
	mov	edi,sel1_string
2258
	mov	ebx,edit4.size
2259
	call	strtohex
2260
 
2261
	cmp	eax,[file_size]
2262
	jge	Ctrl_B
2263
	push	eax	;from
2264
	mov	ecx,[edit5.size]
2265
	test	ecx,ecx
2266
	jz	.end
2267
	cmp	ecx,8
2268
	jg	Ctrl_B
2269
 
2270
	mov	edi,sel2_string
2271
	mov	ebx,edit5.size
2272
	call	strtohex
2273
 
2274
	cmp	eax,[file_size]
2275
	jb	@f
2276
	pop	eax
2277
	jmp	Ctrl_B
2278
@@:
2279
	pop	[shblock_beg]
2280
	cmp	eax,[shblock_beg]
2281
	jae	@f
2282
	xchg	eax,[shblock_beg]
2283
@@:
2284
	mov	[shblock_end],eax
2285
	bts	[flags],8
2286
.end:
2287
	jmp	red
2288
 
2289
Ctrl_F:
2290
	bts	[flags],3
2291
	mov	dword [ed_box_data],1
2292
	mov	dword [ed_box_data+4],edit3
2293
	call	draw_ed_box
2294
	btr	[flags],3
2295
	mov	ecx,[edit3.size]
2296
	test	ecx,ecx
2297
	jz	.end
2298
	cmp	ecx,8
2299
	jg	Ctrl_F
2300
	mov	edi,find_string
2301
	mov	edx,[option_group2]
2302
	cmp	edx,op11
2303
	jne	.find
2304
	mov	eax,find_string
2305
	push	dword [eax]
2306
	push	dword [eax+4]
2307
	bts	[flags],0
2308
	mov	ebx,edit3.size
2309
	call	strtohex
2310
	mov	ecx,[edit3.size]
2311
	bt	cx,0
2312
	jnc	.3
2313
	inc	ecx
2314
	shl	eax,4
2315
.3:
2316
	shr	ecx,1
2317
.4:
2318
	mov	[edi+ecx-1],al
2319
	shr	eax,8
2320
	loop	.4
2321
.find:
2322
	mov	esi,[current_offset]
2323
	mov	ebx,[file_size]
2324
	mov	eax,ebx
2325
	add	eax,[file_buffer]
2326
	add	esi,[file_buffer]
2327
.5:
2328
	mov	ecx,[edit3.size]
2329
	cmp	edx,op11
2330
	jne	.7
2331
	bt	cx,0
2332
	jnc	.6
2333
	inc	ecx
2334
.6:
2335
	shr	ecx,1
2336
.7:
2337
	cld
2338
@@:
2339
	cmp	esi,eax
2340
	jg	.end
2341
	cmpsb
2342
	je	.8
2343
	mov	edi,find_string
2344
	jmp	.5
2345
.8:
2346
	loop	@b
2347
	sub	esi,[file_buffer]
2348
	mov	ecx,[edit3.size]
2349
	cmp	edx,op11
2350
	jne	.10
2351
	bt	cx,0
2352
	jnc	.9
2353
	inc	ecx
2354
.9:
2355
	shr	ecx,1
2356
.10:
2357
	sub	esi,ecx
2358
	xor	edx,edx
2359
	mov	edi,[screen_table]
2360
	mov	edi,[edi]
2361
@@:
2362
	add	edx,edi
2363
	cmp	edx,esi
2364
	jb	@b
2365
	sub	edx,edi
2366
	mov	[begin_offset],edx
2367
	sub	esi,edx
2368
	shl	esi,1
2369
	inc	esi
2370
	mov	[cursor],esi
2371
.end:
2372
	bt	[flags],0
2373
	jnc	@f
2374
	mov	eax,find_string
2375
	pop	dword [eax+4]
2376
	pop	dword [eax]
2377
	btr	[flags],0
2378
@@:
2379
	jmp	red
2380
 
2381
invert_byte:
2382
	mov	ebx,[current_offset]
2383
	cmp	ebx,[file_size]
2384
	jae	still
2385
	add	ebx,[file_buffer]
2386
	not	byte [ebx]
2387
	jmp	red
2388
 
2389
 
2390
Insert:	;переключение	режима	вставки/замены
2391
	btc	[flags],1	;not [insert_mod]
2392
	call	show_insert
2393
	jmp	red
2394
 
2395
 
2396
DEL:
2397
	bt	[flags],1
2398
	jnc	still
2399
	mov	edi,[current_offset]
2400
	mov	esi,[file_buffer]
2401
	mov	edx,[file_size]
2402
	test	edx,edx
2403
	jz	still
2404
	dec	edx
2405
	cmp	edi,edx
2406
	jbe	@f
2407
	call	LEFT
2408
	call	LEFT
2409
	jmp	red
2410
@@:
2411
	jb	@f
2412
	call	LEFT
2413
	call	LEFT
2414
@@:
2415
	cmp	edi,edx
2416
	je	@f
2417
	mov	al,[edi+esi+1]
2418
	mov	[edi+esi],al
2419
	inc	edi
2420
	jmp	@b
2421
@@:
2422
	dec	[file_size]
2423
	call	show_file_size
2424
	jmp	red
2425
 
2426
 
2427
BackSpace:
2428
	bt	[flags],1	;cmp [insert_mod],0
2429
	jnc	still	;je still
2430
	mov	edi,[current_offset]
2431
	mov	esi,[file_buffer]
2432
	mov	edx,[file_size]
2433
	test	edx,edx
2434
	jz	still
2435
	test	edi,edi
2436
	jz	still
2437
	call	LEFT
2438
	call	LEFT
2439
	cmp	[cursor],2
2440
	jne	@f
2441
	cmp	edx,1
2442
	jne	@f
2443
	dec	[cursor]
2444
@@:
2445
	cmp	edi,edx
2446
	jge	@f
2447
	mov	al,[edi+esi]
2448
	mov	[edi+esi-1],al
2449
	inc	edi
2450
	jmp	@b
2451
@@:
2452
	dec	[file_size]
2453
	call	show_file_size
2454
	jmp	red
2455
 
2456
 
2457
Ctrl_UP:
2458
	cmp	[begin_offset],0
2459
	je	@f
2460
	mov	eax,[bytes_per_line]
2461
	sub	[begin_offset],eax
2462
@@:
2463
	ret
2464
 
2465
 
2466
Ctrl_DOWN:
2467
	mov	eax,[cursor]
2468
	dec	eax
2469
	shr	eax,1
2470
	add	eax,[begin_offset]
2471
	mov	ebx,[bytes_per_line]
2472
	add	eax,ebx
2473
	cmp	eax,[file_size]
2474
	jge	@f
2475
	add	[begin_offset],ebx
2476
@@:
2477
	ret
2478
 
2479
 
2480
UP:
2481
	mov	eax,[current_offset]
2482
	cmp	eax,[bytes_per_line]
2483
	jb	still
2484
	mov	eax,[cursor]
2485
	dec	ax
2486
	shr	ax,1
2487
	cmp	eax,[bytes_per_line]
2488
	jge	@f
2489
	mov	eax,[bytes_per_line]
2490
	sub	[begin_offset],eax
2491
	jmp	red
2492
@@:
2493
	mov	eax,[bytes_per_line]
2494
	shl	ax,1
2495
	sub	[cursor],eax
2496
	jmp	red
2497
 
2498
 
2499
DOWN:	;на	строку	вниз
2500
	mov	eax,[current_offset]
2501
	add	eax,[bytes_per_line]
2502
	bt	[flags],1
2503
	jnc	@f
2504
	dec	eax
2505
@@:
2506
	cmp	eax,[file_size]
2507
	jge	still	;если мы на последней строке файла, то стоп
2508
	mov	eax,[screen_table]
2509
	mov	eax,[eax]
2510
	mov	edx,[cursor]
2511
	dec	dx
2512
	shr	dx,1
2513
	add	edx,[bytes_per_line]
2514
	cmp	eax,edx	;на последней строке?
2515
	jbe	@f
2516
	mov	eax,[bytes_per_line]
2517
	shl	ax,1
2518
	add	[cursor],eax
2519
	ret
2520
@@:
2521
	mov	eax,[bytes_per_line]
2522
	add	[begin_offset],eax
2523
	ret
2524
 
2525
 
2526
LEFT:
2527
	cmp	[cursor],1
2528
	jbe	@f
2529
	dec	[cursor]
2530
	jmp	.end
2531
@@:
2532
	cmp	[begin_offset],0	;курсор	на первой строке со смещением 0?
2533
	jne	@f	;иначе смещаем с прокруткой вверх вверх и в конец строки
2534
;	inc	[cursor]
2535
	jmp	.end;still	;тогда стоп
2536
@@:
2537
	mov	eax,[bytes_per_line]
2538
	sub	[begin_offset],eax
2539
	shl	ax,1
2540
	dec	eax
2541
	add	[cursor],eax
2542
.end:
2543
	ret
2544
 
2545
 
2546
RIGHT:
2547
	mov	ecx,[begin_offset]	;вычисляем смещение курсора
2548
	mov	edx,[cursor]	;для проверки существования
2549
	shr	edx,1	;следующего символа
2550
	add	ecx,edx
2551
	bt	[flags],1
2552
	jnc	@f
2553
	dec	ecx	;сравниваем с размером файла
2554
@@:
2555
	cmp	ecx,[file_size]	;положением курсора - не далее 1 байта от конца файла
2556
	jge	red
2557
	cmp	[file_size],0
2558
	je	still
2559
	mov	eax,[screen_table]
2560
	mov	eax,[eax]
2561
	mov	ecx,[begin_offset]
2562
	cmp	eax,edx	;сравнение на нижнюю строку
2563
	jbe	@f
2564
	inc	[cursor]	;курсор вправо
2565
	jmp	red
2566
@@:
2567
	mov	ecx,[bytes_per_line]	;смещаемся на строчку вниз
2568
	add	[begin_offset],ecx	;с прокруткой
2569
	shl	cx,1
2570
	dec	cx
2571
	sub	[cursor],ecx
2572
	jmp	red
2573
 
2574
 
2575
PGDN:
2576
	mov	edi,[screen_table]
2577
	mov	eax,[edi]
2578
	shl	eax,1
2579
	add	eax,[begin_offset]
2580
	cmp	eax,[file_size]	;есть ли возможность сместиться на страницу?
2581
	jg	Ctrl_END
2582
	mov	eax,[edi]
2583
	add	[begin_offset],eax
2584
;	mov	ebx,[cursor]
2585
;	dec	ebx
2586
;	xor	ecx,ecx
2587
;	bt	ebx,0
2588
;	jnc	@f
2589
;	inc	ecx
2590
;	@@:	shr	ebx,1
2591
;	add	ebx,eax
2592
;	@@:	cmp	ebx,[file_size]
2593
;	jbe	@f
2594
;	sub	ebx,[bytes_per_line]
2595
;	jmp	@b
2596
;	@@:	sub	ebx,eax
2597
;	shl	ebx,1
2598
;	inc	ebx
2599
;	add	ebx,ecx
2600
;	mov	[cursor],ebx
2601
	jmp	red
2602
 
2603
 
2604
PGUP:
2605
	mov	eax,[screen_table]
2606
	mov	eax,[eax]
2607
	mov	edx,[begin_offset]
2608
	cmp	eax,edx
2609
	jbe	@f
2610
	call	Ctrl_HOME
2611
	jmp	red
2612
@@:
2613
	sub	[begin_offset],eax
2614
	jmp	red
2615
 
2616
 
2617
HOME:
2618
	mov	eax,[cursor]
2619
	dec	ax
2620
	shr	ax,1
2621
	mov	ecx,[bytes_per_line]
2622
	xor	edx,edx
2623
	div	ecx
2624
	shl	dx,1
2625
	sub	[cursor],edx
2626
	bt	[cursor],0
2627
	jc	@f
2628
	dec	[cursor]
2629
@@:
2630
	ret
2631
 
2632
 
2633
END_:
2634
	mov	eax,[cursor]
2635
	dec	ax
2636
	shr	ax,1
2637
	mov	ecx,[bytes_per_line]
2638
	xor	edx,edx
2639
	div	ecx
2640
	mov	eax,[current_offset]
2641
	sub	eax,edx
2642
	add	eax,[bytes_per_line]
2643
	mov	edx,[file_size]
2644
	cmp	eax,edx
2645
	jbe	@f
2646
	sub	edx,eax
2647
	add	eax,edx
2648
@@:
2649
	sub	eax,[begin_offset]
2650
	shl	eax,1
2651
	test	eax,eax
2652
	jz	red
2653
	dec	eax
2654
	mov	[cursor],eax
2655
	jmp	red
2656
 
2657
 
2658
Ctrl_HOME:
2659
	mov	[begin_offset],0
2660
	mov	[cursor],1
2661
	ret
2662
 
2663
 
2664
Ctrl_END:
2665
	mov	eax,[file_size]
2666
	mov	ecx,[screen_table]
2667
	mov	ecx,[ecx]
2668
	xor	edx,edx
2669
	div	ecx
2670
	test	dx,dx
2671
	jnz	@f
2672
	test	eax,eax
2673
	jz	@f
2674
	mov	edx,ecx
2675
	dec	eax
2676
@@:
2677
	push	dx
2678
	xor	dx,dx
2679
	mul	ecx
2680
	pop	dx
2681
	shl	edx,1
2682
	cmp	edx,1
2683
	jg	@f
2684
	mov	edx,2
2685
@@:
2686
	dec	edx
2687
	mov	[begin_offset],eax
2688
	mov	[cursor],edx
2689
	jmp	red
2690
 
2691
 
2692
ESC:
2693
	btr	[flags],8
2694
	jmp	red
2695
 
2696
copy_to_buf:
2697
	bt	[flags],8
2698
	jnc	.1
2699
	mov	eax,[shblock_end]
2700
	sub	eax,[shblock_beg]
2701
	inc	eax
2702
	mov	ecx,eax
2703
	mov	[copy_len],eax
2704
	mcall	68,20,,[copy_buf]
2705
	mov	esi,[shblock_beg]
2706
	mov	edi,[copy_buf]
2707
	add	esi,[file_buffer]
2708
	mov	ecx,[copy_len]
2709
	cld
2710
@@:
2711
	movsb
2712
	loop	@b
2713
	bts	[flags],10
2714
	xor	eax,eax
2715
	ret
2716
.1:
2717
	or	eax,-1
2718
	ret
2719
 
2720
Ctrl_C:
2721
	call	copy_to_buf
2722
	jmp	still
2723
 
2724
shblock_sz	dd	0
2725
 
2726
Ctrl_V:
2727
	bt	[flags],10
2728
	jnc	still
2729
	bt	[flags],8
2730
	jnc	.past_kurs
2731
;вставляем блок в выделенную область
2732
	mov	ebx,[shblock_end]
2733
	sub	ebx,[shblock_beg]
2734
	inc	ebx
2735
	mov	[shblock_sz],ebx
2736
	mov	esi,[copy_buf]
2737
	mov	edi,[file_buffer]
2738
	add	edi,[shblock_beg]
2739
	mov	eax,[copy_len]
2740
.1:
2741
	cld
2742
@@:
2743
	movsb
2744
	dec	eax
2745
	jz	.del
2746
	dec	ebx
2747
	jnz	@b
2748
.add:
2749
	push	esi	edi	eax
2750
	push	[file_size]
2751
	add	[file_size],eax
2752
	call	raspred_mem
2753
	pop	ecx
2754
	mov	edi,[esp+4]
2755
	add	ecx,[file_buffer]
2756
	sub	ecx,edi
2757
	inc	ecx
2758
	mov	edi,[file_size]
2759
	add	edi,[file_buffer]
2760
	mov	esi,edi
2761
	sub	esi,eax
2762
	std
2763
@@:
2764
	movsb
2765
	loop	@b
2766
	pop	eax edi esi
2767
	cld
2768
@@:
2769
	movsb
2770
	dec	eax
2771
	jnz	@b
2772
	mov	eax,[shblock_beg]
2773
	add	eax,[copy_len]
2774
	dec	eax
2775
	mov	[shblock_end],eax
2776
	jmp	red
2777
.del:
2778
	dec	ebx
2779
	jz	red
2780
	mov	ecx,[file_size]
2781
	add	ecx,[file_buffer]
2782
	sub	ecx,edi
2783
	mov	esi,edi
2784
	add	esi,ebx
2785
	cld
2786
@@:	movsb
2787
	loop	@b
2788
	sub	[file_size],ebx
2789
	call	raspred_mem
2790
	mov	eax,[shblock_beg]
2791
	add	eax,[copy_len]
2792
	dec	eax
2793
	mov	[shblock_end],eax
2794
	jmp	red
2795
 
2796
;если блок не выделен, то вставляем блок перед курсором
2797
.past_kurs:
2798
;	bt	[flags],1
2799
;	jnc	still
2800
;	mov	esi,[file_buffer]
2801
;	add	esi,[current_offset]
2802
;	jmp	red
2803
	jmp	still
2804
 
2805
Ctrl_X:
2806
	bt	[flags],1
2807
	jnc	still
2808
	call	copy_to_buf
2809
	test	eax,eax
2810
	jnz	still
2811
 
2812
	mov	ecx,[file_size]
2813
	sub	ecx,[copy_len]
2814
	sub	ecx,[shblock_beg]
2815
	inc	ecx
2816
	mov	ebx,[file_size]
2817
	mov	edi,[shblock_beg]
2818
	mov	esi,[shblock_end]
2819
	inc	esi
2820
	add	esi,[file_buffer]
2821
	add	edi,[file_buffer]
2822
	add	ebx,[file_buffer]
2823
	cld
2824
@@:
2825
	cmp	esi,ebx
2826
	je	.1
2827
	movsb
2828
	loop	@b
2829
.1:
2830
	mov	eax,[file_size]
2831
	sub	eax,[copy_len]
2832
	mov	[file_size],eax
2833
	btr	[flags],8
2834
 
2835
	mov	eax,[shblock_beg]
2836
	mov	esi,[screen_table]
2837
	mov	esi,[esi]
2838
	xor	ebx,ebx
2839
.3:
2840
	add	ebx,esi
2841
	cmp	eax,ebx
2842
	jg	.3
2843
	sub	ebx,esi
2844
;	cmp	ebx,[file_size]
2845
;	jg	Ctrl_G
2846
	mov	[begin_offset],ebx
2847
	sub	eax,ebx
2848
	shl	eax,1
2849
	inc	eax
2850
	mov	[cursor],eax
2851
	jmp	red
2852
 
2853
;---------------------------------------------------------------------
2854
open_dialog:
2855
	mov	[OpenDialog_data.type],0	; Open
1510 mario79 2856
 
2857
	push    dword OpenDialog_data
2858
	call    [OpenDialog_Start]
2859
 
2860
;	cmp	[OpenDialog_data.status],2	; OpenDialog does not start
2861
;	je	.sysxtree	; some kind of alternative, instead OpenDialog
1429 mario79 2862
	cmp	[OpenDialog_data.status],1
2863
	jne	still
2033 mario79 2864
.start:
1429 mario79 2865
	mov	esi,fname_buf
2866
.load:
2867
	mov	edi,file_name
2868
	cld
2869
@@:
2870
	cmp	byte [esi],0
2871
	je	@f
2872
	movsb
2873
	jmp	@b
2874
@@:
2875
	mov	byte [edi],0
2876
	sub	esi,path
2877
	mov	[edit1.size],esi
2878
	mov	[edit1.pos],esi
1510 mario79 2879
	jmp	open_file
1429 mario79 2880
;---------------------------------------------------------------------
2881
 
2882
;	DATA	AREA
2883
 
2884
 
2885
;---------------------------------------------------------
2886
;----------------------- DATA AREA------------------------
2887
;---------------------------------------------------------
1510 mario79 2888
align 4
2889
ProcLib_import:
2890
OpenDialog_Init		dd aOpenDialog_Init
2891
OpenDialog_Start	dd aOpenDialog_Start
2892
;OpenDialog__Version	dd aOpenDialog_Version
2893
        dd      0
2894
        dd      0
2895
aOpenDialog_Init	db 'OpenDialog_init',0
2896
aOpenDialog_Start	db 'OpenDialog_start',0
2897
;aOpenDialog_Version	db 'Version_OpenDialog',0
2898
;---------------------------------------------------------------------
1429 mario79 2899
align	4
1510 mario79 2900
Box_lib_import:
1429 mario79 2901
edit_box_draw		dd aEdit_box_draw
2902
edit_box_key		dd aEdit_box_key
2903
edit_box_mouse		dd aEdit_box_mouse
2904
version_ed		dd aVersion_ed
2905
 
2906
option_box_draw		dd aOption_box_draw
2907
option_box_mouse	dd aOption_box_mouse
2908
version_op		dd aVersion_op
2909
 
2910
scrollbar_ver_draw	dd aScrollbar_ver_draw
2911
scrollbar_ver_mouse	dd aScrollbar_ver_mouse
2912
scrollbar_hor_draw	dd aScrollbar_hor_draw
2913
scrollbar_hor_mouse	dd aScrollbar_hor_mouse
2914
version_scrollbar	dd aVersion_scrollbar
2915
 
2916
menu_bar_draw		dd aMenu_bar_draw
2917
menu_bar_mouse		dd aMenu_bar_mouse
2918
version_menu_bar	dd aVersion_menu_bar
2919
 
2920
	dd 0
2921
	dd 0
2922
 
2923
aEdit_box_draw		db 'edit_box',0
2924
aEdit_box_key		db 'edit_box_key',0
2925
aEdit_box_mouse		db 'edit_box_mouse',0
2926
aVersion_ed		db 'version_ed',0
2927
 
2928
aOption_box_draw	db 'option_box_draw',0
2929
aOption_box_mouse	db 'option_box_mouse',0
2930
aVersion_op		db 'version_op',0
2931
 
2932
aScrollbar_ver_draw	db 'scrollbar_v_draw',0
2933
aScrollbar_ver_mouse	db 'scrollbar_v_mouse',0
2934
aScrollbar_hor_draw	db 'scrollbar_h_draw',0
2935
aScrollbar_hor_mouse	db 'scrollbar_h_mouse',0
2936
aVersion_scrollbar	db 'version_scrollbar',0
2937
 
2938
aMenu_bar_draw		db 'menu_bar_draw',0
2939
aMenu_bar_mouse		db 'menu_bar_mouse',0
2940
aVersion_menu_bar	db 'version_menu_bar',0
2941
;---------------------------------------------------------------------
2942
align	4
2943
scroll_bar_data_vertical:
2944
.x:
2945
.size_x		dw scroll_width_size;+0
2946
.start_x	dw 565	;+2
2947
.y:
2948
.size_y		dw 284	;+4
2949
.start_y	dw 19	;+6
2950
.btn_high	dd scroll_width_size	;+8
2951
.type		dd 1	;+12
2952
.max_area	dd 300+20	;+16
2953
.cur_area	dd 50	;+20
2954
.position	dd 0	;+24
2955
.bckg_col	dd 0xAAAAAA	;+28
2956
.frnt_col	dd 0xCCCCCC	;+32
2957
.line_col	dd 0	;+36
2958
.redraw		dd 0	;+40
2959
.delta		dw 0	;+44
2960
.delta2		dw 0	;+46
2961
.run_x:
2962
.r_size_x	dw 0	;+48
2963
.r_start_x	dw 0	;+50
2964
.run_y:
2965
.r_size_y	dw 0	;+52
2966
.r_start_y	dw 0	;+54
2967
.m_pos		dd 0	;+56
2968
.m_pos_2	dd 0	;+60
2969
.m_keys		dd 0	;+64
2970
.run_size	dd 0	;+68
2971
.position2	dd 0	;+72
2972
.work_size	dd 0	;+76
2973
.all_redraw	dd 0	;+80
2974
.ar_offset	dd 10	;+84
2975
;---------------------------------------------------------------------
2976
align	4
2977
scroll_bar_data_horizontal:
2978
.x:
2979
.size_x		dw 300	;0	;+0
2980
.start_x	dw 0	;0	;+2
2981
.y:
2982
.size_y		dw scroll_width_size	;0	;+4
2983
.start_y	dw 300	;0	;+6
2984
.btn_high	dd scroll_width_size	;+8
2985
.type		dd 1	;+12
2986
.max_area	dd 300	;+16
2987
.cur_area	dd 30	;+20
2988
.position	dd 1	;+24
2989
.bckg_col	dd 0xAAAAAA	;+28
2990
.frnt_col	dd 0xCCCCCC	;+32
2991
.line_col	dd 0	;+36
2992
.redraw		dd 0	;+40
2993
.delta		dw 0	;+44
2994
.delta2		dw 0	;+46
2995
.run_x:
2996
.r_size_x	dw 0	;+48
2997
.r_start_x	dw 0	;+50
2998
.run_y:
2999
.r_size_y	dw 0	;+52
3000
.r_start_y	dw 0	;+54
3001
.m_pos		dd 0	;+56
3002
.m_pos_2	dd 0	;+60
3003
.m_keys		dd 0	;+64
3004
.run_size	dd 0	;+68
3005
.position2	dd 0	;+72
3006
.work_size	dd 0	;+76
3007
.all_redraw	dd 0	;+80
3008
.ar_offset	dd 10	;+84
3009
;---------------------------------------------------------------------
3010
align	4
3011
menu_data_1:
3012
.type:		dd 0	;+0
3013
.x:
1650 Nasarus 3014
.size_x	dw 40	;+4
1429 mario79 3015
.start_x	dw 2	;+6
3016
.y:
3017
.size_y		dw 15	;+8
3018
.start_y	dw 2	;+10
3019
.text_pointer:	dd menu_text_area	;0	;+12
3020
.pos_pointer:	dd menu_text_area.1	;0	;+16
3021
.text_end	dd menu_text_area.end	;0	;+20
3022
.mouse_pos	dd 0	;+24
3023
.mouse_keys	dd 0	;+28
3024
.x1:
1650 Nasarus 3025
if lang eq ru
3026
 .size_x1	dw 4*2+9*6	;+32
3027
else
3028
 .size_x1	dw 40	;+32
3029
end if
1429 mario79 3030
.start_x1	dw 2	;+34
3031
.y1:
3032
.size_y1	dw 100	;+36
3033
.start_y1	dw 18	;+38
3034
.bckg_col	dd 0xeeeeee	;+40
3035
.frnt_col	dd 0xff	;+44
3036
.menu_col	dd 0xffffff	;+48
3037
.select		dd 0	;+52
3038
.out_select	dd 0	;+56
3039
.buf_adress	dd 0	;+60
3040
.procinfo	dd 0	;+64
3041
.click		dd 0	;+68
3042
.cursor		dd 0	;+72
3043
.cursor_old	dd 0	;+76
3044
.interval	dd 16	;+80
3045
.cursor_max	dd 0	;+84
3046
.extended_key	dd 0	;+88
3047
.menu_sel_col	dd 0x00cc00	;+92
3048
.bckg_text_col	dd 0	;+96
3049
.frnt_text_col	dd 0xffffff	;+100
3050
.mouse_keys_old	dd 0	;+104
3051
.font_height	dd 8	;+108
3052
.cursor_out	dd 0	;+112
3053
.get_mouse_flag	dd 0	;+116
3054
 
3055
menu_text_area:
1650 Nasarus 3056
if lang eq ru
3057
  	 db 'Файл',0
3058
 .1:
3059
	 db 'Открыть',0
3060
	 db 'Сохранить',0
3061
	 db 'Выход',0
3062
else
3063
  	 db 'File',0
3064
 .1:
3065
	 db 'Open',0
3066
	 db 'Save',0
3067
	 db 'Exit',0
3068
end if
1429 mario79 3069
.end:
1650 Nasarus 3070
	 db 0
3071
 
1429 mario79 3072
;---------------------------------------------------------------------
3073
align	4
3074
menu_data_2:
3075
.type:		dd 0	;+0
3076
.x:
1650 Nasarus 3077
.size_x	dw 40	;+4
1429 mario79 3078
.start_x	dw 43	;+6
3079
.y:
3080
.size_y		dw 15	;+8
3081
.start_y	dw 2	;+10
3082
.text_pointer:	dd menu_text_area_2	;0	;+12
3083
.pos_pointer:	dd menu_text_area_2.1	;0	;+16
3084
.text_end	dd menu_text_area_2.end	;0	;+20
3085
.mouse_pos	dd 0	;+24
3086
.mouse_keys	dd 0	;+28
3087
.x1:
1650 Nasarus 3088
.size_x1	dw 4*2+5*6	;+32
1429 mario79 3089
.start_x1	dw 43	;+34
3090
.y1:
3091
.size_y1	dw 100	;+36
3092
.start_y1	dw 18	;+38
3093
.bckg_col	dd 0xeeeeee	;+40
3094
.frnt_col	dd 0xff	;+44
3095
.menu_col	dd 0xffffff	;+48
3096
.select		dd 0	;+52
3097
.out_select	dd 0	;+56
3098
.buf_adress	dd 0	;+60
3099
.procinfo	dd 0	;+64
3100
.click		dd 0	;+68
3101
.cursor		dd 0	;+72
3102
.cursor_old	dd 0	;+76
3103
.interval	dd 16	;+80
3104
.cursor_max	dd 0	;+84
3105
.extended_key	dd 0	;+88
3106
.menu_sel_col	dd 0x00cc00	;+92
3107
.bckg_text_col	dd 0	;	+96
3108
.frnt_text_col	dd 0xffffff	;+100
3109
.mouse_keys_old	dd 0	;+104
3110
.font_height	dd 8	;+108
3111
.cursor_out	dd 0	;+112
3112
.get_mouse_flag	dd 0	;+116
3113
 
3114
menu_text_area_2:
1650 Nasarus 3115
if lang eq ru
3116
	 db 'Вид',0
3117
 .1:
3118
else
3119
	 db 'View',0
3120
 .1:
3121
end if
3122
	 db 'Add 4',0
3123
	 db 'Add 8',0
3124
	 db 'Sub 4',0
3125
	 db 'Sub 8',0
1429 mario79 3126
.end:
1650 Nasarus 3127
	 db 0
3128
 
1429 mario79 3129
;---------------------------------------------------------------------
3130
align	4
3131
menu_data_3:
3132
.type:		dd 0	;+0
3133
.x:
1650 Nasarus 3134
if lang eq ru
3135
 .size_x	dw 4*2+7*6	;+32
3136
else
3137
 .size_x	dw 40	;+4
3138
end if
1429 mario79 3139
.start_x	dw 84	;+6
3140
.y:
3141
.size_y		dw 15	;+8
3142
.start_y	dw 2	;+10
3143
.text_pointer:	dd menu_text_area_3	;0	;+12
3144
.pos_pointer:	dd menu_text_area_3.1	;0	;+16
3145
.text_end	dd menu_text_area_3.end	;0	;+20
3146
.mouse_pos	dd 0	;+24
3147
.mouse_keys	dd 0	;+28
3148
.x1:
1650 Nasarus 3149
if lang eq ru
3150
 .size_x1	dw 4*2+7*6	;+32
3151
else
3152
 .size_x1	dw 40	;+32
3153
end if
1429 mario79 3154
.start_x1	dw 84	;+34
3155
.y1:
3156
.size_y1	dw 100	;+36
3157
.start_y1	dw 18	;+38
3158
.bckg_col	dd 0xeeeeee	;+40
3159
.frnt_col	dd 0xff	;+44
3160
.menu_col	dd 0xffffff	;+48
3161
.select		dd 0	;+52
3162
.out_select	dd 0	;+56
3163
.buf_adress	dd 0	;+60
3164
.procinfo	dd 0	;+64
3165
.click		dd 0	;+68
3166
.cursor		dd 0	;+72
3167
.cursor_old	dd 0	;+76
3168
.interval	dd 16	;+80
3169
.cursor_max	dd 0	;+84
3170
.extended_key	dd 0	;+88
3171
.menu_sel_col	dd 0x00cc00	;+92
3172
.bckg_text_col	dd 0	;	+96
3173
.frnt_text_col	dd 0xffffff	;+100
3174
.mouse_keys_old	dd 0	;+104
3175
.font_height	dd 8	;+108
3176
.cursor_out	dd 0	;+112
3177
.get_mouse_flag	dd 0	;+116
3178
 
3179
menu_text_area_3:
1650 Nasarus 3180
if lang eq ru
3181
	db 'Справка',0
3182
 .1:
3183
	db 'Справка',0
3184
else
1429 mario79 3185
	db 'Help',0
1650 Nasarus 3186
 .1:
1429 mario79 3187
	db 'Help',0
1650 Nasarus 3188
end if
1429 mario79 3189
.end:
3190
	db 0
3191
;---------------------------------------------------------------------
3192
edit1	edit_box 200,190,27,0xffffff,0x6a9480,0,0xAABBCC,0,134,cur_dir_path,ed_focus,ed_focus,6,6	;файл	открыть\сохранить
1650 Nasarus 3193
edit2	edit_box 55,270,29,0xeeeeee,0x6a9480,0,0xAABBCC,4,8,go_to_string,ed_focus,ed_focus,0,0	;перехожд	на	смещение
3194
edit3	edit_box 55,270,29,0xeeeeee,0x6a9480,0,0xAABBCC,4,8,find_string,ed_focus,ed_focus,0,0	;поиск
1429 mario79 3195
edit4	edit_box 55,220,49,0xeeeeee,0x6a9480,0,0xAABBCC,4,8,sel1_string,ed_focus,ed_focus,0,0	;выделить	блок	нач.смещ.
3196
edit5	edit_box 55,300,49,0xeeeeee,0x6a9480,0,0xAABBCC,4,8,sel2_string,ed_focus,0,0,0	;выделить	блок	кон.смещ.
3197
 
3198
op1	option_box option_group1,210,50,6,12,0xffffff,0,0,op_text.1,op_text.e1-op_text.1,1
3199
op2	option_box option_group1,310,50,6,12,0xFFFFFF,0,0,op_text.2,op_text.e2-op_text.2
1650 Nasarus 3200
op3	option_box option_group1,310,65,6,12,0xffffff,0,0,op_text.3,op_text.e3-op_text.3
1429 mario79 3201
op11	option_box option_group2,210,50,6,12,0xffffff,0,0,op_text2.11,op_text2.e11-op_text2.11
3202
op12	option_box option_group2,310,50,6,12,0xffffff,0,0,op_text2.21,op_text2.e21-op_text2.21
3203
 
3204
option_group1	dd op1	;указатели, они отображаются по умолчанию, когда выводится
3205
option_group2	dd op11	;приложение
3206
Option_boxs	dd op1,op2,op3,0
3207
Option_boxs2	dd op11,op12,0
3208
 
3209
op_text:	; Сопровождающий текст для чек боксов
1650 Nasarus 3210
if lang eq ru
3211
 .1	db 'Абсолютное'
3212
 .e1:
3213
 .2	db 'Вперед'
3214
 .e2:
3215
 .3	db 'Назад'
3216
 .e3:
3217
else
3218
 .1	db 'Absolutely'
3219
 .e1:
3220
 .2	db 'Forward'
3221
 .e2:
3222
 .3	db 'Back'
3223
 .e3:
3224
end if
1429 mario79 3225
 
3226
op_text2:
3227
.11	db 'Hex'
3228
.e11:
3229
.21	db 'ASCII'
3230
.e21:
3231
 
3232
 
1510 mario79 3233
system_dir_Boxlib			db '/sys/lib/box_lib.obj',0
3234
system_dir_ProcLib			db '/sys/lib/proc_lib.obj',0
1429 mario79 3235
 
1650 Nasarus 3236
sel_text	db "From to",0
3237
 
3238
help_but_text	= menu_text_area_3 ;db	'Help',0
3239
 
1429 mario79 3240
head_f_i:
1650 Nasarus 3241
if lang eq ru
3242
 head_f_l	db 'ошибка',0
3243
 err_message_found_lib1		db 'box_lib.obj - Не найден!',0
3244
 err_message_found_lib2		db 'proc_lib.obj - Не найден!',0
1429 mario79 3245
 
1650 Nasarus 3246
 err_message_import1			db 'box_lib.obj - Ошибка импорта!',0
3247
 err_message_import2			db 'proc_lib.obj - Ошибка импорта!',0
1510 mario79 3248
 
1650 Nasarus 3249
 error_open_file_string	db "Файл не найден!",0
3250
 error_save_file_string	db "Файл не сохранен!",0
3251
else
3252
 head_f_l	db 'error',0
3253
 err_message_found_lib1		db 'box_lib.obj - Not found!',0
3254
 err_message_found_lib2		db 'proc_lib.obj - Not found!',0
1429 mario79 3255
 
1650 Nasarus 3256
 err_message_import1			db 'box_lib.obj - Wrong import!',0
3257
 err_message_import2			db 'proc_lib.obj - Wrong import!',0
3258
 
3259
 error_open_file_string	db "Isn't found!",0
3260
 error_save_file_string	db "Isn't saved!",0
3261
end if
1429 mario79 3262
string_cp866	db ' cp866'
3263
string_cp1251	db 'cp1251'
3264
string_koi8r	db 'koi8-r'
3265
string_ins	db 'Ins'
3266
 
3267
 
3268
align	4
3269
number_strings	dd 16	;количество строк на листе
3270
;bytes_per_line	dd 16	;кол-во столбцов
3271
 
3272
group_bytes	dd 8
3273
bytes_per_line	dd 16
3274
 
3275
 
3276
 
3277
;blocks_counter	dd 1
3278
;blocks_table	dd 0
3279
cursor	dd 1
3280
 
3281
flags	dw 001000010b
3282
;бит	0: в edit_box - восприятие/(не)	всех вводимых символов
3283
;1:	0/1 - режим замены/вставки
3284
;2:	в edit_box - обработка Ctrl_G
3285
;3:	в edit_box - обработка Ctrl_F
3286
;4:	в change_codepage - если поднят, то восстановить предыдущую кодировку
3287
;5:	vertical_scroll_bar move
3288
;6:	полная	перерисовка окна
3289
;7:	horizontal_scroll_bar move
3290
;8:	1 - выделен блок
3291
;9:	в edit_box - обработка Ctrl_B
3292
;10:	в памяти "висит" скопированный блок
3293
 
31 halyavin 3294
help_text:
131 diamond 3295
if lang eq ru
1429 mario79 3296
 db 'Ctrl+O              - открыть файл                 '
3297
 db 'Ctrl+S              - сохранить                    '
3298
 db 'PageUp, PageDown    - страница вверх/вниз          '
3299
 db 'Ctrl+UP, Ctrl+Down  - прокрутка страницы на стро-  '
3300
 db '                 ку вверх/вниз без смещения курсора'
3301
 db 'Home,End            - в начало/конец строки        '
3302
 db 'Ctrl+Home, Ctrl+End - в начало/конец файла         '
3303
 db 'Left, Right, UP, DN - курсор влево/вправо/выше/ниже'
3304
 db 'n                   - инвертировать байт           '
3305
 db 'Ins                 - режим замены/вставки         '
3306
 db '  Del               - удалить байт под курсором    '
3307
 db '  BackSpace         - удалить байт перед курсором  '
3308
 db '~                   - смена кодировок cp866,cp1251 '
3309
 db 'Shift+~             - cp866/cp1251,koi8r           '
3310
 db 'Ctrl+F              - поиск                        '
3311
 db 'Ctrl+G              - переход на смещение          '
3312
 db 'Ctrl+B              - выделить блок                '
3313
 db 'ESC                 - снять выделение              '
3314
 db 'Ctrl+C              - копировать блок              '
3315
 db 'Ctrl+V              - вставить в выделенную область'
3316
 db 'Ctrl+X              - вырезать в буфер             '
131 diamond 3317
else
1429 mario79 3318
 db 'Ctrl+O              - open file                    '
3319
 db 'Ctrl+S              - save file                    '
3320
 db 'PageUp, PageDown    - page up/down                 '
3321
 db 'Ctrl+UP, Ctrl+Down  - scroll page by one string    '
3322
 db '                    up/down without cursor movement'
3323
 db 'Home,End            - at the start/end of string   '
3324
 db 'Ctrl+Home, Ctrl+End - at the start/end of file     '
3325
 db 'Left, Right, Up, Dn - move cursor to the lft/rght..'
3326
 db 'n                   - invert byte                  '
3327
 db 'Ins                 - replace/past mode            '
3328
 db '  Del               - delete byte under cursor     '
3329
 db '  BackSpace         - delete byte before cursor    '
3330
 db '~                   - change codepages cp866,cp1251'
3331
 db 'Shift+~             - cp866/cp1251,koi8r           '
3332
 db 'Ctrl+F              - find                         '
3333
 db 'Ctrl+G              - go to offset                 '
3334
 db 'Ctrl+B              - select area                  '
3335
 db 'ESC                 - deselect area                '
3336
 db 'Ctrl+C              - copy area                    '
3337
 db 'Ctrl+V              - past into area from buf      '
3338
 db 'Ctrl+X              - cut area into buffer         '
131 diamond 3339
end if
31 halyavin 3340
help_end:
3341
 
1429 mario79 3342
 
3343
 
3344
 
3345
;align	4096
3346
font_buffer	file 'cp866-8x16'	;ASCII+cp866	(+Ё,ё)
3347
cp1251		file 'cp1251-8x16'
1650 Nasarus 3348
koi8_r		file 'koi8-r-8x16'
1429 mario79 3349
 
3350
title	db	_title
3351
;---------------------------------------------------------------------
1510 mario79 3352
l_libs_start:
3353
;	load_library	boxlib_name,cur_dir_path,buf_cmd_lin,system_path,\
3354
;	err_message_found_lib,head_f_l,myimport,err_message_import,head_f_i
3355
 
3356
library01  l_libs system_dir_Boxlib+9, cur_dir_path, buf_cmd_lin, system_dir_Boxlib, \
3357
err_message_found_lib1, head_f_l, Box_lib_import, err_message_import1, head_f_i
3358
 
3359
library02  l_libs system_dir_ProcLib+9, cur_dir_path, buf_cmd_lin, system_dir_ProcLib, \
3360
err_message_found_lib2, head_f_l, ProcLib_import, err_message_import2, head_f_i
3361
 
3362
end_l_libs:
3363
;---------------------------------------------------------------------
1429 mario79 3364
OpenDialog_data:
3365
.type			dd 0
3366
.procinfo		dd procinfo	;+4
3367
.com_area_name		dd communication_area_name	;+8
3368
.com_area		dd 0	;+12
3369
.opendir_pach		dd temp_dir_pach	;+16
3370
.dir_default_pach	dd communication_area_default_pach	;+20
3371
.start_path		dd open_dialog_path	;+24
3372
.draw_window		dd draw_window_1	;+28
3373
.status			dd 0	;+32
3374
.openfile_pach 		dd fname_buf	;+36
1439 mario79 3375
.filename_area		dd filename_area	;+40
3376
.filter_area		dd Filter
1581 mario79 3377
.x:
3378
.x_size			dw 420 ;+48 ; Window X size
3379
.x_start		dw 10 ;+50 ; Window X position
3380
.y:
3381
.y_size			dw 320 ;+52 ; Window y size
3382
.y_start		dw 10 ;+54 ; Window Y position
1429 mario79 3383
 
3384
communication_area_name:
3385
	db 'FFFFFFFF_open_dialog',0
3386
open_dialog_path:
1702 Lrz 3387
if __nightbuild eq yes
3388
	db '/sys/MANAGERS/opendial',0
3389
else
1429 mario79 3390
	db '/sys/File Managers/opendial',0
1702 Lrz 3391
end if
1429 mario79 3392
communication_area_default_pach:
3393
	db '/rd/1',0
3394
 
3395
Filter:
1439 mario79 3396
dd	Filter.end - Filter.1
3397
.1:
3398
;db	'BIN',0
3399
;db	'DAT',0
1429 mario79 3400
.end:
3401
db	0
1439 mario79 3402
 
3403
start_temp_file_name:	db 'temp.bin',0
1586 mario79 3404
 
1429 mario79 3405
;---------------------------------------------------------------------
3406
 
31 halyavin 3407
I_END:
1429 mario79 3408
file_name:
3409
cur_dir_path	rb 4096
3410
buf_cmd_lin	rb 0
3411
procinfo:	;opendialog
3412
threath_buf	rb 0x400
3413
path:
3414
		rb 1024+16	;opendialog
31 halyavin 3415
 
1429 mario79 3416
screen_table	rd 1
3417
begin_offset	rd 1
3418
file_buffer	rd 1
31 halyavin 3419
 
1429 mario79 3420
copy_buf	rd 1
3421
copy_len	rd 1
3422
 
3423
current_offset	rd 1
3424
;	rd	1 ;под старший dword
3425
codepage_offset	rd 1
3426
codepage_offset_previous	rd 1
3427
low_area	rd 1	;координаты нижней строки
3428
right_table_xy	rd 1
3429
 
3430
prev_f_size_bl	rd 1
3431
 
3432
len_str_scr	rd 1
3433
beg_str_scr	rd 1
3434
 
3435
shblock_beg	rd 1	;смещение начала блока
3436
shblock_end	rd 1	;смещение конца блока
3437
 
3438
;mouse_flag	rd 1
3439
file_size	rd 1
3440
;	rd	1 ;под старший dword
3441
 
1753 mario79 3442
active_process	rd 1
3443
 
1429 mario79 3444
ed_box_data:	rd 8	;первый dword -кол-во элементов для обработки, далее указатели на editX;
3445
 
3446
bufferfinfo	rb 40
3447
hex8_string	rb 9	;буфер для hex_output
3448
go_to_string	rb 9
3449
find_string	rb 17
3450
sel1_string	rb 9
3451
sel2_string	rb 9
3452
cur_help_string	rb 1	;номер строки, с которой выводится текст в help - окне
3453
 
1650 Nasarus 3454
help_is_open_already	db ?  ;если окно справки открыто, то здесь 1
3455
help_window_pid 	dd ?
3456
 
1429 mario79 3457
func_70	f70
3458
;---------------------------------------------------------------------
2033 mario79 3459
title_buf:
3460
	rb 4096
3461
;---------------------------------------------------------------------
1429 mario79 3462
fname_buf:
3463
	rb 4096
1439 mario79 3464
;---------------------------------------------------------------------
1429 mario79 3465
temp_dir_pach:
3466
	rb 4096
3467
;---------------------------------------------------------------------
1439 mario79 3468
filename_area:
3469
	rb 256
3470
;---------------------------------------------------------------------
1429 mario79 3471
D_END: