1941 lines
		
	
	
		
			66 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			1941 lines
		
	
	
		
			66 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
/* u4util.c   (c)Copyright Sequiter Software Inc., 1988-1996. All rights reserved. */
 | 
						||
 | 
						||
#include "d4all.h"
 | 
						||
#ifndef S4UNIX
 | 
						||
   #ifdef __TURBOC__
 | 
						||
      #pragma hdrstop
 | 
						||
   #endif
 | 
						||
#endif
 | 
						||
 | 
						||
#ifdef S4TESTING
 | 
						||
   #ifdef S4WINDOWS
 | 
						||
      #ifndef S4WIN32
 | 
						||
         #include <dos.h>
 | 
						||
      #endif
 | 
						||
   #endif
 | 
						||
   extern FILE4 s4test ;
 | 
						||
#endif
 | 
						||
 | 
						||
char v4buffer[257] ;
 | 
						||
 | 
						||
#ifndef S4UNIX
 | 
						||
   #include <sys\timeb.h>
 | 
						||
#else
 | 
						||
   #include <sys/timeb.h>
 | 
						||
#endif
 | 
						||
 | 
						||
/* '*wasOldLen' contains the old len and will contain the new.
 | 
						||
   'newLen' contains the new length.
 | 
						||
   memory is only allocated if the  'newLen' paramater is greater than the
 | 
						||
   wasOldLen paramater.
 | 
						||
*/
 | 
						||
int S4FUNCTION u4allocAgainDefault( CODE4 *c4, char **ptrPtr, unsigned *wasOldLen, const unsigned newLen )
 | 
						||
{
 | 
						||
   char *newPtr ;
 | 
						||
 | 
						||
   #ifdef E4PARM_HIGH
 | 
						||
      if ( *ptrPtr == 0 && *wasOldLen != 0 )
 | 
						||
         return error4( c4, e4parm, E94501 ) ;
 | 
						||
   #endif
 | 
						||
 | 
						||
   if ( newLen <= *wasOldLen )
 | 
						||
      return 0 ;
 | 
						||
 | 
						||
   newPtr = (char *)u4allocFreeDefault( c4, (long)newLen ) ;
 | 
						||
 | 
						||
   if ( newPtr == 0 )
 | 
						||
      return error4stack( c4, e4memory, E94501 ) ;
 | 
						||
 | 
						||
   if ( *ptrPtr != 0 )
 | 
						||
   {
 | 
						||
      memcpy( newPtr, *ptrPtr, (size_t) *wasOldLen ) ;
 | 
						||
      u4free( *ptrPtr ) ;
 | 
						||
   }
 | 
						||
   *ptrPtr = newPtr ;
 | 
						||
   *wasOldLen = newLen ;
 | 
						||
   return 0 ;
 | 
						||
}
 | 
						||
 | 
						||
void *S4FUNCTION u4allocFreeDefault( CODE4 *c4, long n )
 | 
						||
{
 | 
						||
   void *ptr ;
 | 
						||
   #ifndef S4OFF_COMMUNICATIONS
 | 
						||
      MESSAGE4DATA *message ;
 | 
						||
   #endif
 | 
						||
 | 
						||
   #ifdef S4SEMAPHORE
 | 
						||
      #ifdef E4MISC
 | 
						||
         /* the debug u4alloc uses global tracking pointers, so semaphore */
 | 
						||
         if ( mem4start( c4 ) != 0 )
 | 
						||
            return 0 ;
 | 
						||
      #endif
 | 
						||
   #endif
 | 
						||
 | 
						||
   ptr = (void *)u4allocDefault( n ) ;
 | 
						||
 | 
						||
   #ifndef S4OFF_COMMUNICATIONS
 | 
						||
      if ( ptr == 0 && c4 )
 | 
						||
      {
 | 
						||
         for ( ;; )
 | 
						||
         {
 | 
						||
            message = (MESSAGE4DATA *)l4pop( &c4->availDataMessages ) ;
 | 
						||
            if ( message == 0 )
 | 
						||
               break ;
 | 
						||
            if ( message->didAlloc == 1 )
 | 
						||
            {
 | 
						||
               u4free( message->allocatedData ) ;
 | 
						||
               message->didAlloc = 0 ;
 | 
						||
            }
 | 
						||
            mem4free( c4->messageLinkMemory, message ) ;
 | 
						||
         }
 | 
						||
         ptr = (void *)u4allocDefault( n ) ;
 | 
						||
      }
 | 
						||
   #endif
 | 
						||
 | 
						||
   #ifndef S4STAND_ALONE
 | 
						||
      if ( ptr == 0 && c4 )
 | 
						||
      {
 | 
						||
         message4release( c4 ) ;
 | 
						||
         ptr = (void *)u4allocDefault( n ) ;
 | 
						||
      }
 | 
						||
   #endif
 | 
						||
 | 
						||
   #ifndef S4OPTIMIZE_OFF
 | 
						||
      if ( ptr == 0 && c4 )
 | 
						||
         if ( c4->hasOpt )
 | 
						||
         {
 | 
						||
            code4optSuspend( c4 ) ;
 | 
						||
            ptr = (void *)u4allocDefault( n ) ;
 | 
						||
            code4optRestart( c4 ) ;
 | 
						||
         }
 | 
						||
   #endif
 | 
						||
 | 
						||
   #ifdef S4SEMAPHORE
 | 
						||
      #ifdef E4MISC
 | 
						||
         mem4stop( c4 ) ;
 | 
						||
      #endif
 | 
						||
   #endif
 | 
						||
 | 
						||
   return ptr ;
 | 
						||
}
 | 
						||
 | 
						||
void S4FUNCTION u4delayHundredth( const unsigned int numHundredths )
 | 
						||
{
 | 
						||
   int sec ;
 | 
						||
   unsigned int hundredths ;
 | 
						||
   #ifndef S4NO_FTIME
 | 
						||
      struct timeb oldTime, newTime ;
 | 
						||
   #else
 | 
						||
      struct timeval oldTime, newTime ;
 | 
						||
   #endif
 | 
						||
   #ifdef S4WINDOWS
 | 
						||
      #ifndef S4CLIENT
 | 
						||
         MSG msg;
 | 
						||
      #endif
 | 
						||
   #endif
 | 
						||
 | 
						||
   #ifndef S4NO_FTIME
 | 
						||
      ftime( &oldTime) ;
 | 
						||
   #else
 | 
						||
      gettimeofday(&oldTime, NULL) ;
 | 
						||
   #endif
 | 
						||
   sec = numHundredths / 100 ;
 | 
						||
   hundredths = numHundredths % 100 ;
 | 
						||
 | 
						||
   #ifdef S4WINDOWS
 | 
						||
      for ( ;; )
 | 
						||
      {
 | 
						||
         /* Give some other application a chance to run. */
 | 
						||
         #ifndef S4CLIENT
 | 
						||
            if ( PeekMessage( &msg, (HWND)NULL, (UINT)0, (UINT)0, PM_REMOVE ) )
 | 
						||
            {
 | 
						||
               /* can't allow re-entrancy, so if not a paint message, just
 | 
						||
                  discard.  Allow paints messages to give up control to other
 | 
						||
                  apps, but client's calling CodeBase calls on WM_PAINT
 | 
						||
                  messages may fail */
 | 
						||
               if ( msg.message == WM_PAINT )
 | 
						||
               {
 | 
						||
                  TranslateMessage((LPMSG)&msg) ;
 | 
						||
                  DispatchMessage((LPMSG)&msg) ;
 | 
						||
               }
 | 
						||
            }
 | 
						||
         #endif /* S4CLIENT */
 | 
						||
 | 
						||
         #ifndef S4WIN32
 | 
						||
            /* allow device drivers to run... */
 | 
						||
            _asm mov ax, 0x1689
 | 
						||
            _asm mov bl, 1
 | 
						||
            _asm int 0x2f
 | 
						||
         #endif
 | 
						||
 | 
						||
         ftime( &newTime ) ;
 | 
						||
 | 
						||
         if ( newTime.time - oldTime.time > ( sec + 1 ) )  /* > 1 secord over */
 | 
						||
                    break ;
 | 
						||
 | 
						||
         if ( newTime.time - oldTime.time >= sec )
 | 
						||
            if ( ( (long)(newTime.millitm - oldTime.millitm ) / 10 ) > (long)hundredths )
 | 
						||
               break ;
 | 
						||
     }
 | 
						||
   #else
 | 
						||
      for ( ;; )
 | 
						||
      {
 | 
						||
         #ifndef S4NO_FTIME
 | 
						||
            ftime( &newTime ) ;
 | 
						||
 | 
						||
            if ( newTime.time - oldTime.time >= sec )
 | 
						||
               if ( (unsigned int)(( (newTime.millitm - oldTime.millitm ) / 10 )) > hundredths )
 | 
						||
                  break ;
 | 
						||
         #else
 | 
						||
            gettimeofday(&newTime, NULL ) ;
 | 
						||
 | 
						||
            if (newTime.tv_sec - oldTime.tv_sec >= sec )
 | 
						||
               if ( ( (newTime.tv_usec - oldTime.tv_usec ) / 10000 ) > hundredths )
 | 
						||
                  break ;
 | 
						||
         #endif
 | 
						||
      }
 | 
						||
   #endif
 | 
						||
   return ;
 | 
						||
}
 | 
						||
 | 
						||
#ifndef S4INLINE
 | 
						||
/* delays one second, allows other windows applications to run, etc. */
 | 
						||
void u4delaySec()
 | 
						||
{
 | 
						||
   u4delayHundredth( 100 ) ;
 | 
						||
}
 | 
						||
#endif
 | 
						||
 | 
						||
char *u4environ( char *find, const int doErr )
 | 
						||
{
 | 
						||
   char *env ;
 | 
						||
 | 
						||
   #ifdef E4PARM_HIGH
 | 
						||
      if ( find == 0 )
 | 
						||
      {
 | 
						||
         error4( 0, e4parm_null, E94503 ) ;
 | 
						||
         return 0 ;
 | 
						||
      }
 | 
						||
   #endif
 | 
						||
 | 
						||
   env = getenv( find ) ;
 | 
						||
 | 
						||
   if ( env == 0 && doErr )
 | 
						||
   {
 | 
						||
      error4describe( 0, e4info, E84501, find, 0, 0 ) ;
 | 
						||
      return 0 ;
 | 
						||
   }
 | 
						||
 | 
						||
   return env ;
 | 
						||
}
 | 
						||
 | 
						||
unsigned int S4FUNCTION u4ncpy( char *to, const char *from, const unsigned int l )
 | 
						||
{
 | 
						||
   unsigned i, len ;
 | 
						||
 | 
						||
   #ifdef E4PARM_HIGH
 | 
						||
      if ( l == 0 )
 | 
						||
      {
 | 
						||
         error4( 0, e4parm, E94502 ) ;
 | 
						||
         return 0 ;
 | 
						||
      }
 | 
						||
   #endif
 | 
						||
 | 
						||
   len = l - 1 ;
 | 
						||
   for ( i = 0;; i++ )
 | 
						||
   {
 | 
						||
      if ( i >= len )
 | 
						||
      {
 | 
						||
         to[len] = 0 ;
 | 
						||
         return len ;
 | 
						||
      }
 | 
						||
      to[i] = from[i] ;
 | 
						||
      if ( from[i] == 0 )
 | 
						||
         return i ;
 | 
						||
   }
 | 
						||
}
 | 
						||
 | 
						||
#ifndef S4INLINE
 | 
						||
