697 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			697 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
/* u4trans.c   (c)Copyright Sequiter Software Inc., 1988-1996.  All rights reserved. */
 | 
						|
 | 
						|
#include "d4all.h"
 | 
						|
#include "u4trans.h"
 | 
						|
 | 
						|
#ifndef UNIX
 | 
						|
   #ifdef __TURBOC__
 | 
						|
      #pragma hdrstop
 | 
						|
   #endif
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef S4UNIX
 | 
						|
   char *ltoa( long lVal, char *ptr, int num)
 | 
						|
   {
 | 
						|
      c4ltoa45( lVal, ptr, (num>0?num-1:num+1) ) ;
 | 
						|
      ptr[ (num>0? num:-num)-1] = '\0' ;
 | 
						|
      return( ptr ) ;
 | 
						|
   }
 | 
						|
#endif
 | 
						|
 | 
						|
#ifdef S4UTILS
 | 
						|
#ifdef S4WINDOWS
 | 
						|
#ifdef S4DLL_BUILD
 | 
						|
   #define WM_UTIL_STATUS (WM_USER + 1)
 | 
						|
   #define WM_UTIL_CLOSE  (WM_USER + 2)
 | 
						|
   FILE *stdout, *stderr ;
 | 
						|
   unsigned int messageType ; /* icon style for message box */
 | 
						|
 | 
						|
   char *statusStringBlank = "                         ";
 | 
						|
   char *statusStringMessg = "Processing log file: ";
 | 
						|
   char *statusStringBckSp = "\r";
 | 
						|
   char *statusStringFormt = "%3d.%02d%%%%";
 | 
						|
   char *statusStringSpace = "100.00  ";
 | 
						|
 | 
						|
void S4FUNCTION sendStatusMessage( int hWnd, int percentComp )
 | 
						|
{
 | 
						|
   SendMessage( hWnd, WM_UTIL_STATUS, percentComp, 0L ) ;
 | 
						|
   return ;
 | 
						|
}
 | 
						|
 | 
						|
void S4FUNCTION sendCloseMessage( int hWnd )
 | 
						|
{
 | 
						|
   SendMessage( hWnd, WM_UTIL_CLOSE, 0, 0L ) ;
 | 
						|
   return ;
 | 
						|
}
 | 
						|
 | 
						|
/****************************************************************************
 | 
						|
**::  Function: getLogDatabases
 | 
						|
**
 | 
						|
*****************************************************************************
 | 
						|
**
 | 
						|
**    Function: getLogDatabases()
 | 
						|
**
 | 
						|
****************************************************************************/
 | 
						|
#ifdef S4WINDOWS
 | 
						|
