Subversion Repositories Kolibri OS

Rev

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