Subversion Repositories Kolibri OS

Rev

Rev 4308 | Rev 5638 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4308 Rev 5637
1
align 4
1
align 4
2
draw_but_toolbar: ;ôóíêöèÿ äëÿ ðèñîâàíèÿ ïàíåëè èíñòðóìåíòîâ
2
draw_but_toolbar: ;ôóíêöèÿ äëÿ ðèñîâàíèÿ ïàíåëè èíñòðóìåíòîâ
3
  pushad
3
  pushad
4
  mov edi,tedit0
4
  mov edi,tedit0
5
 
5
 
6
  mov ecx,0x40000000
6
  mov ecx,0x40000000
7
;  mov edx,5*65536+25
7
  mov edx,5*65536+25
8
  mov edx,85*65536+2
-
 
9
  call draw_but_icon
8
  call draw_but_icon
10
 
9
 
11
  inc cx
10
  inc cx
12
;  mov edx,30*65536+25
11
  mov edx,30*65536+25
13
  mov edx,110*65536+2
-
 
14
  call draw_but_icon
12
  call draw_but_icon
15
 
13
 
16
stdcall [ted_can_save],edi
14
stdcall [ted_can_save],edi
17
cmp al,1
15
cmp al,1
18
je @f
16
je @f
19
and ecx,0xffff
17
and ecx,0xffff
20
@@:
18
@@:
21
  inc cx
19
  inc cx
22
;  mov edx,55*65536+25
20
  mov edx,55*65536+25
23
  mov edx,135*65536+2
-
 
24
  call draw_but_icon
21
  call draw_but_icon
25
or ecx,0x40000000
22
or ecx,0x40000000
26
 
23
 
27
  inc cx
24
  inc cx
28
  mov edx,85*65536+25
25
  mov edx,85*65536+25
29
  call draw_but_icon
26
  call draw_but_icon
30
 
27
 
31
call [ted_is_select]
28
call [ted_is_select]
32
cmp al,0
29
cmp al,0
33
jne @f
30
jne @f
34
and ecx,0xffff
31
and ecx,0xffff
35
@@:
32
@@:
36
  inc cx ; Cut
33
  inc cx ; Cut
37
  mov edx,110*65536+25
34
  mov edx,110*65536+25
38
  call draw_but_icon
35
  call draw_but_icon
39
 
36
 
40
  inc cx ; Copy
37
  inc cx ; Copy
41
  mov edx,135*65536+25
38
  mov edx,135*65536+25
42
  call draw_but_icon
39
  call draw_but_icon
43
 
40
 
44
  mov cx,10 ; Upper
41
  mov cx,10 ; Upper
45
  mov edx,265*65536+25
42
  mov edx,265*65536+25
46
  call draw_but_icon
43
  call draw_but_icon
47
 
44
 
48
  inc cx ; Lower
45
  inc cx ; Lower
49
  mov edx,290*65536+25
46
  mov edx,290*65536+25
50
  call draw_but_icon
47
  call draw_but_icon
51
 
48
 
52
  inc cx ; reverse
49
  inc cx ; reverse
53
  mov edx,315*65536+25
50
  mov edx,315*65536+25
54
  call draw_but_icon
51
  call draw_but_icon
55
or ecx,0x40000000
52
or ecx,0x40000000
56
 
53
 
57
cmp dword[buf],0
54
cmp dword[buf],0
58
jne @f
55
jne @f
59
and ecx,0xffff
56
and ecx,0xffff
60
@@:
57
@@:
61
  mov cx,6 ; Paste
58
  mov cx,6 ; Paste
62
  mov edx,160*65536+25
59
  mov edx,160*65536+25
63
  call draw_but_icon
60
  call draw_but_icon
64
or ecx,0x40000000
61
or ecx,0x40000000
65
 
62
 
66
  inc cx
63
  inc cx
67
  mov edx,185*65536+25
64
  mov edx,185*65536+25
68
  call draw_but_icon
65
  call draw_but_icon
69
 
66
 
