Subversion Repositories Kolibri OS

Rev

Rev 7575 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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