*DECK RCM05                        27JUL81
USETEXT COMCBEG 
USETEXT COMCAPR 
USETEXT COMCCAE 
USETEXT COMQDEF 
USETEXT COMQFIL 
USETEXT COMQNET 
    PROC RCM05; 
      BEGIN    # RCM05 #
# 
**    RCM05      PROCESS COMMAND 5 (STOPR). 
* 
*     RCM05 EVICTS THE TRANSFERRED FILE FROM THE I/O QUEUE AFTER A
*     SUCCESSFUL TRANSFER, AND RESETS THE ACTIVE FILE TABLE ENTRY 
*     FOR THE NEXT FILE TRANSFER. 
* 
*     PROC RCM05
* 
*     ENTRY      ACN = AFT ENTRY INDEX (CONNECTION NUMBER). 
*                FILES4 = TRUE (STOP SENT). 
*                NTAH = NETWORK TEXT HEADER (MESSAGE).
* 
*     EXIT       AFT ENTRY UPDATED. 
*                FILE EVICTED FROM QUEUE, IF NO ERROR.
* 
*     PROCESS    IF COMMAND NOT IN SEQUENCE,
*                  CALL ILLSEQ
*                  EXIT.
*                ELSE 
*                  PROCESS ATTRIBUTES.
*                IF COMMAND NOT CONTINUED,
*                  IF NO ERROR, 
*                    UPDATE AFT ENTRY (OK). 
*                  ELSE 
*                    UPDATE AFT ENTRY (ERROR).
*                UPDATE AFT ENTRY (STOPR RECEIVED). 
# 
  
# 
****  XREF
# 
      XREF
        BEGIN 
        PROC APFTCH;               # GET ATTRIBUTE #
        PROC CONLOG;
        PROC ILLSEQ;
        PROC MESSAGE; 
        PROC NAME;                 # DEBUG CODE # 
        PROC PRSTXFR; 
        FUNC PRUCNT     U;
        PROC RCMERR;
        FUNC YCDZ       C(10);
        FUNC XSFW       C(10);
        END 
# 
****  XREF END
# 
  
  
      ITEM AT         I;
      ITEM L          C(10);       # TEMPORARY FOR KILO # 
      ITEM PREVAT     I;
  
      DEF LEMSGDM    #26#;
      ITEM EMSGDM     C(LEMSGDM) = "MESSAGE FROM REMOTE HOST -";
  
      DEF LEMSGIQ    #31#;
      ITEM EMSGIQ     C(LEMSGIQ) = "INVALID QUALIFIER OR PARAMETER."; 
  
      DEF LEMSGFQ    #26#;
      ARRAY EMSGFQ     S(3);
        BEGIN 
        ITEM $DFQ       C(00,00,LEMSGFQ) =
                 ["QUEUED AS XXXXXXXX ON PID."];
        ITEM EMSGFQJN   C(01,00,08);
        ITEM EMSGFQPI   C(02,12,03);
        END 
  
  
        $BEGIN
        NAME("RCM05");             # DEBUG CODE # 
        $END
  
      IF NOT FILEBIP               # IF COMMAND NOT CONTINUED # 
      THEN
        BEGIN 
        FILECWD = 1;               # SET COMMAND FLAG (FOR AT$ST) # 
        IF FILE5 NE 0              # IF "STOPR" SENT OR RECEIVED #
          OR NOT FILES4            # OR "STOP" NOT SENT # 
        THEN
          BEGIN 
          ILLSEQ;                  # INVALID COMMAND SEQUENCE # 
          RETURN; 
          END 
        END 
  
      ELSE                         # IF COMMAND CONTINUED # 
        BEGIN 
        IF FILEBNO NE CM$STPR      # IF WRONG COMMAND # 
        THEN
          BEGIN 
          ILLSEQ;                  # INVALID COMMAND SEQUENCE # 
          RETURN; 
          END 
        END 
  
      FILEBIP = FALSE;             # CLEAR COMMAND IN PROGRESS FLAG # 
  
      SLOWFOR AT = 0 WHILE AT GQ 0             # PROCESS ATTRIBUTES # 
      DO
        BEGIN 
        PREVAT = AT;               # SAVE PREVIOUS ATTRIBUTE #
        APFTCH(NTAH,AT,QUAL,ATTEXTL,ATTEXT);  # GET ATTRIBUTE # 
        IF AT LS 0                 # IF END OF ATTRIBUTES # 
        THEN
          BEGIN 
          CYCLE AT;                # CONTINUE LOOP (EXIT) # 
          END 
  
        QUAL=C<0,1>QUAL;           # GET QUALIFIER #
        IF QUAL EQ ATQ$I           # IF QUALIFIER IS "IGNORE" # 
        THEN
          BEGIN 
          CYCLE AT;                # IGNORE THIS ATTRIBUTE #
          END 
  
        IF QUAL NQ ATQ$S           # IF NOT "SELECT" #
        THEN
          BEGIN 
          RCMERR(LOC(EMSGIQ),LEMSGIQ);
          CYCLE AT;                # CONTINUE LOOP #
          END 
  
        IF AT EQ AT$AC             # IF ATTRIBUTE = COMMAND CONTINUED # 
        THEN
          BEGIN 
          FILEBIP=TRUE;            # SET COMMAND CONTINUED FLAG # 
          FILEBNO=CM$STPR;
          CYCLE AT;                # CONTINUE LOOP #
          END 
  
        IF ((AT EQ AT$DM)          # IF ATTRIBUTE = DAYFILE MESSAGE # 
          OR (AT EQ AT$OM))        # OR OPERATOR MESSAGE #
          AND (QUAL EQ ATQ$S)      # AND QUALIFIER = "SELECT"#
        THEN
          BEGIN 
          IF PREVAT NE AT$DM
            AND PREVAT NE AT$OM 
          THEN
            BEGIN 
            CONLOG(LOC(EMSGDM),LEMSGDM);
            END 
  
          CONLOG(LOC(ATEXTWD[0]),ATTEXTL);
          CYCLE AT;                # CONTINUE LOOP #
          END 
  
        IF AT EQ AT$JN             # IF ATTRIBUTE = JOB NAME #
        THEN
          BEGIN 
          FILEJBN=ATEXTWD[0];      # SAVE JOB NAME #
          END 
  
        ELSE
          BEGIN 
          IF AT EQ AT$ST           # IF ATTRIBUTE = STATUS #
          THEN
            BEGIN 
            FILECWD = 0;           # CLEAR COMMAND FLAG # 
            PRSTXFR;               # PROCESS STATE OF TRANSFER #
            END 
          END 
        END  # END OF ATTRIBUTES #
  
      IF NOT FILEBIP               # IF COMMAND NOT CONTINUED # 
      THEN
        BEGIN 
        FILER5 = TRUE;             # STOPR RECEIVED # 
        IF FILES3                  # IF "GO" COMMAND SENT # 
          AND NOT FILECER          # AND NO ERROR # 
          AND FILECWD EQ 0         # AND STATUS RECEIVED #
        THEN
          BEGIN                    # BUILD DAYFILE MESSAGE #
          EMSGFQJN = XSFW(FILEJBN);# JOB NAME # 
          EMSGFQPI = FILECPDC;     # PID #
          CONLOG(LOC(EMSGFQ),LEMSGFQ);
          FILEFTS = FTS$CMPOK;     # SUCCESSFUL TRANSFER #
          END 
  
        ELSE
          BEGIN 
          FILEFTS = FTS$ETPREQ;    # ERROR, TERMINATE # 
          END 
        END 
  
      END      # RCM05 #
    TERM
