C***************************************************************************** C C Test of Multiterminal Syslib Routines. C Importable Functions C C----------------------------------------------------------------------------- C C Program : MultiTerminal/ MTerm.For C Author : John Malcolmson C Date : July 1986 C Language : Fortran 77 C Note : Uses subroutines imported from both syslib and Tstlib C libraries. C C***************************************************************************** C***************************************************************************** C C List of functions: C MtAtch, MtDtch, MtGet, MtSet, MtStat C C***************************************************************************** C--------------------------------- MtAtch ------------------------------------ Function MtMtAtch Integer*4 MtMtAtch Integer*2 res, maxlun, job Integer*2 Stts8(8) Call CenterString( '--- Testing MTATCH ---\' ) Call WriteLn Call CenterString( 'Attaches a specified terminal\') Call WriteLn MtMtAtch = 0 Call MtStat( Stts8 ) maxlun = Stts8(3) DO 100 i = 0, maxlun res = MtAtch( i,,job ) IF (res .eq. 0) THEN Call CenterString('Attached to unit:\') Call Write2Int( i,2 ) Call WriteLn END IF IF ((res .lt. 0).or.(res .gt. 6)) THEN Call RsltFail( 1 ) Call Write2Int( 0, 10 ) Call Write2Int( res, 10 ) Call WriteLn MtMtAtch = MtMtAtch + 2**1 END IF IF (Res .eq. 6) THEN Call MtFail( 'addrl', 2 ) Call Write2Int( 0, 10 ) Call Write2Int( res, 10 ) Call WriteLn MtMtAtch = MtmtAtch + 2**2 Goto 200 END IF 100 Continue 200 Call TestFail( MtMtAtch ) Call CenterString( '--- Testing MTATCH completed ---\' ) Call WriteLn Call WriteLn END C----------------------------------------------------------------------------- C---------------------------------- MTDTCH ----------------------------------- Function MtMtDtch Integer*4 MtMtDtch Integer*2 res, maxlun, job Integer*2 Stts8(8) Call CenterString( '--- Testing MTDTCH ---\' ) Call WriteLn Call CenterString( 'Detaches a specified terminal\') Call WriteLn MtMtDtch = 0 Call MtStat( Stts8 ) maxlun = Stts8(3) DO 100 i = 0, maxlun res = MtDtch( i,,job ) IF (res .eq. 0) THEN Call CenterString('Detached from unit:\') Call Write2Int( i,2 ) Call WriteLn END IF IF ((res .lt. 0).or.(res .gt. 6)) THEN Call RsltFail( 1 ) Call Write2Int( 0, 10 ) Call Write2Int( res, 10 ) Call WriteLn MtMtdtch = MtMtdtch + 2**1 END IF IF (Res .eq. 6) THEN Call MtFail( 'addrl', 2 ) Call Write2Int( 0, 10 ) Call Write2Int( res, 10 ) Call WriteLn MtMtdtch = Mtmtdtch + 2**2 Goto 200 END IF 100 Continue 200 Call TestFail( MtMtDtch ) Call CenterString( '--- Testing MTDTCH completed ---\' ) Call WriteLn Call WriteLn END C----------------------------------------------------------------------------- C----------------------------------- MTGET ----------------------------------- Function MtMtGet Integer*4 MtMtGet Byte Stts4(8) Integer*2 Stts8(8) Integer*2 res, i, jobnum Call CenterString( '--- Testing MTGET ---\' ) Call WriteLn Call CenterString( 'Gets status info about a terminal\') Call WriteLn MtMtGet = 0 Call MtStat( Stts8 ) IF ( Stts8(3) .eq. 16 ) Goto 100 i = Stts8(3) + 1 10 IF (i .gt. 16) Goto 100 Res = MtGet( i, Stts4 ) IF (res .ne. 3 ) THEN Call MtFail( 'invunt', 1 ) Call Write2Int( 3, 10 ) Call Write2Int( res, 10 ) Call WriteLn MtMtGet = MtMtGet + 2**1 Goto 100 END IF i = i + 1 Goto 10 100 DO 110 i = 0, Stts8(3) Res = MtGet( i, Stts4, jobnum ) IF ((res .gt. 4).or.(res .lt. 0)) THEN Call RsltFail( 2 ) Call Write2Int( 0, 10 ) Call Write2Int( res, 10 ) Call WriteLn MtMtGet = MtMtGet + 2**2 Goto 200 END IF Call WriteLn Call CenterString( 'Logical Terminal: \' ) Call Write2Int( i, 2 ) Call WriteLn IF (res .eq. 0) THEN Call CenterString('Terminal is attached to this job\') ELSE IF (res .eq. 2) THEN Call CenterString('Terminal is not attached\') ELSE IF (res .eq. 4) THEN Call CenterString('Terminal attached to: \') Call Write2Int( Jobnum, 2 ) ELSE IF (res .eq. 3) THEN Call CenterString('Terminal Does not exist\') Call WriteLn Goto 110 ELSE Call MtFail( 'trmres', 3 ) Call Write2Int( 0, 10 ) Call Write2Int( res, 10 ) Call WriteLn MtMtget = Mtmtget + 2**3 Goto 200 END IF Call WriteLn Call WriteString( ' \', 30, 2 ) Call Wbinary( Stts4(1), 16 ) Call WriteChar( 'B' ) Call WriteLn Call WriteString( ' \', 30, 2 ) Call Wbinary( Stts4(3), 16 ) Call WriteChar( 'B' ) Call WriteLn Call WriteString( ' \', 32, 1 ) Call Write1Int( Stts4(5), 15 ) Call WriteChar( 'A' ) Call WriteLn Call WriteString( ' \', 32, 1 ) Call Write1Int( Stts4(6), 15 ) Call WriteChar( 'D' ) Call WriteLn Call WriteString( ' \', 32, 1 ) Call Write1Int( Stts4(7), 15 ) Call WriteChar( 'D' ) Call WriteLn Call WriteString( ' \', 38, 2 ) Call WBinary( Stts4(8), 8 ) Call WriteChar( 'B' ) Call WriteLn 110 Continue 200 Call TestFail( MtMtGet ) Call CenterString( '--- Testing MTGET completed ---\' ) Call WriteLn Call WriteLn END C----------------------------------------------------------------------------- C----------------------------------- MTSET ----------------------------------- Function MtMtSet Integer*4 MtMtSet Byte Stts4(8), zero(8) Integer*2 Stts8(8) Integer*2 res, i, j Call CenterString( '--- Testing MTSET ---\' ) Call WriteLn Call CenterString( 'Sets status info for a terminal\') Call WriteLn MtMtSet = 0 Call MtStat( Stts8 ) DO 100 i = 0, Stts8(3) res = MtAtch( i ) IF (res .ne. 0) Goto 100 res = MtGet( i, Stts4 ) IF (res .eq. 0) THEN Call WriteLn Call CenterString( ' MtSet on unit: \ ' ) Call Write2Int( i,2 ) Call WriteLn Do 10 j = 1, 8 zero(j) = 0 10 Continue res = MtSet( i, zero ) IF (res .ne. 0) THEN Call MtSet( i, Stts4 ) Call MtFail('getset',1) Call Write2Int( 0, 10 ) Call Write2Int( res, 10 ) Call WriteLn MtMtset = JIOR(mtmtset, 2**1) END IF res = MtGet( i, zero ) IF (res .ne. 0) THEN Call MtSet( i, Stts4 ) Call MtFail('setget',2) Call Write2Int( 0, 10 ) Call Write2Int( res, 10 ) Call WriteLn MtMtset = JIOR(mtmtset, 2**2) END IF DO 20 j = 1, 4 IF (zero(j) .ne. 0) THEN Call MtSet( i, Stts4 ) Call MtFail('setval',3) Call Write1Int( 0, 10 ) Call Write1Int( zero(j), 10 ) Call WriteLn MtMtset = JIOR(Mtmtset,2**3) END IF 20 Continue res = MtSet( i, Stts4 ) ELSE IF (res .ge. 5) THEN Call Irsltfail( 4 ) Call Write2Int( i, 6 ) Call Write2Int( 0, 10 ) Call Write2Int( res, 10 ) Call WriteLn Mtmtset = JIOR(mtmtset,2**4) END IF END IF IF ((res .lt. 0).or.(res .gt. 6)) THEN Call RsltFail( 5 ) Call Write2Int( 0, 10 ) Call Write2Int( res, 10 ) Call WriteLn MtMtset = JIOR(MtMtset,2**5) END IF IF (Res .eq. 6) THEN Call MtFail( 'addrl', 6 ) Call Write2Int( 0, 10 ) Call Write2Int( res, 10 ) Call WriteLn MtMtSet = JIOR(MtMtSet,2**6) Goto 200 END IF 100 Continue 200 Call TestFail( MtMtSet ) Call CenterString( '--- Testing MTSET completed ---\' ) Call WriteLn Call WriteLn END C----------------------------------------------------------------------------- C----------------------------------- MTSTAT ---------------------------------- Function MtMtStat Integer*4 MtMtStat Integer*2 stts(8), res Call CenterString( '--- Testing MTSTAT ---\' ) Call WriteLn Call CenterString( 'Return the Multiterm system status\') Call WriteLn MtMtStat = 0 res = MtStat( stts ) IF (res .ne. 0) THEN Call RsltFail( 1 ) Call Write2Int( 0, 10 ) Call Write2Int( res, 10 ) Call WriteLn MtMtStat = MtMtstat + 2**1 END IF Call CenterString('The status block is as follows: \' ) Call WriteLn Call WriteString( ' \', 30, 1 ) Call Writ2Oct( stts(1), 15 ) Call WriteChar( 'O' ) Call WriteLn Call WriteString( ' \', 30, 1 ) Call Writ2Oct( stts(2), 15 ) Call WriteChar( 'O' ) Call WriteLn Call WriteString( ' \', 30, 1 ) Call Write2Int( stts(3), 15 ) Call WriteChar( 'D' ) Call WriteLn Call WriteString( ' \', 30, 1 ) Call Write2Int( stts(4), 15 ) Call WriteChar( 'D' ) Call WriteLn Call CenterString( 'Reserved\' ) Call WriteLn Call CenterString( 'Reserved\' ) Call WriteLn Call CenterString( 'Reserved\' ) Call WriteLn Call CenterString( 'Reserved\' ) Call WriteLn Call TestFail( MtMtStat ) Call CenterString( '--- Testing MtStat completed ---\' ) Call WriteLn Call WriteLn END C-----------------------------------------------------------------------------