home *** CD-ROM | disk | FTP | other *** search
/ PC Format Collection 48 / SENT14D.ISO / tech / delphi / disk15 / vcl.pak / ISTREAMS.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1995-08-24  |  4.9 KB  |  212 lines

  1.  
  2. {*******************************************************}
  3. {                                                       }
  4. {       Delphi Visual Component Library                 }
  5. {                                                       }
  6. {       Copyright (c) 1995 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.     FReserved: Byte;
  24.     FModifyTime: Longint;
  25.   public
  26.     constructor Create(AMemoryStream: TMemoryStream);
  27.     destructor Destroy; override;
  28.     function Read(var Buffer; Count: Longint): Longint; override;
  29.     function Write(const Buffer; Count: Longint): Longint; override;
  30.     function Seek(Offset: Longint; Origin: Word): Longint; override;
  31.     function GetModifyTime: 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.     property FileStream: TFileStream read FFileStream;
  49.   end;
  50.  
  51.   { TVirtualStream }
  52.  
  53.   TVirtualStream = class(TStream)
  54.   private
  55.     FIStream: TIStream;
  56.   public
  57.     constructor Create(AIStream: TIStream);
  58.     function Read(var Buffer; Count: Longint): Longint; override;
  59.     function Write(const Buffer; Count: Longint): Longint; override;
  60.     function Seek(Offset: Longint; Origin: Word): Longint; override;
  61.     function GetModifyTime: Longint;
  62.   end;
  63.  
  64.   TExceptionHandler = procedure;
  65.  
  66. const
  67.   ExceptionHandler: TExceptionHandler = nil;
  68.  
  69. implementation
  70.  
  71. procedure HandleException;
  72. begin
  73.   if @ExceptionHandler <> nil then ExceptionHandler;
  74. end;
  75.  
  76. { TIMemoryStream }
  77.  
  78. constructor TIMemoryStream.Create(AMemoryStream: TMemoryStream);
  79. begin
  80.   inherited Create;
  81.   if AMemoryStream = nil then
  82.     FMemoryStream := TMemoryStream.Create
  83.   else FMemoryStream := AMemoryStream;
  84.   FOwnStream := AMemoryStream = nil;
  85. end;
  86.  
  87. destructor TIMemoryStream.Destroy;
  88. begin
  89.   if FOwnStream then FMemoryStream.Free;
  90.   inherited Destroy;
  91. end;
  92.  
  93. function TIMemoryStream.Read(var Buffer; Count: Longint): Longint;
  94. begin
  95.   try
  96.     Result := FMemoryStream.Read(Buffer, Count);
  97.   except
  98.     HandleException;
  99.     Result := 0;
  100.   end;
  101. end;
  102.  
  103. function TIMemoryStream.Write(const Buffer; Count: Longint): Longint;
  104. begin
  105.   try
  106.     Result := FMemoryStream.Write(Buffer, Count);
  107.   except
  108.     HandleException;
  109.     Result := 0;
  110.   end;
  111. end;
  112.  
  113. function TIMemoryStream.Seek(Offset: Longint; Origin: Word): Longint;
  114. begin
  115.   try
  116.     Result := FMemoryStream.Seek(Offset, Origin);
  117.   except
  118.     HandleException;
  119.     Result := -1;
  120.   end;
  121. end;
  122.  
  123. function TIMemoryStream.GetModifyTime: Longint;
  124. begin
  125.   Result := 0;
  126. end;
  127.  
  128. { TIFileStream }
  129.  
  130. constructor TIFileStream.Create(const FileName: string; Mode: Word);
  131. begin
  132.   inherited Create;
  133.   FFileStream := TFileStream.Create(FileName, Mode);
  134. end;
  135.  
  136. destructor TIFileStream.Destroy;
  137. begin
  138.   FFileStream.Free;
  139.   inherited Destroy;
  140. end;
  141.  
  142. function TIFileStream.Read(var Buffer; Count: Longint): Longint;
  143. begin
  144.   try
  145.     Result := FFileStream.Read(Buffer, Count);
  146.   except
  147.     HandleException;
  148.     Result := 0;
  149.   end;
  150. end;
  151.  
  152. function TIFileStream.Write(const Buffer; Count: Longint): Longint;
  153. begin
  154.   try
  155.     Result := FFileStream.Write(Buffer, Count);
  156.   except
  157.     HandleException;
  158.     Result := 0;
  159.   end;
  160. end;
  161.  
  162. function TIFileStream.Seek(Offset: Longint; Origin: Word): Longint;
  163. begin
  164.   try
  165.     Result := FFileStream.Seek(Offset, Origin);
  166.   except
  167.     HandleException;
  168.     Result := -1;
  169.   end;
  170. end;
  171.  
  172. function TIFileStream.GetModifyTime: Longint;
  173. begin
  174.   try
  175.     Result := FileGetDate(FFileStream.Handle);
  176.   except
  177.     HandleException;
  178.     Result := 0;
  179.   end;
  180. end;
  181.  
  182. { TVirtualStream }
  183.  
  184. constructor TVirtualStream.Create(AIStream: TIStream);
  185. begin
  186.   inherited Create;
  187.   FIStream := AIStream;
  188. end;
  189.  
  190. function TVirtualStream.Read(var Buffer; Count: Longint): Longint;
  191. begin
  192.   Result := FIStream.Read(Buffer, Count);
  193. end;
  194.  
  195. function TVirtualStream.Write(const Buffer; Count: Longint): Longint;
  196. begin
  197.   Result := FIStream.Write(Buffer, Count);
  198. end;
  199.  
  200. function TVirtualStream.Seek(Offset: Longint; Origin: Word): Longint;
  201. begin
  202.   Result := FIStream.Seek(Offset, Origin);
  203. end;
  204.  
  205. function TVirtualStream.GetModifyTime: Longint;
  206. begin
  207.   Result := FIStream.GetModifyTime;
  208. end;
  209.  
  210. end.
  211.  
  212.