Subversion Repositories Kolibri OS

Rev

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

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