PROC OPENLNK (RSTATUS);
CONTROL PRESET;
      BEGIN  # OPENLNK #
*copyc ICS$ICSZCOM
      ITEM RSTATUS    U;

      ITEM LOOP$1     U;
      ITEM LOOP$2     U;
      ITEM LOOP$3     U;
      ITEM STAT       U;
      ARRAY FET S(6);
        BEGIN
        ITEM FET$LFN    U(00,00,42);
        ITEM FET$LOCK   B(00,59,01);
        ITEM FET$FRST   U(01,42,18);
        ITEM FET$IN     U(02,42,18);
        ITEM FET$OUT    U(03,42,18);
        ITEM FET$LIM    U(04,42,18);
        END

      ARRAY BUF [64] S(1);
        BEGIN
        ITEM FW         U(00,00,60);
        END

      XREF
        BEGIN
        PROC ABORT;
        PROC ADDSPL;
        PROC CONFIRM;
        PROC PAUSE;
        PROC READSKP;
        PROC REWIND;
        PROC SIGNON;
        END

      DEF RCL #1#;

#  INITIALIZE                                                         #

      RSTATUS = MLSOK;
      IF OPENED
      THEN
        BEGIN
        RSTATUS = SECOND$OPEN;
        RETURN;
        END

#  READ NAME OF 180 PARTNER FROM SECOND RECORD OF INPUT FILE.         #

      FET$LFN[0] = O"11162025240000";  # INPUT #
      FET$LOCK[0] = TRUE;
      FET$FRST[0] = LOC(FW[0]);
      FET$IN[0] = FET$FRST[0];
      FET$OUT[0] = FET$FRST[0];
      FET$LIM[0] = FET$FRST[0] + 65;
      REWIND(FET[0],RCL);
      READSKP(FET[0],(0),RCL);
      FET$IN[0] = FET$FRST[0];
      READSKP(FET[0],(0), RCL);
      PARTNER$NAME = FW[0];

#  SIGN ON TO THE MEMORY LINK                                         #

      FOR LOOP$1 = 0
      DO
        BEGIN  # LOOP 1 #
        SIGNON ((0), (1), APPL$NAME, STAT);
        IF (STAT EQ MLSOK)
        THEN
          BEGIN
          GOTO LOOP1END;
          END

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

        IF (STAT EQ MLSND) OR (STAT EQ MLSIF)
        THEN
          BEGIN
          RSTATUS = BAD$OPEN;
          RETURN;
          END

        ABORT;
        END  # LOOP 1 #

LOOP1END%

#  PERMIT THE 180 PARTNER TO SEND TO US                               #

      FOR LOOP$2 = 0
      DO
        BEGIN  # LOOP 2 #
        ADDSPL (APPL$NAME, PARTNER$NAME, STAT);
        IF (STAT EQ MLSOK) OR (STAT EQ MLSRN)
        THEN
          BEGIN
          GOTO LOOP2END;
          END

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

        ABORT;
        END  # LOOP 2 #

LOOP2END%

#  WAIT FOR 180 PARTNER TO COMPLETE ITS OPEN SEQUENCE                 #

      FOR LOOP$3 = 0
      DO
        BEGIN  # LOOP 3 #
        CONFIRM (APPL$NAME, PARTNER$NAME, STAT);
        IF (STAT EQ MLSOK)
        THEN
          BEGIN
          GOTO LOOP3END;
          END

        IF (STAT EQ MLSBI) OR (STAT EQ MLSSP)
        THEN
          BEGIN
          PAUSE(PAUS$CNT);
          TEST LOOP$3;
          END

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

        ABORT;
        END  # LOOP 3 #

LOOP3END%

      OPENED = TRUE;
      POSITION = EOR;
      ANY$PUTS = FALSE;
      END  # OPENLNK #

    TERM
