home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 19 / CD_ASCQ_19_010295.iso / dos / prg / pas / swag / findrepl.swg / 0006_FINDDATA.PAS.pas < prev    next >
Pascal/Delphi Source File  |  1993-05-28  |  1KB  |  28 lines

  1. {   Following is some code I've thrown together <!>, which has to find a
  2. sequence of 4 Characters in a large buffer - non-Text data.  The buffer
  3. is 4096 Characters, and the sequence(s) I'm searching For could be
  4. anywhere in it, and may be found numerous times. I suspect this code is
  5. pretty inefficient, but I can't think of anything better. (Yep, this is
  6. to work With the ZIP directory at the end of the File...)
  7.    So, I'm looking For a better way to code this process.  I know that
  8. Pos won't work, so this brute-Force is what I came up with.  Anything
  9. better?  Thanks...
  10. }
  11. Const CFHS : String[4] = 'PK'#01#02;  { CENTRAL_File_HEADER_SIGNATURE }
  12.       ECDS : String[4] = 'PK'#05#06; { end_CENTRAL_DIRECtoRY_SIGNATURE }
  13. Var S4     : String[4];
  14.     FOUND  : Boolean;
  15.     QUIT   : Boolean;      { "end" sentinel encountered }
  16. begin
  17.   FETCH_NAME; Assign (F,F1); Reset (F,1); C := 1; HSize := 0;
  18.   FSize := FileSize(F);
  19.   I := FSize-BSize;                   { Compute point to start read }
  20.   Seek (F,I); BlockRead (F,BUFF,BSize,RES); { ZIP central directory }
  21.   S4[0] := #4; C := 0;
  22.   Repeat
  23.     FOUND := False; { search For CENTRAL_File_HEADER_SIGNATURE }
  24.     Repeat
  25.       Inc (C); Move (BUFF[C],S4[1],4); FOUND := S4 = CFHS;
  26.       QUIT := S4 = ECDS;
  27.     Until FOUND or QUIT;
  28. end.