Subversion Repositories Kolibri OS

Rev

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

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