FTN4 PROGRAM TGPI2(5), 92080-1X377 REV.2026 800416 C C SOURCE 92080-18377 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* THIS IS A SEGMENT OF THE TGP PROGRAM USED TO INTERFACE * C* TGP WITH IMAGE . ACCORDING TO INDIC VALUE DIFFERENT TASKS ARE * C* EXECUTED : * C* * C* IF : INDIC = 0 : COMPILATION OF IMAGE INFORMATION AT THE * C* QUESTION LEVEL . THE RESULTS OF THIS COMPIL- * C* ATION ARE STORED IN THE IMAI BUFFER . * C* REQUEST FROM TGP9 FOR ADD,FIND,UPDATE AND * C* CHECK EXISTENCE OPERATIONS . * C* REQUEST FROM TGP6 FOR DELETE AND DISPLAY * C* OPERATIONS . * C* INDIC = -8 : PROCESS SYSTEM ADDED INFORMATION . REQUEST * C* FROM TGP6 . * C* * C********************************************************************* C C C DECLARATIONS COMMON VARIABLES ************** C COMMON ILU,ISCRN,IQST,ISKIP,INDIC COMMON IFORM(780) COMMON JFORM(1700) COMMON MFORM(28) COMMON LFORM(42) 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(2844) COMMON ILIBR(67) COMMON NIMAG COMMON IBASE(10) C C LOCAL VARIABLES ************* C DIMENSION ITGP9(3),IBUF(128),ID(3),IER(3),ITGP6(3),KBUF(16) DIMENSION IADBF(10),ISTAT(10),NAMSET(6),IBUF1(128),IBUF2(128) C LOGICAL ISBIT,ISSPA C DATA ITGP9/2HTG,2HP9,2H / DATA ITGP6/2HTG,2HP6,2H / DATA JBYTES/170/ DATA JWORDS/85/ C C*********************************************************************** C C GO TO THE REQUIRED PORTION OF TGP12 C C********************************************************************** C C IF(INDIC.EQ.-1) PAUSE 1203 IF(INDIC.EQ.-6) PAUSE 1204 IF(INDIC.EQ.0) GO TO 95 C C********************************************************************* C C INDIC = -8 SYSTEM ADDED INFORMATION PROCESSING C C********************************************************************* C C IX IS ITEM COUNT 1/5 C IX=1 INDIC=2 80 IF(IGET1(MFORM,IX).NE.1HX) GO TO 3030 IF(.NOT.(ISSPA(MFORM,6*IX-1,6))) GO TO 3030 N=40+IX C "MOVE DATA ITEM NAME TO ID" CALL MOVCA(MFORM,6*IX-1,ID,1,6) C "MOVE DATA SET NAME TO NAMSET" CALL MOVCA(MFORM,33+6*(IX-1),NAMSET,1,6) IMAI(N,2)=1 IF(IGET1(MFORM,28+IX).EQ.1HA) IMAI(N,2)=2 GO TO 110 C C************************************************************************ C C INDIC = 0 IMAGE COMPILATION AT THE QUESTION LEVEL C C************************************************************************ C C C C N IS A POINTER TO THE CURRENT LINE IN IMAI C C ID CONTAINS THE ITEM NAME C NAMSET CONTAINS THE DATA SET NAME C C C************************************************************************ C C GET ITEM AND DATA SET CHARACTERISTICS AND STORE IN IMAI BUFFER C C************************************************************************ C C 95 IF(ISCRN.EQ.16) GO TO 100 N=2*IQST-1 CALL MOVCA(JFORM,(27+(IQST-1)*JBYTES),ID,1,6) C "MOVE DATA SET NAME TO NAMSET" CALL MOVCA(JFORM,147+(IQST-1)*JBYTES,NAMSET,1,6) IF(ISCRN.EQ.15) GO TO 120 GO TO 110 100 CALL MOVCA(JFORM,(134+(IQST-1)*JBYTES),ID,1,6) N=2*IQST C "MOVE DATA SET NAME TO NAMSET" CALL MOVCA(JFORM,140+(IQST-1)*JBYTES,NAMSET,1,6) C C NOW FILL IN THE IMAI LINE C C C GET DATA ITEM NUMBER C 110 CALL DBINF(IBASE,ID,101,ISTAT,IBUF) D NERROR=1 D CALL EDUMP(NERROR,N,IMAI(N,1),ID,ISTAT,IBUF) IF(ISTAT.NE.0) GO TO 3000 IMAI(N,1)=IBUF(1) IF(IMAI(N,1).LT.0) IMAI(N,1)=-1*IMAI(N,1) C C CHECK TO MAKE SURE THAT THE ITEM BEING DEALT WITH IS NOT A C SORT ITEM TRYING TO BE UPDATED. C C IF(IAND(IMAI(N,2),7B).NE.1) GO TO 11816 CALL DBINF(IBASE,NAMSET,301,ISTAT,IBUF) IF(ISTAT.NE.0) GO TO 3000 DO 11805 IZ=1,IBUF(1) IF(IBUF(3*IZ+1).EQ.0) GO TO 11805 IF(IBUF(3*IZ+1).NE.IAND(IMAI(N,1),377B)) GO TO 11805 IMES=41 GO TO 3010 11805 CONTINUE C C GET DATA ITEM CHARACTERISTICS C 11816 CALL DBINF(IBASE,IMAI(N,1),102,ISTAT,IBUF) D NERROR=2 IF(ISTAT.NE.0) GO TO 3000 C "CALCULATE ITEM'S LENGTH" ITMLTH=IBUF(10)*IBUF(11) C "PUT DATA TYPE INTO LOWER BYTE" IBUF(9)=IALF2(IBUF(9)) D CALL EDUMP(NERROR,ITMLTH,IMAI(N,1),ID,ISTAT,IBUF) C C CHECK THAT ITEM TO STORE TRANSACTION HEADER INFO (DATE,TIME..) C HAS A GOOD FORMAT. ITEM MUST BE ASCII & AS FOLLOWS: C IX LENGTH MUST BE(BYTES) C ---- -------------- C 1 TRANS ID 4 C 2 TERM # 2 C 3 DATE 6 C 4 TIME 4 C IF(ISCRN.NE.17) GO TO 118 IF(IGET1(IBUF,18).NE.2HX ) GO TO 115 IF((IX.EQ.1).AND.(ITMLTH.NE.4)) GO TO 115 IF((IX.EQ.2).AND.(ITMLTH.NE.2)) GO TO 115 IF((IX.EQ.3).AND.(ITMLTH.NE.6)) GO TO 115 IF((IX.EQ.4).AND.(ITMLTH.NE.4)) GO TO 115 GO TO 118 C 115 IMES=24 C "ITEM DOES NOT HAVE THE REQD TYPE OR LENGTH TO STORE THIS INFORMATION" GO TO 3010 C C C DATA SET TO WHICH ITEM BELONG C 118 CALL DBINF(IBASE,NAMSET,201,ISTAT,IBUF) IF(ISTAT.NE.0) GO TO 3000 IF(IBUF(1).LT.0) IBUF(1)=-1*IBUF(1) IMAI(N,3)=IBUF(1) NDS=IBUF(1) C C SEARCH TYPE (KEY OR NON-KEY ITEM) C C -USE ITEQU TO DETERMINE IF THIS ITEM IS A KEY OR NON-KEY ITMX=IAND(IMAI(N,1),377B) IDSX=IAND(IMAI(N,3),377B) CALL ITEQU(ITMX,IDSX,KBUF,IBASE) IF(KBUF(1).EQ.-1) GO TO 1181 C -THE ITEM IS A KEY, SET BIT 3 OF IMAI(N,2) CALL SETBT(IMAI(N,2),3,1) C C C ITEM TYPE C 1181 IBUF(9)=IAND(IBUF(9),377B) C -INTEGER? YES. IF(IBUF(9).EQ.111B) IMAI(N,2)=IOR(IMAI(N,2),10000B) C -REAL? YES. IF(IBUF(9).EQ.122B) IMAI(N,2)=IOR(IMAI(N,2),20000B) C C ITEM LENGTH C IMAI(N,4)=IBUF(10)*IBUF(11) C C-----DETERMINE ITEM'S OFFSET IN ITS DS RECORD. C CALL DBINF(IBASE,NDS,104,ISTAT,IBUF1) IF(ISTAT.NE.0) GO TO 3000 D NERROR=31 D CALL EDUMP(NERROR,NDS,N,IBUF,ISTAT,IBUF1) IOFT=1 C -ONLY 1 ITEM IN THE RECORD? IF(IBUF1(1).EQ.1) GO TO 1185 C -NO. C DO 1183 I=1,IBUF1(1) IF(IBUF1(I+1).LT.0) IBUF1(I+1)=-1*IBUF1(I+1) C -FIND THE CORRECT DATA ITEM YET? IF(IBUF1(I+1).EQ.IMAI(N,1)) GO TO 1185 C -NO. CALL DBINF(IBASE,IBUF1(I+1),102,ISTAT,IBUF2) IF(ISTAT.NE.0) GO TO 3000 D NERROR=41 D CALL EDUMP(NERROR,IBUF1(I+1),IMAI(N,1),IBUF1,ISTAT,IBUF2) C -CALCULATE ITEM'S LENGTH. ITMLTH=IBUF2(10)*IBUF2(11) C -IF ITEM IS STRING, CONVERT ITS LENGTH TO WORDS. IF(IGET1(IBUF2,17).EQ.1HX) ITMLTH=(ITMLTH+1)/2 IOFT=IOFT+ITMLTH 1183 CONTINUE C C -ERROR. ITEM NOT FOUND. D NERROR=1183 D CALL EDUMP(NERROR,ITMLTH,IOFT,IBUF2,ISTAT,IBUF2) IMES=40 GO TO 3010 C C -STORE THE ITEM'S OFFSET IN THE DS RECORD. 1185 IMAI(N,4)=IOR(IMAI(N,4),IOFT*256) C C GET DATA SET CHARACTERISTICS C CALL DBINF(IBASE,NDS,202,ISTAT,IBUF) D NERROR=4 D CALL EDUMP(NERROR,NDS,IMAI(N,4),IBUF2,ISTAT,IBUF) IF(ISTAT.NE.0) GO TO 3000 C -ERR IF DS ACCESSED > 512 WORDS/RECORD (TMS LIMITATION). IF(IBUF(10).LE.512) GO TO 1187 IMES=39 GO TO 3010 C C DATA SET TYPE C C "PUT DS TYPE INTO LOWER BYTE" 1187 IBUF(9)=IALF2(IBUF(9)) IBUF(9)=IAND(IBUF(9),377B) C -CK FOR MANUAL MASTER. IF(IBUF(9).EQ.115B) IMAI(N,2)=IOR(IMAI(N,2),100000B) C -CK FOR AUTOMATIC MASTER. IF(IBUF(9).EQ.101B) IMAI(N,2)=IOR(IMAI(N,2),140000B) C C-----ERROR IF ADD TO A DETAIL DS WHICH DOESN'T HAVE ANY KEYS. C C -DETAIL? IF(IBUF(9).NE.104B) GO TO 119 C -YES. ADD OPERATION? IF(IAND(IMAI(N,2),7).NE.2) GO TO 119 C -YES. GET DATA SET INFO & TEST FOR NO KEYS. CALL DBINF(IBASE,NDS,301,ISTAT,IADBF) D NERROR=5 IF(ISTAT.NE.0) GO TO 3000 IF(IADBF(1).NE.0) GO TO 119 C -ERR "THIS ITEM'S DS HAS NO KEYS--ADD CANNOT BE DONE" IMES=38 GO TO 3010 C C-----SCR 16? 119 IF(ISCRN.NE.17) GO TO 120 C-----YES. ADD? IF(IAND(IMAI(N,2),7).NE.2) GO TO 120 C-----YES. ADD TO MSTR? IF(.NOT.ISBIT(IMAI(N,2),15)) GO TO 120 C-----YES. IS THE ITEM A KEY IN THE MSTR? IF(.NOT.ISBIT(IMAI(N,2),4)) GO TO 120 C -YES. PRINT ERR MSG, "ITEM CANNOT BE KEY IN A MASTER". IMES=33 GO TO 3010 C C C IMAGE FUNCTION ? C C 120 I=IAND(IMAI(N,2),7B) C C********************************************************************* C C IMAGE OPERATION IS ADD FIRST CHECKS ONLY C C********************************************************************** C C CHECK IF OPERATION IS ADD THAT NO EQUIVALENT KEY ITEM HAS BEEN C DEFINED FOR AN OTHER ADD C IF(I.NE.2) GO TO 180 IF(.NOT.(ISBIT(IMAI(N,2),3))) GO TO 160 ITMX=IAND(IMAI(N,1),377B) IDSX=IAND(IMAI(N,3),377B) CALL ITEQU(ITMX,IDSX,KBUF,IBASE) IF(KBUF.NE.-1) GO TO 130 CALL DBCLS(IBASE,ID,1,ISTAT) IF(ISTAT.NE.0) STOP 431 STOP 432 130 DO 140 J=1,16 IF(KBUF(J).EQ.0) GO TO 140 C -THE FOLLOWING ROUTINE SEARCHES THRU IMAI TO LOOK FOR AN ADD ON C -THE ITEM IN KBUF(J). IF A MATCH IS ALSO FOUND ON DS#--ERROR. DO 135 L=1,45,2 C -DON'T CK THE ARG ITEM THAT IS BEING PROCESSED. IF(N.EQ.L) GO TO 135 C -ADD? IF(IAND(IMAI(L,2),7).NE.2) GO TO 135 C -YES. SAME DATA ITEM? IF(IMAI(L,1).NE.IAND(KBUF(J),377B)) GO TO 135 C -YES. SAME DATA SET? K=IALF2(KBUF(J)) K=IAND(K,377B) C GO TO ERROR IF SAME DATA SET. IF(K.EQ.IAND(IMAI(L,3),377B)) GO TO 150 C C--- THE FOLLOWING WAS ADDED TO ALLOW ADDS TO VARIOUS C SETS OF ITEMS THAT ARE COMMON. NORMAL OPERATIONS C DO NOT ALLOW EXPLICIT ADDS OF EQUIVALENT ITEMS- C THEY ARE IMPLICITLY ADDED IF OTHER ITEMS OF A SET C ARE ADDED. C C IF(K.NE.IAND(IMAI(L,3),377B)) GO TO 135 C CALL DBINF(IBASE,K,104,ISTAT,IBUF) C IF(ISTAT.NE.0) GO TO 3000 C IHOLD=IBUF(1) C CALL DBINF(IBASE,K,301,ISTAT,IBUF) C IF(ISTAT.NE.0) GO TO 3000 C IF(IHOLD.EQ.IBUF(1)) GO TO 135 C GO TO 150 C 135 CONTINUE 140 CONTINUE GO TO 160 150 K=IAND(KBUF(J),377B) CALL DBINF(IBASE,K,102,ISTAT,IBUF) D NERROR=6 IF(ISTAT.NE.0) GO TO 3000 CALL MOVEW(IBUF,IER,3) IMES=22 GO TO 3010 C C C BUILD BUFFER TO CONTAIN DATA SET # TO ADD C KFORM(1060) IS # OF DATA SETS C .........1......1ST DATA SET # C . . C KFORM(1076) IS 16TH DATA SET # C C CHECK THAT NO MORE THAN 5 IMAGE OPERATIONS ARE DEFINED C 160 K=IAND(IMAI(N,3),377B) IF(KFORM(1060).NE.0) GO TO 165 KFORM(1060)=1 KFORM(1061)=K GO TO 180 165 DO 170 J=1,KFORM(1060) IF(KFORM(1060+J).EQ.K) GO TO 180 170 CONTINUE J=0 IF(IAND(IMFLG,14B).NE.0) J=1 IF(J+KFORM(1060).LT.16) GO TO 175 IMES=21 GO TO 3010 175 KFORM(1060)=KFORM(1060)+1 KFORM(1060+KFORM(1060))=K C C C******************************************************************* C C DISPATCH IMAGE OPERATIONS C C******************************************************************** C 180 IF(I.EQ.3) GO TO 200 IF(I.EQ.0) GO TO 300 IF(I.EQ.2) GO TO 450 GO TO 500 C C******************************************************************** C C--IMAGE FUNCTION IS CHECK AGAINST DATA BASE (IE, CHECK EXISTENCE) C C******************************************************************** C C-----1ST TEST, CE ONLY ALLOWED IN MASTER (NOT IN DETAIL) 200 IF(ISBIT(IMAI(N,2),15)) GO TO 201 C-----"CHECK EXISTENCE ONLY ALLOWED IN MASTER DS" IMES=30 GO TO 3010 C C PREREQUISITE KEY ITEM, NO FIND OR STORAGE ON SAME DATA-SET C C-----CHECK EXISTENCE IS INCOMPATIBLE WITH FIND IN SAME DATA SET C C-----IS THERE A FIND PREVIOUSLY DEFINED? 201 IF(.NOT.ISBIT(IMFLG,1)) GO TO 204 K=-1 C-----DONE SEARCHING IMAI FOR A FIND? 202 K=K+2 IF(K.GT.N) GO TO 204 C-----FIND? IF(IMAI(K,1).EQ.0) GOTO 202 IF(IAND(IMAI(K,2),7B).NE.0) GO TO 202 C-----FOUND ONE, NOW SEE IF IT IS IN SAME DATA SET. IF(NDS.NE.IAND(IMAI(K,3),377B)) GO TO 202 C-----"CHECK EXISTENCE INCOMPATIBLE WITH FIND IN SAME DATA SET" IMES=28 GO TO 3010 C C-----CHECK EXISTENCE IS INCOMPATIBLE WITH ADD IN SAME DS. C 204 IF(.NOT.ISBIT(IMFLG,0)) GO TO 210 K=-1 206 K=K+2 C-----DONE SEARCHING IMAI FOR ADD? IF(K.GT.N) GO TO 210 C-----ADD? IF(IAND(IMAI(K,2),7B).NE.2) GO TO 206 C-----YES, NOW SEE IF CE & ADD ARE IN SAME DS. IF(NDS.NE.IAND(IMAI(K,3),377B)) GO TO 206 C-----"CHECK EXISTENCE INCOMPATIBLE WITH ADD IN SAME DS" IMES=1 GO TO 3010 C 210 IF(ISBIT(IMAI(N,2),3)) GO TO 215 IMES=2 GO TO 3010 C C CREATE IMAGE EDITS FOR CHECK AGAINST DATA BASE C C ITEM BELONGS TO A MASTER . EDIT CODE 1 C 215 IF(.NOT.(ISBIT(IMAI(N,2),15))) GO TO 220 IMAI(N,2)=IOR(IMAI(N,2),100B) GO TO 230 C C ITEM BELONGS TO A DETAIL DATA SET . CODE EDIT 4 C 220 IMAI(N,2)=IOR(IMAI(N,2),400B) IMAI(N,1)=IOR(IMAI(N,1),IMAI(N,1)*256) 230 IMAI(N,3)=IOR(IMAI(N,3),IMAI(N,3)*256) INDIC=3 C C SET CHECK FLAG C IMFLG=IOR(IMFLG,20B) GO TO 3030 C C*********************************************************************** C C IMAGE FUNCTION IS FIND C C********************************************************************** C C FIND MUST BE U QUESTION C 300 IF(IQST.LE.IUMAX) GO TO 302 IMES=5 GO TO 3010 C-----IS THERE A CHECK EXISTENCE PREVIOUSLY DEFINED? 302 IF(.NOT.ISBIT(IMFLG,4)) GO TO 305 C-----SEARCH IMAI FOR CHECK EXISTENCE. K=-1 C-----DONE SEARCHING IMAI FOR CHECK EXISTENCE? 303 K=K+2 IF(K.GT.N) GO TO 305 C-----CHECK EXISTENCE? IF(IAND(IMAI(K,2),7B).NE.3) GO TO 303 C-----FOUND ONE, NOW SEE IF IT IS IN SAME DATA SET AS THE FIND. IF(NDS.NE.IAND(IMAI(K,3),377B)) GO TO 303 C-----"FIND INCOMPATIBLE WITH CHECK EXISTENCE IN SAME DATA SET" IMES=29 GO TO 3010 C C NO DELETE,UPDATE BEFORE FIND C 305 N1=IAND(IMFLG,14B) IF(N1.EQ.0) GO TO 310 IMES=14 GO TO 3010 C C THE FOLLOWING SECTION APPLIES IF THE ITEM BELONGS TO A DETAIL D.S. C 310 IF(ISBIT(IMAI(N,2),15)) GO TO 360 C C FIRST QUESTION ASSOCIATED WITH FIND MUST BE KEY ITEM C IF((IMAS.NE.0).OR.(IMDT.NE.0)) GO TO 315 IF(ISBIT(IMAI(N,2),3)) GO TO 315 IMES=7 GO TO 3010 C C IS THERE ALREADY A FIND IN A MASTER D.S. IF YES CHECK MASTER C AND DETAIL ARE LINKED C C GET KEY ITEM# OF MASTER C 315 IF(IMAS.EQ.0) GO TO 330 C=====DO NOT ALLOW FIND IN A MASTER/DETAIL COMBINATION !!! GOTO 335 CXX "THE FOLLOWING LINES ARE DEAD CODE" CX CALL DBINF(2HI ,3,IMAS,IBUF) CX IF(IBUF.NE.0) GO TO 3000 CX CX GET LINKED DATA SET # TO MASTER CX CX CALL DBINF(2HS ,4,IBUF(3),IBUF) CX IF(IBUF.NE.0) GO TO 3000 CX CX DO 320 I=1,IBUF(2) CX IF(IBUF(2*I+1).EQ.NDS) GO TO 330 CX320 CONTINUE CX GOTO 335 C C ALREADY FIND IN DETAIL ? C IF YES CHECK ITEM BELONGS TO THAT DATA SET C 330 IF(IMDT.EQ.0) GO TO 340 IF(IMDT.EQ.NDS) GO TO 340 335 IMES=6 GO TO 3010 C 340 IMDT=NDS C C SET IMKY (KEY ITEM TO DRIVE THE FIND IN THE DETAIL D.S.) C IF(.NOT.(ISBIT(IMAI(N,2),3))) GO TO 350 IF(IMKY.EQ.0) IMKY=IAND(IMAI(N,1),377B) 350 GO TO 410 C C C THIS SECTION APPLIES TO FIND IF THE ITEM BELONGS TO A MASTER C DATA SET C C C CHECK THAT THERE IS NO FIND OPERATIONS IN OTHER MASTER DATA SETS C AND THAT ITEM IS KEY ITEM C C 360 IF(ISBIT(IMAI(N,2),3)) GO TO 370 IMES=9 GO TO 3010 370 IF(IMAS.EQ.0) GO TO 380 IMES=6 GO TO 3010 C C CHECK THAT NO FIND IN DETAIL D.S IS DEFINED C 380 IF(IMDT.EQ.0) GO TO 400 IMES=6 GO TO 3010 C 400 IMAS=NDS C C END OF FIND PROCESSING SET FIND FLAG C 410 IMFLG=IOR(IMFLG,2) INDIC=3 GO TO 3030 C C C*********************************************************************** C C IMAGE OPERATION IS ADD C C********************************************************************** C C C CHECK THAT : - NO ADD IN AUTOMATIC MASTER DATA SET C - ITEM TO ADD IN A MASTER MUST BE U QUESTION C - CHECK AGAINST DATA BASE IS NOT ON SAME DATA-SET C - NO DELETE IS DEFINED C C-----ADD INCOMPATIBLE WITH CHECK EXISTENCE IN THE SAME DATA SET C 450 K=-1 452 K=K+2 C-----DONE SEARCHING IMAI? IF(K.GT.N) GO TO 458 C-----CHECK EXISTENCE? IF(IAND(IMAI(K,2),7).NE.3) GO TO 452 C-----YES, NOW SEE IF IT IS IN SAME DATA SET. IF(IAND(IMAI(N,3),377B).NE.IAND(IMAI(K,3),377B)) GO TO 452 C-----ERR "CHECK EXISTENCE INCOMPATIBLE WITH ADD/UPDATE/DELETE IN SAME DS" IMES=1 GO TO 3010 458 IF(.NOT.(ISBIT(IMFLG,2))) GO TO 460 IMES=23 GO TO 3010 460 IF(.NOT.(ISBIT(IMAI(N,2),15))) GO TO 480 IF(.NOT.(ISBIT(IMAI(N,2),14))) GO TO 470 IMES=11 GO TO 3010 470 IF((IQST.LE.IUMAX).OR.(ISCRN.EQ.17)) GO TO 480 IMES=12 GO TO 3010 C C C C IF ITEM TO ADD BELONG TO "TRANSACTION HEADER" (ISCRN=17) CHECK : C - ITEM IS NOT KEY IN MASTER D.S. C - IF ITEM IS KEY IN DETAIL D.S. MASTER MUST BE AUTOMATIC C 480 IF(ISCRN.NE.17) GO TO 487 IF(.NOT.(ISBIT(IMAI(N,2),3))) GO TO 487 IF(.NOT.(ISBIT(IMAI(N,2),15))) GO TO 483 IMES=19 GO TO 3010 C 483 K=IAND(IMAI(N,1),377B) CALL DBINF(IBASE,K,204,ISTAT,IBUF) D NERROR=7 IF(ISTAT.NE.0) GO TO 3000 IF(IBUF(2).LT.0) IBUF(2)=-1*IBUF(2) CALL DBINF(IBASE,IBUF(2),202,ISTAT,IBUF) D NERROR=8 IF(ISTAT.NE.0) GO TO 3000 C -ERR IF DS ACCESSED > 512 WORDS/RECORD (TMS LIMITATION). IF(IBUF(10).LE.512) GO TO 485 IMES=39 GO TO 3000 C 485 IF(IGET1(IBUF,17).EQ.1HA) GO TO 487 IMES=20 GO TO 3010 C C END OF ADD PROCESSING SET ADD AND IMAGE STORAGE FLAG C 487 IMFLG=IOR(IMFLG,100001B) INDIC=3 GO TO 3030 C C*********************************************************************** C C IMAGE OPERATION IS DISPLAY,UPDATE OR DELETE (5,1,4) C C************************************************************************ C C C VERIFY FIND OR CHECK AGAINST DATA BASE IS ALREADY DEFINED C 500 IF(ISBIT(IMFLG,1)) GO TO 510 C-----DISPLAY? IF(I.EQ.5) GO TO 502 C-----"A FIND MUST HAVE BEEN PREVIOUSLY DEFINED" IMES=13 GO TO 3010 C-----FUNCTION IS DISPLAY, VERIFY THAT A CHECK EXISTENCE HAS BEEN DEFINED. 502 IF(ISBIT(IMFLG,4)) GO TO 510 C-----"A FIND OR CHECK EXISTENCE MUST HAVE PREVIOUSLY BEEN DEFINED" IMES=26 GO TO 3010 C-----IF NOT DISPLAY, GO TO DELETE/UPDATE ROUTINE. 510 IF(I.NE.5) GO TO 513 C C C C************************************************************************ C C IMAGE OPERATION IS DISPLAY C C************************************************************************ C C-----"DISPLAY FROM DETAIL DATA-SET MUST BE DURING M-QUESTION" IMES=32 IF(.NOT.ISBIT(IMAI(N,2),15) .AND. IQST.LE.IUMAX) GOTO 3010 C C-----DETERMINE IF A FIND OR CHECK EXISTENCE HAS ALREADY BEEN DEFINED C FOR THIS DATA SET, AND WHICH ONE IT IS. C IF ANOTHER DISPLAY HAS BEEN PREVIOUSLY DEFINED, THIS DISPLAY MUST C BE FROM THE SAME DATA SET. IF NOT, IT CANNOT BE DONE. C K=N KL=0 551 K=K-2 C-----DONE SEARCHING BACKWARDS FOR DISPLAY, FIND, OR CHECK EXISTENCE IN C IMAI? IF NO FIND OR CHECK EXISTENCE IS FOUND, PRINT ERROR MESSAGE. C-----"A FIND OR CHECK EXISTENCE MUST BE PREVIOUSLY DEFINED FOR THIS ITEM" IMES=26 IF(K.LT.1) GO TO 3010 C-----FAF? IF(K.NE.2*IUMAX) GO TO 555 C-----SEARCH FORWARD FOR A FIND IN A DETAIL DURING U-QUESTION C BIT 9 IN IMAI(N,2) MAY NOT BE SET YET. DO 5531 KK=1,K,2 IF(IMAI(KK,1).EQ.0) GO TO 5531 IF(IAND(IMAI(KK,2),140007B).EQ.0) GO TO 5532 5531 CONTINUE GO TO 555 5532 KL=1 IF(NDS.EQ.IAND(IMAI(KK,3),377B)) GO TO 556 C-----CHECK EXISTENCE OR FIND IN A MASTER? 555 IF(IMAI(K-1,1).EQ.0) GO TO 5555 KK=IAND(IMAI(K-1,2),7) IF(KK.EQ.3) GO TO 5553 IF(KK.NE.0) GO TO 5555 IF(.NOT.ISBIT(IMAI(K-1,2),15)) GO TO 5555 5553 KL=1 IF(NDS.EQ.IAND(IMAI(K-1,3),377B)) GO TO 556 C-----DISPLAY? 5555 IF(IMAI(K,1).EQ.0) GO TO 551 IF(IAND(IMAI(K,2),7).NE.5) GO TO 551 IF(IAND(IMAI(K,3),377B).EQ.NDS) GO TO 556 C-----NO, "DISPLAY FROM ANOTHER DATA SET ALREADY DEFINED" IMES=31 C-----IF CHECK/FIND FOUND BEFORE THE DISPLAY, PRINT C "A FIND OR CHECK EXISTENCE MUST BE PREVIOUSLY DEFINED FOR THIS ITEM" IF(KL.EQ.1) IMES=26 GO TO 3010 C C C-----THE FOLLOWING RESTRICTIONS FOR TOTAL ITEMS MUST BE CHECKED FOR: C 1. TOTAL ITEM CANNOT BE FROM A MASTER DS C 2. DELETE CANNOT BE DEFINED ON THE SAME DATA SET C 3. UPDATE CANNOT BE DEFINED ON THE SAME DATA SET C 4. MUST BE INTEGER OR REAL C-----MAKE SURE BIT 15 OF IMAI(N,5) IS CLEAR 556 CALL SETBT(IMAI(N,5),15,0) C-----IS THIS A TOTAL DISPLAY? IF(IGET1(JFORM,146+(IQST-1)*JBYTES).NE.1HX) GO TO 557 C-----THIS IS A TOTAL ITEM. IS IT FROM A MASTER DS? IF(ISBIT(IMAI(N,2),15)) GO TO 5562 C-----NO. DELETE PREVIOUSLY DEFINED? IF(ISBIT(IMFLG,2)) GO TO 5563 C-----NO. UPDATE PREVIOUSLY DEFINED? IF(ISBIT(IMFLG,3)) GO TO 5564 C-----MUST BE INTEGER OR REAL IF(IAND(IMAI(N,2),30000B).EQ.0) GO TO 5565 C-----YES. EVERYTHING OK, SET TOTAL BITS. CALL SETBT(IMFLG,6,1) CALL SETBT(IMAI(N,5),15,1) GO TO 557 C-----ERRORS IN PROCESSING TOTAL DISPLAY. C C "CANNOT TOTAL IN A MASTER DATA SET" 5562 IMES=34 GO TO 3010 C "TOTAL DISPLAY INCOMPATIBLE WITH DELETE" 5563 IMES=35 GO TO 3010 C "TOTAL DISPLAY INCOMPATIBLE WITH UPDATE" 5564 IMES=36 GO TO 3010 C "TOTALED ITEM MUST BE INTEGER OR REAL" 5565 IMES=37 GO TO 3010 C C-----EVERYTHING OK, NOW SET THE DISPLAY BIT. 557 CALL SETBT(IMFLG,5,1) INDIC=5 GO TO 3030 C C*********************************************************************** C C IMAGE OPERATION IS DELETE OR UPDATE C C********************************************************************** C C-----UPDATE INCOMPATIBLE WITH CHECK EXISTENCE IN THE SAME DS. C 513 IF(I.EQ.4) GO TO 600 IF((NDS.EQ.IMAS).OR.(NDS.EQ.IMDT)) GO TO 520 C-----"ITEM DOES NOT BELONG TO THE ENTRY ISOLATED BY A FIND" IMES=15 GO TO 3010 C C IF FIND IN MASTER AND DETAIL LINKED ITEM MUST BELONG C TO DETAIL DATA SET C 520 IF(.NOT.((NDS.EQ.IMAS).AND.(IMDT.NE.0))) GO TO 530 IMES=15 GO TO 3010 C C FOR UPDATE IF : C ITEM BELONGS TO A MASTER DATA SET IT MUST BE U QUESTION (UPDATE ONLY) C ..................DETAIL.....................M......... C 530 IF(NDS.NE.IMAS) GO TO 540 IF((IQST.LE.IUMAX).OR.(ISCRN.EQ.17)) GO TO 600 IMES=17 GO TO 3010 540 IF((IQST.GT.IUMAX).OR.(ISCRN.EQ.17)) GO TO 600 IMES=18 GO TO 3010 600 K=1 C-----DONE SEARCHING FOR UPATE? 6010 IF(K.GT.N) GO TO 6020 C-----CHECK EXISTENCE? IF(IAND(IMAI(K,2),7B).EQ.3) GO TO 6012 GO TO 6013 C-----YES, NOW SEE IF IT IS IN SAME DATA SET. 6012 IF(NDS.EQ.IAND(IMAI(K,3),377B)) GO TO 6014 6013 K=K+2 GO TO 6010 C-----ERR "CHECK EXISTENCE INCOMPATIBLE WITH UPDATE IN SAME DATA SET" 6014 IMES=1 GO TO 3010 C C-----DELETE INCOMPATIBLE WITH CHECK EXISTENCE IN SAME DATA SET. C C-----DELETE?