home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / cscope.zip / SPLIT.C < prev    next >
C/C++ Source or Header  |  1995-05-10  |  8KB  |  272 lines

  1. #define INCL_DOS
  2. #define INCL_DOSERRORS
  3. #define INCL_DOSFILEMGR
  4. #define INCL_DOSMEMMGR
  5.  
  6. #include <os2.h>
  7. #include <string.h>
  8. #include <stdio.h>
  9.  
  10. /*
  11. ** COMscope buffer marker definitions
  12. */
  13. #define CS_WRITE       0x9000
  14. #define CS_READ        0xa000
  15. #define CS_WRITE_IMM   0xb000
  16. #define CS_READ_IMM    0xc000
  17.  
  18. char szCaptureFile[CCHMAXPATH];
  19. char szReadDataFile[CCHMAXPATH];
  20. char szWriteDataFile[CCHMAXPATH];
  21. char szJunkDataFile[CCHMAXPATH];
  22. USHORT *pwCaptureBuffer;
  23. BYTE *pbyReadBuffer;
  24. BYTE *pbyWriteBuffer;
  25. BYTE *pbyJunkBuffer;
  26.  
  27. BOOL WriteFile(char szFileSpec[],BYTE *pbyBuffer,ULONG ulCount)
  28.   {
  29.   FILESTATUS3 stFileInfo;
  30.   USHORT wFileError;
  31.   HFILE hFile;
  32.   ULONG ulStatus;
  33.   BOOL bWriteOK = TRUE;
  34.   char szMessage[100];
  35.   char szCaption[80];
  36.  
  37.   while ((wFileError = DosOpen(szFileSpec,&hFile,&ulStatus,0L,0,0x12,0x0111,(PEAOP2)0L)) != 0)
  38.     {
  39.     switch (wFileError)
  40.       {
  41.       case ERROR_FILE_NOT_FOUND:
  42.         sprintf(szCaption,"\nWrite Error - Cannot find file %s\n",szFileSpec);
  43.         break;
  44.       case ERROR_PATH_NOT_FOUND:
  45.         sprintf(szCaption,"\nWrite Error - Cannot find path %s\n",szFileSpec);
  46.         break;
  47.       case ERROR_ACCESS_DENIED:
  48.         sprintf(szCaption,"\nWrite Error - Access denied for writing %s\n",szFileSpec);
  49.         break;
  50.       default:
  51.         sprintf(szCaption,"\nWrite Error - Failed to open %s - error = %u\n",szFileSpec,wFileError);
  52.         break;
  53.       }
  54.     printf(szCaption);
  55.     return(FALSE);
  56.     }
  57.   DosQueryFileInfo(hFile,1,&stFileInfo,sizeof(FILESTATUS3));
  58.   if ((ulStatus == FILE_EXISTED) && (stFileInfo.cbFile > 0))
  59.     DosSetFileSize(hFile,0);
  60.   if ((wFileError = DosWrite(hFile,(PVOID)pbyBuffer,ulCount,&ulCount)) != 0)
  61.     {
  62.     bWriteOK = FALSE;
  63.     sprintf(szMessage,"\nWrite to %s failed - error = %u\n",szFileSpec,wFileError);
  64.     }
  65.   else
  66.     sprintf(szMessage,"\n%u bytes written to %s\n",ulCount,szFileSpec);
  67.   printf(szMessage);
  68.   DosClose(hFile);
  69.   return(bWriteOK);
  70.   }
  71.  
  72. BOOL ReadFile(char szFileSpec[],ULONG *pulCount)
  73.   {
  74.   USHORT wFileError;
  75.   HFILE hFile;
  76.   ULONG ulStatus;
  77.   FILESTATUS3 stFileInfo;
  78.   char szMessage[100];
  79.   char szCaption[80];
  80.   APIRET rc;
  81.   BOOL bReadOK = TRUE;
  82.  
  83.   if ((wFileError = DosOpen(szFileSpec,&hFile,&ulStatus,0L,0,1,0x0110,(PEAOP2)0L)) != 0)
  84.     {
  85.     switch (wFileError)
  86.       {
  87.       case ERROR_FILE_NOT_FOUND:
  88.         sprintf(szCaption,"\nRead Error - Cannot find file %s\n",szFileSpec);
  89.         break;
  90.       case ERROR_PATH_NOT_FOUND:
  91.         sprintf(szCaption,"\nRead Error - Cannot find path %s\n",szFileSpec);
  92.         break;
  93.       case ERROR_ACCESS_DENIED:
  94.         sprintf(szCaption,"\nRead Error - Access denied for reading %s\n",szFileSpec);
  95.         break;
  96.       default:
  97.         sprintf(szCaption,"\nRead Error - Failed to open %s - error = %u\n",szFileSpec,wFileError);
  98.         break;
  99.       }
  100.     printf(szCaption);
  101.     return(FALSE);
  102.     }
  103.   DosQueryFileInfo(hFile,1,&stFileInfo,sizeof(FILESTATUS3));
  104.   *pulCount = stFileInfo.cbFile;
  105.   if ((rc = DosAllocMem((PPVOID)&pwCaptureBuffer,*pulCount,PAG_COMMIT | PAG_READ | PAG_WRITE)) != 0)
  106.     {
  107.     bReadOK = FALSE;
  108.     sprintf(szMessage,"\nCapture buffer allocation error = %d\n",rc);
  109.     }
  110.   else
  111.     if ((wFileError = DosRead(hFile,(PVOID)pwCaptureBuffer,*pulCount,pulCount)) != 0)
  112.       {
  113.       bReadOK = FALSE;
  114.       sprintf(szMessage,"\nRead from %s failed - error = %u\n",szFileSpec,wFileError);
  115.       DosFreeMem(pwCaptureBuffer);
  116.       }
  117.     else
  118.       sprintf(szMessage,"\n%u bytes read from %s\n",*pulCount,szFileSpec);
  119.   DosClose(hFile);
  120.   printf(szMessage);
  121.   return(bReadOK);
  122.   }
  123.  
  124. void AppendRD(char szFileSpec[])
  125.   {
  126.   int iIndex = 0;
  127.  
  128.   while (szFileSpec[iIndex++] != 0);
  129.   while (szFileSpec[--iIndex] != '.')
  130.     {
  131.     if (iIndex == 0)
  132.       {
  133.       while (szFileSpec[iIndex++] != 0);
  134.       szFileSpec[--iIndex] = '.';
  135.       break;
  136.       }
  137.     }
  138.   szFileSpec[++iIndex] = 'R';
  139.   szFileSpec[++iIndex] = 'D';
  140.   szFileSpec[++iIndex] = 0;
  141.   }
  142.  
  143. void AppendWRT(char szFileSpec[])
  144.   {
  145.   int iIndex = 0;
  146.  
  147.   while (szFileSpec[iIndex++] != 0);
  148.   while (szFileSpec[--iIndex] != '.')
  149.     {
  150.     if (iIndex == 0)
  151.       {
  152.       while (szFileSpec[iIndex++] != 0);
  153.       szFileSpec[--iIndex] = '.';
  154.       break;
  155.       }
  156.     }
  157.   szFileSpec[++iIndex] = 'W';
  158.   szFileSpec[++iIndex] = 'R';
  159.   szFileSpec[++iIndex] = 'T';
  160.   szFileSpec[++iIndex] = 0;
  161.   }
  162.  
  163. void AppendJNK(char szFileSpec[])
  164.   {
  165.   int iIndex = 0;
  166.  
  167.   while (szFileSpec[iIndex++] != 0);
  168.   while (szFileSpec[--iIndex] != '.')
  169.     {
  170.     if (iIndex == 0)
  171.       {
  172.       while (szFileSpec[iIndex++] != 0);
  173.       szFileSpec[--iIndex] = '.';
  174.       break;
  175.       }
  176.     }
  177.   szFileSpec[++iIndex] = 'J';
  178.   szFileSpec[++iIndex] = 'N';
  179.   szFileSpec[++iIndex] = 'K';
  180.   szFileSpec[++iIndex] = 0;
  181.   }
  182.  
  183. void main(int argc,char *argv[])
  184.   {
  185.   char szMessage[80];
  186.   LONG lIndex;
  187.   ULONG ulBufferLength;
  188.   LONG lJunkIndex = 0;
  189.   LONG lReadIndex = 0;
  190.   LONG lWriteIndex = 0;
  191.   BOOL bFileNamed;
  192.   APIRET rc;
  193.   USHORT wTemp;
  194.  
  195.   if (argc >= 2)
  196.     strcpy(szCaptureFile,argv[1]);
  197.   else
  198.     {
  199.     printf("\nUsage:\n\n  [d:\]SPLIT capture.dat\n");
  200.     return;
  201.     }
  202.   strcpy(szWriteDataFile,szCaptureFile);
  203.   AppendWRT(szWriteDataFile);
  204.   strcpy(szReadDataFile,szCaptureFile);
  205.   AppendRD(szReadDataFile);
  206.   strcpy(szJunkDataFile,szCaptureFile);
  207.   AppendJNK(szJunkDataFile);
  208.   if (ReadFile(szCaptureFile,&ulBufferLength))
  209.     {
  210.     ulBufferLength /= 2;
  211.     if (( rc = DosAllocMem((PPVOID)&pbyReadBuffer,ulBufferLength,PAG_COMMIT | PAG_READ | PAG_WRITE)) != 0)
  212.       {
  213.       sprintf(szMessage,"\nRead buffer allocation error = %d\n",rc);
  214.       printf(szMessage);
  215.       DosFreeMem(pwCaptureBuffer);
  216.       }
  217.     else
  218.       {
  219.       if ((rc = DosAllocMem((PPVOID)&pbyWriteBuffer,ulBufferLength,PAG_COMMIT | PAG_READ | PAG_WRITE)) != 0)
  220.         {
  221.         sprintf(szMessage,"/nWrite buffer allocation error = %d\n",rc);
  222.         printf(szMessage);
  223.         DosFreeMem(pwCaptureBuffer);
  224.         DosFreeMem(pbyReadBuffer);
  225.         }
  226.       else
  227.         {
  228.         if ((rc = DosAllocMem((PPVOID)&pbyJunkBuffer,ulBufferLength,PAG_COMMIT | PAG_READ | PAG_WRITE)) != 0)
  229.           {
  230.           sprintf(szMessage,"/nJunk buffer allocation error = %d\n",rc);
  231.           printf(szMessage);
  232.           DosFreeMem(pwCaptureBuffer);
  233.           DosFreeMem(pbyReadBuffer);
  234.           DosFreeMem(pbyWriteBuffer);
  235.           }
  236.         else
  237.           {
  238.           for (lIndex = 0;lIndex < ulBufferLength;lIndex++)
  239.             {
  240.             wTemp = pwCaptureBuffer[lIndex];
  241.             switch (wTemp & 0xff00)
  242.               {
  243.               case CS_READ:
  244.                 pbyReadBuffer[lReadIndex++] = (BYTE)wTemp;
  245.                 break;
  246.               case CS_WRITE:
  247.                 pbyWriteBuffer[lWriteIndex++] = (BYTE)wTemp;
  248.                 break;
  249.               deafult:
  250.                 pbyJunkBuffer[lJunkIndex++] = (BYTE)wTemp;
  251.                 break;
  252.               }
  253.             }
  254.           if (lWriteIndex > 0)
  255.             WriteFile(szWriteDataFile,pbyWriteBuffer,lWriteIndex);
  256.           if (lReadIndex > 0)
  257.             WriteFile(szReadDataFile,pbyReadBuffer,lReadIndex);
  258.           if (lJunkIndex > 0)
  259.             WriteFile(szJunkDataFile,pbyJunkBuffer,lJunkIndex);
  260.           DosFreeMem(pwCaptureBuffer);
  261.           DosFreeMem(pbyWriteBuffer);
  262.           DosFreeMem(pbyReadBuffer);
  263.           DosFreeMem(pbyJunkBuffer);
  264.           }
  265.         }
  266.       }
  267.     }
  268.   printf("\n\x07Split Complete\n");
  269.   }
  270.  
  271.  
  272.