FTN4 C C C NAME: CTILU,LOOLU,DPILU,DUPLU,LCKLU,TMPRS,DUPNA,CTRAC C SOURCE: &TMGL5 92903-18404 C BINARY: %TMGL5 92903-16404 PART OF RTMGL1 C C PRGMR: FRANCOIS GAULLIER HPG 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 SUBROUTINE CTILU,92903-16404 REV.1913 790130 C C C THIS SUBROUTINE TRANSLATES NCRTH(50) INTO NCRTH(2000) C IN ORDER TO BE DISPLAYABLE ON SCREEN NUMBER 1 (LU DEFINITION C SCREEN) C THE ROUTINE 'DPILU' DOES THE REVERSE THING. C C C-----LABEL COMMON # 3 BUFFER AREA C COMMON /TMGC3/IREFC,ILUGH,INTMS,ILPRG,IDECL,ILGMX,NBPRO . ,NCRTH(1) C IDECLW=(IDECL+2)/2 C J=IDECLW CALL NUL(NCRTH(J),192) K=IREFC DO 10 I=IREFC,IREFC+ILUGH-4,2 IF(NCRTH(I+1).EQ.NCRTH(I+3).AND.NCRTH(I+2).EQ.(NCRTH(I))+1) .GOTO 10 NCRTH(J)=NCRTH(K) NCRTH(J+1)=NCRTH(I) IF(NCRTH(J+1).EQ.NCRTH(J)) NCRTH(J+1)=0 NCRTH(J+2)=NCRTH(K+1) K=I+2 J=J+3 10 CONTINUE RETURN END LOGICAL FUNCTION LOOLU(IADS,ILUB,IPTR,NUERO .,IBUFR),92903-16404 REV.1913 790130 C C FUNCTION TO FIND DUPLICATE LUS C C FUNCTION IS FALSE IF THE LU TO BE CHECKED (ILUB) IS NOT C ALREADY AN INTERACTIVE OR AUXILIARY DEVICE. C C-----LABEL COMMON # 3 BUFFER AREA C COMMON /TMGC3/IREFC,ILUGH,INTMS,ILPRG,IDECL,ILGMX,NBPRO . ,NCRTH(1) DIMENSION IBUFR(1) C C C IADS=WORD NCRTH ADRESS C ILUB=LU# TO CHECK C IPTR=FIELD POINTER C NUERO=RETURNED ERROR MESSAGE NUMBER C IBUFR=CURRENT BUFFER C C ITRU=0 NUERO=0 ITOP=IREFC+ILUGH LOOLU=.FALSE. DO 10 I=IREFC,ITOP-2,2 IF(NCRTH(I).EQ.ILUB) ITRU=1 10 CONTINUE IF(ITRU.EQ.0) GOTO 15 NUERO=12 GOTO 40 15 IF(IADS.EQ.ITOP) GOTO 25 DO 20 I=ITOP,IADS-2,2 IF(NCRTH(I).EQ.ILUB) ITRU=1 20 CONTINUE 25 IF(IPTR.EQ.1) GOTO 35 DO 30 I=1,IPTR-2,2 IF(IBUFR(I).EQ.ILUB) ITRU=1 30 CONTINUE 35 IF(ITRU.EQ.0.AND.IBUFR(I+1).EQ.-1) NUERO=11 IF(ITRU.EQ.1.AND.IBUFR(I+1).NE.-1) NUERO=8 40 IF(NUERO.NE.0) LOOLU=.TRUE. RETURN END SUBROUTINE DPILU,92903-16404 REV.1913 790130 C C C THIS SUBROUTINE DEPACK THE INTERACTIVE LU BUFFER IN NCRTH(200) C AND THEN TRANSLATES NCRTH(2000) INTO NCRTH(50), ITS FINAL C PLACE. C USED ONLY FOR THE INTERCATIVE LU PROCESS. C ---------------- C C C-----LABEL COMMON # 3 BUFFER AREA C COMMON /TMGC3/IREFC,ILUGH,INTMS,ILPRG,IDECL,ILGMX,NBPRO . ,NCRTH(1) C DIMENSION IDPAK(260) C IDECLW=(IDECL+2)/2 C ILEGH=260 C C DEPACK NCRTH(IDECLW) INTO IDPAK(1) C TYPE TO DELETE ZEROED C CALL NUL(IDPAK,ILEGH) J=1 DO 30 I=IDECLW,IDECLW+192-3,3 IF(NCRTH(I).EQ.0) GOTO 35 IF(NCRTH(I+1).EQ.0) GOTO 20 L=J M=NCRTH(I) IED=J+(NCRTH(I+1)-NCRTH(I))*2 DO 10 N=L,IED,2 IDPAK(N)=M IDPAK(N+1)=NCRTH(I+2) IF(IDPAK(N+1).EQ.-1) IDPAK(N+1)=0 M=M+1 J=J+2 10 CONTINUE GOTO 30 20 IDPAK(J)=NCRTH(I) IDPAK(J+1)=NCRTH(I+2) IF(IDPAK(J+1).EQ.-1) IDPAK(J+1)=0 J=J+2 30 CONTINUE C C LU# ORDERED IN INCREASING ORDER C 35 CALL ITRIC(IDPAK,ILEGH,1) C C TYPE WITH SAME LU# ORDERED IN INCREASING ORDER C J=2 DO 50 I=1,ILEGH+1-4,2 IF(IDPAK(I).EQ.IDPAK(I+2)) GOTO 50 IF(I-J.GE.1) GOTO 40 J=I+3 GOTO 50 40 CALL ITRIC(IDPAK(J-1),(I-J)+3,2) J=I+3 50 CONTINUE IF(IDPAK(I-2).NE.IDPAK(I)) GOTO 55 CALL ITRIC(IDPAK(I-2),4,2) C C ELIMINATE LU# IF FIRST OF TWO ONE IS "0" TYPE C 55 K=1 60 IF(IDPAK(K+1).NE.0) GOTO 70 IF(IDPAK(K).EQ.IDPAK(K+2)) GOTO 65 IDPAK(K)=0 GOTO 70 65 IDPAK(K)=0 IDPAK(K+2)=0 K=K+2 IF(K.EQ.ILEGH-3) GOTO 90 70 K=K+2 IF(K.EQ.ILEGH-3) GOTO 100 80 GOTO 60 90 IF(IDPAK(K+3).EQ.0) IDPAK(K+2)=0 GOTO 120 100 IF(IDPAK(K+1).NE.0) GOTO 90 IF(IDPAK(K).EQ.IDPAK(K+2)) GOTO 105 IDPAK(K)=0 GOTO 90 105 IDPAK(K)=0 IDPAK(K+2)=0 GOTO 120 C C STORE RESULT IN NCRTH(IREFC) C 120 CALL ISPRZ(IDPAK,ILEGH,LEN) CALL NUL(NCRTH(IREFC),ILUGH) CALL MOVEW(IDPAK,NCRTH(IREFC),LEN) RETURN END SUBROUTINE DUPLU(IBUF,LEN,IFILD,LUER),92903-16404 REV.1805 780304 C C C THIS SUBROUTINE LOOK FOR DUPLICATE INTERACTIVE LU# C IFILD = RETURNED FIELD NUMBER C LUER = DEFECTIVE LU# (ASCII) C LUER= [] : LUS #*[] * C * IPOS = 2 ----> #[*] * C * IPOS = 3 ----> [#*] * C * IPOS = 4 ----> [#]* * C * IPOS = 5 ----> []#* * C * IPOS = 6 ----> #[]* * C +-----------------------+ C C CHECK LINE: I AGAINST ALL PREVIOUS LINES C DO 10 K=1,I-3,3 IPOS=0 ITR1=0 ITR2=0 ITR3=0 ITR4=0 IF(IBUF(I+1).EQ.0) IBUF(I+1)=IBUF(I) IF(IBUF(K+1).EQ.0) IBUF(K+1)=IBUF(K) C C-----* [ ] ? ITR1 C IF(IBUF(I+1).LT.IBUF(K)) ITR1=1 C C-----[ * ] ? ITR2 C IF(.NOT.ISBTW(IBUF(I+1),IBUF(K),IBUF(K+1))) ITR2=1 C C-----[ # ] ? ITR3 C IF(.NOT.ISBTW(IBUF(I),IBUF(K),IBUF(K+1))) ITR3=1 C C-----[ ] # ? ITR4 C IF(IBUF(I).GT.IBUF(K+1)) ITR4=1 C C LOOK FOR FIRST LU# INCLUDED, IF REQUIRED C IF(ITR2.EQ.1) CALL LCKLU(K,I+1,K+1,IBUF,LUER) IF(ITR3.EQ.1) CALL LCKLU(K,I,K+1,IBUF,LUER) C C CALCULATES IPOS C IF(ITR1.EQ.1.AND.ITR3+ITR4.EQ.0) IPOS=1 IF(ITR2.EQ.1.AND.ITR3+ITR4.EQ.0) IPOS=2 IF(ITR2.EQ.1.AND.ITR3.EQ.1) IPOS=3 IF(ITR3.EQ.1.AND.ITR1+ITR2.EQ.0) IPOS=4 IF(ITR4.EQ.1.AND.ITR1+ITR2.EQ.0) IPOS=5 IF(ITR1+ITR2.EQ.0.AND.ITR3+ITR4.EQ.0) IPOS=6 IF(IPOS.EQ.0) STOP 6001 C C VERIFY CORRECT DEFINITION C IF(IBUF(I+2).EQ.-1.AND.IBUF(K+2).NE.-1) GOTO 7 C C NO DELETE IS INVOLVE IN THE CURRENT LINE I C CHECK FOR DUPLICATE LU'S C IF(IPOS.EQ.2) GOTO 30 IF(IPOS.EQ.4) GOTO 40 IF(IPOS.EQ.3) GOTO 40 IF(IPOS.EQ.6) GOTO 20 LUER=0 GOTO 10 C C A DELETE IS REQUESTED IN THE CURRENT LINE C IF LU FOUND THEN GO TO NEXT LINE I C 7 IF(IPOS .EQ. 3) GOTO 100 C-----DELETE BUT THE LU IS NOT YET FOUND, CONTINUE 10 CONTINUE C-----IF DELETE, THE LU HAS NEVER BEEN FOUNDED, ERROR ! IF(IBUF(I+2) .EQ.-1) GOTO 50 C C CHECK LINE I AGAINST NEXT ONE C 90 IFILD=IFILD+3 LUER=0 C C LINE I HAS BEEN CHECK AGAINST ALL PREVIOUS LINE, C GO TO NEXT LINE I C 100 CONTINUE LUER=0 RETURN C 20 LUER=2H[] RETURN C C DUPLICATE LU'S (THE 'TO' LU IS DUPLICATED) C 30 IFILD=IFILD+1 40 RETURN C C ERROR "UNDEFINED LU" USED IN CASE OF DELETE C 50 IF(IPOS.EQ.4) IFILD=IFILD+1 LUER=-1 RETURN END SUBROUTINE LCKLU(IBRN1,IBRN2,IBRN3,IBUF .,LUER),92903-16404 REV.1805 770802 C C C THIS SUBROUTINE SEARCH FOR THE LU : IBUF(IBRN2) C WHITCH IS BETWEEN IBUF(IBRN1),IBUF(IBRN3) C C DIMENSION IBUF(1),NUMB(3) C LUER=2H99 LUTST=IBUF(IBRN1) DO 20 I=1,IBUF(IBRN3)-IBUF(IBRN1)+1 IF(IBUF(IBRN2).NE.LUTST) GOTO 10 CALL CNUMD(LUTST,NUMB) LUER=NUMB(3) RETURN 10 LUTST=LUTST+1 20 CONTINUE RETURN END LOGICAL FUNCTION TMPRS(IOFST,LENGH,ISUPT,IEND .,IFILD),92903-16404 REV.1913 790130 C C C ***************************************************************** C * * C * THIS LOGICAL FUNCTION PROCESS SCREEN # 3. THIS FUNCTION * C * WORKS ON THE UNPACKED FORM OF NCRTH. * C * -------- * C * * C * IF( TMPRS(IOFST,LENGH,IUPT,IEND,IFILD) ) GOTO ERROR * C * * C * IOFST - OFSET IN BYTE INTO NCRTH (USED BY 'MOVCX' * C * TO DISPLAY THE SCREEN.) * C * IF = 0 ---> INIT LOCAL VARIABLE & RETURN * C * LENGH - LENGH OF THE INPUT (T LOG) * C * IUPTN - FIRST U.P.T. TO BE DISPLAYED. * C * IEND - RETURN PARAMETERS (END INDICATOR OR ERROR * C * NUMBER.) * C * IFILD - FIELD ERROR ON THE SCREEN OF THE ERROR * C * * C * IF IOFST IS NOT 0, THE CURRENT SCREEN IS ANALYSED, AND TMPRS * C * RETURN THE NEXT STEP TO EXECUTE USING IEND & IFILD * C * * C * IF A SCREEN IS NOT FULL AND NO ERROR IS FOUND, IT IS CONSI- * C * DERED THE LAST FOR THAT U.P.T. AND TMPRS SWITCH TO THE NEXT * C * U.P.T. * C * IF A SCREEN IS FULL AND NO ERROR IS FOUND, TMPRS GENERATES * C * AN EXTENSION FOR THAT U.P.T. AND CONTINUE. * C * IF A SCREEN IS EMPTY, TMPRS RETURN THE END INDICATOR = 1 TO * C * INDICATE END OF U.P.T. DEFINITION PROCESSING. * C * * C ***************************************************************** C C C VALUE RETURNED BY IEND C C - END INDICATOR: 0 - CONTINUE CURRENT PROCESS (DISPLAY C THE SCREEN) C 1 - END OF CURRENT PROCESS C 2 - ABORT THE PROGRAM C 3 - GO TO PREVIOUS SCREEN C C - ERROR VALUE: 13 - PARTITION REQUIREMENT TOO BIG C 14 - ILLEGAL PARTITION NUMBER C 15 - DUPLICATE T.U.S. C 16 - NO T.U.S. DEFINED AT ALL C 17 - TOO MANY T.U.S., LIBRARY OR U.P.T. C 18 - ILLEGAL NAME FOR T.U.S. OR LIBRARY C 19 - SWAPPING OPTION ANSWER MUST BE 'X' C 20 - NO LIBRARY ALLOWED IF NO T.U.S. DEFINED C 34 - ILLEGAL CHARACTER C C-----LABEL COMMON # 1 TERMINAL LU C COMMON /TMGC1/LU C C-----LABEL COMMON # 3 BUFFER AREA C COMMON /TMGC3/IREFC,ILUGH,INTMS,ILPRG,IDECL,ILGMX,NBPRO . ,NCRTH(2100),IEXFL,IPTR,NBSCR,IFSCR,ILAST . ,IFLG(29),IPRVS(29),IBUFR(62),ITEMP(3),ITOSC C C-----LABEL COMMON # 4 I/O BUFFER (MAX SIZE = 100 WORDS) C COMMON /TMGC4/IOBUF C LOGICAL JPAR,KPAR,IMBED,DUPNA,CMPB,OKABT,FSCRN,ISSPA LOGICAL PSFLG,INSFLG,IEXFL C C C ILAST - POINT ON THE LAST SCREEN OF THE LAST PROGRAM, C WHICH IS NOT ALWAYS THE LAST PHYSICAL BUFFER IN C NCRTH. C KPAR(IP1,IP2)=JPAR(IOBUF,LENGH,I,ITEMP,IP1,IFLG(I),IP2) FSCRN(IP3)=IAND(NCRTH(IPTR+1),77600B).NE.256 .AND. . IAND(NCRTH(IPTR+1),77600B).NE.0 C TMPRS=.FALSE. ISTAR=((IREFC+2*ILUGH)*2)-2 IEXFL=.FALSE. IF(IOFST.NE.0) GOTO 20 C C FIRST TIME TMPRS IS CALLED C IEND=0 NBSCR=1 IFSCR=1 ILAST=NCRTH+1-INTMS IOFST=ISTAR IPTR=(ISTAR+2)/2 ITOSC=1+(ILAST-IPTR)/INTMS C-----SEARCH THE RIGHT UPT # 13 I=IAND(NCRTH(IPTR+2),177B) IF(I .GE. ISUPT) GOTO 148 C-----SEARCH THE FIRST SCREEN OF THE RIGHT UPT IN THE CHAIN 15 J=IAND(NCRTH(IPTR+1),100000B) NBSCR=NBSCR+1 IFSCR=IFSCR+1 IF(NCRTH(IPTR) .EQ. NCRTH+1) GOTO 165 IPTR=NCRTH(IPTR) IOFST=(2*IPTR)-2 IF(J .EQ. 0) GOTO 15 GOTO 13 C C PROCESS A SCREEN # 3 (DEFINITION OF T.U.S.) C 20 CALL NUL(IBUFR,INTMS) PSFLG=.FALSE. INSFLG=.FALSE. IEND=0 C C T.U.S. / LIBRARY ACQUISITION C NUERO=18 J=5 K=7 DO 30 I=1,23 IF(I .EQ. 21) J=6 CALL BLANC(ITEMP,3) IF( KPAR(J,IJK) ) GOTO 200 IF(IFLG(I).NE.0 .AND. IFLG(I).NE.3) GOTO 400 IF( IMBED(ITEMP,1,J) ) GOTO 400 CALL ISUPB(ITEMP,3) CALL MOVCA(ITEMP,1,IBUFR,K,J) 28 K=K+J 30 CONTINUE C C PARTITION SIZE ACQUISITION (ONLY IF LENGH IS OK) C I=24 IF( KPAR(2,IBUFR(2)) ) GOTO 198 NUERO=13 IF(IFLG(I).NE.0 .AND. IFLG(I).NE.1) GOTO 400 IF(IBUFR(2) .GE. 30) GOTO 400 C C PARTITION NUMBER ACQUISITION (ONLY IF LENGH IS OK) C 40 I=25 IF( KPAR(2,IBUFR(3)) ) GOTO 198 NUERO=14 IF(IFLG(I).NE.0 .AND. IFLG(I).NE.1) GOTO 400 IF(IBUFR(3) .GT. 63) GOTO 400 IBUFR(3)=(256*IBUFR(3)) C C SWAPPING BIT (ONLY IF LENGH IS OK) C 50 I=26 ITEMP=2H IF( KPAR(1,IJK) ) GOTO 198 NUERO=19 IF(IFLG(I).NE.0 .AND. IFLG(I).NE.3) GOTO 400 IF(ITEMP.EQ.2HX ) IBUFR(3)=IOR(IBUFR(3),100000B) C-----THE ENTIRE SCREEN HAS BEEN CHECK, FUNCTION ? 80 IF( INSFLG ) GOTO 380 IF( PSFLG ) GOTO 135 C C NO SPECIAL FUNCTION, EMPTY SCREEN ? C DO 110 I=1,23 IF(IFLG(I).NE.0) GOTO 130 110 CONTINUE C C YES, IT IS AN EMPTY SCREEN, IT IS THE END OF T.U.S. DEFINITION C IF(NCRTH(IPTR) .NE. NCRTH+1) GOTO 132 C-----IF AN EXTENSION SCREEN, GO GET A NEW UPT IF( FSCRN(I) ) GOTO 165 NUERO=16 IF(IOFST .EQ. ISTAR) GOTO 398 CALL NUL(NCRTH(IPTR),INTMS) NCRTH=NCRTH-INTMS IEND=1 GOTO 149 C C SET UP TO GO TO A NEXT SCREEN (EXTENSION OR NEW UPT) C (SUPPRESS BLANK FIELD IN THAT SCREEN) C 130 CALL CTRAC(IBUFR,K) C-----NO LIBRARY ALLOWED IF NO T.U.S. DEFINED NUERO=20 IF(IGET2(IBUFR,7).EQ.2H .AND. ISSPA(IBUFR,107,18) ) GOTO 398 C-----STORE DATA BACK INTO NCRTH 132 CALL MOVEW(IBUFR(4),NCRTH(IPTR+3),INTMS-3) C-----CHECK FOR DUPLICATE T.U.S. NUERO=15 IF( .NOT. DUPNA(IPTR,I) ) GOTO 400 C-----KEEP TRACK OF WHERE THE DATA ARE SAVED FOR "PREVIOUS SCREEN" KEY IPRVS(NBSCR)=IOFST IF(NBSCR .LT. 27) NBSCR=NBSCR+1 C IF(NBSCR .LT. 26) NBSCR=NBSCR+1 MAY BE THIS IS CORRECT !!! C C FIRST SCREEN FOR A UPT ? C 135 IF( FSCRN(I) ) GOTO 140 C-----YES, 1ST SCREEN, SET UP PARTITION SIZE AND PARTITION NUMBER NCRTH(IPTR+1)=IBUFR(2)+IAND(NCRTH(IPTR+1),177600B) NCRTH(IPTR+2)=IBUFR(3)+IAND(NCRTH(IPTR+2),177B) C C PREVIOUS SCREEN REQUESTED ? C 140 IF( PSFLG ) GOTO 350 C-----NO PREVIOUS SCREEN, LAST SCREEN OF A UPT ? IF(IAND(NCRTH(IPTR+1),100000B).NE.0) GOTO 150 C C SET UP FOR NEXT SCREEN, ADVANCE POINTER ON THE CHAIN C TO SET OFSET AND POINTER FOR NEXT TIME C 145 IOFST=(2*NCRTH(IPTR))-2 147 IPTR=(IOFST+2)/2 148 IEXFL=FSCRN(I) 149 CONTINUE C##################################################################### D KKK=NCRTH(4) D KKL=NCRTH+1 D KKM=2H1S D IF(FSCRN(I)) KKM=2HEX D WRITE(6,8987)KKL,ILAST,KKM,KKK,IPTR D8987 FORMAT(2/," TMPRS PRINT-OUT: NCRTH+1 ="I5", ILAST ="I5 D .", IT IS A "A2"T SCREEN,",/,19X, D ."ARRAY FROM",I5"(10) TO"I5"(10) IS:") D DO 8984 KKL=KKK,IPTR,62 D KKM=IAND(NCRTH(KKL+2),177B) D KKN=2HLS D IF(IAND(NCRTH(KKL+1),100000B).EQ.0) KKN=2HEX D WRITE(6,8988)KKN,KKM,KKL,(NCRTH(I),I=KKL,KKL+61) D8988 FORMAT(X,A2"T OF UPT #"I3,3X, D ." ADDR ="I5,": VAL ="I5,2@10,/" ["30A2,/" ",29A2"]") D8984 CONTINUE C##################################################################### RETURN C C IT IS THE LAST SCREEN OF A UPT, SCREEN FULL ? C 150 IF(IGET2(IBUFR,102).NE.2H .OR.IGET2(IBUFR,119).NE.2H ) .GOTO 170 C-----IT IS THE LAST SCREEN OF A UPT, END OF CHAIN ? IF(NCRTH(IPTR).NE.NCRTH+1) GOTO 145 C C IT IS THE END OF THE CHAIN, START A NEW PROGRAM IF ENOUGH ROOM C 165 IF(ITOSC .LT. 26) GOTO 190 167 NUERO=17 GOTO 398 C C THIS SCREEN IS FULL, TRY TO DO AN EXTENSION C 170 IF(ITOSC .GE. 25) GOTO 167 C-----SET UP THE EXTENSION SCREEN IF(IPTR.NE.ILAST) GOTO 183 C-----THE EXTENSION IS ON THE LAST UPT ILAST=NCRTH+1 NCRTH(NCRTH+1)=NCRTH+1+INTMS GOTO 184 C-----THE EXTENSION IS IN THE MIDDLE, SET UP TWO LINK 183 NCRTH(ILAST)=NCRTH(ILAST)+INTMS NCRTH(NCRTH+1)=NCRTH(IPTR) 184 NCRTH(IPTR)=NCRTH+1 NCRTH(IPTR+1)=IAND(NCRTH(IPTR+1),77777B) IF(IAND(NCRTH(IPTR+1),77600B).EQ.0) NCRTH(IPTR+1)= .NCRTH(IPTR+1)+256 NCRTH(NCRTH+2)=IOR(NCRTH(IPTR+1)+256,100000B) NCRTH(NCRTH+3)=NCRTH(IPTR+2) GOTO 195 C C SET UP FOR A NEW U.P.T. C 190 ILAST=NCRTH+1 NCRTH(NCRTH+1)=NCRTH+1+INTMS NCRTH(NCRTH+2)=100000B NCRTH(NCRTH+3)=IAND(NCRTH(IPTR+2),177B)+1 195 CALL BLAN(NCRTH,2*(NCRTH+1)+5,ILPRG) NCRTH=NCRTH+INTMS ITOSC=ITOSC+1 GOTO 145 C C SPECIAL CASE: END OF BUFFER, INSERT, PREVIOUS OR ABORT ? C 198 IF(IFLG(I) .EQ. 6) GOTO 80 C-----SPECIAL CHARACTER, CHECK IT 200 IF(IFLG(I).NE.9) GOTO 205 IF(.NOT.OKABT(LU)) RETURN C-----OPERATOR ASK TO ABORT, DO THE ABORT RETURN ! IEND=2 RETURN C C INSERT OR PREVIOUS ? C 205 IF(IFLG(I).EQ.8) GOTO 300 C-----INSERT FUNCTION ? NUERO=34 IF(IFLG(I).NE.4) GOTO 400 IF(I .GE. 21) GOTO 400 IF(.NOT. INSFLG) INSFLD=I INSFLG=.TRUE. GOTO 310 C 300 IF(.NOT. PSFLG) IFILD=I PSFLG=.TRUE. 310 IF(I.GT.23) GOTO 325 CALL MOVCA(NCRTH,IOFST+K,IBUFR,K,J) GOTO 28 325 IF(I.NE.24) GOTO 330 IBUFR(2)=NCRTH(IPTR+1) GOTO 40 330 IBUFR(3)=NCRTH(IPTR+2) IF(I.EQ.25) GOTO 50 GOTO 80 C C EXECUTE THE PREVIOUS SCREEN FUNCTION C 350 IF(NBSCR .EQ. IFSCR) GOTO 360 NBSCR=NBSCR-1 CALL MOVEW(IBUFR(4),NCRTH(IPTR+3),INTMS-3) IOFST=IPRVS(NBSCR) GOTO 147 360 IEND=3 RETURN C C EXECUTE THE INSERT A T.U.S. FUNCTION C 380 CALL CTRAC(IBUFR,INSFLD) I=INSFLD NUERO=34 IF(IGET2(IBUFR,102).NE.2H ) GOTO 400 IF(INSFLD.EQ.20) GOTO 400 KK=97 DO 385 IJ=INSFLD,19 CALL MOVCA(IBUFR,KK,ITEMP,1,5) CALL MOVCA(ITEMP,1,IBUFR,KK+5,5) CALL BLAN(IBUFR,KK,5) 385 KK=KK-5 CALL MOVEW(IBUFR(4),NCRTH(IPTR+3),INTMS-3) RETURN C C ERROR PROCESSING C 398 I=1 400 IFILD=I IEND=NUERO TMPRS=.TRUE. GOTO 148 END LOGICAL FUNCTION DUPNA(NCRPT,IPTRT),92903-16404 REV.1913 790130 C C FUNCTION TO FIND DUPLICATE TMS-SUBROUTINE NAME C C FUNCTION IS TRUE IF ALL THE 20 TMS-SUBROUTINE NAME C (STARTING AT ADDR=NCRPT) ARE ALL UNIQUE. C FUNCTION IS FALSE IF THERE IS DUPLICATE NAME C (III IS THE ADDR OF THE DUPLICATE ONE, THE SECOND ONE) C C C THIS SUBROUTINE WORKS ON THE UNPACKED FORMAT OF NCRTH C ---------- C C C-----LABEL COMMON # 3 BUFFER AREA C COMMON /TMGC3/IREFC,ILUGH,INTMS,ILPRG,IDECL,ILGMX,NBPRO . ,NCRTH(1) C LOGICAL CMPB C DUPNA=.TRUE. IPTRT=1 DO 40 K=(2*(NCRPT+3))-1,(2*(NCRPT+3))-1+95,5 I=NCRTH(4) 10 DO 20 J=(2*(I+3))-1,(2*(I+3))-1+95,5 IF(IGET2(NCRTH,K).EQ.2H ) GOTO 35 IF(IGET2(NCRTH,J).EQ.2H ) GOTO 20 IF(J.EQ.K) GOTO 35 IF(CMPB(NCRTH,J,NCRTH,K,5)) GOTO 50 20 CONTINUE 30 I=NCRTH(I) IF(I.EQ.NCRPT+INTMS) GOTO 35 GOTO 10 35 IPTRT=IPTRT+1 40 CONTINUE GOTO 60 50 DUPNA=.FALSE. 60 RETURN END SUBROUTINE CTRAC(IBUFR,IPT),92903-16404 REV.1805 770802 C C C THIS SUBROUTINE CONTRACTS THE TMS-SUBROUTINES C INSIDE A SCREEN (ELIMINATING EMPTY FIELDS). C C THE FIELD NUMBER IN IPT IS UPDATED TO REFLECT THE CHANGE. C C DIMENSION IBUFR(62) C J=7 IFILD=1 DO 200 II=1,19 IF(IGET2(IBUFR,J).NE.2H ) GOTO 100 CALL MOVCA(IBUFR,J+5,IBUFR,J,95-(J-7)) IF(IFILD.LT.IPT) IPT=IPT-1 CALL BLAN(IBUFR,102,5) J=J-5 100 J=J+5 IFILD=IFILD+1 200 CONTINUE J=107 DO 400 II=1,2 IF(IGET2(IBUFR,J).NE.2H ) GOTO 300 CALL MOVCA(IBUFR,J+6,IBUFR,J,12-(J-107)) CALL BLAN(IBUFR,119,6) J=J-6 300 J=J+6 400 CONTINUE RETURN END END$