[Back to NETWORK SWAG index] [Back to Main SWAG index] [Original]

    {$M 16384,0,655360}

    { Copies EXEs into the LAN release directory:

         RELEASE <ExeFile> <ReleasePath>       }

    program Release;

    uses
      DOS,Objects;

    var
      Error             : Integer;      { Error code for num2str conversions }
      ExeName           : String;       { Name of destination EXE file }
      FindRec           : SearchRec;    { File record from FindFirst }
      FPath             : DirStr;       { Filespec's path }
      FName             : NameStr;      { Filespec's name }
      FExt              : ExtStr;       { Filespec's extension }
      GreatestVersion   : Integer;      { Highest version number found }
      ProgramName       : NameStr;      { Root name (no extension) of program }
      ReleaseDir        : String;       { Location of public EXEs }
      Version           : Integer;      { Version number of an EXE }

    procedure CopyFile( SourceFilename, TargetFilename : String );

    const
      BufSize           = $1000;

    var
      SourceFile,
      TargetFile        : TBufStream;

    begin
      WriteLn('Copying ',SourceFilename,' to ',TargetFilename,'...');
      SourceFile.Init(SourceFilename,stOpenRead,BufSize);
      if SourceFile.Status <> stOk then
        WriteLn('Error ',SourceFile.ErrorInfo,' opening ',SourceFilename)
      else
      begin
        TargetFile.Init(TargetFilename,stCreate,BufSize);
        if TargetFile.Status <> stOk then
          Writeln('Error ',TargetFile.ErrorInfo,' opening ',TargetFilename)
        else
        begin
          TargetFile.CopyFrom(SourceFile,SourceFile.GetSize);
          if TargetFile.Status <> stOk then
            WriteLn('Error ',TargetFile.ErrorInfo,' copying file.')
          else
            WriteLn('Copy complete');
        end;
        TargetFile.Done;
      end;
      SourceFile.Done;
    end;

    begin
      FSplit(ParamStr(1),FPath,ProgramName,FExt);
      ReleaseDir := ParamStr(2);
      if not (ReleaseDir[Length(ReleaseDir)] in [':','\']) then
        ReleaseDir := ReleaseDir + '\';

      { Create program subdirectory if necessary }
      FindFirst(ReleaseDir + ProgramName,Directory,FindRec);
      if DosError <> 0 then
        MkDir(ReleaseDir + ProgramName);

      { Find greatest current version for this file }
      GreatestVersion := 0;
      FindFirst(ReleaseDir + ProgramName + '\*.EXE',AnyFile,FindRec);
      while DOSError = 0 do
      begin
        FSplit(FindRec.Name,FPath,FName,FExt);
        Val(FName,Version,Error);
        if Version > GreatestVersion then
          GreatestVersion := Version;
        FindNext(FindRec);
      end;

      { Construct filename }
      Str(GreatestVersion + 1,ExeName);
      ExeName := ExeName + '.EXE';

      { Copy the program to the version directory }
      CopyFile(ParamStr(1),ReleaseDir + ProgramName + '\' + ExeName);
    end.

[Back to NETWORK SWAG index] [Back to Main SWAG index] [Original]