home *** CD-ROM | disk | FTP | other *** search
/ Delphi Programming Unleashed / Delphi_Programming_Unleashed_SAMS_Publishing_1995.iso / chap14 / easyfile / main.pas < prev    next >
Pascal/Delphi Source File  |  1995-03-20  |  3KB  |  133 lines

  1. unit Main;
  2.  
  3. { Program copyright (c) 1995 by Charles Calvert }
  4. { Project Name: EASYFILE }
  5.  
  6. {
  7.   This program shows how to work with strings and
  8.   with text based files.
  9.  
  10.   Constants for using with the MODE field
  11.   of TTextRec, declared in SYSUTILS.PAS :
  12.  
  13.   fmClosed = $D7B0;
  14.   fmInput  = $D7B1;
  15.   fmOutput = $D7B2;
  16.   fmInOut  = $D7B3;
  17.  
  18.   This program gives a general workout on
  19.   file IO issues. In particular, it shows
  20.   how to use the TTextRec structure to determine
  21.   if a file is open, closed, etc.
  22.  
  23.   As declared in SYSUTILS:
  24.  
  25.   PTextBuf = ^TTextBuf;
  26.   TTextBuf = array[0..127] of Char;
  27.   TTextRec = record
  28.     Handle: Word;
  29.     Mode: Word;
  30.     BufSize: Word;
  31.     Private: Word;
  32.     BufPos: Word;
  33.     BufEnd: Word;
  34.     BufPtr: PTextBuf;
  35.     OpenFunc: Pointer;
  36.     InOutFunc: Pointer;
  37.     FlushFunc: Pointer;
  38.     CloseFunc: Pointer;
  39.     UserData: array[1..16] of Byte;
  40.     Name: array[0..79] of Char;
  41.     Buffer: TTextBuf;
  42.   end;
  43.  
  44. }
  45. interface
  46.  
  47. uses
  48.   WinTypes, WinProcs, Classes,
  49.   Graphics, Forms, Controls,
  50.   StdCtrls, SysUtils, ExtCtrls,
  51.   Dialogs;
  52.  
  53. type
  54.   TForm1 = class(TForm)
  55.     RunTest: TButton;
  56.     OpenInput: TButton;
  57.     OpenOutPut: TButton;
  58.     CloseFile: TButton;
  59.     Panel1: TPanel;
  60.     Panel2: TPanel;
  61.     Label1: TLabel;
  62.     Label2: TLabel;
  63.     procedure RunTestClick(Sender: TObject);
  64.     procedure OpenInputClick(Sender: TObject);
  65.     procedure OpenOutPutClick(Sender: TObject);
  66.     procedure CloseFileClick(Sender: TObject);
  67.   private
  68.     F: System.Text;
  69.   end;
  70.  
  71. var
  72.   Form1: TForm1;
  73.  
  74. implementation
  75.  
  76. uses
  77.   StrBox;
  78.  
  79. {$R *.DFM}
  80.  
  81. function GetMode(var F: Text): string;
  82. begin 
  83.   case TTextRec(F).Mode of
  84.     fmClosed: Result := 'Closed';
  85.     fmInput: Result := 'Open for Input';
  86.     fmOutPut: Result := 'Open for Output';
  87.     fmInOut: Result := 'Open for input and output';
  88.   end;
  89. end;
  90.  
  91. procedure TForm1.RunTestClick(Sender: TObject);
  92. var
  93.   i: Integer;
  94. begin
  95.   System.Assign(F, GetTodayName('EZ', 'txt'));
  96.   Label1.Caption := TTextRec(F).Name;
  97.   Label2.Caption := GetMode(F);
  98.   for i := 0 to ComponentCount - 1 do
  99.     if Components[i] is TButton then
  100.       TButton(Components[i]).Enabled := True;
  101. end;
  102.  
  103. { Exception handling is explained in the
  104.   chapter entitled "Exceptions". The
  105.   exception will be raised if a file
  106.   with the filename generated above
  107.   does not exist.   }
  108. procedure TForm1.OpenInputClick(Sender: TObject);
  109. begin
  110.   try
  111.     Reset(F);
  112.   except
  113.     on EInOutError do
  114.       MessageDlg('File must be created first', mtInformation, [mbOk], 0);
  115.   end;
  116.   Label2.Caption := GetMode(F);
  117. end;
  118.  
  119. procedure TForm1.OpenOutPutClick(Sender: TObject);
  120. begin
  121.   ReWrite(F);
  122.   Label2.Caption := GetMode(F);
  123. end;
  124.  
  125. procedure TForm1.CloseFileClick(Sender: TObject);
  126. begin
  127.   if TTextRec(F).Mode <> fmClosed then
  128.     System.Close(F);
  129.   Label2.Caption := GetMode(F);
  130. end;
  131.  
  132. end.
  133.