100 DEF SEG=&H1F94 'Dependent upon your memory 110 ' This sample program serves as both an example and the documentation 120 ' for the FCBREAD.BSV routine that will read the directory of a 130 ' disk and present the matching file name back to the BASIC program. 140 ' Also available to the program is the directory information that 150 ' contains the size and time/date information. This routine is 160 ' faster than OPENing the file since it does not incur that overhead. 170 ' Also the user can present an arbitrary string to match on. 180 ' 190 ' To use, BLOAD the routine into any available free memory. It 200 ' has 2 entry points (INIT and GETNEXT). INIT (offset 2) is used 210 ' to define the disk drive (0=default, 1=A, 2=B, ....) and the 220 ' pattern to be used to match on. The pattern MUST BE a string of 230 ' length 11; the first 8 are the filename and the last 3 are the 240 ' extension. A "?" is used to match any character. For example to 250 ' get all the BASIC files on the disk, "????????BAS" would be used 260 ' as the input parameter. After INIT has been called, calls to 270 ' GETNEXT (offset 5) are made to retrieve matching file names. 280 ' The two parameters are the string in which the match is returned 290 ' (which must be of length 14) and an INTEGER (..%) return value. 300 ' If the status return is <0, no more matched have been found. If 310 ' status >=0, it is the FILE ATTRIBUTE (as defined in the DOS Disk 320 ' Directory). 330 ' 340 ' The INTEGER value at offsets 0,1 in the routine are the offset 350 ' to the directory entry for the file. For example, to obtain the 360 ' DATE information of the file, use the following statements: 370 ' B% = PEEK(0)+PEEK(1)*256 ' Get offset value 380 ' FDATE = PEEK(B%+26)*256 + PEEK(B%+25) 390 ' 400 ' The offsets into the directory entry (25, 26 in this case) are 410 ' defined in the DOS manual. 420 ' 430 ' The example program will print all the file names on the current 440 ' Directory plus their attributes. 450 BLOAD "fcbread.bsv",0 460 INIT%=2:GETNEXT%=5 470 FILENAME$="???????????" 480 DISK%=0:CALL INIT%(DISK%,FILENAME$) 490 FILENAME$=SPACE$(14):CALL GETNEXT%(FILENAME$,STATUS%) 500 PRINT FILENAME$,STATUS% 510 IF STATUS%>=0 THEN GOTO 490