78 lines
2.2 KiB
Plaintext
78 lines
2.2 KiB
Plaintext
|
|
||
|
; UTF-8
|
||
|
|
||
|
macro du [arg]
|
||
|
{ local current,..input,char
|
||
|
if arg eqtype ''
|
||
|
virtual at 0
|
||
|
..input::
|
||
|
db arg
|
||
|
count = $
|
||
|
end virtual
|
||
|
current = 0
|
||
|
while current < count
|
||
|
load char byte from ..input:current
|
||
|
wide = char
|
||
|
current = current + 1
|
||
|
if char > 0C0h
|
||
|
if char < 0E0h
|
||
|
wide = char and 11111b
|
||
|
load char byte from ..input:current
|
||
|
wide = wide shl 6 + (char and 111111b)
|
||
|
current = current + 1
|
||
|
else if char < 0F0h
|
||
|
wide = char and 1111b
|
||
|
load char byte from ..input:current
|
||
|
wide = wide shl 6 + (char and 111111b)
|
||
|
load char byte from ..input:current+1
|
||
|
wide = wide shl 6 + (char and 111111b)
|
||
|
current = current + 2
|
||
|
else if char < 0F8h
|
||
|
wide = char and 111b
|
||
|
load char byte from ..input:current
|
||
|
wide = wide shl 6 + (char and 111111b)
|
||
|
load char byte from ..input:current+1
|
||
|
wide = wide shl 6 + (char and 111111b)
|
||
|
load char byte from ..input:current+2
|
||
|
wide = wide shl 6 + (char and 111111b)
|
||
|
current = current + 3
|
||
|
else if char < 0FCh
|
||
|
wide = char and 11b
|
||
|
load char byte from ..input:current
|
||
|
wide = wide shl 6 + (char and 111111b)
|
||
|
load char byte from ..input:current+1
|
||
|
wide = wide shl 6 + (char and 111111b)
|
||
|
load char byte from ..input:current+2
|
||
|
wide = wide shl 6 + (char and 111111b)
|
||
|
load char byte from ..input:current+3
|
||
|
wide = wide shl 6 + (char and 111111b)
|
||
|
current = current + 4
|
||
|
else
|
||
|
wide = char and 1
|
||
|
load char byte from ..input:current
|
||
|
wide = wide shl 6 + (char and 111111b)
|
||
|
load char byte from ..input:current+1
|
||
|
wide = wide shl 6 + (char and 111111b)
|
||
|
load char byte from ..input:current+2
|
||
|
wide = wide shl 6 + (char and 111111b)
|
||
|
load char byte from ..input:current+3
|
||
|
wide = wide shl 6 + (char and 111111b)
|
||
|
load char byte from ..input:current+4
|
||
|
wide = wide shl 6 + (char and 111111b)
|
||
|
current = current + 5
|
||
|
end if
|
||
|
end if
|
||
|
if wide < 10000h
|
||
|
dw wide
|
||
|
else
|
||
|
dw 0D7C0h + wide shr 10,0DC00h or (wide and 3FFh)
|
||
|
end if
|
||
|
end while
|
||
|
else
|
||
|
dw arg
|
||
|
end if }
|
||
|
|
||
|
struc du [args]
|
||
|
{ common label . word
|
||
|
du args }
|