int S4FUNCTION u4ptrEqual( const void *p1, const void *p2 )
 | 
						||
{
 | 
						||
   return( p1 == p2 ) ;
 | 
						||
}
 | 
						||
#endif
 | 
						||
 | 
						||
#ifdef S4TESTING
 | 
						||
#ifdef S4WINDOWS
 | 
						||
S4EXPORT void S4FUNCTION u4terminate( void )
 | 
						||
{
 | 
						||
   #ifdef S4WIN32
 | 
						||
      ExitProcess(1) ;
 | 
						||
   #else
 | 
						||
      union REGS terminate ;
 | 
						||
 | 
						||
      terminate.h.ah = 0x4C ;
 | 
						||
 | 
						||
      intdos( &terminate, &terminate ) ;
 | 
						||
   #endif
 | 
						||
}
 | 
						||
#endif  /* S4WINDOWS */
 | 
						||
 | 
						||
#ifndef S4SERVER
 | 
						||
void u4setField( const char *serverId, const char *database, const long recno, const char *fieldName, const char *newValue )
 | 
						||
{
 | 
						||
   #ifndef S4OFF_WRITE
 | 
						||
   CODE4 cb ;
 | 
						||
   DATA4 *data ;
 | 
						||
   FIELD4 *field ;
 | 
						||
   int openAttempts ;
 | 
						||
 | 
						||
   if ( database == 0 || recno == 0 || fieldName == 0 || newValue == 0 )
 | 
						||
      return ;
 | 
						||
 | 
						||
   code4init( &cb ) ;
 | 
						||
   cb.errOff = 1 ;
 | 
						||
 | 
						||
   #ifdef S4CLIENT
 | 
						||
      if( code4connect( &cb, serverId, 0, "S4TESTING", "S4TESTING", 0 ) != r4success )
 | 
						||
      {
 | 
						||
         code4close(&cb) ;
 | 
						||
         code4initUndo(&cb) ;
 | 
						||
         return ;
 | 
						||
      }
 | 
						||
   #else
 | 
						||
      code4logOpenOff( &cb ) ;
 | 
						||
   #endif
 | 
						||
 | 
						||
   #ifndef S4OFF_MULTI
 | 
						||
      cb.accessMode = OPEN4DENY_RW ;       /* open exclusively */
 | 
						||
   #endif
 | 
						||
   cb.errOpen = 0 ;
 | 
						||
   cb.autoOpen = 0 ;
 | 
						||
 | 
						||
   data = d4open( &cb, database ) ;
 | 
						||
   for ( openAttempts = 0 ; ( data == NULL ) && ( openAttempts < 300 ) ; openAttempts++ )
 | 
						||
   {
 | 
						||
      u4delayHundredth( 100 ) ;   /* wait one second and try again */
 | 
						||
      data = d4open( &cb, database ) ;
 | 
						||
   }
 | 
						||
   if ( data == NULL )
 | 
						||
   {
 | 
						||
      code4close(&cb) ;
 | 
						||
      code4initUndo(&cb) ;
 | 
						||
      return ;   /* should return an error or something  */
 | 
						||
   }
 | 
						||
 | 
						||
   #ifndef S4OFF_MULTI
 | 
						||
      cb.lockAttempts = 300 ;
 | 
						||
      cb.lockDelay = 100 ;     /* shouldn't have to wait--just in case */
 | 
						||
 | 
						||
      if ( d4lockFile( data ) != 0 )
 | 
						||
      {
 | 
						||
         d4close( data ) ;
 | 
						||
         code4close(&cb) ;
 | 
						||
         code4initUndo(&cb) ;
 | 
						||
         return ;
 | 
						||
      }
 | 
						||
   #endif
 | 
						||
 | 
						||
   if ( (field = d4field( data, fieldName )) == 0 )
 | 
						||
   {
 | 
						||
      d4close( data ) ;
 | 
						||
      code4close(&cb) ;
 | 
						||
      code4initUndo(&cb) ;
 | 
						||
      return ;
 | 
						||
   }
 | 
						||
 | 
						||
   if ( d4go( data, recno ) != 0 )
 | 
						||
   {
 | 
						||
      d4close( data ) ;
 | 
						||
      code4close(&cb) ;
 | 
						||
      code4initUndo(&cb) ;
 | 
						||
      return ;
 | 
						||
   }
 | 
						||
 | 
						||
   f4assign( field, newValue ) ;
 | 
						||
 | 
						||
   if ( d4flushData( data ) != 0 )
 | 
						||
   {
 | 
						||
      d4close( data ) ;
 | 
						||
      code4close(&cb) ;
 | 
						||
      code4initUndo(&cb) ;
 | 
						||
      return ;
 | 
						||
   }
 | 
						||
 | 
						||
   d4close( data ) ;
 | 
						||
   code4close(&cb) ;
 | 
						||
   code4initUndo(&cb) ;
 | 
						||
   #endif /* S4OFF_WRITE */
 | 
						||
}
 | 
						||
 | 
						||
int ats4readInfo( char *filename, void *info, const unsigned int len )
 | 
						||
{
 | 
						||
   CODE4 cb ;
 | 
						||
   FILE4 f ;
 | 
						||
 | 
						||
   code4init( &cb ) ;
 | 
						||
   #ifndef S4CLIENT
 | 
						||
      code4logOpenOff( &cb ) ;
 | 
						||
   #endif
 | 
						||
 | 
						||
   cb.errOff = 1 ;
 | 
						||
   cb.errOpen = 0 ;   /* avoid endless loop due to error calling this function... */
 | 
						||
   if ( file4open( &f, &cb, filename, 1 ) )
 | 
						||
   {
 | 
						||
      code4initUndo( &cb ) ;
 | 
						||
      return 0 ;   /* info could not be read */
 | 
						||
   }
 | 
						||
 | 
						||
   file4read( &f, 0L, info, len ) ;
 | 
						||
   file4close( &f ) ;
 | 
						||
 | 
						||
   code4close( &cb ) ;
 | 
						||
   code4initUndo( &cb ) ;
 | 
						||
 | 
						||
   return 1 ;   /* info successfully read */
 | 
						||
}
 | 
						||
 | 
						||
S4EXPORT void S4FUNCTION ats4setSuiteStatus( const char *newValue )
 | 
						||
{
 | 
						||
   ATS4RECINFO info ;
 | 
						||
   const char *fieldStatus = "STATUS" ;
 | 
						||
   const char *fieldRDate = "RDATE" ;
 | 
						||
   #ifdef S4CLIENT
 | 
						||
      char buf[100] ;
 | 
						||
   #endif
 | 
						||
   char *serverId, rdate[8] ;
 | 
						||
 | 
						||
   if ( newValue == 0 )
 | 
						||
      return ;
 | 
						||
 | 
						||
   serverId = 0 ;
 | 
						||
 | 
						||
   #ifdef S4CLIENT
 | 
						||
   if ( getenv( "CSNAME" ) )
 | 
						||
      serverId = getenv( "CSNAME" ) ;
 | 
						||
   else
 | 
						||
   {
 | 
						||
      if ( ats4readInfo( ATS_FILENAME_CS, buf, sizeof( buf ) ) )
 | 
						||
         serverId = buf ;
 | 
						||
   }
 | 
						||
   #endif
 | 
						||
 | 
						||
   date4today( rdate ) ;
 | 
						||
 | 
						||
   if( getenv( "T4FLAG" ) )
 | 
						||
   {
 | 
						||
      if ( strcmp( getenv( "T4FLAG" ), "T" ) == 0 )
 | 
						||
      {
 | 
						||
         u4setField( serverId, getenv( "T4SUITE" ), atol( getenv( "T4RECNO" ) ), fieldStatus, newValue ) ;
 | 
						||
         u4setField( serverId, getenv( "T4SUITE" ), atol( getenv( "T4RECNO" ) ), fieldRDate, rdate ) ;
 | 
						||
      }
 | 
						||
   }
 | 
						||
   else
 | 
						||
   {
 | 
						||
      if ( ats4readInfo( ATS_FILENAME_REC, &info, sizeof( info ) ) )
 | 
						||
      {
 | 
						||
         u4setField( serverId, (char *)info.T4SUITE, atol((char *)info.T4RECNO), fieldStatus, newValue ) ;
 | 
						||
         u4setField( serverId, (char *)info.T4SUITE, atol((char *)info.T4RECNO), fieldRDate, rdate ) ;
 | 
						||
      }
 | 
						||
   }
 | 
						||
}
 | 
						||
#endif /* S4SERVER */
 | 
						||
#endif /* S4TESTING */
 | 
						||
 | 
						||
#ifdef S4MEM_PRINT
 | 
						||
   int in4temp = 0 ;
 | 
						||
   char *write4buf = 0 ;
 | 
						||
   FILE4SEQ_WRITE file4seq ;
 | 
						||
   FILE4SEQ_WRITE *file4seqPtr ;
 | 
						||
#endif
 | 
						||
 | 
						||
#ifdef S4TESTING
 | 
						||
   int ats4errorFlag = 0 ;   /* used to prevent infinite loops */
 | 
						||
 | 
						||
   #define INC_U4WRITEERR
 | 
						||
   void S4FUNCTION u4writeErr( const char S4PTR *errStr, int newLine )
 | 
						||
#else
 | 
						||
   #ifdef S4TRACK_FILES
 | 
						||
      #define INC_U4WRITEERR
 | 
						||
      void u4writeErr( const char *errStr, int newLine )
 | 
						||
   #endif
 | 
						||
#endif
 | 
						||
#ifdef INC_U4WRITEERR
 | 
						||
{
 | 
						||
   int errCode, flushCode ;
 | 
						||
   long len ;
 | 
						||
   #ifdef S4TESTING
 | 
						||
      #ifndef S4SERVER
 | 
						||
         CODE4 cb ;
 | 
						||
         int undoLocal = 0 ;
 | 
						||
      #endif
 | 
						||
   #endif
 | 
						||
 | 
						||
   #ifdef S4TESTING
 | 
						||
      #ifndef S4SERVER
 | 
						||
         if ( ats4errorFlag == 0 )
 | 
						||
         {
 | 
						||
            ats4errorFlag = 1 ;
 | 
						||
            ats4setSuiteStatus( "E" ) ;
 | 
						||
            ats4errorFlag = 0 ;
 | 
						||
         }
 | 
						||
      #endif
 | 
						||
   #endif
 | 
						||
 | 
						||
   #ifdef S4MEM_PRINT
 | 
						||
      if ( in4temp == 1 )
 | 
						||
         return ;
 | 
						||
   #endif
 | 
						||
 | 
						||
   if ( s4test.hand <= 0 )
 | 
						||
   {
 | 
						||
      #ifdef S4TESTING
 | 
						||
         #ifndef S4SERVER
 | 
						||
            /* reopen the log if it has been previously closed:   */
 | 
						||
            code4init(&cb) ;
 | 
						||
            /* the code4init() call should have opened or created s4test  */
 | 
						||
            #ifndef S4CLIENT
 | 
						||
               code4logOpenOff( &cb ) ;
 | 
						||
            #endif
 | 
						||
            if( s4test.hand <= 0 )
 | 
						||
            {
 | 
						||
               code4close(&cb) ;
 | 
						||
               code4initUndo(&cb) ;
 | 
						||
               return ;
 | 
						||
            }
 | 
						||
            undoLocal = 1 ;
 | 
						||
         #endif
 | 
						||
      #endif
 | 
						||
   }
 | 
						||
 | 
						||
   errCode = error4code( s4test.codeBase ) ;
 | 
						||
   error4set( s4test.codeBase, 0 ) ;
 | 
						||
 | 
						||
   len = file4len( &s4test ) ;
 | 
						||
 | 
						||
   if( len >= 0 )
 | 
						||
   {
 | 
						||
      #ifdef S4MEM_PRINT
 | 
						||
         if ( write4buf == 0 )
 | 
						||
         {
 | 
						||
            in4temp = 1 ;
 | 
						||
            write4buf = u4alloc( 40000L ) ;
 | 
						||
            in4temp = 0 ;
 | 
						||
            if ( write4buf != 0 )
 | 
						||
            {
 | 
						||
               file4seqWriteInit( &file4seq, &s4test, len, write4buf, (unsigned int)40000 ) ;
 | 
						||
               file4seqPtr = &file4seq ;
 | 
						||
            }
 | 
						||
         }
 | 
						||
      #endif
 | 
						||
 | 
						||
      if ( newLine )
 | 
						||
      {
 | 
						||
         #ifdef S4MEM_PRINT
 | 
						||
            if ( write4buf != 0 )
 | 
						||
            {
 | 
						||
               file4seqWrite( &file4seq, "\r\n", 2 ) ;
 | 
						||
               len += 2 ;
 | 
						||
            }
 | 
						||
            else
 | 
						||
            {
 | 
						||
         #endif
 | 
						||
            file4write( &s4test, len, "\r\n", 2 ) ;
 | 
						||
            len += 2 ;
 | 
						||
         #ifdef S4MEM_PRINT
 | 
						||
            }
 | 
						||
         #endif
 | 
						||
      }
 | 
						||
      #ifdef S4MEM_PRINT
 | 
						||
         if ( write4buf != 0 )
 | 
						||
         {
 | 
						||
            file4seqWrite( &file4seq, errStr, strlen( errStr ) ) ;
 | 
						||
         }
 | 
						||
         else
 | 
						||
         {
 | 
						||
      #endif
 | 
						||
         flushCode = s4test.codeBase->fileFlush ;
 | 
						||
         s4test.codeBase->fileFlush = 1 ;
 | 
						||
         file4lenSet( &s4test, len + strlen(errStr) ) ;
 | 
						||
         file4write( &s4test, len, (void *)errStr, strlen( errStr ) ) ;
 | 
						||
         file4flush( &s4test ) ;
 | 
						||
         s4test.codeBase->fileFlush = flushCode ;
 | 
						||
      #ifdef S4MEM_PRINT
 | 
						||
         }
 | 
						||
      #endif
 | 
						||
   }
 | 
						||
 | 
						||
   s4test.codeBase->errorCode = errCode ;
 | 
						||
 | 
						||
   #ifdef S4TESTING
 | 
						||
      #ifndef S4SERVER
 | 
						||
         if ( undoLocal )
 | 
						||
         {
 | 
						||
            code4close(&cb) ;
 | 
						||
            code4initUndo(&cb) ;
 | 
						||
         }
 | 
						||
      #endif
 | 
						||
   #endif
 | 
						||
}
 | 
						||
#undef INC_U4WRITEERR
 | 
						||
#endif
 | 
						||
 | 
						||
void S4FUNCTION u4yymmdd( char *yymmdd )
 | 
						||
{
 | 
						||
   time_t timeVal ;
 | 
						||
   struct tm *tmPtr ;
 | 
						||
 | 
						||
   time( (time_t *) &timeVal ) ;
 | 
						||
   tmPtr =  localtime( (time_t *) &timeVal ) ;
 | 
						||
   yymmdd[0] = (char) tmPtr->tm_year ;
 | 
						||
   yymmdd[1] = (char) (tmPtr->tm_mon + 1) ;
 | 
						||
   yymmdd[2] = (char) tmPtr->tm_mday ;
 | 
						||
}
 | 
						||
 | 
						||
int S4FUNCTION u4remove( const char *ptr )
 | 
						||
{
 | 
						||
   #ifdef E4PARM_LOW
 | 
						||
      if ( ptr == 0 )
 | 
						||
         return error4( 0, e4parm_null, E94504 ) ;
 | 
						||
   #endif
 | 
						||
 | 
						||
   #ifdef S4NO_REMOVE
 | 
						||
      return( unlink( ptr ) ) ;
 | 
						||
   #else
 | 
						||
      return remove( ptr ) ;
 | 
						||
   #endif
 | 
						||
}
 | 
						||
 | 
						||
int u4rename( const char *oldName, const char *newName )
 | 
						||
{
 | 
						||
   #ifdef S4NO_RENAME
 | 
						||
      char  buf[250] ;
 | 
						||
 | 
						||
      memset( (void *)buf, 0, sizeof(buf) ) ;
 | 
						||
   #endif
 | 
						||
 | 
						||
   #ifdef E4PARM_LOW
 | 
						||
      if ( oldName == 0 || newName == 0 )
 | 
						||
         return error4( 0, e4parm_null, E94505 ) ;
 | 
						||
   #endif
 | 
						||
 | 
						||
   #ifdef S4NO_RENAME
 | 
						||
      #ifdef S4UNIX
 | 
						||
         memcpy( (void *)buf, "mv ", 3 ) ; /* system rename or move call */
 | 
						||
      #else
 | 
						||
         memcpy( (void *)buf, "rename ", 7 ) ; /* system copy call */
 | 
						||
      #endif
 | 
						||
      strcat( buf, oldName ) ;
 | 
						||
      strcat( buf, " " ) ;
 | 
						||
      strcat( buf, newName ) ;
 | 
						||
      return system( buf ) ;
 | 
						||
   #else
 | 
						||
      return rename( oldName, newName ) ;
 | 
						||
   #endif
 | 
						||
}
 | 
						||
 | 
						||
#ifdef S4VB_DOS
 | 
						||
 | 
						||
int S4FUNCTION u4ncpy_v( char *to, char *from, int len )
 | 
						||
{
 | 
						||
   return u4ncpy( StringAddress(to), from, (unsigned)len ) ;
 | 
						||
}
 | 
						||
 | 
						||
int S4FUNCTION u4ncpy_v2( char *to, char *from, int len )
 | 
						||
{
 | 
						||
   return u4ncpy( to, c4str(from), len ) ;
 | 
						||
}
 | 
						||
 | 
						||
#endif
 | 
						||
 | 
						||
 | 
						||
#ifdef S4WINDOWS
 | 
						||
#ifdef S4VBASIC
 | 
						||
long S4FUNCTION v4Cstring(char *s)
 | 
						||
{
 | 
						||
   char *d = 0 ;
 | 
						||
   HANDLE b;
 | 
						||
 | 
						||
   if( s )
 | 
						||
   {
 | 
						||
      b = GlobalAlloc(GMEM_FIXED,1+strlen(s));
 | 
						||
      d = (char *) GlobalLock(b);
 | 
						||
      strcpy(d,s);
 | 
						||
   }
 | 
						||
   return (long) d;
 | 
						||
}
 | 
						||
 | 
						||
void S4FUNCTION v4Cstringfree(char *s)
 | 
						||
{
 | 
						||
   HANDLE b;
 | 
						||
   if( s )
 | 
						||
   {
 | 
						||
      b = (GLOBALHANDLE) HIWORD((LONG) s);
 | 
						||
      GlobalUnlock(b);
 | 
						||
      GlobalFree(b);
 | 
						||
   }
 | 
						||
}
 | 
						||
#endif   /* S4VBASIC */
 | 
						||
#endif   /* S4WINDOWS */
 | 
						||
 | 
						||
 | 
						||
#ifndef S4FOX
 | 
						||
/*   memory comparison routines for foreign languages */
 | 
						||
 | 
						||
/*  v4map structure :  There are three lines of numbers in each row.
 | 
						||
                       The upper line (commented out) represents ascii
 | 
						||
                       characters.  The middle line represents the
 | 
						||
                       ascii value.  The lower line is the precedence value
 | 
						||
                       of the corresponding ascii value as compared to
 | 
						||
                       the other ascii values. There are two v4map
 | 
						||
                       structures: one uses the ANSI (Windows) char set,
 | 
						||
                       which will handle English, French and German.
 | 
						||
                       The second is an OEM (ASCII) set for German and
 | 
						||
                       French character sets.
 | 
						||
*/
 | 
						||
#ifdef S4ANSI
 | 
						||
   unsigned char v4map[256] =
 | 
						||
   {
 | 
						||
/*     <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20> */
 | 
						||
/*     0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 */
 | 
						||
     194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,
 | 
						||
 | 
						||
/*     <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20> */
 | 
						||
/*    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 */
 | 
						||
     210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,
 | 
						||
 | 
						||
/*         !   "   #   $   %   &   '   (   )   *   +   ,   -   .   / */
 | 
						||
/*    32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47 */
 | 
						||
       1,156,162,170,157,135,154,163,123,124,136,132,167,133,152,153,
 | 
						||
 | 
						||
/*     0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ? */
 | 
						||
/*    48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 */
 | 
						||
       3,  4,  5,  6,  7,  8,  9, 10, 11, 12,168,169,129,131,130,171,
 | 
						||
 | 
						||
/*     @   A   B   C   D   E   F   G   H   I   J   K   L   M   N   O */
 | 
						||
/*    64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79 */
 | 
						||
     174, 13, 20, 21, 23, 24, 29, 30, 31, 32, 37, 39, 40, 41, 42, 44,
 | 
						||
 | 
						||
/*     P   Q   R   S   T   U   V   W   X   Y   Z   [   \   ]   ^   _ */
 | 
						||
/*    80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95 */
 | 
						||
      50, 51, 52, 53, 54, 55, 60, 61, 62, 63, 66,125,172,126,151,173,
 | 
						||
 | 
						||
/*     `   a   b   c   d   e   f   g   h   i   j   k   l   m   n   o */
 | 
						||
/*    96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111 */
 | 
						||
     164, 67, 74, 75, 77, 78, 83, 84, 85, 86, 91, 93, 94, 95, 96, 98,
 | 
						||
 | 
						||
/*     p   q   r   s   t   u   v   w   x   y   z   {   |   }       <20> */
 | 
						||
/*   112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 */
 | 
						||
     104,105,106,107,109,110,115,116,117,118,122,127,155,128,150,226,
 | 
						||
 | 
						||
/*     <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20> */
 | 
						||
/*   128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 */
 | 
						||
     227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,
 | 
						||
 | 
						||
/*     <20>   `   '   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20> */
 | 
						||
/*   144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159 */
 | 
						||
     243,165,166,244,245,246,247,248,249,250,251,252,253,254,255,255,
 | 
						||
 | 
						||
/*         <20>   <20>   <20> XXX  <20>    |      " XXX   <20>   <20>   <20>   - XXX XXX */
 | 
						||
/*   160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175 */
 | 
						||
       2,175,158,159,160,161,176,177,178,179,181,147,149,134,180,183,
 | 
						||
 | 
						||
/*     <20>   <20>   <20> XXX   '   <20>    XXX   , XXX   <20>   <20>   <20>   <20> XXX   <20> */
 | 
						||
/*   176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191 */
 | 
						||
     140,139,142,143,184,185,186,187,188,141,182,148,144,145,146,189,
 | 
						||
 | 
						||
/*     A   A   A   A   <20>   <20>   <20>   <20>   E   <20>   E   E   I   I   I   I */
 | 
						||
/*   192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207 */
 | 
						||
      16, 15, 17, 19, 14, 18,192, 22, 27, 26, 28, 25, 35, 34, 36, 33,
 | 
						||
 | 
						||
/*     D   <20>   O   O   O   O   <20>   X   0   U   U   U   <20>   Y   b   <20> */
 | 
						||
/*   208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223 */
 | 
						||
      38, 43, 47, 46, 48, 49, 45,137,190, 58, 57, 59, 56, 64, 65,108,
 | 
						||
 | 
						||
/*     <20>   <20>   <20>   a   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20>   <20> */
 | 
						||
/*   224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239 */
 | 
						||
      70, 69, 71, 73, 68, 72,193, 76, 81, 80, 82, 79, 89, 88, 90, 87,
 | 
						||
 | 
						||
/*     <20>   <20>   <20>   <20>   <20>   o   <20>   <20>   0   <20>   <20>   <20>   <20>   y   b   <20> */
 | 
						||
/*   240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 */
 | 
						||
      92, 97,101,100,102,103, 99,138,191,113,112,114,111,120,121,119,
 | 
						||
   } ;
 | 
						||
 | 
						||
   #ifndef S4LANGUAGE
 | 
						||
      int S4CALL u4memcmp( S4CMP_PARM s1, S4CMP_PARM s2, size_t len )
 | 
						||
      {
 | 
						||
         unsigned int i ;
 | 
						||
 | 
						||
         for (i=0; i<len; i++)
 | 
						||
            if ( ((unsigned char *)s1)[i] != ((unsigned char *)s2)[i] )
 | 
						||
            {
 | 
						||
               if ( v4map[((unsigned char *)s1)[i]] < v4map[((unsigned char *)s2)[i]] )
 | 
						||
                  return -1 ;
 | 
						||
               return 1 ;
 | 
						||
            }
 | 
						||
 | 
						||
         return 0 ;
 | 
						||
      }
 | 
						||
   #endif
 | 
						||
