210 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			210 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| /* e4str2.c   (c)Copyright Sequiter Software Inc., 1988-1996.  All rights reserved. */
 | |
| 
 | |
| extern S4CONST char *bad4data ;
 | |
| 
 | |
| #ifdef P4ARGS_USED
 | |
|    #pragma argsused
 | |
| #endif
 | |
| const char *S4FUNCTION error4text( CODE4 *c4, const long errCode2 )
 | |
| {
 | |
|    #ifdef E4OFF
 | |
|       return bad4data ;
 | |
|    #else
 | |
|       #ifndef E4OFF_STRING
 | |
|          ERROR4INFO_ARRAY *array ;
 | |
|          long errCode ;
 | |
|          unsigned int szArray ;
 | |
|       #endif
 | |
| 
 | |
|       if ( errCode2 < 0L )   /* 1st level error code */
 | |
|          return e4text( (int)errCode2 ) ;
 | |
|       #ifdef E4OFF_STRING
 | |
|          return bad4data ;
 | |
|       #else
 | |
|          if ( errCode2 < 10000 )
 | |
|             return bad4data ;
 | |
| 
 | |
|          switch( errCode2 / 10000 )
 | |
|          {
 | |
|             #ifdef S4VBASIC
 | |
|                case 4:
 | |
|                   array = error4array4 ;
 | |
|                   szArray = sizeof( error4array4 ) ;
 | |
|                   break ;
 | |
|             #endif
 | |
|             #ifdef S4TESTING
 | |
|                case 5:
 | |
|                   array = error4array5 ;
 | |
|                   szArray = sizeof( error4array5 ) ;
 | |
|                   break ;
 | |
|             #endif
 | |
|             #ifdef S4CBPP
 | |
|                case 6:
 | |
|                   array = error4array6 ;
 | |
|                   szArray = sizeof( error4array6 ) ;
 | |
|                   break ;
 | |
|             #endif
 | |
|             #ifdef S4SERVER
 | |
|                case 7:
 | |
|                   array = error4array7 ;
 | |
|                   szArray = sizeof( error4array7 ) ;
 | |
|                   break ;
 | |
|             #endif
 | |
|             case 8:
 | |
|                array = error4array8 ;
 | |
|                szArray = sizeof( error4array8 ) ;
 | |
|                break ;
 | |
|             case 9:
 | |
|                array = error4array9 ;
 | |
|                szArray = sizeof( error4array9 ) ;
 | |
|                break ;
 | |
|             default:
 | |
|                return bad4data ;
 | |
|          }
 | |
|          errCode = (errCode2 % 10000) + 1;
 | |
|          if ( errCode > ( (long)szArray / (long)sizeof( array[1] ) ) )
 | |
|             return bad4data ;
 | |
|          return array[(int)errCode].errorString ;
 | |
|       #endif
 | |
|    #endif
 | |
| }
 | |
| 
 | |
| long error4number2( const long errCode2 )
 | |
| {
 | |
|    #ifndef E4OFF_STRING
 | |
|       ERROR4INFO_ARRAY *array ;
 | |
|       long errCode ;
 | |
|       unsigned int szArray ;
 | |
| 
 | |
|       if ( errCode2 < 10000 )
 | |
|          return 0 ;
 | |
|       switch( errCode2 / 10000 )
 | |
|       {
 | |
|          #ifdef S4VBASIC
 | |
|             case 4:
 | |
|                array = error4array4 ;
 | |
|                szArray = sizeof( error4array4 ) ;
 | |
|                break ;
 | |
|          #endif
 | |
|          #ifdef S4TESTING
 | |
|             case 5:
 | |
|                array = error4array5 ;
 | |
|                szArray = sizeof( error4array5 ) ;
 | |
|                break ;
 | |
|          #endif
 | |
|          #ifdef S4CBPP
 | |
|             case 6:
 | |
|                array = error4array6 ;
 | |
|                szArray = sizeof( error4array6 ) ;
 | |
|                break ;
 | |
|          #endif
 | |
|          #ifdef S4SERVER
 | |
|             case 7:
 | |
|                array = error4array7 ;
 | |
|                szArray = sizeof( error4array7 ) ;
 | |
|                break ;
 | |
|          #endif
 | |
|          case 8:
 | |
|             array = error4array8 ;
 | |
|             szArray = sizeof( error4array8 ) ;
 | |
|             break ;
 | |
|          case 9:
 | |
|             array = error4array9 ;
 | |
|             szArray = sizeof( error4array9 ) ;
 | |
|             break ;
 | |
|          default:
 | |
|             return 0 ;
 | |
|       }
 | |
|       errCode = (errCode2 % 10000) + 1;
 | |
|       if ( errCode > ( (long)szArray / (long)sizeof( array[1] ) ) )
 | |
|          return 0 ;
 | |
|       return array[ errCode ].error_number ;
 | |
|    #else
 | |
|       return errCode2 ;
 | |
|    #endif
 | |
| }
 | |
