(******************************************************
** PROGRAM TITLE:       FILE_CLOSE_DEMONSTRATION
**
** WRITTEN BY:          Raymond E. Penley
** DATE WRITTEN:        22 JAN 1980
**                      Modified for Pascal/Z vers 3.0
**                      25 June 1980
**
** SUMMARY:
**      Demonstrate the three methods of closing files
**      with Pascal.
**
**      1. Using a file variable in a block.
**      2. Reusing a file variable with another file
**         identifier (file name) to close the currently
**         open file before opening the new file.
**      3. Normal program termination will close ALL
**         open files. (This is NOT the preferred method)
**
*******************************************************)
PROGRAM FCLOSE;
var
 IX   : INTEGER;
 wrk1 : TEXT;  { Global file descriptor <FCB> }

Procedure PAUSE;
var     du: char;
begin
 write('Press return to continue');
 readln(du);
end;

Procedure CLEAR;
var     ix: 1..25;
begin
 for ix:=1 to 25 do writeln;
end;

PROCEDURE A;
VAR     F1 : TEXT;
BEGIN
 CLEAR;
 writeln('FILE CLOSE METHOD #1');
 writeln;
 writeln('USING A FILE VARIABLE LOCAL TO A "BLOCK"');
 writeln('WILL CLOSE THE FILE(S) UPON EXIT OF THE BLOCK');
 writeln('This is the preferred method!');
 writeln;
 writeln('     PROCEDURE A;');
 writeln('     VAR   F1 : TEXT;');
 writeln('     BEGIN');
 writeln('       REWRITE(''CTESTA.$$$'',F1);');
 writeln('       ... BODY OF PROCEDURE ...');
 writeln('     END; { CLOSE(F1)  }');
 writeln;
 writeln('UPON EXITING THIS PROCEDURE WE WILL CLOSE');
 writeln('THE FILE ''CTESTA.$$$'' AND FIX IT ON THE DIRECTORY');
 REWRITE('CTESTA.$$$', F1);
 writeln(F1, 'PROCEDURE A');
 writeln;
 PAUSE;
END; { CLOSE(F1) }

Procedure B;
begin
 CLEAR;
 REWRITE('CTESTQQ.$$$',WRK1);
 writeln(WRK1,'CTESTQQ.$$$ THIS IS CURRENTLY OPEN FILE');
 writeln('FILE CLOSE METHOD #2');
 writeln;
 writeln('Reusing the same file variable with a new file');
 writeln('identifier <file name> will close the currently');
 writeln('open file before opening the new file');
 writeln;
 writeln('   begin');
 writeln('     REWRITE(''CTESTQQ.$$$'',WRK1);');
 writeln('     writeln(WRK1,''THIS IS THE CURRENTLY OPEN FILE'');');
 writeln('     writeln(''NOW TO CLOSE CTESTQQ.$$$ AND OPEN'');');
 writeln('     writeln(''CTESTZZ.$$$'');');
 writeln('     REWRITE(''CTESTZZ.$$$'',WRK1);');
 writeln('     writeln(''CTESTZZ.$$$ IS NOW THE CURRENT FILE'');');
 writeln('   end;');
 writeln;
 REWRITE('CTESTZZ.$$$',WRK1);
 writeln(WRK1,'CTESTZZ.$$$ IS NOW THE CURRENT FILE');
 writeln;
 PAUSE;
end;


BEGIN
 CLEAR;
 writeln('FILE CLOSE DEMONSTRATION FOR PASCAL/Z');
 writeln('by Raymond E. Penley');
 FOR IX:=1 TO 12 DO writeln;
 FOR IX:=1 TO 5000 DO {DUMMY} ;
 A;    {--- Method #1 ---}
 B;    {--- Method #2 ---}
       {--- Method #3 ---}
 CLEAR;
 writeln('FILE CLOSE METHOD #3');
 writeln;
 writeln('This is really the simplist method.  Any files still');
 writeln('open at program termination will be closed.  This is');
 writeln('the most dangerous method in that a power failure or a');
 writeln('disk failure while the program is running will leave');
 writeln('your file nowhere.');
 writeln('The file "CTESTZZ.$$$" is still open at this time.');
 writeln('When this program terminates it will be fixed on the');
 writeln('directory.');
 writeln;
 PAUSE;
 writeln;writeln;writeln;writeln;
End{of file close demo}{ CLOSE(wrk1) }.