Subversion Repositories Kolibri OS

Rev

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