int S4FUNCTION  getLogDatabases( char *logFileName, int hWndListBox )
 | 
						|
{
 | 
						|
   /* database required for a file selection listbox */
 | 
						|
   static FIELD4INFO openFileName[] =
 | 
						|
   {
 | 
						|
      { "DBFNAME", 'C', 12, 0 },
 | 
						|
      { "DBFPATH", 'C', 100, 0 },
 | 
						|
      { "PATHLEN", 'N', 3, 0 },
 | 
						|
      { 0, 0, 0 , 0 },
 | 
						|
   } ;
 | 
						|
 | 
						|
   static TAG4INFO fileNameTags[] =
 | 
						|
   {
 | 
						|
      { "NAMETAG", "DBFNAME+DBFPATH", "", 0, 0 },
 | 
						|
      { 0, 0, 0 , 0, 0 },
 | 
						|
   };
 | 
						|
 | 
						|
   HCURSOR hCursor ;
 | 
						|
   DWORD dwIndex ;
 | 
						|
   CODE4 c4 ;
 | 
						|
   TRAN4 *t4 = 0 ;
 | 
						|
   DATA4 *openFile ;
 | 
						|
   FIELD4 *fldDbfName = 0, *fldDbfPath = 0, *fldPathLen = 0 ;
 | 
						|
   char *outMess[4], *data = 0, *cNone = "(none)" ;
 | 
						|
   char buf[13], tmpBuf[256], pathBuf[256], *pathPtr, *tmpPtr ;
 | 
						|
   long logFileLen;
 | 
						|
   int rc = 0, tmpRc, tmpRc2, i = 0 ;
 | 
						|
   unsigned int pathLen ;
 | 
						|
 | 
						|
   hCursor = SetCursor( LoadCursor( (HINSTANCE)NULL, IDC_WAIT ) ) ;
 | 
						|
 | 
						|
   code4init(&c4);
 | 
						|
   c4.lockAttempts = WAIT4EVER;
 | 
						|
 | 
						|
   if( logFileName != 0 )
 | 
						|
   {
 | 
						|
      if( logFileName[0] != 0 )
 | 
						|
      {
 | 
						|
         rc = code4logOpen( &c4, logFileName, "" ) ;
 | 
						|
         code4tranStatusSet( &c4, r4off ) ;
 | 
						|
      }
 | 
						|
      else
 | 
						|
         rc = -1 ;
 | 
						|
   }
 | 
						|
   else
 | 
						|
      rc = -1 ;
 | 
						|
 | 
						|
   if( rc != 0 )
 | 
						|
   {
 | 
						|
      outMess[0] = "Log File Error.\r\n" ;
 | 
						|
      outMess[1] = "Ensure Log File <" ;
 | 
						|
      outMess[2] = logFileName ;
 | 
						|
      outMess[3] = "> is a backed up Log File.\r\n" ;
 | 
						|
      util4out( &c4, stdout, outMess, 4 ) ;
 | 
						|
   }
 | 
						|
 | 
						|
   if( rc == 0 )
 | 
						|
      rc = file4refresh( &c4.transFile.file ) ;
 | 
						|
   if( rc == 0 )
 | 
						|
      logFileLen = file4len( &c4.transFile.file ) ;
 | 
						|
 | 
						|
   if( (rc == 0) && ( logFileLen > 0 ) )
 | 
						|
   {
 | 
						|
      t4 = &c4.c4trans.trans ;
 | 
						|
      openFile = d4createTemp( &c4, openFileName, fileNameTags ) ;
 | 
						|
      if( openFile == 0 )
 | 
						|
         rc = -1 ;
 | 
						|
   }
 | 
						|
 | 
						|
   if( rc == 0 )
 | 
						|
   {
 | 
						|
      fldDbfName = d4field( openFile, "DBFNAME" ) ;
 | 
						|
      fldDbfPath = d4field( openFile, "DBFPATH" ) ;
 | 
						|
      fldPathLen = d4field( openFile, "PATHLEN" ) ;
 | 
						|
      d4tagSelect( openFile, d4tag( openFile, "NAMETAG" ) ) ;
 | 
						|
 | 
						|
      for( rc = tran4top( t4 ) ; ; rc = tran4skip( t4, TRAN4FORWARDS ) )
 | 
						|
      {
 | 
						|
         if( rc != 0 )
 | 
						|
            break ;
 | 
						|
 | 
						|
         switch( tran4type(t4) )
 | 
						|
         {
 | 
						|
            case TRAN4OPEN :
 | 
						|
               data = tran4getData( t4, 0L ) ;
 | 
						|
               if( data == 0 )
 | 
						|
               {
 | 
						|
                  rc = -1 ;
 | 
						|
                  break ;
 | 
						|
               }
 | 
						|
               rc = d4appendStart( openFile, 0 ) ;
 | 
						|
               if( rc != 0 )
 | 
						|
                  break ;
 | 
						|
               memset( buf, 0, sizeof( buf ) ) ;
 | 
						|
               memset( tmpBuf, 0, sizeof( tmpBuf ) ) ;
 | 
						|
               memset( pathBuf, 0, sizeof( pathBuf ) ) ;
 | 
						|
               memcpy( tmpBuf, data+2, *(short *)data ) ;
 | 
						|
               u4namePiece( buf, sizeof( buf ), tmpBuf, 0, 1 ) ;
 | 
						|
               u4namePiece( pathBuf, sizeof(pathBuf), tmpBuf, 1, 1 ) ;
 | 
						|
               pathBuf[(strlen(pathBuf)-strlen(buf))] = 0 ;
 | 
						|
               f4assign( fldDbfName, buf ) ;
 | 
						|
               f4assign( fldDbfPath, pathBuf ) ;
 | 
						|
               f4assignInt( fldPathLen, (int)strlen(pathBuf) ) ;
 | 
						|
               rc = d4append( openFile ) ;
 | 
						|
               break ;
 | 
						|
         }
 | 
						|
      }
 | 
						|
      if( rc == r4eof )
 | 
						|
         rc = 0 ;
 | 
						|
   }
 | 
						|
 | 
						|
   if( rc == 0 )
 | 
						|
   {
 | 
						|
      for( rc = d4top( openFile ); rc == 0 ; rc = d4skip( openFile, 1L ) )
 | 
						|
      {
 | 
						|
         dwIndex = SendMessage( hWndListBox, LB_ADDSTRING, 0, (LPARAM) f4str( fldDbfName ) ) ;
 | 
						|
         tmpPtr  = f4str( fldDbfPath ) ;
 | 
						|
         pathLen = (unsigned int)f4int( fldPathLen ) ;
 | 
						|
         pathPtr = (char *)u4allocDefault( (long)(pathLen+1) ) ;
 | 
						|
         u4ncpy( pathPtr, tmpPtr, pathLen+1 ) ;
 | 
						|
         SendMessage( hWndListBox, LB_SETITEMDATA, (WPARAM)dwIndex, (LPARAM) pathPtr ) ;
 | 
						|
      }
 | 
						|
      if( d4recCount( openFile ) == 0 )
 | 
						|
         SendMessage( hWndListBox, LB_ADDSTRING, 0, (LPARAM) cNone ) ;
 | 
						|
   }
 | 
						|
 | 
						|
   SetCursor( hCursor ) ;
 | 
						|
   tmpRc  = rc ;
 | 
						|
   tmpRc2 = c4.errorCode ;
 | 
						|
   rc = code4close( &c4 ) ;
 | 
						|
   code4transInitUndo( &c4.c4trans ) ;
 | 
						|
   code4initUndo(&c4);
 | 
						|
 | 
						|
   if( rc < 0 || tmpRc < 0 || tmpRc2 != 0 )
 | 
						|
      return -1 ;
 | 
						|
   else
 | 
						|
      return rc ;
 | 
						|
 | 
						|
}
 | 
						|
