Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
1476 IgorA 1
use32
2
  org 0x0
3
  db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт
4
  dd 0x01
5
  dd start
6
  dd i_end ; размер приложения
7
  dd mem
8
  dd stacktop
2086 IgorA 9
  dd file_name
1476 IgorA 10
  dd sys_path
11
 
12
MAX_COLOR_WORD_LEN equ 40
2819 IgorA 13
BUF_SIZE equ 4096 ;buffer for copy|paste
1476 IgorA 14
maxSyntaxFileSize equ 310000
2086 IgorA 15
CAPT_PATH_WIDTH equ 50 ;ширина подписи перед текстовым полем
1476 IgorA 16
 
17
include '../../macros.inc'
18
include '../../proc32.inc'
19
include '../../develop/libraries/box_lib/load_lib.mac'
20
include '../../develop/libraries/box_lib/trunk/box_lib.mac'
4990 IgorA 21
include '../../dll.inc'
1476 IgorA 22
include 'te_data.inc'
23
include 'te_work.inc' ;text work functions
24
 
4990 IgorA 25
@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
1476 IgorA 26
 
4990 IgorA 27
;Макрос для загрузки изображений с использованием библиотеки libimg.obj
28
;для использования макроса нужны переменные:
29
; - run_file_70 FileInfoBlock
30
; - image_data dd 0
31
macro load_image_file path,buf,size
32
{
33
	;path - может быть переменной или строковым параметром
34
	if path eqtype '' ;проверяем задан ли строкой параметр path
35
		jmp @f
36
			local .path_str
37
			.path_str db path ;формируем локальную переменную
38
			db 0
39
		@@:
40
		;32 - стандартный адрес по которому должен быть буфер с системным путем
41
		copy_path .path_str,[32],file_name,0x0
42
	else
43
		copy_path path,[32],file_name,0x0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой
44
	end if
45
 
46
	stdcall mem.Alloc, dword size ;выделяем память для изображения
47
	mov [buf],eax
48
 
49
	mov eax,70 ;70-я функция работа с файлами
50
	mov [run_file_70.Function], 0
51
	mov [run_file_70.Position], 0
52
	mov [run_file_70.Flags], 0
53
	mov [run_file_70.Count], dword size
54
	m2m [run_file_70.Buffer], [buf]
55
	mov byte[run_file_70+20], 0
56
	mov [run_file_70.FileName], file_name
57
	mov ebx,run_file_70
58
	int 0x40 ;загружаем файл изображения
59
	cmp ebx,0xffffffff
60
	je @f
61
		;определяем вид изображения и переводим его во временный буфер image_data
62
		stdcall dword[img_decode], dword[buf],ebx,0
63
		mov dword[image_data],eax
64
		;преобразуем изображение к формату rgb
65
		stdcall dword[img_to_rgb2], dword[image_data],dword[buf]
66
		;удаляем временный буфер image_data
67
		stdcall dword[img_destroy], dword[image_data]
68
	@@:
69
}
70
 
71
image_data dd 0 ;указатель на временную память. для нужен преобразования изображения
72
icon_tl_sys dd 0 ;указатель на память для хранения системных иконок
73
 
1476 IgorA 74
align 4
75
start:
2819 IgorA 76
	mcall 48,3,sc,sizeof.system_colors
1476 IgorA 77
 
2819 IgorA 78
	mcall 68,11
79
	or eax,eax
80
	jz button.exit
1476 IgorA 81
 
2819 IgorA 82
	mcall 66,1,1 ;scan code
83
	mcall 40,0x27
1476 IgorA 84
 
85
;-------------------------------------------------
2819 IgorA 86
	mov ecx,maxSyntaxFileSize
87
	stdcall mem.Alloc,ecx
88
	mov [options_file],eax
89
	mov [options_file_end],eax
90
	add [options_file_end],ecx
1476 IgorA 91
 
92
 
93
load_libraries l_libs_start,load_lib_end
94
 
95
;проверка на сколько удачно загузилась наша либа
96
	mov	ebp,lib0
97
	cmp	dword [ebp+ll_struc_size-4],0
98
	jz	@f
99
	mcall	-1	;exit not correct
100
@@:
101
 
102
;---------------------------------------------------------------------
4990 IgorA 103
	stdcall dword[tl_data_init],dword tree1
1476 IgorA 104
 
4990 IgorA 105
; читаем файл с курсорами и линиями
106
	load_image_file 'tl_sys_16.png', icon_tl_sys,54+3*256*13
107
	mov eax,dword[icon_tl_sys]
108
	mov dword[tree1.data_img_sys],eax
1476 IgorA 109
;---------------------------------------------------------------------
110
; читаем bmp файл с иконками узлов
4990 IgorA 111
	load_image_file 'tl_nod_16.png', icon_tl_sys,54+3*256*2
112
	mov eax,dword[icon_tl_sys]
113
	mov dword[tree1.data_img],eax
1476 IgorA 114
;------------------------------------------------------------------------------
115
  copy_path fn_syntax_dir,sys_path,file_name,0 ;берем путь к папке с файлами синтаксиса
