|
![]() |
![]() |
version 2003
PA_ByteSwapTokens (tokens; len)
Parameter | Type | Description | |
tokens | char * | → | Tokens to byteswap |
len | long | → | Length of the tokens' buffer |
Description
The routine
PA_ByteSwapTokens
allows the 4D plug-in to byte swap a line of 4th Dimension code that has been tokenized (using
PA_Tokenize
) on a platform whose byte ordering is different than the platform where the 4D plug-in is running.
Before the call, pass the text of the tokens in
Tokens
and its length in
len
.
After the call,
Tokens
holds the byte swapped tokens.
A 4D plug-in should call this routine before detokenizing or executing tokens that have been built on another platform.
Example
For example, a plug-in could save the tokens in a structure that holds private data, such as a platform flag (say, 'ABCD' under MacOS). Before detokenizing or executing the tokens, the plug-in checks the signature, and byteswaps the tokens if necessary.
#define TOKENS_FLAG 'ABCD'
#define BYTESWAPPED_TOKENS_FLAG 'DCBA'
void SaveTokens ( Stream* stream, char* tokens, long len )
{
myWriteLongToStream( stream, TOKENS_FLAG );
myWriteLongToStream( stream, len );
myWriteBufferToStream( stream, tokens, len );
}
char* LoadTokens( Stream* stream, )
{
long byteswap, len;
char*tokens = 0;
byteswap = myReadLongInStream( stream );
len = myReadLongInStream( stream );
if ( byteswap == BYTESWAPPED_TOKENS_FLAG )
ByteSwapLong( &len );
tokens = malloc( len );
if ( tokens )
{
myReadBufferInStream( stream, tokens, len );
if ( byteswap == BYTESWAPPED_TOKENS_FLAG ) // byteswap the tokens if needed
PA_ByteSwapTokens( loadedTokens.fTokens, loadedTokens.fLen );
}
return tokens;
}
See Also
PA_ExecuteTokens , PA_ExecuteTokensAsFunction , PA_Tokenize .
Error Handling
Use
PA_GetLastError
to see if an error occurred