#endif /* S4WINDOWS */
 | 
						|
 | 
						|
#ifdef S4VBASIC
 | 
						|
 | 
						|
long S4FUNCTION ReturnCPtr( LPSTR string )
 | 
						|
{
 | 
						|
   return (long)string ;
 | 
						|
}
 | 
						|
 | 
						|
#endif   /* S4VBASIC */
 | 
						|
#endif   /* S4DLL_BUILD */
 | 
						|
#endif   /* S4WINDOWS */
 | 
						|
 | 
						|
void util4out(CODE4 *c4, FILE *stream, char *str[], int numStr)
 | 
						|
{
 | 
						|
   int i;
 | 
						|
 | 
						|
   #ifndef S4WINDOWS
 | 
						|
      for (i=0; i<numStr; i++)
 | 
						|
         if (str[i] != 0)
 | 
						|
            fprintf(stream, str[i]);
 | 
						|
   #else
 | 
						|
   #ifdef S4VBASIC
 | 
						|
      int messageExists = 0, messageLen = 0, totalLen = 0 ;
 | 
						|
      char *bufptr, buf[512] ;
 | 
						|
      bufptr = buf ;
 | 
						|
 | 
						|
      for( i=0; i < numStr; i++ )
 | 
						|
      {
 | 
						|
         messageLen = strlen( str[i] )  ;
 | 
						|
         if( messageLen > 0 )
 | 
						|
         {
 | 
						|
            messageExists = 1 ;
 | 
						|
            if( (totalLen+messageLen) < sizeof(buf)-1 )
 | 
						|
            {
 | 
						|
               lstrcpy( (bufptr+totalLen), str[i] ) ;
 | 
						|
               totalLen += messageLen ;
 | 
						|
            }
 | 
						|
            messageLen = 0 ;
 | 
						|
         }
 | 
						|
      }
 | 
						|
 | 
						|
      if( messageExists )
 | 
						|
         MessageBox( (HWND)NULL, buf, "CodeUtility Message", messageType ) ;
 | 
						|
 | 
						|
   #endif
 | 
						|
   #endif
 | 
						|
}
 | 
						|
 | 
						|
