FreeCalypso > hg > fc-pcsc-tools
diff simtool/pbupdate.c @ 11:62cdfed70de7
phone number encoding factored out of pb-update code
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 12 Feb 2021 01:08:20 +0000 |
parents | a76ec3e7da09 |
children | 8a34f5b7c812 |
line wrap: on
line diff
--- a/simtool/pbupdate.c Fri Feb 12 00:47:04 2021 +0000 +++ b/simtool/pbupdate.c Fri Feb 12 01:08:20 2021 +0000 @@ -45,53 +45,6 @@ 0x0C, 0x06, 0xFF, 0xFF, 0x7E, 0xFF, 0xFF, 0xFF }; -static -digit_char_to_gsm(ch) -{ - switch (ch) { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - return (ch - '0'); - case '*': - return 0xA; - case '#': - return 0xB; - case 'a': - case 'b': - case 'c': - return (ch - 'a' + 0xC); - case 'A': - case 'B': - case 'C': - return (ch - 'A' + 0xC); - } - return (-1); -} - -static void -pack_digit_bytes(digits, dest, num_digit_bytes) - u_char *digits, *dest; - unsigned num_digit_bytes; -{ - u_char *sp, *dp; - unsigned n; - - sp = digits; - dp = dest; - for (n = 0; n < num_digit_bytes; n++) { - *dp++ = sp[0] | (sp[1] << 4); - sp += 2; - } -} - static char * decode_qstring_alpha(cp, record, maxlen, filename_for_errs, lineno_for_errs) char *cp, *filename_for_errs; @@ -316,54 +269,6 @@ } static -decode_number_arg(arg, fixp) - char *arg; - u_char *fixp; -{ - u_char digits[20]; - unsigned ndigits, num_digit_bytes; - char *cp, *endp; - int c; - - cp = arg; - if (*cp == '+') { - fixp[1] = 0x91; - cp++; - } else - fixp[1] = 0x81; - if (digit_char_to_gsm(*cp) < 0) { -inv_arg: fprintf(stderr, "error: invalid phone number argument\n"); - return(-1); - } - for (ndigits = 0; ; ndigits++) { - c = digit_char_to_gsm(*cp); - if (c < 0) - break; - cp++; - if (ndigits >= 20) { - fprintf(stderr, "error: too many number digits\n"); - return(-1); - } - digits[ndigits] = c; - } - if (ndigits & 1) - digits[ndigits++] = 0xF; - num_digit_bytes = ndigits >> 1; - fixp[0] = num_digit_bytes + 1; - pack_digit_bytes(digits, fixp + 2, num_digit_bytes); - if (*cp == ',') { - cp++; - if (!isdigit(*cp)) - goto inv_arg; - fixp[1] = strtoul(cp, &endp, 0); - if (*endp) - goto inv_arg; - } else if (*cp) - goto inv_arg; - return(0); -} - -static decode_alphatag_arg(arg, record, maxlen) char *arg; u_char *record; @@ -438,7 +343,7 @@ } memset(record, 0xFF, curfile_record_len); fixp = record + curfile_record_len - 14; - rc = decode_number_arg(argv[3], fixp); + rc = encode_phone_number_arg(argv[3], fixp); if (rc < 0) return(rc); if (argv[4]) { @@ -496,7 +401,7 @@ } memset(record, 0xFF, curfile_record_len); fixp = record + curfile_record_len - 14; - rc = decode_number_arg(argv[3], fixp); + rc = encode_phone_number_arg(argv[3], fixp); if (rc < 0) return(rc); rc = decode_alphatag_arg_hex(argv[4], record, curfile_record_len - 14);