Subversion Repositories Kolibri OS

Rev

Rev 8255 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4308 IgorA 1
;Огромная благодарность всем, кто помогал: кодом/советом/дизайном ...
1338 IgorA 2
 
3
use32
6906 IgorA 4
  org 0
1449 IgorA 5
  db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт
6256 IgorA 6
  dd 1, start, i_end, mem, stacktop, file_name, sys_path
1338 IgorA 7
 
8
MAX_COLOR_WORD_LEN equ 40
6256 IgorA 9
maxChars equ 100002 ;(колличество символов в новом документе + 2)
2817 IgorA 10
BUF_SIZE equ 4096 ;buffer for copy|paste
1457 IgorA 11
maxSyntaxFileSize equ 410000
7573 IgorA 12
TOOLBAR_ICONS_SIZE equ 1200*21
1338 IgorA 13
 
1449 IgorA 14
include '../../proc32.inc'
1338 IgorA 15
include '../../macros.inc'
6086 IgorA 16
include '../../KOSfuncs.inc'
6239 IgorA 17
include '../../load_img.inc'
8255 IgorA 18
include '../../load_lib.mac'
1449 IgorA 19
include '../../develop/libraries/box_lib/trunk/box_lib.mac'
6169 leency 20
include '../../system/skincfg/trunk/kglobals.inc'
21
include '../../system/skincfg/trunk/unpacker.inc'
1343 IgorA 22
include 'lang.inc'
1467 IgorA 23
 
1338 IgorA 24
include 't_data.inc'
7573 IgorA 25
include 't_button.inc'
5671 leency 26
include 't_menu.inc'
1338 IgorA 27
include 'strlen.inc'
28
include 't_draw.inc' ;draw main window functions
3244 IgorA 29
include 'wnd_k_words.inc'
1338 IgorA 30
 
8255 IgorA 31
@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
1338 IgorA 32
 
6256 IgorA 33
align 4
2632 IgorA 34
icon_tl_sys dd 0 ;указатель на память для хранения системных иконок
6256 IgorA 35
run_file_70 FileInfoBlock
2632 IgorA 36
 
1456 IgorA 37
align 4
1338 IgorA 38
start:
6162 leency 39
	mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors
1338 IgorA 40
 
6086 IgorA 41
	mcall SF_SYS_MISC,SSF_HEAP_INIT
4308 IgorA 42
	or eax,eax
7575 IgorA 43
	jnz @f
44
		call ted_Exit
45
	@@:
1338 IgorA 46
 
6086 IgorA 47
	mcall SF_KEYBOARD,SSF_SET_INPUT_MODE,1 ;scan code
48
	mcall SF_SET_EVENTS_MASK,0xC0000027
1338 IgorA 49
 
4308 IgorA 50
	mov esi,file_name
7577 IgorA 51
	stdcall str_len,esi
4308 IgorA 52
	mov ecx,eax
53
	mov edi,openfile_path
54
	cld
55
	rep movsb ;копируем имя файла в буфер openfile_path
1338 IgorA 56
 
1456 IgorA 57
load_libraries l_libs_start,load_lib_end
1338 IgorA 58
 
2102 IgorA 59
;проверка на сколько удачно загузились библиотеки
4308 IgorA 60
mov	ebp,lib0
61
.test_lib_open:
1456 IgorA 62
	cmp	dword [ebp+ll_struc_size-4],0
63
	jz	@f
6086 IgorA 64
	mcall SF_TERMINATE_PROCESS ;exit not correct
1456 IgorA 65
@@:
4308 IgorA 66
	add ebp,ll_struc_size
67
	cmp ebp,load_lib_end
68
	jl .test_lib_open
1338 IgorA 69
 
1456 IgorA 70
;---------------------------------------------------------------------
1592 IgorA 71
	stdcall [ted_init], tedit0
7488 IgorA 72
	stdcall [tl_data_init], tree1
7576 IgorA 73
	option_boxes_set_sys_color sc,opt_grlist1
7583 IgorA 74
	init_checkboxes2 check_boxes,check_boxes_end
75
	check_boxes_set_sys_color2 check_boxes,check_boxes_end,sc
1338 IgorA 76
 
1467 IgorA 77
; OpenDialog initialisation
1592 IgorA 78
	stdcall [OpenDialog_Init],OpenDialog_data
1467 IgorA 79
 
7573 IgorA 80
; kmenu initialisation
81
	call tedit_menu_init
5649 leency 82
 
2632 IgorA 83
; init toolbar file
6906 IgorA 84
	include_image_file 'te_icon.png', bmp_icon,,,6 ;6 для серых кнопок
