SUBROUTINE NETTLK ( luntrm, lunnt1, lunnt2, sndbf1, + sndbf2, ndname, ndlen, msg, ier, status ) C BYTE conblk(72) ! Destination descriptor. C LOGICAL msg ! TRUE => issue messages. C CHARACTER*80 sndbf1, ! Buffers to send. + sndbf2 ! CHARACTER*16 user ! User name. CHARACTER*16 accno ! Account number. CHARACTER*16 tsknam ! Destination task name. CHARACTER*8 pswd ! Password. CHARACTER*6 ndname ! Destination node name. CHARACTER*1 null ! Null byte. C INTEGER*2 stat ! Stat return from BFMT1. INTEGER*2 sndsiz ! Size of buffer. INTEGER*2 lrp ! Number of seconds for link recovery. INTEGER*2 count ! Maximum connections to task. INTEGER*2 mstat(3) ! Status information about comm. INTEGER*2 status(2) ! Completion status information. INTEGER*2 lunnt1 ! Lun for network. INTEGER*2 lunnt2 ! Lun for connect. INTEGER*2 luntrm ! Terminal. INTEGER*2 i0, i1 ! Constants. INTEGER*2 ndlen ! Length of ndname. INTEGER*2 tsklen ! Length of tsknam. INTEGER*2 usersz ! Length of user name in USER. INTEGER*2 pswdsz ! Length of password in PSWD. INTEGER*2 accnsz ! Length of account in ACCNO. INTEGER*2 istat ! One word status. INTEGER*2 ier ! Error flag. INTEGER*2 objtyp ! Object type. INTEGER*2 ids ! Directive status. INTEGER*2 indata ! Receive confirmation from VAX. INTEGER*2 insize ! Length in bytes of INDATA. C DATA insize/2/ DATA tsklen/6/ DATA usersz/10/ DATA pswdsz/7/ DATA accnsz/9/ DATA null/0/ DATA objtyp/0/ DATA i0/0/, i1/1/ DATA lrp/1000/ DATA count/0/ DATA user /'NETNONPRIV '/ DATA pswd /'NONPRIV '/ DATA accno/'[200,200] '/ DATA tsknam/'PRNTER '/ DATA sndsiz/80/ ! Total buffer length. C C Executable begins here. C D TYPE 1, sndbf2(1:50) D1 FORMAT ( ' SNDBF2: ',A ) IF ( ndname(1:1) .EQ. ' ' .OR. ! If the node name + ndname(1:1) .EQ. null ) THEN ! is not given, then ndname = 'STAR ' ! use default STAR. ndlen = 4 ! END IF ! IF ( ndlen .GT. 6 ) THEN ! Too long name. ndlen = 6 ! Try and hope... END IF ! D TYPE 100, ndname, ndlen D100 FORMAT ( ' Node: ',A,' Length: ',I6 ) user(usersz+1:usersz+1) = null ! End strings pswd(pswdsz+1:pswdsz+1) = null ! with null accno(accnsz+1:accnsz+1) = null ! characters. CALL OPNNTW( lunnt1, status, mstat, count, lrp )! Open DECnet link. IF( status(1) .EQ. 1 ) THEN ! Success. CALL BACC( istat, conblk, usersz, user, ! Build an access + pswdsz, pswd, ! control information + accnsz, accno ) ! area. IF( istat .EQ. -1 ) THEN ! Success. CALL BFMT1( stat, conblk, ndlen, ndname, ! Build a format 1 + objtyp, tsklen, ! connect block. + tsknam ) ! IF( stat ) THEN ! Success. IF ( msg ) THEN ! Issue message. WRITE ( luntrm, 200 ) ndname(1:ndlen) ! Write it out. 200 FORMAT (' %SBT-I, Trying to connect', ! + ' to node ', A) ! END IF ! CALL CONNTW( lunnt2, status, conblk ) ! Connect to VAX. IF( status(1) .NE. 1 ) THEN ! Failed. TYPE *, 'CONNTW error= ',status ier = -32 ! ELSE ! Okay so far. IF ( msg ) THEN ! Issue message. WRITE ( luntrm, 250 ) ! 250 FORMAT ( ' %SBT-I, Connection ',! + 'established.' ) ! END IF ! CALL SNDNTW( lunnt2, status, sndsiz,! Send file + sndbf1 ) ! list. IF( status(1) .NE. 1 ) THEN ! Error sending ier = -36 ! buffer. Set ! flag. ELSE ! CALL SNDNTW( lunnt2, ! Send queue + status, ! name. + sndsiz, ! + sndbf2 ) ! IF ( status(1) .NE. 1 ) THEN ! Error sending buffer. ier = -36 ! ELSE ! Success. CALL RECNTW( lunnt2, ! Get back status from + status, ! VAX program. + insize, ! + indata ) ! IF( status(1) .EQ. 1 ) THEN ! Got data. IF( indata .EQ. 0 ) THEN! And got the right ier = 1 ! value, too!!! ELSE ! Oops, bad data. ier = -88 ! Mark error. ENDIF ! ELSE ! No data at all. ier = -33 ! Mark error. TYPE *, 'RECNTW error: ',status ENDIF ! END IF ! END IF ! IF ( msg .AND. ier .GE. 0 ) THEN ! Criteria for message. WRITE ( luntrm, 300 ) ! 300 FORMAT ( ' %SBT-I, Communica', ! Success message. + 'tion completed.' ) ! ELSE IF ( msg ) THEN ! Failed. WRITE ( luntrm, 301 ) ! Issue error message. 301 FORMAT ( ' %SBT-F, Communica', ! + 'tion failed.' ) ! END IF ENDIF ELSE ier = -31 ENDIF ELSE ier = -30 ENDIF ELSE ier = -35 ENDIF D TYPE *, 'IER in NETTLK: ', ier CALL CLSNTW( status ) ! Close DECnet link. IF( status(1) .NE. 1 ) THEN ! Test for error. ier = -34 ENDIF RETURN END