📄 atbcommon.c
字号:
len = utl_cvt7To8 ((UBYTE *)ipString , ipLength, text_8bit, 0);
if (len*2 > opLength)
len = opLength/2;
for (i = 0; i < len; i++)
{/*SPR 1508, use new table to convert to Unicode*/
opString[i*2] = (g_translation_unicode[ipString[i]]>>8)&0x00FF;
opString[i*2+1] = g_translation_unicode[UBYTEToChar(text_8bit[i])];
}
if (len*2+1 < opLength)
{
opString[len*2] = 0x00;
opString[len*2+1] = 0x00;
}
}
break;
case MFW_ASCII:
if (ipLength <=0)
ipLength = strlen(ipString); //calculate length if not supplied
if (opDataType == MFW_DCS_UCS2)
{ //Convert data to unicode
if (ipLength*2 < opLength)
len = ipLength;
else
len = opLength/2;
for (i = 0; i < len; i++)
{ /*SPR 1508, convert to Unicode using new table*/
opString[i*2] = (translation_ascii_2_unicode[ ipString[i]]>>8)&0x00FF;
opString[i*2+1] = (translation_ascii_2_unicode[ ipString[i]])&0x00FF;
}
if (len*2+1 < opLength)
{
opString[len*2] = 0x00;
opString[len*2+1] = 0x00;
}
}
else if (opDataType == MFW_ASCII)
{ //Data already in correct format - copy
if (ipLength < opLength)
len = ipLength;
else
len = opLength;
for (i=0;i<len;i++)
opString[i] = ipString[i];
if (len<opLength)
opString[len] = 0x00;
}
else if (opDataType == MFW_DCS_8bits || opDataType == MFW_DCS_7bits) // SH - translate characters, don't change bit width
{
if (ipLength < opLength)
len = ipLength;
else
len = opLength;
for (i=0;i<len;i++)
{
opString[i] = ipString[i];
if (ipString[i]>=128 || g_translation_ascii_table[ipString[i]]!=ipString[i])
{
for (j=0; j<128; j++) // Reverse translation
{
if (ipString[i] == g_translation_ascii_table[j])
opString[i] = j;
}
#ifdef TRACE_SMSREAD
sprintf(buf, "Converted %x to %x", ipString[i], opString[i]);
TRACE_EVENT(buf);
#endif
}
}
if (len<opLength)
opString[len] = 0x00;
}
if (opDataType == MFW_DCS_7bits) // convert data to 7bit
{
len = utl_cvt8To7 ((UBYTE *)ipString , ipLength, (UBYTE*)opString, 0);
}
break;
}
if (addNull)
{ //Add 0x00 (or 0x00,0x00) to end of array
/*SPR925 - SH - changed so NULL is in right place for unicode*/
if (opDataType == MFW_DCS_UCS2)
{
if (len*2+1>opLength)
len = opLength/2;
opString[len*2] = 0x00;
opString[len*2+1] = 0x00;
}
else
{
if (len>opLength)
len = opLength;
opString[len] = 0x00;
}
/* end SPR925 */
}
/*SPR 1991, free memory only if it has been allocated*/
if (text_8bit!= NULL)
mfwFree(text_8bit,MAX_STRING_LEN+1);
return TRUE;
}
/*******************************************************************************
$Function: ATB_mem_Alloc
$Description: ATB memory allocation function.
$Returns: Address if successful, null if not.
$Arguments: Size of memory to be allocated.
*******************************************************************************/
UBYTE* ATB_mem_Alloc(USHORT size)
{
return (UBYTE *)mfwAlloc(size);
}
/*******************************************************************************
$Function: ATB_mem_Free
$Description: Frees memory allocated by the ATB
$Returns: None.
$Arguments: address - Pointer to memory to free
size - Size of the allocated block
*******************************************************************************/
void ATB_mem_Free(UBYTE* address, USHORT size)
{
mfwFree(address,size);
return;
}
/*******************************************************************************
$Function: ATB_swap_bytes
$Description: Returns a unicode character with the bytes swapped. Added for SPR2175
$Returns: USHORT
$Arguments: USHORT
*******************************************************************************/
static USHORT ATB_swap_bytes(USHORT character)
{
return ((UNICODE_NONASCII&character) << 8) + ((UNICODE_ASCII&character) >>8);
}
/*******************************************************************************
$Function: ATB_char_GSM
$Description: Returns the GSM of the provided ascii character.Added for SPR 2175.
$Returns: A GSM character
$Arguments: character - The ascii character
*******************************************************************************/
char ATB_char_GSM(char ascii_character)
{ int i;
/*check if GSM and ASCII encoding are the same value*/
if (g_translation_ascii_table[ascii_character] == ascii_character)
return ascii_character;
/*otherwise we have to search for the correct entry in the GSM to ASCII table*/
for (i=0; i<128; i++)
{
if (g_translation_ascii_table[i] == ascii_character)
return i;
}
}
/*******************************************************************************
$Function: ATB_char_Ascii
$Description: Returns the ascii of the provided unicode character
$Returns: An ascii character
$Arguments: character - The unicode character
*******************************************************************************/
char ATB_char_Ascii(USHORT character)
{ int i;
/*SPR2175, rewrote function*/
/*if the first byte of the character is the same as the ASCII code, return the first byte*/
if (translation_ascii_2_unicode[((character & UNICODE_ASCII)>>8)] == ((character & UNICODE_ASCII)>>8))
return (char)((character & UNICODE_ASCII)>>8);
/*otherwise we have to search for the correct entry in the ASCII to unicode table*/
for (i=0; i<256; i++)
{
if (translation_ascii_2_unicode[i] == ATB_swap_bytes(character))
return i;
}
}
/*******************************************************************************
$Function: ATB_char_Unicode
$Description: Returns the unicode of the provided ascii character
$Returns: A unicode character
$Arguments: character - The ascii character
*******************************************************************************/
USHORT ATB_char_Unicode(char character)
{ /*SPR 2175, re-wrote function*/
USHORT table_value;
USHORT return_value = NULL;
/*look up corresponding Unicode char in table*/
table_value= translation_ascii_2_unicode[character];
/*swap bytes as little-endian*/
return_value = ATB_swap_bytes(table_value);
return return_value;
}
/*******************************************************************************
$Function: ATB_char_IsAscii
$Description: Returns TRUE if the unicode character provided is ascii
$Returns: TRUE or FALSE
$Arguments: character - The unicode character
*******************************************************************************/
BOOL ATB_char_IsAscii(USHORT character)
{
BOOL result = FALSE;
if (character & UNICODE_NONASCII) // Make sure character is ASCII
{
result = FALSE;
}
else
{
result = TRUE;
}
return result;
}
/*******************************************************************************
$Function: ATB_char_IsAlphabetic
$Description: Return TRUE if unicode character is part of latin alphabet
$Returns: TRUE or FALSE
$Arguments: character - The unicode character
*******************************************************************************/
BOOL ATB_char_IsAlphabetic(USHORT character)
{
BOOL result = FALSE;
UBYTE asciiChar;
if (ATB_char_IsAscii(character)) // Make sure character is ASCII
{
asciiChar = ATB_char_Ascii(character);
if ( (asciiChar >='A') && (asciiChar <='Z') )
result = TRUE;
else if ( (asciiChar >='a') && (asciiChar <='z') )
result = TRUE;
}
return result;
}
/*******************************************************************************
$Function: ATB_char_IsNumierc
$Description: Return TRUE if unicode character is a digit, 0-9
$Returns: TRUE or FALSE
$Arguments: character - The unicode character
*******************************************************************************/
BOOL ATB_char_IsNumeric(USHORT character)
{
BOOL result = FALSE;
UBYTE asciiChar;
if (ATB_char_IsAscii(character)) // Make sure character is ASCII
{
asciiChar = ATB_char_Ascii(character);
if ( (asciiChar >='0') && (asciiChar <='9') )
result = TRUE;
}
return result;
}
/*******************************************************************************
$Function: ATB_char_IsVisible
$Description: Return TRUE if unicode character is visible, i.e. not ascii <32
$Returns: TRUE or FALSE
$Arguments: character - The unicode character
*******************************************************************************/
BOOL ATB_char_IsVisible(USHORT character)
{
BOOL result = TRUE;
UBYTE asciiChar;
if (ATB_char_IsAscii(character)) // Make sure character is ASCII
{
asciiChar = ATB_char_Ascii(character);
/*SPR 2175, if ASCII value has no unicode equivalent assume not visible*/
if (translation_ascii_2_unicode[asciiChar] == 0xFFFF)
result = FALSE;
}
return result;
}
/*******************************************************************************
$Function: ATB_string_Size
$Description: Return the size in bytes of a character in the string
$Returns: No. of bytes per character
$Arguments: text - The text string
*******************************************************************************/
UBYTE ATB_string_Size(T_ATB_TEXT *text)
{
UBYTE size;
switch(text->dcs)
{
case ATB_DCS_UNICODE:
size = 2;
break;
default:
size = 1;
break;
}
return size;
}
/*******************************************************************************
$Function: ATB_string_SetChar
$Description: Set a character in the string to a value. Use this function rather than
accessing text data directly; it allows transparent ASCII and Unicode
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -