home *** CD-ROM | disk | FTP | other *** search
- ' Directory reading program.
- ' Adapted from READDIR.BAS by Ron Kreymborg
- ' Lawrence Davis - 2/23/88
-
- ' Compile: BASCOM =RDIR/O/Z/C
- ' Link : L80 RDIR,UCASE,CTAIL,DIR.RRUN,RDIR/N/E
-
- DEFINT A-Z
-
- ' Set maximum number of files in DIR$(n)
- DIM FCB(20) , DMA(64) , DIR$(100) , CR(2)
-
- ' Read CP/M command line.
- CALL CTAIL(A$)
-
- IF A$<>"" _
- THEN CMD=-1:GOTO 305
-
- 300 PRINT
- INPUT "Enter d:filespec to match: " , A$
-
- IF A$ = "" _
- THEN END
-
- ' Convert to upper-case
- 305 CALL UCASE(A$)
-
- ' Extract drive letter and convert to drive code
- DSPEC=INSTR(A$,":")
-
- IF DSPEC=0 _
- THEN DRV=0
-
- IF DSPEC >0 THEN _
- DRV$ = LEFT$ (A$ , 1) : DRV = ASC (DRV$) - 64 : A$ = MID$ (A$ , 3)
-
- PRINT
-
- ' Check for name/ext seperator
- A = INSTR (A$ , ".") :
-
- IF A = 0 _
- THEN 310
-
- A1$ = LEFT$ (A$ , A - 1) : A2$ = MID$ (A$ , A + 1)
-
- ' Process wild card
-
- IF A1$ = "*" _
- THEN A1$ = "????????"
-
- IF A2$ = "*" _
- THEN A2$ = "???"
-
- ' Make sure filename is exactly 11 characters
- 310 IF LEN (A1$) < 8 _
- THEN A1$ = A1$ + SPACE$ (8 - LEN (A1$))
-
- IF LEN (A2$) < 3 _
- THEN A2$ = A2$ + SPACE$ (3 - LEN (A2$))
-
- FIL$ = A1$ + A2$
- FCB$ = CHR$(DRV) + FIL$
-
- FOR I = 1 TO 100
- DIR$ (I) = " "
- NEXT I
-
- ' Copy the specified filename into the FCB.
-
- J = 0
- FCB$ = FCB$+" "
-
- FOR I = 0 TO 5
- J = J + 1 : M = 1 : GOSUB 660
- J = J + 1 : M = 256 : GOSUB 660
- NEXT I
-
- ' Set DMA buffer address
- CALL SETDMA(DMA(0))
-
- ' Check if file named in FCB exists
- CALL GET1ST (FCB(0) , FLG)
-
- 500 WHILE FLG < 4
- E = E + 1
- GOSUB 720
- CALL GETNXT(FCB(0) , FLG) ' Check for next occurence of file
- WEND
-
- 560 GOSUB 900
-
- POKE 128 , 0 'Clear command line
- IF CMD _
- THEN END
-
- CALL RRUN
- ' -------------------------------------------------------------------
-
- ' Sub-Routines
- ' ------------
-
- ' Load the ASCII sequence number into the correct
- ' byte (specified by M) of the Ith FCB word.
-
- 660 B$ = MID$(FCB$,J,1)
- FCB(I) = FCB(I)+ASC(B$)*M
- RETURN
-
- ' Extract each byte from the DMA buffer and load
- ' them into the DIR$ string.
-
- 720 K = FLG*16
- U = U+1
- L = 1
- FOR I=K TO K+5
- CALL SPLIT(DMA(I), CR(1), CR(0))
- FOR J=0 TO 1
- IF (I = K AND J = 0)_
- THEN 810
- MID$(DIR$(U),L,1) = CHR$(CR(J))
- L = L+1
- 810 NEXT J
- NEXT I
- RETURN
-
- ' Sort Directory
-
- 900 N = E - 1
- J4 = N
- 910 J4 = J4 \ 2
- IF J4 = 0 _
- THEN 950
- J2 = N - J4
- J = 1
- 920 I = J
- 930 J3 = I + J4
- A = 1 : B = 12
- IF MID$ (DIR$(I) , A , B) <= MID$ (DIR$(J3) , A , B) _
- THEN 940
- SWAP DIR$(I) , DIR$(J3)
- I = I - J4
-
- IF I >= 1 _
- THEN 930
-
- 940 J = J + 1
-
- IF J > J2 _
- THEN 910
-
- GOTO 920
-
- ' Print Directory
-
- 950 FOR I = 1 TO E-1
- IF (I-1) MOD 5 = 0 _
- THEN PRINT
- PRINT DIR$(I);" : ";
- 960 NEXT
- PRINT
- PRINT
- F = E - 1
- IF F = 1 THEN _
- PRINT F ; "File found." ELSE PRINT F ; "Files found."
- RETURN