Hi Denis, On 16/07/2012 02:49, Denis Kenzior wrote: > Hi Guillaume, > > On 07/16/2012 09:34 AM, Guillaume Zajac wrote: >> --- >> src/util.c | 17 ++++++++++++++--- >> 1 files changed, 14 insertions(+), 3 deletions(-) >> >> diff --git a/src/util.c b/src/util.c >> index aecc790..41ef3d4 100644 >> --- a/src/util.c >> +++ b/src/util.c >> @@ -628,8 +628,16 @@ char *convert_gsm_to_utf8_with_lang(const >> unsigned char *text, long len, >> >> c = gsm_single_shift_lookup(&t, text[i]); >> >> + /* >> + * According to the 3GPP specifications 23.038 >> + * section 6.2.1.1: >> + * In the case there is no character in the extension >> + * table, the character of the main default alphabet >> + * table or the character from the National Language >> + * Locking Shift Table should be displayed. >> + */ > > What version of 23.038 are you using? I cannot find such wording in R9 > or R10 specs. It is not the exact wording, I have just rephrased the comment. The exact wording it just below the GSM 7 bits default alphabet extension table in section 6.2.1.1 Generally, do you prefer having an exact extract of the 3GPP spec or just an explanation of what is happening? > >> if (c == GUND) >> - goto error; >> + c = gsm_locking_shift_lookup(&t, text[i]); >> } else { >> c = gsm_locking_shift_lookup(&t, text[i]); >> } >> @@ -647,9 +655,12 @@ char *convert_gsm_to_utf8_with_lang(const >> unsigned char *text, long len, >> while (out< res + res_length) { >> unsigned short c; >> >> - if (text[i] == 0x1b) >> + if (text[i] == 0x1b) { >> c = gsm_single_shift_lookup(&t, text[++i]); >> - else >> + /* See 3GPP 23.038 section 6.2.1.1 */ >> + if (c == GUND) >> + c = gsm_locking_shift_lookup(&t, text[i]); >> + } else >> c = gsm_locking_shift_lookup(&t, text[i]); >> >> out += g_unichar_to_utf8(c, out); > > Regards, > -Denis > Kind regards, Guillaume