PROGRAM GPORT C C Routine to spawn to the Indirect Command File Processor a command C file to check the status of a user specified port. It determines C (from the exit status) from ICP that the port is Logged in or not, C allocated, or attached. If none of these is the case, The baud rate C is asked for and set. The primary use is to be able to remotely dial C out of the system using the TALK program and an auto-bauding auto-dial C modem such as the RIXON 212A. C C Compile and taskbuild commands C FORTRAN/F77 GETPORT/CHECK C GETPORT/PR:0=GETPORT C / C UNITS=2 C ACTFIL=2 C ASG=TI:2 C TASK=...GPT C // C C Modifications: C C V1.1 30-JUL-84 Set the requested terminal to type UNKNOWN. This will C prevent the SCREEN program from dumping on the line C every minute. BLT C IMPLICIT INTEGER (A-Z) DIMENSION STATS(8),GTSKBF(16),ISB(2),DPB(6),SPEED(0:19) CHARACTER*80 CMDLIN,DEV*5 REAL ICP BYTE TSKUIC(2),SETTT(6) C EQUIVALENCE (GTSKBF(8),TSKUIC(1)) C DATA ICP/6R...AT./ DATA SPEED/3*0,50,75,110,134,150,200,300,600,1200,1800,2000, $ 2400,3600,4800,7200,9600,19200/ C PARAMETER (REM=1,CRT=2) C CALL GETMCR(CMDLIN,CMDLEN) IF (CMDLEN.GT.0) THEN DEV = CMDLIN(5:CMDLEN) N = CMDLEN-4 GO TO 8 ENDIF 5 WRITE (CRT,6) 6 FORMAT ('$Enter the terminal device [TT3:] : ') READ (CRT,7,ERR=5,END=99) N,DEV 7 FORMAT (Q,A5) IF (N.EQ.0) THEN DEV = 'TT3:' N = 4 ENDIF 8 CMDLIN = '@LB:[1,2]PORTSTAT.CMD ' CMDLEN = 22+N CMDLIN(23:CMDLEN) = DEV C C Now let's get on with the spawn C CALL GETTSK(GTSKBF) ! Get UIC from task parameters GROUP = TSKUIC(2) MEMBER = TSKUIC(1) CALL SPAWN(ICP,GROUP,MEMBER,5,,STATS,,CMDLIN,CMDLEN,,,IDSW) CALL STOPFR(5) C C Check on success C FAIL = .FALSE. IF (IAND(STATS(1),1).EQ.1) THEN WRITE (CRT,10) DEV 10 FORMAT (1X,A,' is logged in') FAIL = .TRUE. ENDIF IF (IAND(STATS(1),2).EQ.2) THEN WRITE (CRT,11) DEV 11 FORMAT (1X,A,' is attached to another task') FAIL = .TRUE. ENDIF IF (IAND(STATS(1),4).EQ.4) THEN WRITE (CRT,12) DEV 12 FORMAT (1X,A,' is allocated to another terminal') FAIL = .TRUE. ENDIF IF (IAND(STATS(1),"10).EQ."10) GO TO 5 IF (FAIL) GO TO 99 WRITE (CRT,13) DEV 13 FORMAT (1X,A,' is available for use') CALL ASSIGN(REM,DEV,N) CALL GETADR(DPB,SETTT) DPB(2) = 2 SETTT(1) = "4 ! Check the transmitter speed SETTT(2) = "0 CALL WTQIO("2560,REM,1,,ISB,DPB) INDEX = SETTT(2) BAUD = SPEED(INDEX) 15 WRITE (CRT,16) BAUD 16 FORMAT ('$Enter the baud rate [',I5,'] : ') READ (CRT,17,END=99,ERR=15) NBAUD 17 FORMAT (I5) IF (NBAUD.GT.0) THEN DO 20 I=1,20 IF (NBAUD.EQ.SPEED(I)) THEN INDEX = I GO TO 25 ENDIF 20 CONTINUE WRITE (CRT,21) NBAUD 21 FORMAT (1X,I5,' is an illegal baud rate') GO TO 15 ENDIF 25 SETTT(1) = "4 ! Set transmitter speed SETTT(2) = INDEX ! to value specified SETTT(3) = "3 ! Set receiver speed to same SETTT(4) = INDEX SETTT(5) = "10 ! Set terminal type to UNKNOWN SETTT(6) = 0 ! to cancel VT100 SCREEN program DPB(2) = 6 CALL WTQIO("2440,REM,1,,ISB,DPB) 99 END