4128 IgorA 85
	mov eax,[bmp_icon]
86
	add eax,TOOLBAR_ICONS_SIZE
87
	stdcall img_to_gray, [bmp_icon],eax,(TOOLBAR_ICONS_SIZE)/3
1338 IgorA 88
;---------------------------------------------------------------------
6906 IgorA 89
; внедряем файл с курсорами и линиями
90
	include_image_file '..\..\media\log_el\trunk\tl_sys_16.png', icon_tl_sys
2632 IgorA 91
	mov eax,dword[icon_tl_sys]
92
	mov dword[tree1.data_img_sys],eax
6906 IgorA 93
; внедряем файл с иконками узлов
94
	include_image_file 'tl_nod_16.png', icon_tl_sys
2632 IgorA 95
	mov eax,dword[icon_tl_sys]
96
	mov dword[tree1.data_img],eax
1338 IgorA 97
;------------------------------------------------------------------------------
5911 IgorA 98
	copy_path fn_syntax_dir,sys_path,file_name,0 ;берем путь к папке с файлами синтаксиса
8852 IgorA 99
	xor eax,eax
100
	mov ecx,4096
101
	mov edi,file_name
102
	repnz scasb
103
	mov byte[edi-2],al ;убираем '/' в конце имени папки (нужно для чтения с CD)
6086 IgorA 104
	mcall SF_FILE,tree_file_struct
1338 IgorA 105
 
8852 IgorA 106
	or ebx,ebx
107
	jz .end_dir_init
7577 IgorA 108
		mov eax,dir_mem+32+40
5911 IgorA 109
		mov ecx,ebx
110
		@@:
111
			cmp byte[eax],'.' ;фильтруем файлы с именами '.' и '..'
112
			je .filter
113
			;0x10000 ;1*2^16 - где 1 номер иконки с книгой
7488 IgorA 114
			stdcall [tl_node_add], tree1,0x10000,eax
115
			stdcall [tl_cur_next], tree1
5911 IgorA 116
			.filter:
117
			add eax,304
118
			loop @b
7488 IgorA 119
		stdcall [tl_cur_beg],tree1 ;ставим курсор на начало списка
7508 IgorA 120
		or dword[tree1.style], tl_cursor_pos_limited ;ограничиваем движение курсора в пределах списка
5911 IgorA 121
	.end_dir_init:
1338 IgorA 122
 
2817 IgorA 123
;--- load ini file ---
2855 IgorA 124
	copy_path ini_name,sys_path,file_name,0
2817 IgorA 125
	;window startup pozition
7488 IgorA 126
	stdcall [ini_get_int],file_name,ini_sec_window,key_window_l,ini_def_window_l
2817 IgorA 127
	mov word[wnd_s_pos+2],ax
7488 IgorA 128
	stdcall [ini_get_int],file_name,ini_sec_window,key_window_w,ini_def_window_w
2817 IgorA 129
	mov word[wnd_s_pos],ax
7488 IgorA 130
	stdcall [ini_get_int],file_name,ini_sec_window,key_window_t,ini_def_window_t
2817 IgorA 131
	mov word[wnd_s_pos+6],ax
7488 IgorA 132
	stdcall [ini_get_int],file_name,ini_sec_window,key_window_h,ini_def_window_h
2817 IgorA 133
	mov word[wnd_s_pos+4],ax
134
	;scrool type
7488 IgorA 135
	stdcall [ini_get_int],file_name,ini_sec_window,key_scroll_type,ini_def_scroll_type
2817 IgorA 136
	mov [wScr.type],eax
137
	mov [hScr.type],eax
138
	mov [ws_dir_lbox.type],eax
3244 IgorA 139
    mov [w_scr_t3.type],eax
2817 IgorA 140
	;symbol size
7488 IgorA 141
	stdcall [ini_get_int],file_name,ini_sec_window,key_symbol_w,ini_def_symbol_w
2817 IgorA 142
	mov dword[tedit0.rec.width],eax
7488 IgorA 143
	stdcall [ini_get_int],file_name,ini_sec_window,key_symbol_h,ini_def_symbol_h
2817 IgorA 144
	mov dword[tedit0.rec.height],eax
6256 IgorA 145
	;lea eax,[eax+eax*2]
146
	;mov dword[tedit0.rec.top],eax
147
	;font size
7488 IgorA 148
	stdcall [ini_get_int],file_name,ini_sec_window,key_font_s,ini_def_font_s
6256 IgorA 149
	shl eax,24
150
	mov dword[tedit0.font_size],eax