70
  inc cx
67
  inc cx
71
  mov edx,210*65536+25
68
  mov edx,210*65536+25
72
  call draw_but_icon
69
  call draw_but_icon
73
 
70
 
74
  inc cx
71
  inc cx
75
  mov edx,235*65536+25
72
  mov edx,235*65536+25
76
  call draw_but_icon
73
  call draw_but_icon
77
 
74
 
78
mov ebx,ted_tim_undo
75
mov ebx,ted_tim_undo
79
cmp ted_tim_ch,ebx
76
cmp ted_tim_ch,ebx
80
jg @f
77
jg @f
81
and ecx,0xffff
78
and ecx,0xffff
82
@@:
79
@@:
83
  mov cx,13
80
  mov cx,13
84
  mov edx,345*65536+25
81
  mov edx,345*65536+25
85
  call draw_but_icon
82
  call draw_but_icon
86
or ecx,0x40000000
83
or ecx,0x40000000
87
 
84
 
88
cmp ted_tim_undo,1
85
cmp ted_tim_undo,1
89
jge @f
86
jge @f
90
and ecx,0xffff
87
and ecx,0xffff
91
@@:
88
@@:
92
  inc cx
89
  inc cx
93
  mov edx,370*65536+25
90
  mov edx,370*65536+25
94
  call draw_but_icon
91
  call draw_but_icon
95
or ecx,0x40000000
92
or ecx,0x40000000
96
 
93
 
97
	inc cx
94
	inc cx
98
	mov edx,400*65536+25
95
	mov edx,400*65536+25
99
	call draw_but_icon
96
	call draw_but_icon
100
 
97
 
101
	inc cx
98
	inc cx
102
	mov edx,425*65536+25
99
	mov edx,425*65536+25
103
	call draw_but_icon
100
	call draw_but_icon
104
 
101
 
105
	mov cx,17 ;âûáîð ôàéëà ïîäñâåòêè
102
	mov cx,17 ;âûáîð ôàéëà ïîäñâåòêè
106
	mov edx,450*65536+25
103
	mov edx,450*65536+25
107
	call draw_but_icon
104
	call draw_but_icon
108
 
105
 
109
	mov cx,18 ;cp 1251 -> 866
106
	mov cx,18 ;cp 1251 -> 866
110
	mov edx,425*65536+2
107
	mov edx,480*65536+25
111
	call draw_but_icon
108
	call draw_but_icon
112
 
109
 
113
	mov cx,19 ;cp 866 -> 1251
110
	mov cx,19 ;cp 866 -> 1251
114
	mov edx,450*65536+2
111
	mov edx,505*65536+25
115
	call draw_but_icon
112
	call draw_but_icon
116
 
113
 
117
	popad
114
	popad
118
	ret
115
	ret
119
 
116
 
120
;txtBUp db 24
117
;txtBUp db 24
121
;txtBDn db 25
118
;txtBDn db 25
122
;txtBRi db 26
119
;txtBRi db 26
123
;txtBLe db 27
120
;txtBLe db 27
124
 
121
 
125
;input:
122
;input:
126
; edi = pointer to tedit struct
123
; edi = pointer to tedit struct
127
align 4
124
align 4
128
proc draw_panel_find
125
proc draw_panel_find
129
;push edi
126
;push edi
130
;mov edi,dword[edit]
127
;mov edi,dword[edit]
131
  cmp ted_panel_id,TED_PANEL_FIND ;if not panel
128
  cmp ted_panel_id,TED_PANEL_FIND ;if not panel
132
  jne @f
129
  jne @f
133
  push eax ebx ecx edx
130
  push eax ebx ecx edx
134
 
131
 
135
  mov eax,13 ;ðèñîâàíèå ïðÿìîóãîëüíèêà
132
  mov eax,13 ;ðèñîâàíèå ïðÿìîóãîëüíèêà
136
  mov ebx,TED_PANEL_WIDTH
133
  mov ebx,TED_PANEL_WIDTH
137
  mov ecx,ted_wnd_t
