PROGRAM TPT C C THIS PROGRAM WILL BE AN INTERFACE BETWEEN C THE USER'S TERMINAL AND A GIVEN TAPE DRIVE C THUS WITH MCR COMMANDS CERTAIN FUNCTIONS C WILL BE PERFORMED. C C CALLING SEQUENCE: C C >TPT MMN:/XX[:IIII] C C WHERE: C N IS THE DRIVE NUMBER (0,1) C XX IS A COMMAND: C RW REWIND C RO REWIND AND TURN OFF LINE C WF WRITE EOF C SB SPACE BLOCKS C SF SPACE FILES C SC SET TAPE CHARICTERISTICS C GC GET TAPE CHARICTERISTICS C [:IIII] IS CERTAIN REQUIRED PARAMETERS: C NUMBER OF BLOCKS TO SPACE(-/+) C NUMBER OF FILES TO SPACE (-/+) C TAPE CHARICTERISTICS CODE(BASE 10) C C WRITTEN BY JEFF HAMILTON 8/27/80 C E-SYSTEMS, INC. C GREENVILLE DIVISION C P.O.BOX 1056 C M.S.54112 C GREENVILLE, TEXAS 75401 C (214)454-4175 C C THIS PROGRAM USES TWO LUN C 1-MAGTAPE LUN C 2-ERROR REPORTING TO TERMINAL C- INTEGER DEVNUM,ISTAT(2),CHAR,ERR BYTE BUF(80) EQUIVALENCE (CHAR,ISTAT(2)) EQUIVALENCE (ERR,ISTAT(1)) DATA LUN/1/DEVNUM/2/IFUNC/0/ C C START OF MAIN CODE C CALL GETMCR(BUF,IDW) CALL ASNLUN(2,'TI',0) DO 10,I=1,IDW IF(BUF(I).EQ.'M')GO TO 20 10 CONTINUE 15 WRITE(2,4000) CALL EXIT 20 IF(BUF(I+1).EQ.'M' 1.AND.BUF(I+2).GE.'0' 2.AND.BUF(I+2).LE.'1')DECODE(1,1000,BUF(I+2))DEVNUM IF(DEVNUM.EQ.2)GO TO 15 CALL ASNLUN(LUN,'MM',DEVNUM) DO 30,J=I,IDW IF(BUF(J).EQ.'/')GO TO 40 30 CONTINUE 35 WRITE(2,4001) CALL EXIT 40 K=J+1 L=J+2 IF(L.GT.IDW)GO TO 35 IF(BUF(K).EQ.'R'.AND.BUF(L).EQ.'W')IFUNC=1 IF(BUF(K).EQ.'R'.AND.BUF(L).EQ.'O')IFUNC=2 IF(BUF(K).EQ.'W'.AND.BUF(L).EQ.'F')IFUNC=3 IF(BUF(K).EQ.'S'.AND.BUF(L).EQ.'B')IFUNC=4 IF(BUF(K).EQ.'S'.AND.BUF(L).EQ.'F')IFUNC=5 IF(BUF(K).EQ.'S'.AND.BUF(L).EQ.'C')IFUNC=6 IF(BUF(K).EQ.'G'.AND.BUF(L).EQ.'C')IFUNC=7 IF(IFUNC.EQ.0)GO TO 35 GO TO (50,60,70,80,80,80,90)IFUNC C C REWIND C 50 CALL TAPEIO(3,LUN,ISTAT,,) IF(ERR.EQ.1)CALL EXIT GO TO 200 C C REWIND/TURN OFF LINE C 60 CALL TAPEIO(10,LUN,ISTAT,,) IF(ERR.EQ.1)CALL EXIT GO TO 200 C C WRITE END-OF-FILE C 70 CALL TAPEIO(5,LUN,ISTAT,,) IF(ERR.EQ.1)CALL EXIT GO TO 200 80 IF(BUF(L+1).EQ.':')GO TO 85 84 WRITE(2,4002) CALL EXIT 85 IF(L+2.GT.IDW)GO TO 84 DECODE(IDW-(L+1),1001,BUF(L+2))IPARM GO TO (100,110,120)IFUNC-3 C C GET TAPE CHARICTERISTICS C 90 CALL TAPEIO(7,LUN,ISTAT,,) GO TO 300 C C SPACE BLOCKS C 100 CALL TAPEIO(8,LUN,ISTAT,IPARM,) IF(ERR.EQ.1)CALL EXIT GO TO 200 C C SPACE FILES C 110 IF(IPARM.LT.0)IPARM=IPARM-1 CALL TAPEIO(9,LUN,ISTAT,IPARM,) IF(IPARM.LT.0)CALL TAPEIO(9,LUN,ISTAT,1,) IF(ERR.EQ.1)CALL EXIT GO TO 200 C C SET TAPE CHARICTERISTICS C 120 CALL TAPEIO(3,LUN,ISTAT,,) IF(ERR.NE.1)GO TO 200 CALL TAPEIO(6,LUN,ISTAT,IPARM,) IF(ERR.EQ.1)CALL EXIT C C ERROR PROCESSING SECTION C 200 WRITE(2,2017)ERR IF(ERR.EQ.0)WRITE(2,2000) IF(ERR.EQ.-15)WRITE(2,2001) IF(ERR.EQ.-56)WRITE(2,2002) IF(ERR.EQ.-19)WRITE(2,2003) IF(ERR.EQ.-8)WRITE(2,2004) IF(ERR.EQ.-13)WRITE(2,2005) IF(ERR.EQ.-7)WRITE(2,2006) IF(ERR.EQ.-3)WRITE(2,2007) IF(ERR.EQ.-10)WRITE(2,2008) IF(ERR.EQ.-62)WRITE(2,2009) IF(ERR.EQ.-11)WRITE(2,2010) IF(ERR.EQ.-59)WRITE(2,2011) IF(ERR.EQ.-2)WRITE(2,2012) IF(ERR.EQ.-65)WRITE(2,2013) IF(ERR.EQ.-6)WRITE(2,2014) IF(ERR.EQ.-4)WRITE(2,2015) IF(ERR.EQ.-12)WRITE(2,2016) CALL EXIT C C GET TAPE CHARICTERISTICS DECODING SECTION C 300 WRITE(2,3015) IF((CHAR.AND."1).EQ."1)WRITE(2,3000)CHAR IF((CHAR.AND."2).EQ."2)WRITE(2,3000)CHAR IF((CHAR.AND."4).EQ."4)WRITE(2,3000)CHAR IF((CHAR.AND."10).NE."10)WRITE(2,3002) IF((CHAR.AND."10).EQ."10)WRITE(2,3003) IF((CHAR.AND."20).EQ."20)WRITE(2,3004) IF((CHAR.AND."40).EQ."40)WRITE(2,3005) IF((CHAR.AND."100).EQ."100)WRITE(2,3006) IF((CHAR.AND."200).EQ."200)WRITE(2,3007) IF((CHAR.AND."400).EQ."400)WRITE(2,3008) IF((CHAR.AND."1000).EQ."1000)WRITE(2,3009) IF((CHAR.AND."2000).EQ."2000)WRITE(2,3010) IF((CHAR.AND."4000).NE."4000)WRITE(2,3016) IF((CHAR.AND."4000).EQ."4000)WRITE(2,3011) IF((CHAR.AND."10000).EQ."10000)WRITE(2,3000)CHAR IF((CHAR.AND."20000).EQ."20000)WRITE(2,3013) IF((CHAR.AND."40000).EQ."40000)WRITE(2,3014) IF((CHAR.AND."100000).EQ."100000)WRITE(2,3000)CHAR CALL EXIT 1000 FORMAT(I1) 1001 FORMAT(I) 2000 FORMAT(1X,'TPT--ERROR-REQUEST PENDING!') 2001 FORMAT(1X,'TPT--ERROR-OPERATION ABORTED!') 2002 FORMAT(1X,'TPT--ERROR-BAD BLOCK!') 2003 FORMAT(1X,'TPT--ERROR-BYTE ALIGNED!') 2004 FORMAT(1X,'TPT--ERROR-DEVICE ALREADY ATTACHED!') 2005 FORMAT(1X,'TPT--ERROR-DATA OVERRUN!') 2006 FORMAT(1X,'TPT--ERROR-DEVICE NOT ATTACHED!') 2007 FORMAT(1X,'TPT--ERROR-DEVICE NOT READY!') 2008 FORMAT(1X,'TPT--ERROR-EOF!') 2009 FORMAT(1X,'TPT--ERROR-EOT!') 2010 FORMAT(1X,'TPT--ERROR-EOV!') 2011 FORMAT(1X,'TPT--ERROR-FATAL HARDWARE!') 2012 FORMAT(1X,'TPT--ERROR-ILLEGAL FUNCTION!') 2013 FORMAT(1X,'TPT--ERROR-DEVICE OFFLINE!') 2014 FORMAT(1X,'TPT--ERROR-ILLEGAL ADDRESS SPACE!') 2015 FORMAT(1X,'TPT--ERROR-CRC OR CHECKSUM!') 2016 FORMAT(1X,'TPT--ERROR-DEVICE WRITE LOCKED!') 2017 FORMAT(1X,'TPT--ERROR DETECTED: ',O6) 3000 FORMAT(1X,' DRIVE ERROR: ',O5) 3002 FORMAT(1X,' ODD PARITY') 3003 FORMAT(1X,' EVEN PARITY') 3004 FORMAT(1X,' PAST EOT') 3005 FORMAT(1X,' LAST COMMAND FOUND EOF') 3006 FORMAT(1X,' WRITING TO UNIT IS PROHIBITED') 3007 FORMAT(1X,' NO INTERRECORD GAP') 3008 FORMAT(1X,' SELECT ERROR') 3009 FORMAT(1X,' UNIT REWINDING') 3010 FORMAT(1X,' UNIT PHYSICALLY WRITE LOCKED') 3011 FORMAT(1X,' 1600 bpi DENSITY') 3013 FORMAT(1X,' AT BOT') 3014 FORMAT(1X,' AT EOV') 3015 FORMAT(1X,'TPT--DRIVE CHARICTERISTICS') 3016 FORMAT(1X,' 800 bpi DENSITY') 4000 FORMAT(1X,'TPT--NO DRIVE FOUND') 4001 FORMAT(1X,'TPT--NO SWITCH FOUND') 4002 FORMAT(1X,'TPT--NO PARAMETER FOUND') END