7488 IgorA 151
	;кнопки на панели
8255 IgorA 152
	ini_panel key_but_new,	  ID_BUT_NEW
7573 IgorA 153
	ini_panel key_but_open,   ID_BUT_OPEN
154
	ini_panel key_but_save,   ID_BUT_SAVE
155
	ini_panel key_but_save_as,ID_BUT_SAVE_AS
156
	ini_panel key_but_select, ID_BUT_SELECT
8255 IgorA 157
	ini_panel key_but_cut,	  ID_BUT_CUT
7573 IgorA 158
	ini_panel key_but_copy,   ID_BUT_COPY
159
	ini_panel key_but_paste,  ID_BUT_PASTE
160
	ini_panel key_but_find,   ID_BUT_FIND
161
	ini_panel key_but_replace,ID_BUT_REPLACE
162
	ini_panel key_but_key_words,ID_BUT_KEY_WORDS
163
	ini_panel key_but_upper,  ID_BUT_UPPER
164
	ini_panel key_but_lower,  ID_BUT_LOWER
165
	ini_panel key_but_reverse,ID_BUT_REVERSE
166
	ini_panel key_but_undo,   ID_BUT_UNDO
167
	ini_panel key_but_redo,   ID_BUT_REDO
168
	ini_panel key_but_invisible,ID_BUT_INVISIBLE
169
	ini_panel key_but_syntax_list,ID_BUT_SYNTAX_LIST
170
	ini_panel key_but_syntax_mode,ID_BUT_SYNTAX_MODE
171
	ini_panel key_but_convert_1251_866,ID_BUT_CONVERT_1251_866
172
	ini_panel key_but_convert_866_1251,ID_BUT_CONVERT_866_1251
2855 IgorA 173
	;файловые расширения
174
	xor edx,edx
175
	mov ebx,synt_auto_open
176
	@@:
177
		;берем имя файла
7488 IgorA 178
		stdcall [ini_get_str],file_name,ini_sec_options,key_synt_file,ebx,32,ini_def_synt_f
2855 IgorA 179
		cmp byte[ebx],0
180
		je @f
181
		inc byte[key_synt_file.numb]
182
		add ebx,32
183
		;берем расширения
7488 IgorA 184
		stdcall [ini_get_str],file_name,ini_sec_options,key_synt_ext,ebx,32,ini_def_synt_f
2855 IgorA 185
		inc byte[key_synt_ext.numb]
186
		add ebx,32
187
		inc edx
188
		cmp edx,max_synt_auto_open
189
		jl @b
190
	@@:
2817 IgorA 191
 
1338 IgorA 192
;--- load color option file ---
6086 IgorA 193
	stdcall open_unpac_synt_file,[fn_col_option]
1338 IgorA 194
 
195
;--- get cmd line ---
2708 IgorA 196
	cmp byte[openfile_path+3],0 ;openfile_path
197
	je @f ;if file names exist
198
		mov esi,openfile_path
6086 IgorA 199
		stdcall auto_open_syntax,esi
2708 IgorA 200
		call but_no_msg_OpenFile
201
	@@:
1338 IgorA 202
 
2817 IgorA 203
 
204
 
6239 IgorA 205
align 16
1338 IgorA 206
red_win:
5911 IgorA 207
	call draw_window
1467 IgorA 208
 
6239 IgorA 209
align 16
1467 IgorA 210
still:
6086 IgorA 211
	mcall SF_WAIT_EVENT
4991 IgorA 212
	cmp dword[exit_code],1
7575 IgorA 213
	jne @f
214
		call ted_Exit
215
		jmp still
216
	@@:
1467 IgorA 217
 
2125 IgorA 218
	cmp al,1 ;изменилось положение окна
219
	jz red_win
220
	cmp al,2
221
	jz key
222
	cmp al,3
223
	jz button
224
	cmp al,6 ;мышь
225
	jne @f
7575 IgorA 226
		call mouse
2125 IgorA 227
	@@:
228
	jmp still
1467 IgorA 229
 
6239 IgorA 230
align 16
1338 IgorA 231
mouse:
5649 leency 232
	stdcall [kmainmenu_dispatch_cursorevent], [main_menu]
1338 IgorA 233
 
6239 IgorA 234
	mcall SF_MOUSE_GET,SSF_WINDOW_POSITION
235
	cmp word[tedit0.wnd.top],ax
236
	jg .no_edit
237
	shr eax,16
238
	cmp word[tedit0.wnd.left],ax
239
	jg .no_edit
240
	mcall SF_MOUSE_GET,SSF_BUTTON_EXT