134
  mov ecx,ted_wnd_t
138
  shl ecx,16
135
  shl ecx,16
139
  mov cx,20
136
  mov cx,20
140
  mov edx,[sc.work]
137
  mov edx,[sc.work]
141
  int 0x40
138
  int 0x40
142
 
139
 
143
  mov eax,4 ;ðèñîâàíèå òåêñòà
140
  mov eax,4 ;ðèñîâàíèå òåêñòà
144
  mov ebx,30*65536+5
141
  mov ebx,30*65536+5
145
  add ebx,ted_wnd_t
142
  add ebx,ted_wnd_t
146
  mov ecx,[sc.work_text]
143
  mov ecx,[sc.work_text]
147
  or ecx,0x80000000
144
  or ecx,0x80000000
148
  mov edx,txtFindCapt
145
  mov edx,txtFindCapt
149
  int 0x40
146
  int 0x40
150
 
147
 
151
  stdcall [edit_box_draw], dword edit2
148
  stdcall [edit_box_draw], dword edit2
152
 
149
 
153
  mov eax,13 ;ðèñîâàíèå ïðÿìîóãîëüíèêà
150
  mov eax,13 ;ðèñîâàíèå ïðÿìîóãîëüíèêà
154
  mov ebx,TED_PANEL_WIDTH
151
  mov ebx,TED_PANEL_WIDTH
155
  mov ecx,ted_wnd_t
152
  mov ecx,ted_wnd_t
156
  add cx,20+15 ; 15 - height text box
153
  add cx,20+15 ; 15 - height text box
157
  shl ecx,16
154
  shl ecx,16
158
  add ecx,ted_wnd_h
155
  add ecx,ted_wnd_h
159
  mov edx,ted_scr_h
156
  mov edx,ted_scr_h
160
  add cx,word[edx+sb_offs_size_y]
157
  add cx,word[edx+sb_offs_size_y]
161
  sub cx,20+15-1 ; 15 - height text box
158
  sub cx,20+15-1 ; 15 - height text box
162
  mov edx,[sc.work]
159
  mov edx,[sc.work]
163
  int 0x40
160
  int 0x40
164
 
161
 
165
  mov eax,8 ;êíîïêà
162
  mov eax,8 ;êíîïêà
166
  mov ebx,5*65536+85
163
  mov ebx,5*65536+85
167
  mov ecx,ted_wnd_t
164
  mov ecx,ted_wnd_t
168
  add cx,20+15+5
165
  add cx,20+15+5
169
  shl ecx,16
166
  shl ecx,16
170
  mov cx,20
167
  mov cx,20
171
  mov edx,201 ;button id
168
  mov edx,201 ;button id
172
  mov esi,[sc.work_button]
169
  mov esi,[sc.work_button]
173
  int 0x40
170
  int 0x40
174
 
171
 
175
  mov eax,4 ;ðèñîâàíèå òåêñòà
172
  mov eax,4 ;ðèñîâàíèå òåêñòà
176
  mov ebx,15*65536+(20+15+10)
173
  mov ebx,15*65536+(20+15+10)
177
  add ebx,ted_wnd_t
174
  add ebx,ted_wnd_t
178
  mov ecx,[sc.work_text]
175
  mov ecx,[sc.work_text]
179
  or ecx,0x80000000
176
  or ecx,0x80000000
180
  mov edx,txtFindNext
177
  mov edx,txtFindNext
181
  int 0x40
178
  int 0x40
182
 
179
 
183
  pop edx ecx ebx eax
180
  pop edx ecx ebx eax
184
  jmp .end_f
181
  jmp .end_f
185
  @@:
182
  @@:
186
  push eax edx
183
  push eax edx
187
    mov eax,8
184
    mov eax,8
188
    mov edx,201
185
    mov edx,201
189
    or edx,0x80000000
186
    or edx,0x80000000
190
    int 0x40
187
    int 0x40
191
  pop edx eax
188
  pop edx eax
192
  .end_f:
189
  .end_f:
193
;pop edi
190
;pop edi
194
  ret
191
  ret
195
endp
192
endp
196
 
193
 
197
;input:
194
;input:
198
; edi = pointer to tedit struct
195
; edi = pointer to tedit struct
199
align 4
196
align 4
200
proc draw_panel_syntax
197
proc draw_panel_syntax
201
;push edi
198
;push edi
202
;mov edi,dword[edit]
199
;mov edi,dword[edit]
203
  cmp ted_panel_id,TED_PANEL_SYNTAX ;if not panel
200
  cmp ted_panel_id,TED_PANEL_SYNTAX ;if not panel
204
  jne @f
201
  jne @f
205
  pushad
202
  pushad
206
 
203
 
207
  mov eax,13 ;ðèñîâàíèå ïðÿìîóãîëüíèêà
204
  mov eax,13 ;ðèñîâàíèå ïðÿìîóãîëüíèêà
208
  mov ebx,TED_PANEL_WIDTH
205
  mov ebx,TED_PANEL_WIDTH
209
  mov ecx,ted_wnd_t
206
  mov ecx,ted_wnd_t
210
  shl ecx,16
207
  shl ecx,16
211
  mov cx,20
208
  mov cx,20
212
  mov edx,[sc.work]
209
  mov edx,[sc.work]
213
  int 0x40 ;ðèñîâàíèå âåðõíåãî ôîíîâîãî ïðÿìîóãîëüíèêà
210
  int 0x40 ;ðèñîâàíèå âåðõíåãî ôîíîâîãî ïðÿìîóãîëüíèêà
214
 
211
 
215
  stdcall dword[tl_draw], tree1
212
  stdcall dword[tl_draw], tree1
216
  mov [ws_dir_lbox.all_redraw],1 ;äëÿ ïîëíîé ïåðåðèñîâêè äî÷åðíåãî ñêðîëëèíãà
213
  mov [ws_dir_lbox.all_redraw],1 ;äëÿ ïîëíîé ïåðåðèñîâêè äî÷åðíåãî ñêðîëëèíãà
217
  stdcall dword[scrollbar_ver_draw], dword ws_dir_lbox
214
  stdcall dword[scrollbar_ver_draw], dword ws_dir_lbox
218
 
215
 
219
  ror ecx,16
216
  ror ecx,16
220
  add ecx,dword[tree1.box_height]
217
  add ecx,dword[tree1.box_height]
221
  add ecx,20
218
  add ecx,20
222
  and ecx,0xffff
219
  and ecx,0xffff
223
  ror ecx,16
220
  ror ecx,16
224
  add ecx,ted_wnd_h
221
  add ecx,ted_wnd_h
225
  mov esi,ted_scr_h
222
  mov esi,ted_scr_h
226
  add cx,word[esi+sb_offs_size_y]
223
  add cx,word[esi+sb_offs_size_y]
227
  sub cx,20
224
  sub cx,20
228
  sub ecx,dword[tree1.box_height]
225
  sub ecx,dword[tree1.box_height]
229
  inc cx
226
  inc cx
230
  int 0x40 ;ðèñîâàíèå íèæíåãî ôîíîâîãî ïðÿìîóãîëüíèêà
227
  int 0x40 ;ðèñîâàíèå íèæíåãî ôîíîâîãî ïðÿìîóãîëüíèêà
231
 
228
 
232
  mov eax,8 ;êíîïêà
229
  mov eax,8 ;êíîïêà
233
  mov ebx,5*65536+65
230
  mov ebx,5*65536+65
234
  mov ecx,ted_wnd_t
231
  mov ecx,ted_wnd_t
235
  add ecx,25
232
  add ecx,25
236
  add ecx,dword[tree1.box_height]
233
  add ecx,dword[tree1.box_height]
237
  shl ecx,16
234
  shl ecx,16
238
  mov cx,20
235
  mov cx,20
239
  mov edx,200 ;button id
236
  mov edx,200 ;button id
240
  mov esi,[sc.work_button]
237
  mov esi,[sc.work_button]
241
  int 0x40
238
  int 0x40
242
 
239
 
243
  mov eax,4 ;ðèñîâàíèå òåêñòà
240
  mov eax,4 ;ðèñîâàíèå òåêñòà
244
  mov ebx,30*65536+5
241
  mov ebx,30*65536+5
245
  add ebx,ted_wnd_t
242
  add ebx,ted_wnd_t
246
  mov ecx,[sc.work_text]
243
  mov ecx,[sc.work_text]
247
  or ecx,0x80000000
244
  or ecx,0x80000000
248
  mov edx,txtFormatCapt
245
  mov edx,txtFormatCapt
249
  int 0x40
246
  int 0x40
250
 
247
 
251
  mov ebx,10*65536+30
248
  mov ebx,10*65536+30
252
  add ebx,dword[tree1.box_height]
249
  add ebx,dword[tree1.box_height]
253
  add ebx,ted_wnd_t
250
  add ebx,ted_wnd_t
254
  mov edx,txtFormatApply
251
  mov edx,txtFormatApply
255
  int 0x40
252
  int 0x40
256
 
253
 
257
  popad
254
  popad
258
  jmp .end_f
255
  jmp .end_f
259
  @@:
256
  @@:
260
    push eax edx
257
    push eax edx
261
      mov eax,8
258
      mov eax,8
262
      mov edx,200
259
      mov edx,200
263
      or edx,0x80000000
260
      or edx,0x80000000
264
      int 0x40 ;åñëè íåò ïàíåëè òî óäàëÿåì êíîïêó
261
      int 0x40 ;åñëè íåò ïàíåëè òî óäàëÿåì êíîïêó
265
    pop edx eax
262
    pop edx eax
266
  .end_f:
263
  .end_f:
267
;pop edi
264
;pop edi
268
  ret
265
  ret
269
endp
266
endp
270
 
267
 
271
MIN_M_WND_H equ 100 ;ìèíèìàëüíàÿ âûñîòà ãëàâíîãî îêíà
268
MIN_M_WND_H equ 100 ;ìèíèìàëüíàÿ âûñîòà ãëàâíîãî îêíà
272
;input:
269
;input:
273
; edi = pointer to tedit struct
270
; edi = pointer to tedit struct
274
align 4
271
align 4
275
EvSize:
272
EvSize:
276
  pushad
273
  pushad
277
  mov ebx,ted_scr_h
274
  mov ebx,ted_scr_h
278
  mov esi,ted_scr_w
275
  mov esi,ted_scr_w
279
 
276
 
280
  m2m ted_wnd_w,[procinfo.client_box.width] ;ñòàâèì øèðèíó îêíà ðåäàêòîðà ðàâíîé øèðèíå âñåãî îêíà
277
  m2m ted_wnd_w,[procinfo.client_box.width] ;ñòàâèì øèðèíó îêíà ðåäàêòîðà ðàâíîé øèðèíå âñåãî îêíà
281
  mov eax,ted_wnd_l
278
  mov eax,ted_wnd_l
282
  sub ted_wnd_w,eax ;îòíèìàåì îòñòóï ñëåâà
279
  sub ted_wnd_w,eax ;îòíèìàåì îòñòóï ñëåâà
283
  mov eax,dword[esi+sb_offs_size_x]
280
  mov eax,dword[esi+sb_offs_size_x]
284
  and eax,0xffff
281
  and eax,0xffff
285
  sub ted_wnd_w,eax ;îòíèìàåì øèðèíó âåðò. ñêðîëëèíãà
282
  sub ted_wnd_w,eax ;îòíèìàåì øèðèíó âåðò. ñêðîëëèíãà
286
 
283
 
287
  m2m ted_wnd_h,[procinfo.client_box.height] ;ñòàâèì âûñîòó îêíà ðåäàêòîðà ðàâíîé âûñîòå âñåãî îêíà
284
  m2m ted_wnd_h,[procinfo.client_box.height] ;ñòàâèì âûñîòó îêíà ðåäàêòîðà ðàâíîé âûñîòå âñåãî îêíà
288
  cmp ted_wnd_h,MIN_M_WND_H
285
  cmp ted_wnd_h,MIN_M_WND_H
289
  jg @f
286
  jg @f
290
    mov ted_wnd_h,MIN_M_WND_H
287
    mov ted_wnd_h,MIN_M_WND_H
291
  @@:
288
  @@:
292
 
289
 
293
  mov ax,word[ebx+sb_offs_size_y]
290
  mov ax,word[ebx+sb_offs_size_y]
294
  and eax,0xffff
291
  and eax,0xffff
295
  sub ted_wnd_h,eax	      ;îòíèìàåì âûñîòó ãîðèç. ñêðîëëèíãà
292
  sub ted_wnd_h,eax	      ;îòíèìàåì âûñîòó ãîðèç. ñêðîëëèíãà
296
  mov eax,ted_wnd_t
293
  mov eax,ted_wnd_t
297
  sub ted_wnd_h,eax	      ;îòíèìàåì îòñòóï ñâåðõó
294
  sub ted_wnd_h,eax	      ;îòíèìàåì îòñòóï ñâåðõó
298
 
295
 
299
  stdcall [ted_init_scroll_bars], tedit0,2
296
  stdcall [ted_init_scroll_bars], tedit0,2
300
 
297
 
301
  mov eax,ted_wnd_t
298
  mov eax,ted_wnd_t
302
  mov edi,dword tree1
299
  mov edi,dword tree1
303
  mov tl_box_top,eax ;=ted_wnd_t
300
  mov tl_box_top,eax ;=ted_wnd_t
304
  add tl_box_top,20
301
  add tl_box_top,20
305
 
302
 
306
  mov dword[edit2.top],eax ;=ted_wnd_t
303
  mov dword[edit2.top],eax ;=ted_wnd_t
307
  add dword[edit2.top],20
304
  add dword[edit2.top],20
308
 
305
 
309
  popad
306
  popad
310
  ret
307
  ret
311
 
308
 
312
;input:
309
;input:
313
;  ecx = 0x4000____
310
;  ecx = 0x4000____
314
;   cx = icon index
311
;   cx = icon index
315
;  edx = x*2^16+y
312
;  edx = x*2^16+y
316
align 4
313
align 4
317
draw_but_icon:
314
draw_but_icon:
318
	push eax ebx
315
	push eax ebx
319
 
316
 
320
	mov eax,8 ;êíîïêà
317
	mov eax,8 ;êíîïêà
321
	push ecx edx esi
318
	push ecx edx esi
322
		mov ebx,edx
319
		mov ebx,edx
323
		mov edx,ecx
320
		mov edx,ecx
324
		add edx,3
321
		add edx,3
325
		mov cx,bx
322
		mov cx,bx
326
		shl ecx,16
323
		shl ecx,16
327
		mov cx,19 ;=20-1
324
		mov cx,19 ;=20-1
328
		mov bx,19 ;=20-1
325
		mov bx,19 ;=20-1
329
		mov esi,ebx
326
		mov esi,ebx
330
		shr esi,16
327
		shr esi,16
331
		add esi,20
328
		add esi,20
332
		cmp esi,[procinfo.client_box.width]
329
		cmp esi,[procinfo.client_box.width]
333
		jge @f ;êíîïêà íå âëåçëà â îêíî
330
		jge @f ;êíîïêà íå âëåçëà â îêíî
334
			mov esi,[sc.work_button]
331
			mov esi,[sc.work_button]
335
			int 0x40 ;ñòàâèì êíîïêó
332
			int 0x40 ;ñòàâèì êíîïêó
336
			mov eax,7 ;bmp
333
			mov eax,7 ;bmp
337
		@@:
334
		@@:
338
	pop esi edx ecx
335
	pop esi edx ecx
339
 
336
 
340
	cmp eax,7
337
	cmp eax,7