#endif
 | 
						||
 | 
						||
#ifdef S4LANGUAGE
 | 
						||
 | 
						||
#ifdef S4GERMAN
 | 
						||
   #ifdef S4ANSI
 | 
						||
         typedef struct
 | 
						||
         {
 | 
						||
            unsigned char extChar ;
 | 
						||
            char expChars[3] ;
 | 
						||
         } LANGUAGE_CONVERT ;
 | 
						||
 | 
						||
         LANGUAGE_CONVERT v4table[] =
 | 
						||
         {
 | 
						||
            { 246, "oe" },  /* <20> */
 | 
						||
            { 223, "ss" },  /* <20> */
 | 
						||
            { 228, "ae" },  /* <20> */
 | 
						||
            { 252, "ue" },  /* <20> */
 | 
						||
            { 235, "ee" },  /* <20> */
 | 
						||
         #ifdef S4CLIPPER
 | 
						||
            { 196, "AE" },  /* <20> */
 | 
						||
            { 214, "OE" },  /* <20> */
 | 
						||
            { 220, "UE" },  /* <20> */
 | 
						||
         #else
 | 
						||
            { 196, "Ae" },
 | 
						||
            { 214, "Oe" },
 | 
						||
            { 220, "Ue" },
 | 
						||
         #endif
 | 
						||
            { 233, "e " },  /* <20> */
 | 
						||
            { 226, "a " },  /* <20> */
 | 
						||
            { 224, "a " },  /* <20> */
 | 
						||
            { 229, "a " },  /* <20> */
 | 
						||
            { 234, "e " },  /* <20> */
 | 
						||
            { 232, "e " },  /* <20> */
 | 
						||
            { 238, "i " },  /* <20> */
 | 
						||
            { 236, "i " },  /* <20> */
 | 
						||
            { 197, "A " },  /* <20> */
 | 
						||
      /* The angstrom is not indexed in German correctly, so this is used instead*/
 | 
						||
            { 244, "o " },  /* <20> */
 | 
						||
            { 242, "o " },  /* <20> */
 | 
						||
            { 251, "u " },  /* <20> */
 | 
						||
            { 249, "u " },  /* <20> */
 | 
						||
            { 255, "y " },  /* <20> */
 | 
						||
            { 225, "a " },  /* <20> */
 | 
						||
            { 237, "i " },  /* <20> */
 | 
						||
            { 243, "o " },  /* <20> */
 | 
						||
            { 250, "u " },  /* <20> */
 | 
						||
            { 241, "n " },  /* <20> */
 | 
						||
            {   0, "  " },   /* A blank entry to make the u4valid work better */
 | 
						||
         };
 | 
						||
   #else  /* ifndef S4ANSI  */
 | 
						||
 | 
						||
      unsigned char v4map[256] =
 | 
						||
      {
 | 
						||
   #ifndef N4OTHER
 | 
						||
   /*      ,  ,  ,  ,  ,  ,  ,  ,  ,   ,   ,  ,  ,   ,  ,   */
 | 
						||
   /*     0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 */
 | 
						||
          0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15,
 | 
						||
 | 
						||
   /*     ,  ,  ,  ,  ,  ,  ,  ,  ,  ,EOF,  ,  ,  ,  ,   */
 | 
						||
   /*    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 */
 | 
						||
         16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
 | 
						||
 | 
						||
   /*      ,  !,  ",  #,  $,  %,  &,  ',  (,  ),  *,  +,  ,,  -,  .,  / */
 | 
						||
   /*    32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47 */
 | 
						||
         32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
 | 
						||
 | 
						||
   /*     0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  :,  ;,  <,  =,  >,  ? */
 | 
						||
   /*    48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 */
 | 
						||
        158,159,160,161,162,163,164,165,166,167, 48, 49, 50, 51, 52, 53,
 | 
						||
 | 
						||
   /*     @,  A,  B,  C,  D,  E,  F,  G,  H,  I,  J,  K,  L,  M,  N,  O */
 | 
						||
   /*    64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79 */
 | 
						||
         54,168,172,173,175,176,178,179,180,181,182,183,184,185,186,188,
 | 
						||
 | 
						||
   /*     P,  Q,  R,  S,  T,  U,  V,  W,  X,  Y,  Z,  [,  \,  ],  ^,  _ */
 | 
						||
   /*    80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95 */
 | 
						||
        190,191,192,193,194,195,197,198,199,200,201, 55, 56, 57, 58, 59,
 | 
						||
 | 
						||
   /*     `,  a,  b,  c,  d,  e,  f,  g,  h,  i,  j,  k,  l,  m,  n,  o */
 | 
						||
   /*    96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111 */
 | 
						||
         60,202,210,211,213,214,219,220,221,222,227,228,229,230,231,233,
 | 
						||
 | 
						||
   /*     p,  q,  r,  s,  t,  u,  v,  w,  x,  y,  z,  {,  |,  },   ,   */
 | 
						||
   /*   112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 */
 | 
						||
        239,240,241,242,244,245,250,251,252,253,255, 61, 62, 63, 64, 65,
 | 
						||
 | 
						||
   /*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
   /*   128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 */
 | 
						||
        174,249,215,205,206,204,207,212,217,218,216,226,225,224,169,170,
 | 
						||
 | 
						||
   /*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
   /*   144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159 */
 | 
						||
        177,208,171,236,237,235,248,247,254,189,196, 66, 67, 68, 69, 70,
 | 
						||
 | 
						||
   /*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
   /*   160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175 */
 | 
						||
        203,223,234,246,232,187,209,238, 71, 72, 73, 74, 75, 76, 77, 78,
 | 
						||
 | 
						||
   /*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
   /*   176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191 */
 | 
						||
         79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
 | 
						||
 | 
						||
   /*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
   /*   192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207 */
 | 
						||
         95, 96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,
 | 
						||
 | 
						||
   /*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
   /*   208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223 */
 | 
						||
        111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,
 | 
						||
 | 
						||
   /*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
   /*   224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239 */
 | 
						||
        127,243,128,129,130,131,132,133,134,135,136,137,138,139,140,141,
 | 
						||
 | 
						||
   /*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,    */
 | 
						||
   /*   240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 */
 | 
						||
        142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157
 | 
						||
      } ;
 | 
						||
   #else
 | 
						||
      #ifdef S4CLIPPER
 | 
						||
      /*      ,  ,  ,  ,  ,  ,  ,  ,  ,   ,   ,  ,  ,   ,  ,   */
 | 
						||
      /*     0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 */
 | 
						||
             0,  1,  2,  3,  4,  5,  6,  7,  8, 30,  9, 10, 11, 31, 12, 13,
 | 
						||
 | 
						||
      /*     ,  ,  ,  ,  ,  ,  ,  ,  ,  ,EOF,  ,  ,  ,  ,   */
 | 
						||
      /*    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 */
 | 
						||
            14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
 | 
						||
 | 
						||
      /*      ,  !,  ",  #,  $,  %,  &,  ',  (,  ),  *,  +,  ,,  -,  .,  / */
 | 
						||
      /*    32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47 */
 | 
						||
            32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
 | 
						||
 | 
						||
      /*     0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  :,  ;,  <,  =,  >,  ? */
 | 
						||
      /*    48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 */
 | 
						||
            48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
 | 
						||
 | 
						||
      /*     @,  A,  B,  C,  D,  E,  F,  G,  H,  I,  J,  K,  L,  M,  N,  O */
 | 
						||
      /*    64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79 */
 | 
						||
            64, 65, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
 | 
						||
 | 
						||
      /*     P,  Q,  R,  S,  T,  U,  V,  W,  X,  Y,  Z,  [,  \,  ],  ^,  _ */
 | 
						||
      /*    80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95 */
 | 
						||
            82, 83, 84, 85, 86, 87, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
 | 
						||
 | 
						||
      /*     `,  a,  b,  c,  d,  e,  f,  g,  h,  i,  j,  k,  l,  m,  n,  o */
 | 
						||
      /*    96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111 */
 | 
						||
            99,100,102,103,104,105,106,107,108,109,110,111,112,113,114,115,
 | 
						||
 | 
						||
      /*     p,  q,  r,  s,  t,  u,  v,  w,  x,  y,  z,  {,  |,  },   ,   */
 | 
						||
      /*   112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 */
 | 
						||
           117,118,119,120,122,123,125,126,127,128,129,130,131,132,133,134,
 | 
						||
 | 
						||
      /*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
      /*   128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 */
 | 
						||
           135,124,136,137,101,138,139,140,141,142,143,144,145,146, 66,147,
 | 
						||
 | 
						||
      /*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
      /*   144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159 */
 | 
						||
           148,149,150,151,116,152,153,154,155, 81, 88,156,157,158,159,160,
 | 
						||
 | 
						||
      /*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
      /*   160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175 */
 | 
						||
           161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,
 | 
						||
 | 
						||
      /*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
      /*   176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191 */
 | 
						||
           177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,
 | 
						||
 | 
						||
      /*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
      /*   192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207 */
 | 
						||
           193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,
 | 
						||
 | 
						||
      /*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
      /*   208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223 */
 | 
						||
           209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,
 | 
						||
 | 
						||
      /*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
      /*   224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239 */
 | 
						||
           225,121,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
 | 
						||
 | 
						||
      /*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,    */
 | 
						||
      /*   240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 */
 | 
						||
           240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,
 | 
						||
         } ;
 | 
						||
 | 
						||
      #else  /* if S4NDX */
 | 
						||
      /*      ,  ,  ,  ,  ,  ,  ,  ,  ,   ,   ,  ,  ,   ,  ,   */
 | 
						||
      /*     0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 */
 | 
						||
             0,140,141,142,143,144,145,146,147,  1,148,149,150,  2,151,152,
 | 
						||
 | 
						||
      /*     ,  ,  ,  ,  ,  ,  ,  ,  ,  ,EOF,  ,  ,  ,  ,   */
 | 
						||
      /*    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 */
 | 
						||
           153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,
 | 
						||
 | 
						||
      /*      ,  !,  ",  #,  $,  %,  &,  ',  (,  ),  *,  +,  ,,  -,  .,  / */
 | 
						||
      /*    32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47 */
 | 
						||
             3,117,132,123,124,109,122,134, 98, 99,110,107,112,108,111,118,
 | 
						||
 | 
						||
      /*     0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  :,  ;,  <,  =,  >,  ? */
 | 
						||
      /*    48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 */
 | 
						||
             4,  5,  6,  7,  8,  9, 10, 11, 12, 13,114,113,104,106,105,116,
 | 
						||
 | 
						||
      /*     @,  A,  B,  C,  D,  E,  F,  G,  H,  I,  J,  K,  L,  M,  N,  O */
 | 
						||
      /*    64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79 */
 | 
						||
           121, 14, 17, 18, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 33,
 | 
						||
 | 
						||
      /*     P,  Q,  R,  S,  T,  U,  V,  W,  X,  Y,  Z,  [,  \,  ],  ^,  _ */
 | 
						||
      /*    80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95 */
 | 
						||
            35, 36, 37, 38, 39, 40, 42, 43, 44, 45, 46,100,119,101,135,137,
 | 
						||
 | 
						||
      /*     `,  a,  b,  c,  d,  e,  f,  g,  h,  i,  j,  k,  l,  m,  n,  o */
 | 
						||
      /*    96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111 */
 | 
						||
           133, 47, 53, 54, 56, 57, 62, 63, 64, 65, 70, 71, 72, 73, 74, 76,
 | 
						||
 | 
						||
      /*     p,  q,  r,  s,  t,  u,  v,  w,  x,  y,  z,  {,  |,  },   ,   */
 | 
						||
      /*   112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 */
 | 
						||
            81, 82, 83, 84, 86, 87, 92, 93, 94, 95, 97,102,120,103,136,169,
 | 
						||
 | 
						||
      /*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
      /*   128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 */
 | 
						||
            19, 88, 58, 49, 48, 50, 51, 55, 59, 60, 61, 66, 67, 68, 15, 16,
 | 
						||
 | 
						||
      /*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
      /*   144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159 */
 | 
						||
            22,130,131, 78, 77, 79, 89, 90, 96, 34, 41,125,126,127,129,128,
 | 
						||
 | 
						||
      /*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
      /*   160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175 */
 | 
						||
            52, 69, 80, 91, 75, 32,138,139,115,170,171,172,173,174,175,176,
 | 
						||
 | 
						||
      /*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
      /*   176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191 */
 | 
						||
           177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,
 | 
						||
 | 
						||
      /*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
      /*   192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207 */
 | 
						||
           193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,
 | 
						||
 | 
						||
      /*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
      /*   208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223 */
 | 
						||
           209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,
 | 
						||
 | 
						||
      /*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
      /*   224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239 */
 | 
						||
           225, 85,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
 | 
						||
 | 
						||
      /*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,    */
 | 
						||
      /*   240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 */
 | 
						||
           240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,
 | 
						||
         } ;
 | 
						||
      #endif   /* ifdef S4CLIPPER */
 | 
						||
   #endif   /* ifndef N4OTHER */
 | 
						||
 | 
						||
      typedef struct
 | 
						||
      {
 | 
						||
         unsigned char extChar ;
 | 
						||
         char expChars[3] ;
 | 
						||
      } LANGUAGE_CONVERT ;
 | 
						||
 | 
						||
      LANGUAGE_CONVERT v4table[] =
 | 
						||
      {
 | 
						||
         { 148, "oe" },
 | 
						||
         { 225, "ss" },
 | 
						||
         { 132, "ae" },
 | 
						||
         { 129, "ue" },
 | 
						||
         { 130, "ee" },
 | 
						||
      #ifdef S4CLIPPER
 | 
						||
         { 142, "AE" },
 | 
						||
         { 153, "OE" },
 | 
						||
         { 154, "UE" },
 | 
						||
      #else
 | 
						||
         { 142, "Ae" },
 | 
						||
         { 153, "Oe" },
 | 
						||
         { 154, "Ue" },
 | 
						||
      #endif
 | 
						||
         { 131, "a " },
 | 
						||
         { 133, "a " },
 | 
						||
         { 134, "a " },
 | 
						||
         { 136, "e " },
 | 
						||
         { 137, "e " },
 | 
						||
         { 138, "e " },
 | 
						||
         { 140, "i " },
 | 
						||
         { 141, "i " },
 | 
						||
         { 143, "A " },
 | 
						||
   /* The angstrom is not indexed in German correctly, so this is used instead*/
 | 
						||
         { 147, "o " },
 | 
						||
         { 149, "o " },
 | 
						||
         { 150, "u " },
 | 
						||
         { 151, "u " },
 | 
						||
         { 152, "y " },
 | 
						||
         { 160, "a " },
 | 
						||
         { 161, "i " },
 | 
						||
         { 162, "o " },
 | 
						||
         { 163, "u " },
 | 
						||
         { 164, "n " },
 | 
						||
         {   0, "  " },   /* A blank entry to make the u4valid work better */
 | 
						||
      };
 | 
						||
 | 
						||
   #endif /* ifdef S4ANSI */
 | 
						||
 | 
						||
