Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
2288 clevermous 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                              ;;
2455 mario79 3
;; Copyright (C) KolibriOS team 2004-2012. All rights reserved. ;;
2288 clevermous 4
;; Distributed under terms of the GNU General Public License    ;;
5
;;                                                              ;;
6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
7
 
8
$Revision: 3415 $
9
 
3415 esevece 10
include "../lang.inc"
11
 
2436 mario79 12
;------------------------------------------------------------------------------
2288 clevermous 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
2436 mario79 19
;------------------------------------------------------------------------------
2288 clevermous 20
align 4
2536 mario79 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
2288 clevermous 30
        push    eax
31
        xor     eax, eax
2436 mario79 32
;--------------------------------------
33
align 4
2288 clevermous 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
2536 mario79 41
 
2288 clevermous 42
        mov     esi, 255
2436 mario79 43
;--------------------------------------
44
align 4
2288 clevermous 45
.loop:
46
        test    ecx, ecx
47
        js      .test_asciiz
2536 mario79 48
 
2288 clevermous 49
        dec     esi
50
        js      .end
2536 mario79 51
 
2288 clevermous 52
        jmp     @f
2436 mario79 53
;--------------------------------------
54
align 4
2288 clevermous 55
.test_asciiz:
56
        cmp     byte [edx], 0
57
        jz      .end
2436 mario79 58
 
2288 clevermous 59
        cmp     byte [esp+28], 1
60
        jne     @f
2536 mario79 61
 
2288 clevermous 62
        dec     esi
63
        js      .end
2436 mario79 64
;--------------------------------------
65
align 4
2288 clevermous 66
@@:
67
        inc     edx
68
        pushad
69
        movzx   edx, byte [edx-1]
70
        test    ecx, 0x10000000
71
        jnz     .font2
2536 mario79 72
 
2288 clevermous 73
        mov     esi, 9
74
        lea     ebp, [FONT_I+8*edx+edx]
2436 mario79 75
;--------------------------------------
76
align 4
2288 clevermous 77
.symloop1:
78
        mov     dl, byte [ebp]
79
        or      dl, 1 shl 6
2436 mario79 80
;--------------------------------------
81
align 4
2288 clevermous 82
.pixloop1:
83
        shr     dl, 1
84
        jz      .pixloop1end
2536 mario79 85
 
2288 clevermous 86
        jnc     .nopix
2536 mario79 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
@@:
2430 mario79 96
        and     ecx, 0xFBFFFFFF  ;negate 0x04000000 save to mouseunder area
2453 mario79 97
;        call    [putpixel]
98
        call    __sys_putpixel
2288 clevermous 99
        jmp     .pixloop1cont
2436 mario79 100
;--------------------------------------
101
align 4
2288 clevermous 102
.nopix:
103
        test    ecx, 0x40000000
104
        jz      .pixloop1cont
2536 mario79 105
 
2288 clevermous 106
        push    ecx
107
        mov     ecx, [esp+4+20h+20h]
2536 mario79 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
@@:
2430 mario79 118
        and     ecx, 0xFBFFFFFF  ;negate 0x04000000 save to mouseunder area
2453 mario79 119
;        call    [putpixel]
120
        call    __sys_putpixel
2288 clevermous 121
        pop     ecx
2436 mario79 122
;--------------------------------------
123
align 4
2288 clevermous 124
.pixloop1cont:
125
        inc     eax
126
        jmp     .pixloop1
2436 mario79 127
;--------------------------------------
128
align 4
2288 clevermous 129
.pixloop1end:
130
        sub     eax, 6
131
        inc     ebx
132
        inc     ebp
133
        dec     esi
134
        jnz     .symloop1
2536 mario79 135
 
2288 clevermous 136
        popad
137
        add     eax, 6
138
        jmp     .loop
2436 mario79 139
;--------------------------------------
140
align 4
2288 clevermous 141
.font2:
142
        add     edx, edx
143
        lea     ebp, [FONT_II+4*edx+edx+1]
144
        push    9
145
        movzx   esi, byte [ebp-1]
2436 mario79 146
;--------------------------------------
147
align 4
2288 clevermous 148
.symloop2:
149
        mov     dl, byte [ebp]
150
        push    esi
2436 mario79 151
;--------------------------------------
152
align 4
2288 clevermous 153
.pixloop2:
154
        shr     dl, 1
155
        jnc     .nopix2
2536 mario79 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
@@:
2430 mario79 165
        and     ecx, 0xFBFFFFFF  ;negate 0x04000000 save to mouseunder area
2453 mario79 166
;        call    [putpixel]
167
        call    __sys_putpixel
2288 clevermous 168
        jmp     .pixloop2cont
2436 mario79 169
;--------------------------------------
170
align 4
2288 clevermous 171
.nopix2:
172
        test    ecx, 0x40000000
173
        jz      .pixloop2cont
2536 mario79 174
 
2288 clevermous 175
        push    ecx
176
        mov     ecx, [esp+12+20h+20h]
2536 mario79 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
@@:
2430 mario79 187
        and     ecx, 0xFBFFFFFF  ;negate 0x04000000 save to mouseunder area
2453 mario79 188
;        call    [putpixel]
189
        call    __sys_putpixel
2288 clevermous 190
        pop     ecx
2436 mario79 191
;--------------------------------------
192
align 4
2288 clevermous 193
.pixloop2cont:
194
        inc     eax
195
        dec     esi
196
        jnz     .pixloop2
2536 mario79 197
 
2288 clevermous 198
        pop     esi
199
        sub     eax, esi
200
        inc     ebx
201
        inc     ebp
202
        dec     dword [esp]
203
        jnz     .symloop2
2536 mario79 204
 
2288 clevermous 205
        pop     eax
206
        add     dword [esp+28], esi
207
        popad
208
        jmp     .loop
2436 mario79 209
;--------------------------------------
210
align 4
2288 clevermous 211
.end:
212
        popad
2436 mario79 213
        pop     eax
2288 clevermous 214
        ret
2436 mario79 215
;------------------------------------------------------------------------------
2536 mario79 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
2640 mario79 233
;------------------------------------------------------------------------------
234
align 4
235
FONT_I:
3415 esevece 236
  if lang eq sp
237
  file 'char_sp.mt'
238
  else
2640 mario79 239
  file 'char.mt'
3415 esevece 240
  end if
2640 mario79 241
;------------------------------------------------------------------------------
242
align 4
243
FONT_II:
3415 esevece 244
  if lang eq sp
245
  file 'char2_sp.mt'
246
  else
2640 mario79 247
  file 'char2.mt'
3415 esevece 248
  end if
249
;------------------------------------------------------------------------------