116
  mov eax,70
117
  mov ebx,tree_file_struct
118
  int 0x40
119
 
120
cmp ebx,-1
121
je .end_dir_init
122
 
123
  mov eax,dir_mem
124
  add eax,32+4+1+3+4*6+8
125
mov ecx,ebx
126
@@:
127
  cmp byte[eax],'.' ;фильтруем файлы с именами '.' и '..'
128
  je .filter
129
    push dword tree1
130
    push dword 0x10000 ;1*2^16 - где 1 номер иконки с книгой
131
    push dword eax
132
    call dword[tl_node_add]
133
 
134
    stdcall dword[tl_cur_next],tree1
135
  .filter:
136
  add eax,304
137
  loop @b
2102 IgorA 138
  stdcall dword[tl_cur_beg],tree1 ;ставим курсор на начало списка
1476 IgorA 139
.end_dir_init:
140
 
141
;--- load color option file ---
142
stdcall [ted_init], tedit0
2086 IgorA 143
mov byte[file_name],0
1476 IgorA 144
 
145
align 4
146
red_win:
2086 IgorA 147
	call draw_window
1476 IgorA 148
 
149
align 4
150
still:
151
  mcall 10
152
 
153
  cmp al,1 ;изм. положение окна
154
  jz red_win
155
  cmp al,2
156
  jz key
157
  cmp al,3
158
  jz button
159
  cmp al,6
160
  jz mouse
161
 
162
  jmp still
163
 
164
 
165
align 4
2086 IgorA 166
draw_window:
167
	pushad
168
	mcall 12,1
169
 
170
	mov edx,[sc.work]
171
	or  edx,0x33000000
172
	mov edi,hed
173
	mcall 0,<10,555>,<10,333>
174
 
175
	mcall 9,procinfo,-1
176
 
177
	mov eax,8 ;кнопка
178
	mov ebx,5*65536+90
179
	mov ecx,195*65536+20
180
	mov edx,200
181
	mov esi,[sc.work_button];0xd0
182
	mcall
183
 
184
	;mov eax,8
185
	mov ebx,100*65536+85
186
	mov ecx,195*65536+20
187
	mov edx,201
188
	mov esi,0xd00000
189
	mcall
190
 
191
	mov eax,4 ;рисование текста
192
	mov ebx,10*65536+200
193
	mov ecx,[sc.work_button_text]
194
	or  ecx,0x80000000
195
	mov edx,txt122
196
	mcall
197
 
198
	mov ebx,105*65536+200
199
	mov ecx,0xffff00
200
	or  ecx,0x80000000
201
	mov edx,txt148
202
	mcall
203
 
204
	mov ebx,195*65536+10
205
	mov ecx,[sc.work_text]
206
	or  ecx,0x80000000
207
	mov edx,txt_inp_file
208
	int 0x40
209
 
210
	add ebx,20
211
	mov edx,txt_out_file
212
	int 0x40
213
 
2125 IgorA 214
	push dword PathShow_data_1
215
	call [PathShow_draw]
216
 
2086 IgorA 217
	stdcall [edit_box_draw],dword edit1
218
	stdcall [tl_draw],dword tree1
219
 
220
	;scroll 1
221
	mov [ws_dir_lbox.all_redraw],1
222
	stdcall [scrollbar_ver_draw],dword ws_dir_lbox
223
	stdcall [ted_draw], tedit0
224
 
225
	mcall 12,2
226
	popad
227
	ret
228
 
229
align 4
1476 IgorA 230
mouse:
231
	stdcall [tl_mouse],tree1
232
	stdcall [edit_box_mouse],edit1
233
	stdcall [ted_mouse], tedit0
234
	jmp still
235
 
2819 IgorA 236
;output:
237
; ah = symbol
238
align 4
239
proc KeyConvertToASCII, table:dword
240
	push ebx
241
	mov ebx,dword[table] ;convert scan to ascii
242
	ror ax,8
243
	xor ah,ah
244
	add bx,ax
245
	mov ah,byte[ebx]
246
	pop ebx
247
	ret
248
endp
1476 IgorA 249
 
250
align 4
251
key:
2819 IgorA 252
	mcall 66,3 ;66.3 получить состояние управляющих клавиш
253
	xor esi,esi
254
	mov ecx,1
255
	test al,0x03 ;[Shift]
256
	jz @f
257
		mov cl,2
258
		or esi,KM_SHIFT
259
	@@:
260
	test al,0x0c ;[Ctrl]
261
	jz @f
262
		or esi,KM_CTRL
263
	@@:
264
	test al,0x30 ;[Alt]
265
	jz @f
266
		mov cl,3
267
		or esi,KM_ALT
268
	@@:
269
	test al,0x80 ;[NumLock]
270
	jz @f
271
		or esi,KM_NUMLOCK
272
	@@:
273
 
274
	mcall 26,2,,conv_tabl ;26.2 получить раскладку клавиатуры
1476 IgorA 275
	mcall 2
276
	stdcall [tl_key],tree1
2819 IgorA 277
 
278
	test word [edit1.flags],10b;ed_focus ; если не в фокусе, выходим
