Subversion Repositories Kolibri OS

Rev

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