#ifndef S4FOX
 | 
						||
#ifdef S4DICTIONARY
 | 
						||
/* sort method uses the dictionary sort order */
 | 
						||
int S4CALL u4memcmp( S4CMP_PARM s1, S4CMP_PARM s2, size_t len )
 | 
						||
{
 | 
						||
   int i ;
 | 
						||
 | 
						||
   for ( i = 0 ; i < len ; i++ )
 | 
						||
      if ( ((unsigned char *)s1)[i] != ((unsigned char *)s2)[i] )
 | 
						||
      {
 | 
						||
         if ( v4map[((unsigned char *)s1)[i]] < v4map[((unsigned char *)s2)[i]] )
 | 
						||
            return -1 ;
 | 
						||
         return 1 ;
 | 
						||
      }
 | 
						||
 | 
						||
   return 0 ;
 | 
						||
}
 | 
						||
#else   /* if PHONEBOOK SORT (default) */
 | 
						||
/* sort method uses the phone book sort order */
 | 
						||
static unsigned char *u4valid( unsigned char * parm )
 | 
						||
{
 | 
						||
   int x = 0 ;
 | 
						||
 | 
						||
   while ( v4table[x].extChar != 0 )
 | 
						||
   {
 | 
						||
      if ( v4table[x].extChar == *(unsigned char *)parm )
 | 
						||
         return (unsigned char *)v4table[x].expChars ;
 | 
						||
      x++ ;
 | 
						||
   }
 | 
						||
   return parm ;
 | 
						||
}
 | 
						||
 | 
						||
int S4CALL u4memcmp( S4CMP_PARM s1, S4CMP_PARM s2, size_t len )
 | 
						||
{
 | 
						||
   short s1Ext, s2Ext ;
 | 
						||
   unsigned char *compare1, *compare2 ;
 | 
						||
   unsigned char *string1Ptr, *string2Ptr ;
 | 
						||
 | 
						||
   string1Ptr = (unsigned char *)s1 ;
 | 
						||
   string2Ptr = (unsigned char *)s2 ;
 | 
						||
 | 
						||
   while( len-- )
 | 
						||
   {
 | 
						||
      if( *string1Ptr != *string2Ptr )
 | 
						||
      {
 | 
						||
         /* The characters are not equal.  Check for extended characters
 | 
						||
            as in German the extended characters are equivalent to
 | 
						||
            expanded characters  */
 | 
						||
 | 
						||
         s1Ext = ( (short)*string1Ptr > 127 ) ;
 | 
						||
         s2Ext = ( (short)*string2Ptr > 127 ) ;
 | 
						||
 | 
						||
         if( s1Ext ^ s2Ext )
 | 
						||
         {
 | 
						||
            /* Only one is an extended character. Check to see if valid and
 | 
						||
            expand to full length */
 | 
						||
 | 
						||
            compare1 = (s1Ext) ? u4valid(string1Ptr) : string1Ptr ;
 | 
						||
            compare2 = (s2Ext) ? u4valid(string2Ptr) : string2Ptr ;
 | 
						||
 | 
						||
            /* Expansion has been done to one string (maximum 2 chars in expansion) */
 | 
						||
            /* now compare the two characters */
 | 
						||
 | 
						||
            if ( compare1[0] == compare2[0] )    /* do if first chars equal */
 | 
						||
            {
 | 
						||
               /* if there are not two valid second chars to check */
 | 
						||
               if ( compare1[1] == ' ' || compare2[1] == ' ' ||
 | 
						||
                    compare1[1] == 0   || compare2[1] == 0 )
 | 
						||
               {
 | 
						||
                  if (v4map[*string1Ptr] < v4map[*string2Ptr])  return -1 ;
 | 
						||
                  return 1 ;
 | 
						||
               }
 | 
						||
 | 
						||
               if ( compare1[1] == compare2[1] )
 | 
						||
               {
 | 
						||
                  (s1Ext) ? string2Ptr++ : string1Ptr++ ;
 | 
						||
                  if (len) len-- ;
 | 
						||
               }
 | 
						||
               else
 | 
						||
               {
 | 
						||
                  if (v4map[*(compare1+1)] < v4map[*(compare2+1)])  return -1 ;
 | 
						||
                  return 1 ;
 | 
						||
               }
 | 
						||
            }
 | 
						||
            else
 | 
						||
            {
 | 
						||
               if (v4map[*compare1] < v4map[*compare2])  return -1 ;
 | 
						||
               return 1 ;
 | 
						||
            }
 | 
						||
         }
 | 
						||
         else
 | 
						||
         {
 | 
						||
            /* Neither character is extended so return according to
 | 
						||
               v4map[].  */
 | 
						||
            if (v4map[*string1Ptr] < v4map[*string2Ptr])  return -1 ;
 | 
						||
            return 1 ;
 | 
						||
         }
 | 
						||
      }
 | 
						||
      /* Characters are equal. Increment the pointers and loop again. */
 | 
						||
 | 
						||
      string1Ptr++ ;
 | 
						||
      string2Ptr++ ;
 | 
						||
   }
 | 
						||
   return 0 ;
 | 
						||
}
 | 
						||
#endif  /*  ifdef S4DICTIONARY */
 | 
						||
#endif  /*  ifndef S4FOX */
 | 
						||
#endif  /*  ifdef S4GERMAN  */
 | 
						||
 | 
						||
 | 
						||
#ifdef S4FRENCH
 | 
						||
 | 
						||
#ifndef S4ANSI
 | 
						||
/* This mapping is for French. */
 | 
						||
