SUBROUTINE INQUIR(LUN,INFIL,INLEN,OUTFIL,OUTLEN,ALLOC,FOUND) C C Routine to receive a filename in INFIL (character*32) and C return a full filespec in OUTFIL (character*32), as well as C a FOUND (logical), and ALLOCation argument (# blocks). C C This routine needs a logical unit for it's file goodies, so pass C one. C C This routine calls the RMS routine DSP to give all the goodies. C DSP must be installed. C C If the file is not found, DSP will give a one line message saying C that it is not found. C C The Mplus and regular M routines give a different output C C Example of the DSP information for regular M is: C C SY:[7,24]INQUIRE.FTN;4 FILE ORGANIZATION: SEQUENTIAL C CREATED: 15-MAR-1983 13:05 C FILE PROTECTION: [RWED,RWED,RWED,R] C RECORD FORMAT: VARIABLE C RECORD ATTRIBUTES: CARRIAGE RETURN C FILE ATTRIBUTES: C ALLOCATION= 5 EXTEND QUANTITY=0 C C C Display for M-Plus: C CDU0:[7,33]INQUIRE.FTN;1 C Size: 5./5. Created: 15-MAR-1983 14:08 C Owner: [007,001] Revised: 16-SEP-1983 11:32 (2) C File ID: (7170,1,0) C File protection: System:RWED, Owner:RWED, Group:RWED, World:R... C File organization: Sequential C File attributes: Allocation=5, Extend=0 C Record format: Variable length, no maximum defined C Record attributes: Carriage return C C IMPLICIT INTEGER (A-Z) CHARACTER*32 INFIL,OUTFIL,CMDLIN*80,TAB*1,BUF*132 DIMENSION STATS(8),GTSKBF(16) BYTE TSKUIC(2) REAL TSKNAM LOGICAL FOUND EQUIVALENCE (GTSKBF(8),TSKUIC(1)) C DATA TSKNAM/6RMCR.../,TAB/"11/ C CALL GETTSK(GTSKBF) ! Get UIC from task parameters GROUP = TSKUIC(2) MEMBER = TSKUIC(1) C CMDLIN(1:19) = 'DSP SY:TEMPDSP.TMP=' CMDLEN = INLEN+19 CMDLIN(20:CMDLEN) = INFIL CALL SPAWN(TSKNAM,GROUP,MEMBER,5,,STATS,,CMDLIN,CMDLEN,,,IDSW) CALL STOPFR(5) STATUS = STATS(1) IF (STATUS.NE.1) THEN FOUND=.FALSE. RETURN ENDIF OPEN(UNIT=LUN,FILE='SY:TEMPDSP.TMP',DISPOSE='DELETE',STATUS='OLD') C C Now read the goodies C FOUND = .TRUE. 5 READ (LUN,6,END=99) N,BUF 6 FORMAT (Q,A132) IF (N.LE.1) GO TO 5 IF (INDEX(BUF,'FILE ORG').NE.0) THEN OUTLEN = INDEX(BUF,TAB)-2 OUTFIL = BUF(2:OUTLEN+1) ELSEIF (INDEX(BUF,'ALLOCATION').NE.0) THEN I = INDEX(BUF,'=')+1 BUF = BUF(I:N) M = INDEX(BUF,TAB)-1 BUF = BUF(1:M) DECODE(5,7,BUF) ALLOC 7 FORMAT (I) ELSEIF (INDEX(BUF,'Allocation').NE.0) THEN I = INDEX(BUF,'=')+1 J = INDEX(BUF,',')-1 BUF = BUF(I:J) M = J-I+1 DECODE(5,7,BUF) ALLOC ELSEIF (INDEX(BUF,'NOT FOUND').NE.0) THEN FOUND = .FALSE. ELSEIF (BUF(1:1).EQ.'%') THEN FOUND = .FALSE. ELSEIF (BUF(1:1).NE.TAB.AND.BUF(1:1).NE.' ') THEN OUTLEN = N OUTFIL = BUF(1:OUTLEN) ENDIF GO TO 5 C C Got the goodies C 99 CLOSE(UNIT=LUN) RETURN END