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