unsigned char v4map[256] =
 | 
						||
{
 | 
						||
/*      ,  ,  ,  ,  ,  ,  ,  ,  ,   ,   ,  ,  ,   ,  ,   */
 | 
						||
/*     0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 */
 | 
						||
       0,140,141,142,143,144,145,146,147,  1,148,149,150,  2,151,152,
 | 
						||
 | 
						||
/*     ,  ,  ,  ,  ,  ,  ,  ,  ,  ,EOF,  ,  ,  ,  ,   */
 | 
						||
/*    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 */
 | 
						||
     153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,
 | 
						||
 | 
						||
/*      ,  !,  ",  #,  $,  %,  &,  ',  (,  ),  *,  +,  ,,  -,  .,  / */
 | 
						||
/*    32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47 */
 | 
						||
       3,117,132,123,124,109,122,134, 98, 99,110,107,112,108,111,118,
 | 
						||
 | 
						||
/*     0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  :,  ;,  <,  =,  >,  ? */
 | 
						||
/*    48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 */
 | 
						||
       4,  5,  6,  7,  8,  9, 10, 11, 12, 13,114,113,104,106,105,116,
 | 
						||
 | 
						||
/*     @,  A,  B,  C,  D,  E,  F,  G,  H,  I,  J,  K,  L,  M,  N,  O */
 | 
						||
/*    64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79 */
 | 
						||
     121, 14, 17, 18, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30, 31, 33,
 | 
						||
 | 
						||
/*     P,  Q,  R,  S,  T,  U,  V,  W,  X,  Y,  Z,  [,  \,  ],  ^,  _ */
 | 
						||
/*    80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95 */
 | 
						||
      35, 36, 37, 38, 39, 40, 42, 43, 44, 45, 46,100,119,101,135,137,
 | 
						||
 | 
						||
/*     `,  a,  b,  c,  d,  e,  f,  g,  h,  i,  j,  k,  l,  m,  n,  o */
 | 
						||
/*    96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111 */
 | 
						||
     133, 47, 53, 54, 56, 57, 62, 63, 64, 65, 70, 71, 72, 73, 74, 76,
 | 
						||
 | 
						||
/*     p,  q,  r,  s,  t,  u,  v,  w,  x,  y,  z,  {,  |,  },   ,   */
 | 
						||
/*   112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 */
 | 
						||
      81, 82, 83, 84, 86, 87, 92, 93, 94, 95, 97,102,120,103,136,169,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
/*   128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 */
 | 
						||
      19, 88, 58, 49, 48, 50, 51, 55, 59, 60, 61, 66, 67, 68, 15, 16,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
/*   144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159 */
 | 
						||
      22,130,131, 78, 77, 79, 89, 90, 96, 34, 41,125,126,127,129,128,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
/*   160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175 */
 | 
						||
      52, 69, 80, 91, 75, 32,138,139,115,170,171,172,173,174,175,176,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
/*   176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191 */
 | 
						||
     177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
/*   192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207 */
 | 
						||
     193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
/*   208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223 */
 | 
						||
     209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
/*   224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239 */
 | 
						||
     225, 85,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,    */
 | 
						||
/*   240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 */
 | 
						||
     240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,
 | 
						||
} ;
 | 
						||
 | 
						||
#endif /* ifndef S4ANSI */
 | 
						||
 | 
						||
int S4CALL u4memcmp( S4CMP_PARM s1, S4CMP_PARM s2, size_t len )
 | 
						||
{
 | 
						||
   int i ;
 | 
						||
 | 
						||
   for ( i = 0 ; i < len ; i++ )
 | 
						||
      if ( ((unsigned char *)s1)[i] != ((unsigned char *)s2)[i] )
 | 
						||
      {
 | 
						||
         if ( v4map[((unsigned char *)s1)[i]] < v4map[((unsigned char *)s2)[i]] )
 | 
						||
            return -1 ;
 | 
						||
         return 1 ;
 | 
						||
      }
 | 
						||
 | 
						||
   return 0 ;
 | 
						||
}
 | 
						||
 | 
						||
#endif  /*   ifdef S4FRENCH  */
 | 
						||
 | 
						||
#ifdef S4SWEDISH
 | 
						||
 | 
						||
#ifndef S4ANSI
 | 
						||
 | 
						||
/* This mapping is for Swedish. */
 | 
						||
unsigned char v4map[256] =
 | 
						||
{
 | 
						||
/*      ,  ,  ,  ,  ,  ,  ,  ,  ,   ,   ,  ,  ,   ,  ,   */
 | 
						||
/*     0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 */
 | 
						||
       0,140,141,142,143,144,145,146,147,  1,148,149,150,  2,151,152,
 | 
						||
 | 
						||
/*     ,  ,  ,  ,  ,  ,  ,  ,  ,  ,EOF,  ,  ,  ,  ,   */
 | 
						||
/*    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 */
 | 
						||
     153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,
 | 
						||
 | 
						||
/*      ,  !,  ",  #,  $,  %,  &,  ',  (,  ),  *,  +,  ,,  -,  .,  / */
 | 
						||
/*    32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47 */
 | 
						||
       3,119,132,125,126,111,124,134,100,101,112,109,114,110,113,120,
 | 
						||
 | 
						||
/*     0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  :,  ;,  <,  =,  >,  ? */
 | 
						||
/*    48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 */
 | 
						||
       4,  5,  6,  7,  8,  9, 10, 11, 12, 13,116,115,106,108,107,118,
 | 
						||
 | 
						||
/*     @,  A,  B,  C,  D,  E,  F,  G,  H,  I,  J,  K,  L,  M,  N,  O */
 | 
						||
/*    64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79 */
 | 
						||
     123, 14, 15, 16, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 31,
 | 
						||
 | 
						||
/*     P,  Q,  R,  S,  T,  U,  V,  W,  X,  Y,  Z,  [,  \,  ],  ^,  _ */
 | 
						||
/*    80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95 */
 | 
						||
      32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43,102,121,103,135,137,
 | 
						||
 | 
						||
/*     `,  a,  b,  c,  d,  e,  f,  g,  h,  i,  j,  k,  l,  m,  n,  o */
 | 
						||
/*    96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111 */
 | 
						||
     133, 48, 52, 53, 55, 56, 61, 62, 63, 64, 69, 70, 71, 72, 73, 75,
 | 
						||
 | 
						||
/*     p,  q,  r,  s,  t,  u,  v,  w,  x,  y,  z,  {,  |,  },   ,   */
 | 
						||
/*   112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 */
 | 
						||
      79, 80, 81, 82, 84, 85, 90, 91, 92, 93, 95,104,122,105,136,169,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
/*   128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 */
 | 
						||
      17, 86, 57, 49, 97, 50, 96, 54, 58, 59, 60, 65, 66, 67, 45, 44,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
/*   144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159 */
 | 
						||
      20, 98, 46, 76, 99, 77, 87, 88, 94, 47, 38,127,128,129,131,130,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
/*   160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175 */
 | 
						||
      51, 68, 78, 89, 74, 30,138,139,117,170,171,172,173,174,175,176,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
/*   176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191 */
 | 
						||
     177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
/*   192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207 */
 | 
						||
     193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
/*   208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223 */
 | 
						||
     209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
/*   224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239 */
 | 
						||
     225, 83,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,    */
 | 
						||
/*   240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 */
 | 
						||
     240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,
 | 
						||
} ;
 | 
						||
 | 
						||
#endif /* ifndef S4ANSI */
 | 
						||
 | 
						||
int S4CALL u4memcmp( S4CMP_PARM s1, S4CMP_PARM s2, size_t len )
 | 
						||
{
 | 
						||
   int i ;
 | 
						||
 | 
						||
   for ( i = 0 ; i < len ; i++ )
 | 
						||
      if ( ((unsigned char *)s1)[i] != ((unsigned char *)s2)[i] )
 | 
						||
      {
 | 
						||
         if ( v4map[((unsigned char *)s1)[i]] < v4map[((unsigned char *)s2)[i]] )
 | 
						||
            return -1 ;
 | 
						||
         return 1 ;
 | 
						||
      }
 | 
						||
 | 
						||
   return 0 ;
 | 
						||
}
 | 
						||
 | 
						||
#endif  /*   ifdef S4SWEDISH */
 | 
						||
 | 
						||
#ifdef S4FINNISH
 | 
						||
#ifndef S4ANSI
 | 
						||
 | 
						||
/* This mapping is for Finnish. */
 | 
						||
unsigned char v4map[256] =
 | 
						||
{
 | 
						||
/*      ,  ,  ,  ,  ,  ,  ,  ,  ,   ,   ,  ,  ,   ,  ,   */
 | 
						||
/*     0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 */
 | 
						||
       0,140,141,142,143,144,145,146,147,  1,148,149,150,  2,151,152,
 | 
						||
 | 
						||
/*     ,  ,  ,  ,  ,  ,  ,  ,  ,  ,EOF,  ,  ,  ,  ,   */
 | 
						||
/*    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 */
 | 
						||
     153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,
 | 
						||
 | 
						||
/*      ,  !,  ",  #,  $,  %,  &,  ',  (,  ),  *,  +,  ,,  -,  .,  / */
 | 
						||
/*    32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47 */
 | 
						||
       3,119,132,125,126,111,124,134,100,101,112,109,114,110,113,120,
 | 
						||
 | 
						||
/*     0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  :,  ;,  <,  =,  >,  ? */
 | 
						||
/*    48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 */
 | 
						||
       4,  5,  6,  7,  8,  9, 10, 11, 12, 13,116,115,106,108,107,118,
 | 
						||
 | 
						||
/*     @,  A,  B,  C,  D,  E,  F,  G,  H,  I,  J,  K,  L,  M,  N,  O */
 | 
						||
/*    64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79 */
 | 
						||
     123, 14, 15, 16, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 31,
 | 
						||
 | 
						||
/*     P,  Q,  R,  S,  T,  U,  V,  W,  X,  Y,  Z,  [,  \,  ],  ^,  _ */
 | 
						||
/*    80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95 */
 | 
						||
      32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43,102,121,103,135,137,
 | 
						||
 | 
						||
/*     `,  a,  b,  c,  d,  e,  f,  g,  h,  i,  j,  k,  l,  m,  n,  o */
 | 
						||
/*    96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111 */
 | 
						||
     133, 48, 52, 53, 55, 56, 61, 62, 63, 64, 69, 70, 71, 72, 73, 75,
 | 
						||
 | 
						||
/*     p,  q,  r,  s,  t,  u,  v,  w,  x,  y,  z,  {,  |,  },   ,   */
 | 
						||
/*   112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 */
 | 
						||
      79, 80, 81, 82, 84, 85, 90, 91, 92, 93, 95,104,122,105,136,169,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
/*   128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 */
 | 
						||
      17, 86, 57, 49, 97, 50, 96, 54, 58, 59, 60, 65, 66, 67, 45, 44,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
/*   144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159 */
 | 
						||
      20, 98, 46, 76, 99, 77, 87, 88, 94, 47, 38,127,128,129,131,130,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
/*   160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175 */
 | 
						||
      51, 68, 78, 89, 74, 30,138,139,117,170,171,172,173,174,175,176,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
/*   176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191 */
 | 
						||
     177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
/*   192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207 */
 | 
						||
     193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
/*   208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223 */
 | 
						||
     209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
/*   224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239 */
 | 
						||
     225, 83,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,    */
 | 
						||
/*   240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 */
 | 
						||
     240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,
 | 
						||
} ;
 | 
						||
 | 
						||
#endif /* ifndef S4ANSI */
 | 
						||
 | 
						||
int S4CALL u4memcmp( S4CMP_PARM s1, S4CMP_PARM s2, size_t len )
 | 
						||
{
 | 
						||
   int i ;
 | 
						||
 | 
						||
   for ( i = 0 ; i < len ; i++ )
 | 
						||
      if ( ((unsigned char *)s1)[i] != ((unsigned char *)s2)[i] )
 | 
						||
      {
 | 
						||
         if ( v4map[((unsigned char *)s1)[i]] < v4map[((unsigned char *)s2)[i]] )
 | 
						||
            return -1 ;
 | 
						||
         return 1 ;
 | 
						||
      }
 | 
						||
 | 
						||
   return 0 ;
 | 
						||
}
 | 
						||
 | 
						||
#endif  /*   ifdef S4FINNISH */
 | 
						||
 | 
						||
#ifdef S4NORWEGIAN
 | 
						||
#ifndef S4ANSI
 | 
						||
 | 
						||
/* This mapping is for Norwegian. */
 | 
						||
