3 uses Windows, KolZLib, Kol;
\r
6 STRM_ERROR = DWord (-1);
\r
8 // Cutted from Classes.TStream.CopyFrom with some small modifications...
\r
9 function StreamCopy (Dest, Source: PStream; Count: DWord): DWord;
\r
11 MAXBUFSIZE = $80000;
\r
18 If Count=0 then begin
\r
23 If Count>MAXBUFSIZE then BufSize:=MAXBUFSIZE else BufSize:=Count;
\r
24 GetMem(Buffer, BufSize);
\r
25 try // => try .. finally works for 'Exit' command even without Kol_Err.pas !
\r
27 If Count>BufSize then Need:=BufSize else Need:=Count;
\r
28 Readed:=Source.Read (Buffer^, Need);
\r
29 If Readed=STRM_ERROR then Exit;
\r
30 If Dest.Write (Buffer^, Readed)=STRM_ERROR then Exit;
\r
32 Inc (Result, Readed);
\r
33 until (Count=0) or (Readed=0) or (Readed=STRM_ERROR);
\r
35 // Exit brings us here...
\r
36 FreeMem(Buffer, BufSize);
\r
47 If ParamCount<2 then begin
\r
48 WriteLn ('Usage: compress.exe InFile OutFile');
\r
49 WriteLn ('Press Enter to exit');
\r
54 Source:=NewReadFileStream (ParamStr(1));
\r
56 If Source.Size=STRM_ERROR then Exit;
\r
57 Dest:=NewWriteFileStream (ParamStr(2));
\r
59 If Dest.Size=STRM_ERROR then Exit;
\r
61 Dest.Write (Size, 4);
\r
62 If not NewZLibCStream (Zipper, clMax, Dest, nil) then Exit;
\r
63 Error:= not (StreamCopy (Zipper, Source, 0)=Source.Size);
\r
67 If Error then DeleteFile (PChar (ParamStr (2)));
\r