home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PASCAL / STREAM15.ZIP / TEXTDEMO.PAS < prev    next >
Encoding:
Pascal/Delphi Source File  |  1993-03-27  |  2.3 KB  |  92 lines

  1. {$B-}   { Use fast boolean evaluation. }
  2.  
  3. program textdemo;
  4.  
  5. { Demonstrates use of TTextFilter and TWorkStream }
  6.  
  7. {$i stdefine.inc}
  8.  
  9. uses
  10.   {$ifdef windows}  wincrt,                     {$endif}
  11.   {$ifdef wobjects} wobjects, {$else} objects,  {$endif}
  12.   streams;
  13.  
  14. var
  15.   i : integer;
  16.   S : PWorkStream;
  17.   T : PTextFilter;
  18.   offsets : array[1..15000] of longint;
  19.   line : string;
  20.   startmem : longint;
  21.  
  22.   function MyTempStream(MinSize,MaxSize:Longint;
  23.                       Preference:TStreamRanking):PStream; far;
  24.   var
  25.     result : PStream;
  26.   begin
  27.     Write('S is ',S^.GetSize:6,' bytes, Memavail=',memavail:6);
  28.     result := TempStream(MinSize,MaxSize,Preference);
  29.     Writeln(', allocated ',StreamName(result));
  30.     MyTempStream := result;
  31.   end;
  32.  
  33. begin
  34.   TempEnvVar := 'TMP';
  35.   startmem := Memavail;
  36.   { Create a temporary file with blocks in EMS, XMS or on the heap: }
  37.   S := New(PWorkStream, Init(TempStream,2048,65520,ForSpeed));
  38.   S^.Allocate := MyTempStream;
  39.   if (S=nil) or (S^.status <> stOK) then
  40.   begin
  41.     writeln('Failed to create temporary stream.');
  42.     halt(99);
  43.   end;
  44.  
  45.   { Insert it into a text filter }
  46.   New(T, init(S, 'TempStream'));
  47.   if (T=nil) or (T^.status <> stOK) then
  48.   begin
  49.     writeln('Failed to create text filter.');
  50.     halt(98);
  51.   end;
  52.  
  53.   { Now write 15000 lines to it. }
  54.   Rewrite(T^.TextFile);
  55.   for i:=1 to 15000 do
  56.   begin
  57.     offsets[i] := T^.GetPos;
  58.     writeln(T^.TextFile, '------------- Line number ',i:5,' --------------');
  59.   end;
  60.   writeln('Have written 15000 lines (',T^.Getsize,' bytes) to work stream.');
  61.  
  62.   { Now read them back in a strange order. }
  63.   Reset(T^.TextFile);
  64.   writeln('The first line is ');
  65.   Readln(T^.TextFile,line);
  66.   writeln(line);
  67.   for i:=5 downto 1 do
  68.   begin
  69.     writeln('Line ',i*100,' is:');
  70.     T^.Seek(offsets[i*100]);
  71.     readln(T^.TextFile,line);
  72.     writeln(line);
  73.   end;
  74.  
  75.   writeln('Lines 14995 onwards are:');
  76.   T^.seek(offsets[14995]);
  77.   while not eof(T^.Textfile) do
  78.   begin
  79.     readln(T^.TextFile,line);
  80.     writeln(line);
  81.   end;
  82.  
  83.   { All done; dispose of the filter to release the memory }
  84.   dispose(T,done);
  85.  
  86.   if memavail <> startmem then
  87.     writeln('Error!  ',startmem-memavail,' bytes of memory left allocated.');
  88.  
  89.   writeln('All done!');
  90. end.
  91.  
  92.