home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CP/M
/
CPM_CDROM.iso
/
simtel
/
sigm
/
vols000
/
vol019
/
rt.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1984-04-29
|
3KB
|
147 lines
PROGRAM RT;
(**
** PROGRAM TITLE: Random Files IO
**
** WRITTEN BY: Raymond E. Penley
** DATE WRITTEN: 11 June 1980
**
** WRITTEN FOR: Users of Pascal/Z
**)
LABEL 99; {place to go when all done}
CONST
terminal = '/EOF/EOF/EOF/EOF/EOF';
ID = 'RAND.TST';
TYPE
Custype = record
name : STRING 20;
next : ^cust
end;
STR255 = STRING 255;
Storetype = file of custype;
VAR
count, (* Record counter *)
IX,
Rcd : INTEGER;
CTRLE, (* My End_of_file flag on INPUT *)
CTRLZ : CHAR; (* CP/M eof of file marker *)
XEOF, (* User supplied EndOfFile flag *)
EOFS, (* Flag for CP/M eof marker *)
done : BOOLEAN;
Customer : custype;
Store : Storetype;
FUNCTION INDEX(X,Y: STR255): INTEGER; EXTERNAL;
Procedure SCROLL;
VAR ix : 1..25;
jx : INTEGER;
begin
For ix:=1 to 25 do
begin
writeln;
For jx:=1 to 600 do {dummy};
end;
end;
Procedure CLEAR;
VAR ix : 1..25;
begin
For ix:=1 to 25 do Writeln;
end;
Procedure PAUSE;
VAR cix : char;
begin
write('Type return to continue ');READLN(cix);
end;
FUNCTION SIZE(VAR fx : Storetype): INTEGER;
VAR ix : integer;
begin
RESET(ID,fx);
ix := 1;
READ(fx,Customer);
XEOF := INDEX(Customer.NAME,'/EOF/') <> 0;
While NOT XEOF do
begin
ix := ix + 1;
READ(fx,Customer);
XEOF := INDEX(Customer.NAME,'/EOF/') <> 0;
end;
SIZE := ix - 1;
end{---of SIZE---};
(*$P+ [turn on symbolic output]*)
BEGIN
CLEAR;
CTRLZ := CHR(26);
Customer.name := '--------------------';
Customer.next := nil;
writeln(' ':15, 'PASCAL/Z FILE I/O Demo');
writeln(' ':15, 'File I/O on a NON Text file');
writeln;writeln;
writeln(' ':15,'Creating file "RAND.TST"');
{
File RAND.TST will be created sequentially but
may be accessed either randomly or sequentially
}
REWRITE(ID,Store);
FOR IX:=1 TO 20 DO
begin
Customer.NAME[ix] := CHR(ix+64);
WRITE(Store,Customer);
Writeln;(*---simple scroll here---*)
end;
{---NOW mark the End_Of_File---};
Customer.name := terminal;
WRITE(Store,Customer);
WRITELN;
WRITELN(' ':15,'---TEST ONE - SEQUENTIAL READING---');
count := SIZE(Store);
RESET(ID,Store);
WRITELN('INITIALLY AFTER A RESET EOF(Store) = ', EOF(Store) );
for ix:=1 to 5000 do {dummy};
For ix := 1 to count do
begin
READ(Store,Customer);
XEOF := INDEX(Customer.NAME,'/EOF/') <> 0;
EOFS := (Customer.NAME[1]=CTRLZ);
writeln;
IF NOT EOFS THEN WRITELN( ix:3, ': ', Customer.NAME);
writeln(' ':5,'XEOF = ', XEOF, ' ':5,'EOFS = ', EOFS );
End;
PAUSE;
SCROLL;
WRITELN(' ':15,'---TEST TWO - RANDOM READING---');
WRITELN;writeln;
writeln('Enter <-1> to quit');
RESET(ID,Store);
DONE := FALSE;
REPEAT
WRITELN;
WRITE('Enter RECORD to be DISPLAYED ');READ(Rcd);
If Rcd=(-1) then
begin Done:=true;goto{exit}99 end;
If Rcd<=count then
begin
READ(Store:Rcd, Customer);
XEOF := INDEX(Customer.NAME,'/EOF/') <> 0;
EOFS := (Customer.NAME[1]=CTRLZ);
WRITELN;
IF NOT EOFS THEN WRITELN( Rcd:3, ': ', Customer.NAME);
writeln(' ':5,'XEOF = ', XEOF, ' ':5,'EOFS = ', EOFS );
end
Else
Writeln('Read Beyond End Of File');
99:{exit here when done}
UNTIL DONE;
CLEAR;{always be neat and clear the screen of your garbage}
End{of Program RT}.