Subversion Repositories Kolibri OS

Rev

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