Subversion Repositories Kolibri OS

Rev

Rev 2465 | Rev 3725 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;                                                              ;;
  3. ;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
  4. ;; Distributed under terms of the GNU General Public License    ;;
  5. ;;                                                              ;;
  6. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  7.  
  8. $Revision: 2987 $
  9.  
  10. ;------------------------------------------------------------------------------
  11. align 4
  12. dtext_asciiz_esi:                          ; for skins title out
  13.         push    eax
  14.         xor     eax, eax
  15.         inc     eax
  16.         jmp     dtext.1
  17. ;------------------------------------------------------------------------------
  18. align 4
  19. dtext:
  20. ; ebx x & y
  21. ; ecx style ( 0xX0000000 ) & color ( 0x00RRGGBB )
  22. ; X = ABnnb:
  23. ; nn = font
  24. ; A = 0 <=> output esi characters; otherwise output ASCIIZ string
  25. ; B = 1 <=> fill background with color eax
  26. ; edx start of text
  27. ; edi 1 force or user area for redirect
  28.         push    eax
  29.         xor     eax, eax
  30. ;--------------------------------------
  31. align 4
  32. .1:
  33.         pushad
  34.         movsx   eax, bx         ; eax=y
  35.         sar     ebx, 16         ; ebx=x
  36.         xchg    eax, ebx        ; eax=x, ebx=y
  37.         cmp     esi, 255
  38.         jb      .loop
  39.  
  40.         mov     esi, 255
  41. ;--------------------------------------
  42. align 4
  43. .loop:
  44.         test    ecx, ecx
  45.         js      .test_asciiz
  46.  
  47.         dec     esi
  48.         js      .end
  49.  
  50.         jmp     @f
  51. ;--------------------------------------
  52. align 4
  53. .test_asciiz:
  54.         cmp     byte [edx], 0
  55.         jz      .end
  56.  
  57.         cmp     byte [esp+28], 1
  58.         jne     @f
  59.  
  60.         dec     esi
  61.         js      .end
  62. ;--------------------------------------
  63. align 4
  64. @@:
  65.         inc     edx
  66.         pushad
  67.         movzx   edx, byte [edx-1]
  68.         test    ecx, 0x10000000
  69.         jnz     .font2
  70.  
  71.         mov     esi, 9
  72.         lea     ebp, [FONT_I+8*edx+edx]
  73. ;--------------------------------------
  74. align 4
  75. .symloop1:
  76.         mov     dl, byte [ebp]
  77.         or      dl, 1 shl 6
  78. ;--------------------------------------
  79. align 4
  80. .pixloop1:
  81.         shr     dl, 1
  82.         jz      .pixloop1end
  83.  
  84.         jnc     .nopix
  85.  
  86.         test    ecx, 0x08000000  ; redirect the output to the user area
  87.         jz      @f
  88.  
  89.         call    draw_text_to_user_area
  90.         jmp     .pixloop1cont
  91. ;--------------------------------------
  92. align 4
  93. @@:
  94.         and     ecx, 0xFBFFFFFF  ;negate 0x04000000 save to mouseunder area
  95. ;        call    [putpixel]
  96.         call    __sys_putpixel
  97.         jmp     .pixloop1cont
  98. ;--------------------------------------
  99. align 4
  100. .nopix:
  101.         test    ecx, 0x40000000
  102.         jz      .pixloop1cont
  103.  
  104.         push    ecx
  105.         mov     ecx, [esp+4+20h+20h]
  106.  
  107.         test    ecx, 0x08000000  ; redirect the output to the user area
  108.         jz      @f
  109.  
  110.         call    draw_text_to_user_area
  111.         pop     ecx
  112.         jmp     .pixloop1cont
  113. ;--------------------------------------
  114. align 4
  115. @@:
  116.         and     ecx, 0xFBFFFFFF  ;negate 0x04000000 save to mouseunder area
  117. ;        call    [putpixel]
  118.         call    __sys_putpixel
  119.         pop     ecx
  120. ;--------------------------------------
  121. align 4
  122. .pixloop1cont:
  123.         inc     eax
  124.         jmp     .pixloop1
  125. ;--------------------------------------
  126. align 4
  127. .pixloop1end:
  128.         sub     eax, 6
  129.         inc     ebx
  130.         inc     ebp
  131.         dec     esi
  132.         jnz     .symloop1
  133.  
  134.         popad
  135.         add     eax, 6
  136.         jmp     .loop
  137. ;--------------------------------------
  138. align 4
  139. .font2:
  140.         add     edx, edx
  141.         lea     ebp, [FONT_II+4*edx+edx+1]
  142.         push    9
  143.         movzx   esi, byte [ebp-1]
  144. ;--------------------------------------
  145. align 4
  146. .symloop2:
  147.         mov     dl, byte [ebp]
  148.         push    esi
  149. ;--------------------------------------
  150. align 4
  151. .pixloop2:
  152.         shr     dl, 1
  153.         jnc     .nopix2
  154.  
  155.         test    ecx, 0x08000000  ; redirect the output to the user area
  156.         jz      @f
  157.  
  158.         call    draw_text_to_user_area
  159.         jmp     .pixloop2cont
  160. ;--------------------------------------
  161. align 4
  162. @@:
  163.         and     ecx, 0xFBFFFFFF  ;negate 0x04000000 save to mouseunder area
  164. ;        call    [putpixel]
  165.         call    __sys_putpixel
  166.         jmp     .pixloop2cont
  167. ;--------------------------------------
  168. align 4
  169. .nopix2:
  170.         test    ecx, 0x40000000
  171.         jz      .pixloop2cont
  172.  
  173.         push    ecx
  174.         mov     ecx, [esp+12+20h+20h]
  175.  
  176.         test    ecx, 0x08000000  ; redirect the output to the user area
  177.         jz      @f
  178.  
  179.         call    draw_text_to_user_area
  180.         pop     ecx
  181.         jmp     .pixloop2cont
  182. ;--------------------------------------
  183. align 4
  184. @@:
  185.         and     ecx, 0xFBFFFFFF  ;negate 0x04000000 save to mouseunder area
  186. ;        call    [putpixel]
  187.         call    __sys_putpixel
  188.         pop     ecx
  189. ;--------------------------------------
  190. align 4
  191. .pixloop2cont:
  192.         inc     eax
  193.         dec     esi
  194.         jnz     .pixloop2
  195.  
  196.         pop     esi
  197.         sub     eax, esi
  198.         inc     ebx
  199.         inc     ebp
  200.         dec     dword [esp]
  201.         jnz     .symloop2
  202.  
  203.         pop     eax
  204.         add     dword [esp+28], esi
  205.         popad
  206.         jmp     .loop
  207. ;--------------------------------------
  208. align 4
  209. .end:
  210.         popad
  211.         pop     eax
  212.         ret
  213. ;------------------------------------------------------------------------------
  214. ; eax = x coordinate
  215. ; ebx = y coordinate
  216. ; ecx = ?? RR GG BB
  217. ; edi = user area
  218. align 4
  219. draw_text_to_user_area:
  220.         pushad
  221.         imul    ebx, [edi+0]
  222.         add     eax, ebx
  223.         shl     eax, 2
  224.         add     eax, edi
  225.         add     eax, 8
  226.         and     ecx, 0xffffff
  227.         or      ecx, 0xff000000  ; not transparent
  228.         mov     [eax], ecx       ; store  pixel
  229.         popad
  230.         ret
  231. ;------------------------------------------------------------------------------
  232. align 4
  233. FONT_I:
  234.   file 'char.mt'
  235. ;------------------------------------------------------------------------------
  236. align 4
  237. FONT_II:
  238.   file 'char2.mt'
  239. ;------------------------------------------------------------------------------