Rev 1832 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1832 | yogev_ezra | 1 | ; |
2 | ; нарисовать прямоугольник |
||
3 | ; x1,y1 ---------| |
||
4 | ; | | |
||
5 | ; | | |
||
6 | ; |-------------x2,y2 |
||
7 | ; |
||
8 | macro rect x1, y1, x2, y2, color |
||
9 | { |
||
10 | pushad |
||
11 | |||
2296 | leency | 12 | ;mov edx, color |
1832 | yogev_ezra | 13 | ; ------------ |
2296 | leency | 14 | ;mov eax, 38 |
1832 | yogev_ezra | 15 | mov ebx, x1 |
16 | shl ebx, 16 |
||
17 | add ebx, x2 |
||
18 | mov ecx, y1 |
||
19 | shl ecx, 16 |
||
20 | add ecx, y1 |
||
2296 | leency | 21 | ;int 40h |
22 | mcall 38, ebx, ecx, color |
||
1832 | yogev_ezra | 23 | |
24 | ; ------------ |
||
2296 | leency | 25 | ;mov eax, 38 |
1832 | yogev_ezra | 26 | mov ebx, x1 |
27 | shl ebx, 16 |
||
28 | add ebx, x2 |
||
29 | mov ecx, y2 |
||
30 | shl ecx, 16 |
||
31 | add ecx, y2 |
||
2296 | leency | 32 | ;int 40h |
33 | mcall 38, ebx, ecx, color |
||
1832 | yogev_ezra | 34 | ; | |
35 | ; | |
||
36 | ; | |
||
2296 | leency | 37 | ;mov eax, 38 |
1832 | yogev_ezra | 38 | mov ebx, x1 |
39 | shl ebx, 16 |
||
40 | add ebx, x1 |
||
41 | mov ecx, y1 |
||
42 | shl ecx, 16 |
||
43 | add ecx, y2 |
||
2296 | leency | 44 | ;int 40h |
45 | mcall 38, ebx, ecx, color |
||
1832 | yogev_ezra | 46 | ; | |
47 | ; | |
||
48 | ; | |
||
2296 | leency | 49 | ;mov eax, 38 |
1832 | yogev_ezra | 50 | mov ebx, x2 |
51 | shl ebx, 16 |
||
52 | add ebx, x2 |
||
53 | mov ecx, y1 |
||
54 | shl ecx, 16 |
||
55 | add ecx, y2 |
||
2296 | leency | 56 | ;int 40h |
57 | mcall 38, ebx, ecx, color |
||
58 | |||
1832 | yogev_ezra | 59 | popad |
60 | } |
||
61 | |||
62 | ; |
||
63 | ; Вывод на экран буфера со строками |
||
64 | ; |
||
65 | |||
2296 | leency | 66 | scbuff db 80*41 dup 0 |
67 | ; 60 - длина строки |
||
68 | ; 41 - количество строк |
||
1832 | yogev_ezra | 69 | ; |
70 | ind db 0 ; Текущий индекс |
||
71 | ; |
||
72 | ; |
||
73 | x_s dw 15 ; Координаты левого верхнего угла FIXIT |
||
74 | y_s dw 38 ; |
||
75 | |||
76 | ; Высота строки |
||
77 | SH = 10 |
||
78 | |||
2296 | leency | 79 | xlen dw 80 ; длина строки |
1832 | yogev_ezra | 80 | ;ylen dw 128 ; количество строк |
81 | ylen dw 40 |
||
82 | |||
83 | ;Последние 4 байта в строке обозначают цвет |
||
84 | |||
85 | printbuff: |
||
86 | pushad |
||
87 | |||
88 | ; |
||
89 | ; Нарисуем белый прямоугольник |
||
90 | ; |
||
2296 | leency | 91 | ;mov eax, 13 |
92 | ;mov ebx, 15*65536+480 |
||
93 | ;mov ecx, 31*65536+418 |
||
94 | ;mov edx, 0FFFFFFh |
||
95 | ;int 40h |
||
96 | mcall 13, (15 * 65536 + 480), (31 * 65536 + 418), 0x00FFFFFF |
||
1832 | yogev_ezra | 97 | |
98 | |||
99 | |||
100 | xor ecx, ecx ; Счетчик |
||
101 | ;xor eax, eax |
||
102 | xor ebx, ebx |
||
103 | ;xor edx, edx |
||
104 | |||
105 | pb_loop: |
||
106 | xor edx, edx |
||
107 | xor eax, eax |
||
108 | mov dl, [ind] ; Индекс |
||
109 | mov ax, [ylen] |
||
110 | ;mul edx |
||
111 | cmp ecx, eax |
||
112 | ja pr_end |
||
113 | ; |
||
114 | ; |
||
115 | add edx, ecx ;Прибавим счетчик |
||
116 | xor eax, eax |
||
117 | mov ax, [ylen] |
||
118 | cmp edx, eax ;Индекс меньше количества строк |
||
119 | jna @f ;<= |
||
120 | sub edx, eax ;Если больше, считаем с начала |
||
121 | dec edx |
||
122 | @@: |
||
123 | ; |
||
124 | mov bx, [x_s] ; Координата X |
||
125 | shl ebx, 16 ; |
||
126 | push ecx |
||
127 | mov eax, SH ; Вычисляем местоположение строки |
||
128 | imul eax, ecx ; |
||
129 | ;mov ecx, eax |
||
130 | ;xor eax, eax |
||
131 | |||
132 | ;mov ax , [x_s] |
||
133 | xor ecx, ecx |
||
134 | mov cx, [y_s] |
||
135 | add ecx, eax |
||
136 | add ebx, ecx ; Координата Y |
||
137 | ; |
||
138 | xor eax, eax |
||
139 | mov ax, [xlen] ;длина строки |
||
140 | imul edx, eax ;Умножаем счетчик на длину строки, получаем смещение относительно начала буфера |
||
141 | ;mov edx, eax |
||
142 | add edx, scbuff |
||
143 | |||
144 | xor eax, eax |
||
145 | mov ax, [xlen] |
||
146 | sub eax, 4 |
||
147 | xor ecx, ecx |
||
148 | mov ecx, dword [edx+eax] ; Последние 4 Байта с цветом |
||
149 | or ecx, 0x80000000 ; Выводить ASCIIZ |
||
2296 | leency | 150 | ;mov eax, 4 |
151 | ;mov esi, -1 ; For Menuet |
||
152 | ;int 40h |
||
153 | mcall 4, ebx, ecx, edx |
||
1832 | yogev_ezra | 154 | pop ecx |
155 | inc ecx |
||
156 | jmp pb_loop |
||
157 | |||
158 | |||
159 | pr_end: |
||
160 | popad |
||
161 | ret |
||
162 | |||
163 | ; |
||
164 | ; Отладочные сообщения |
||
165 | ; |
||
166 | macro write_debug str |
||
167 | { |
||
2296 | leency | 168 | local ..string, ..label, ..end, ..loop, ..fin, ..n_inc |
1832 | yogev_ezra | 169 | jmp ..label |
170 | |||
171 | ..string db str, 0 |
||
172 | |||
173 | ..label: |
||
174 | pushad |
||
175 | xor eax, eax |
||
176 | xor ebx, ebx |
||
177 | xor ecx, ecx |
||
178 | xor edx, edx |
||
179 | |||
180 | mov bl, [ind] |
||
181 | mov ax, [xlen] |
||
182 | imul ebx, eax |
||
183 | add ebx, scbuff |
||
184 | |||
2296 | leency | 185 | ; |
186 | ; Черный цвет вывода |
||
187 | ; |
||
188 | mov edx, ebx |
||
189 | lea edx, [edx+eax] |
||
190 | sub edx, 4 ;4 байта с цветом |
||
191 | mov dword [edx], dword 0 |
||
192 | xor edx, edx |
||
193 | |||
194 | |||
1832 | yogev_ezra | 195 | ..loop: |
196 | mov dl, [..string+ecx] |
||
197 | cmp dl, 0 |
||
198 | jz ..end |
||
199 | mov [ebx+ecx], dl |
||
200 | inc ecx |
||
201 | jmp ..loop |
||
202 | |||
203 | ..end: |
||
204 | mov [ebx+ecx], dl |
||
205 | xor ebx, ebx |
||
206 | mov bl, [ind] |
||
207 | cmp bx, [ylen] |
||
2296 | leency | 208 | jz ..n_inc |
1832 | yogev_ezra | 209 | inc bl |
210 | jmp ..fin |
||
2296 | leency | 211 | ..n_inc: |
1832 | yogev_ezra | 212 | xor bl, bl |
213 | |||
214 | ..fin: |
||
2296 | leency | 215 | mov [ind], bl |
1832 | yogev_ezra | 216 | call printbuff |
217 | ;call draw_window |
||
218 | popad |
||
219 | } |
||
220 | |||
221 | ; |
||
222 | ; Кнопка |
||
223 | ; |
||
224 | macro draw_button x, y, xlen, ylen, id, str |
||
225 | { |
||
226 | pushad |
||
227 | local ..string, ..label |
||
228 | jmp ..label |
||
229 | ..string db str, 0 |
||
230 | |||
231 | ..label: |
||
2296 | leency | 232 | |
233 | mcall 8, (x*65536+xlen), (y*65536+ylen), id, 0x4466aa |
||
1832 | yogev_ezra | 234 | |
2296 | leency | 235 | mcall 4, ((x+5)*65536+y+ylen/2-3), 0x80FFFFFF, ..string |
1832 | yogev_ezra | 236 | |
237 | popad |
||
238 | } |
||
239 | |||
240 | ; |
||
241 | ; Отладочный вывод данных |
||
242 | ; |
||
243 | macro data_debug str, rg |
||
244 | { |
||
245 | pushad |
||
2296 | leency | 246 | local ..string, ..end, ..loop, ..strend, ..fin, ..label, ..n_inc |
1832 | yogev_ezra | 247 | jmp ..label |
248 | ..string db str, 20h, 0, 0, 0, 0, 0, 0, 0, 0, 0 |
||
249 | ..strend: |
||
250 | |||
251 | ..label: |
||
252 | ;xor eax, eax |
||
253 | ;xor ebx, ebx |
||
254 | xor ecx, ecx |
||
255 | xor edx, edx |
||
256 | |||
257 | mov eax, rg |
||
258 | lea ebx, [..strend-9] |
||
259 | call int2str |
||
260 | |||
261 | xor eax, eax |
||
262 | xor ebx, ebx |
||
263 | |||
264 | mov bl, [ind] |
||
265 | mov ax, [xlen] |
||
266 | imul ebx, eax |
||
267 | add ebx, scbuff |
||
268 | |||
2296 | leency | 269 | ; |
270 | ; Черный цвет вывода |
||
271 | ; |
||
272 | mov edx, ebx |
||
273 | lea edx, [edx+eax] |
||
274 | sub edx, 4 ;4 байта с цветом |
||
275 | mov dword [edx], dword 0 |
||
276 | xor edx, edx |
||
277 | |||
1832 | yogev_ezra | 278 | ..loop: |
279 | mov dl, [..string+ecx] |
||
280 | cmp dl, 0 |
||
281 | jz ..end |
||
282 | mov [ebx+ecx], dl |
||
283 | inc ecx |
||
284 | jmp ..loop |
||
285 | |||
286 | ..end: |
||
287 | mov [ebx+ecx], dl |
||
288 | xor ebx, ebx |
||
289 | mov bl, [ind] |
||
290 | cmp bx, [ylen] |
||
2296 | leency | 291 | jz ..n_inc |
1832 | yogev_ezra | 292 | inc bl |
293 | jmp ..fin |
||
2296 | leency | 294 | ..n_inc: |
1832 | yogev_ezra | 295 | xor bl, bl |
296 | |||
297 | ..fin: |
||
298 | mov [ind], bl |
||
299 | |||
300 | |||
301 | |||
302 | call printbuff |
||
303 | ;call draw_window |
||
304 | |||
305 | popad |
||
306 | } |
||
307 | |||
308 | ; <--EAX |
||
309 | ; -->[ebx] |
||
310 | ; |
||
311 | int2str: |
||
312 | pushf |
||
313 | ;push ebx |
||
314 | push ecx |
||
315 | push edx |
||
316 | push esi |
||
317 | |||
318 | ;xor ebx, ebx |
||
319 | xor ecx, ecx |
||
320 | |||
321 | i_loop: |
||
322 | mov edx, eax |
||
323 | push ecx |
||
324 | shl ecx, 2 |
||
325 | mov esi, 28 |
||
326 | sub esi, ecx |
||
327 | mov ecx, esi |
||
328 | shr edx, cl |
||
329 | pop ecx |
||
330 | and dl, 0fh ;Отделить младшие 4 бита |
||
331 | cmp dl, 0Ah ;Буква |
||
332 | jnc @f |
||
333 | or dl, 0x30 |
||
334 | jmp i_n1 |
||
335 | |||
336 | @@: |
||
337 | sub dl, 9 |
||
338 | or dl, 0x40 |
||
339 | i_n1: |
||
340 | mov [ebx+ecx], dl |
||
341 | inc ecx |
||
342 | cmp ecx, 8 |
||
343 | jnz i_loop |
||
344 | |||
345 | |||
346 | pop esi |
||
347 | pop edx |
||
348 | pop ecx |
||
349 | ;pop ebx |
||
350 | popf |
||
351 | ret |
||
352 | |||
353 | |||
354 | |||
355 | ; |
||
356 | ; Для вывода сообщений |
||
357 | ; [eax] <-- null-terminated string |
||
358 | ; ebx <-- color |
||
359 | ; |
||
360 | writemsg: |
||
361 | pushad |
||
2296 | leency | 362 | xor edi, edi |
363 | |||
364 | |||
365 | wm_loop: |
||
366 | xor esi, esi ; Если 1 - есть еще символы в строке |
||
367 | lea eax, [eax+edi] |
||
368 | |||
1832 | yogev_ezra | 369 | push ebx |
370 | push eax |
||
371 | |||
372 | xor eax, eax |
||
373 | xor ebx, ebx |
||
374 | |||
2296 | leency | 375 | |
1832 | yogev_ezra | 376 | mov bl, [ind] |
377 | mov ax, [xlen] |
||
378 | imul ebx, eax |
||
379 | add ebx, scbuff |
||
380 | |||
2296 | leency | 381 | |
382 | |||
383 | |||
384 | ; |
||
385 | ; Разбиваем строку сообщения на несколько строк по xlen-4 (т.к в конце двойное слово - цвет строки) |
||
386 | ; |
||
387 | |||
388 | |||
1832 | yogev_ezra | 389 | pop eax |
390 | mov edx, eax |
||
391 | call strlen |
||
2296 | leency | 392 | |
393 | movzx ecx, [xlen] |
||
394 | cmp eax, ecx |
||
395 | jc @f ;< |
||
396 | |||
397 | movzx edi, [xlen] |
||
398 | lea edi, [edi-4] |
||
399 | |||
1832 | yogev_ezra | 400 | mov ecx, eax |
2296 | leency | 401 | inc esi |
402 | |||
403 | |||
404 | @@: |
||
405 | |||
406 | |||
1832 | yogev_ezra | 407 | mov eax, edx |
408 | call strcpy |
||
409 | |||
410 | mov [ebx+ecx], byte 0x00 |
||
411 | |||
412 | xor eax, eax |
||
413 | mov ax, [xlen] |
||
414 | sub eax, 4 |
||
415 | pop ecx |
||
416 | mov dword [ebx+eax], ecx ; Последние 4 Байта с цветом |
||
417 | |||
418 | |||
2296 | leency | 419 | xor eax, eax |
420 | mov al, [ind] |
||
421 | cmp ax, [ylen] |
||
1832 | yogev_ezra | 422 | jz @f |
2296 | leency | 423 | inc al |
1832 | yogev_ezra | 424 | jmp ..fin |
425 | @@: |
||
2296 | leency | 426 | xor al, al |
1832 | yogev_ezra | 427 | |
428 | ..fin: |
||
2296 | leency | 429 | mov [ind], al |
430 | mov ebx, ecx ; цвет |
||
431 | mov eax, edx ; указатель на строку |
||
1832 | yogev_ezra | 432 | |
2296 | leency | 433 | cmp esi, 0 |
434 | jnz wm_loop |
||
435 | |||
436 | |||
1832 | yogev_ezra | 437 | call printbuff |
438 | |||
439 | popad |
||
440 | ret |
||
441 | |||
442 | ; |
||
443 | ; |
||
444 | |||
445 | |||
446 | |||
447 | ; <--EAX Перевод из 16 в 10 форму |
||
2296 | leency | 448 | ; -->[ebx] строка |
1832 | yogev_ezra | 449 | ; --> eax длина |
450 | int2strd: |
||
451 | pushf |
||
452 | ;push ebx |
||
453 | push ecx |
||
454 | push edx |
||
455 | push esi |
||
456 | ;push edi |
||
457 | |||
458 | ;xor ebx, ebx |
||
459 | xor ecx, ecx |
||
460 | mov esi, 10 |
||
461 | |||
462 | |||
463 | id_loop: |
||
464 | xor edx, edx |
||
465 | |||
466 | div esi |
||
467 | |||
468 | and dl, 0fh ;Отделить младшие 4 бита |
||
469 | or dl, 0x30 |
||
470 | |||
471 | mov [ebx+ecx], dl |
||
472 | cmp eax, 10 |
||
473 | inc ecx |
||
474 | jnc id_loop |
||
475 | |||
476 | and al, 0fh ;Отделить младшие 4 бита |
||
477 | or al, 0x30 |
||
478 | |||
479 | mov [ebx+ecx], al |
||
480 | ;mov [ebx+ecx+1], byte 0 |
||
481 | inc ecx |
||
482 | mov eax, ecx |
||
483 | ; перевернуть полученную строку |
||
484 | ; |
||
485 | ;xor edx, edx |
||
486 | |||
487 | ;mov esi, 2 |
||
488 | ;div esi |
||
489 | shr eax, 1 |
||
490 | |||
491 | xor edx, edx |
||
492 | |||
493 | id_loop2: |
||
494 | cmp eax, 0 |
||
495 | jz id_end |
||
496 | |||
497 | |||
498 | mov dl, [ebx+eax-1] |
||
499 | lea esi, [ebx+ecx] |
||
500 | sub esi, eax |
||
501 | mov dh, [esi] |
||
502 | |||
503 | mov [ebx+eax-1], dh |
||
504 | mov [esi], dl |
||
505 | |||
506 | dec eax |
||
507 | jmp id_loop2 |
||
508 | |||
509 | |||
510 | |||
511 | |||
512 | id_end: |
||
513 | mov eax, ecx |
||
514 | |||
515 | ;pop edi |
||
516 | pop esi |
||
517 | pop edx |
||
518 | pop ecx |
||
519 | ;pop ebx |
||
520 | popf |
||
521 | ret |
||
522 | |||
523 | ; |
||
524 | ; |
||
525 | ; |
||
526 | x_bb dw 550 ; Координаты левого верхнего угла |
||
527 | y_bb dw 30 ; |
||
528 | ; |
||
529 | bb_width dw 100 ; Ширина кнопок |
||
2296 | leency | 530 | bb_height dw 12 ; высота кнопок |
1832 | yogev_ezra | 531 | ; |
2296 | leency | 532 | bb_dist dw 6 ; Расстояние между кнопками |
1832 | yogev_ezra | 533 | |
534 | ; Идентификаторы кнопок начиная с 100 |
||
535 | ; |
||
536 | ; Для КЛ |
||
537 | ; |
||
538 | ; |
||
539 | buttonbox: |
||
540 | pushad |
||
541 | pushf |
||
542 | |||
543 | xor ecx, ecx |
||
544 | xor eax, eax |
||
545 | xor ebx, ebx |
||
546 | |||
547 | bb_loop: |
||
548 | |||
549 | ; Проверяем первый байт уина, если 0, кнопку рисовать не надо |
||
2296 | leency | 550 | ;mov ebx, NAME_LEN |
551 | ;imul ebx, ecx |
||
552 | |||
553 | ;mov al, [names+ebx] |
||
554 | ;cmp al, 0 |
||
555 | ;jz bb_end |
||
556 | |||
557 | mov ebx, UIN_LEN |
||
1832 | yogev_ezra | 558 | imul ebx, ecx |
559 | |||
2296 | leency | 560 | mov al, [uins + ebx] |
1832 | yogev_ezra | 561 | cmp al, 0 |
562 | jz bb_end |
||
2296 | leency | 563 | |
564 | |||
565 | |||
566 | |||
1832 | yogev_ezra | 567 | ; рисуем кнопку |
568 | ; Цвет зависит от статуса UIN |
||
569 | mov ebx, 4 |
||
570 | imul ebx, ecx |
||
571 | mov eax, [stats+ebx] ; В старшем слове дополнительный статус |
||
572 | cmp ax, -1 |
||
573 | jz bb_offline |
||
574 | cmp ax, 1 |
||
575 | jz bb_away |
||
576 | cmp ax, 2 |
||
577 | jz bb_dnd |
||
578 | cmp ax, 4 |
||
579 | jz bb_na |
||
580 | cmp ax, 10h |
||
581 | jz bb_bisy |
||
582 | cmp ax, 20h |
||
583 | jz bb_free4chat |
||
584 | cmp ax, 100h |
||
585 | jz bb_invis |
||
586 | ; Online |
||
587 | mov esi, 0x4466AA |
||
588 | jmp bb_dr |
||
589 | |||
590 | bb_offline: |
||
591 | mov esi, 0xBEBEBE |
||
592 | jmp bb_dr |
||
593 | |||
594 | bb_away: |
||
595 | mov esi, 0x14dcc3 |
||
596 | jmp bb_dr |
||
597 | |||
598 | bb_dnd: |
||
599 | mov esi, 0x14dcc3 |
||
600 | jmp bb_dr |
||
601 | |||
602 | bb_na: |
||
603 | mov esi, 0x14dcc3 |
||
604 | jmp bb_dr |
||
605 | |||
606 | bb_bisy: |
||
607 | mov esi, 0x14dcc3 |
||
608 | jmp bb_dr |
||
609 | |||
610 | bb_free4chat: |
||
611 | mov esi, 0x2233FF |
||
612 | jmp bb_dr |
||
613 | |||
614 | bb_invis: |
||
615 | mov esi, 0xD0D0D0 |
||
616 | |||
617 | bb_dr: |
||
618 | |||
619 | mov bx, [x_bb] |
||
620 | shl ebx, 16 |
||
621 | mov bx, [bb_width] |
||
622 | ;push ecx |
||
623 | mov edx, ecx |
||
624 | lea edx, [edx+100] ; ID |
||
625 | mov edi, ecx |
||
626 | mov cx, [y_bb] |
||
627 | movzx eax, [bb_height] |
||
628 | add ax, [bb_dist] |
||
629 | imul eax, edi |
||
630 | add ecx, eax |
||
631 | shl ecx, 16 |
||
632 | mov cx, [bb_height] |
||
633 | mov eax, 8 |
||
634 | int 40h |
||
635 | |||
636 | ; |
||
637 | ; Надпись на кнопке |
||
638 | ; |
||
639 | add ebx, 50000h ; Смещение от левого края |
||
640 | shr ecx, 16 |
||
641 | movzx eax, [bb_height] |
||
642 | shr eax, 1 ; /2 |
||
643 | sub eax, 3 ; смещение вверх от центра |
||
644 | add ecx, eax ; + половина размера кнопки |
||
645 | mov bx, cx |
||
646 | mov ecx, 0x80FFFFFF ; Цвет |
||
647 | mov edx, names |
||
648 | mov esi, NAME_LEN |
||
649 | imul esi, edi |
||
650 | add edx, esi |
||
651 | ;mov esi, -1 |
||
652 | mov eax, 4 |
||
653 | int 40h |
||
654 | |||
655 | mov ecx, edi |
||
656 | inc ecx |
||
657 | cmp ecx, UINS |
||
658 | ja bb_end |
||
659 | jmp bb_loop |
||
660 | |||
661 | |||
662 | bb_end: |
||
663 | popf |
||
664 | popad |
||
665 | ret |
||
666 | ; |
||
667 | ; Массив с UIN |
||
668 | ; |
||
669 | UIN_LEN = 11 ; Длина |
||
2296 | leency | 670 | UINS = 22 ; Количество |
1832 | yogev_ezra | 671 | ; |
672 | uins db UIN_LEN*UINS dup 0 |
||
673 | ; |
||
674 | ; массив со статусами |
||
675 | ; |
||
676 | stats dd UINS dup -1 |
||
677 | ; |
||
678 | ; Массив с именами |
||
679 | ; |
||
680 | NAME_LEN = 30 |
||
681 | |||
682 | names db NAME_LEN*UINS dup 0 |
||
683 | |||
684 | ; |
||
685 | ; |
||
2296 | leency | 686 | U1 db '405577261',0 |
687 | U2 db '455395049',0 |
||
688 | U3 db '488118046',0 |
||
1832 | yogev_ezra | 689 | ; |
690 | ; Загрузка массива UIN |
||
691 | ; |
||
2296 | leency | 692 | ; FIXME будет удалена |
1832 | yogev_ezra | 693 | loaduin: |
694 | pushad |
||
695 | mov eax, U1 |
||
696 | mov ebx, uins |
||
697 | mov ecx, 9 |
||
698 | call strcpy |
||
699 | |||
700 | mov ebx, names |
||
701 | call strcpy |
||
702 | |||
703 | mov eax, U2 |
||
704 | mov ebx, uins+UIN_LEN |
||
705 | mov ecx, 9 |
||
706 | call strcpy |
||
707 | |||
708 | mov ebx, names+NAME_LEN |
||
709 | call strcpy |
||
710 | |||
711 | mov eax, U3 |
||
712 | mov ebx, uins+UIN_LEN*2 |
||
713 | mov ecx, 9 |
||
714 | call strcpy |
||
715 | |||
716 | mov ebx, names+NAME_LEN*2 |
||
717 | call strcpy |
||
718 | |||
719 | |||
720 | popad |
||
721 | ret |
||
722 | |||
723 | ; |
||
724 | ; Функция для загрузки КЛ никами и статусами |
||
725 | ; eax <-- Номер уина по порядку в массиве uins, начиная с 0 |
||
726 | ; [ebx] <-- указатель на null-terminated строку с новым именем |
||
727 | ; ecx <-- Новый статус |
||
728 | ; |
||
729 | loadbb: |
||
730 | pushad |
||
731 | pushf |
||
732 | ; |
||
733 | ; Проверяем номер |
||
734 | ; |
||
735 | cmp eax, UINS |
||
736 | jnc loadbb_end ;>= |
||
737 | |||
738 | |||
739 | ; |
||
740 | ; Удаляем кнопку |
||
741 | ; |
||
742 | push ecx |
||
743 | push ebx |
||
744 | push eax |
||
745 | |||
746 | lea edx, [eax+100] |
||
747 | or edx, 0x80000000 |
||
748 | mov eax, 8 |
||
749 | int 40h |
||
750 | |||
751 | ; |
||
752 | ; Сохраняем новый статус в массиве статусов |
||
753 | ; |
||
754 | pop eax |
||
755 | mov edx, 4 ; DWORD |
||
756 | imul edx, eax |
||
757 | mov [stats+edx], ecx |
||
758 | ; |
||
759 | ; Сохраняем новое имя |
||
760 | ; |
||
761 | mov edi, eax ; edi <-- Uin number |
||
762 | pop eax ; <-- offset of string |
||
763 | mov ebx, eax |
||
764 | call strlen |
||
765 | mov ecx, eax ; Len |
||
766 | |||
767 | |||
768 | mov eax, ebx ;Source |
||
769 | mov edx, NAME_LEN |
||
770 | imul edx, edi |
||
771 | lea ebx, [names+edx] ; Dest |
||
772 | call strcpy |
||
773 | mov [names+edx+ecx], byte 0 |
||
774 | |||
775 | xchg edi, eax ; eax - счетик, edi - указатель на строку |
||
776 | |||
777 | pop ecx |
||
778 | push edi |
||
779 | ; рисуем кнопку |
||
780 | ; Цвет зависит от статуса UIN |
||
781 | |||
782 | cmp cx, -1 |
||
783 | jz l_offline |
||
784 | cmp cx, 1 |
||
785 | jz l_away |
||
786 | cmp cx, 2 |
||
787 | jz l_dnd |
||
788 | cmp cx, 4 |
||
789 | jz l_na |
||
790 | cmp cx, 10h |
||
791 | jz l_bisy |
||
792 | cmp cx, 20h |
||
793 | jz l_free4chat |
||
794 | cmp cx, 100h |
||
795 | jz l_invis |
||
796 | ; Online |
||
797 | mov esi, 0x4466AA |
||
798 | jmp l_dr |
||
799 | |||
800 | l_offline: |
||
801 | mov esi, 0xBEBEBE |
||
802 | jmp l_dr |
||
803 | |||
804 | l_away: |
||
805 | mov esi, 0x14dcc3 |
||
806 | jmp l_dr |
||
807 | |||
808 | l_dnd: |
||
809 | mov esi, 0x14dcc3 |
||
810 | jmp l_dr |
||
811 | |||
812 | l_na: |
||
813 | mov esi, 0x14dcc3 |
||
814 | jmp l_dr |
||
815 | |||
816 | l_bisy: |
||
817 | mov esi, 0x14dcc3 |
||
818 | jmp l_dr |
||
819 | |||
820 | l_free4chat: |
||
821 | mov esi, 0x2233FF |
||
822 | jmp l_dr |
||
823 | |||
824 | l_invis: |
||
825 | mov esi, 0xD0D0D0 |
||
826 | |||
827 | l_dr: |
||
828 | |||
829 | mov bx, [x_bb] |
||
830 | shl ebx, 16 |
||
831 | mov bx, [bb_width] |
||
832 | ;push ecx |
||
833 | mov edx, eax |
||
834 | lea edx, [edx+100] ; ID |
||
835 | mov edi, eax |
||
836 | mov cx, [y_bb] |
||
837 | movzx eax, [bb_height] |
||
838 | add ax, [bb_dist] |
||
839 | imul eax, edi |
||
840 | add ecx, eax |
||
841 | shl ecx, 16 |
||
842 | mov cx, [bb_height] |
||
843 | mov eax, 8 |
||
844 | int 40h |
||
845 | |||
846 | ; |
||
847 | ; Надпись на кнопке |
||
848 | ; |
||
849 | add ebx, 50000h ; Смещение от левого края |
||
850 | shr ecx, 16 |
||
851 | movzx eax, [bb_height] |
||
852 | shr eax, 1 ; /2 |
||
853 | sub eax, 3 ; смещение вверх от центра |
||
854 | add ecx, eax ; + половина размера кнопки |
||
855 | mov bx, cx |
||
856 | mov ecx, 0x80FFFFFF ; Цвет |
||
857 | pop edx |
||
858 | mov esi, -1 |
||
859 | mov eax, 4 |
||
860 | int 40h |
||
861 | |||
862 | |||
863 | |||
864 | loadbb_end: |
||
865 | |||
866 | popf |
||
867 | popad |
||
2296 | leency | 868 | ret |
869 | |||
870 | ; |
||
871 | ; |
||
872 | ; Отладочная функция - выводит область памяти |
||
873 | ; EAX - указатель на область |
||
874 | ; EBX - количество байт |
||
875 | ; |
||
876 | |||
877 | print_mem: |
||
878 | push eax |
||
879 | push ebx |
||
880 | push ecx |
||
881 | push edx |
||
882 | push esi |
||
883 | |||
884 | xor ecx, ecx |
||
885 | xor esi, esi |
||
886 | |||
887 | |||
888 | pm_loop: |
||
889 | cmp ecx, ebx |
||
890 | jz pm_exit |
||
891 | |||
892 | |||
893 | mov dl, [eax + ecx] |
||
894 | shr dl, 4 ;Сдвинуть на 4 разряда вправо |
||
895 | |||
896 | cmp dl, 0x0A |
||
897 | jnb pm_chars |
||
898 | |||
899 | or dl, 0x30 |
||
900 | jmp pm_write |
||
901 | |||
902 | pm_chars: |
||
903 | add dl, 0x37 |
||
904 | |||
905 | pm_write: |
||
906 | mov [membuff + esi], dl |
||
907 | inc esi |
||
908 | ; |
||
909 | ; |
||
910 | |||
911 | mov dl, [eax + ecx] |
||
912 | and dl, 0x0F |
||
913 | |||
914 | cmp dl, 0x0A |
||
915 | jnb pm_chars2 |
||
916 | |||
917 | or dl, 0x30 |
||
918 | jmp pm_write2 |
||
919 | |||
920 | pm_chars2: |
||
921 | add dl, 0x37 |
||
922 | |||
923 | pm_write2: |
||
924 | mov [membuff + esi], dl |
||
925 | inc esi |
||
926 | |||
927 | |||
928 | mov [membuff + esi], 0x20 |
||
929 | inc esi |
||
930 | |||
931 | cmp esi, MEMBUFF_SIZE - 2 |
||
932 | jb pm_nwrite |
||
933 | ; |
||
934 | ; вывести буфер |
||
935 | mov [membuff + esi], byte 0 |
||
936 | |||
937 | push eax |
||
938 | push ebx |
||
939 | |||
940 | mov eax, membuff |
||
941 | xor ebx, ebx |
||
942 | xor esi, esi |
||
943 | |||
944 | call writemsg |
||
945 | |||
946 | pop ebx |
||
947 | pop eax |
||
948 | |||
949 | pm_nwrite: |
||
950 | |||
951 | inc ecx |
||
952 | jmp pm_loop |
||
953 | |||
954 | |||
955 | |||
956 | pm_exit: |
||
957 | |||
958 | mov [membuff + esi], byte 0 |
||
959 | |||
960 | |||
961 | mov eax, membuff |
||
962 | xor ebx, ebx |
||
963 | xor esi, esi |
||
964 | |||
965 | call writemsg |
||
966 | |||
967 | pop esi |
||
968 | pop edx |
||
969 | pop ecx |
||
970 | pop ebx |
||
971 | pop eax |
||
972 | ret-->-->-->-->-->--EAX> |