home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / magazine / pcmagazi / 1992 / 17 / renver.pas < prev   
Pascal/Delphi Source File  |  1992-05-23  |  3KB  |  110 lines

  1. PROGRAM renver;
  2. USES Dos;
  3. VAR
  4.   f1Path, f2Path : pathStr;
  5.   f1Dir,  f2Dir  : dirStr;
  6.   f1Name, f2Name : nameStr;
  7.   f1Ext,  f2Ext  : extStr;
  8.   f              : File;
  9.   version        : Integer;
  10.   verStr         : String;
  11.  
  12.   PROCEDURE doHelp;
  13.   { Display help. }
  14.   BEGIN
  15.     WriteLn('Rename file file1 to file2.nnn, where ',
  16.             'nnn is the latest version');
  17.     WriteLn('from 001 through 999.');
  18.     WriteLn;
  19.     WriteLn('Usage: renver [path]file1 [file2]');
  20.     WriteLn;
  21.     WriteLn('  path      Path to file1. Default = ',
  22.             'current directory');
  23.     WriteLn;
  24.     WriteLn('  file1     File to rename');
  25.     WriteLn;
  26.     WriteLn('  file2     New name (no path or ',
  27.             'extension) for file');
  28.     WriteLn('            Default = file1 less extension.');
  29.     WriteLn;
  30.     WriteLn('The path containing file1 is searched for ',
  31.             'file2.nnn for the');
  32.     WriteLn('largest version number nnn.  If no file ',
  33.             'exists as file2.nnn, file1 is');
  34.     WriteLn('renamed to file2.001, otherwise file1 is renamed ',
  35.             'to file2.nnn+1.');
  36.     WriteLn;
  37.     WriteLn('E.g.   renver myfile.tmp');
  38.     WriteLn;
  39.     WriteLn('renames myfile.tmp to myfile.003 if ',
  40.             'the last myfile.nnn is myfile.002.');
  41.   END;
  42.  
  43.   FUNCTION init : Boolean;
  44.   { Get file names from command line.
  45.     Return false if neither exists. }
  46.   BEGIN
  47.     init := FALSE;
  48.     IF ParamCount = 0 THEN Exit;
  49.     f1Path := paramStr(1);
  50.     f2Path := paramStr(2);
  51.     if f2Path = '' then f2Path := f1Path;
  52.     init := TRUE;
  53.   END;
  54.  
  55.   FUNCTION maxVersion (fPath : pathStr): integer;
  56.   { Find max version nnn.  Return 0 if no
  57.     file exists as file.nnn. }
  58.   VAR
  59.     fDir  : dirStr;
  60.     fName : nameStr;
  61.     fExt  : extStr;
  62.     fRec  : searchRec;
  63.     maxVer, ver, err : integer;
  64.   BEGIN
  65.     maxVer := 0;
  66.     fSplit(fPath, fDir, fName, fExt);
  67.     fPath := fDir + fName + '.*';
  68.     findFirst (fPath, AnyFile, fRec);
  69.     WHILE dosError = 0 DO
  70.       BEGIN
  71.         fSplit(fRec.name, fDir, fName, fExt);
  72.         {strip period. }
  73.         fExt := copy(fExt, 2, length(fExt) - 1);
  74.         val(fExt, ver, err);
  75.         IF err = 0 THEN
  76.           IF ver > maxVer THEN maxVer := ver;
  77.         findNext(fRec);
  78.       END { while };
  79.     maxVersion := maxVer;
  80.   END;
  81.  
  82. BEGIN
  83.   IF init THEN
  84.     BEGIN
  85.       fSplit(f1Path, f1Dir, f1Name, f1Ext);
  86.       fSplit(f2Path, f2Dir, f2Name, f2Ext);
  87.       f2Path := f1Dir + f2Name;
  88.       version := maxVersion(f2Path) + 1;
  89.       {- wrap 999 to 1 -}
  90.       IF version > 999 THEN version := 1;
  91.       {- add 1000 to get 4 digits ... -}
  92.       str(version + 1000, verStr);
  93.       {- then keep last three -}
  94.       delete(verStr, 1, length(verStr) - 3); 
  95.       WriteLn('rename ' + f1Path + ' ' +
  96.         f2Name + '.' + verStr);
  97.       Assign(F, f1Path);
  98.       {$I-}Reset(F);{$I+}
  99.       IF IOresult <> 0 THEN
  100.         WriteLn(^G,'File ', f1Path,' does not exist.')
  101.       ELSE
  102.         BEGIN
  103.           Close(F);
  104.           Rename(F, f2Name + '.' + verStr);
  105.         END;
  106.     END
  107.   ELSE doHelp;
  108. END.
  109.  
  110.