Subversion Repositories Kolibri OS

Rev

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.  
  23.      ; ------------
  24.      mov eax, 38
  25.      mov ebx, x1
  26.      shl ebx, 16
  27.      add ebx, x2
  28.      mov ecx, y2
  29.      shl ecx, 16
  30.      add ecx, y2
  31.      int 40h
  32.      ; |
  33.      ; |
  34.      ; |
  35.      mov eax, 38
  36.      mov ebx, x1
  37.      shl ebx, 16
  38.      add ebx, x1
  39.      mov ecx, y1
  40.      shl ecx, 16
  41.      add ecx, y2
  42.      int 40h
  43.      ; |
  44.      ; |
  45.      ; |
  46.      mov eax, 38
  47.      mov ebx, x2
  48.      shl ebx, 16
  49.      add ebx, x2
  50.      mov ecx, y1
  51.      shl ecx, 16
  52.      add ecx, y2
  53.      int 40h
  54.  
  55.      popad
  56.    }
  57.  
  58. ;
  59. ;   ‚뢮¤ ­  íªà ­ ¡ãä¥à  á® áâப ¬¨
  60. ;
  61.  
  62. scbuff db 512*128 dup 0
  63. ; 512 - ¤«¨­  áâப¨
  64. ; 128 - ª®«¨ç¥á⢮ áâப
  65. ;
  66. ind db 0   ; ’¥ªã騩 ¨­¤¥ªá
  67. ;
  68. ;
  69. x_s dw 15   ;  Š®®à¤¨­ âë «¥¢®£® ¢¥àå­¥£® 㣫   FIXIT
  70. y_s dw 38  ;
  71.  
  72. ; ‚ëá®â  áâப¨
  73. SH = 10
  74.              
  75. xlen dw 512   ; ¤«¨­  áâப¨
  76. ;ylen dw 128   ; ª®«¨ç¥á⢮ áâப
  77. ylen dw 40
  78.  
  79. ;®á«¥¤­¨¥ 4 ¡ ©â  ¢ áâப¥ ®¡®§­ ç îâ 梥â
  80.  
  81.   printbuff:
  82.     pushad
  83.  
  84.     ;
  85.     ;  à¨á㥬 ¡¥«ë© ¯àאַ㣮«ì­¨ª
  86.     ;
  87.     mov eax, 13
  88.     mov ebx, 15*65536+480
  89.     mov ecx, 31*65536+418
  90.     mov edx, 0FFFFFFh
  91.     int 40h
  92.  
  93.  
  94.  
  95.     xor ecx, ecx ; ‘ç¥â稪
  96.     ;xor eax, eax
  97.     xor ebx, ebx
  98.     ;xor edx, edx
  99.  
  100.   pb_loop:
  101.     xor edx, edx
  102.     xor eax, eax
  103.     mov dl, [ind]     ;  ˆ­¤¥ªá
  104.     mov ax, [ylen]
  105.     ;mul edx
  106.     cmp ecx, eax
  107.     ja pr_end
  108.     ;
  109.     ;
  110.     add edx, ecx    ;à¨¡ ¢¨¬ áç¥â稪
  111.     xor eax, eax
  112.     mov ax, [ylen]
  113.     cmp edx, eax    ;ˆ­¤¥ªá ¬¥­ìè¥ ª®«¨ç¥á⢠ áâப
  114.     jna @f           ;<=
  115.     sub edx, eax    ;…᫨ ¡®«ìè¥, áç¨â ¥¬ á ­ ç « 
  116.     dec edx
  117.   @@:
  118.     ;
  119.     mov bx, [x_s]    ; Š®®à¤¨­ â  X
  120.     shl ebx, 16      ;
  121.     push ecx
  122.     mov eax, SH       ; ‚ëç¨á«ï¥¬ ¬¥á⮯®«®¦¥­¨¥ áâப¨
  123.     imul eax, ecx     ;
  124.     ;mov ecx, eax
  125.     ;xor eax, eax
  126.  
  127.     ;mov ax , [x_s]
  128.     xor ecx, ecx
  129.     mov cx, [y_s]
  130.     add ecx, eax
  131.     add ebx, ecx    ; Š®®à¤¨­ â  Y
  132.     ;
  133.     xor eax, eax
  134.     mov ax, [xlen]  ;¤«¨­  áâப¨
  135.     imul edx, eax         ;“¬­®¦ ¥¬ áç¥â稪 ­  ¤«¨­ã áâப¨, ¯®«ãç ¥¬ ᬥ饭¨¥ ®â­®á¨â¥«ì­® ­ ç «  ¡ãä¥à 
  136.     ;mov edx, eax
  137.     add edx, scbuff
  138.  
  139.     xor eax, eax
  140.     mov ax, [xlen]
  141.     sub eax, 4
  142.     xor ecx, ecx
  143.     mov ecx, dword [edx+eax]  ; ®á«¥¤­¨¥ 4  ©â  á 梥⮬
  144.     or ecx, 0x80000000        ; ‚뢮¤¨âì ASCIIZ
  145.     mov eax, 4
  146.    mov esi, -1               ; For Menuet
  147.     int 40h
  148.     pop ecx
  149.     inc ecx
  150.     jmp pb_loop
  151.  
  152.  
  153.   pr_end:
  154.     popad
  155.   ret
  156.  
  157. ;
  158. ;  Žâ« ¤®ç­ë¥ á®®¡é¥­¨ï
  159. ;
  160.   macro write_debug str
  161.     {
  162.      local ..string, ..label, ..end, ..loop, ..fin
  163.      jmp ..label
  164.  
  165.      ..string db str, 0
  166.  
  167.     ..label:
  168.      pushad
  169.      xor eax, eax
  170.      xor ebx, ebx
  171.      xor ecx, ecx
  172.      xor edx, edx
  173.  
  174.      mov bl, [ind]
  175.      mov ax, [xlen]
  176.      imul ebx, eax
  177.      add ebx, scbuff
  178.  
  179.    ..loop:
  180.      mov dl, [..string+ecx]
  181.      cmp dl, 0
  182.      jz ..end
  183.      mov [ebx+ecx], dl
  184.      inc ecx
  185.      jmp ..loop
  186.      
  187.    ..end:
  188.      mov [ebx+ecx], dl
  189.      xor ebx, ebx
  190.      mov bl, [ind]
  191.      cmp bx, [ylen]
  192.      jz @f
  193.      inc bl
  194.      jmp ..fin
  195.    @@:
  196.     xor bl, bl
  197.  
  198.    ..fin:
  199.      mov [ind], bl
  200.      call printbuff
  201.      ;call draw_window
  202.      popad
  203.     }
  204.  
  205. ;
  206. ;  Š­®¯ª 
  207. ;
  208.   macro draw_button x, y, xlen, ylen, id, str
  209.    {
  210.     pushad
  211.     local ..string, ..label
  212.     jmp ..label
  213.     ..string db str, 0
  214.  
  215.     ..label:
  216.     mov eax, 8
  217.     mov ebx, x*65536+xlen
  218.     mov ecx, y*65536+ylen
  219.     mov edx, id
  220.     mov esi, 0x4466aa
  221.     int 40h
  222.  
  223.     mov eax, 4
  224.     mov ebx, (x+5)*65536+y+ylen/2-3
  225.     xor ecx, ecx
  226.     or ecx, 0x80FFFFFF
  227.     mov edx, ..string
  228.     int 40h
  229.  
  230.     popad
  231.    }
  232.  
  233. ;
  234. ; Žâ« ¤®ç­ë© ¢ë¢®¤ ¤ ­­ëå
  235. ;
  236.   macro data_debug str, rg
  237.     {
  238.      pushad
  239.      local ..string, ..end, ..loop, ..strend, ..fin, ..label
  240.      jmp ..label
  241.      ..string db str, 20h, 0, 0, 0, 0, 0, 0, 0, 0, 0
  242.      ..strend:
  243.  
  244.      ..label:
  245.      ;xor eax, eax
  246.      ;xor ebx, ebx
  247.      xor ecx, ecx
  248.      xor edx, edx
  249.  
  250.      mov eax, rg
  251.      lea ebx, [..strend-9]
  252.      call int2str
  253.  
  254.      xor eax, eax
  255.      xor ebx, ebx
  256.  
  257.      mov bl, [ind]
  258.      mov ax, [xlen]
  259.      imul ebx, eax
  260.      add ebx, scbuff
  261.  
  262.    ..loop:
  263.      mov dl, [..string+ecx]
  264.      cmp dl, 0
  265.      jz ..end
  266.      mov [ebx+ecx], dl
  267.      inc ecx
  268.      jmp ..loop
  269.      
  270.    ..end:
  271.      mov [ebx+ecx], dl
  272.      xor ebx, ebx
  273.      mov bl, [ind]
  274.      cmp bx, [ylen]
  275.      jz @f
  276.      inc bl
  277.      jmp ..fin
  278.     @@:
  279.      xor bl, bl
  280.  
  281.     ..fin:
  282.      mov [ind], bl
  283.  
  284.  
  285.  
  286.      call printbuff
  287.      ;call draw_window
  288.  
  289.      popad
  290.     }
  291.  
  292. ; <--EAX
  293. ; -->[ebx]
  294. ;
  295.   int2str:
  296.     pushf
  297.     ;push ebx
  298.     push ecx
  299.     push edx
  300.     push esi
  301.  
  302.     ;xor ebx, ebx
  303.     xor ecx, ecx
  304.  
  305.    i_loop:
  306.     mov edx, eax
  307.     push ecx
  308.     shl ecx, 2
  309.     mov esi, 28
  310.     sub esi, ecx
  311.     mov ecx, esi
  312.     shr edx, cl
  313.     pop ecx
  314.     and dl, 0fh    ;Žâ¤¥«¨âì ¬« ¤è¨¥ 4 ¡¨â 
  315.     cmp dl, 0Ah    ;ãª¢ 
  316.     jnc @f
  317.     or dl, 0x30
  318.     jmp i_n1
  319.  
  320.   @@:
  321.     sub dl, 9
  322.     or dl, 0x40
  323.   i_n1:
  324.     mov [ebx+ecx], dl
  325.     inc ecx
  326.     cmp ecx, 8
  327.     jnz i_loop
  328.  
  329.    
  330.     pop esi
  331.     pop edx
  332.     pop ecx
  333.     ;pop ebx
  334.     popf
  335.   ret
  336.  
  337. ;
  338. ;
  339. CP866 db '€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯àáâãäåæçèéêëìíîï'
  340.  
  341. ;
  342. ;  ¥à¥ª®¤¨à®¢ª  ¨§ cp1251 ¢ cp866
  343. ;  
  344. ;  [eax] <-- Null-terminated string
  345. ;
  346.  
  347.   win2dos:
  348.     pushad
  349.     pushf
  350.  
  351.     xor ebx, ebx
  352.     xor ecx, ecx
  353.     ;xor edx, edx
  354.  
  355.   w2d_loop:
  356.     mov bl, [eax+ecx]
  357.     cmp bl, 0
  358.     jz  w2d_end
  359.     cmp bl, 0A8h              ; ð
  360.     jz  w2d_yo1
  361.     cmp bl, 0B8h              ; ñ
  362.     jz  w2d_yo2
  363.     cmp bl, 0C0h              ; ãááª ï ¡ãª¢ 
  364.     jnc w2d_rchar
  365.     inc ecx
  366.     jmp w2d_loop
  367.  
  368.   w2d_yo1:
  369.     mov [eax+ecx], byte 0F0h
  370.     inc ecx
  371.     jmp w2d_loop
  372.  
  373.   w2d_yo2:
  374.     mov [eax+ecx], byte 0F1h
  375.     inc ecx
  376.     jmp w2d_loop
  377.  
  378.   w2d_rchar:
  379.     sub bl, 0C0h
  380.     mov bl, [CP866+ebx]
  381.     mov [eax+ecx], bl
  382.     inc ecx
  383.     jmp w2d_loop
  384.  
  385.  
  386.   w2d_end:
  387.  
  388.     popf
  389.     popad
  390.   ret
  391.  
  392.  
  393. CP1251 db 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'
  394.  
  395. ;
  396. ; ¥à¥ª®¤¨à®¢ª  ¨§ CP866 ¢ CP1251
  397. ; [eax] <-- Null termainated string
  398. ;
  399.  
  400.    dos2win:
  401.      pushf
  402.      pushad
  403.  
  404.      xor ebx, ebx
  405.      xor ecx, ecx
  406.  
  407.      dec ecx
  408.  
  409.    d2w_loop:
  410.      inc ecx
  411.      mov bl, [eax+ecx]
  412.      cmp bl, 0
  413.      jz  d2w_end
  414.      cmp bl, 80h
  415.      jnc d2w_rchar
  416.      
  417.      ;inc ecx
  418.      jmp d2w_loop
  419.  
  420.    d2w_yo1:
  421.      mov byte [eax+ecx], 0A8h
  422.      ;inc ecx
  423.      jmp d2w_loop
  424.  
  425.    d2w_yo2:
  426.      mov byte [eax+ecx], 0B8h
  427.      ;inc ecx
  428.      jmp d2w_loop
  429.  
  430.    d2w_rchar:
  431.      cmp bl, 0B0h
  432.      jnc d2w_rchar2
  433.      
  434.      sub bl, 80h
  435.      mov bl, [CP1251+ebx]
  436.      mov [eax+ecx], bl
  437.      jmp d2w_loop
  438.  
  439.    d2w_rchar2:
  440.      cmp bl, 0E0h
  441.      jc d2w_loop
  442.      cmp bl, 0F0h
  443.      jz d2w_yo1
  444.      cmp bl, 0F1h
  445.      jz d2w_yo2
  446.      cmp bl, 0F2h
  447.      jnc d2w_loop
  448.      add bl, 10h
  449.      mov [eax+ecx], bl
  450.      jmp d2w_loop
  451.  
  452.  
  453.      d2w_end:
  454.  
  455.      popad
  456.      popf
  457.    ret
  458.  
  459.  
  460. ;
  461. ;  „«ï ¢ë¢®¤  á®®¡é¥­¨©
  462. ;  [eax] <-- null-terminated string
  463. ;   ebx <-- color
  464. ;
  465.   writemsg:
  466.     pushad
  467.      push ebx
  468.      push eax
  469.  
  470.      xor eax, eax
  471.      xor ebx, ebx
  472.  
  473.      mov bl, [ind]
  474.      mov ax, [xlen]
  475.      imul ebx, eax
  476.      add ebx, scbuff
  477.  
  478.      pop eax
  479.      mov edx, eax
  480.      call strlen
  481.      mov ecx, eax
  482.      mov eax, edx
  483.      call strcpy
  484.  
  485.      mov [ebx+ecx], byte 0x00
  486.  
  487.      xor eax, eax
  488.      mov ax, [xlen]
  489.      sub eax, 4
  490.      pop ecx
  491.      mov dword [ebx+eax], ecx  ; ®á«¥¤­¨¥ 4  ©â  á 梥⮬
  492.  
  493.  
  494.      xor ebx, ebx
  495.      mov bl, [ind]
  496.      cmp bx, [ylen]
  497.      jz @f
  498.      inc bl
  499.      jmp ..fin
  500.    @@:
  501.     xor bl, bl
  502.  
  503.    ..fin:
  504.      mov [ind], bl
  505.  
  506.      call printbuff
  507.      ;call draw_window
  508.  
  509.     popad
  510.   ret
  511.  
  512. ;
  513. ;
  514.  
  515.  
  516.  
  517. ; <--EAX       ¥à¥¢®¤ ¨§ 16 ¢ 10 ä®à¬ã
  518. ; -->[ebx]
  519. ; --> eax ¤«¨­ 
  520.   int2strd:
  521.     pushf
  522.     ;push ebx
  523.     push ecx
  524.     push edx
  525.     push esi
  526.     ;push edi
  527.  
  528.     ;xor ebx, ebx
  529.     xor ecx, ecx
  530.     mov esi, 10
  531.    
  532.  
  533.    id_loop:
  534.     xor edx, edx
  535.    
  536.     div esi
  537.  
  538.     and dl, 0fh    ;Žâ¤¥«¨âì ¬« ¤è¨¥ 4 ¡¨â 
  539.     or dl, 0x30
  540.    
  541.     mov [ebx+ecx], dl
  542.     cmp eax, 10
  543.     inc ecx
  544.     jnc id_loop
  545.  
  546.     and al, 0fh    ;Žâ¤¥«¨âì ¬« ¤è¨¥ 4 ¡¨â 
  547.     or al, 0x30
  548.  
  549.     mov [ebx+ecx], al
  550.     ;mov [ebx+ecx+1], byte 0
  551.     inc ecx
  552.     mov eax, ecx
  553.     ; ¯¥à¥¢¥à­ãâì ¯®«ã祭­ãî áâபã
  554.     ;
  555.     ;xor edx, edx
  556.  
  557.     ;mov esi, 2
  558.     ;div esi
  559.     shr eax, 1
  560.  
  561.     xor edx, edx
  562.  
  563.    id_loop2:
  564.     cmp eax, 0
  565.     jz id_end
  566.  
  567.  
  568.     mov dl, [ebx+eax-1]
  569.     lea esi, [ebx+ecx]
  570.     sub esi, eax
  571.     mov dh, [esi]
  572.  
  573.     mov [ebx+eax-1], dh
  574.     mov [esi], dl
  575.  
  576.     dec eax
  577.     jmp id_loop2
  578.  
  579.  
  580.  
  581.  
  582.     id_end:
  583.     mov eax, ecx
  584.  
  585.     ;pop edi
  586.     pop esi
  587.     pop edx
  588.     pop ecx
  589.     ;pop ebx
  590.     popf
  591.   ret
  592.  
  593. ;
  594. ;
  595. ;
  596. x_bb dw 550                ;  Š®®à¤¨­ âë «¥¢®£® ¢¥àå­¥£® 㣫 
  597. y_bb dw 30                ;
  598. ;
  599. bb_width dw 100           ; ˜¨à¨­  ª­®¯®ª
  600. bb_height dw 15          ; ¢ëá®â  ª­®¯®ª
  601. ;
  602. bb_dist  dw 10           ;  ááâ®ï­¨¥ ¬¥¦¤ã ª­®¯ª ¬¨
  603.  
  604. ; ˆ¤¥­â¨ä¨ª â®àë ª­®¯®ª ­ ç¨­ ï á 100
  605. ;
  606. ;  „«ï Š‹
  607. ;
  608. ;
  609.   buttonbox:
  610.     pushad
  611.     pushf
  612.  
  613.     xor ecx, ecx
  614.     xor eax, eax
  615.     xor ebx, ebx
  616.  
  617.   bb_loop:
  618.  
  619.     ; à®¢¥à塞 ¯¥à¢ë© ¡ ©â 㨭 , ¥á«¨ 0, ª­®¯ªã à¨á®¢ âì ­¥ ­ ¤®
  620.     mov ebx, NAME_LEN
  621.     imul ebx, ecx
  622.  
  623.     mov al, [names+ebx]
  624.     cmp al, 0
  625.     jz bb_end
  626.     ; à¨á㥬 ª­®¯ªã
  627.     ; –¢¥â § ¢¨á¨â ®â áâ âãá  UIN
  628.     mov ebx, 4
  629.     imul ebx, ecx
  630.     mov eax, [stats+ebx]     ; ‚ áâ à襬 á«®¢¥ ¤®¯®«­¨â¥«ì­ë© áâ âãá
  631.     cmp ax, -1
  632.     jz bb_offline
  633.     cmp ax, 1
  634.     jz bb_away
  635.     cmp ax, 2
  636.     jz bb_dnd
  637.     cmp ax, 4
  638.     jz bb_na
  639.     cmp ax, 10h
  640.     jz bb_bisy
  641.     cmp ax, 20h
  642.     jz bb_free4chat
  643.     cmp ax, 100h
  644.     jz bb_invis
  645.     ; Online
  646.     mov esi, 0x4466AA
  647.     jmp bb_dr
  648.  
  649.   bb_offline:
  650.     mov esi, 0xBEBEBE
  651.     jmp bb_dr
  652.  
  653.   bb_away:
  654.     mov esi, 0x14dcc3
  655.     jmp bb_dr
  656.  
  657.   bb_dnd:
  658.     mov esi, 0x14dcc3
  659.     jmp bb_dr
  660.  
  661.   bb_na:
  662.     mov esi, 0x14dcc3
  663.     jmp bb_dr
  664.  
  665.   bb_bisy:
  666.     mov esi, 0x14dcc3
  667.     jmp bb_dr
  668.  
  669.   bb_free4chat:
  670.     mov esi, 0x2233FF
  671.     jmp bb_dr
  672.  
  673.   bb_invis:
  674.     mov esi, 0xD0D0D0
  675.  
  676.   bb_dr:
  677.  
  678.     mov bx, [x_bb]
  679.     shl ebx, 16
  680.     mov bx, [bb_width]
  681.     ;push ecx
  682.     mov edx, ecx
  683.     lea edx, [edx+100]      ; ID
  684.     mov edi, ecx
  685.     mov cx, [y_bb]
  686.     movzx eax, [bb_height]
  687.     add ax, [bb_dist]
  688.     imul eax, edi
  689.     add ecx, eax
  690.     shl ecx, 16
  691.     mov cx, [bb_height]
  692.     mov eax, 8
  693.     int 40h
  694.      
  695.     ;
  696.     ;  ¤¯¨áì ­  ª­®¯ª¥
  697.     ;
  698.     add ebx, 50000h     ; ‘¬¥é¥­¨¥ ®â «¥¢®£® ªà ï
  699.     shr ecx, 16
  700.     movzx eax, [bb_height]
  701.     shr eax, 1          ;  /2
  702.     sub eax, 3          ; ᬥ饭¨¥ ¢¢¥àå ®â 業âà 
  703.     add ecx, eax        ; + ¯®«®¢¨­  à §¬¥à  ª­®¯ª¨
  704.     mov bx, cx
  705.     mov ecx, 0x80FFFFFF ; –¢¥â
  706.     mov edx, names
  707.     mov esi, NAME_LEN
  708.     imul esi, edi
  709.     add edx, esi
  710.     ;mov esi, -1
  711.     mov eax, 4
  712.     int 40h
  713.  
  714.     mov ecx, edi
  715.     inc ecx
  716.     cmp ecx, UINS
  717.     ja bb_end
  718.     jmp bb_loop
  719.  
  720.  
  721.   bb_end:
  722.     popf
  723.     popad
  724.   ret
  725. ;
  726. ; Œ áᨢ á UIN
  727. ;
  728. UIN_LEN = 11            ; „«¨­ 
  729. UINS    = 15            ; Š®«¨ç¥á⢮
  730. ;
  731. uins db UIN_LEN*UINS dup 0
  732. ;
  733. ; ¬ áᨢ á® áâ âãá ¬¨
  734. ;
  735. stats dd UINS dup -1
  736. ;
  737. ; Œ áᨢ á ¨¬¥­ ¬¨
  738. ;
  739. NAME_LEN = 30
  740.  
  741. names db NAME_LEN*UINS dup 0
  742.  
  743. ;
  744. ;
  745. U1 db '123456789',0
  746. U2 db '123456789',0
  747. U3 db '123456789',0
  748. ;
  749. ; ‡ £à㧪  ¬ áᨢ  UIN
  750. ;
  751.   loaduin:
  752.     pushad
  753.     mov eax, U1
  754.     mov ebx, uins
  755.     mov ecx, 9
  756.     call strcpy
  757.  
  758.     mov ebx, names
  759.     call strcpy
  760.  
  761.     mov eax, U2
  762.     mov ebx, uins+UIN_LEN
  763.     mov ecx, 9
  764.     call strcpy
  765.  
  766.     mov ebx, names+NAME_LEN
  767.     call strcpy
  768.  
  769.     mov eax, U3
  770.     mov ebx, uins+UIN_LEN*2
  771.     mov ecx, 9
  772.     call strcpy
  773.  
  774.     mov ebx, names+NAME_LEN*2
  775.     call strcpy
  776.  
  777.  
  778.     popad
  779.   ret
  780.  
  781. ;
  782. ; ”ã­ªæ¨ï ¤«ï § £à㧪¨ Š‹ ­¨ª ¬¨ ¨ áâ âãá ¬¨
  783. ; eax    <--   ®¬¥à 㨭  ¯® ¯®à浪㠢 ¬ áᨢ¥ uins, ­ ç¨­ ï á 0
  784. ; [ebx]  <--   㪠§ â¥«ì ­  null-terminated áâபã á ­®¢ë¬ ¨¬¥­¥¬
  785. ; ecx    <--   ®¢ë© áâ âãá
  786. ;                                  
  787.    loadbb:
  788.      pushad
  789.      pushf
  790.      ;
  791.      ; à®¢¥à塞 ­®¬¥à
  792.      ;
  793.      cmp eax, UINS
  794.      jnc loadbb_end        ;>=
  795.  
  796.  
  797.      ;
  798.      ; “¤ «ï¥¬ ª­®¯ªã
  799.      ;
  800.      push ecx
  801.      push ebx
  802.      push eax
  803.  
  804.      lea edx, [eax+100]
  805.      or edx, 0x80000000
  806.      mov eax, 8
  807.      int 40h
  808.  
  809.      ;
  810.      ; ‘®å࠭塞 ­®¢ë© áâ âãá ¢ ¬ áᨢ¥ áâ âãᮢ
  811.      ;
  812.      pop eax
  813.      mov edx, 4                 ; DWORD
  814.      imul edx, eax
  815.      mov [stats+edx], ecx
  816.      ;
  817.      ; ‘®å࠭塞 ­®¢®¥ ¨¬ï
  818.      ;
  819.      mov edi, eax               ; edi <-- Uin number
  820.      pop eax                    ; <-- offset of string
  821.      mov ebx, eax
  822.      call strlen
  823.      mov ecx, eax               ; Len
  824.  
  825.  
  826.      mov eax, ebx               ;Source
  827.      mov edx, NAME_LEN
  828.      imul edx, edi
  829.      lea ebx, [names+edx]       ; Dest
  830.      call strcpy
  831.      mov [names+edx+ecx], byte 0
  832.  
  833.      xchg edi, eax              ; eax - áç¥â¨ª, edi - 㪠§ â¥«ì ­  áâபã
  834.      
  835.      pop ecx
  836.      push edi
  837.      ; à¨á㥬 ª­®¯ªã
  838.      ; –¢¥â § ¢¨á¨â ®â áâ âãá  UIN
  839.    
  840.      cmp cx, -1
  841.      jz l_offline
  842.      cmp cx, 1
  843.      jz l_away
  844.      cmp cx, 2
  845.      jz l_dnd
  846.      cmp cx, 4
  847.      jz l_na
  848.      cmp cx, 10h
  849.      jz l_bisy
  850.      cmp cx, 20h
  851.      jz l_free4chat
  852.      cmp cx, 100h
  853.      jz l_invis
  854.      ; Online
  855.      mov esi, 0x4466AA
  856.      jmp l_dr
  857.  
  858.    l_offline:
  859.      mov esi, 0xBEBEBE
  860.      jmp l_dr
  861.  
  862.    l_away:
  863.      mov esi, 0x14dcc3
  864.      jmp l_dr
  865.  
  866.    l_dnd:
  867.      mov esi, 0x14dcc3
  868.      jmp l_dr
  869.  
  870.    l_na:
  871.      mov esi, 0x14dcc3
  872.      jmp l_dr
  873.  
  874.    l_bisy:
  875.      mov esi, 0x14dcc3
  876.      jmp l_dr
  877.  
  878.    l_free4chat:
  879.      mov esi, 0x2233FF
  880.      jmp l_dr
  881.  
  882.    l_invis:
  883.      mov esi, 0xD0D0D0
  884.  
  885.    l_dr:
  886.  
  887.      mov bx, [x_bb]
  888.      shl ebx, 16
  889.      mov bx, [bb_width]
  890.      ;push ecx
  891.      mov edx, eax
  892.      lea edx, [edx+100]      ; ID
  893.      mov edi, eax
  894.      mov cx, [y_bb]
  895.      movzx eax, [bb_height]
  896.      add ax, [bb_dist]
  897.      imul eax, edi
  898.      add ecx, eax
  899.      shl ecx, 16
  900.      mov cx, [bb_height]
  901.      mov eax, 8
  902.      int 40h
  903.      
  904.     ;
  905.     ;  ¤¯¨áì ­  ª­®¯ª¥
  906.     ;
  907.     add ebx, 50000h     ; ‘¬¥é¥­¨¥ ®â «¥¢®£® ªà ï
  908.     shr ecx, 16
  909.     movzx eax, [bb_height]
  910.     shr eax, 1          ;  /2
  911.     sub eax, 3          ; ᬥ饭¨¥ ¢¢¥àå ®â 業âà 
  912.     add ecx, eax        ; + ¯®«®¢¨­  à §¬¥à  ª­®¯ª¨
  913.     mov bx, cx
  914.     mov ecx, 0x80FFFFFF ; –¢¥â
  915.     pop edx
  916.    mov esi, -1
  917.     mov eax, 4
  918.     int 40h
  919.  
  920.  
  921.  
  922.    loadbb_end:
  923.  
  924.      popf
  925.      popad
  926.    ret