unsigned char v4map[256] =
 | 
						||
{
 | 
						||
/*      ,  ,  ,  ,  ,  ,  ,  ,  ,   ,   ,  ,  ,   ,  ,   */
 | 
						||
/*     0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 */
 | 
						||
       0,140,141,142,143,144,145,146,147,  1,148,149,150,  2,151,152,
 | 
						||
 | 
						||
/*     ,  ,  ,  ,  ,  ,  ,  ,  ,  ,EOF,  ,  ,  ,  ,   */
 | 
						||
/*    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 */
 | 
						||
     153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,
 | 
						||
 | 
						||
/*      ,  !,  ",  #,  $,  %,  &,  ',  (,  ),  *,  +,  ,,  -,  .,  / */
 | 
						||
/*    32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47 */
 | 
						||
       3,119,132,125,126,111,124,134,100,101,112,109,114,110,113,120,
 | 
						||
 | 
						||
/*     0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  :,  ;,  <,  =,  >,  ? */
 | 
						||
/*    48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 */
 | 
						||
       4,  5,  6,  7,  8,  9, 10, 11, 12, 13,116,115,106,108,107,118,
 | 
						||
 | 
						||
/*     @,  A,  B,  C,  D,  E,  F,  G,  H,  I,  J,  K,  L,  M,  N,  O */
 | 
						||
/*    64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79 */
 | 
						||
     123, 14, 15, 16, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 31,
 | 
						||
 | 
						||
/*     P,  Q,  R,  S,  T,  U,  V,  W,  X,  Y,  Z,  [,  \,  ],  ^,  _ */
 | 
						||
/*    80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95 */
 | 
						||
      32, 33, 34, 35, 36, 37, 39, 40, 41, 42, 43,102,121,103,135,137,
 | 
						||
 | 
						||
/*     `,  a,  b,  c,  d,  e,  f,  g,  h,  i,  j,  k,  l,  m,  n,  o */
 | 
						||
/*    96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111 */
 | 
						||
     133, 48, 52, 53, 55, 56, 61, 62, 63, 64, 69, 70, 71, 72, 73, 75,
 | 
						||
 | 
						||
/*     p,  q,  r,  s,  t,  u,  v,  w,  x,  y,  z,  {,  |,  },   ,   */
 | 
						||
/*   112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 */
 | 
						||
      79, 80, 81, 82, 84, 85, 90, 91, 92, 93, 95,104,122,105,136,169,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
/*   128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 */
 | 
						||
      17, 86, 57, 49, 97, 50, 96, 54, 58, 59, 60, 65, 66, 67, 45, 44,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
/*   144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159 */
 | 
						||
      20, 98, 46, 76, 99, 77, 87, 88, 94, 47, 38,127,128,129,131,130,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
/*   160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175 */
 | 
						||
      51, 68, 78, 89, 74, 30,138,139,117,170,171,172,173,174,175,176,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
/*   176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191 */
 | 
						||
     177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
/*   192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207 */
 | 
						||
     193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
/*   208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223 */
 | 
						||
     209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20> */
 | 
						||
/*   224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239 */
 | 
						||
     225, 83,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
 | 
						||
 | 
						||
/*     <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,  <20>,    */
 | 
						||
/*   240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 */
 | 
						||
     240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,
 | 
						||
} ;
 | 
						||
 | 
						||
#endif /* ifndef S4ANSI */
 | 
						||
 | 
						||
int S4CALL u4memcmp( S4CMP_PARM s1, S4CMP_PARM s2, size_t len )
 | 
						||
{
 | 
						||
   int i ;
 | 
						||
 | 
						||
   for ( i = 0 ; i < len ; i++ )
 | 
						||
      if ( ((unsigned char *)s1)[i] != ((unsigned char *)s2)[i] )
 | 
						||
      {
 | 
						||
         if ( v4map[((unsigned char *)s1)[i]] < v4map[((unsigned char *)s2)[i]] )
 | 
						||
            return -1 ;
 | 
						||
         return 1 ;
 | 
						||
      }
 | 
						||
 | 
						||
   return 0 ;
 | 
						||
}
 | 
						||
 | 
						||
#endif  /*   ifdef S4NORWEGIAN */
 | 
						||
#endif  /*  ifdef S4LANGUAGE  */
 | 
						||
 | 
						||
#else   /* S4FOX */
 | 
						||
 | 
						||
#ifdef S4VFP_KEY
 | 
						||
int t4strToVFPKey( char *dest, const char *src, const int src_l, const int max_l, T4VFP *vfp )
 | 
						||
{
 | 
						||
   int i, j, head, tail, len ;
 | 
						||
   unsigned char index ;
 | 
						||
   translatedChars *v4translatedChar = vfp->tablePtr ;
 | 
						||
   compressedChars *v4compressedChar = vfp->compPtr ;
 | 
						||
   unsigned char *v4codePage = vfp->cpPtr ;
 | 
						||
 | 
						||
   #ifdef E4PARM_LOW
 | 
						||
      if ( max_l < 1 || src_l > max_l )
 | 
						||
         return error4( 0, e4parm, E91643 ) ;
 | 
						||
   #endif
 | 
						||
 | 
						||
   if ( src_l*2 < max_l )   /* partial key: don't need to worry about tail characters */
 | 
						||
   {
 | 
						||
      tail = len = src_l ;
 | 
						||
 | 
						||
      head = 0 ;
 | 
						||
      for ( i = 0 ; (i < len && head < max_l) ; i++ )
 | 
						||
      {
 | 
						||
         index = ( (unsigned char)src[i] < 128 ) ? (unsigned char)src[i] : v4codePage[(unsigned char)src[i]-128] ;
 | 
						||
         if ( v4translatedChar[0][index] != 255 )
 | 
						||
            dest[head++] = v4translatedChar[0][index];
 | 
						||
         else
 | 
						||
         {
 | 
						||
            /* translate both characters */
 | 
						||
            for ( j = 0 ; (j < 2 && head < max_l) ; j++ )
 | 
						||
               dest[head++] = v4translatedChar[0][v4compressedChar[v4translatedChar[1][index]][j]] ;
 | 
						||
         }
 | 
						||
      }
 | 
						||
 | 
						||
      return head ;
 | 
						||
   }
 | 
						||
   else
 | 
						||
   {
 | 
						||
      len = src_l ;
 | 
						||
 | 
						||
      for ( i = len-1 ; (i >= 0 && src[i] == ' ') ; i-- )   /* remove trailing spaces */
 | 
						||
         len-- ;
 | 
						||
 | 
						||
      tail = len ;
 | 
						||
      for ( i = 0 ; (i < len && tail < max_l) ; i++ )   /* determine where to start tail characters */
 | 
						||
      {
 | 
						||
         index = ( (unsigned char)src[i] < 128 ) ? (unsigned char)src[i] : v4codePage[(unsigned char)src[i]-128] ;
 | 
						||
         if ( v4translatedChar[0][index] == 255 )
 | 
						||
            tail++ ;
 | 
						||
      }
 | 
						||
 | 
						||
      head = 0 ;
 | 
						||
      for ( i = 0 ; (i < len && head < max_l) ; i++ )
 | 
						||
      {
 | 
						||
         index = ( (unsigned char)src[i] < 128 ) ? (unsigned char)src[i] : v4codePage[(unsigned char)src[i]-128] ;
 | 
						||
         if ( v4translatedChar[0][index] != 255 )
 | 
						||
         {
 | 
						||
            dest[head++] = v4translatedChar[0][index];
 | 
						||
            if ( ( v4translatedChar[1][index] != 255 ) && ( tail < max_l ) )
 | 
						||
               dest[tail++] = v4translatedChar[1][index];
 | 
						||
         }
 | 
						||
         else
 | 
						||
         {
 | 
						||
            /* translate both characters */
 | 
						||
            for ( j = 0 ; (j < 2 && head < max_l) ; j++ )
 | 
						||
            {
 | 
						||
               dest[head++] = v4translatedChar[0][v4compressedChar[v4translatedChar[1][index]][j]] ;
 | 
						||
               if ( ( v4translatedChar[1][v4compressedChar[v4translatedChar[1][index]][j]] != 255 ) && ( tail < max_l ) )
 | 
						||
                  dest[tail++] = v4translatedChar[1][v4compressedChar[v4translatedChar[1][index]][j]] ;
 | 
						||
            }
 | 
						||
         }
 | 
						||
      }
 | 
						||
 | 
						||
      memset( (void *)&dest[tail], 0, max_l-tail ) ;   /* pad out the remaining (should be same as tag's pChar) */
 | 
						||
      return max_l ;
 | 
						||
   }
 | 
						||
}
 | 
						||
#endif
 | 
						||
 | 
						||
int S4CALL u4keycmp( S4CMP_PARM dataPtr, S4CMP_PARM searchPtr, size_t sLen, size_t dLen, size_t trailCnt, T4VFP *vfp )
 | 
						||
{
 | 
						||
   unsigned char *data = (unsigned char *)dataPtr ;
 | 
						||
   unsigned char *search = (unsigned char *)searchPtr ;
 | 
						||
   unsigned s, d ;
 | 
						||
   int skippedFlag = 0 ;
 | 
						||
 | 
						||
   if ( vfp->sortType == sort4machine )   /* machine doesn't need to handle translated keys */
 | 
						||
      return memcmp( dataPtr, searchPtr, sLen ) ;
 | 
						||
 | 
						||
   /* no special double characters at this point so don't worry about them */
 | 
						||
   d = 0 ;
 | 
						||
   for ( s = 0 ; s < sLen && search[s] >= 10 && d < dLen ; s++ )   /* compare the heads */
 | 
						||
   {
 | 
						||
      if ( data[d] != search[s] )
 | 
						||
      {
 | 
						||
         if ( search[s] == 17 )
 | 
						||
         {
 | 
						||
            if ( data[d] >= 10 ) return 1 ;
 | 
						||
               continue ;
 | 
						||
         }
 | 
						||
         if ( data[d] > search[s] ) return 1 ;
 | 
						||
            return -1 ;
 | 
						||
      }
 | 
						||
      d++ ;
 | 
						||
   }
 | 
						||
 | 
						||
   if ( d < dLen && data[d] >= 10 )   /* remember we skipped some characters */
 | 
						||
        skippedFlag = 1 ;
 | 
						||
   while ( d < dLen && data[d] >= 10 )   /* advance data to it's tail */
 | 
						||
      d++ ;
 | 
						||
 | 
						||
   for ( ; s < sLen && search[s] < 10 ; s++ )   /* compare the tails */
 | 
						||
   {
 | 
						||
      if ( d < dLen )
 | 
						||
      {
 | 
						||
         if ( data[d] != search[s] )
 | 
						||
         {
 | 
						||
            if ( skippedFlag || data[d] > search[s] ) return 1 ;
 | 
						||
            return -1 ;
 | 
						||
         }
 | 
						||
      }
 | 
						||
      else
 | 
						||
      {
 | 
						||
         if ( trailCnt <= 0 || search[s] != 0 )
 | 
						||
         {
 | 
						||
            if ( !skippedFlag ) return -1 ;
 | 
						||
            return 1 ;
 | 
						||
         }
 | 
						||
         trailCnt-- ;
 | 
						||
      }
 | 
						||
      d++ ;
 | 
						||
   }
 | 
						||
 | 
						||
   return 0 ;
 | 
						||
}
 | 
						||
 | 
						||
#ifndef S4FOX   /* do not compile u4memcmp--temporarely not used */
 | 
						||
