Subversion Repositories Kolibri OS

Rev

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