FTN4 SUBROUTINE INPUT,92069-16061 REV.1912 790215 C C C************************************************************* C (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. ALL RIGHTS * C RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, RE- * C PRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH- * C OUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * C************************************************************* C C C SOURCE: 92069-18098 C RELOC: 92069-16060 C C C************************************************************ C C C ABSTRACT: C C THIS MODULE GETS INPUT AND PUTS IT INTO THE BUFFER IB. C IT IS RESPONSIBLE FOR PROMPTING THE USER WITH A QUESTION MARK C WHENEVER THE INPUT IT FROM AN INTERACTIVE TERMINAL. IT KNOWS C FROM CHECKING THE REMOTE FLAG WHETHER TO MAKE AN REMOTE OR LOCAL C PROMPT. C C WHEN THIS ROUTINE ENCOUNTERS AN END-OF-FILE IN A BATCH STREAM, C IT WILL SWITCH THE INPUT FILE TO THE ORIGINAL INPUT FILE. THE C ORIGINAL INPUT FILE IS THAT LU OR FILE WHICH WAS ENTERED AS THE C FIRST PARAMETER IN THE RUN STRING. C C WHENEVER AN ERROR IS ENCOUNTERED THE MODULE WILL RETURN TO THE C COMMAND INTERPRETER. C C C C LOGICAL IFBRK INTEGER ASK(2) INTEGER IREG(2) INTEGER SCOLON INTEGER ERR1(8) INTEGER ERR2(6) INTEGER ERR3(31) INTEGER ERR6(11) C$$$$$$$$$$$$$$$$$$$ NOVEMBER 3,1978 $$$$$$$$$$$$$$$$$$$$$ INTEGER INLU,ITTY,ILP,IDCB,JDCB,XEQ INTEGER DBNAM,DBLEV,DSNAM,DINAM,SELECT,SNAM INTEGER DSNUM,DINUM,PARM,LPARM,ECHO,QSERR INTEGER IMA,IB,IBSZ,SECNO,IEND,ISCAN LOGICAL BREAK INTEGER IPFLAG,IOFLAG,RMOTE LOGICAL BATCH,XQBCH INTEGER PAGCNT,LNCNT INTEGER PAGLEN,COLLIM REAL RRCNT REAL SELT,RSEC INTEGER IPTR REAL RCOUNT INTEGER S,R3,TRKNM,IDILU INTEGER R6 REAL ATOTAL INTEGER LIST,L,T,U INTEGER LEVSTR,LEVLEN INTEGER IBUFF INTEGER SS(7,100) C COMMON INLU(145),ITTY(145),ILP(145),IDCB(145),JDCB(144),XEQ(145) COMMON DBNAM(10),DBLEV(3),DSNAM(3),DINAM(3),SELECT(6),SNAM(3) COMMON DSNUM,DINUM,PARM(40),LPARM,ECHO,QSERR COMMON IMA(37),IB(896),IBSZ,SECNO,IEND,ISCAN COMMON BREAK COMMON IPFLAG,IOFLAG,RMOTE COMMON BATCH,XQBCH COMMON PAGCNT,LNCNT COMMON PAGLEN,COLLIM COMMON RRCNT COMMON SELT(64),RSEC COMMON IPTR COMMON RCOUNT COMMON S(15,50),R3,TRKNM,IDILU COMMON R6 COMMON ATOTAL(6,5) COMMON LIST(101,6),L(7),T(5),U(7,5) COMMON LEVSTR(66,5),LEVLEN(5) COMMON IBUFF(2048) C EQUIVALENCE (S,SS) C$$$$$$$$$$$$$$$$$$$ NOVEMBER 3,1978 $$$$$$$$$$$$$$$$$$$$$ EQUIVALENCE (REG,IREG),(IREG(2),INLEN) C DATA SCOLON/73B/ DATA ASK/2H? ,2H_ / C INPUT TOO LONG DATA ERR1/2H I,2HNP,2HUT,2H T, 1 2HOO,2H L,2HON,2HG / C END OF FILE DATA ERR2/2H E,2HND,2H O,2HF ,2HFI,2HLE/ C INPUT MUST BE CONTAINED WITHIN MULTIPLE LINES OF 72 COLUMNS DATA ERR3/2H I,2HNP,2HUT,2H M,2HUS,2HT ,2HBE,2H C, & 2HON,2HTA,2HIN,2HED,2H W,2HIT,2HHI,2HN , & 2HMU,2HLT,2HIP,2HLE,2H L,2HIN,2HES,2H O,2HF ,2H 7,2H2 , & 2HCO,2HLU,2HMN,2HS / C INPUT I/O WAS ABORTED DATA ERR6/2H I,2HNP,2HUT,2H I,2H/O,2H W,2HAS,2H A,2HBO,2HRT,2HED/ C C C C C C C C C C C C C BEGIN C IEND = 1 ISCAN = 1 ICNT = 0 C C SEE IF INPUT IS FROM A PROCEDURE FILE C IF IPFLAG IS NOT EQUAL TO 0, THEN IT IS A PROCEDURE FILE C 5 CONTINUE IF(IPFLAG .NE. 0) GOTO 10 C C IF THIS IS BATCH ASSUME INPUT IS LOCAL AND NO PROMPT IS C NECESSARY. C IF(BATCH) GOTO 6 C C IF THIS IS LOCAL MAKE A LOCAL PROMPT C IF(RMOTE .NE. -1) GOTO 7 CALL QRIO(2,INLU,ASK,-3) C C GET THE LOCAL INPUT (WHETHER BATCH OR INTERACTIVE) C 6 CONTINUE REG = QRIO(1,INLU,IMA,-74) GOTO 9 C C MAKE A REMOTE CALL USING THE READ WRITE FEATURE C 7 CONTINUE CALL DEXEC(RMOTE,1+100000B,INLU+4000B,IMA,-72,ASK,-3) GOTO 7060 8 CALL ABREG(IREG,INLEN) C C C C IF END-OF-FILE C THEN IF XEQ FILE C THEN GO BACK TO ORIGINAL FILE C 9 CONTINUE IF(INLEN .GE. 0 .OR. INLU .GT. 0) GOTO 20 C C AN END OF FILE WAS FOUND ON A BATCH FILE C (THIS WAS DETERMINED BY THE FACT THE INPUT LENGTH WAS LESS THAN 0 C AND THE DCB/LU DATA STRUCTURE HAS A -1 IN THE FIRST WORD) C WHEN THE CURRENT INPUT FILE IS A SECONDARY BATCH FILE, CLOSE IT C (XEQ WILL EQUAL 0 WHEN THE CURRENT INPUT FILE IS THE PRIMARY BATCH C FILE) C PUT THE ORIGINAL INPUT FILE, WHICH IS SAVED IN THE DCB/LU STRUCTURE C CALLED XEQ, INTO THE CURRENT DCB/LU STRUCTURE, WHICH IS CALLED INLU C RESTORE THE BATCH FLAG TO THE ORIGINAL BATCH FLAG, WHICH WAS SAVED IN C XQBCH. C GO DEFAULT THE INPUT TO A SEMICOLN C IF(XEQ .EQ. 0) GOTO 7010 CALL ECLOS(INLU(2)) CALL SMOVE(XEQ,1,290,INLU,1) BATCH = XQBCH XEQ = 0 GOTO 25 C C THIS IS A PROCEDURE FILE - GET THE INPUT AND CHECK FOR EOF C 10 CONTINUE REG = QRIO(1,IDCB,IMA,-74) IF(INLEN .LT. 0) GOTO 7010 C C IS AN ECHO REQUIRED? C 20 CONTINUE IF((IOFLAG .NE. 0) .OR. (ECHO .NE. 0)) & CALL QRIO(2,ITTY,IMA,-INLEN) C C BE SURE INPUT LINE IS LEGAL C IF(INLEN .GT. 72) GOTO 7030 C C IF THIS IS A ZERO LENGTH RECORD ASSUME SEMICOLN C IF(INLEN .GT. 0) GOTO 30 25 CALL SPUT(IMA,1,SCOLON) INLEN = 1 C C CONCATENATE THE INPUT INTO THE IB BUFFER C 30 CONTINUE IF(IEND+INLEN+1 .GT. IBSZ*2) GOTO 7040 C C COUNT QUOTES C DO 40 I = 1,INLEN CALL SGET (IMA,I,ICHAR) IF(ICHAR .EQ. 42B) ICNT = ICNT + 1 40 CONTINUE ICNT = ICNT - ICNT/2*2 C C FIND LAST NON-BLANK CHARACTER C DO 50 I = INLEN,1,-1 CALL SGET(IMA,I,ICHAR) IF(ICHAR .NE. 40B) GOTO 55 50 CONTINUE C C PUT THE INPUT IN THE BUFFER C 55 CONTINUE CALL SMOVE (IMA,1,INLEN,IB,IEND) IEND = IEND+INLEN C C WHEN THE LAST CHARACTER WAS A SEMICOLN AND QUOTES ARE CLOSED C RETURN TO THE CALLER, OTHERWISE GET MORE INPUT C IF(ICNT .NE. 0) GOTO 5 IF(ICHAR .EQ. SCOLON ) GOTO 60 C C PUT A BLANK AFTER LAST CHARACTER WHEN THE LINE IS TO BE CONTINUED C CALL SPUT(IB,IEND,40B) IEND = IEND + 1 GOTO 5 C C END OF INPUT C C NOTE: CREATE PROCEDURE FILE (QY09) EXPECTS IEND TO BE SET UP C IN JUST THIS MANNER. BE SURE TO CHANGE QY09 SOMETHING C PREVENTS "END;" FROM BEING THE LAST 4 CHARACTERS OF A LINE. C C 60 CONTINUE IEND = IEND - 1 RETURN C C C C C ERROR PROCESSING C C C C OUTPUT "END OF FILE" C 7010 CALL ERIO(2,ITTY,ERR2,6) GOTO 7060 C C OUTPUT "INPUT MUST BE CONTAINED WITHIN MULTIPLE LINES C OF 72 COLUMNS C 7030 CALL QRIO(2,ITTY,IMA,-72) CALL ERIO(2,ITTY,ERR3,31) GOTO 7060 C C OUTPUT "INPUT TOO LONG" C 7040 CALL ERIO(2,ITTY,ERR1,8) GOTO 7060 C C OUTPUT "I/O WAS ABORTED" C 7050 CALL ERIO(2,ITTY,ERR6,11) C C LOAD AND EXECUTE COMMAND INTERPERTER C 7060 CONTINUE SNAM(2) = 2H CALL LOAD(SNAM) END $