FTN4 PROGRAM TGP2(5), 92903-16355 REV.1913 790125 1030 C C SOURCE 92903-18355 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 * C* ANALYZE THE ANSWERS THE USER HAS GIVEN IN THE SCREENS 6,61,62, * C* 7,8, AND 9. * C* THE ANSWERS AFTER A CHECK ARE STORED IN IFORM. * C* * C* THIS SEGMENT IS LOADED ONLY TO ANALYSE SCREEN ANSWERS * C* INDIC IS NOT USED . * C* * C* IF INDIC=-77 A HELP MESSAGE MUST BE PRINTED * C* * C* * C* WARNING !! : CARE MUST BE TAKEN * : * C* * C* PRINTED SCREEN # 8 CORRESPONDS IN THE CODE TO ISCRN=9 * C* ............... 9................................. 10 * 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 VARIABLES ******************* C DIMENSION INAM(3),JNAM(3),KNAM(3) DIMENSION JOUT(10),JK(14),KCHECK(26) C EQUIVALENCE (NOF,KFORM(531)) C LOGICAL JPAR,GETBK,OKABT,ISBIT C C C DATA VALUES : C DATA JBYTES/140/ DATA JWORDS/70/ DATA INAM/2HTG,2HP0,2H / DATA JNAM/2HTG,2HP3,2H / DATA KNAM/2HTG,2HP1 ,2H / DATA JK/2HTC,2HRC,2HSV,2HAB,2HAD,2HSU,2HMP,2HDV,2HEQ,2HPR,2HCN, C2HNX,2HDE,2HCA/ DATA KCHECK/26*0/ C C********************************************************************* C C GET USERS ANSWERS IN THE SCREEN C C********************************************************************* C IF(INDIC.EQ.-77) GO TO 3009 15 IF(ISCRN.GT.8) ITLOG=259 IF((ISCRN.LT.8).OR.(ISCRN.GE.61)) ITLOG=379 IF(ISCRN.EQ.62)ITLOG=227 IF(.NOT.(GETBK(ILU,KFORM,ITLOG))) GO TO 10 C C ERROR IN GETTING ANSWERS REPRINT SCREEN C 17 IF((ISCRN.LT.8) .OR. (ISCRN.GE.61)) CALL EXEC(8,INAM) CALL EXEC(8,JNAM) C C********************************************************************* C C GO TO ANALYSE USER ANSWERS TO SCREEN # ISCRN C C********************************************************************* C 10 CONTINUE IF(ISCRN .EQ. 61)GO TO 661 IF(ISCRN .EQ. 62)GO TO 662 I=ISCRN-6 GO TO (700,800,900,900) I C C********************************************************************* C C SCREEN # 6 AND 7 ANSWERS (SFK'S ASSIGNEMENT) C C********************************************************************* C C C ************************************************************ C * * C * IKEY IS A MATRIX DEFINING THE SFK'S IKEY(26,3) * C * * C * IKEY(I,1) IS FUNCTION # (-1 IF USER TEXT) * C * IKEY(I,2) IS KEY TERMINATOR OR NOT (1/0) * C * IKEY(I,3) IS PREFIXED FUNCTION # (-1 IF TEXT) * C * I IS KEY # * C * * C ************************************************************ C C ENTRY POINT FOR SCREENS 6,7 C C FIRST INITIALIZE IKEY C 700 DO 702 I=1,26 KCHECK(I)=0 702 IKEY(I,3)=0 IF(ISCRN.EQ.7) GO TO 705 DO 704 I=1,26 DO 704 J=1,2 704 IKEY(I,J)=0 705 CONTINUE IKL=1 IKU=10 GO TO 706 C C ENTRY POINT FOR SCREEN 61 C 661 IKL=11 IKU=20 GO TO 663 C C ENTRY POINT FOR SCREEN 62 C 662 IKL=21 IKU=26 663 DO 665 II=1,26 IF(ISCRN.NE.KCHECK(II))GO TO 665 IKEY(II,1)=0 IKEY(II,2)=0 IKEY(II,3)=0 665 CONTINUE C C NOW PROCESS USER'S ANSWERS : I IS THE LINE# IN THE TABLE SCREEN C IKMAX IS MAX # OF KEYS C 706 NOF=0 IBLANK=0 IKMAX=26 I=IKL C +++++++++++++++++++ C-----+ BEGIN MAIN LOOP + C +++++++++++++++++++ DO 756 II=IKL,IKU C C KEY NUMBER ! C NOF=NOF+1 IF(JPAR(KFORM,ITLOG,NOF,JOUT,2,IFLG,JVAL)) GO TO 3000 C C KEY# IS BLANC : OTHER FIELDS IN THE LINE MUST BE BLANK C IF(IFLG.NE.0) GO TO 708 IBL=1 IF(ISCRN.EQ.7) GO TO 713 GO TO 711 C C KEY# IS NOT BLANK CHECK : IF 1<=KEY#<=26 C IF THIS KEY# IS NOT ALREADY USED C IF PREFIX KEY IS NOT ASSIGNED TWICE C 708 IBL=0 710 IF(IFLG.NE.1) GO TO 781 IF((JVAL.LT.1).OR.(JVAL.GT.(IKMAX ))) GO TO 781 IF(ISCRN.EQ.7) GO TO 712 IF(IKEY(JVAL,1).NE.0)GO TO 782 KCHECK(JVAL)=ISCRN 711 CALL MOVCA(JOUT,1,IFORM,(87+(I-1)*33),2) GO TO 715 712 IF(JVAL.GT.IKU)GO TO 799 IF(IKEY(JVAL,3).NE.0) GO TO 782 IF(IKEY(JVAL,1).EQ.10) GO TO 783 713 CALL MOVCA(JOUT,1,IFORM,(945+(I-1)*33),2) C C GET USER TEXT C 715 NOF=NOF+1 IF(JPAR(KFORM,ITLOG,NOF,JOUT,16,IFLG,JVAL1)) GO TO 3000 IFLG1=IFLG IF((IBL.EQ.1).AND.(IFLG1.NE.0)) GO TO 778 IF(ISCRN.NE.7) CALL MOVCA(JOUT,1,IFORM,(89+(I-1)*33),16) IF(ISCRN.EQ.7) CALL MOVCA(JOUT,1,IFORM,(947+(I-1)*33),16) C C GET OPERATION # CHECK TEXT OR OPER. # ARE EXCLUSIVE BUT ONE OF C THE TWO MUST BE PRESENT C SET IKEY VALUE C 720 NOF=NOF+1 IF(JPAR(KFORM,ITLOG,NOF,JOUT,2,IFLG,JVAL1)) GO TO 3000 IFLG2=IFLG IF(IBL.NE.1) GO TO 725 IF(IFLG2.NE.0) GO TO 779 GO TO 740 725 IF((IFLG1.NE.0).AND.(IFLG2.NE.0)) GO TO 784 IF((IFLG1.EQ.0).AND.(IFLG2.EQ.0)) GO TO 785 IF(IFLG2.NE.0) GO TO 727 IF(ISCRN.NE.7) IKEY(JVAL,1)=-1 IF(ISCRN.EQ.7) IKEY(JVAL,3)=-1 GO TO 740 C C CHECK OPERATION VALID ? C - OPERATION IS ONE OF VALID MNEMONICS C - NEXT ENTRY AND IMAGE VALID ONLY WITH IMAGE C - CONTINUE VALID ONLY IF USER MODULE OR IMAGE C - ONE OPERATION CANNOT BE ASSIGNED TWICE C C OPERATION NUMBERS DEFINED : C C OPER. # MNEMONIC MEANING C C 1 *TC* TRANSACTION COMPLETE C 2 *RC* RECALL C 3 *SV* SAME VALUE C 4 *AB* ABORT/SELECT C 5 *AD* ARITH ADD C 6 *SU* ARITH SUBSTRACT C 7 *MP* ARITH MULTIPLY C 8 *DV* ARITH DIVIDE C 9 *EQ* ARITH EQUAL C 10 *PR* PREFIX C 11 *CN* CONTINUE (IMAGE OR USER MODULES ONLY) C 12 *NX* NEXT ENTRY (IMAGE ONLY) C 13 *DE* DELETE ENTRY (IMAGE ONLY) C 14 *CA* COMPLETE/ABORT C C 727 JVAL1=-1 DO 726 K=1,14 IF(JOUT.EQ.JK(K)) JVAL1=K 726 CONTINUE IF(JVAL1.EQ.-1) GO TO 786 IF((JVAL1.EQ.12).AND.(.NOT.ISBIT(ITT,1))) GO TO 787 IF((JVAL1.EQ.13).AND.(.NOT.ISBIT(ITT,1))) GO TO 787 IF((JVAL1.EQ.11).AND.(.NOT.ISBIT(ITT,0)).AND.(.NOT.ISBIT(ITT,1))) * GO TO 787 DO 735 J=1,IKMAX DO 735 K=1,3,2 IF(IKEY(J,K).EQ.JVAL1) GO TO 788 735 CONTINUE IF(ISCRN.NE.7) IKEY(JVAL,1)=JVAL1 IF(ISCRN.EQ.7) IKEY(JVAL,3)=JVAL1 C C STORE OPERATION # C 740 IF(ISCRN.NE.7) CALL MOVCA(JOUT,1,IFORM,(105+(I-1)*33),2) IF(ISCRN.EQ.7) CALL MOVCA(JOUT,1,IFORM,(963+(I-1)*33),2) C C GET TERMINATOR C NOF=NOF+1 IF(JPAR(KFORM,ITLOG,NOF,JOUT,1,IFLG,JVAL2)) GO TO 3000 IFLG3=IFLG IF((IFLG3.NE.0).AND.(JOUT(1).NE.2HX )) GO TO 791 IF((IBL.EQ.1).AND.(IFLG3.NE.0)) GO TO 796 IF(IBL.EQ.1) GO TO 750 C C CHECKS ON TERMINATOR : FUNCTION (EXCEPT PREFIX) MUST BE TERMINATOR C A PREFIXED KEY MUST HAVE THE SAME TERMINATOR C AS THE NON PREFIXED C 745 IF((IFLG2.EQ.0).OR.(JVAL1.EQ.10)) GO TO 747 C -FCN SPECIFIED, THEREFORE IT MUST BE A TERMINATOR. IF(IFLG3.EQ.0) GO TO 793 JOUT(1)=2HX 747 IF((JOUT(1).EQ.2HX ).AND.(JVAL1.EQ.10)) GO TO 790 IF(ISCRN.NE.7) GO TO 750 IF(IKEY(JVAL,1).EQ.0) GO TO 750 IF((JOUT(1).EQ.2HX ).AND.(IKEY(JVAL,2).EQ.0)) GO TO 792 IF((JOUT(1).EQ.2H ).AND.(IKEY(JVAL,2).EQ.1)) GO TO 793 750 IF(ISCRN.NE.7) CALL MOVCA(JOUT,1,IFORM,(107+(I-1)*33),1) IF(ISCRN.EQ.7) CALL MOVCA(JOUT,1,IFORM,(965+(I-1)*33),1) IF(IBL.EQ.1) GO TO 753 IF((ISCRN.NE.7).AND.(IFLG3.NE.0)) IKEY(JVAL,2)=1 IF((ISCRN.EQ.7).AND.(IKEY(JVAL,1).NE.0)) GO TO 753 IF(IFLG3.NE.0) IKEY(JVAL,2)=1 C C SFK LABEL C 753 NOF=NOF+1 IF(JPAR(KFORM,ITLOG,NOF,JOUT,12,IFLG,JVAL3)) GO TO 3000 IF((IBL.EQ.1).AND.(IFLG.NE.0)) GO TO 796 IF((IFLG2.EQ.0).OR.(IFLG.NE.0)) GO TO 754 IP=0 IF(ISCRN.EQ.7) IP=1 C C IF NO LABEL FOR A FUNCTION INSERT IT C CALL FILAB(I,IP,JVAL1,IFORM) GO TO 755 754 IF(ISCRN.NE.7) CALL MOVCA(JOUT,1,IFORM,(108+(I-1)*33),12) IF(ISCRN.EQ.7) CALL MOVCA(JOUT,1,IFORM,(966+(I-1)*33),12) 755 I=I+1 C-----SET IBLANK IF LINE WAS BLANK IF(IBL .EQ. 1) IBLANK=1 756 CONTINUE C +++++++++++++++++ C-----+ END MAIN LOOP + C +++++++++++++++++ C C END OF LINE PER LINE EXAMINATION NOW GENERAL CHECKS : C -TRANSACTION COMPLETE MUST BE DEFINED C -ABORT/SELECT MUST BE DEFINED C -IF ANY ARITHMETIC OPERATOR EQUAL MUST BE DEFINED C -IF EQUAL IS SELECTED AT LEAST ONE ARITH. OPERATOR MUST BE SELECTED C IF(ISCRN.EQ.7) GO TO 758 IF(ISCRN .EQ. 62)GO TO 7569 C-----DON'T PRINT 61 & 62 IF NO ALPHA KEYBD. IF(IGET1(IFORM,1516).EQ.1H ) GO TO 7569 C-----SEARCH FWD THRU IFORM FOR OTHER DEFINED KEYS. DO 7562 J=I,26 IF(IGET2(IFORM,87+(I-1)*33).NE.2H ) GO TO 772 7562 CONTINUE IF((IBLANK.EQ.0).AND.(ISCRN.NE.62)) GO TO 772 C-----SEARCH FOR PREFIX KEY. 7569 DO 757 J=1,IKMAX IF(IKEY(J,1).EQ.10) GO TO 773 757 CONTINUE 758 IFLG=0 IFLG1=0 IFLG2=0 DO 760 I=1,IKMAX DO 760 J=1,3,2 IF(IKEY(I,J).EQ.1) IFLG=1 IF(IKEY(I,J).EQ.14) IFLG=1 IF(IKEY(I,J).EQ.4) IFLG2=1 IF((IKEY(I,J).GT.4).AND.(IKEY(I,J).LT.9)) IFLG1=1 760 CONTINUE IF(IFLG.EQ.0) GO TO 794 IF(IFLG2.EQ.0) GO TO 797 DO 763 I=1,IKMAX DO 763 J=1,3,2 IF(IKEY(I,J).EQ.9) GO TO 766 763 CONTINUE IF(IFLG1.EQ.0) GO TO 771 GO TO 795 766 IF(IFLG1.EQ.0) GO TO 798 C C CALL NEXT SCREEN C 771 ISCRN=9 CALL EXEC(8,JNAM) C 772 IF(ISCRN .EQ. 61)ISCRN=62 IF(ISCRN .EQ. 6)ISCRN=61 CALL EXEC(8,INAM) C 773 ISCRN=7 1000 CALL EXEC(8,INAM) C C SCREENS 6 & 7 ERROR PROCESSING C 778 NOF=NOF-1 GO TO 780 779 NOF=NOF-2 C C KEY # NOT GIVEN C 780 CALL MES02(2,NOF) GO TO 15 C C ILLEGAL KEY NUMBER C 781 CALL MES02(3,NOF) GO TO 15 C C KEY ALREADY ASSIGNED C 782 CALL MES02(4,NOF) GO TO 15 C C PREFIX KEY CANNOT BE ASSIGNED TWICE C 783 CALL MES02(5,NOF) GO TO 15 C C A KEY CANNOT BE ASSIGNED A VALUE AND A FUNCTION SIMULTANEOUSLY C 784 NOF=NOF-1 CALL MES02(6,NOF) GO TO 15 C C NO VALUE OR FUNCTION ASSIGNED TO THIS KEY C 785 NOF=NOF-1 CALL MES02(7,NOF) GO TO 15 C C UNKNOWN FUNCTION C 786 CALL MES02(8,NOF) GO TO 15 C C ILLEGAL FUNCTION FOR THIS TYPE OF TRANSACTION C 787 CALL MES02(9,NOF) GO TO 15 C C FUNCTION ALREADY SELECTED C 788 CALL MES02(10,NOF) GO TO 15 C C THIS KEY CANNOT BE TERMINATOR C 790 CALL MES02(11,NOF) GO TO 15 C C FIELD MUST BE BLANK OR X C 791 CALL MES02(12,NOF) GO TO 15 C C THIS KEY CANNOT BE TERMINATOR ANY MORE C 792 CALL MES02(13,NOF) GO TO 15 C C THIS KEY MUST BE TERMINATOR C 793 CALL MES02(14,NOF) GO TO 15 C C "TC OR CA MUST BE DEFINED" C 794 CALL MES02(15,1) GO TO 15 C C EQUAL FUNCTION NOT DEFINED C 795 CALL MES02(16,1) GO TO 15 C C FIELD MUST BE BLANK C 796 CALL MES02(20,NOF) GO TO 15 C C TRANSACTION COMPLETE FUNCTION NOT DEFINED C 797 CALL MES02(21,1) GO TO 15 C C NO ARITHMETIC FUNCTION DEFINED WITH EQUAL C 798 CALL MES02(22,1) GO TO 15 C C ONLY KEYS 1 - 10 MAY BE PREFIXED C 799 CALL MES02(23,NOF) GO TO 15 C C********************************************************************* C C SCREEN OLD # 8 (DOES NOT EXIST) C C********************************************************************* C 800 STOP 700 C C********************************************************************** C C SCREEN # 8 AND 9 (QUESTION LABELS) C C********************************************************************* C 900 I=0 IUMA1=IUMAX IMMA1=IMMAX IF(ISCRN.EQ.10) GO TO 902 N=1 IMX=IUMAX+1 GO TO 904 902 N=IUMAX+1 IMX=IUMAX+IMMAX+1 C 904 DO 920 NOF=1,20 IF(JPAR(KFORM,ITLOG,NOF,JOUT,12,IFLG,JVAL)) GO TO 3000 C C QUESTION LABEL IN I:O BUFFER C IF(IFLG.EQ.0) GO TO 910 IF(N.LT.IMX) GO TO 906 IF(IUMAX+IMMAX.GE.20) GO TO 925 CALL MOVEW(IFORM(638+(N-1)*6),IFORM(638+N*6),(N-20)*6) CALL MOVEW(JFORM(1+(N-1)*JWORDS),JFORM(1+N*JWORDS),(N-20)*JWORDS) CALL BLAN(JFORM,1+(N-1)*JBYTES,JBYTES) JFORM(66+(N-1)*JWORDS)=0 IMX=IMX+1 IF(ISCRN.EQ.9) IUMAX=IUMAX+1 IF(ISCRN.EQ.10) IMMAX=IMMAX+1 906 CALL MOVEW(JOUT,IFORM(638+(N-1)*6),6) GO TO 919 C C INSERT A NEW QUESTION BEFORE PENDING C 901 IF(IUMAX+IMMAX.GE.20) GO TO 925 CALL MOVEW(IFORM(638+(N-1)*6),IFORM(638+N*6),(N-20)*6) CALL MOVEW(JFORM(1+(N-1)*JWORDS),JFORM(1+N*JWORDS),(N-20)*JWORDS) CALL BLAN(IFORM,1275+(N-1)*12,12) CALL BLAN(JFORM,1+(N-1)*JBYTES,JBYTES) JFORM(66+(N-1)*JWORDS)=0 IMX=IMX+1 IF(ISCRN.EQ.9) IUMAX=IUMAX+1 IF(ISCRN.EQ.10) IMMAX=IMMAX+1 I=1 IF((ISCRN.EQ.9).AND.(NOF.GT.IUMA1)) GO TO 919 IF((ISCRN.EQ.10).AND.(NOF.GT.IMMA1)) GO TO 919 N=N+1 GO TO 919 C C BLANC IN I:O BUFFER C 910 IF((ISCRN.EQ.9).AND.(NOF.GT.IUMA1)) GO TO 920 IF((ISCRN.EQ.10).AND.(NOF.GT.IMMA1)) GO TO 920 CALL MOVEW(IFORM(638+N*6),IFORM(638+(N-1)*6),(20-N)*6) CALL MOVEW(JFORM(1+N*JWORDS),JFORM(1+(N-1)*JWORDS),(20-N)*JWORDS) IMX=IMX-1 IF(ISCRN.EQ.9) IUMAX=IUMAX-1 IF(ISCRN.EQ.10) IMMAX=IMMAX-1 GO TO 920 C 919 N=N+1 920 CONTINUE C C IF(ISCRN.EQ.9) GO TO 8007 IF(IUMAX+IMMAX.EQ.0) GO TO 935 IF(IUMAX+IMMAX.GE.20) GO TO 8007 DO 8000 J=638+(IUMAX+IMMAX)*6,757 8000 IFORM(J)=2H DO 8002 J=1+(IUMAX+IMMAX)*JWORDS,1400 8002 JFORM(J)=2H DO 8004 J=IUMAX+IMMAX,19 8004 JFORM(66+J*JWORDS)=0 C 8007 IF(ISCRN.EQ.10) GO TO 8008 ISCRN=10 IF(I.NE.0) ISCRN=9 GO TO 1002 8008 ISCRN=11 IF(I.NE.0) ISCRN=10 C C C CALL NEXT SCREEN C 1002 CONTINUE CALL EXEC(8,JNAM) C C ERROR SECTION SCREENS 9 AND 10 C 925 CALL MES02(17,NOF) GO TO 15 935 CALL MES02(19,1) GO TO 15 C C********************************************************************* C C 2645 SOFTWARE FUNCTION KEY PROCESSING C C********************************************************************* C C C IFLG=5 MEANS NON PRINTABLE ASCII C 3000 IF((ISCRN.NE.9).AND.(ISCRN.NE.10)) GO TO 3001 IF(IFLG.EQ.4) GO TO 901 3001 IF(IFLG.EQ.4) IFLG=5 IF(IFLG.NE.5) GO TO 3005 CALL MES02(1,NOF) GO TO 15 C C IFLG=6 MEANS ILLEGAL PARSE C 3005 IF(IFLG.NE.6) GO TO 3007 STOP 500 C C IFLG=7 MEANS HELP C 3007 IF(IFLG.NE.7) GO TO 3010 INDIC=-77 GO TO 17 3009 INDIC=0 CALL HLP02(0,NOF) GO TO 15 C C IFLG=8 MEANS LAST SCREEN C 3010 IF(IFLG.NE.8) GO TO 3020 ISCRN=ISCRN-1 IF(ISCRN .LT. 60)GO TO 3011 IF(ISCRN .GE. 60)ISCRN=6 CALL EXEC(8,INAM) 3011 IF(ISCRN .EQ. 8)ISCRN=6 IF(ISCRN .EQ. 5)ISCRN=41 IF(ISCRN .LE. 7)CALL EXEC(8,INAM) CALL EXEC(8,JNAM) C C ABORT PROGRAM C 3020 IF(.NOT.OKABT(ILU)) GO TO 17 INDIC=99 CALL EXEC(8,KNAM) C C C END OF SEGMENT C CALL TGP C C END END$