241
	bt eax,24 ;двойной щелчёк левой кнопкой
242
	jnc @f
243
		stdcall [ted_but_select_word], tedit0
7575 IgorA 244
		ret
6239 IgorA 245
	@@:
246
		stdcall [ted_mouse], tedit0
247
	.no_edit:
248
 
7576 IgorA 249
	;проверка боковых панелей
250
	cmp byte[tedit0.panel_id],TED_PANEL_FIND
2125 IgorA 251
	jne @f
7579 IgorA 252
		stdcall [edit_box_mouse], edit_find
7576 IgorA 253
		stdcall [option_box_mouse], opt_grlist1
7583 IgorA 254
		stdcall [check_box_mouse], ch1
2125 IgorA 255
	@@:
7576 IgorA 256
	cmp byte[tedit0.panel_id],TED_PANEL_REPLACE
6239 IgorA 257
	jne @f
7579 IgorA 258
		stdcall [edit_box_mouse], edit_find
259
		stdcall [edit_box_mouse], edit_replace
7576 IgorA 260
		stdcall [option_box_mouse], opt_grlist1
261
	@@:
262
	cmp byte[tedit0.panel_id],TED_PANEL_SYNTAX
263
	jne @f
6239 IgorA 264
		stdcall [tl_mouse], tree1
265
	@@:
7579 IgorA 266
	cmp byte[tedit0.panel_id],TED_PANEL_GOTO
267
	jne @f
268
		stdcall [edit_box_mouse], edit_goto
269
	@@:
7575 IgorA 270
	ret
1338 IgorA 271
;---------------------------------------------------------------------
272
 
1456 IgorA 273
;output:
274
; ah = symbol
6239 IgorA 275
align 16
5911 IgorA 276
proc KeyConvertToASCII uses ebx, table:dword
277
	mov ebx,dword[table] ;convert scan to ascii
7579 IgorA 278
	shr ax,8
5911 IgorA 279
	add bx,ax
280
	mov ah,byte[ebx]
281
	ret
1456 IgorA 282
endp
1338 IgorA 283
 
6239 IgorA 284
align 16
1338 IgorA 285
key:
6239 IgorA 286
	mcall SF_KEYBOARD,SSF_GET_CONTROL_KEYS ;66.3 получить состояние управляющих клавиш
287
	xor esi,esi
288
	mov ecx,1
7579 IgorA 289
	test al,3 ;[Shift]
6239 IgorA 290
	jz @f
291
		mov cl,2
292
		or esi,KM_SHIFT
293
	@@:
294
	test al,0x0c ;[Ctrl]
295
	jz @f
296
		or esi,KM_CTRL
297
	@@:
298
	test al,0x30 ;[Alt]
299
	jz @f
300
		mov cl,3
301
		or esi,KM_ALT
302
	@@:
303
	test al,0x80 ;[NumLock]
304
	jz @f
305
		or esi,KM_NUMLOCK
306
	@@:
1457 IgorA 307
 
6239 IgorA 308
	mcall SF_SYSTEM_GET,SSF_KEYBOARD_LAYOUT,,conv_tabl ;26.2 получить раскладку клавиатуры
309
	mcall SF_GET_KEY
310
	stdcall [tl_key], tree1
1338 IgorA 311
 
7579 IgorA 312
	test word[edit_replace.flags],ed_focus ;если не в фокусе, выходим
6239 IgorA 313
	je @f
314
		cmp ah,0x80 ;if key up
315
		ja still
316
		cmp ah,42 ;[Shift] (left)
317
		je still
318
		cmp ah,54 ;[Shift] (right)
319
		je still
320
		cmp ah,56 ;[Alt]
321
		je still
322
		cmp ah,29 ;[Ctrl]
323
		je still
324
		cmp ah,69 ;[Pause Break]
325
		je still
1338 IgorA 326
 
7571 IgorA 327
		stdcall KeyConvertToASCII, conv_tabl
7579 IgorA 328
		stdcall [edit_box_key], edit_replace
7576 IgorA 329
		jmp still
330
	@@:
7579 IgorA 331
	test word[edit_find.flags],ed_focus ;если не в фокусе, выходим
7576 IgorA 332
	je @f
333
		cmp ah,0x80 ;if key up
334
		ja still
335
		cmp ah,42 ;[Shift] (left)
336
		je still
337
		cmp ah,54 ;[Shift] (right)
338
		je still
339
		cmp ah,56 ;[Alt]
340
		je still
341
		cmp ah,29 ;[Ctrl]
342
		je still
