📄 atbcommon.c
字号:
handling.
$Returns: None
$Arguments: text - The text string
textIndex - The position of the character to set
character - The unicode character to set it to
*******************************************************************************/
void ATB_string_SetChar(T_ATB_TEXT *text, USHORT textIndex, USHORT character)
{
USHORT *unicode;
if (text->dcs==ATB_DCS_UNICODE)
{
unicode = (USHORT *)text->data;
unicode[textIndex] = character;
}
else
text->data[textIndex] = ATB_char_Ascii(character);
return;
}
/*******************************************************************************
$Function: ATB_string_GetChar
$Description: Gets the value of a character in the string. Use this function rather than
accessing text data directly; it allows transparent ASCII and Unicode
handling.
$Returns: The unicode character at the required position
$Arguments: text - The text string
textIndex - The position of the character to get
*******************************************************************************/
USHORT ATB_string_GetChar(T_ATB_TEXT *text, USHORT textIndex)
{
USHORT *unicode;
USHORT character;
if (text->dcs==ATB_DCS_UNICODE)
{
unicode = (USHORT *)text->data;
character = unicode[textIndex];
}
else
character = ATB_char_Unicode(text->data[textIndex]);
return character;
}
/*******************************************************************************
$Function: ATB_string_MoveLeft
$Description: Move part of string left by 'offset' characters
$Returns: TRUE if the operation was successful
$Arguments: text - The text string
textIndex - The place where the newly moved section is to go
offset - The number of characters to move the section left by
*******************************************************************************/
BOOL ATB_string_MoveLeft(T_ATB_TEXT *text, USHORT textIndex, USHORT offset)
{
BOOL outcome;
USHORT character;
/* Copy until end of line char reached */
while ((textIndex+offset)<=text->len)
{
character = ATB_string_GetChar(text, textIndex+offset);
ATB_string_SetChar(text, textIndex, character);
textIndex++;
}
outcome = TRUE;
text->len -= offset;
return outcome;
}
/*******************************************************************************
$Function: ATB_string_MoveRight
$Description: Move part of string right by 'offset' characters
$Returns: TRUE if the operation was successful
$Arguments: text - The text string
textIndex - The start of the section to be moved right
offset - The number of characters to move the section right by
size - The maximum possible length of the string
*******************************************************************************/
BOOL ATB_string_MoveRight(T_ATB_TEXT *text, USHORT textStart, USHORT offset, USHORT size)
{
int textIndex;
BOOL outcome;
USHORT character;
textIndex = text->len;
if ((text->len+ offset) < size) /* SPR#1995 - SH - <= should be < */
{
while (textIndex >= textStart)
{
character = ATB_string_GetChar(text, textIndex);
ATB_string_SetChar(text, textIndex+offset, character);
textIndex--;
}
text->len += offset;
outcome = TRUE;
}
else
outcome = FALSE;
return outcome;
}
/*******************************************************************************
$Function: ATB_string_Length
$Description: Returns the length of the string, also setting the 'len' parameter of
the text structure
$Returns: Length of the string in characters
$Arguments: text - The text string
*******************************************************************************/
USHORT ATB_string_Length(T_ATB_TEXT* text)
{
USHORT length;
if (text->dcs==ATB_DCS_UNICODE)
{
text->len = ATB_string_UCLength((USHORT *)text->data);
}
else
{
text->len = strlen((char *)text->data);
}
return text->len;
}
/*******************************************************************************
$Function: ATB_string_UCLength
$Description: Returns the length of the provided unicode string
$Returns: Length of the string in characters
$Arguments: text - Pointer to the unicode string
*******************************************************************************/
USHORT ATB_string_UCLength(USHORT* text)
{
USHORT length = 0;
while (text[length]!=UNICODE_EOLN)
{
length++;
}
return (length);
}
/*******************************************************************************
$Function: ATB_string_Copy
$Description: Copy 'src' string into 'dest' string.
$Returns: None.
$Arguments: dest - The destination string (allocated by caller)
src - The source string (allocated by caller)
*******************************************************************************/
void ATB_string_Copy(T_ATB_TEXT* dest, T_ATB_TEXT* src)
{
USHORT textIndex;
USHORT character;
dest->dcs = src->dcs;
for (textIndex=0; textIndex<src->len; textIndex++)
{
character = ATB_string_GetChar(src, textIndex);
ATB_string_SetChar(dest, textIndex, character);
}
ATB_string_SetChar(dest, textIndex, UNICODE_EOLN);
dest->len = textIndex;
return;
}
/*******************************************************************************
$Function: ATB_string_Concat
$Description: Concatenate the second string, adding it to the end of the first.
N.B. The strings don't have to have the same DCS.
$Returns: None.
$Arguments: dest - The destination string (allocated by caller)
src - The source string (allocated by caller)
*******************************************************************************/
void ATB_string_Concat(T_ATB_TEXT* dest, T_ATB_TEXT* src)
{
USHORT textIndex;
USHORT character;
for (textIndex = 0; textIndex<src->len; textIndex++)
{
character = ATB_string_GetChar(src, textIndex);
ATB_string_SetChar(dest, textIndex+src->len, character);
}
dest->len += src->len;
ATB_string_SetChar(dest, textIndex+src->len, UNICODE_EOLN);
return;
}
/*******************************************************************************
$Function: ATB_string_Concat
$Description: Return position of character in string, or -1 if not found
$Returns: Position of character in string
$Arguments: text - The text string to search
findChar - The character to find
*******************************************************************************/
SHORT ATB_string_FindChar(T_ATB_TEXT* text, USHORT findChar)
{
USHORT textIndex;
SHORT foundPos;
USHORT character;
textIndex = 0;
foundPos = -1;
character = ATB_string_GetChar(text, 0);
while (character!=UNICODE_EOLN && foundPos==-1)
{
if (character==findChar)
foundPos = (int)textIndex;
textIndex++;
character = ATB_string_GetChar(text, textIndex);
}
return foundPos;
}
/*******************************************************************************
$Function: ATB_string_ToUnicode
$Description: Convert a string to a unicode string. Memory for the unicode
string should be allocated before calling. Returns a pointer to the
unicode string.
$Returns: None.
$Arguments: dest - The destination string (allocated by caller)
src - The source string (allocated by caller)
*******************************************************************************/
void ATB_string_ToUnicode(T_ATB_TEXT *dest, T_ATB_TEXT *src)
{
USHORT textIndex;
USHORT character;
dest->dcs = ATB_DCS_UNICODE;
for (textIndex=0; textIndex<src->len; textIndex++)
{
character = ATB_string_GetChar(src, textIndex);
ATB_string_SetChar(dest, textIndex, character);
}
ATB_string_SetChar(dest, textIndex, UNICODE_EOLN);
dest->len = textIndex;
return;
}
/*******************************************************************************
$Function: ATB_string_ToAscii
$Description: Convert a string to an ascii string. Memory for the ascii
string should be allocated before calling. Returns a pointer to the
ascii string.
$Returns: None.
$Arguments: dest - The destination string (allocated by caller)
src - The source string (allocated by caller)
*******************************************************************************/
void ATB_string_ToAscii(T_ATB_TEXT *dest, T_ATB_TEXT *src)
{
USHORT textIndex;
USHORT character;
dest->dcs = ATB_DCS_ASCII;
for (textIndex = 0; textIndex<src->len; textIndex++)
{
character = ATB_string_GetChar(src, textIndex);
if (ATB_char_IsAscii(character) && ATB_char_IsVisible(character)) // Filter out non-ascii characters
{
character = ATB_char_Unicode('?');
}
ATB_string_SetChar(dest, textIndex, character);
}
return;
}
/*******************************************************************************
$Function: ATB_string_ToUnicode
$Description: Moves index position through text
$Returns: The new index.
$Arguments: text - The text string
textIndex - Current position within the text buffer
offset - Negative for backwards movement, positive for forwards
movement.
*******************************************************************************/
USHORT ATB_string_IndexMove(T_ATB_TEXT *text, USHORT textIndex, SHORT offset)
{
while (textIndex>0 && offset<0)
{
textIndex--;
offset++;
}
while (ATB_string_GetChar(text, textIndex)!=UNICODE_EOLN && offset>0)
{
textIndex++;
offset--;
}
return textIndex;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -