Subversion Repositories Kolibri OS

Rev

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

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