home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 2 BBS / 02-BBS.zip / foss10.zip / DEVELOP / UTILCOLL / UPDFILE.PAS < prev   
Pascal/Delphi Source File  |  1995-07-22  |  3KB  |  118 lines

  1. program UpdFile;
  2. uses
  3.   ApiInt, Types,
  4.   TParam,
  5.   Bits,
  6.   DOS;
  7.  
  8. type
  9.   PUpdFiles        = ^TUpdFiles;
  10.   TUpdFiles        = object
  11.     SkipDate       : Boolean;
  12.     SkipSize       : Boolean;
  13.     AreaCode       : string;
  14.     FileSpec       : string;
  15.  
  16.     constructor Init;
  17.     destructor Done;
  18.  
  19.     procedure ReadParams;
  20.     procedure UpdateFiles;
  21.   end;
  22.  
  23. var
  24.   UpdFiles         : PUpdFiles;
  25.  
  26. constructor TUpdFiles.Init;
  27. begin
  28.   dllInit( '', 0 );
  29. end;
  30.  
  31. destructor TUpdFiles.Done;
  32. begin
  33. end;
  34.  
  35. procedure TUpdFiles.ReadParams;
  36. begin
  37.   if Par^.SwAct['D'] then SkipDate := TRUE
  38.   else SkipDate := FALSE;
  39.  
  40.   if Par^.SwAct['S'] then SkipSize := TRUE
  41.   else SkipSize := FALSE;
  42.  
  43.   if Par^.SwAct['A'] then AreaCode := Par^.SwStr['A']
  44.   else AreaCode := 'MAIN';
  45.  
  46.   FileSpec := UpStr( Par^.Str[1] );
  47. end; { procedure ReadParams }
  48.  
  49. procedure TUpdFiles.UpdateFiles;
  50. var
  51.   AreaRec          : Area_Config_Record;
  52.   DirRec           : Area_Directory_Record;
  53.   FileRec          : Area_Dir;
  54.   FPos             : LongInt;
  55.   SRec             : SearchRec;
  56.  
  57. begin
  58.   if SkipSize or SkipDate then
  59.   begin
  60.     if SkipSize then Writeln( '- No size update will be done' );
  61.     if SkipDate then Writeln( '- No date update will be done' );
  62.   end
  63.   else Writeln( '- Both size and date will be updated' );
  64.   fioFindAreaCode( AreaRec, AreaCode, 0 );
  65.   Writeln( '- Searching for files in ' + AreaRec.AreaName );
  66.   Writeln;
  67.  
  68.   FPos := 0;
  69.   while fioReadFileRec( FileRec, AreaRec, FPos ) do
  70.   begin
  71.     Inc( FPos );
  72.     if ( KilledFile in FileRec.FileFlags ) then Continue;
  73.  
  74.     with FileRec do
  75.     begin
  76.       if LookInIf( UpStr( FileName ), FileSpec ) then
  77.       begin
  78.         if fioFindDirNo( DirRec, DirNo, AreaRec, 0 ) then
  79.         begin
  80.           FindFirst( DirRec.DiskDir + '\' + FileName, AnyFile, SRec );
  81.           if ( DosError = 0 ) then
  82.           begin
  83.             if not SkipSize then Size := SRec.Size;
  84.             if not SkipDate then with Date.Date do Bits.Date( Year, Month, Day );
  85.  
  86.             fioWriteFileRec( FileRec, AreaRec, FileRec.RecPos );
  87.             Writeln( FileName + ', updated!' );
  88.           end
  89.           else Writeln( FileName + ' not found on disk!' );
  90.         end;
  91.       end;
  92.     end;
  93.   end;
  94. end; { procedure UpdateFile }
  95.  
  96. begin
  97.   Writeln;
  98.   Writeln('UpdFile v1.04 - Update file date and size information in FOSS/2 filedatabase');
  99.   Writeln;
  100.  
  101.   if not ( Par^.Count = 1 ) then
  102.   begin
  103.     Writeln( 'Usage:' );
  104.     Writeln( '   UPDFILE {-D} {-S} {-A[area]} [filespec]' );
  105.     Writeln;
  106.     Writeln( '   -D           Do not update "date" information' );
  107.     Writeln( '   -S           Do not update "size" information' );
  108.     Writeln( '   -A           Area code of area to update files in' );
  109.     Writeln( '                (Default: MAIN)' );
  110.     Writeln( '   [filespec]   Name of the file to update (wildchars accepted) ');
  111.     Exit;
  112.   end;
  113.  
  114.   New( UpdFiles, Init );
  115.   UpdFiles^.ReadParams;
  116.   UpdFiles^.UpdateFiles;
  117.   Dispose( UpdFiles, Done );
  118. end. { Write DumpDir }