Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
1476 IgorA 1
struct FileInfoBlock
2
	Function dd ?
3
	Position dd ?
4
	Flags	 dd ?
5
	Count	 dd ?
6
	Buffer	 dd ?
7
		db ?
8
	FileName dd ?
9
ends
10
 
11
struct TexColViv
2102 IgorA 12
	Text  rb MAX_COLOR_WORD_LEN ; слово для подсветки
13
	f1    dd 0 ; справка по слову
14
	flags db ? ; f1+4 флаги используемые при выделении
15
	endc  db ? ; f1+5 символ конца выделения (используется при flags&4)
16
	escc  db ? ; f1+6 экранирующий символ (используется при flags&4)
17
	color db ? ; f1+7 номер цвета
1476 IgorA 18
ends
19
 
20
count_colors_text dd 1
21
ColWords dd 0
22
color_cursor dd ?
23
color_wnd_capt dd ?
24
color_wnd_work dd ?
25
color_wnd_bord dd ?
26
color_select dd ?
27
color_cur_text dd ?
28
color_wnd_text dd ?
29
 
30
options_file dd 0
31
options_file_end dd 0
32
tex_colors dd 0
33
tex_help_f1 dd 0
34
 
35
Col dd 0 ;указатель на структуры ключевых слов TexColViv
36
 
37
keyUpr dd 0
38
err_opn db 0 ;ошибка открытия файла
39
err_sav db 0 ;ошибка сохранения файла
40
 
41
sc system_colors
42
 
43
run_file_70 FileInfoBlock
44
 
45
align 4
46
InitColText:
47
	pushad
48
 
49
	mov  ebx,dword[fn_col_option]
50
	copy_path ebx,fn_syntax_dir,file_name_rez,0
51
	copy_path file_name_rez,sys_path,file_name,0
52
 
53
  mov eax,70
54
  mov [run_file_70.Function], 0
55
  mov [run_file_70.Position], 0
56
  mov [run_file_70.Flags], 0
57
  mov ebx,[options_file_end]
58
  sub ebx,[options_file]
59
  mov [run_file_70.Count], ebx
60
  m2m [run_file_70.Buffer], [options_file]
61
  mov byte[run_file_70+20], 0
62
  mov [run_file_70.FileName], file_name
63
  mov ebx,run_file_70
64
  int 0x40
65
 
66
 
67
	;init: count_colors_text, ColWords, ...
68
	mov dword[count_colors_text],1
69
	mov dword[ColWords],0
70
	mov dword[tex_help_f1],0
71
 
72
  cmp eax,6
73
  je @f
74
  cmp eax,0
75
  je @f
76
    cmp ax,10
77
    jl .zifra_0_9
78
      mov al,'?'
79
      sub ax,48
80
    .zifra_0_9:
81
    add ax,48
82
 
83
    jmp .no_colors
84
  @@:
85
 
86
	mov esi,[options_file]
87
	mov edi,count_colors_text
88
	mov ecx,9*4
89
	rep movsb
90
 
91
	mov eax,[options_file]
92
	add eax,32
93
	mov dword[tex_colors],eax
94
 
95
	mov eax,dword[count_colors_text] ;init: Col (offset to key words)
96
	add eax,8
97
	shl eax,2
98
	add eax,[options_file]
99
	mov dword[Col],eax
100
 
101
	;init: tex_help_f1
102
	mov ecx,dword[ColWords]
103
	imul ecx,sizeof.TexColViv
104
	add ecx,dword[Col]
105
	mov dword[tex_help_f1],ecx
106
 
107
	;формирование текста в окне текстового редактора
108
	stdcall [ted_clear], tedit0,1
109
 
110
	stdcall print_capt,capt_header
111
 
112
	stdcall print_capt,col_1
113
	stdcall print_color,[color_cursor]
114
	stdcall print_capt,col_2
115
	stdcall print_color,[color_wnd_capt]
116
	stdcall print_capt,col_3
117
	stdcall print_color,[color_wnd_work]
118
	stdcall print_capt,col_4
119
	stdcall print_color,[color_wnd_bord]
120
	stdcall print_capt,col_5
121
	stdcall print_color,[color_select]
122
	stdcall print_capt,col_6
123
	stdcall print_color,[color_cur_text]
124
 
125
	stdcall print_capt,col_7
126
	mov ecx,[count_colors_text] ;количество цветов текста
127
	mov eax,[tex_colors]
128
	@@:
129
		stdcall print_capt,capt_type_dd
130
		stdcall print_color,[eax]
131
		add eax,4
132
	loop @b
133
 
134
	stdcall print_capt,capt_lbl_wo
135
	mov ecx,dword[ColWords]
136
	mov eax,[Col]
137
	xor ebx,ebx
138
	@@:
139
		inc ebx
140
		stdcall print_word,eax,ebx
