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