int S4CALL u4memcmp( S4CMP_PARM s1, S4CMP_PARM s2, size_t len )
 | 
						||
{
 | 
						||
   short s1Ext, s2Ext ;
 | 
						||
   unsigned char *compare1, *compare2 ;
 | 
						||
   unsigned char *string1Ptr, *string2Ptr, *temp1Ptr, *temp2Ptr ;
 | 
						||
   int i, j ;
 | 
						||
   size_t tempLen ;
 | 
						||
 | 
						||
   temp1Ptr = (unsigned char *)s1 ;
 | 
						||
   temp2Ptr = (unsigned char *)s2 ;
 | 
						||
   tempLen = len ;
 | 
						||
 | 
						||
   for ( i = 0 ; i < 2 ; i++ )
 | 
						||
   {
 | 
						||
      /* when i = 0 the characters are being compared */
 | 
						||
      /* when i = 1 the accent marks are being compared */
 | 
						||
      string1Ptr = temp1Ptr ;
 | 
						||
      string2Ptr = temp2Ptr ;
 | 
						||
      len = tempLen ;
 | 
						||
 | 
						||
      while( len-- )
 | 
						||
      {
 | 
						||
         if ( v4general[0][*string1Ptr] == 255 || v4general[0][*string2Ptr] == 255 )
 | 
						||
         {
 | 
						||
            /* Must compare 'compressed' characters */
 | 
						||
            s1Ext = ( v4general[0][*string1Ptr] == 255 ) ;
 | 
						||
            s2Ext = ( v4general[0][*string2Ptr] == 255 ) ;
 | 
						||
 | 
						||
            compare1 = ( s1Ext ) ? (unsigned char *)v4compressed[v4general[1][*string1Ptr]] : string1Ptr ;
 | 
						||
            compare2 = ( s2Ext ) ? (unsigned char *)v4compressed[v4general[1][*string2Ptr]] : string2Ptr ;
 | 
						||
 | 
						||
            /* compare both characters */
 | 
						||
            for ( j = 0 ; j < 2 ; j++ )
 | 
						||
            {
 | 
						||
               /* make sure we have a second char to compare */
 | 
						||
               if ( len == 0 && j == 1 && ( !s1 || !s2 ) )
 | 
						||
               {
 | 
						||
                  if ( s1Ext ) return 1 ;
 | 
						||
                     return -1 ;
 | 
						||
               }
 | 
						||
 | 
						||
               if ( v4general[i][compare1[j]] != v4general[i][compare2[j]] )
 | 
						||
               {
 | 
						||
                  if ( v4general[i][compare1[j]] < v4general[i][compare2[j]] ) return -1 ;
 | 
						||
                     return 1 ;
 | 
						||
               }
 | 
						||
            }
 | 
						||
            /* adjust the pointers correctly */
 | 
						||
            if ( !s1Ext ) string1Ptr++ ;
 | 
						||
               if ( !s2Ext ) string2Ptr++ ;
 | 
						||
                  if (len) len-- ;
 | 
						||
         }
 | 
						||
         else
 | 
						||
         {
 | 
						||
            if ( v4general[i][*string1Ptr] != v4general[i][*string2Ptr] )
 | 
						||
            {
 | 
						||
               if ( v4general[i][*string1Ptr] < v4general[i][*string2Ptr] ) return -1 ;
 | 
						||
                  return 1 ;
 | 
						||
            }
 | 
						||
         }
 | 
						||
         /* Characters are equal. Increment the pointers and loop again. */
 | 
						||
         string1Ptr++ ;
 | 
						||
         string2Ptr++ ;
 | 
						||
      }
 | 
						||
   }
 | 
						||
   return 0 ;
 | 
						||
}
 | 
						||
#endif
 | 
						||
 | 
						||
 | 
						||
/* Visual FoxPro uses collating sequences and codepages to support International Languages */
 | 
						||
 | 
						||
#ifdef S4GENERAL
 | 
						||
/* v4general - supports the general collating sequence */
 | 
						||
 | 
						||
translatedChars v4general[2] =
 | 
						||
   {{
 | 
						||
/*     0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 */
 | 
						||
      32, 16, 16, 16, 16, 16, 16, 16, 16, 17, 16, 16, 16, 16, 16, 16,
 | 
						||
 | 
						||
/*    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 */
 | 
						||
      16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
 | 
						||
 | 
						||
/*    32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47 */
 | 
						||
      17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
 | 
						||
 | 
						||
/*    48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 */
 | 
						||
      86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 33, 34, 35, 36, 37, 38,
 | 
						||
 | 
						||
/*    64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79 */
 | 
						||
      39, 96, 97, 98,100,102,103,104,105,106,107,108,109,111,112,114,
 | 
						||
 | 
						||
/*    80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95 */
 | 
						||
     115,116,117,118,119,120,122,123,124,125,126, 40, 41, 42, 43, 44,
 | 
						||
 | 
						||
/*    96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111 */
 | 
						||
      45, 96, 97, 98,100,102,103,104,105,106,107,108,109,111,112,114,
 | 
						||
 | 
						||
/*   112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 */
 | 
						||
     115,116,117,118,119,120,122,123,124,125,126, 46, 47, 48, 49, 16,
 | 
						||
 | 
						||
/*   128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 */
 | 
						||
           16, 16, 24, 50, 19, 51, 52, 53, 54, 55,118, 19,255, 16, 16, 16,
 | 
						||
 | 
						||
/*   144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159 */
 | 
						||
      16, 24, 24, 19, 19, 56, 30, 30, 57, 58,118, 24,255, 16, 16,125,
 | 
						||
 | 
						||
/*   160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175 */
 | 
						||
      32, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 19, 69, 30, 70, 71,
 | 
						||
 | 
						||
/*   176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191 */
 | 
						||
      72, 73, 88, 89, 74, 75, 76, 77, 78, 87, 79, 19, 80, 81, 82, 83,
 | 
						||
 | 
						||
/*   192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207 */
 | 
						||
      96, 96, 96, 96, 96, 96,255, 98,102,102,102,102,106,106,106,106,
 | 
						||
 | 
						||
/*   208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223 */
 | 
						||
     101,112,114,114,114,114,114, 84,129,120,120,120,120,125,255,255,
 | 
						||
 | 
						||
/*   224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239 */
 | 
						||
      96, 96, 96, 96, 96, 96,255, 98,102,102,102,102,106,106,106,106,
 | 
						||
 | 
						||
/*   240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 */
 | 
						||
     101,112,114,114,114,114,114,125,129,120,120,120,120,125,255,118,
 | 
						||
    },
 | 
						||
 | 
						||
    {
 | 
						||
/*     0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 */
 | 
						||
     255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
 | 
						||
 | 
						||
/*    16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31 */
 | 
						||
          255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
 | 
						||
 | 
						||
/*    32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47 */
 | 
						||
          255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
 | 
						||
 | 
						||
/*    48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 */
 | 
						||
          255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
 | 
						||
 | 
						||
/*    64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79 */
 | 
						||
          255,  0,255,  0,255,  0,255,255,255,  0,255,255,255,255,  0,  0,
 | 
						||
 | 
						||
/*    80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95 */
 | 
						||
          255,255,255,  0,255,  0,255,255,255,  0,255,255,255,255,255,255,
 | 
						||
 | 
						||
/*    96, 97, 98, 99,100,101,102,103,104,105,106,107,108,109,110,111 */
 | 
						||
          255,  0,255,  0,255,  0,255,255,255,  0,255,255,255,255,  0,  0,
 | 
						||
 | 
						||
/*   112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127 */
 | 
						||
          255,255,255,  0,255,  0,255,255,255,  0,255,255,255,255,255,255,
 | 
						||
 | 
						||
/*   128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 */
 | 
						||
          255,255,255,255,255,255,255,255,255,255,  8,255, 0,255,255,255,
 | 
						||
 | 
						||
/*   144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159 */
 | 
						||
          255,255,255,255,255,255,255,255,255,255,  8,255,  0,255,255,  4,
 | 
						||
 | 
						||
/*   160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175 */
 | 
						||
            1,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
 | 
						||
 | 
						||
/*   176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191 */
 | 
						||
          255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
 | 
						||
 | 
						||
/*   192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207 */
 | 
						||
            2,  1,  3,  5,  4,  6,  1,  7,  2,  1,  3,  4,  2,  1,  3,  4,
 | 
						||
 | 
						||
/*   208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223 */
 | 
						||
          255,  5,  2,  1,  3,  5,  4,255,255,  2,  1,  3,  4,  1,  2,  3,
 | 
						||
 | 
						||
/*   224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239 */
 | 
						||
            2,  1,  3,  5,  4,  6,  1,  7,  2,  1,  3,  4,  2,  1,  3,  4,
 | 
						||
 | 
						||
/*   240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 */
 | 
						||
          255,  5,  2,  1,  3,  5,  4,255,255,  2,  1,  3,  4,  1,  2,  4,
 | 
						||
    }};
 | 
						||
 | 
						||
compressedChars v4generalComp[4] =
 | 
						||
{
 | 
						||
   { 79, 69 },   /* "oe" */
 | 
						||
   { 65, 69 },   /* "ae" */
 | 
						||
   { 84, 72 },   /* "th" */
 | 
						||
   { 83, 83 },   /* "ss" */
 | 
						||
} ;
 | 
						||
 | 
						||
#endif   /* S4GENERAL */
 | 
						||
 | 
						||
 | 
						||
/* 1252 - Supports The WINDOWS ANSI CodePage */
 | 
						||
/* Note: all collating sequence translation tables use CodePage 1252 directly;
 | 
						||
         therefore, this CodePage table has a one-to-one mapping */
 | 
						||
/* Note: this is the default CodePage if no CodePage is selected (i.e., cp0 ) */
 | 
						||
 | 
						||
unsigned char CodePage_1252[128] =
 | 
						||
   {
 | 
						||
/*   128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 */
 | 
						||
     128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
 | 
						||
 | 
						||
/*   144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159 */
 | 
						||
     144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,
 | 
						||
 | 
						||
/*   160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175 */
 | 
						||
     160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,
 | 
						||
 | 
						||
/*   176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191 */
 | 
						||
     176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,
 | 
						||
 | 
						||
/*   192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207 */
 | 
						||
     192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,
 | 
						||
 | 
						||
/*   208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223 */
 | 
						||
     208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,
 | 
						||
 | 
						||
/*   224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239 */
 | 
						||
     224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,
 | 
						||
 | 
						||
/*   240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 */
 | 
						||
     240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,
 | 
						||
   } ;
 | 
						||
 | 
						||
#ifdef S4CODEPAGE_437
 | 
						||
/* 437 - Supports The U.S. MS-DOS CodePage */
 | 
						||
 | 
						||
unsigned char CodePage_437[] =
 | 
						||
   {
 | 
						||
/*   128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143 */
 | 
						||
     199,252,233,226,228,224,229,231,234,235,232,239,238,236,196,197,
 | 
						||
 | 
						||
/*   144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159 */
 | 
						||
     201,230,198,244,246,242,251,249,255,214,220,  1,  1,  1,  1,  1,
 | 
						||
 | 
						||
/*   160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175 */
 | 
						||
     225,237,243,250,241,209,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
 | 
						||
 | 
						||
/*   176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191 */
 | 
						||
       1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
 | 
						||
 | 
						||
/*   192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207 */
 | 
						||
       1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
 | 
						||
 | 
						||
/*   208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223 */
 | 
						||
       1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
 | 
						||
 | 
						||
/*   224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239 */
 | 
						||
       1,223,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
 | 
						||
 | 
						||
/*   240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 */
 | 
						||
       1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
 | 
						||
   } ;
 | 
						||
#endif   /* S4CODEPAGE_437 */
 | 
						||
 | 
						||
#endif  /* S4FOX */
 |