home *** CD-ROM | disk | FTP | other *** search
- 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}.
-