PROC CLOSLNK (RSTATUS);
      BEGIN  # CLOSLNK #
*copyc ICS$ICSZCOM

      ITEM RSTATUS    U;

      ITEM LOOP$1     U;
      ITEM LOOP$2     U;
      ITEM FWA        U;
      ITEM SIGNAL     B;
      ITEM STAT       U;

      XREF
        BEGIN
        PROC ABORT;
        PROC PAUSE;
        PROC PUTLNK;
        PROC SEND;
        PROC CONFIRM;
        PROC SIGNOFF;
        END

#  INITIALIZE                                                         #

      RSTATUS = MLSOK;
      IF NOT OPENED
      THEN
        BEGIN
        RSTATUS = NOT$OPENED;
        RETURN;
        END

      IF ANY$PUTS
      THEN
        BEGIN
        IF POSITION EQ MID$RECORD
        THEN
          BEGIN  # TERMINATE ANY PRIOR PARTIAL RECORD #
          PUTLNK(FWA,0,TERMINATE,TRUE,STAT);
          IF STAT NQ 0
          THEN
            BEGIN
            RSTATUS  = STAT;
            RETURN;
            END

          END

#  SEND AN EOI INDICATION TO THE 180 PARTNER                          #

        AI$EOI = TRUE;
        AI$EOP = FALSE;
        FIRST$MSG = TRUE;
        LAST$MSG = TRUE;
        FOR LOOP$1 = 0
        DO
          BEGIN  # LOOP 1 #
          SEND (APPL$NAME, ARB$INFO, (SIGNAL), FWA, (0), PARTNER$NAME,
            STAT);

          IF  (STAT EQ MLSOK) OR (STAT EQ MLSSF)
          THEN
            BEGIN
            GOTO LOOP1END;
            END

          IF (STAT EQ MLSBI) OR (STAT EQ MLSBA) OR (STAT EQ MLSPN) OR
            ( STAT EQ MLSRF)
          THEN
            BEGIN
            PAUSE(PAUS$CNT);
            TEST LOOP$1;
            END

          IF (STAT EQ MLSRN)
          THEN
            BEGIN
            RSTATUS = PARTNER$QUIT;
            RETURN;
            END

          ELSE
            BEGIN
            ABORT;
            END

          END  # LOOP 1 #

LOOP1END%
        POSITION = EOI;

#  WAIT FOR THE 180 PARTNER TO RECEIVE THE EOI                        #

        FOR LOOP$2 = 0
        DO
          BEGIN  # LOOP 2 #
          CONFIRM (APPL$NAME, PARTNER$NAME, STAT);

          IF  (STAT EQ MLSOK)
          THEN
            BEGIN
            GOTO LOOP2END;
            END

          IF (STAT EQ MLSBI) OR (STAT EQ MLSPN) OR (STAT EQ MLSRF)
            THEN
            BEGIN
            PAUSE(PAUS$CNT);
            TEST LOOP$2;
            END

          IF (STAT EQ MLSRN)
          THEN
            BEGIN
            RSTATUS = PARTNER$QUIT;
            RETURN;
            END

          ELSE
            BEGIN
            ABORT;
            END

          END  # LOOP 2 #

LOOP2END%

        END

#  SIGN OFF FROM THE MEMORY LINK                                      #

      OPENED = FALSE;
      SIGNOFF (APPL$NAME, STAT);
      IF (STAT NQ MLSOK) AND (STAT NQ MLSRN) AND (STAT NQ MLSQL)
      THEN
        BEGIN
        ABORT;
        END


      END  # CLOSLNK #

    TERM
