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