Subversion Repositories Kolibri OS

Rev

Rev 1832 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. ;
  2. ; ­ à¨á®¢ âì ¯àאַ㣮«ì­¨ª
  3. ; x1,y1 ---------|
  4. ; |              |
  5. ; |              |
  6. ; |-------------x2,y2
  7. ;
  8.   macro rect x1, y1, x2, y2, color
  9.    {
  10.      pushad
  11.  
  12.      ;mov edx, color
  13.      ; ------------
  14.      ;mov eax, 38
  15.      mov ebx, x1
  16.      shl ebx, 16
  17.      add ebx, x2
  18.      mov ecx, y1
  19.      shl ecx, 16
  20.      add ecx, y1
  21.      ;int 40h
  22.      mcall 38, ebx, ecx, color
  23.  
  24.      ; ------------
  25.      ;mov eax, 38
  26.      mov ebx, x1
  27.      shl ebx, 16
  28.      add ebx, x2
  29.      mov ecx, y2
  30.      shl ecx, 16
  31.      add ecx, y2
  32.      ;int 40h
  33.      mcall 38, ebx, ecx, color
  34.      ; |
  35.      ; |
  36.      ; |
  37.      ;mov eax, 38
  38.      mov ebx, x1
  39.      shl ebx, 16
  40.      add ebx, x1
  41.      mov ecx, y1
  42.      shl ecx, 16
  43.      add ecx, y2
  44.      ;int 40h
  45.      mcall 38, ebx, ecx, color
  46.      ; |
  47.      ; |
  48.      ; |
  49.      ;mov eax, 38
  50.      mov ebx, x2
  51.      shl ebx, 16
  52.      add ebx, x2
  53.      mov ecx, y1
  54.      shl ecx, 16
  55.      add ecx, y2
  56.      ;int 40h
  57.      mcall 38, ebx, ecx, color
  58.      
  59.      popad
  60.    }
  61.  
  62. ;
  63. ;   ‚뢮¤ ­  íªà ­ ¡ãä¥à  á® áâப ¬¨
  64. ;
  65.  
  66. scbuff db 80*41 dup 0
  67. ; 60 - ¤«¨­  áâப¨
  68. ; 41 - ª®«¨ç¥á⢮ áâப
  69. ;
  70. ind db 0   ; ’¥ªã騩 ¨­¤¥ªá
  71. ;
  72. ;
  73. x_s dw 15   ;  Š®®à¤¨­ âë «¥¢®£® ¢¥àå­¥£® 㣫   FIXIT
  74. y_s dw 38  ;
  75.  
  76. ; ‚ëá®â  áâப¨
  77. SH = 10
  78.              
  79. xlen dw 80   ; ¤«¨­  áâப¨
  80. ;ylen dw 128   ; ª®«¨ç¥á⢮ áâப
  81. ylen dw 40
  82.  
  83. ;®á«¥¤­¨¥ 4 ¡ ©â  ¢ áâப¥ ®¡®§­ ç îâ 梥â
  84.  
  85.   printbuff:
  86.     pushad
  87.  
  88.     ;
  89.     ;  à¨á㥬 ¡¥«ë© ¯àאַ㣮«ì­¨ª
  90.     ;
  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
  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
  150.     ;mov eax, 4
  151.    ;mov esi, -1               ; For Menuet
  152.     ;int 40h
  153.     mcall 4, ebx, ecx, edx
  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.     {
  168.      local ..string, ..label, ..end, ..loop, ..fin, ..n_inc
  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.  
  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.  
  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]
  208.      jz ..n_inc
  209.      inc bl
  210.      jmp ..fin
  211.    ..n_inc:
  212.     xor bl, bl
  213.  
  214.    ..fin:
  215.      mov [ind], bl
  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:
  232.    
  233.     mcall 8, (x*65536+xlen), (y*65536+ylen), id, 0x4466aa
  234.  
  235.     mcall 4, ((x+5)*65536+y+ylen/2-3), 0x80FFFFFF, ..string
  236.  
  237.     popad
  238.    }
  239.  
  240. ;
  241. ; Žâ« ¤®ç­ë© ¢ë¢®¤ ¤ ­­ëå
  242. ;
  243.   macro data_debug str, rg
  244.     {
  245.      pushad
  246.      local ..string, ..end, ..loop, ..strend, ..fin, ..label, ..n_inc
  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.  
  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.  
  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]
  291.      jz ..n_inc
  292.      inc bl
  293.      jmp ..fin
  294.     ..n_inc:
  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
  362.      xor edi, edi
  363.  
  364.      
  365.    wm_loop:
  366.      xor esi, esi            ; …᫨ 1 - ¥áâì ¥é¥ á¨¬¢®«ë ¢ áâப¥
  367.      lea eax, [eax+edi]
  368.  
  369.      push ebx
  370.      push eax
  371.  
  372.      xor eax, eax
  373.      xor ebx, ebx
  374.  
  375.  
  376.      mov bl, [ind]
  377.      mov ax, [xlen]
  378.      imul ebx, eax
  379.      add ebx, scbuff
  380.  
  381.  
  382.  
  383.  
  384.      ;
  385.      ;  §¡¨¢ ¥¬ áâபã á®®¡é¥­¨ï ­  ­¥áª®«ìª® áâப ¯® xlen-4 (â.ª ¢ ª®­æ¥ ¤¢®©­®¥ á«®¢® - 梥â áâப¨)
  386.      ;
  387.  
  388.  
  389.      pop eax
  390.      mov edx, eax
  391.      call strlen
  392.  
  393.      movzx ecx, [xlen]
  394.      cmp eax, ecx
  395.      jc @f            ;<
  396.  
  397.      movzx edi, [xlen]
  398.      lea edi, [edi-4]
  399.  
  400.      mov ecx, eax
  401.      inc esi
  402.  
  403.  
  404.     @@:
  405.      
  406.  
  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.  
  419.      xor eax, eax
  420.      mov al, [ind]
  421.      cmp ax, [ylen]
  422.      jz @f
  423.      inc al
  424.      jmp ..fin
  425.    @@:
  426.     xor al, al
  427.  
  428.    ..fin:
  429.      mov [ind], al
  430.      mov ebx, ecx   ; 梥â
  431.      mov eax, edx   ; 㪠§ â¥«ì ­  áâபã
  432.  
  433.      cmp esi, 0
  434.      jnz wm_loop
  435.  
  436.                          
  437.      call printbuff
  438.  
  439.     popad
  440.   ret
  441.  
  442. ;
  443. ;
  444.  
  445.  
  446.  
  447. ; <--EAX       ¥à¥¢®¤ ¨§ 16 ¢ 10 ä®à¬ã
  448. ; -->[ebx]     áâப 
  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           ; ˜¨à¨­  ª­®¯®ª
  530. bb_height dw 12          ; ¢ëá®â  ª­®¯®ª
  531. ;
  532. bb_dist  dw 6           ;  ááâ®ï­¨¥ ¬¥¦¤ã ª­®¯ª ¬¨
  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, ª­®¯ªã à¨á®¢ âì ­¥ ­ ¤®
  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
  558.     imul ebx, ecx
  559.  
  560.     mov al, [uins + ebx]
  561.     cmp al, 0
  562.     jz bb_end
  563.  
  564.  
  565.  
  566.  
  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            ; „«¨­ 
  670. UINS    = 22            ; Š®«¨ç¥á⢮
  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. ;
  686. U1 db '405577261',0
  687. U2 db '455395049',0
  688. U3 db '488118046',0
  689. ;
  690. ; ‡ £à㧪  ¬ áᨢ  UIN
  691. ;
  692. ; FIXME ¡ã¤¥â 㤠«¥­ 
  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
  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
  973.