view uptools/libcoding/decode_helpers.c @ 796:2c0eebf1d00a
doc/Host-tools-overview: add fc-simint and fc-simtool
author |
Mychaela Falconia <falcon@freecalypso.org> |
date |
Fri, 19 Mar 2021 06:02:36 +0000 (2021-03-19) |
parents |
978571e23318 |
children |
1c599681fd60 |
line source
/*
* This library module implements the is_decoded_char_ok() and emit_utf8_char()
* functions used by gsm7_to_ascii_or_ext() and ucs2_to_ascii_or_ext().
*/
#include <sys/types.h>
is_decoded_char_ok(uni, ascii_ext)
unsigned uni;
{
unsigned upper_limit;
/* weed out control chars first */
if (uni < 0x20)
return(0);
if (uni >= 0x7F && uni <= 0x9F)
return(0);
/* see what range our output encoding allows */
switch (ascii_ext) {
case 0:
upper_limit = 0x7F;
break;
case 1:
upper_limit = 0xFF;
break;
case 2:
upper_limit = 0xFFFF;
break;
default:
upper_limit = 0;
}
if (uni <= upper_limit)
return(1);
else
return(0);
}
emit_utf8_char(uni, outp)
unsigned uni;
u_char *outp;
{
if (uni < 0x80) {
*outp = uni;
return(1);
}
if (uni < 0x800) {
outp[0] = 0xC0 | (uni >> 6);
outp[1] = 0x80 | (uni & 0x3F);
return(2);
}
outp[0] = 0xE0 | (uni >> 12);
outp[1] = 0x80 | ((uni >> 6) & 0x3F);
outp[2] = 0x80 | (uni & 0x3F);
return(3);
}