Subversion Repositories Kolibri OS

Rev

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

  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;                                                              ;;
  3. ;; Copyright (C) KolibriOS team 2004-2015. All rights reserved. ;;
  4. ;; Distributed under terms of the GNU General Public License    ;;
  5. ;;                                                              ;;
  6. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  7.  
  8. $Revision: 5839 $
  9.  
  10. dtext_asciiz_esi:
  11.         btr     ecx, 31
  12. dtext:
  13. ; edx -> string
  14. ; esi = number of characters
  15. ; ebx = output coordinates XXXXYYYY h
  16. ; ecx = char color and flags flRRGGBB h
  17. ; fl = ZBFFRSSS b
  18. ; Z=1: edx -> zero terminated string, esi = ?
  19. ; B=1: fill background with color eax
  20. ; R=1: edi -> user area for redirect
  21. ; FF=3: UTF-8 8x16, FF=2: UTF-16LE 8x16, FF=0: 866 6x9
  22. ; SSS = (font multiplier)-1
  23. ; edi=1: force output
  24.         and     eax, 0xFFFFFF
  25.         bt      ecx, 30
  26.         jc      @f
  27.         xor     eax, eax
  28.         dec     eax
  29. @@:
  30.         pushd   0 0 0 eax
  31.         movsx   eax, bx
  32.         sar     ebx, 16
  33.         push    eax ebx edi
  34.         bt      ecx, 27
  35.         jc      .redirect
  36.         mov     ebp, [_display.width]
  37.         xor     edi, edi
  38.         jmp     @f
  39. .ret:
  40.         add     esp, 28
  41.         ret
  42. .redirect:
  43.         mov     ebp, [edi]
  44.         add     edi, 8
  45. @@:
  46.         shl     ebp, 2
  47.         imul    eax, ebp
  48.         shl     ebx, 2
  49.         add     eax, ebx
  50.         js      .ret
  51.         add     edi, eax    ; linear address (32bit)
  52.         mov     eax, ecx
  53.         mov     ebx, ecx
  54.         test    ecx, ecx
  55.         jns     @f
  56.         mov     esi, 256
  57. @@:
  58.         shr     ecx, 24
  59.         and     cl, 7
  60.         inc     ecx
  61.         push    ebp ecx esi
  62.         mov     esi, edx    ; -> string
  63.         or      eax, 0xFF000000
  64.         bt      ebx, 27
  65.         jc      .bufferReady
  66.         mov     eax, 9
  67.         bt      ebx, 29
  68.         jnc     @f
  69.         add     eax, 7
  70. @@:
  71.         imul    eax, ecx
  72.         mov     [esp+32], eax
  73.         imul    ebp, eax
  74.         stdcall kernel_alloc, ebp
  75.         mov     ecx, ebp
  76.         shr     ecx, 2
  77.         mov     [esp+36], eax
  78.         sub     edi, eax
  79.         mov     edx, eax
  80.         mov     eax, [esp+24]
  81.         cmp     eax, -1
  82.         jnz     .background
  83.         mov     [esp+28], edi
  84. .background:
  85.         mov     edi, edx
  86.         rep stosd
  87.         mov     edi, edx
  88.         mov     eax, ebx
  89.         and     eax, 0xFFFFFF
  90. .bufferReady:
  91.         mov     ebp, eax
  92.         xor     edx, edx
  93.         bt      ebx, 29
  94.         jnc     .draw866
  95.         bt      ebx, 28
  96.         jc      .drawUTF8
  97.  
  98. ; Stack map:
  99. ; char counter +0
  100. fontMultiplier = 4
  101. widthX = 8
  102. ; edi +12
  103. ; X +16
  104. ; Y +20
  105. ; background +24
  106. deltaToScreen = 28
  107. ; temp buffer height +32
  108. ; temp buffer pointer +36
  109.  
  110. .drawUTF16:
  111.         dec     dword [esp]
  112.         js      .done
  113.         xor     ebx, ebx
  114.         mov     bx, [esi]
  115.         test    ebx, ebx
  116.         jz      .done
  117.         inc     esi
  118.         inc     esi
  119.         cmp     bx, 1419
  120.         jc      @f
  121.         xor     ebx, ebx
  122. @@:
  123.         pushd   esi edi 16
  124.         shl     ebx, 4
  125.         add     ebx, fontUni
  126.         mov     esi, [esp+12+fontMultiplier]
  127.         call    drawChar
  128.         imul    esi, 8*4
  129.         pop     edi
  130.         pop     edi
  131.         add     edi, esi
  132.         pop     esi
  133.         jmp     .drawUTF16
  134.  
  135. .drawUTF8:
  136.         dec     dword [esp]
  137.         js      .done
  138. @@:
  139.         xor     ebx, ebx
  140.         mov     bl, [esi]
  141.         inc     esi
  142.         test    bl, bl
  143.         jz      .done
  144.         jns     .valid
  145.         shl     bx, 10
  146.         jnc     @b
  147.         shr     bh, 2
  148.         mov     bl, [esi]
  149.         shl     bl, 2
  150.         shr     bx, 2
  151.         inc     esi
  152.         cmp     bx, 1419
  153.         jc      .valid
  154.         shl     bx, 4
  155. @@:
  156.         jns     @f
  157.         inc     esi
  158.         shl     bx, 1
  159.         jmp     @b
  160. @@:
  161.         xor     ebx, ebx
  162. .valid:
  163.         pushd   esi edi 16
  164.         shl     ebx, 4
  165.         add     ebx, fontUni
  166.         mov     esi, [esp+12+fontMultiplier]
  167.         call    drawChar
  168.         imul    esi, 8*4
  169.         pop     edi
  170.         pop     edi
  171.         add     edi, esi
  172.         pop     esi
  173.         jmp     .drawUTF8
  174.  
  175. .draw866:
  176.         dec     dword [esp]
  177.         js      .done
  178.         xor     ebx, ebx
  179.         mov     bl, [esi]
  180.         test    ebx, ebx
  181.         jz      .done
  182.         inc     esi
  183.         pushd   esi edi 9
  184.         lea     ebx, [ebx*8+ebx+font1]
  185.         mov     esi, [esp+12+fontMultiplier]
  186.         call    drawChar
  187.         imul    esi, 6*4
  188.         pop     edi
  189.         pop     edi
  190.         add     edi, esi
  191.         pop     esi
  192.         jmp     .draw866
  193.  
  194. .done:
  195.         mov     ecx, edi
  196.         pop     eax eax eax esi edx ebx ebp ebp ebp
  197.         mov     edi, [esp]
  198.         test    edi, edi
  199.         jnz     @f
  200.         pop     eax
  201.         ret
  202. @@:         ; redraw from buffer to screen
  203.         push    eax
  204.         sub     ecx, edi
  205.         shr     ecx, 2
  206.         add     edx, ecx
  207.         inc     ecx
  208.         push    ecx
  209.         push    edi
  210. .drawPicture:
  211.         mov     eax, -1
  212.         repz scasd
  213.         jcxz    @f
  214.         mov     eax, edx
  215.         sub     eax, ecx
  216.         push    ecx
  217.         mov     ecx, [edi-4]
  218.         xchg    esi, edi
  219.         call    __sys_putpixel
  220.         xchg    esi, edi
  221.         pop     ecx
  222.         jmp     .drawPicture
  223. @@:
  224.         pop     edi
  225.         mov     ecx, [esp]
  226.         add     edi, [esp+4]
  227.         inc     ebx
  228.         push    edi
  229.         dec     ebp
  230.         jnz     .drawPicture
  231.         add     esp, 12
  232.         call    kernel_free
  233.         ret
  234.  
  235. ; scaling/smoothing algorithm
  236. drawChar:
  237.         mov     dl, [ebx]
  238. .raw:
  239.         bsf     eax, edx
  240.         jz      .nextRaw
  241.         imul    eax, esi
  242.         shl     eax, 2
  243.         push    edi
  244.         add     edi, eax
  245.         mov     ecx, esi
  246.         dec     esi
  247.         jnz     .square
  248.         mov     [edi], ebp
  249.         inc     esi
  250.         cmp     [fontSmoothing], 0
  251.         jz      .nextPixel
  252. .checkLeftSubP:     ; subpixel smoothing
  253.         bsf     eax, edx
  254.         dec     eax
  255.         js      .checkRightSubP
  256.         bt      [ebx], eax
  257.         jc      .checkRightSubP
  258.         dec     eax
  259.         js      .checkLeftDownSubP
  260.         bt      [ebx], eax
  261.         jc      .checkRightSubP
  262. .checkLeftDownSubP:
  263.         inc     eax
  264.         bt      [ebx+1], eax
  265.         jnc     .checkLeftUpSubP
  266.         inc     eax
  267.         bt      [ebx+1], eax
  268.         jnc     @f
  269.         bt      [ebx-1], eax
  270.         jc      .checkRightSubP
  271.         dec     eax
  272.         dec     eax
  273.         js      @f
  274.         bt      [ebx+1], eax
  275.         jnc     @f
  276.         inc     eax
  277. .checkLeftUpSubP:
  278.         bt      [ebx-1], eax
  279.         jnc     .checkRightSubP
  280.         inc     eax
  281.         bt      [ebx-1], eax
  282.         jnc     @f
  283.         bt      [ebx+1], eax
  284.         jc      .checkRightSubP
  285.         dec     eax
  286.         dec     eax
  287.         js      @f
  288.         bt      [ebx-1], eax
  289.         jc      .checkRightSubP
  290. @@:
  291.         mov     ecx, [esp+20+deltaToScreen]
  292.         mov     eax, [edi-4]
  293.         test    ecx, ecx
  294.         jz      @f
  295.         pusha
  296.         lea     ebx, [edi+ecx-4]
  297.         shr     ebx, 2
  298.         call    syscall_getpixel
  299.         popa
  300. @@:
  301.         push    ebx edx
  302.         mov     ebx, ebp
  303.         xor     ecx, ecx
  304.         mov     cl, bl
  305.         lea     edx, [ecx*8+ecx]
  306.         lea     edx, [ecx*2+edx]
  307.         mov     cl, al
  308.         lea     ecx, [ecx*4+ecx]
  309.         add     edx, ecx
  310.         shr     edx, 4
  311.         mov     al, dl
  312.  
  313.         xor     ecx, ecx
  314.         mov     cl, ah
  315.         lea     edx, [ecx*8+ecx]
  316.         lea     edx, [ecx*2+edx]
  317.         mov     cl, bh
  318.         lea     ecx, [ecx*4+ecx]
  319.         add     edx, ecx
  320.         shr     edx, 4
  321.         mov     ah, dl
  322.  
  323.         rol     eax, 16
  324.         rol     ebx, 16
  325.         xor     ecx, ecx
  326.         mov     cl, al
  327.         mov     edx, ecx
  328.         shl     ecx, 3
  329.         sub     ecx, edx
  330.         mov     dl, bl
  331.         add     ecx, edx
  332.         shr     ecx, 3
  333.         mov     al, cl
  334.         rol     eax, 16
  335.         mov     [edi-4], eax
  336.         pop     edx ebx
  337. .checkRightSubP:
  338.         bsf     eax, edx
  339.         inc     eax
  340.         bt      [ebx], eax
  341.         jc      .nextPixel
  342.         inc     eax
  343.         bt      [ebx], eax
  344.         jc      .nextPixel
  345.         dec     eax
  346. .checkRightDownSubP:
  347.         bt      [ebx+1], eax
  348.         jnc     .checkRightUpSubP
  349.         dec     eax
  350.         bt      [ebx+1], eax
  351.         jnc     @f
  352.         bt      [ebx-1], eax
  353.         jc      .nextPixel
  354.         inc     eax
  355.         inc     eax
  356.         bt      [ebx+1], eax
  357.         jnc     @f
  358.         dec     eax
  359. .checkRightUpSubP:
  360.         bt      [ebx-1], eax
  361.         jnc     .nextPixel
  362.         dec     eax
  363.         bt      [ebx-1], eax
  364.         jnc     @f
  365.         bt      [ebx+1], eax
  366.         jc      .nextPixel
  367.         inc     eax
  368.         inc     eax
  369.         bt      [ebx-1], eax
  370.         jc      .nextPixel
  371. @@:
  372.         mov     ecx, [esp+20+deltaToScreen]
  373.         mov     eax, [edi+4]
  374.         test    ecx, ecx
  375.         jz      @f
  376.         pusha
  377.         lea     ebx, [edi+ecx+4]
  378.         shr     ebx, 2
  379.         call    syscall_getpixel
  380.         popa
  381. @@:
  382.         push    ebx edx
  383.         mov     ebx, ebp
  384.         xor     ecx, ecx
  385.         mov     cl, al
  386.         mov     edx, ecx
  387.         shl     ecx, 3
  388.         sub     ecx, edx
  389.         mov     dl, bl
  390.         add     ecx, edx
  391.         shr     ecx, 3
  392.         mov     al, cl
  393.  
  394.         xor     ecx, ecx
  395.         mov     cl, ah
  396.         lea     edx, [ecx*8+ecx]
  397.         lea     edx, [ecx*2+edx]
  398.         mov     cl, bh
  399.         lea     ecx, [ecx*4+ecx]
  400.         add     edx, ecx
  401.         shr     edx, 4
  402.         mov     ah, dl
  403.  
  404.         rol     ebx, 16
  405.         rol     eax, 16
  406.         xor     ecx, ecx
  407.         mov     cl, bl
  408.         lea     edx, [ecx*8+ecx]
  409.         lea     edx, [ecx*2+edx]
  410.         mov     cl, al
  411.         lea     ecx, [ecx*4+ecx]
  412.         add     edx, ecx
  413.         shr     edx, 4
  414.         mov     al, dl
  415.         rol     eax, 16
  416.         mov     [edi+4], eax
  417.         pop     edx ebx
  418.         jmp     .nextPixel
  419.  
  420. .square:    ; scaling
  421.         mov     eax, esi
  422. @@:
  423.         mov     [edi+eax*4], ebp
  424.         dec     eax
  425.         jns     @b
  426.         add     edi, [esp+20+widthX]
  427.         dec     ecx
  428.         jnz     .square
  429.         inc     esi
  430.         mov     edi, [esp]
  431. .checkLeft:
  432.         bsf     eax, edx
  433.         dec     eax
  434.         js      .checkRight
  435.         bt      [ebx], eax
  436.         jc      .checkRight
  437. .checkLeftDown:
  438.         bt      [ebx+1], eax
  439.         jnc     .checkLeftUp
  440.         mov     ecx, eax
  441.         inc     eax
  442.         bt      [ebx+1], eax
  443.         jc      @f
  444.         bt      [ebx-1], eax
  445.         jnc     .downRightLow
  446.         bt      [ebx-2], eax
  447.         jc      .downRightLow
  448.         dec     eax
  449.         bt      [ebx-1], eax
  450.         jc      .downRightLow
  451.         dec     eax
  452.         js      .downRightHigh
  453.         bt      [ebx-2], eax
  454.         jc      .downRightLow
  455.         jmp     .downRightHigh
  456.  
  457. @@:
  458.         bt      [ebx-1], eax
  459.         jc      .checkLeftUp
  460.         dec     eax
  461.         dec     eax
  462.         js      .downRightLow
  463.         bt      [ebx+1], eax
  464.         jc      .checkLeftUp
  465. .downRightLow:
  466.         imul    ecx, esi
  467.         shl     ecx, 2
  468.         add     edi, ecx
  469.         dec     esi
  470.         mov     eax, [esp+20+widthX]
  471.         imul    eax, esi
  472.         add     edi, eax
  473.         add     edi, 4
  474.         mov     ecx, esi
  475.         dec     ecx
  476. .drawDownRight:
  477.         mov     eax, ecx
  478. @@:
  479.         mov     [edi+eax*4], ebp
  480.         dec     eax
  481.         jns     @b
  482.         sub     edi, [esp+20+widthX]
  483.         add     edi, 4
  484.         dec     ecx
  485.         jns     .drawDownRight
  486.         inc     esi
  487.         mov     edi, [esp]
  488.         jmp     .checkLeftUp
  489.  
  490. .downRightHigh:
  491.         imul    ecx, esi
  492.         shl     ecx, 2
  493.         add     edi, ecx
  494.         dec     esi
  495.         mov     eax, [esp+20+widthX]
  496.         imul    eax, esi
  497.         add     edi, eax
  498.         add     edi, 4
  499.         mov     ecx, esi
  500.         dec     ecx
  501. .drawDownRightHigh:
  502.         mov     eax, ecx
  503. @@:
  504.         mov     [edi+eax*4], ebp
  505.         dec     eax
  506.         jns     @b
  507.         sub     edi, [esp+20+widthX]
  508.         mov     eax, ecx
  509. @@:
  510.         mov     [edi+eax*4], ebp
  511.         dec     eax
  512.         jns     @b
  513.         sub     edi, [esp+20+widthX]
  514.         add     edi, 4
  515.         dec     ecx
  516.         jns     .drawDownRightHigh
  517.         inc     esi
  518.         mov     edi, [esp]
  519. .checkLeftUp:
  520.         bsf     eax, edx
  521.         dec     eax
  522.         bt      [ebx-1], eax
  523.         jnc     .checkRight
  524.         mov     ecx, eax
  525.         inc     eax
  526.         bt      [ebx-1], eax
  527.         jc      @f
  528.         bt      [ebx+1], eax
  529.         jnc     .upRightLow
  530.         bt      [ebx+2], eax
  531.         jc      .upRightLow
  532.         dec     eax
  533.         bt      [ebx+1], eax
  534.         jc      .upRightLow
  535.         dec     eax
  536.         js      .upRightHigh
  537.         bt      [ebx+2], eax
  538.         jc      .upRightLow
  539.         jmp     .upRightHigh
  540.  
  541. @@:
  542.         bt      [ebx+1], eax
  543.         jc      .checkRight
  544.         dec     eax
  545.         dec     eax
  546.         js      .upRightLow
  547.         bt      [ebx-1], eax
  548.         jc      .checkRight
  549. .upRightLow:
  550.         imul    ecx, esi
  551.         shl     ecx, 2
  552.         add     edi, ecx
  553.         add     edi, 4
  554.         mov     ecx, esi
  555.         dec     ecx
  556.         dec     ecx
  557. .drawUpRight:
  558.         mov     eax, ecx
  559. @@:
  560.         mov     [edi+eax*4], ebp
  561.         dec     eax
  562.         jns     @b
  563.         add     edi, [esp+20+widthX]
  564.         add     edi, 4
  565.         dec     ecx
  566.         jns     .drawUpRight
  567.         mov     edi, [esp]
  568.         jmp     .checkRight
  569.  
  570. .upRightHigh:
  571.         imul    ecx, esi
  572.         shl     ecx, 2
  573.         add     edi, ecx
  574.         add     edi, 4
  575.         mov     ecx, esi
  576.         dec     ecx
  577.         dec     ecx
  578. .drawUpRightHigh:
  579.         mov     eax, ecx
  580. @@:
  581.         mov     [edi+eax*4], ebp
  582.         dec     eax
  583.         jns     @b
  584.         add     edi, [esp+20+widthX]
  585.         mov     eax, ecx
  586. @@:
  587.         mov     [edi+eax*4], ebp
  588.         dec     eax
  589.         jns     @b
  590.         add     edi, [esp+20+widthX]
  591.         add     edi, 4
  592.         dec     ecx
  593.         jns     .drawUpRightHigh
  594.         mov     edi, [esp]
  595. .checkRight:
  596.         bsf     eax, edx
  597.         inc     eax
  598.         bt      [ebx], eax
  599.         jc      .nextPixel
  600. .checkRightDown:
  601.         bt      [ebx+1], eax
  602.         jnc     .checkRightUp
  603.         mov     ecx, eax
  604.         dec     eax
  605.         bt      [ebx+1], eax
  606.         jc      @f
  607.         bt      [ebx-1], eax
  608.         jnc     .downLeftLow
  609.         bt      [ebx-2], eax
  610.         jc      .downLeftLow
  611.         inc     eax
  612.         bt      [ebx-1], eax
  613.         jc      .downLeftLow
  614.         inc     eax
  615.         bt      [ebx-2], eax
  616.         jc      .downLeftLow
  617.         jmp     .downLeftHigh
  618.  
  619. @@:
  620.         bt      [ebx-1], eax
  621.         jc      .checkRightUp
  622.         inc     eax
  623.         inc     eax
  624.         bt      [ebx+1], eax
  625.         jc      .checkRightUp
  626. .downLeftLow:
  627.         imul    ecx, esi
  628.         shl     ecx, 2
  629.         add     edi, ecx
  630.         dec     esi
  631.         mov     eax, [esp+20+widthX]
  632.         imul    eax, esi
  633.         add     edi, eax
  634.         mov     ecx, esi
  635.         dec     ecx
  636. .drawDownLeft:
  637.         mov     eax, ecx
  638. @@:
  639.         mov     [edi+eax*4], ebp
  640.         dec     eax
  641.         jns     @b
  642.         sub     edi, [esp+20+widthX]
  643.         dec     ecx
  644.         jns     .drawDownLeft
  645.         inc     esi
  646.         mov     edi, [esp]
  647.         jmp     .checkRightUp
  648.  
  649. .downLeftHigh:
  650.         imul    ecx, esi
  651.         shl     ecx, 2
  652.         add     edi, ecx
  653.         dec     esi
  654.         mov     eax, [esp+20+widthX]
  655.         imul    eax, esi
  656.         add     edi, eax
  657.         mov     ecx, esi
  658.         dec     ecx
  659. .drawDownLeftHigh:
  660.         mov     eax, ecx
  661. @@:
  662.         mov     [edi+eax*4], ebp
  663.         dec     eax
  664.         jns     @b
  665.         sub     edi, [esp+20+widthX]
  666.         mov     eax, ecx
  667. @@:
  668.         mov     [edi+eax*4], ebp
  669.         dec     eax
  670.         jns     @b
  671.         sub     edi, [esp+20+widthX]
  672.         dec     ecx
  673.         jns     .drawDownLeftHigh
  674.         inc     esi
  675.         mov     edi, [esp]
  676. .checkRightUp:
  677.         bsf     eax, edx
  678.         inc     eax
  679.         bt      [ebx-1], eax
  680.         jnc     .nextPixel
  681.         mov     ecx, eax
  682.         dec     eax
  683.         bt      [ebx-1], eax
  684.         jc      @f
  685.         bt      [ebx+1], eax
  686.         jnc     .upLeftLow
  687.         bt      [ebx+2], eax
  688.         jc      .upLeftLow
  689.         inc     eax
  690.         bt      [ebx+1], eax
  691.         jc      .upLeftLow
  692.         inc     eax
  693.         bt      [ebx+2], eax
  694.         jc      .upLeftLow
  695.         jmp     .upLeftHigh
  696.  
  697. @@:
  698.         bt      [ebx+1], eax
  699.         jc      .nextPixel
  700.         inc     eax
  701.         inc     eax
  702.         bt      [ebx-1], eax
  703.         jc      .nextPixel
  704. .upLeftLow:
  705.         imul    ecx, esi
  706.         shl     ecx, 2
  707.         add     edi, ecx
  708.         mov     ecx, esi
  709.         dec     ecx
  710.         dec     ecx
  711. .drawUpLeft:
  712.         mov     eax, ecx
  713. @@:
  714.         mov     [edi+eax*4], ebp
  715.         dec     eax
  716.         jns     @b
  717.         add     edi, [esp+20+widthX]
  718.         dec     ecx
  719.         jns     .drawUpLeft
  720.         jmp     .nextPixel
  721.  
  722. .upLeftHigh:
  723.         imul    ecx, esi
  724.         shl     ecx, 2
  725.         add     edi, ecx
  726.         mov     ecx, esi
  727.         dec     ecx
  728.         dec     ecx
  729. .drawUpLeftHigh:
  730.         mov     eax, ecx
  731. @@:
  732.         mov     [edi+eax*4], ebp
  733.         dec     eax
  734.         jns     @b
  735.         add     edi, [esp+20+widthX]
  736.         mov     eax, ecx
  737. @@:
  738.         mov     [edi+eax*4], ebp
  739.         dec     eax
  740.         jns     @b
  741.         add     edi, [esp+20+widthX]
  742.         dec     ecx
  743.         jns     .drawUpLeftHigh
  744. .nextPixel:
  745.         bsf     eax, edx
  746.         btr     edx, eax
  747.         pop     edi
  748.         jmp     .raw
  749.  
  750. .nextRaw:
  751.         inc     ebx
  752.         mov     eax, [esp+16+widthX]
  753.         imul    eax, esi
  754.         add     edi, eax
  755.         dec     dword [esp+4]
  756.         jnz     drawChar
  757.         ret
  758.  
  759. fontSmoothing   db  1
  760. font1:
  761.   if lang eq sp
  762.   file 'char_sp.mt'
  763.   else if lang eq et
  764.   file 'char_et.mt'
  765.   else
  766.   file 'char.mt'
  767.   end if
  768. fontUni:
  769. file 'charUni.mt'
  770.