Guardian Programmer's Guide

Table Of Contents
Communicating With Magnetic Tape
Guardian Programmer’s Guide 421922-014
12 - 64
Writing the Program
! Put comments into record structure:
LOG^RECORD.COMMENTS ':=' SBUFFER[0] FOR COUNT^READ;
! Pack record into record block:
CASE INDEX OF
BEGIN
0 -> LREC0 ':=' LOG^RECORD FOR 256;
1 -> LREC1 ':=' LOG^RECORD FOR 256;
2 -> LREC2 ':=' LOG^RECORD FOR 256;
3 -> LREC3 ':=' LOG^RECORD FOR 256;
OTHERWISE -> CALL PROCESS_STOP_;
END;
! Prompt the user to enter additional records:
PRINT^BLANK;
SBUFFER ':='
"Do You Wish to Enter Another Record (y/n)? "
-> @S^PTR;
CALL WRITEREADX(TERMNUM,SBUFFER,@S^PTR '-' @SBUFFER,
BUFSIZE,COUNT^READ);
IF <> THEN CALL FILE^ERRORS(TERMNUM);
! Increment the index into the record block:
INDEX := INDEX + 1;
! Send record block to tape process if no more records,
! or if record block full. Flush out to tape every 10
! writes to provide known point of consistency:
IF INDEX = 4 OR
(NOT (SBUFFER[0] = "y" OR SBUFFER[0] = "Y")) THEN
BEGIN
CALL WRITEX(TAPENUM,TBUFFER,TBUFSIZE);
IF <> THEN
BEGIN
CALL FILE_GETINFO_(TAPENUM,ERROR);
IF ERROR <> 1 THEN CALL FILE^ERRORS(TAPENUM);
END;
! Increment the record block count and reset the
! index:
SEQ^NUM := SEQ^NUM + 1;
INDEX := 0;
! Blank tape buffer in case next record block is not
! full:
TBUFFER[0] ':=' " ";
TBUFFER[1] ':=' TBUFFER[0] FOR 1023;