C* SFSLT - LOGICAL FILE TEMPLATES FOR LOCATING FILES SUBROUTINE SFSLT (ISTRT, KBUF) INCLUDE 'SFSCM.FTN/NOLIST' C COMMON /LT/ LOTEM(15,5), LNTEM(5), NTEM C DIMENSION KBUF(40), INAME(3,102), ITMPNM(10), IFTN(2) DIMENSION NAME(3), JBUF(40), IFSPEC(40,102) EQUIVALENCE (IFSPEC,IVARI(2001)), (INAME,IVARI(7000)) DATA IBLNK/32/, IAPOS/39/, IDOLR/36/, NIN/5/, NOUT/6/ DATA I00C1/65/, MXTEM/5/, IDOTE/'.E'/, IBLKS/' '/ DATA IFTN/'.F','TN'/, MXNFL/100/ 500 FORMAT (' ', ' ERROR - NO CLOSING ',A2) 510 FORMAT (' ', ' TEMPLATE LENGTH 0 OR GREATER THAN 30 CHARACTERS') 520 FORMAT (' **ERROR** UNABLE TO OPEN TEMP FILE IN ''SFSLT''', $ 'CHECK UIC PROTECTION') 530 FORMAT (7X , 3A2, 'IS MASTER FILE FOR FOLLOWING LOGICAL FILES,', $ I5, ' RECORDS' / ) 540 FORMAT (' NO LOGICAL FILE SEPARATERS FOUND, TERMINATING') 550 FORMAT (' ', I2, ' IS MAX NUMBER OF LOGICAL TEMPLATES ') 560 FORMAT (40A2) 570 FORMAT (' **ERROR** NO. OF LOGICAL FILES EXCEEDS',I4, // $ 11X,'THE FOLLOWING LOGICAL FILES WERE DETERMINED -'// $ (' ',3A2 ,2X, 3A2, 2X, 3A2, 2X, 3A2, 2X, 3A2, 2X, $ 3A2, 2X, 3A2, 2X, 3A2, 2X, 3A2, 2X, 3A2) ) IF (NTEM .GE. MXTEM) GO TO 29 C CHECK STRING FOR QUOTES (') DELIMITERS, FIXED FIELD TEMPLATE IS = JCCHR (KBUF, ISTRT, 80, IAPOS, 1, 1, 3) IF (IS) 100, 100, 20 20 IE = JCCHR (KBUF, IS + 1, 80, IAPOS, 1, 1, 3) IF (IE) 25, 25, 30 25 WRITE (NIN, 500) IAPOS GO TO 999 28 WRITE (NIN, 510) GO TO 999 29 WRITE (NIN, 550) MXTEM GO TO 999 30 NTEM = NTEM + 1 LENG = IE - 1 - IS IF (LENG.GT.30 .OR. LENG.LE.0) GO TO 28 CALL SMCHR (KBUF, IS + 1, LOTEM(1,NTEM), 1, LENG) LNTEM(NTEM) = -LENG GO TO 150 C FREE FORMAT TEMPLATE SCAN 100 NTEM = NTEM + 1 CALL ICHGS (KBUF, ISTRT, IG) CALL ICHPS (LOTEM(1,NTEM), 1, IP) 105 CALL GNXCH (ICHR) IF (IG .GT. 81) GO TO 110 IF (ICHR .EQ. IBLNK) GO TO 105 CALL PNXCH (ICHR) GO TO 105 110 IP = IP - 1 IF (IP.LE.0 .OR. IP.GT. 30) GO TO 28 LNTEM(NTEM) = IP 150 RETURN C *ENTRY FOR SFSLF - LOCATE LOGICAL FILES ENTRY SFSLF IF (ILGFL .EQ. 1) NFILE = 0 MXF = NFILE C C OPEN COMMON OUTPUT FILE , LOGFILE OR NOT (TEMP FILE) C ISIZE = ISFSFZ () OPEN (UNIT=3, TYPE='SCRATCH', INITIALSIZE=ISIZE, BUFFERCOUNT=-1) CALL SFS1LU (FID, BUFR, 1, , 0, 40, 3, NERC) IF (NERC .EQ. 0) GO TO 190 WRITE (NIN, 520) GO TO 999 190 CONTINUE IF (ILGFL .EQ. 1) CALL SIVMV (IFSPEC(1,1), IFSPEC(1,101), 40) NREC = 1 C BEGIN LOOP ON ALL FILES OR MASTER FILE DO 480 NF = 1, MXF C CALL SFSOP (IFSPEC(1,NF), INAME(1,NF)) IF (ILGFL .EQ. 1) CALL SIVMV (INAME, INAME(1,101), 3) C NROFS(NF) = NREC - 1 200 CONTINUE READ (1, 560, END=210) JBUF CALL CLRTAB (JBUF, .TRUE.) IF (JBUF(1) .EQ. IDOTE) GO TO 489 CALL SFS1DW (FID, NREC, 40, JBUF) IF (ILGFL) 200, 200, 215 C 210 CONTINUE CLOSE (UNIT=1) IF (ILGFL .EQ. 1) GO TO 490 NRFIL(NF) = NREC - 1 - NROFS(NF) GO TO 480 215 CONTINUE DO 300 I=1, NTEM LTEM = LNTEM(I) IF (LTEM .GT. 0) GO TO 230 LTEM = -LTEM IF (JCCHR (JBUF, 1, LTEM, LOTEM(1,I), 1, LTEM, 1) - 2) $ 300, 350, 300 C COMPARE FOR FREE FORMAT TEMPLATE 230 CONTINUE L = 0 231 L = L + 1 CALL ICHGS (JBUF, L, IG) 235 CALL GNXCH (ICHR) IF (IG .GT. 81) GO TO 300 IF (ICHR .NE. IBLNK) GO TO 240 L = L + 1 GO TO 235 240 CONTINUE DO 250 J=1, LTEM IF (JCCHR(ICHR,1,1,LOTEM(1,I),J,J,1)-2) 231, 242, 231 242 IF (J .GE. LTEM) GO TO 250 243 CALL GNXCH (ICHR) IF (IG .GT. 81) GO TO 300 IF (ICHR .EQ. IBLNK) GO TO 243 250 CONTINUE LTEM = IG - 1 GO TO 350 300 CONTINUE GO TO 200 C GET FILE NAME FOLLOWING TEMPLATE 350 IGS = LTEM + 1 CALL SIVFL (IBLKS, NAME, 3) CALL ICHGS (JBUF, IGS, IG) CALL ICHPS (NAME, 1, IP) I = 1 360 CALL GNXCH (ICHR) IF (IG .GT. 81) GO TO 400 IF (ICHR .EQ. IBLNK) GO TO(360, 400), I I = 2 IF (ICHR .EQ. IDOLR) GO TO 370 IF (ISPC(ICHR).EQ.1) GO TO 400 370 IF (IP .GT. 6) GO TO 400 CALL PNXCH (ICHR) GO TO 360 400 IF (IP .LE. 1) GO TO 200 IF (NFILE .EQ. 0) GO TO 450 IF (JCCHR (NAME,1, 6, INAME(1,NFILE), 1, 6, 1) - 2) 450, 200, 450 450 NFILE = NFILE + 1 IF (NFILE .GT. MXNFL) GO TO 4990 CALL SIVMV (NAME, INAME(1,NFILE), 3) NROFS(NFILE) = NREC - 2 IF (NFILE .GT. 1) NRFIL(NFILE-1) = NROFS(NFILE) - NROFS(NFILE-1) GO TO 200 C 480 CONTINUE GO TO 499 C 489 NREC = NREC - 1 490 CONTINUE NCARD = NREC - 1 WRITE (NOUT, 530) (INAME(I,101),I=1,3), NCARD IF (NFILE .GT. 0) GO TO 495 WRITE (NIN, 540) GO TO 999 495 NRFIL(NFILE) = NREC - 1 - NROFS(NFILE) 499 RETURN C 4990 CONTINUE WRITE (NIN, 570) MXNFL, ((INAME(I,J),I=1,3),J=1,MXNFL) 999 CALL SFSEX C END