*DECK RHFERRC 
USETEXT COMCBEG 
USETEXT COMADEF 
USETEXT COMACBF 
USETEXT COMACBX 
USETEXT COMADFM 
USETEXT COMAFET 
USETEXT COMAMCB 
PROC RHFERRC; 
# TITLE RHFERRC - RHF ERROR CHECK.  # 
  
      BEGIN  # RHFERRC #
  
# 
**    RHFERRC - RHF ERROR CHECK.
* 
*     RHFERRC PERFORMS THE REQUIRED PROCESSING WHENEVER THE 
*     CODE/STATUS IN THE RHF FIT INDICATES AN ERROR.  IF AN ACTUAL
*     ERROR HAS OCCURRED RHFERRC WILL SET FTTERRORD AND INITIATE
*     COMPLETION OF THE FILE TRANSFER.
* 
*     PROC RHFERRC
* 
*     ENTRY      <FTTENT>   = FWA FTT ENTRY.
*                FTTTSTATIS = IN-PROGRESS.
*                           = SYSTEM ERROR. 
*                <RFET>     = FWA RHF FET.
*                RFETEC     = RHF FET ERROR CODE. 
* 
*     EXIT       FTTTSTATIS = IN-PROGRESS. (REISSUE FUNCTION) 
*                           = NDR ERROR (RHF I/O ERROR).
* 
*     PROCESS    DEPENDING ON THE VALUE OF CODE/STATUS OF RHF FET:  
*                  CASE (FET PARAMETER ERROR) 
*                      SET MSGORD = RHF I/O ERROR 25. 
*                      SET FTTERRORD = NDR ERROR. 
*                  CASE (NEXT INPUT BLOCK IS NOT A PRU BLOCK) 
*                    IF ANY DATA RECEIVED:  
*                      SET ERROR (0029) FOR ER COMMAND. 
*                    SET GFETEC = EOI (END-OF-DATA, EXIT CONV MODE).
*                  CASE (ABN MISCOMPARE ON NEXT INPUT BLOCK)
*                      SET MSGORD = RHF I/O ERROR 26. 
*                  CASE (NEXT BLOCK EXCEEDS ALLOWED BLOCK SIZE) 
*                      SET MSGORD = RHF I/O ERROR 27. 
*                  CASE (CONTROL WORD FORMAT ERROR) 
*                      SET MSGORD = RHF I/O ERROR 28. 
*                  CASE (NO BUFFERS FOR OUTPUT) 
*                    RE-ISSUE THE NETXFR REQUEST. 
*                  CASE (BLOCK LENGTH MISCOMPARE) 
*                      SET MSGORD = RHF I/O ERROR 29. 
*                  CASE (PARTIAL W/O EOR OR EOI)
*                      SET MSGORD = RHF I/O ERROR 30. 
*                  CASE (NETWORK ABN MISCOMPARE)
*                      SET MSGORD = RHF I/O ERROR 31. 
*                  CASE (BLOCK NOT MULTIPLE OF 60 BITS) 
*                      SET MSGORD = RHF I/O ERROR 32. 
*                  CASE (UNKNOWN BLOCK ERROR) 
*                      SET MSGORD = RHF I/O ERROR 33. 
*                IF MSGORD = RHF I/0 ERROR: 
*                  CALL DAYFMSG (NDR ERROR MESSAGE) 
*                  SET FTTTSTATIS = NDR ERROR.
*                IF FTTSTATIS .GE. SYSTEM-ERROR 
*                  AND FTTERRORD .NE. NDR ERROR:  
*                  CALL QUITXFR TO STOP DATA TRANSFER.
*                  IF SEND
*                  THEN 
*                    CLEAR PUT FET ERROR CODE.
*                    SET PUT IN POINTER = PUT OUT POINTER.
*                    WAIT FOR CIO FET TO GO COMPLETE. 
*                  SET GET IN POINTER TO GET OUT POINTER. 
*                  SET GET FET TO EOI.
* 
****  PROC RHFERRC - XREF LIST BEGIN. 
# 
  
      XREF
        BEGIN 
        PROC CALLRHF;               #  WRITE DAYFILE MESSAGE #
        PROC DAYFMSG;               #  WRITE DAYFILE MESSAGE #
        FUNC OCTCHF     C(10);       # OCTAL TO DISPLAY CODE #
        PROC QUITXFR;                # QUIT DATA TRANSFER # 
        FUNC REPZERO C(7);           # REPLACE TRAILING ZEROES #
        END 
  
