Guardian Programmer's Guide

Table Of Contents
Communicating With Magnetic Tape
Guardian Programmer’s Guide 421922-014
12 - 100
Accessing an Unlabeled Tape File: An Example
! Rewind tape to BOT, leave online. Since this might be the
! first access to tape, the code retries the operation for
! error 100. The call to FILE^ERRORS prompts the user to
! fix the problem before the retry:
CALL LOAD^TAPE;
! Space tape forward to start of record block:
CALL CONTROL(TAPENUM,9,$INT(RBLOCK));
IF <> THEN CALL FILE^ERRORS(TAPENUM);
! Execute loop if reading just selected, or user
! has requested to read an additional record
! Exit loop if user declines to read next record:
DO BEGIN
PRINT^BLANK;
! Read a record block from the tape file:
CALL READX(TAPENUM,TBUFFER,TBUFSIZE,COUNT^READ);
IF <> THEN
BEGIN
CALL FILE_GETINFO_(TAPENUM,ERROR);
IF ERROR = 1 THEN
PRINT^STR("No such record. ")
ELSE CALL TAPE^READ^ERRORS(ERROR);
RETURN;
END;
! Extract sequence number for record block from first
! record to help fix errors:
LOG^RECORD ':=' TBUFFER[0] FOR 256;
SEQ^NUM := LOG^RECORD.SEQ^NUM;
DO BEGIN
! Extract the record:
CASE INDEX OF
BEGIN
0 -> LOG^RECORD[0] ':=' LREC0[0] FOR 256;
1 -> LOG^RECORD[0] ':=' LREC1[0] FOR 256;
2 -> LOG^RECORD[0] ':=' LREC2[0] FOR 256;
3 -> LOG^RECORD[0] ':=' LREC3[0] FOR 256;
OTHERWISE -> CALL PROCESS_STOP_(!process^handle!,
!specifier!,
ABEND);
END;