Subversion Repositories Kolibri OS

Rev

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