# 
****  PROC RHFERRC XREF LIST END. 
# 
  
      ITEM MSGORD     I;           # MESSAGE ORDINAL #
  
      SWITCH  SWRHFERRC  RHFERRCCON, RHFERRCCON, RHFERRC0,
                         RHFERRC1, RHFERRC2, RHFERRC3,
                         RHFERRC4, RHFERRC5, RHFERRC6,
                         RHFERRC7, RHFERRC8, RHFERRC9,
                         RHFERRC10; 
                                               CONTROL EJECT; 
      MSGORD = 0;                  # INITIALIZE MSGORD #
      GOTO SWRHFERRC[RFETEC[0]];
  
# 
*     FET PARAMETER ERROR.
# 
  
RHFERRC0: 
  
      MSGORD = RFETPRAMER;
      GOTO  RHFERRCCON; 
  
# 
*     NEXT INPUT BLOCK IS NOT A PRU BLOCK.
# 
  
RHFERRC1: 
  
      IF INTOTBITS NE 0            # IF ANY DATA RECEIVED # 
      THEN
        BEGIN 
        FTTDXPA = P$ER$ERR29;      # SET ERROR FOR ER COMMAND # 
        END 
  
      GFETEC = EOI;                # SET END-OF-DATA #
      GOTO  RHFERRCCON; 
  
# 
*     ABN MISCOMPARE ON NEXT INPUT BLOCK. 
# 
  
RHFERRC2: 
  
      MSGORD = BNUMMISINP;
      GOTO  RHFERRCCON; 
  
# 
*     LAST BLOCK EXCEEDED ALLOWED BLOCK SIZE. 
# 
  
RHFERRC3: 
  
      MSGORD = BEXALLOWSZ;
      GOTO  RHFERRCCON; 
  
# 
*     CONTROL WORD FORMAT ERROR. (BAD UBC, PRU SIZE, OR BYTES IN PRU).
# 
RHFERRC4: 
  
      MSGORD = CTLWDFTERR;
      GOTO  RHFERRCCON; 
  
# 
*     NO BUFFERS FOR OUTPUT. REISSUE THE FUCTION. 
# 
  
RHFERRC5: 
  
      RFETCOMP[0] = FALSE;
      CALLRHF (RFETRHFF[0]);         # REISSUE THE RHF I/O FUNCTION # 
      GOTO  RHFERRCCON; 
  
# 
*     BLOCK LENGTH MISMATCH.
# 
  
RHFERRC6: 
  
      MSGORD = BLKSZMSCPR;
      GOTO RHFERRCCON;
  
# 
*     PARTIAL BLOCK WITHOUT EOR OR EOI RECEIVED.
# 
  
RHFERRC7: 
  
      MSGORD = PRTBWOEREI;
      GOTO RHFERRCCON;
  
# 
*     NETWORK ABN MISCOMPARE. 
# 
  
RHFERRC8: 
  
      MSGORD = BNETWRKABN;
      GOTO RHFERRCCON;
  
# 
*     BLOCK NOT MULTIPLE OF CM WORDS. 
# 
  
RHFERRC9: 
  
      MSGORD = BLKNOTMU60;
      GOTO RHFERRCCON;
  
# 
*     UNKNOWN BLOCK ERROR.
# 
  
RHFERRC10:  
  
      MSGORD = UNKBLKERR; 
      GOTO RHFERRCCON;
  
# 
*     CONTINUE PROCESSING AFTER SIMULATED CASE STATEMENT. 
# 
  
RHFERRCCON: 
  
      IF MSGORD GE FIRSTRIOEO      # IF RHF I/O ERROR # 
      THEN
        BEGIN 
        IDFM$LFN2 [NDRIOERR] = REPZERO(LFETLFNC);  # FILE NAME #
        IDFM$RHFER[NDRIOERR] = OCTCHF (RFETEC,2);  # RHF ERROR CODE # 
        DAYFMSG(MSGORD);           # SEND RHF I/O ERROR MESSAGE # 
        FTTTSTATIS = NDRIOERR;     # SAVE NDR ERROR # 
        RFETEC = 0;                # CLEAR RHF I/O ERROR #
        END 
  
      IF FTTTSTATIS GE SYSTEM$ER   # IF ERROR # 
        AND FTTERRORD NE NDRIOERR 
      THEN
        BEGIN 
        QUITXFR;                   # STOP DATA TRANSFER # 
        END 
  
      END    # RHFERRC #
  
      TERM
