You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
33 lines
718 B
33 lines
718 B
#!/bin/bash
|
|
|
|
fast_chr() {
|
|
local __octal
|
|
local __char
|
|
printf -v __octal '%03o' "$1"
|
|
printf -v __char "\\%s" "$__octal"
|
|
REPLY=$__char
|
|
}
|
|
|
|
function unichr {
|
|
local c=$1 # Ordinal of char
|
|
local l=0 # Byte ctr
|
|
local o=63 # Ceiling
|
|
local p=128 # Accum. bits
|
|
local s='' # Output string
|
|
|
|
(( c < 0x80 )) && { fast_chr "$c"; echo -n "$REPLY"; return; }
|
|
|
|
while (( c > o )); do
|
|
fast_chr $(( t = 0x80 | c & 0x3f ))
|
|
s="$REPLY$s"
|
|
(( c >>= 6, l++, p += o+1, o>>=1 ))
|
|
done
|
|
fast_chr $(( t = p | c ))
|
|
echo -n " $REPLY$s"
|
|
}
|
|
## test harness
|
|
# for (( i=0x2500; i<0x2600; i++ )); do
|
|
for (( i=0x0; i<0x20000; i++ )); do
|
|
unichr "$i"
|
|
done
|