void util4printCommandLine(CODE4 *c4, UTIL4FLAG u4[], int numFlags, char *programName)
 | 
						|
{
 | 
						|
   int i;
 | 
						|
   char **commandLine, programExe[41], *spaces;
 | 
						|
 | 
						|
   if (programName == 0)
 | 
						|
      return;
 | 
						|
   u4namePiece(programExe, 41, programName, 0, 1);
 | 
						|
#ifndef S4UNIX
 | 
						|
   c4lower(programExe);
 | 
						|
#endif
 | 
						|
   spaces =(char *) u4allocFree(c4, strlen(programExe)+2);
 | 
						|
   if (spaces == 0)
 | 
						|
      return;
 | 
						|
   spaces[strlen(programExe)+1] = 0;
 | 
						|
   memset(spaces, ' ', strlen(programExe)+1);
 | 
						|
   commandLine = (char **)u4allocFree(c4, (2*numFlags+2)*4);
 | 
						|
   if (commandLine == 0)
 | 
						|
   {
 | 
						|
      u4free(spaces);
 | 
						|
      return;
 | 
						|
   }
 | 
						|
 | 
						|
   commandLine[0] = programExe;
 | 
						|
   commandLine[1] = " [@<parameter file>]\r\n";
 | 
						|
   for (i=0; i<numFlags; i++)
 | 
						|
   {
 | 
						|
      commandLine[2*i+2] = spaces;
 | 
						|
      commandLine[2*i+3] = u4[i].descrip;
 | 
						|
   }
 | 
						|
/*   util4out(c4, stdout, commandLine, 2*i+2);*/
 | 
						|
 | 
						|
   u4free(commandLine);
 | 
						|
   u4free(spaces);
 | 
						|
}
 | 
						|
 | 
						|