341
	jne @f ;êíîïêà íå âëåçëà â îêíî
338
	jne @f ;êíîïêà íå âëåçëà â îêíî
342
		mov ebx,[bmp_icon]
339
		mov ebx,[bmp_icon]
343
		bt ecx,30 ;if (ecx & 0x40000000)
340
		bt ecx,30 ;if (ecx & 0x40000000)
344
		jc .gray
341
		jc .gray
345
			add ebx,TOOLBAR_ICONS_SIZE ;ïåðåìåùàåìñÿ íà ñåðûå êíîïêè
342
			add ebx,TOOLBAR_ICONS_SIZE ;ïåðåìåùàåìñÿ íà ñåðûå êíîïêè
346
		.gray:
343
		.gray:
347
		push ecx
344
		push ecx
348
		and ecx,0xffff
345
		and ecx,0xffff
349
		imul ecx,1200
346
		imul ecx,1200
350
		add ebx,ecx
347
		add ebx,ecx
351
		mov ecx,20
348
		mov ecx,20
352
		shl ecx,16
349
		shl ecx,16
353
		add ecx,20
350
		add ecx,20
354
		int 0x40 ;ñòàâèì ðèñóíîê íà êíîïêó
351
		int 0x40 ;ñòàâèì ðèñóíîê íà êíîïêó
355
		pop ecx
352
		pop ecx
356
	@@:
353
	@@:
357
	pop ebx eax
354
	pop ebx eax
358
	ret
355
	ret
359
 
356
 
360
;descrition:
357
;descrition:
361
; ôóíêöèÿ äëÿ ãåíåðèðîâàíèÿ ñåðûõ èêîíîê
358
; ôóíêöèÿ äëÿ ãåíåðèðîâàíèÿ ñåðûõ èêîíîê
362
;input:
359
;input:
363
; buf_rgb - áóôåð ñ âõîäíûì 24 áèòíûì öâåòíûì èçîáðàæåíèåì
360
; buf_rgb - áóôåð ñ âõîäíûì 24 áèòíûì öâåòíûì èçîáðàæåíèåì
364
; buf_g24 - áóôåð ñ âûõîäíûì 24 áèòíûì ñåðûì èçîáðàæåíèåì
361
; buf_g24 - áóôåð ñ âûõîäíûì 24 áèòíûì ñåðûì èçîáðàæåíèåì
365
; pixels - ÷èñëî ïèêñåëåé â èçîáðàæåíèè
362
; pixels - ÷èñëî ïèêñåëåé â èçîáðàæåíèè
366
align 4
363
align 4
367
proc img_to_gray, buf_rgb:dword, buf_g24:dword, pixels:dword
364
proc img_to_gray, buf_rgb:dword, buf_g24:dword, pixels:dword
368
pushad
365
pushad
369
	mov esi,[buf_rgb]
366
	mov esi,[buf_rgb]
370
	mov edi,[buf_g24]
367
	mov edi,[buf_g24]
371
	mov ecx,[pixels]
368
	mov ecx,[pixels]
372
	mov ebx,3
369
	mov ebx,3
373
	@@:
370
	@@:
374
		movzx eax,byte[esi]
371
		movzx eax,byte[esi]
375
		movzx edx,byte[esi+1]
372
		movzx edx,byte[esi+1]
376
		add eax,edx
373
		add eax,edx
377
		movzx edx,byte[esi+2]
374
		movzx edx,byte[esi+2]
378
		add eax,edx
375
		add eax,edx
379
		xor edx,edx
376
		xor edx,edx
380
		div ebx ;shr eax,2
377
		div ebx ;shr eax,2
381
		mov ah,al
378
		mov ah,al
382
		mov word[edi],ax
379
		mov word[edi],ax
383
		mov byte[edi+2],al
380
		mov byte[edi+2],al
384
		add esi,3
381
		add esi,3
385
		add edi,3
382
		add edi,3
386
		loop @b
383
		loop @b
387
popad
384
popad
388
	ret
385
	ret
389
endp
386
endp