FTN4 PROGRAM QY(5,90),92069-16060 REV.1940 790523 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-18062 C RELOC: 92069-16060 C C C************************************************************ C C C QUERY SUBSYSTEM MAIN MODULE C COMMAND INTERPRETER C C LOGICAL IFTTY INTEGER SPACE INTEGER JSEC(4) INTEGER EDITOR(3) INTEGER DUMMY(2) INTEGER CMDTBL(89) INTEGER INVAL(9) INTEGER NDEF(6) INTEGER ISTAT(10) INTEGER MODE(4) INTEGER LEVEL(5) INTEGER IERR1(17) INTEGER IERR2(9) INTEGER IERR3(15) INTEGER IERR4(11) INTEGER IERR5(7) INTEGER IERR6(8),IERR7(9),IERR8(9) INTEGER MSG(11) INTEGER YES(2),NO INTEGER NEXT(3) INTEGER IWAIT(25) 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 $$$$$$$$$$$$$$$$$$$$$ C DATA SPACE/2H / DATA INVAL(1)/2H I/ DATA INVAL(2)/2HNV/ DATA INVAL(3)/2HAL/ DATA INVAL(4)/2HID/ DATA INVAL(5)/2H C/ DATA INVAL(6)/2HOM/ DATA INVAL(7)/2HMA/ DATA INVAL(8)/2HND/ DATA INVAL(9)/6412B/ C DATA NDEF/2HNO,2HT ,2HDE,2HFI,2HNE,2HD / DATA CMDTBL/2HFI,2HND,2H ,2H ,2H ,2H , & 2HRE,2HPO,2HRT,2H ,2H ,2H , & 2HUP,2HDA,2HTE,2H ,2H ,2H , & 2HCR,2HEA,2HTE,2H ,2H ,2H , & 2HDE,2HST,2HRO,2HY ,2H ,2H , & 2HDI,2HSP,2HLA,2HY ,2H ,2H , & 2HFO,2HRM,2H ,2H ,2H ,2H , & 2HEX,2HIT,2H ,2H ,2H ,2H , & 2HHE,2HLP,2H ,2H ,2H ,2H , & 2HLI,2HST,2H ,2H ,2H ,2H , & 2HEX,2HEC,2HUT,2HE ,2H ,2H , & 2HSE,2HLE,2HCT,2H-F,2HIL,2HE , & 2HDA,2HTA,2H-B,2HAS,2HE ,2H , & 2HXE,2HQ ,2H ,2H ,2H ,2H / DATA MODE/2HMO,2HDE,2H =,2H _/ DATA LEVEL/2HLE,2HVE,2HL ,2H= ,2H_ / DATA IMODE/0/ DATA IERR1/2H ,2HIL,2HLE,2HGA,2HL ,2HSE,2HLE,2HCT,2H F,2HIL, 12HE ,2HSI,2HZE,2H O,2HR ,2HTY,2HPE/ DATA IERR2/2H I,2HNV,2HAL,2HID,2H R,2HEQ,2HUE,2HST,2H / DATA IERR3/2H E,2HRR,2HOR,2H R,2HEL,2HEA,2HSI,2HNG, & 2H S,2HYS,2HTE,2HM ,2HTR,2HAC,2HKS/ DATA IERR4/2H I,2HLL,2HEG,2HAL,2H L,2HOC,2HK ,2HRE,2HQU, & 2HES,2HT / DATA IERR5/2H S,2HYN,2HTA,2HX ,2HER,2HRO,2HR / DATA IERR6/2H L,2HIS,2HT ,2HFI,2HLE,2H E,2HRR,2HOR/ DATA IERR7/2H S,2HEL,2HEC,2HT ,2HFI,2HLE, 2H E,2HRR,2HOR/ DATA IERR8/2H B,2HAT,2HCH,2H F,2HIL,2HE ,2HER,2HRO,2HR / DATA MSG/2H W,2HAI,2HTI,2HNG,2H O,2HN ,2HDA,2HTA,2H B, & 2HAS,2HE / DATA NEXT/2HNE,2HXT,2H_ / DATA YES/2HYE,2HS / DATA NO /2HNO/ DATA IWAIT/2H D,2HAT,2HA ,2HBA,2HSE,2H I,2HS ,2HLO,2HCK,2HED, 12H O,2HR ,2HOP,2HEN,2H, ,2HDO,2H Y,2HOU,2H W,2HAN,2HT ,2HTO, 22H W,2HAI,2HT?/ DATA EDITOR/2HED,2HIT,2HR / C C C C C C C C C C C BEGIN C C CLOSE THE PROCEDURE FILE C CALL ECLOS(IDCB(2)) C C CLEAR THE PROCEDURE FLAG C IPFLAG = 0 C C CLEAR THE ECHO PROCEDURE FLAG C IOFLAG = 0 C C UNLOCK THE LIST LU C CALL LUREQ(RMOTE,0,ILP,IERR) C C RELEASE ALL SYSTEM TRACKS C CALL EXEC(5+100000B,-1) GOTO 7100 C C GET THE NEXT INPUT C 20 CONTINUE IF(.NOT. BATCH) CALL QRIO(2,INLU,NEXT,-5) C C DECODE COMMAND C WHEN THE INPUT IS A SEMICOLN ONLY IT IS ASSUMED THAT C A BATCH FILE JUST COMPLETED AND THE NEXT COMMAND IS C GOTTEN C CALL INPUT CALL LSCAN (IB,I,J,K) IF( K .EQ. 5) GOTO 20 CALL SFILL(IMA,1,12,40B) CALL SMOVE(IB,I,J,IMA,1) C C LOOK THE COMMAND UP IN THE TABLE C N = 0 DO 30 I2 = 1,14*12,12 N = N + 1 IF (JSCOM(CMDTBL,I2,I2+11,IMA ,1,IERR ) .EQ. 0) GOTO 40 30 CONTINUE C C INVALID COMMAND C CALL ERIO(2,ITTY,INVAL,9) GOTO 20 C C JUMP TABLE C C FIND ,REPORT,UPDATE,CREATE,DESTROY 40 GOTO(50, 100, 150, 200, 250, C DISPLAY,FORM ,EXIT ,HELP & 300, 350, 400, 450, C LIST ,EXECUTE,SELECT ,DATA-BASE,XEQ & 500, 500, 500, 500, 500) N C C C C C C C COMMAND PROCESSORS C C C C C C C C FIND C 50 SNAM(2) = 2H00 GOTO 800 C C REPORT C 100 SNAM(2) = 2H02 GOTO 800 C C UPDATE C 150 SNAM(2) = 2H07 GOTO 800 C C CREATE PROCEDURE C 200 SNAM(2) = 2H09 GOTO 800 C C DESTROY PROCEDURE C 250 SNAM(2) = 2H11 GOTO 800 C C DISPLAY C 300 SNAM(2) = 2H10 GOTO 460 C C FORM C 350 SNAM(2) = 2H08 GOTO 460 C C EXIT C 400 SNAM(2) = 2H16 GOTO 800 C C HELP C 450 SNAM(2) = 2H13 C C LOCK THE LIST DEVICE C 460 CONTINUE CALL LUREQ(RMOTE,1,ILP,IERR) IF(IERR .NE. 0) GOTO 7080 GOTO 800 C C LIST, EXECUTE, SELECT-FILE, DATA-BASE C 500 CONTINUE N = N-9 CALL LSCAN(IB,I,J,K) IF(K .NE. 6 .AND. N .EQ. 2) GOTO 550 IF(K .NE. 6) GOTO 7010 C LIST ,EXECUTE,SELECT ,DATA-BASE , XEQ GOTO(520, 550, 600, 650, 700) N C C C LIST C 520 CONTINUE IF(ILP .LT. 0) CALL ECLOS(ILP(2)) CALL LSCAN(IB,I,J,K) CALL GTPRM(IMA,IB,J,I,ILP,ILP(2),.TRUE.,IERR) IF(IERR .LT. 0 .OR. ILP .EQ. 0) GOTO 7020 IF(ILP .GT.0) ILP = ILP+600B GOTO 20 C C EXECUTE C 550 CONTINUE S = K SNAM(2) = 2H24 GOTO 800 C C SELECT-FILE= C 600 CONTINUE CALL SFILL(SELECT,1,12,40B) CALL LSCAN(IB,I,J,K) IF(K .NE. 2) GOTO 7010 C C GET THE FILE NAME C CALL NAMR(IMA,IB,J,I) IF(IAND(IMA(4),3B) .NE. 3) GOTO 7010 CALL OPEN(JDCB,IERR,IMA,0,IMA(5),IMA(6) ) IF(IERR .GE. 0) GOTO 610 IF(IERR .NE. -6) GOTO 7040 IF(IMA(8) .EQ. 0) IMA(8) = 6 CALL ECREA(JDCB,IERR,IMA,DBLEI(IMA(8)),1,IMA(5),IMA(6)) IF(IERR .LT. 0) GOTO 7040 C C VERIFY TYPE C 610 CONTINUE CALL ELOCF(JDCB,ISTAT,DUMMY,DUMMY, & DUMMY,JSEC,DUMMY,JTYP,JREC) IF((DCO(JSEC,DBLEI(6)).LT. 0) .OR. (JTYP .NE. 1) ) GOTO 7035 CALL SMOVE(IMA,1,12,SELECT,1) GOTO 20 C C DATA-BASE= C 650 CONTINUE CALL LSCAN(IB,I,J,K) IF(K .NE. 2) GOTO 7010 C C CLOSE THE DATA BASE IF NECESSARY C IF(DBNAM(2) .EQ. SPACE) GOTO 660 CALL DBCLS(DBNAM,DUMMY,1,ISTAT) IF(ISTAT .NE. 0) GOTO 7070 C C PUT NAME IN BUFFER C 660 CONTINUE CALL SFILL(DBNAM,1,20,40B) CALL SMOVE(IB,I,J,DBNAM,3) C C VERIFY SEMICOLN C CALL LSCAN(IB,I,J,K) IF(K .NE. 5) GOTO 7050 C C GET LEVEL WORD, SUPRESSING THE ECHO WHEN INTERACTIVE C IF(BATCH) GOTO 665 CALL QRIO(2,INLU,LEVEL,-9) INLU = INLU - 400B 665 CALL LSCAN(IB,I,J,K) IF(.NOT. BATCH) INLU = INLU + 400B C C SEE IF A ";" WAS ENTERED C CALL SFILL(DBLEV,1,6,40B) IF(K .EQ. 5) GOTO 667 IF(J-I+1 .GT. 6) GOTO 7050 CALL SMOVE(IB,I,J,DBLEV,1) C C VERIFY SEMICOMMA C CALL LSCAN(IB,I,J,K) IF(K .NE. 5) GOTO 7050 C C GET THE MODE C 667 CONTINUE IF(.NOT. BATCH) CALL QRIO(2,INLU,MODE,4) CALL LSCAN(IB,I,J,K) IF(I .NE. J) GOTO 7050 CALL SGET(IB,I,IMODE) IMODE = IMODE - 60B IF( (IMODE .LT. 1) .OR. ( IMODE .GT. 8) ) GOTO 7050 C C VERIFY SEMICOMMA C CALL LSCAN(IB,I,J,K) IF(K .NE. 5) GOTO 7050 C C OPEN THE DATA BASE C CALL DBOPN(DBNAM,DBLEV,IMODE,ISTAT) IF(ISTAT .EQ. 0) GOTO 690 IF(ISTAT .NE. 129) GOTO 7070 C C DATA BASE IS LOCKED C 670 CONTINUE IF(BATCH) GOTO 680 CALL QRIO(2,INLU,IWAIT,25) CALL INPUT CALL LSCAN(IB,I,J,K) IF(JSCOM(IB,I,I+1,YES,1,IERR) .EQ. 0) GOTO 680 IF(JSCOM(IB,I,I+1,NO,1,IERR) .EQ. 0) GOTO 7055 GOTO 670 C C WAIT A WHILE C 680 CONTINUE CALL QRIO(2,ITTY,MSG,11) 685 CONTINUE CALL EXEC(12,0,2,0,-10) CALL DBOPN(DBNAM,DBLEV,IMODE,ISTAT) IF(ISTAT .EQ. 129) GOTO 685 IF(ISTAT .NE. 0) GOTO 7070 C C DONE WITH THE OPEN, SAVE THE LEVEL WORD NUMBER C 690 CONTINUE DBLEV = ISTAT(2) GOTO 20 C C C C C C C C C C C XEQ C 700 CONTINUE IF(XEQ .NE. 0) GOTO 710 C C SAVE THE INPUT DCB C CALL SMOVE(INLU,1,290,XEQ,1) XQBCH = BATCH GOTO 720 C C CLOSE THE DATA BASE C 710 CONTINUE CALL ECLOS(INLU(2)) C C OPEN THE FILE C 720 CONTINUE CALL LSCAN(IB,I,J,K) IF(K .NE. 2) GOTO 7010 CALL GTPRM(IMA,IB,J,I,INLU,INLU(2),.FALSE.,IERR) IF(IERR .LT. 0) GOTO 7090 C C ONLY ALLOW FILES AS XEQ INPUT C IF(INLU .GT. -1) GOTO 7090 C C SET THE BATCH FLAG C BATCH = .TRUE. GOTO 20 C C C C C C C C C C C C C C LOAD AND EXECUTE A SEGEMENT C 800 CONTINUE CALL LOAD(SNAM) C C SYNATAX ERROR C 7010 CONTINUE IP = 1 7014 IF(IEND .LE. 72) GOTO 7017 CALL QRIO(2,ITTY,IB(IP),-72) IEND = IEND - 72 IP = IP + 36 GOTO 7014 C C WRITE LAST LINE OUT C 7017 CALL QRIO(2,ITTY,IB(IP),-IEND) C C CALL SFILL(IMA,1,72,40B) IF(I .GT. 72) I = I - I/72*72 CALL SPUT(IMA,I,136B) CALL QRIO(2,ITTY,IMA,-I) CALL ERIO(2,ITTY,IERR5,7 ) GOTO 20 C C BAD LIST FILE C 7020 CONTINUE CALL ERIO(2,ITTY,IERR6,8) GOTO 7095 C C IVALID REQUEST C 7030 CONTINUE CALL ERIO(2,ITTY,IERR2,9) GOTO 20 C C BAD SELECT FILE C 7035 CONTINUE CALL ERIO(2,ITTY,IERR1,17) SELECT=2H GOTO 20 C C SELECT FILE ERROR C 7040 CONTINUE CALL ERIO(2,ITTY,IERR7,9) SELECT = 2H GOTO 7095 C C ILLEGAL LEVEL WORD,OR MODE WORD C OUTPUT "INVALID REQUEST" C 7050 CONTINUE CALL ERIO(2,ITTY,IERR2,9) 7055 DBNAM = 2H DBNAM(2) = 2H GOTO 20 C C DBMS - ERROR C 7070 CONTINUE DBNAM = 2H DBNAM(2) = 2H QSERR = ISTAT SNAM(2) = 2H23 GOTO 800 C C ILLEGAL LOCK C 7080 CONTINUE CALL ERIO(2,ITTY,IERR4,11) GOTO 20 C C ILLEGAL XEQ FILE C 7090 CONTINUE CALL ERIO(2,ITTY,IERR8,9 ) CALL SMOVE(XEQ,1,290,INLU,1) XEQ = 0 BATCH = XQBCH C C FMP ERROR C 7095 CONTINUE QSERR = IERR SNAM(2) = 2H23 GOTO 800 C C OUTPUT "ERROR RELEASING SYSTEM TRACKS" C 7100 CONTINUE CALL ERIO(2,ITTY,IERR3,15) GOTO 20 END