static int util4processFlags(CODE4 *c4, UTIL4FLAG u4[], int numFlags, char* argv[], int argc)
 | 
						|
{
 | 
						|
   int i, j, found, count, flag, index;
 | 
						|
   char *outMess[3];
 | 
						|
 | 
						|
   outMess[2] = "\r\n\r\n";
 | 
						|
   for (j=1; j<argc; j++)
 | 
						|
   {
 | 
						|
      if (*argv[j] != '-' && *argv[j] != '/')  /* not a switch */
 | 
						|
      {
 | 
						|
         outMess[0] = "Command line error! Expecting flag but found value: ";
 | 
						|
         outMess[1] = argv[j];
 | 
						|
         util4out(c4, stdout, outMess, 3);
 | 
						|
         return(-1);
 | 
						|
      }
 | 
						|
      found = 0;
 | 
						|
      for (i=0; i<numFlags && !found; i++)
 | 
						|
      {
 | 
						|
         if (u4[i].len > strlen(argv[j]+1))
 | 
						|
            continue;
 | 
						|
         if (u4[i].caseSens)
 | 
						|
         {
 | 
						|
            if (strncmp(u4[i].name, argv[j]+1, strlen(argv[j]+1)) != 0)  /* not this switch */
 | 
						|
               continue;
 | 
						|
         }
 | 
						|
         else
 | 
						|
         {
 | 
						|
            if (strnicmp(u4[i].name, argv[j]+1, strlen(argv[j]+1)) != 0)  /* not this switch */
 | 
						|
               continue;
 | 
						|
         }
 | 
						|
         found = 1;
 | 
						|
         if (u4[i].found != 0)
 | 
						|
         {
 | 
						|
            if (u4[i].multiples == 0)  /* discard multiples */
 | 
						|
               break;
 | 
						|
            if (u4[i].multiples == -1)
 | 
						|
            {
 | 
						|
               outMess[0] = "Command line error! Flag found more than once: ";
 | 
						|
               outMess[1] = argv[j];
 | 
						|
               util4out(c4, stdout, outMess, 3);
 | 
						|
               return(-1);
 | 
						|
            }
 | 
						|
            if (u4[i].multiples == 1 && u4[i].values != 0)
 | 
						|
            {
 | 
						|
               for (; u4[i].numPtr>0; u4[i].numPtr-=4)
 | 
						|
                  u4free(u4[i].ptr[u4[i].numPtr/4-1]);
 | 
						|
               u4free(u4[i].ptr);
 | 
						|
            }
 | 
						|
         }
 | 
						|
         if (u4[i].values == 0)
 | 
						|
         {
 | 
						|
            if (u4[i].ptr == 0)
 | 
						|
            {
 | 
						|
               u4[i].ptr = (char **)u4allocFree(c4, 4);
 | 
						|
               if (u4[i].ptr == 0)
 | 
						|
                  return(-1);
 | 
						|
               u4[i].ptr[0] = (char *)u4allocFree(c4, 1);
 | 
						|
               if (u4[i].ptr[0] == 0)
 | 
						|
                  return(-1);
 | 
						|
               u4[i].numPtr = 4;
 | 
						|
            }
 | 
						|
            *u4[i].ptr[0] = 1;
 | 
						|
            u4[i].found = 1;
 | 
						|
            continue;
 | 
						|
         }
 | 
						|
         count = u4[i].values > 0 ? u4[i].values : -u4[i].values;
 | 
						|
         flag = j;
 | 
						|
         while (count > 0 && j+1 < argc && *argv[j+1] != '-' && *argv[j+1] != '/')
 | 
						|
         {
 | 
						|
            j++;
 | 
						|
            if (u4[i].ptr == 0)
 | 
						|
            {
 | 
						|
               u4[i].ptr = (char **)u4allocFree(c4, 4);
 | 
						|
               if (u4[i].ptr == 0)
 | 
						|
                  return(-1);
 | 
						|
               if (u4[i].multiples == 2 && !u4[i].exact)
 | 
						|
               {
 | 
						|
                  u4[i].ptr[0] = (char *)u4allocFree(c4, strlen(argv[j])+2);
 | 
						|
                  if (u4[i].ptr[0] == 0)
 | 
						|
                     return(-1);
 | 
						|
                  *u4[i].ptr[0] = index = 1;
 | 
						|
                  strcpy(u4[i].ptr[0]+1, argv[j]);
 | 
						|
               }
 | 
						|
               else
 | 
						|
               {
 | 
						|
                  u4[i].ptr[0] = (char *)u4allocFree(c4, strlen(argv[j])+1);
 | 
						|
                  if (u4[i].ptr[0] == 0)
 | 
						|
                     return(-1);
 | 
						|
                  strcpy(u4[i].ptr[0], argv[j]);
 | 
						|
               }
 | 
						|
               u4[i].numPtr = 4;
 | 
						|
            }
 | 
						|
            else
 | 
						|
               if (u4[i].multiples == 1 && count == u4[i].values)  /* replace */
 | 
						|
               {
 | 
						|
                  for (; u4[i].numPtr>0; u4[i].numPtr-=4)
 | 
						|
                     u4free(u4[i].ptr[u4[i].numPtr/4-1]);
 | 
						|
                  u4[i].ptr[0] = (char *)u4allocFree(c4, strlen(argv[j])+1);
 | 
						|
                  if (u4[i].ptr[0] == 0)
 | 
						|
                     return(-1);
 | 
						|
                  u4[i].numPtr = 4;
 | 
						|
                  strcpy(u4[i].ptr[0], argv[j]);
 | 
						|
               }
 | 
						|
               else  /* add */
 | 
						|
               {
 | 
						|
                  if (count == u4[i].values)
 | 
						|
                     index = *u4[i].ptr[u4[i].numPtr/4-1] + 1;
 | 
						|
                  if (u4allocAgain(c4, (char **)&u4[i].ptr, &u4[i].numPtr, u4[i].numPtr+4) == e4memory)
 | 
						|
                     return(-1);
 | 
						|
                  u4[i].numPtr -= 4;
 | 
						|
                  if (u4[i].multiples == 2 && !u4[i].exact)
 | 
						|
                  {
 | 
						|
                     u4[i].ptr[u4[i].numPtr/4] = (char *)u4allocFree(c4, strlen(argv[j])+2);
 | 
						|
                     if (u4[i].ptr[u4[i].numPtr/4] == 0)
 | 
						|
                        return(-1);
 | 
						|
                     *u4[i].ptr[u4[i].numPtr/4] = index;
 | 
						|
                     strcpy(u4[i].ptr[u4[i].numPtr/4]+1, argv[j]);
 | 
						|
                  }
 | 
						|
                  else
 | 
						|
                  {
 | 
						|
                     u4[i].ptr[u4[i].numPtr/4] = (char *)u4allocFree(c4, strlen(argv[j])+1);
 | 
						|
                     if (u4[i].ptr[u4[i].numPtr/4] == 0)
 | 
						|
                        return(-1);
 | 
						|
                     strcpy(u4[i].ptr[u4[i].numPtr/4], argv[j]);
 | 
						|
                  }
 | 
						|
                  u4[i].numPtr += 4;
 | 
						|
               }
 | 
						|
            count--;
 | 
						|
         }
 | 
						|
         if ((u4[i].exact && count > 0) || (count == u4[i].values))
 | 
						|
         {
 | 
						|
            outMess[0] = "Command line error! Not enough values for flag: ";
 | 
						|
            outMess[1] = argv[flag];
 | 
						|
            util4out(c4, stdout, outMess, 3);
 | 
						|
            return(-1);
 | 
						|
         }
 | 
						|
         u4[i].found = 1;
 | 
						|
      }
 | 
						|
      if (!found)
 | 
						|
      {
 | 
						|
         outMess[0] = "Command line error! Unknown flag: ";
 | 
						|
         outMess[1] = argv[j];
 | 
						|
         util4out(c4, stdout, outMess, 3);
 | 
						|
         return(-1);
 | 
						|
      }
 | 
						|
   }
 | 
						|
   return(0);
 | 
						|
}
 | 
						|
 | 
						|