| 
 | |
| #ifndef E4OFF_STRING
 | |
| long error4seek( long errCode2 )
 | |
| {
 | |
|    long ePos, pos, sPos, nPos ;
 | |
|    unsigned int szArray ;
 | |
|    long arrayUsed ;
 | |
|    ERROR4INFO_ARRAY *array ;
 | |
| 
 | |
|    if ( errCode2 < 10000 )
 | |
|       return -1 ;
 | |
|    arrayUsed = errCode2 / 10000 ;
 | |
|    switch( arrayUsed )
 | |
|    {
 | |
|       #ifdef S4VBASIC
 | |
|          case 4:
 | |
|             array = error4array4 ;
 | |
|             szArray = sizeof( error4array4 ) ;
 | |
|             break ;
 | |
|       #endif
 | |
|       #ifdef S4TESTING
 | |
|          case 5:
 | |
|             array = error4array5 ;
 | |
|             szArray = sizeof( error4array5 ) ;
 | |
|             break ;
 | |
|       #endif
 | |
|       #ifdef S4CBPP
 | |
|          case 6:
 | |
|             array = error4array6 ;
 | |
|             szArray = sizeof( error4array6 ) ;
 | |
|             break ;
 | |
|       #endif
 | |
|       #ifdef S4SERVER
 | |
|          case 7:
 | |
|             array = error4array7 ;
 | |
|             szArray = sizeof( error4array7 ) ;
 | |
|             break ;
 | |
|       #endif
 | |
|       case 8:
 | |
|          array = error4array8 ;
 | |
|          szArray = sizeof( error4array8 ) ;
 | |
|          break ;
 | |
|       case 9:
 | |
|          array = error4array9 ;
 | |
|          szArray = sizeof( error4array9 ) ;
 | |
|          break ;
 | |
|       default:
 | |
|          return -1 ;
 | |
|    }
 | |
| 
 | |
|    ePos = szArray / sizeof( array[1] ) ;
 | |
|    pos = ePos / 2 ;
 | |
|    sPos = 0 ;
 | |
| 
 | |
|    for ( ;; )
 | |
|    {
 | |
|       if ( pos < 0L || pos >= ePos )  /* code not found */
 | |
|          return 0 ;
 | |
| 
 | |
|       if ( array[pos].error_number == errCode2 )
 | |
|          return (pos - 1 + 10000 * arrayUsed );
 | |
| 
 | |
|       if ( array[pos].error_number > errCode2 )
 | |
|       {
 | |
|          ePos = pos ;
 | |
|          nPos = pos - ( pos - sPos ) / 2 ;
 | |
|          if ( nPos == pos )
 | |
|             pos-- ;
 | |
|          else
 | |
|             pos = nPos ;
 | |
|       }
 | |
|       else
 | |
|       {
 | |
|          sPos = pos ;
 | |
|          nPos = pos + ( ePos - pos ) / 2 ;
 | |
|          if ( nPos == pos )
 | |
|             pos++ ;
 | |
|          else
 | |
|             pos = nPos ;
 | |
|       }
 | |
|    }
 | |
| }
 | |
| 
 | |
| #endif /* S4OFF_STRING */
 |