279
	je @f
280
		cmp ah,0x80 ;if key up
281
		ja still
282
		cmp ah,42 ;[Shift] (left)
283
		je still
284
		cmp ah,54 ;[Shift] (right)
285
		je still
286
		cmp ah,56 ;[Alt]
287
		je still
288
		cmp ah,29 ;[Ctrl]
289
		je still
290
		cmp ah,69 ;[Pause Break]
291
		je still
292
 
293
		stdcall KeyConvertToASCII, dword conv_tabl
294
		stdcall [edit_box_key],edit1
295
		jmp still
296
	@@:
297
 
298
	stdcall [ted_key], tedit0, conv_tabl,esi
1476 IgorA 299
	jmp still
300
 
301
align 4
302
button:
303
;  cmp [menu_active],1 ;если нажали меню, то сначала реакция на меню
304
;  jne @f ;mouse.menu_bar_1
305
;    mov [menu_active],0
306
;    jmp still
307
;  @@:
308
 
309
  mcall 17 ;получить код нажатой кнопки
310
 
311
  cmp ah,200
312
  jne @f
313
    call but_OpenSyntax
314
  @@:
315
  cmp ah,201
316
  jne @f
317
    call but_SaveSyntax
318
  @@:
319
 
320
  cmp ah,1
321
  jne still
322
.exit:
323
  ;push eax
324
 
1489 IgorA 325
  stdcall mem.Free,[options_file]
1476 IgorA 326
 
327
  stdcall [tl_data_clear], tree1
328
  stdcall [ted_delete], tedit0
329
  mcall -1 ;выход из программы
330
 
331
align 4
332
but_OpenSyntax:
333
  stdcall [tl_node_get_data],tree1
334
  pop dword [fn_col_option]
335
  call InitColText
336
  ret
337
 
338
align 4
339
but_SaveSyntax:
4990 IgorA 340
	stdcall [ted_save_file], tedit0,run_file_70,[edit1.text]
1476 IgorA 341
	ret
342
 
343
align 4
344
but_ctrl_o:
345
	push eax
346
	call get_wnd_in_focus
347
	cmp eax,0
348
	je @f
349
		stdcall [ted_open_file], eax,str_file_70,[edit1.text]
350
	@@:
351
	pop eax
352
	ret
353
 
354
;создание нового файла
355
align 4
356
but_ctrl_n:
357
	push eax
358
	call get_wnd_in_focus
359
	cmp eax,0
360
	je @f
361
		stdcall [ted_clear], eax,1
362
		stdcall [ted_draw], eax
363
	@@:
364
	pop eax
365
	ret
366
 
367
;определяем какое из окон редактора в фокусе
368
align 4
369
get_wnd_in_focus:
370
	xor eax,eax
371
	cmp dword[el_focus],tedit0
372
	jne @f
373
		mov eax,tedit0
374
	@@:
375
	;cmp dword[el_focus],tedit1
376
	;jne @f
377
	;       mov eax,tedit1
378
	;@@:
379
	ret
380
 
4990 IgorA 381
hed db 'TextEditor syntax file converter 01.07.14',0 ;подпись окна
2819 IgorA 382
conv_tabl rb 128 ; таблица для конвертирования scan-кода в ascii-код
1476 IgorA 383
 
384
txt122 db 'Загр. файл',0
385
txt148 db 'Сохр. файл',0
2086 IgorA 386
txt_inp_file db 'Исх. файл:',0
1476 IgorA 387
txt_out_file db 'Вых. файл:',0
388
 
4990 IgorA 389
txt_no_kpack db 'Открываемый файл сжат Kpack-ом.',13,10,'Для работы с файлом распакуйте его используя системную программу Kpack.',13,10,'Работа со сжатыми файлами пока не поддерживается.',0
1476 IgorA 390
 
4990 IgorA 391
head_f_i:
392
head_f_l db 'System error',0
393
err_message_found_lib_0 db 'Sorry I cannot found library ',39,'box_lib.obj',39,0
394
err_message_import_0 db 'Error on load import library ',39,'box_lib.obj',39,0
395
err_message_found_lib_1 db 'Sorry I cannot found library ',39,'libimg.obj',39,0
396
err_message_import_1 db 'Error on load import library ',39,'libimg.obj',39,0
397
 
1476 IgorA 398
;library structures
399
l_libs_start:
4990 IgorA 400
	lib0 l_libs lib_name_0, sys_path, file_name, system_dir_0, err_message_found_lib_0, head_f_l, import_box_lib,err_message_import_0, head_f_i
401
	lib1 l_libs lib_name_1, sys_path, file_name, system_dir_1, err_message_found_lib_1, head_f_l, import_libimg,err_message_import_1, head_f_i
1476 IgorA 402
load_lib_end:
403
 
404
 
405
i_end:
406
	rb 1024
407
	align 16
408
	procinfo process_information
409
	thread:
410
		rb 1024
411
stacktop:
412
  sys_path:
413
    rb 4096
414
  file_name:
415
    rb 4096
416
  file_name_rez:
417
    rb 4096
418
mem: