PA_ByteSwapTokens


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