Subversion Repositories Kolibri OS

Rev

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

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