void util4flagsFree(UTIL4FLAG u4[], int numFlags)
 | 
						|
{
 | 
						|
   int i ;
 | 
						|
 | 
						|
   for (i=0; i<numFlags; i++)
 | 
						|
   {
 | 
						|
      for (; u4[i].numPtr>0; u4[i].numPtr-=4)
 | 
						|
         u4free(u4[i].ptr[u4[i].numPtr/4-1]);
 | 
						|
      u4free(u4[i].ptr);
 | 
						|
   }
 | 
						|
}
 | 
						|
 | 
						|
int util4parseCommandLine(CODE4 *c4, UTIL4FLAG u4[], int numFlags, char* argv[], int argc)
 | 
						|
{
 | 
						|
   int rc, quotes, inArg, j;
 | 
						|
   unsigned int i, lenRead, buffSize ;
 | 
						|
   long len, offset=0;
 | 
						|
   char *buff;
 | 
						|
   char **argvParse;
 | 
						|
   int argcParse;
 | 
						|
   FILE4 f4;
 | 
						|
 | 
						|
   if ((*argv[1] == '-' || *argv[1] == '/') && *(argv[1]+1) == '?')
 | 
						|
      return(-1);
 | 
						|
   if (*argv[1] == '@')
 | 
						|
   {
 | 
						|
      rc = file4open(&f4, c4, argv[1]+1, 0);
 | 
						|
      if (rc != 0)
 | 
						|
         return(rc);
 | 
						|
      len = file4len(&f4);
 | 
						|
      if (len < 0)
 | 
						|
      {
 | 
						|
         file4close(&f4);
 | 
						|
         return((int) len);
 | 
						|
      }
 | 
						|
      if (len >= 65001)
 | 
						|
      {
 | 
						|
         buff = (char *)u4allocFree(c4, 65001);
 | 
						|
         buffSize = 65000;
 | 
						|
      }
 | 
						|
      else
 | 
						|
      {
 | 
						|
         buff = (char *)u4allocFree(c4, len+1);
 | 
						|
         buffSize = (unsigned int)len;
 | 
						|
      }
 | 
						|
      if (buff == 0)
 | 
						|
      {
 | 
						|
         file4close(&f4);
 | 
						|
         return(-1);
 | 
						|
      }
 | 
						|
      while (len-offset > 0)
 | 
						|
      {
 | 
						|
         lenRead = file4read(&f4, offset, buff, buffSize);
 | 
						|
         if (lenRead == 0)
 | 
						|
         {
 | 
						|
            rc = -1;
 | 
						|
            break;
 | 
						|
         }
 | 
						|
         quotes = 0;
 | 
						|
         inArg = 0;
 | 
						|
         argcParse = 0;
 | 
						|
         for (i=0; i<lenRead; i++)
 | 
						|
         {
 | 
						|
            if (!quotes && buff[i] == '\"')
 | 
						|
               quotes = 1;
 | 
						|
            if (quotes && buff[i] == '\"' && i > 0 && buff[i-1] != '\\')
 | 
						|
               quotes = 0;
 | 
						|
            if (buff[i] < 32 || buff[i] == 127)
 | 
						|
            {
 | 
						|
               buff[i] = 0;
 | 
						|
               inArg = 0;
 | 
						|
            }
 | 
						|
            if (!quotes && buff[i] == ' ')
 | 
						|
            {
 | 
						|
               buff[i] = 0;
 | 
						|
               inArg = 0;
 | 
						|
            }
 | 
						|
            if (!inArg && buff[i] > 32)
 | 
						|
            {
 | 
						|
               inArg = 1;
 | 
						|
               argcParse++;
 | 
						|
            }
 | 
						|
         }
 | 
						|
         if (inArg)
 | 
						|
            argcParse--;
 | 
						|
         if (argcParse < 1)
 | 
						|
            break;
 | 
						|
         argvParse = (char **)u4allocFree(c4, 4*(argcParse+1));
 | 
						|
         if (argvParse == 0)
 | 
						|
         {
 | 
						|
            rc = -1;
 | 
						|
            break;
 | 
						|
         }
 | 
						|
         i = 0;
 | 
						|
         for (j=0; j<argcParse; j++)
 | 
						|
         {
 | 
						|
            while (buff[i] == 0)
 | 
						|
               i++;
 | 
						|
            argvParse[j+1] = buff+i;
 | 
						|
            i += strlen(buff+i);
 | 
						|
         }
 | 
						|
         offset += i;
 | 
						|
         rc = util4processFlags(c4, u4, numFlags, argvParse, argcParse+1);
 | 
						|
         u4free(argvParse);
 | 
						|
         if (rc != 0)
 | 
						|
            break;
 | 
						|
      }
 | 
						|
      u4free(buff);
 | 
						|
      if (rc != 0)
 | 
						|
         file4close(&f4);
 | 
						|
      else
 | 
						|
         rc = file4close(&f4);
 | 
						|
      if (rc == 0)
 | 
						|
         rc = util4processFlags(c4, u4, numFlags, argv+1, argc-1);
 | 
						|
   }
 | 
						|
   else
 | 
						|
      rc = util4processFlags(c4, u4, numFlags, argv, argc);
 | 
						|
   if (rc != 0)
 | 
						|
      util4flagsFree(u4, numFlags);
 | 
						|
   return(rc);
 | 
						|
}
 | 
						|
 | 
						|
