diff options
Diffstat (limited to 'appl/lib/convcs/utf8_btos.b')
| -rw-r--r-- | appl/lib/convcs/utf8_btos.b | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/appl/lib/convcs/utf8_btos.b b/appl/lib/convcs/utf8_btos.b new file mode 100644 index 00000000..7ed10ddd --- /dev/null +++ b/appl/lib/convcs/utf8_btos.b @@ -0,0 +1,35 @@ +implement Btos; + +include "sys.m"; +include "convcs.m"; + +sys : Sys; + +init(nil : string) : string +{ + sys = load Sys Sys->PATH; + return nil; +} + +btos(nil : Convcs->State, b : array of byte, n : int) : (Convcs->State, string, int) +{ + nbytes := 0; + str := ""; + + if (n == -1) { + # gather as much as possible + nbytes = sys->utfbytes(b, len b); + if (nbytes > 0) + str = string b[:nbytes]; + } else { + for (; nbytes < len b && len str < n;) { + (ch, l, s) := sys->byte2char(b, nbytes); + if (l > 0) { + str[len str] = ch; + nbytes += l; + } else + break; + } + } + return (nil, str, nbytes); +} |
