SUBROUTINE READIR(DEV,DIRNAM,TYP,LIST,KEY,NR) CC CC PARAMETERS: CC DIRNAM: THE NAME OF THE DIRECTORY TO BE SEARCHED. CC MUST BE IN THE FORM '060060' FOR [60,60\, OR CC '001200' FOR THE DIR [1,200]. CC CC TYP: THE TYPE OF FILES TO BE SEARCHED FOR IN THE CC DIRECTORY. THIS MUST BE A 3 CHARACTER ASCII CC EXTENTION, EXAMPLES: 'FNT' , 'LST' , 'OBJ' CC CC LIST: THE NAME OF A BYTE ARRAY TO STORE ALL THE CC RESULTING NAMES IN. LIST IS ASSUMED TO BE CC DIMENSIONED TO (18,32), ROOM FOR 32 18 BYTE CC LONG NAMES. NAMES ARE RETURNED INTHE FORM CC FILE.EXT;VNO WITH A ZERO BYTE AFTER THE CC LAST CHARACTER IN THE NAME. CC CC KEY: A KEY ARRAY 32 WORDS LONG FOR READIR TO RETURN CC THE ORDERED SUBSCRIPTS OF THE LIST ARRAY IN. CC THE NAMES ARE SORTED IN ASCENDING ALPHABETICAL CC ORDER CC CC NR: THE NUMBER OF FILE NAMES ACTUALLY SENT BACK IN CC LIST. IF THERE ARE MORE THAN 32 IN THE DIRECTORY CC READIR WILL ONLY GET THE FIRST 32 CC OF THEM. CC IMPLICIT INTEGER (A-Z) INTEGER REC(8),KEY(32) EXTERNAL SRTDIR LOGICAL *1 LIST(18,32),NAME(30),DIRNAM(6),TYP(3),TRM(4) COMMON /SCRAT2/LUN DATA TRM/' ',',',' ',0/ NR=0 CALL IRAD50(3,TYP,TYPE) CALL INPL(DEV,4,NAME) CALL INPL('[0,0]',5,NAME(5)) CALL INPL(DIRNAM,6,NAME(10)) CALL INPL('.DIR',4,NAME(16)) NAME(20)=0 CALL CLOSE(LUN) CALL ASSIGN(LUN,NAME,0) CALL FDBSET(LUN,'READONLY','SHARE',,,) DEFINE FILE LUN(1000,8,U,INDEX) INDEX=1 CALL ERRSET(25,.TRUE.,.FALSE.,.TRUE.,.FALSE.,100) CALL ERRSET(39,.TRUE.,.FALSE.,.TRUE.,.FALSE.,100) 10 READ(LUN'INDEX,ERR=210)REC IF (REC(7).NE.TYPE) GOTO 10 IF (REC(1).EQ.0) GOTO 10 NR=NR+1 KEY(NR)=NR CALL R50ASC(9,REC(4),LIST(1,NR)) L=LEN(LIST(1,NR),9)+1 LIST(L,NR)="56 L=L+INPL(TYP,3,LIST(L+1,NR),TRM) LIST(L,NR)="73 CALL CONV(REC(8),NAME,4,8) L=INPL(NAME(2),3,LIST(L+1,NR),TRM)+L 20 L=L-1 IF(LIST(L,NR).EQ."40) GOTO 20 30 LIST(L+1,NR)=0 IF (NR.LT.32) GOTO 10 210 IF(NR.EQ.0) GOTO 230 CALL KSORT(LIST,9,NR,KEY,SRTDIR) 230 CALL CLOSE(LUN) RETURN END