kolibrios/kernel/trunk/unicode.inc

118 lines
2.7 KiB
PHP

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; Copyright (C) KolibriOS team 2020-2022. All rights reserved. ;;
;; Distributed under terms of the GNU General Public License. ;;
;; Version 2, or (at your option) any later version. ;;
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
$Revision$
unicode.utf8.decode:
test ecx, ecx
jz .error
movzx eax, byte[esi]
test al, al
jns .read1
shl al, 2
jnc .error
shl al, 1
jnc .read2
shl al, 1
jnc .read3
shl al, 1
jnc .read4
jmp .error
.read1:
sub ecx, 1
add esi, 1
jmp .done
.read2:
cmp ecx, 2
jb .error
shl eax, 5
mov al, [esi+1]
shl al, 1
jnc .error
shl al, 1
jc .error
shr eax, 2
sub ecx, 2
add esi, 2
jmp .done
.read3:
cmp ecx, 3
jb .error
shl eax, 4
mov al, [esi+1]
shl al, 1
jnc .error
shl al, 1
jc .error
shl eax, 6
mov al, [esi+2]
shl al, 1
jnc .error
shl al, 1
jc .error
shr eax, 2
sub ecx, 3
add esi, 3
jmp .done
.read4:
cmp ecx, 4
jb .error
shl eax, 3
mov al, [esi+1]
shl al, 1
jnc .error
shl al, 1
jc .error
shl eax, 6
mov al, [esi+2]
shl al, 1
jnc .error
shl al, 1
jc .error
shl eax, 6
mov al, [esi+3]
shl al, 1
jnc .error
shl al, 1
jc .error
shr eax, 2
sub ecx, 4
add esi, 4
jmp .done
.error:
.done:
ret
unicode.cp866.encode:
call uni2ansi_char
ret
unicode.utf16.encode:
cmp eax, 0x110000
jae .error
cmp eax, 0x10000
jae .write2
cmp eax, 0xe000
jae .write1
cmp eax, 0xd800
jb .write1
jmp .error
.write1:
jmp .done
.write2:
sub eax, 0x10000
shl eax, 6
shr ax, 6
or eax, 0xdc00d800
jmp .done
.done:
.error:
ret