FreeCalypso > hg > fc-sim-tools
view libutil/number_decode.c @ 11:60fd23186e2e
fc-pcsc-backend: flush stdout
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 14 Mar 2021 07:14:33 +0000 |
parents | 34bbb0585cab |
children |
line wrap: on
line source
/* * This module implements functions for decoding phone numbers. */ #include <sys/types.h> static char gsm_address_digits[16] = {'0','1','2','3','4','5','6','7','8','9','*','#','a','b','c','?'}; decode_phone_number(data, nbytes, out) u_char *data; unsigned nbytes; char *out; { u_char *dp, *endp; int c; dp = data; endp = data + nbytes; while (dp < endp) { c = *dp & 0xF; if (c == 0xF) return(-1); *out++ = gsm_address_digits[c]; c = *dp >> 4; if (c == 0xF) { if (dp + 1 == endp) break; else return(-1); } *out++ = gsm_address_digits[c]; dp++; } *out = '\0'; return(0); } decode_address_digits(inbuf, outbuf, ndigits) u_char *inbuf; char *outbuf; unsigned ndigits; { u_char *inp = inbuf; char *outp = outbuf; unsigned n = 0, b; while (n < ndigits) { b = *inp++; *outp++ = gsm_address_digits[b & 0xF]; n++; if (n >= ndigits) break; *outp++ = gsm_address_digits[b >> 4]; n++; } *outp = '\0'; }