char *util4rightJ(char *str, int len)
 | 
						|
{
 | 
						|
   short i=-1;
 | 
						|
 | 
						|
   len--;
 | 
						|
   while ((++i <= len) && (str[i] != 0));
 | 
						|
   if (i > len)
 | 
						|
      return str;
 | 
						|
   while (i > -1)
 | 
						|
      str[len--] = str[i--];
 | 
						|
   while (len > -1)
 | 
						|
      str[len--] = ' ';
 | 
						|
   return str;
 | 
						|
}
 | 
						|
 | 
						|
int util4checkOnOffCommandLine(CODE4 *c4, UTIL4FLAG u4[], int flag, int def)
 | 
						|
{
 | 
						|
   char *outMess[5];
 | 
						|
 | 
						|
   if (u4[flag].ptr == 0)
 | 
						|
      return(def);
 | 
						|
   c4upper( u4[flag].ptr[0] ) ;
 | 
						|
   if (strcmp(u4[flag].ptr[0], "OFF") == 0)
 | 
						|
      return(0);
 | 
						|
   if (strcmp(u4[flag].ptr[0], "ON") == 0)
 | 
						|
      return(1);
 | 
						|
   outMess[0] = "Command line error! -";
 | 
						|
   outMess[1] = u4[flag].name;
 | 
						|
   outMess[2] = " value ";
 | 
						|
   outMess[3] = u4[flag].ptr[0];
 | 
						|
   outMess[4] = " is not ON or OFF.\r\n";
 | 
						|
   util4out(c4, stdout, outMess, 5);
 | 
						|
   return(-1);
 | 
						|
}
 | 
						|
 | 
						|
long util4checkRangeCommandLine(CODE4 *c4, UTIL4FLAG u4[], int flag, long def, long lRange, long hRange)
 | 
						|
{
 | 
						|
   char *outMess[9];
 | 
						|
   char tempLow[12], tempHigh[12];
 | 
						|
   long temp;
 | 
						|
 | 
						|
   if (u4[flag].ptr == 0)
 | 
						|
      return(def);
 | 
						|
   temp = atol(u4[flag].ptr[0]);
 | 
						|
   if (hRange - lRange < 0)
 | 
						|
      return(temp);
 | 
						|
   if (temp > hRange || temp < lRange)
 | 
						|
   {
 | 
						|
      outMess[0] = "Command line error! -";
 | 
						|
      outMess[1] = u4[flag].name;
 | 
						|
      outMess[2] = " value ";
 | 
						|
      outMess[3] = u4[flag].ptr[0];
 | 
						|
      outMess[4] = " is out of range ";
 | 
						|
      outMess[5] = ltoa(lRange, tempLow, 10);
 | 
						|
      outMess[6] = " to ";
 | 
						|
      outMess[7] = ltoa(hRange, tempHigh, 10);
 | 
						|
      outMess[8] = ".\r\n";
 | 
						|
      util4out(c4, stdout, outMess, 9);
 | 
						|
      return(lRange-1);
 | 
						|
   }
 | 
						|
   return(temp);
 | 
						|
}
 | 
						|
 | 
						|
