FTN4 PROGRAM TGPI1(5), 92903-16375 REV.1913 790209 0945 C C SOURCE 92903-18375 C C C C ************************************************************** C * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. 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 C C PRGMR : JEAN CHARLES MIARD (HPG) C C C*********************************************************************** C* * C* THIS IS A SEGMENT OF THE TGP PROGRAM USED * C* TO INTERFACE TGP WITH THE IMAGE DATA BASE . DIFFERENT TASKS * C* ARE PERFORMED BY TGP11 ACCORDING TO INDIC VALUE : * C* * C* IF : INDIC = -1 : REQUEST FROM TGP1 TO CLOSE THE DATA BASE . * C* THEN TGP IS FINISHED . * C* INDIC = -2 : REQUEST FROM TGP14 TO PRINT THE LISTING OF * C* THE IMAGE OPERATIONS DEFINED FOR THE CURRENT * C* TRANSACTION SPEC. * C* INDIC = -3 : REQUEST FROM TGP7 TO PROCESS THE IMAGE ADD * C* STORAGE OF THE STORAGE STATE . * C* INDIC = 0 : REQUEST FROM TGP1 TO OPEN THE DATA BASE * C* DECLARED BY THE USER IN SCREEN 4 . * C* * C* * C*********************************************************************** C C C DECLARATIONS COMMON VARIABLES *********** C COMMON ILU,ISCRN,IQST,ISKIP,INDIC COMMON IFORM(766) COMMON JFORM(1400) COMMON MFORM(16) COMMON LFORM(39) COMMON ITT COMMON IKEY(26,3) COMMON IUMAX,IMMAX COMMON IMODB COMMON ILITE(15) COMMON IMAI(45,5) COMMON IMFLG,IMAS,IMDT,IMKY COMMON KFORM(2704) COMMON ILIBR(61) COMMON NIMAG C C************ LOCAL ARRAYS************* C DIMENSION ILIST(46),ILEVL(3),INAM(3),IER(3),ISTAT(2) DIMENSION JIM(13),JSTAR(13),JDEL(15),JUP(3),JAD(3),JITM(4) DIMENSION IMSTA(6),IBUF(12),JNAM(3),KBUF(5),IER1(3) DIMENSION LNAM(3),KNAM(3),JOP(17) C LOGICAL ISBIT,INUM C C *********** DATA ASSIGNEMENTS ***************** C DATA ILIST/2H ,2HTG,2HP ,2H ,2HTG,2HP0,2H ,2HTG,2HP1,2H C,2HTG,2HP2,2H ,2HTG,2HP3,2H ,2HTG,2HP4,2H ,2HTG,2HP5,2H C,2HTG,2HP6,2H ,2HTG,2HP7,2H ,2HTG,2HP8,2H ,2HTG,2HP9,2H C,2HTG,2HP1,2H0 ,2HTG,2HP1,2H1 ,2HTG,2HP1,2H2 ,2HTG,2HP1,2H3 / DATA ILEVL/2H ,2H ,2H / DATA INAM/2HTG,2HP1,2H / DATA JNAM/2HTG,2HP7,2H / DATA LNAM/2HTG,2HP6,2H / DATA KNAM/2HTG,2HPI,2H4 / DATA JIM/2HIM,2HAG,2HE ,2HOP,2HER,2HAT,2HIO,2HNS,2H D,2HEF, C2HIN,2HED,2H :/ DATA JSTAR/2H**,2H**,2H**,2H**,2H**,2H**,2H**,2H**,2H**,2H**, C2H**,2H**,2H**/ DATA JDEL/2H- ,2HDE,2HLE,2HTE,2H E,2HNT,2HRY,2H I,2HN ,2HDA, C2HTA,2H S,2HET,2H :,2H / DATA JUP/2HUP,2HDA,2HTE/ DATA JAD/2H A,2HDD,2H / DATA JITM/2H I,2HTE,2HMS,2H :/ DATA JOP/2H ,2H* ,2HER,2HRO,2HR ,2HIN,2H O,2HPE,2HNI,2HNG,2H T, C2HHE,2H D,2HAT,2HA ,2HBA,2HSE/ C C********************************************************************* C C GO TO PERFORM THE REQUIRED PROCESSING C C********************************************************************* C IF(INDIC.EQ.-1) GO TO 900 IF(INDIC.EQ.-2) GO TO 6000 IF(INDIC.EQ.-3) GO TO 500 C C********************************************************************* C C INDIC = 0 : REQUEST TO OPEN THE DATA BASE C C********************************************************************* C C ISKIP CONTAINS THE DATA BASE SECURITY CODE C 100 ILIST(1)=15 CALL DBINT(IFORM(38),ISKIP,ILIST,ISTAT) IF(ISTAT.NE.0) GO TO 3000 CALL DBOPN(IFORM(38),ILEVL,ISKIP,1,ISTAT) IF(ISTAT.NE.0) GO TO 3000 C C THE DATA BASE IS SUCCESSFULY OPENED RETURN TO TGP1 SEGMENT C INDIC=2 135 CALL EXEC(8,INAM) C C*********************************************************************** C C INDIC = -3 ADD STORAGE PROCESSING C C*********************************************************************** C C 500 INDIC=0 N3=ISKIP DO 510 I=1,6 510 IMSTA(I)=KFORM(1059+I) C C*********************************************************************** C C ADD IN MASTER DATA SETS C C*********************************************************************** C C I IS POINTER IN IMSTA C IX IS SECOND WORD OF BUFFER ADD C IY IS # OF ITEMS PER ADD OPERATION C DO 530 I=1,IMSTA CALL DBINF(2HS ,2,IMSTA(I+1),IBUF) IF(IBUF.NE.0) GO TO 3000 IF(IGET1(IBUF,10).NE.1HM) GO TO 530 C C A BUFFER FOR AN ADD IN A MASTER DATA SET MUST BE CREATED C C STORAGE CODE,IMAGE STORAGE CODE,FOT FLAG,AND DATA SET TO ADD C C KFORM(N3)=52001B KFORM(N3)=IOR(KFORM(N3),IMSTA(I+1)*16) IX=N3+1 N3=N3+2 C C GET THE KEY ITEM OF THIS MASTER DATA SET C STORED IN IBUF(3) C IKFLG IS FLAG SET IF KEY ITEM IS FOUND IN THE FORM C CALL DBINF(2HI ,3,IMSTA(I+1),IBUF) IF(IBUF.NE.0) GO TO 3000 C C NOW SEARCH ITEMS FOR THIS ADD C IY=0 IKFLG=0 DO 520 J=1,45 C C K IS DATA SET TO WHICH ITEM BELONG C K=IAND(IMAI(J,3),377B) IF((K.NE.IMSTA(I+1)).OR.(IAND(IMAI(J,2),7).NE.2)) GO TO 520 C C K IS ITEM # C IY=IY+1 K=IAND(IMAI(J,1),377B) IF(K.EQ.IBUF(3)) IKFLG=1 KFORM(N3)=IALF2((IAND(IMAI(J,4),377B)/2)) KFORM(N3)=IOR(KFORM(N3),K) N3=N3+1 KFORM(N3)=IMAI(J,5) N3=N3+1 520 CONTINUE C C IF IKFLG=0 KEY ITEM NOT DEFINED FOR THIS ADD C IF(IKFLG.NE.0) GO TO 525 ITN=IBUF(3) GO TO 2900 525 KFORM(IX)=IY 530 CONTINUE C C********************************************************************* C C NOW PROCESS ADD IN DETAIL DATA SETS C C********************************************************************* C C C I IS POINTER IN IMSTA C IX POINTS TO SECOND WORD OF BUFFER C IY IS # OF ITEMS PER ADD OPERATION C C C FIRST ISOLATE DETAIL SET TO ADD C DO 800 I=1,IMSTA CALL DBINF(2HS ,2,IMSTA(I+1),IBUF) IF(IBUF.NE.0) GO TO 3000 IF(IGET1(IBUF,10).NE.1HD) GO TO 800 C C A DATA SET IS ISOLATED C FOT IS INITIALIZED TO 1 C FOT=1 C C INCLUDE STORAGE CODE,IMAGE STORAGE CODE C DATA SET # TO ADD C KFORM(N3)=50001B KFORM(N3)=IOR(KFORM(N3),IMSTA(I+1)*16) IX=N3+1 N3=N3+2 IY=0 C C SEARCH KEY ITEMS # OF THIS DATA SET C STORE THEM IN IBUF C CALL DBINF(2HI ,3,IMSTA(I+1),IBUF) IF(IBUF.NE.0) GO TO 3000 C C SEARCH KEY ITEMS IN FORM C J IS POINTER IN IBUF C ALL KEYS MUST BE DEFINED IN THE FORM BY THEIR NAME IN THE C DATA SET TO ADD OR WITH A LINKED NAME AND THEY MUST BE ASSOCIATED C IN PRIORITY ORDER WITH - AN ADD OPERATION C - A DISPLAY OPERATION C DO 600 J=1,IBUF(2) IOP=2 540 ITN=IBUF(J+2) K=ILIN(IMAI,ITN,IOP) IF(K.NE.-1) GO TO 560 CALL ITEQU(ITN,KBUF) DO 550 L=1,5 IF(KBUF(L).EQ.0) GO TO 550 K=ILIN(IMAI,KBUF(L),IOP) IF(K.NE.-1) GO TO 560 550 CONTINUE IF(IOP.EQ.2) GO TO 551 IF(IOP.EQ.5) GO TO 552 IF(IOP.EQ.0) GO TO 553 GO TO 2900 551 IOP=5 GO TO 540 552 IOP=0 GO TO 540 C-----DO IT FOR CHECK EXISTENCE. 553 IOP=3 GO TO 540 C C A KEY ITEM FOR ADD IS FOUND ON LINE K OF IMAI C 560 IF((K.GT.2*IUMAX).AND.(K.LT.41)) IFOT=0 IY=IY+1 KFORM(N3)=IALF2((IAND(IMAI(K,4),377B)/2)) KFORM(N3)=IOR(KFORM(N3),ITN) N3=N3+1 KFORM(N3)=IMAI(K,5) N3=N3+1 600 CONTINUE C C NOW INCLUDE NON KEY ITEMS FOR THIS ADD C DO 620 J=1,45 K=IAND(IMAI(J,3),377B) IOP=IAND(IMAI(J,2),7) IF((K.NE.IMSTA(I+1)).OR.(IOP.NE.2)) GO TO 620 IF(ISBIT(IMAI(J,2),3)) GO TO 620 IF((J.GT.2*IUMAX).AND.(J.LT.41)) IFOT=0 IY=IY+1 KFORM(N3)=IALF2((IAND(IMAI(J,4),377B)/2)) KFORM(N3)=IOR(KFORM(N3),IAND(IMAI(J,1),377B)) N3=N3+1 KFORM(N3)=IMAI(J,5) N3=N3+1 620 CONTINUE KFORM(IX)=IY KFORM(IX-1)=IOR(KFORM(IX-1),IFOT*2000B) 800 CONTINUE C C RETURN TO TGP7 C INDIC=2 ISKIP=N3 CALL EXEC(8,JNAM) C C************************************************************************ C C ERROR PROCESSING C C*********************************************************************** C C MISSING KEY ITEM FOR ADD C 2900 CALL DBINF(2HI ,2,ITN,IBUF) IF(IBUF.NE.0) GO TO 3000 CALL MOVEW(IBUF(2),IER,3) CALL DBINF(2HS ,2,IMSTA(I+1),IBUF) IF(IBUF.NE.0) GO TO 3000 CALL MOVEW(IBUF(2),IER1,3) CALL MES11(5,1,IER,IER1) INDIC=0 CALL EXEC(8,LNAM) C C ERROR PROCESSING DATA BASE OPEN C 3000 IMES=0 INDIC=0 NOF=6 IF(ISTAT.EQ.6) IMES=2 IF(ISTAT.EQ.129) IMES=3 IF(ISTAT.NE.117) GO TO 3010 NOF=7 IMES=1 C C A SPECIAL MESSAGE EXISTS C 3010 IF(IMES.EQ.0) GO TO 3020 CALL MES11(IMES,NOF) GO TO 135 C C A GENERAL PRINT MESSAGE FOR IMAGE MUST BE PRINTED C IER CONTAINS THE ASCII CODE OF THE ERROR # C 3020 CALL CNUMD(ISTAT,IER) CALL MES11(4,NOF,IER) GO TO 135 C 5000 STOP 5000 C C*********************************************************************** C C INDIC = -2 PRINT LISTING OF IMAGE OPERATIONS : C C*********************************************************************** C C IF MODE OF OPERATION IS L OPEN THE DATA BASE C 6000 IF(IGET1(IFORM,13).NE.1HL) GO TO 6005 IF(INUM(IFORM,81,5,N)) GO TO 5000 ILIST(1)=15 CALL DBINT(IFORM(38),N,ILIST,ISTAT) IF(ISTAT.NE.0) GO TO 6004 CALL DBOPN(IFORM(38),ILEVL,N,1,ISTAT) IF(ISTAT.EQ.0) GO TO 6005 6004 CALL EXEC(2,ISKIP,JOP,17) GO TO 6100 C C PRINT HEADER C C 6005 CALL BLANC(ILIST,15) CALL EXEC(3,1100B+ISKIP,1) CALL MOVEW(JIM,ILIST(3),13) CALL EXEC(2,ISKIP,ILIST,15) CALL BLANC(ILIST,15) CALL MOVEW(JSTAR,ILIST(3),13) CALL EXEC(2,ISKIP,ILIST,15) CALL EXEC(3,1100B+ISKIP,1) C C FIND STORAGE STATE C I=38 DO 6010 K=1,100 I=KFORM(I) IF(IAND(KFORM(I+1),140B).EQ.140B) GO TO 6020 6010 CONTINUE STOP 6010 C C FIND IMAGE STORAGE C 6020 L=KFORM(I) I=I+2 DO 6030 J=1,4 M=IAND(KFORM(I),170000B)/4096 IF(M.EQ.5) GO TO 6040 IF(M.LT.4) I=I+6 IF(M.EQ.4) I=I+4 6030 CONTINUE STOP 6030 C C PRINT INFORMATION C C OPERATION AND DATA SET C 6040 N=IAND(KFORM(I),17B) IF(N.EQ.0) GO TO 6100 M=IAND(KFORM(I),1760B)/16 CALL BLANC(ILIST,23) CALL MOVEW(JDEL,ILIST(6),15) IF(N.EQ.1) CALL MOVEW(JAD,ILIST(7),3) IF(N.EQ.2) CALL MOVEW(JUP,ILIST(7),3) CALL DBINF(2HS ,2,M,IBUF) IF(IBUF.NE.0) STOP 6041 CALL MOVEW(IBUF(2),ILIST(21),3) CALL EXEC(2,ISKIP,ILIST,23) IF(N.EQ.3) GO TO 6100 C C ITEMS TO BE ADDED OR UPDATED C CALL EXEC(3,1100B+ISKIP,1) CALL BLANC(ILIST,23) CALL MOVEW(JITM,ILIST(16),4) I=I+1 IF(I.NE.L) GO TO 6050 L=KFORM(I) I=I+2 6050 M=KFORM(I) DO 6080 K=1,M I=I+1 IF(I.NE.L) GO TO 6070 L=KFORM(I) I=I+2 6070 N=IAND(KFORM(I),377B) CALL DBINF(2HI ,2,N,IBUF) IF(IBUF.NE.0) STOP 6070 CALL MOVEW(IBUF(2),ILIST(21),3) CALL EXEC(2,ISKIP,ILIST,23) CALL BLANC(ILIST,23) I=I+1 IF(I.NE.L) GO TO 6080 L=KFORM(I) I=I+2 6080 CONTINUE C C NEXT IMAGE OPERATION C I=I+1 IF(I.NE.L) GO TO 6090 L=KFORM(I) I=I+2 6090 CALL EXEC(3,1100B+ISKIP,1) GO TO 6040 C C RETURN TO TGP14 C 6100 INDIC=-1 CALL EXEC(8,KNAM) C C************************************************************************ C C INDIC = -1 CLOSE DATA BASE C C*********************************************************************** C 900 CALL DBCLS(0,ISTAT) 999 END END$