343
		cmp ah,69 ;[Pause Break]
344
		je still
345
 
346
		stdcall KeyConvertToASCII, conv_tabl
7579 IgorA 347
		stdcall [edit_box_key], edit_find
6239 IgorA 348
		jmp still
349
	@@:
7579 IgorA 350
	test word[edit_goto.flags],ed_focus ;если не в фокусе, выходим
351
	je @f
352
		cmp ah,0x80 ;if key up
353
		ja still
354
		cmp ah,42 ;[Shift] (left)
355
		je still
356
		cmp ah,54 ;[Shift] (right)
357
		je still
358
		cmp ah,56 ;[Alt]
359
		je still
360
		cmp ah,29 ;[Ctrl]
361
		je still
362
		cmp ah,69 ;[Pause Break]
363
		je still
1338 IgorA 364
 
7579 IgorA 365
		stdcall KeyConvertToASCII, conv_tabl
366
		stdcall [edit_box_key], edit_goto
367
		jmp still
368
	@@:
369
 
6239 IgorA 370
	stdcall [ted_key], tedit0, conv_tabl,esi
371
	jmp still
1338 IgorA 372
 
7573 IgorA 373
align 4
7579 IgorA 374
edit_replace edit_box TED_PANEL_WIDTH-1, 0, 20, 0xffffff, 0xff80, 0xff0000, 0xff, 0x4080, 300, buf_replace, mouse_dd, 0
375
edit_find edit_box TED_PANEL_WIDTH-1, 0, 20, 0xffffff, 0xff80, 0xff0000, 0xff, 0x4080, 300, buf_find, mouse_dd, 0
376
edit_goto edit_box TED_PANEL_WIDTH-1, 0, 20, 0xffffff, 0xff80, 0xff0000, 0xff, 0x4080, 10, buf_goto, mouse_dd, 0
1338 IgorA 377
 
2708 IgorA 378
unpac_mem dd 0
1338 IgorA 379
 
380
;library structures
381
l_libs_start:
8255 IgorA 382
	lib0 l_libs lib_name_0, file_name, system_dir_0, import_box_lib
383
	lib1 l_libs lib_name_1, file_name, system_dir_1, import_msgbox_lib
384
	lib2 l_libs lib_name_2, file_name, system_dir_2, import_proclib
385
	lib3 l_libs lib_name_3, file_name, system_dir_3, import_libimg
386
	lib4 l_libs lib_name_4, file_name, system_dir_4, import_libini
387
	lib5 l_libs lib_name_5, file_name, system_dir_5, import_libkmenu
1338 IgorA 388
load_lib_end:
389
 
2708 IgorA 390
IncludeIGlobals
5643 leency 391
hed db 'TextEdit '
1338 IgorA 392
i_end:
5643 leency 393
	openfile_path: ;полный путь к файлу с которым идет работа
394
		rb 4096
2855 IgorA 395
	dir_mem rb 32+304*count_of_dir_list_files
396
	wnd_s_pos: ;место для настроек стартовой позиции окна
397
		rq 1
398
	last_open_synt_file rb 32 ;имя последнего подключенного файла синтаксиса
399
	buf rb BUF_SIZE ;буфер для копирования и вставки
400
	buf_find rb 302 ;буфер для поиска текста
7576 IgorA 401
	buf_replace rb 302 ;буфер для замены текста
7579 IgorA 402
	buf_goto rb 12 ;буфер для перхода на строку
5939 IgorA 403
	sc system_colors
2708 IgorA 404
IncludeUGlobals
1467 IgorA 405
	align 16
406
	procinfo process_information
1705 IgorA 407
		rb 1024
1467 IgorA 408
	thread:
6256 IgorA 409
		rb 4096
410
align 16
3244 IgorA 411
    thread_coords:
5830 IgorA 412
	rb 4096
6256 IgorA 413
align 16
1338 IgorA 414
stacktop:
4308 IgorA 415
	sys_path: ;путь откуда запустился исполняемый файл
1705 IgorA 416
		rb 4096
4308 IgorA 417
	file_name: ;параметры запуска
1705 IgorA 418
		rb 4096
4308 IgorA 419
	syntax_path: ;имя подключаемого файла синтаксиса
1705 IgorA 420
		rb 4096
421
	plugin_path:
422
		rb 4096
4308 IgorA 423
	text_work_area: ;путь к файлу, который показывается в окне
424
		rb 4096
425
	filename_area: ;имя файла для диалога открытия/закрытия
1705 IgorA 426
		rb 256
427
	file_info:
428
		rb 40
1338 IgorA 429
mem: