home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1999 February / DPPCPRO0299.ISO / February / Delphi / Install / DATA.Z / ISTREAMS.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1996-06-11  |  5.6 KB  |  242 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Delphi Visual Component Library                 }
  5. {                                                       }
  6. {       Copyright (c) 1995,1996 Borland International   }
  7. {                                                       }
  8. {*******************************************************}
  9.  
  10. unit IStreams;
  11.  
  12. interface
  13.  
  14. uses VirtIntf, Classes, SysUtils;
  15.  
  16. type
  17.   { TIMemoryStream }
  18.  
  19.   TIMemoryStream = class(TIStream)
  20.   private
  21.     FMemoryStream: TMemoryStream;
  22.     FOwnStream: Boolean;
  23.     FModifyTime: Longint;
  24.   public
  25.     constructor Create(AMemoryStream: TMemoryStream);
  26.     destructor Destroy; override;
  27.     function Read(var Buffer; Count: Longint): Longint; override;
  28.     function Write(const Buffer; Count: Longint): Longint; override;
  29.     function Seek(Offset: Longint; Origin: Word): Longint; override;
  30.     function GetModifyTime: Longint; override;
  31.     procedure SetModifyTime(Time: Longint); override;
  32.     property OwnStream: Boolean read FOwnStream write FOwnStream;
  33.     property MemoryStream: TMemoryStream read FMemoryStream;
  34.   end;
  35.  
  36.   { TIFileStream }
  37.  
  38.   TIFileStream = class(TIStream)
  39.   private
  40.     FFileStream: TFileStream;
  41.   public
  42.     constructor Create(const FileName: string; Mode: Word);
  43.     destructor Destroy; override;
  44.     function Read(var Buffer; Count: Longint): Longint; override;
  45.     function Write(const Buffer; Count: Longint): Longint; override;
  46.     function Seek(Offset: Longint; Origin: Word): Longint; override;
  47.     function GetModifyTime: Longint; override;
  48.     procedure SetModifyTime(Time: Longint); override;
  49.     property FileStream: TFileStream read FFileStream;
  50.   end;
  51.  
  52.   { TVirtualStream }
  53.  
  54.   TVirtualStream = class(TStream)
  55.   private
  56.     FIStream: TIStream;
  57.   public
  58.     constructor Create(AIStream: TIStream);
  59.     destructor Destroy; override;
  60.     function Read(var Buffer; Count: Longint): Longint; override;
  61.     function Write(const Buffer; Count: Longint): Longint; override;
  62.     function Seek(Offset: Longint; Origin: Word): Longint; override;
  63.     function GetModifyTime: Longint;
  64.     procedure SetModifyTime(Time: Longint);
  65.   end;
  66.  
  67.   TExceptionHandler = procedure;
  68.  
  69. const
  70.   ExceptionHandler: TExceptionHandler = nil;
  71.  
  72. implementation
  73.  
  74. procedure HandleException;
  75. begin
  76.   if @ExceptionHandler <> nil then ExceptionHandler;
  77. end;
  78.  
  79. { TIMemoryStream }
  80.  
  81. constructor TIMemoryStream.Create(AMemoryStream: TMemoryStream);
  82. begin
  83.   inherited Create;
  84.   if AMemoryStream = nil then
  85.     FMemoryStream := TMemoryStream.Create
  86.   else FMemoryStream := AMemoryStream;
  87.   FOwnStream := AMemoryStream = nil;
  88.   FModifyTime := DateTimeToFileDate(Now);
  89. end;
  90.  
  91. destructor TIMemoryStream.Destroy;
  92. begin
  93.   if FOwnStream then FMemoryStream.Free;
  94.   inherited Destroy;
  95. end;
  96.  
  97. function TIMemoryStream.Read(var Buffer; Count: Longint): Longint;
  98. begin
  99.   try
  100.     Result := FMemoryStream.Read(Buffer, Count);
  101.   except
  102.     HandleException;
  103.     Result := 0;
  104.   end;
  105. end;
  106.  
  107. function TIMemoryStream.Write(const Buffer; Count: Longint): Longint;
  108. begin
  109.   try
  110.     Result := FMemoryStream.Write(Buffer, Count);
  111.     FModifyTime := DateTimeToFileDate(Now);
  112.   except
  113.     HandleException;
  114.     Result := 0;
  115.   end;
  116. end;
  117.  
  118. function TIMemoryStream.Seek(Offset: Longint; Origin: Word): Longint;
  119. begin
  120.   try
  121.     Result := FMemoryStream.Seek(Offset, Origin);
  122.   except
  123.     HandleException;
  124.     Result := -1;
  125.   end;
  126. end;
  127.  
  128. function TIMemoryStream.GetModifyTime: Longint;
  129. begin
  130.   Result := FModifyTime;
  131. end;
  132.  
  133. procedure TIMemoryStream.SetModifyTime(Time: Longint);
  134. begin
  135.   FModifyTime := Time;
  136. end;
  137.  
  138. { TIFileStream }
  139.  
  140. constructor TIFileStream.Create(const FileName: string; Mode: Word);
  141. begin
  142.   inherited Create;
  143.   FFileStream := TFileStream.Create(FileName, Mode);
  144. end;
  145.  
  146. destructor TIFileStream.Destroy;
  147. begin
  148.   FFileStream.Free;
  149.   inherited Destroy;
  150. end;
  151.  
  152. function TIFileStream.Read(var Buffer; Count: Longint): Longint;
  153. begin
  154.   try
  155.     Result := FFileStream.Read(Buffer, Count);
  156.   except
  157.     HandleException;
  158.     Result := 0;
  159.   end;
  160. end;
  161.  
  162. function TIFileStream.Write(const Buffer; Count: Longint): Longint;
  163. begin
  164.   try
  165.     Result := FFileStream.Write(Buffer, Count);
  166.   except
  167.     HandleException;
  168.     Result := 0;
  169.   end;
  170. end;
  171.  
  172. function TIFileStream.Seek(Offset: Longint; Origin: Word): Longint;
  173. begin
  174.   try
  175.     Result := FFileStream.Seek(Offset, Origin);
  176.   except
  177.     HandleException;
  178.     Result := -1;
  179.   end;
  180. end;
  181.  
  182. function TIFileStream.GetModifyTime: Longint;
  183. begin
  184.   try
  185.     Result := FileGetDate(FFileStream.Handle);
  186.   except
  187.     HandleException;
  188.     Result := 0;
  189.   end;
  190. end;
  191.  
  192. procedure TIFileStream.SetModifyTime(Time: Longint);
  193. begin
  194.   try
  195.     FileSetDate(FFileStream.Handle, Time);
  196.   except
  197.     HandleException;
  198.   end;
  199. end;
  200.  
  201. { TVirtualStream }
  202.  
  203. constructor TVirtualStream.Create(AIStream: TIStream);
  204. begin
  205.   inherited Create;
  206.   FIStream := AIStream;
  207. end;
  208.  
  209. destructor TVirtualStream.Destroy;
  210. begin
  211.   FIStream.Free;
  212.   inherited Destroy;
  213. end;
  214.  
  215. function TVirtualStream.Read(var Buffer; Count: Longint): Longint;
  216. begin
  217.   Result := FIStream.Read(Buffer, Count);
  218. end;
  219.  
  220. function TVirtualStream.Write(const Buffer; Count: Longint): Longint;
  221. begin
  222.   Result := FIStream.Write(Buffer, Count);
  223. end;
  224.  
  225. function TVirtualStream.Seek(Offset: Longint; Origin: Word): Longint;
  226. begin
  227.   Result := FIStream.Seek(Offset, Origin);
  228. end;
  229.  
  230. function TVirtualStream.GetModifyTime: Longint;
  231. begin
  232.   Result := FIStream.GetModifyTime;
  233. end;
  234.  
  235. procedure TVirtualStream.SetModifyTime(Time: Longint);
  236. begin
  237.   FIStream.SetModifyTime(Time);
  238. end;
  239.  
  240. end.
  241.  
  242.