Subversion Repositories Kolibri OS

Rev

Rev 4265 | Rev 5984 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
431 serge 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                              ;;
5565 serge 3
;; Copyright (C) KolibriOS team 2004-2015. All rights reserved. ;;
431 serge 4
;; Distributed under terms of the GNU General Public License    ;;
5
;;                                                              ;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7
 
593 mikedld 8
$Revision: 5565 $
9
 
2439 Serge 10
;------------------------------------------------------------------------------
803 alver 11
align 4
12
dtext_asciiz_esi:                          ; for skins title out
2434 Serge 13
        push    eax
14
        xor     eax, eax
15
        inc     eax
16
        jmp     dtext.1
2439 Serge 17
;------------------------------------------------------------------------------
1 ha 18
align 4
2987 Serge 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
2434 Serge 28
        push    eax
803 alver 29
        xor     eax, eax
2439 Serge 30
;--------------------------------------
31
align 4
803 alver 32
.1:
1 ha 33
        pushad
684 diamond 34
        movsx   eax, bx         ; eax=y
35
        sar     ebx, 16         ; ebx=x
36
        xchg    eax, ebx        ; eax=x, ebx=y
37
        cmp     esi, 255
139 diamond 38
        jb      .loop
2987 Serge 39
 
684 diamond 40
        mov     esi, 255
2439 Serge 41
;--------------------------------------
42
align 4
139 diamond 43
.loop:
44
        test    ecx, ecx
45
        js      .test_asciiz
2987 Serge 46
 
684 diamond 47
        dec     esi
139 diamond 48
        js      .end
2987 Serge 49
 
139 diamond 50
        jmp     @f
2439 Serge 51
;--------------------------------------
52
align 4
139 diamond 53
.test_asciiz:
684 diamond 54
        cmp     byte [edx], 0
139 diamond 55
        jz      .end
2439 Serge 56
 
2434 Serge 57
        cmp     byte [esp+28], 1
58
        jne     @f
2987 Serge 59
 
803 alver 60
        dec     esi
2434 Serge 61
        js      .end
2439 Serge 62
;--------------------------------------
63
align 4
139 diamond 64
@@:
684 diamond 65
        inc     edx
66
        pushad
67
        movzx   edx, byte [edx-1]
139 diamond 68
        test    ecx, 0x10000000
69
        jnz     .font2
2987 Serge 70
 
139 diamond 71
        mov     esi, 9
381 serge 72
        lea     ebp, [FONT_I+8*edx+edx]
2439 Serge 73
;--------------------------------------
74
align 4
139 diamond 75
.symloop1:
76
        mov     dl, byte [ebp]
77
        or      dl, 1 shl 6
2439 Serge 78
;--------------------------------------
79
align 4
139 diamond 80
.pixloop1:
81
        shr     dl, 1
82
        jz      .pixloop1end
2987 Serge 83
 
139 diamond 84
        jnc     .nopix
2987 Serge 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
@@:
2434 Serge 94
        and     ecx, 0xFBFFFFFF  ;negate 0x04000000 save to mouseunder area
2465 Serge 95
;        call    [putpixel]
96
        call    __sys_putpixel
139 diamond 97
        jmp     .pixloop1cont
2439 Serge 98
;--------------------------------------
99
align 4
12 halyavin 100
.nopix:
139 diamond 101
        test    ecx, 0x40000000
102
        jz      .pixloop1cont
2987 Serge 103
 
139 diamond 104
        push    ecx
831 diamond 105
        mov     ecx, [esp+4+20h+20h]
2987 Serge 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
@@:
2434 Serge 116
        and     ecx, 0xFBFFFFFF  ;negate 0x04000000 save to mouseunder area
2465 Serge 117
;        call    [putpixel]
118
        call    __sys_putpixel
139 diamond 119
        pop     ecx
2439 Serge 120
;--------------------------------------
121
align 4
139 diamond 122
.pixloop1cont:
123
        inc     eax
124
        jmp     .pixloop1
2439 Serge 125
;--------------------------------------
126
align 4
139 diamond 127
.pixloop1end:
128
        sub     eax, 6
129
        inc     ebx
130
        inc     ebp
131
        dec     esi
132
        jnz     .symloop1
2987 Serge 133
 
106 john 134
        popad
139 diamond 135
        add     eax, 6
136
        jmp     .loop
2439 Serge 137
;--------------------------------------
138
align 4
139 diamond 139
.font2:
140
        add     edx, edx
381 serge 141
        lea     ebp, [FONT_II+4*edx+edx+1]
139 diamond 142
        push    9
143
        movzx   esi, byte [ebp-1]
2439 Serge 144
;--------------------------------------
145
align 4
139 diamond 146
.symloop2:
147
        mov     dl, byte [ebp]
148
        push    esi
2439 Serge 149
;--------------------------------------
150
align 4
139 diamond 151
.pixloop2:
152
        shr     dl, 1
153
        jnc     .nopix2
2987 Serge 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
@@:
2434 Serge 163
        and     ecx, 0xFBFFFFFF  ;negate 0x04000000 save to mouseunder area
2465 Serge 164
;        call    [putpixel]
165
        call    __sys_putpixel
139 diamond 166
        jmp     .pixloop2cont
2439 Serge 167
;--------------------------------------
168
align 4
139 diamond 169
.nopix2:
170
        test    ecx, 0x40000000
171
        jz      .pixloop2cont
2987 Serge 172
 
139 diamond 173
        push    ecx
831 diamond 174
        mov     ecx, [esp+12+20h+20h]
2987 Serge 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
@@:
2434 Serge 185
        and     ecx, 0xFBFFFFFF  ;negate 0x04000000 save to mouseunder area
2465 Serge 186
;        call    [putpixel]
187
        call    __sys_putpixel
139 diamond 188
        pop     ecx
2439 Serge 189
;--------------------------------------
190
align 4
139 diamond 191
.pixloop2cont:
192
        inc     eax
193
        dec     esi
194
        jnz     .pixloop2
2987 Serge 195
 
139 diamond 196
        pop     esi
197
        sub     eax, esi
198
        inc     ebx
199
        inc     ebp
200
        dec     dword [esp]
201
        jnz     .symloop2
2987 Serge 202
 
139 diamond 203
        pop     eax
204
        add     dword [esp+28], esi
205
        popad
206
        jmp     .loop
2439 Serge 207
;--------------------------------------
208
align 4
139 diamond 209
.end:
210
        popad
2439 Serge 211
        pop     eax
139 diamond 212
        ret
2439 Serge 213
;------------------------------------------------------------------------------
2987 Serge 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:
3500 Serge 234
  if lang eq sp
235
  file 'char_sp.mt'
4265 Serge 236
  else if lang eq et
237
  file 'char_et.mt'
3500 Serge 238
  else
2987 Serge 239
  file 'char.mt'
3500 Serge 240
  end if
2987 Serge 241
;------------------------------------------------------------------------------
242
align 4
243
FONT_II:
3500 Serge 244
  if lang eq sp
245
  file 'char2_sp.mt'
4265 Serge 246
  else if lang eq et
247
  file 'char2_et.mt'
3500 Serge 248
  else
2987 Serge 249
  file 'char2.mt'
3500 Serge 250
  end if
251
;------------------------------------------------------------------------------