#ifndef S4OFF_TRAN
 | 
						|
#ifndef S4OFF_COMMUNICATIONS
 | 
						|
 | 
						|
int tran4serverEof( TRAN4 *trans, unsigned long *tranFileEof )
 | 
						|
{
 | 
						|
   CONNECTION4 *connection ;
 | 
						|
   int rc ;
 | 
						|
   CONNECTION4TRAN_EOF_INFO_OUT *out ;
 | 
						|
 | 
						|
   #ifdef E4PARM_LOW
 | 
						|
      if ( trans == 0 || tranFileEof == 0 )
 | 
						|
         return e4parm_null ;
 | 
						|
   #endif
 | 
						|
 | 
						|
   if ( trans->c4trans->c4->defaultServer == 0 )
 | 
						|
      return r4noServer ;
 | 
						|
 | 
						|
   connection = trans->c4trans->c4->defaultServer->connect ;
 | 
						|
   #ifdef E4ANALYZE
 | 
						|
      if ( connection == 0 )
 | 
						|
         return e4struct ;
 | 
						|
   #endif
 | 
						|
 | 
						|
   connection4assign( connection, CON4TRAN_EOF, 0l, 0l ) ;
 | 
						|
   connection4send( connection ) ;
 | 
						|
   rc = connection4receive( connection ) ;
 | 
						|
   if ( rc < 0 )
 | 
						|
      return rc ;
 | 
						|
 | 
						|
   rc = connection4status( connection ) ;
 | 
						|
   if ( rc < 0 )
 | 
						|
      return rc ;
 | 
						|
 | 
						|
   if ( connection4len( connection ) != sizeof( CONNECTION4TRAN_EOF_INFO_OUT ) )
 | 
						|
      return e4packetLen ;
 | 
						|
   out = (CONNECTION4TRAN_EOF_INFO_OUT *)connection4data( connection ) ;
 | 
						|
 | 
						|
   *tranFileEof = out->eof ;
 | 
						|
   return 0 ;
 | 
						|
}
 | 
						|
 | 
						|
int tran4serverEofHalt( TRAN4 *trans, unsigned long *tranFileEof )
 | 
						|
{
 | 
						|
   CONNECTION4 *connection ;
 | 
						|
   int rc ;
 | 
						|
   CONNECTION4TRAN_EOF_HALT_INFO_OUT *out ;
 | 
						|
 | 
						|
   #ifdef E4PARM_LOW
 | 
						|
      if ( trans == 0 || tranFileEof == 0 )
 | 
						|
         return e4parm_null ;
 | 
						|
   #endif
 | 
						|
 | 
						|
   if ( trans->c4trans->c4->defaultServer == 0 )
 | 
						|
      return r4noServer ;
 | 
						|
 | 
						|
   connection = trans->c4trans->c4->defaultServer->connect ;
 | 
						|
   #ifdef E4ANALYZE
 | 
						|
      if ( connection == 0 )
 | 
						|
         return e4struct ;
 | 
						|
   #endif
 | 
						|
 | 
						|
   connection4assign( connection, CON4TRAN_EOF_HALT, 0l, 0l ) ;
 | 
						|
   connection4send( connection ) ;
 | 
						|
   rc = connection4receive( connection ) ;
 | 
						|
   if ( rc < 0 )
 | 
						|
      return rc ;
 | 
						|
 | 
						|
   rc = connection4status( connection ) ;
 | 
						|
   if ( rc < 0 )
 | 
						|
      return rc ;
 | 
						|
 | 
						|
   if ( connection4len( connection ) != sizeof( CONNECTION4TRAN_EOF_HALT_INFO_OUT ) )
 | 
						|
      return e4packetLen ;
 | 
						|
   out = (CONNECTION4TRAN_EOF_HALT_INFO_OUT *)connection4data( connection ) ;
 | 
						|
 | 
						|
   *tranFileEof = out->eof ;
 | 
						|
   return 0 ;
 | 
						|
}
 | 
						|
 | 
						|
#endif  /* S4OFF_COMMUNICATIONS */
 | 
						|
#endif  /* S4OFF_TRAN */
 | 
						|
#endif  /* S4UTILS */
 | 
						|
 |