Subversion Repositories Kolibri OS

Rev

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