Subversion Repositories Kolibri OS

Rev

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