home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64-128Toolkit / RELCOPIERV2 (.txt) < prev    next >
Encoding:
Commodore BASIC  |  2019-04-13  |  5.4 KB  |  170 lines

  1. 100 PRINT "[147]PLAIN BASIC RELATIVE FILE COPIER"
  2. 110 PRINT "DAVID WILLIAMS, 1984, 1990"
  3. 120 :
  4. 130 REM THIS PROGRAM COPIES RELATIVE
  5. 140 REM FILES FROM ONE DISK TO ANOTHER
  6. 150 REM USING A SINGLE DISK DRIVE (OR
  7. 160 REM DRIVE ZERO, ONLY, OF A DUAL
  8. 170 REM DRIVE).
  9. 180 :
  10. 190 REM IT MAY ALSO BE USABLE TO COPY
  11. 200 REM REL-FILES FROM ONE DRIVE TO
  12. 210 REM ANOTHER, PROVIDING THEY HAVE
  13. 220 REM DIFFERING UNIT (DEVICE) NUMBERS
  14. 230 :
  15. 240 REM THE PROGRAM SHOULD WORK ON ALL
  16. 250 REM COMMODORE COMPUTERS AND DISK
  17. 260 REM DRIVES.
  18. 270 :
  19. 280 PRINT:PRINT "ARE YOU USING A COMMODORE 64"
  20. 290 PRINT "OR A C-128 IN C-64 MODE? (Y/N) > ";
  21. 300 GET X$:IF X$<>"Y" AND X$<>"N" THEN 300
  22. 310 PRINT X$:C6%=(X$="Y"):IF C6% THEN GOSUB 1430
  23. 320 :
  24. 330 PRINT:PRINT "RELATIVE FILE COPYING IS MORE"
  25. 340 PRINT "RELIABLE IF DONE SLOWLY THAN IF DONE"
  26. 350 PRINT "FAST. HOWEVER, THE CHOICE IS UP TO YOU."
  27. 360 PRINT "DO YOU WANT S[146]LOW, S[146]AFE COPYING, OR"
  28. 370 PRINT "R[146]APID, R[146]ISKY  COPYING? (S/R) > ";
  29. 380 GET X$:IF X$<>"S" AND X$<>"R" THEN 380
  30. 390 SS%=(X$="S"):PRINT X$
  31. 400 GOTO 590
  32. 410 REM FAST RECORD
  33. 420 GOSUB 430
  34. 430 PRINT#15,"P"+CHR$(5)+CHR$(RN AND 255)+CHR$(RN/256)+CHR$(RP)
  35. 440 RETURN
  36. 450 REM SLOW RECORD
  37. 460 DE=60:GOSUB 490
  38. 470 GOSUB 410
  39. 480 DE=10
  40. 490 IF SS%=0 THEN RETURN
  41. 500 TI$="000000"
  42. 510 IF TI<DE THEN 510
  43. 520 RETURN
  44. 530 REM READ ERROR CHANNEL
  45. 540 INPUT#15,E,E$,E1$,E2$
  46. 550 IF C6% THEN SYS AX+3
  47. 560 E$=STR$(E)+","+E$+","+E1$+","+E2$
  48. 570 IF C6% THEN SYS AX+3
  49. 580 RETURN
  50. 590 PRINT:INPUT "INPUT FILENAME";FI$
  51. 600 IF FI$="" OR LEN (FI$)>16 THEN PRINT "ILLEGAL NAME":GOTO590
  52. 610 PRINT:INPUT "UNIT/DEVICE NUMBER OF DRIVE (8-11)  8[157][157][157]";DU:DU=INT(DU)
  53. 620 IF DU<8 OR DU>11 THEN PRINT "ILLEGAL ENTRY":GOTO 610
  54. 630 OPEN15,DU,15:OPEN5,DU,5,"0:"+FI$
  55. 640 GOSUB530:IF E THEN PRINT E$:CLOSE15:STOP
  56. 650 RP=1:RN=1:GOSUB 410:GOSUB 530:IF E THEN PRINT E$:CLOSE 15:STOP
  57. 660 GOSUB 410:GOSUB 530
  58. 670 IF E=0 AND RN<32767 THEN RN=RN+1:GOTO 660
  59. 680 NR=RN-1-(E=0)
  60. 690 PRINT:PRINT "NUMBER OF RECORDS =";NR
  61. 700 RN=1
  62. 710 RP=2
  63. 720 GOSUB 410:GOSUB 530
  64. 730 IF E=0 AND RP<254 THEN RP=RP+1:GOTO 720
  65. 740 RL=RP-1-(E=0)
  66. 750 PRINT:PRINT "RECORD LENGTH =";RL
  67. 760 IF C6% THEN SYS AX:FM=256*(PEEK(52)-PEEK(50))+PEEK(51)-PEEK(49):GOTO 780
  68. 770 FM=FRE(0)
  69. 780 AS=INT((FM-3000)/(RL+5))-1
  70. 790 IF AS<5 THEN PRINT:PRINT "INSUFFICIENT MEMORY":CLOSE5:CLOSE15:END
  71. 800 IF AS>=NR THEN AS=NR-1
  72. 810 PRINT:PRINT "NUMBER OF BUFFERS =";AS+1
  73. 820 DIM A$(AS)
  74. 830 CI=1:REM CURRENT INPUT RECORD
  75. 840 CO=1:REM CURRENT OUTPUT RECORD
  76. 850 REM INPUT LOOP
  77. 860 AC=0
  78. 870 PRINT:PRINT
  79. 880 FORI=0TOAS:A$(I)="":NEXT
  80. 890 IF C6% THEN SYS AX:GOTO 910
  81. 900 I=FRE(0)
  82. 910 RN=CI
  83. 920 L$=""
  84. 930 PRINT "READING RECORD";CI;"[157] TO BUFFER";AC+1;"[145]"
  85. 940 FOR RP=1 TO RL
  86. 950 GOSUB 410:GET#5,G$:IFG$=""THENG$=CHR$(0)
  87. 960 IF C6% THEN SYS AX+3
  88. 970 L$=L$+G$:NEXT RP
  89. 980 A$(AC)=L$:AC=AC+1:CI=CI+1
  90. 990 IF AC<=AS AND CI<=NR THEN 910
  91. 1000 CLOSE5
  92. 1010 PRINT:PRINT
  93. 1020 IF DU<>DV THEN 1060
  94. 1030 PRINT "INSERT OUTPUT DISK, PRESS RETURN[146]"
  95. 1040 GET G$:IF G$<>"" THEN 1040
  96. 1050 GET G$:IF G$<>CHR$(13) THEN 1050
  97. 1060 IF FO$>"" THEN 1200
  98. 1070 PRINT:PRINT " *** PUT OUTPUT DISK INTO DRIVE ***":PRINT
  99. 1080 INPUT "OUTPUT FILENAME  *[157][157][157]";FO$
  100. 1090 IF FO$="*" THEN FO$=FI$
  101. 1100 IF FO$="" OR LEN(FO$)>16 THEN PRINT "ILLEGAL FILENAME":GOTO1080
  102. 1110 PRINT:PRINT TAB(35);DU;"[145]"
  103. 1120 INPUT "UNIT/DEVICE NUMBER OF DRIVE (8-11)";DV:DV=INT(DV)
  104. 1130 IF DV<8 OR DV>11 THEN PRINT "ILLEGAL ENTRY":GOTO 1110
  105. 1140 PRINT:PRINT "INITIALIZING FILE"
  106. 1150 CLOSE15:OPEN15,DV,15:OPEN5,DV,5,"0:"+FO$+",L,"+CHR$(RL)
  107. 1160 GOSUB 530:IF E THEN PRINTE$:CLOSE15:STOP
  108. 1170 RP=1:RN=NR:GOSUB 450
  109. 1180 PRINT#5,CHR$(255);
  110. 1190 CLOSE5
  111. 1200 CLOSE15:OPEN15,DV,15:OPEN5,DV,5,"0:"+FO$
  112. 1210 GOSUB 530:IF E THEN PRINTE$:CLOSE15:STOP
  113. 1220 PRINT:PRINT
  114. 1230 REM PRINT LOOP
  115. 1240 RP=1
  116. 1250 FOR I=0 TO AC-1
  117. 1260 PRINT "WRITING BUFFER";I+1;"[157] TO RECORD";CO;"[145]"
  118. 1270 RN=CO:GOSUB 450
  119. 1280 PRINT#5,A$(I);
  120. 1290 CO=CO+1
  121. 1300 NEXT I
  122. 1310 CLOSE5
  123. 1320 PRINT:PRINT
  124. 1330 IF CO>NR THEN PRINT "ALL DONE":CLOSE15:END:GOTO 1330
  125. 1340 PRINT "MORE TO COME"
  126. 1350 IF DU<>DV THEN 1390
  127. 1360 PRINT:PRINT "INSERT INPUT DISK, PRESS SPACE[146]"
  128. 1370 GET G$:IF G$<>"" THEN 1370
  129. 1380 GET G$:IF G$<>" " THEN 1380
  130. 1390 CLOSE15:OPEN15,DU,15:OPEN5,DU,5,"0:"+FI$
  131. 1400 GOSUB530:IF E THEN PRINT E$:CLOSE15:STOP
  132. 1410 GOTO 850
  133. 1420 :
  134. 1430 PRINT:PRINT "LOADING FAST GARBAGE COLLECTOR..."
  135. 1440 READ X,Y:AX=256*Y+X:X=AX
  136. 1450 READ Y:IF NOT Y THEN POKE X,Y:X=X+1:GOTO 1450
  137. 1460 RETURN
  138. 1470 DATA 10,206,169,0,44,169,255,216,88,240,12,165,51,197,49,165
  139. 1480 DATA 52,229,50,201,4,176,21,162,5,181,32,72,202,16,250,32
  140. 1490 DATA 53,206,162,0,104,149,32,232,224,6,208,248,96,165,1,41
  141. 1500 DATA 254,133,1,165,55,141,246,207,141,251,207,165,56,141,247,207
  142. 1510 DATA 141,252,207,169,0,141,255,207,173,246,207,141,244,207,56,173
  143. 1520 DATA 247,207,233,31,144,15,141,245,207,165,51,205,244,207,165,52
  144. 1530 DATA 237,245,207,144,13,206,255,207,165,51,141,244,207,165,52,141
  145. 1540 DATA 245,207,173,242,207,133,34,173,243,207,133,35,32,92,207,173
  146. 1550 DATA 244,207,141,253,207,173,245,207,141,254,207,165,34,141,244,207
  147. 1560 DATA 165,35,141,245,207,173,242,207,141,246,207,173,243,207,141,247
  148. 1570 DATA 207,173,251,207,133,34,173,252,207,133,35,32,92,207,173,255
  149. 1580 DATA 207,208,25,165,34,141,251,207,165,35,141,252,207,173,253,207
  150. 1590 DATA 141,246,207,173,254,207,141,247,207,76,80,206,165,34,133,51
  151. 1600 DATA 133,53,165,35,133,52,133,54,165,1,9,1,133,1,96,160
  152. 1610 DATA 0,177,32,208,8,200,145,32,200,145,32,208,75,141,248,207
  153. 1620 DATA 200,177,32,133,36,200,177,32,133,37,165,36,205,246,207,165
  154. 1630 DATA 37,237,247,207,176,50,165,36,205,244,207,165,37,237,245,207
  155. 1640 DATA 144,38,56,165,34,237,248,207,133,34,176,2,198,35,172,248
  156. 1650 DATA 207,136,192,255,240,7,177,36,145,34,76,41,207,160,1,165
  157. 1660 DATA 34,145,32,200,165,35,145,32,96,32,73,207,133,32,134,33
  158. 1670 DATA 96,24,101,32,72,138,101,33,170,104,96,160,3,177,32,170
  159. 1680 DATA 136,177,32,96,165,45,133,32,165,46,133,33,165,32,197,47
  160. 1690 DATA 165,33,229,48,176,41,160,0,177,32,48,5,200,177,32,48
  161. 1700 DATA 10,162,0,169,7,32,65,207,76,100,207,162,0,169,2,32
  162. 1710 DATA 65,207,32,231,206,162,0,169,5,32,65,207,76,100,207,165
  163. 1720 DATA 32,197,49,165,33,229,50,176,79,160,0,177,32,48,5,200
  164. 1730 DATA 177,32,48,9,32,83,207,32,65,207,76,151,207,32,83,207
  165. 1740 DATA 32,73,207,141,249,207,142,250,207,160,4,177,32,72,162,0
  166. 1750 DATA 169,5,32,65,207,104,162,0,10,144,1,232,32,65,207,165
  167. 1760 DATA 32,205,249,207,165,33,237,250,207,176,180,32,231,206,162,0
  168. 1770 DATA 169,3,32,65,207,76,215,207,96,44,0,192,0,0,0,0
  169. 1780 DATA 0,0,0,0,0,0,0,0,-1
  170.