141
		add eax,sizeof.TexColViv
142
	loop @b
143
 
144
	stdcall print_capt,capt_lbl_f1
145
	mov ecx,dword[ColWords]
146
	mov eax,[Col]
147
	xor ebx,ebx
148
	@@:
149
		inc ebx
150
		stdcall print_word_f1,eax,ebx
151
		add eax,sizeof.TexColViv
152
	loop @b
153
 
2125 IgorA 154
	; подготовка для  PathShow
155
	push dword PathShow_data_1
156
	call [PathShow_prepare]
2086 IgorA 157
	call draw_window
1476 IgorA 158
 
159
	.no_colors:
160
	popad
161
	ret
162
 
163
align 4
164
proc print_color, color:dword
165
	pushad
166
	mov eax,dword[color]
167
 
168
	mov ebx,eax ;меняем местами red и blue
169
	shr ebx,16
170
	xchg al,bl
171
	and eax,0xffff
172
	and ebx,0xff
173
	shl ebx,16
174
	or eax,ebx
175
 
176
	ror al,4
177
	ror eax,8
178
	ror al,4
179
	ror eax,8
180
	ror al,4
181
	rol eax,16
182
	mov edi,text_buffer
183
	mov word[edi],'0x'
184
	add edi,2
185
	mov ecx,6
186
	@@:
187
		mov ebx,eax
188
		and ebx,0xf
189
		cmp bx,9
190
		jle .cifra
191
			add bx,39
192
		.cifra:
193
		add bx,48
194
		mov byte[edi],bl
195
		inc edi
196
		shr eax,4
197
	loop @b
198
	mov byte[edi],13
199
	mov ebx,ted_opt_ed_change_time+ted_opt_ed_move_cursor
200
	stdcall [ted_text_add], tedit0,text_buffer,9,ebx
201
	popad
202
	ret
203
endp
204
 
205
align 4
206
proc print_capt, capt:dword
207
	pushad
208
	mov esi,dword[capt]
209
	stdcall str_len,esi
210
	stdcall [ted_text_add], tedit0,esi,eax,ted_opt_ed_change_time+ted_opt_ed_move_cursor
211
	popad
212
	ret
213
endp
214
 
215
align 4
216
proc print_word, text:dword, index:dword
217
	pushad
218
	mov esi,text_buffer
219
	mov byte[esi],0
220
	stdcall str_cat,esi,capt_beg_word
221
	stdcall str_len,esi
222
	add esi,eax
223
 
224
	mov edi,dword[text]
225
	stdcall code_string,edi,esi ;кодируем строку с ключевым словом
226
	stdcall str_cat,esi,capt_end_word
227
 
228
	cmp dword[edi+MAX_COLOR_WORD_LEN],0 ;f1
229
	je @f
230
		stdcall str_cat,esi,capt_calc_f1
231
		stdcall str_cat_value,esi,[index]
232
		stdcall str_cat,esi,capt_lbl_f1_use
233
		jmp .end_f1_calc
234
	@@:
235
		stdcall str_cat,esi,capt_null
236
	.end_f1_calc:
237
 
238
	mov esi,text_buffer
239
	stdcall str_len,esi ;узнаем длинну всей строки
240
	stdcall [ted_text_add], tedit0,esi,eax,ted_opt_ed_change_time+ted_opt_ed_move_cursor
241
 
242
mov ecx,edi
243
mov edi,text_buffer
244
mov byte[edi],','
245
inc edi
246
mov byte[edi],0
247
	xor eax,eax
248
	mov al,byte[ecx+MAX_COLOR_WORD_LEN+4] ;wwo
249
	stdcall str_cat_value,edi,eax
250
	stdcall str_len,edi
251
	add edi,eax
252
	mov byte[edi],','
253
	inc edi
254
 
255
	xor eax,eax
2102 IgorA 256
	mov ax,word[ecx+MAX_COLOR_WORD_LEN+4+1] ;(escc shl 8)+endc
257
	cmp ax,0 ;проверяем есть ли завершающий и экранинующий символ
1476 IgorA 258
	je @f
259
		stdcall str_cat_value,edi,eax
260
		stdcall str_len,edi
261
		add edi,eax
262
	@@:
263
	mov byte[edi],','
264
	inc edi
265
 
266
	xor eax,eax
267
	mov al,byte[ecx+MAX_COLOR_WORD_LEN+4+2] ;color
268
	stdcall str_cat_value,edi,eax
269
	stdcall str_len,edi
270
	add edi,eax
271
	mov byte[edi],13
272
	inc edi
273
	mov byte[edi],0
274
 
275
	mov esi,text_buffer
276
	stdcall str_len,esi
277
	stdcall [ted_text_add], tedit0,esi,eax,ted_opt_ed_move_cursor
278
 
