home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib33a.dsk / MARCH.1988 / BINARY.DWN.bas next >
BASIC Source File  |  2023-02-26  |  5KB  |  103 lines

  1. 10  REM  ***************************
  2. 20  REM  * BINARY.DWN              *
  3. 30  REM  * BY GARY LITTLE          *
  4. 40  REM  ***************************
  5. 100  NORMAL : TEXT : NOTRACE : HOME 
  6. 110  IF  PEEK(48896) = 76  THEN 130
  7. 120  PRINT "THIS PROGRAM REQUIRES PRODOS.": END 
  8. 130 D$ =  CHR$(4)
  9. 140  PRINT D$;"PREFIX": INPUT PX$
  10. 150 CD = 8192: REM  CODE START
  11. 160 EC = CD +21: REM  ERROR CODE LOCATION
  12. 170 PN = CD +22: REM  PATHNAME LOCATION
  13. 180 DT = 10752: REM  BLOCK BUFFER ADDRESS ($2A00)
  14. 190 LL = DT +20: REM  EOF LOCATION
  15. 200  PRINT "[BINARY.DWN]": PRINT 
  16. 210  PRINT "BINARY II TO PRODOS FILE CONVERTER"
  17. 220  PRINT "(VERSION 1.50 --- APRIL 5, 1987)"
  18. 230  PRINT "BY ";: INVERSE : PRINT "GARY B. LITTLE": NORMAL : PRINT 
  19. 240  PRINT "THIS PROGRAM EXTRACTS THE PRODOS FILES"
  20. 250  PRINT "FROM A BINARY II FILE."
  21. 260  PRINT : PRINT "THIS PROGRAM IS IN THE PUBLIC DOMAIN."
  22. 270  PRINT : PRINT "ENTER THE ";: INVERSE : PRINT "FULL PATHNAME";
  23. 280  NORMAL : PRINT " OF THE": PRINT "BINARY II FILE TO BE ANALYZED"
  24. 290  PRINT "(E.G., /MY.DISK/MY.FILES/THE.FILE ):": PRINT 
  25. 300  INPUT "";F$: IF F$ = ""  THEN  HOME : GOTO 850
  26. 310  IF  LEFT$(F$,1) < >"/"  THEN 1030
  27. 320  ONERR  GOTO 1020
  28. 330  PRINT D$;"VERIFY";F$: POKE 216,0
  29. 340  PRINT : PRINT "ENTER THE NAME OF THE DIRECTORY WHERE"
  30. 350  PRINT "THE EXTRACTED FILES ARE TO BE STORED"
  31. 360  PRINT "(E.G., /DATA.DISK/FILES/ ):": PRINT 
  32. 370  INPUT "";PF$: IF PF$ = ""  THEN  HOME : GOTO 850
  33. 380  ONERR  GOTO 1000
  34. 390  PRINT D$;"PREFIX";PF$: POKE 216,0
  35. 400  FOR I = 0 TO 297: READ X: POKE CD +I,X: NEXT 
  36. 410 L =  LEN(F$)
  37. 420  POKE PN,L
  38. 430  FOR I = 1 TO L: POKE PN +I, ASC( MID$ (F$,I,1)): NEXT 
  39. 440  HOME 
  40. 450  CALL CD +0: GOSUB 790: REM  OPEN BINARY II FILE
  41. 460  PRINT "SCANNING THE BINARY II FILE:": PRINT 
  42. 470  REM  READ HEADER AND CHECK ID BYTES
  43. 480  CALL CD +6: GOSUB 790: REM  READ 128 BYTES
  44. 490 I1 =  PEEK(DT +0):I2 =  PEEK(DT +1)
  45. 500 I3 =  PEEK(DT +2):I4 =  PEEK(DT +18)
  46. 510  IF I1 < >10  OR I2 < >71  OR I3 < >76  OR I4 < >2  THEN 770
  47. 520 FT =  PEEK(DT +4): REM  FILE TYPE
  48. 530 DF =  PEEK(DT +125): REM  DATA FLAGS
  49. 540  REM  CALCULATE NUMBER OF BLOCKS TO READ
  50. 550 EF =  PEEK(LL) +256 * PEEK(LL +1) +65536 * PEEK(LL +2)
  51. 560 NB =  INT(EF/128) +((EF -128 * INT(EF/128)) < >0)
  52. 570  REM  DISPLAY NAME OF FILE
  53. 580 L =  PEEK(DT +23): FOR I = 1 TO L
  54. 590 CH =  PEEK(DT +23 +I): IF CH <128  THEN CH = CH +128
  55. 600  PRINT  CHR$(CH);: NEXT : HTAB 17
  56. 610  IF DF >127  THEN DF = DF -128: PRINT "COMPRESSED  ";
  57. 620  IF DF >63  THEN DF = DF -64: PRINT "ENCRYPTED  ";
  58. 630  IF DF = 1  THEN  PRINT "PACKED  ";
  59. 640  PRINT 
  60. 650 TF =  PEEK(DT +127): REM  NUMBER OF FILES TO FOLLOW
  61. 660  CALL CD +3: GOSUB 790: REM  OPEN PRODOS FILE
  62. 670  IF NB = 0  OR FT = 15  THEN 730
  63. 680  FOR I = 1 TO NB
  64. 690  CALL CD +6: GOSUB 790: REM  READ 128 BYTES
  65. 700  CALL CD +9: GOSUB 790: REM  WRITE 128 BYTES
  66. 710  NEXT I
  67. 720  CALL CD +18: GOSUB 790: REM  SET EXACT EOF
  68. 730  CALL CD +15: GOSUB 790: REM  CLOSE PRODOS FILE
  69. 740  IF TF < >0  THEN 480
  70. 750  CALL CD +12: REM  CLOSE BINARY II FILE
  71. 760  PRINT : PRINT "CONVERSION COMPLETED.": GOTO 850
  72. 770  CALL CD +12: REM  CLOSE BINARY II FILE
  73. 780  HOME : PRINT "ERROR: ";F$;" IS NOT A BINARY II FILE": GOTO 850
  74. 790 EN =  PEEK(EC): REM  GET ERROR CODE
  75. 800  IF EN = 0  THEN  RETURN 
  76. 810  POP : PRINT D$;"CLOSE"
  77. 820  PRINT : PRINT "ERROR: MLI CODE #";EN
  78. 830  IF EN = 70  THEN  PRINT "FILE NOT FOUND"
  79. 840  IF EN = 71  THEN  PRINT "DUPLICATE FILENAME"
  80. 850  PRINT D$;"PREFIX";PX$
  81. 860  END 
  82. 1000  HOME : PRINT "ERROR: DIRECTORY NOT FOUND.": POKE 216,0: GOTO 850
  83. 1010  HOME : PRINT "ERROR: ILLEGAL FILE NAME.": POKE 216,0: GOTO 850
  84. 1020  HOME : PRINT "ERROR: FILE NOT FOUND.": POKE 216,0: GOTO 850
  85. 1030  HOME : PRINT "ERROR: NOT A FULL PATHNAME.": POKE 216,0: GOTO 850
  86. 5000  DATA  76,87,32,76,103,32,76,199,32,76,209,32,76,219,32,76,225
  87. 5010  DATA  32,76,237,32,0,0,0,0,0,0,0,0,0,0,0,0,0
  88. 5020  DATA  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  89. 5030  DATA  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  90. 5040  DATA  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  91. 5050  DATA  0,0,32,0,191,200,9,33,32,247,32,173,14,33,141,22,33
  92. 5060  DATA  96,169,7,141,0,42,169,23,141,1,42,169,42,141,2,42,173
  93. 5070  DATA  3,42,9,2,141,3,42,162,2,189,20,42,157,39,33,202,16
  94. 5080  DATA  247,48,23,162,3,189,14,42,157,8,42,202,16,247,32,0,191
  95. 5090  DATA  192,0,42,32,247,32,76,170,32,32,0,191,195,0,42,176,21
  96. 5100  DATA  32,0,191,200,15,33,176,13,173,20,33,141,30,33,141,38,33
  97. 5110  DATA  141,8,33,96,201,70,240,200,56,32,247,32,32,0,191,202,21
  98. 5120  DATA  33,32,247,32,96,32,0,191,203,29,33,32,247,32,96,169,0
  99. 5130  DATA  56,32,247,32,169,0,141,21,32,32,0,191,204,7,33,96,32
  100. 5140  DATA  0,191,208,37,33,32,247,32,96,141,21,32,144,8,104,104,32
  101. 5150  DATA  0,191,204,5,33,96,1,0,1,0,3,22,32,0,34,0,3
  102. 5160  DATA  23,42,0,38,0,4,0,0,42,128,0,0,0,4,0,0,42
  103. 5170  DATA  128,0,0,0,2,0,0,0,0