Example 9-4 is an HP Pascal/iX code segment
that reads records sequentially from an unlabeled magnetic tape file (indicated
by variable tape_file_num) and uses FWRITE to write them to a disk file
(indicated by variable disk_file_num). The operation is performed in a loop.
The loop ends when the FREAD intrinsic encounters an EOF marker on the tape
(indicating the end of the tape file).
Example 9-4. Reading From a Magnetic Tape File
procedure copy_tape_to_disk_file;
var
record : packed array [1..30] of char; {declare record }
end_of_file : boolean; {declare exit condition }
record_length : shortint; {size of record read }
length : shortint; {declare parameter }
control_code : 0..65535; {declare parameter }
begin
end_of_file := false; {initialize exit condition}
control_code := 0; {initialize to default }
length := -80; {size of record to be copied}
repeat {loop until exit condition}
record_length := FREAD (tape_file_num, record, length);
if ccode = ccl then
handle_file_error (tape_file, 3)
else
if ccode = ccg then {FREAD returns ccg if EOF }
end_of_file := true {exit condition encountered }
else
begin
FWRITE( disk_file_num, {identity returned by HPFOPEN }
record, {read from tape_file_num }
record_length, {actual size of record }
control_code {default }
);
if ccode <> cce then {check condition code for error}
handle_file_error (disk_file, 5);
end
entil end_of_file;
end; {end procedure }
|
If an error is encountered by either FREAD or FWRITE, procedure
handle_file_error is invoked. For more information about FREAD intrinsic
parameters, refer to the MPE/iX Intrinsics Reference Manual (32650-90028). For
more information about the FWRITE intrinsic, refer to chapter 8, "Writing to a
File". In appendix A, "HP Pascal/iX Program Examples", example A-1 uses a
similar procedure to copy records from a tape file to a disk file.