279
	popad
280
	ret
281
endp
282
 
283
align 4
284
proc print_word_f1, text:dword, index:dword
285
	pushad
286
	mov edi,dword[text]
287
	mov esi,dword[edi+MAX_COLOR_WORD_LEN] ;f1
288
	cmp esi,0
289
	je @f
290
		mov ebx,text_buffer
291
		mov byte[ebx],0
292
		stdcall str_cat,ebx,capt_point
293
		stdcall str_cat_value,ebx,[index]
294
		stdcall str_cat,ebx,capt_beg_db
295
		stdcall str_len,ebx
296
		add ebx,eax
297
 
298
		add esi,dword[tex_help_f1]
299
		stdcall code_string,esi,ebx ;кодируем строку
300
		stdcall str_cat,ebx,capt_end_word_f1
301
 
302
		mov ebx,text_buffer
303
		stdcall str_len,ebx
304
		stdcall [ted_text_add], tedit0,ebx,eax,ted_opt_ed_move_cursor
305
	@@:
306
	popad
307
	ret
308
endp
309
 
310
align 4
311
proc code_string, text:dword, out_text:dword
312
	pushad
313
	mov esi,dword[text]
314
	stdcall str_len,esi
315
	mov ecx,eax
316
	mov edi,dword[out_text]
317
 
318
	.copy:
319
		mov al,byte[esi]
320
		inc esi
321
		cmp al,9
322
		je @f
323
		cmp al,13
324
		je @f
325
		cmp al,39
326
		je @f
327
			mov byte[edi],al
328
			inc edi
329
			loop .copy
330
			jmp .end_copy
331
		@@:
332
			mov byte[edi],39
333
			mov byte[edi+1],','
334
			add edi,2
335
			and eax,0xff
336
			mov dword[edi],0
337
			call tl_convert_to_str
338
			stdcall str_len,edi
339
			add edi,eax
340
			mov byte[edi],','
341
			mov byte[edi+1],39
342
			add edi,2
343
	loop .copy
344
	.end_copy:
345
	mov byte[edi],0
346
	popad
347
	ret
348
endp
349
 
350
align 4
351
proc mem_clear, mem:dword, len:dword
352
	push eax ecx edi
353
	cld
354
	xor al,al
355
	mov edi, dword[mem]
356
	mov ecx, dword[len]
357
	repne stosb
358
	pop edi ecx eax
359
	ret
360
endp
361
 
362
align 4
363
proc str_cat, str1:dword, str2:dword
364
	push eax ecx edi esi
365
	mov esi,dword[str2]
366
	stdcall str_len,esi
367
	mov ecx,eax
368
	inc ecx
369
	mov edi,dword[str1]
370
	stdcall str_len,edi
371
	add edi,eax
372
	cld
373
	repne movsb
374
	pop esi edi ecx eax
375
	ret
376
endp
377
 
378
align 4
379
proc str_cat_value, str1:dword, value:dword
380
	pushad
381
	mov edi,[str1]
382
	stdcall str_len,edi
383
	add edi,eax
384
	mov eax,[value]
385
	call tl_convert_to_str
386
	popad
387
	ret
388
endp
389
 
390
;output:
391
; eax = strlen
392
align 4
393
proc str_len, str1:dword
394
	mov eax,[str1]
395
	@@:
396
		cmp byte[eax],0
397
		je @f
398
		inc eax
399
		jmp @b
400
	@@:
401
	sub eax,[str1]
402
	ret
403
endp
404
 
405
;input:
406
; eax = value
407
; edi = string buffer
408
align 4
409
tl_convert_to_str:
410
	pushad
411
	stdcall mem_clear,edi,12
412
	call .str
413
	popad
414
	ret
415
 
416
align 4
417
.str:
418
	mov ecx,0x0a ;задается система счисления изменяются регистры ebx,eax,ecx,edx входные параметры eax - число
419
		;преревод числа в ASCII строку входные данные ecx=система счисленя edi адрес куда записывать, будем строку, причем конец переменной
420
	cmp eax,ecx  ;сравнить если в eax меньше чем в ecx то перейти на @@-1 т.е. на pop eax
421
	jb @f
422
		xor edx,edx ;очистить edx
423
		div ecx     ;разделить - остаток в edx
424
		push edx    ;положить в стек
425
		;dec edi    ;смещение необходимое для записи с конца строки
426
		call .str   ;перейти на саму себя т.е. вызвать саму себя и так до того момента пока в eax не станет меньше чем в ecx
427
		pop eax
428
	@@: ;cmp al,10 ;проверить не меньше ли значение в al чем 10 (для системы счисленя 10 данная команда - лишная))
429
	or al,0x30  ;данная команда короче  чем две выше
430
	stosb	    ;записать элемент из регистра al в ячеку памяти es:edi
431
	ret