C C CADNET V2.0 C C XMT -- MAIN PROGRAM OF THE TRANSMITION SECTION. THIS PROGRAM C WILL TRANSMIT FIXED RECORD LENGTH FILES, AND STANDARD LIST FILES C FROM ONE PDP 11 TO ANOTHER. IT USES ANY TERMINAL IN THE DEVICE C TABLE WHICH IT CAN ATTACH TO, AND IS CONNECTED TO THE REMOTE C PDP-11 RUNNING 'RECEIV', CADNET V2.0 . C LOGICAL*1 LINE(516),OUT(28),IN(28),TSKNAM(6),RESPON(132) LOGICAL*1 OSWT(10),ISWT(10),CHAR,EOT,SOH,ZER,NIN,COLON LOGICAL IMAGE INTEGER IARRAY(18) PARAMETER SY=2, REM=3, ERR=4, EFN=1 COMMON /TASK/ TSKNAM COMMON /BUFFER/ ICOUNT, RESPON DATA IDOT / 3R... / DATA EOT, ZER, NIN, COLON, SOH/"4, '0', '9', ':', "1/ DATA IMAGE /0/ C C RETRIEVE THE NAME OF THE PROGRAM AND PLACE IT IN THE COMMON BLOCK C TASK FOR USE IN ERROR MESSAGES. CALL GETTSK(IARRAY,IDS) !GET TASK NAME IN RADIX 50 IF(IARRAY(1).EQ.IDOT) IARRAY(1)=0 !ELIMINATE LEADING '...' IF(IARRAY(2).EQ.IDOT) IARRAY(2)=0 !TRAILING '...' CALL R50ASC(6,IARRAY,TSKNAM) !CONVERT TO ASCII DO 10 I=1,6 !ELIMINATE BLANKS IF(TSKNAM(I).EQ."40) TSKNAM(I)=0 !FIND FIRST PRINTING CHAR 10 CONTINUE C CALL ASSIGN (1,'TI:') !MCR COMMAND LINE LUN CALL ASSIGN (ERR,'TI:') !ERROR MESSAGE LUN CALL TTATT (IDS) !ATTACH TO TERMINAL IF (IDS.LT.0) GOTO 1050 !EXIT IF FAILURE C 20 CONTINUE IMAGE=.FALSE. !ASSUME A VARIBLE RECORD LENGTH FILE NSIZE=0 CALL GETLIN(LINE,LEN,IDS,'XMT') !RETRIEVE COMMAND LINE CALL OUTFIL(OUT,LENOUT,OSWT,NSWTO) !GET OUTPUT FILE NAME C IF (NSWTO.GT.0) CALL SETERM(OSWT,IDS) C IF (IDS.LT.0) GOTO 1090 CALL INFIL (IN, LENIN, ISWT,NSWTI) !GET INPUT FILE NAME IF(NSWTI.LE.0) GOTO 40 !CHECK FOR /IM SWITCH IF ((ISWT(1).NE.'I').OR.(ISWT(2).NE.'M')) GOTO 40 C C FIXED LENGTH FILE SECTION IMAGE=.TRUE. NSIZE=128 IF(ISWT(3).NE.COLON) GOTO 40 NSIZE=0 I=4 C C COMPUTE THE SIZE OF THE FIXED LENGTH RECORDS 30 IF((ISWT(I).LT.ZER).OR.(ISWT(I).GT.NIN)) GOTO 40 NSIZE= 10*NSIZE + ISWT(I) - ZER !ANOTHER DIGIT HAS BEEN FOUND I=I+1 IF(NSIZE.GT.512) GOTO 1030 GOTO 30 40 CONTINUE C CALL OPE (LENIN, IN, IDS) !OPEN THE TRANSMIT FILE IF (IDS.LT.0) GOTO 1010 !CHECK FOR OPEN ERROR C C INITIALIZE COMMUNICATION WITH REMOTE. CALL INIT (OUT,LENOUT,NSIZE,IDS) !INITIALIZE COMMUNICATON IF(IDS.LT.0) GOTO 1020 C C SEND FILE A LINE AT A TIME 50 CALL READF(LINE,LINLEN,IDS) !READ A LINE OF THE FILE IF (IDS) 1000, 60, 70 !ERROR, NORMAL, EOF 60 CONTINUE CALL TRANS(LINE,LINLEN,IDS) IF(IDS.LT.0) GOTO 20 GOTO 50 !GET ANOTHER LINE OF THE FILE C C TERMINATE COMMUNICATION, AND RETURN FOR AN ANOTHER COMMAND LINE C READF CLOSED THE INPUT FILE 70 CONTINUE WRITE (REM,2050) EOT CALL TIME IF ((ICOUNT.NE.2).OR.(RESPON(2).NE.EOT)) GOTO 1040 ICOUNT=0 GOTO 20 C C BAD FILE 1000 CONTINUE WRITE(REM,2050) SOH !ABORT COMMUNICATION 1010 WRITE(ERR,2000) TSKNAM CALL CLOSE(SY) GOTO 20 1020 WRITE(ERR,2030) TSKNAM WRITE(REM,2050) SOH !ABORT COMMUNICATION CALL CLOSE(SY) GOTO 20 C C RECORD SIZE TO LARGE 1030 WRITE(ERR,2040) TSKNAM GOTO 20 C COMMUNICATION TERMINATED ABRUPTLY 1040 WRITE(ERR,2020) TSKNAM GOTO 20 C 1090 CONTINUE WRITE (ERR,2070) TSKNAM GOTO 20 C C DEVICE ALREADY ATTACHED 1050 WRITE(ERR,2060) TSKNAM CALL EXIT 2000 FORMAT(X,6A1,' -- OPEN OR READ FAILURE ON INPUT FILE') 2010 FORMAT(Q,132A1) 2020 FORMAT(X,6A1,' -- COMMUNICATION DID NOT END PROPERLY, FILE ', & 'MAY BE CORRUPTED') 2030 FORMAT(X,6A1,' -- COMMUNICATION INITIALIZATION ERROR') 2040 FORMAT(X,6A1,' -- RECORD SIZE TOO LARGE') 2050 FORMAT(X,10A1) 2060 FORMAT(X,6A1,' -- COMMUNICATION DEVICE ATTACHED') 2070 FORMAT(X,6A1,' -- FAILED TO ATTACH TO REMOTE') END C C ERROR MESSAGE SUBROUTINE FOR TIME OUT AST SUBROUTINE ERRMSG PARAMETER ERR=4 LOGICAL*1 TSKNAM(6) COMMON /TASK/ TSKNAM WRITE(ERR,1)TSKNAM RETURN 1 FORMAT(X,6A1,' -- REMOTE COMPUTER NOT RESPONDING') END