home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / basic / extend.lbr / READDIR.BQS / READDIR.BAS
Encoding:
BASIC Source File  |  1986-10-31  |  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è290 '
  24. 300 PRINT "Enter required match string as 11 characters, with"
  25. 310 INPUT " a '?' to match any character: ",A$
  26. 320 PRINT
  27. 330 IF LEN(A$) <> 11 THEN PRINT "Pardon?" : GOTO 300
  28. 340 PRINT "Matching entries:"
  29. 350 FCB$ = "."+A$
  30. 360 FOR I=1 TO 100
  31. 370   DIR$(I) = "           "
  32. 380 NEXT I
  33. 390 '
  34. 400 ' Copy the specified filename into the FCB.
  35. 410 J = 0
  36. 420 FCB$ = FCB$+"      "
  37. 430 FOR I=0 TO 5
  38. 440   J = J+1 : M = 1 : GOSUB 660
  39. 450   J = J+1 : M = 256 : GOSUB 660
  40. 460 NEXT I
  41. 470 CALL SETDMA% (DMA(0))
  42. 480 CALL GET1ST% (FCB(0),FLG)
  43. 490 '
  44. 500 E = E+1
  45. 510 IF FLG>3 THEN 560
  46. 520 GOSUB 720
  47. 530 CALL GETNXT% (FCB(0), FLG)
  48. 540 GOTO 500
  49. 550 'è560 FOR K=1 TO E-1
  50. 570   IF (K-1) MOD 4 = 0 THEN PRINT
  51. 580   PRINT DIR$(K);"       ";
  52. 590 NEXT K
  53. 600 PRINT
  54. 610 PRINT
  55. 620 END
  56. 630 '
  57. 640 ' Load the ASCII sequence number into the correct
  58. 650 ' byte (specified by M) of the Ith FCB word.
  59. 660 B$ = MID$(FCB$,J,1)
  60. 670 IF B$ <> "." THEN FCB(I) = FCB(I)+ASC(B$)*M
  61. 680 RETURN
  62. 690 '
  63. 700 ' Extract each byte from the DMA buffer and load
  64. 710 ' them into the DIR$ string.
  65. 720 K = FLG*16
  66. 730 U = U+1
  67. 740 L = 1
  68. 750 FOR I=K TO K+5
  69. 760   CALL SPLIT% (DMA(I), CR(1), CR(0))
  70. 770   FOR J=0 TO 1
  71. 780      IF (I = K AND J = 0) THEN 810
  72. 790      MID$(DIR$(U),L,1) = CHR$(CR(J))
  73. 800      L = L+1
  74. 810   NEXT J
  75. 820 NEXT Iè830 RETURN
  76.