home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / basic / extend.lbr / READDIR.BQS / READDIR.BAS
Encoding:
BASIC Source File  |  1986-10-30  |  2.3 KB  |  76 lines

  1. 10 ' Reprinted from Micro/Systems Journal, Vol. 1, No. 1, March-
  2. 20 ' April 1985, article titled "Assembly Language Extensions for
  3. 30 ' MS-Basic" by Ron Kreymborg.  
  4. 60 '
  5. 100 '         Directory reading program in Basic.
  6. 110 '
  7. 120 '   This program uses external assembly language routines
  8. 130 ' to assemble a string array containing matching entries
  9. 140 ' in the disc directory.  Note that no new variables may
  10. 150 ' be defined between calling GET1ST and the last call to
  11. 160 ' GETNXT.
  12. 170 '                    Ron Kreymborg
  13. 180 DEFINT A-Z
  14. 190 DIM FCB(20),DMA(64),DIR$(100),CR(2)
  15. 200 DEF FNA(A!) = PEEK(A!)+PEEK(A!+1)*256-2^16
  16. 210 A! = PEEK(7)*256+3
  17. 220 N = PEEK(A!)
  18. 230 IF N <> 4 THEN STOP
  19. 240 SPLIT% = FNA(A!+1)
  20. 250 GET1ST% = FNA(A!+3)
  21. 260 GETNXT% = FNA(A!+5)
  22. 270 SETDMA% = FNA(A!+7)
  23. 280 FLG=0 : CR(0)=0 : CR(1)=0 : E=0 : K=0 : U=0 : L=0
  24. è290 '
  25. 300 PRINT "Enter required match string as 11 characters, with"
  26. 310 INPUT " a '?' to match any character: ",A$
  27. 320 PRINT
  28. 330 IF LEN(A$) <> 11 THEN PRINT "Pardon?" : GOTO 300
  29. 340 PRINT "Matching entries:"
  30. 350 FCB$ = "."+A$
  31. 360 FOR I=1 TO 100
  32. 370   DIR$(I) = "           "
  33. 380 NEXT I
  34. 390 '
  35. 400 ' Copy the specified filename into the FCB.
  36. 410 J = 0
  37. 420 FCB$ = FCB$+"      "
  38. 430 FOR I=0 TO 5
  39. 440   J = J+1 : M = 1 : GOSUB 660
  40. 450   J = J+1 : M = 256 : GOSUB 660
  41. 460 NEXT I
  42. 470 CALL SETDMA% (DMA(0))
  43. 480 CALL GET1ST% (FCB(0),FLG)
  44. 490 '
  45. 500 E = E+1
  46. 510 IF FLG>3 THEN 560
  47. 520 GOSUB 720
  48. 530 CALL GETNXT% (FCB(0), FLG)
  49. 540 GOTO 500
  50. 550 '
  51. è560 FOR K=1 TO E-1
  52. 570   IF (K-1) MOD 4 = 0 THEN PRINT
  53. 580   PRINT DIR$(K);"       ";
  54. 590 NEXT K
  55. 600 PRINT
  56. 610 PRINT
  57. 620 END
  58. 630 '
  59. 640 ' Load the ASCII sequence number into the correct
  60. 650 ' byte (specified by M) of the Ith FCB word.
  61. 660 B$ = MID$(FCB$,J,1)
  62. 670 IF B$ <> "." THEN FCB(I) = FCB(I)+ASC(B$)*M
  63. 680 RETURN
  64. 690 '
  65. 700 ' Extract each byte from the DMA buffer and load
  66. 710 ' them into the DIR$ string.
  67. 720 K = FLG*16
  68. 730 U = U+1
  69. 740 L = 1
  70. 750 FOR I=K TO K+5
  71. 760   CALL SPLIT% (DMA(I), CR(1), CR(0))
  72. 770   FOR J=0 TO 1
  73. 780      IF (I = K AND J = 0) THEN 810
  74. 790      MID$(DIR$(U),L,1) = CHR$(CR(J))
  75. 800      L = L+1
  76. 810   NEXT J
  77. 820 NEXT I
  78. è830 RETURN
  79.