Subversion Repositories Kolibri OS

Rev

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

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