Compucolor.org – Virtual Media

Listing of file='DUPFIL.BAS;01' on disk='vmedia/chip_22-sector.ccvf'

90 PLOT 15,12
100 REM DUP A FILE USING A SINGLE DRIVE -V2.80- J.J.
110 B= INT (FRE (9)/ 128)- 4:IF B> 9GOTO 130
120 PLOT 11:PRINT "NOT ENOUGH SPACE FREE.":END
130 GOSUB 740:E= E- B* 128- 2:POKE E+ 1,B:GOSUB 750:CLEAR 150
140 GOSUB 740:X= E+ 1:B= PEEK (X):GOSUB 920:E$= H$
150 PLOT 19,10:PRINT "MOUNT DISK WITH FILE TO BE DUPLICATED ";
160 GOSUB 900:PLOT 15,27,24,12,27,4:PRINT "DIR":PLOT 27,27
169 REM SCAN SCREEN FOR FILE
170 L= 5:SS= 24576:GOTO 220
180 FOR I= S+ 1TO S+ 81STEP 2:POKE I,2:NEXT I:PLOT 3,0,L,32
190 PLOT 3,41,L:PRINT SPC( 23):PRINT
200 L= L+ 1:IF L= 32THEN L= 0
210 S= L* 128+ SS:A$= CHR$ (PEEK (S+ 4)):IF A$< > "1"GOTO 250
220 PLOT 6,2,3,2,L,49,6,6,3,30,L
225 INPUT "(C=CONTINUE, R=RESTART, E=END)?";Z$
230 PLOT 3,30,L:PRINT SPC( 33):PRINT :IF Z$= "R"GOTO 150
240 IF Z$= "E"GOTO 720
250 IF A$< > "3"GOTO 200
260 PLOT 3,0,L,62:FOR I= S+ 1TO S+ 81STEP 2:POKE I,6:NEXT I
270 PLOT 3,41,L:INPUT "<-DUPLICATE (Y OR N)?";Z$
280 IF LEFT$ (Z$,1)< > "Y"GOTO 180
289 REM READ FILE INFORMATION FROM SCREEN
290 N$= "":FOR I= S+ 8TO S+ 26STEP 2:IF PEEK (I)= 32GOTO 310
300 N$= N$+ CHR$ (PEEK (I))
310 NEXT I:V$= "":FOR I= S+ 28TO S+ 32STEP 2
320 V$= V$+ CHR$ (PEEK (I)):NEXT I:SB$= ""
330 FOR I= S+ 36TO S+ 42STEP 2:SB$= SB$+ CHR$ (PEEK (I)):NEXT I
340 H$= SB$:GOSUB 980:A(0)= XL:A(1)= XH:SZ$= ""
350 FOR I= S+ 46TO S+ 52STEP 2:SZ$= SZ$+ CHR$ (PEEK (I)):NEXT I
360 H$= SZ$:GOSUB 980:A(2)= XL:A(3)= XH:NB= XL+ XH* 256
370 LB$= CHR$ (PEEK (S+ 56))+ CHR$ (PEEK (S+ 58))
380 H$= LB$:GOSUB 980:A(4)= XL:LA$= ""
390 FOR I= S+ 64TO S+ 70STEP 2:LA$= LA$+ CHR$ (PEEK (I)):NEXT I
400 H$= LA$:GOSUB 980:A(5)= XL:A(6)= XH:SA$= ""
410 FOR I= S+ 74TO S+ 80STEP 2:SA$= SA$+ CHR$ (PEEK (I)):NEXT I
420 H$= SA$:GOSUB 980:A(7)= XL:A(8)= XH
430 M$= "MOUNT ":M1$= "SOURCE ":M2$= "DESTINATION "
440 M3$= "MEMORY ":M4$= "DISK ":PLOT 6,5,14,12
450 PRINT "DUPLICATE "N$V$" IN"INT (NB/ B+ .999)" PASS(ES).
460 IF NB> BTHEN BC= B* 128:B1= B:GOTO 480
470 B1= NB:NB= NB- 1:BC= NB* 128+ A(4):A1$= N$+ V$+ " "+ E$
480 A$= "LOAD ":IF NB> BTHEN A$= "READ "
490 X= BC:GOSUB 920:BC$= H$
500 IF NB> BTHEN A1$= SB$+ " "+ E$+ " "+ BC$
510 PLOT 6,2,3,0,5:MA$= M1$:MB$= M3$:MC$= "":GOSUB 870
520 A$= "SAVE ":A1$= N$+ " "+ E$+ " "+ BC$:MB$= M2$:GOSUB 850
530 GOSUB 760:S1= A(0)+ A(1)* 256+ B1:S2= S2+ B1
540 X= S1:GOSUB 920:SB$= H$:X= S2:GOSUB 920:SZ$= H$
550 NB= NB- B:IF NB< = 0GOTO 630
560 IF NB> BTHEN BC= B* 128:S1= S1+ B:S2= S2+ B:GOTO 580
570 BC= NB* 128
580 X= BC:GOSUB 920:BC$= H$:MA$= M1$:MB$= M3$:MC$= ""
590 A$= "READ ":A1$= SB$+ " "+ E$+ " "+ BC$
600 PLOT 6,2,3,0,5:PRINT M$MA$M4$;:GOSUB 860
610 A$= "WRITE ":A1$= SZ$+ " "+ E$+ " "+ BC$:MB$= M2$:GOSUB 850
620 GOTO 540
630 GOSUB 760:FOR K= 2TO 8:POKE M+ K,A(K):NEXT K
640 IF J= 128THEN J= 2:I= I+ 1
650 M= E+ I* 128+ J+ 12:S2= S2+ A(2)+ A(3)* 256:S1= 400- S2
660 IF S1< 0GOTO 1050
670 POKE M+ 1,INT (S2/ 256):POKE M,S2- PEEK (M+ 1)* 256
680 POKE M+ 3,INT (S1/ 256):POKE M+ 2,S1- PEEK (M+ 3)* 256
690 A$= "WRI 0 "+ E$+ " ":A1$= LB$:GOSUB 890
700 PRINT :INPUT "DUPLICATE ANOTHER FILE (Y OR N) ? ";A$
710 PLOT 10:IF LEFT$ (A$,1)= "Y"GOTO 150
720 E= E+ B* 128+ 2:GOSUB 750:CLEAR 50:PLOT 27,11,10,19
730 PRINT "MOUNT PROGRAM DISK ";:GOSUB 900:PLOT 1
739 REM MOVE END OF MEMORY
740 LM= 32940:HM= LM+ 1:E= PEEK (HM)* 256+ PEEK (LM):RETURN
750 POKE HM,INT (E/ 256):POKE LM,E- INT (E/ 256)* 256:RETURN
759 REM SUBROUTINES
760 A$= "REA 0 "+ E$+ " ":A1$= "80":GOSUB 890
770 M= PEEK (E+ 2):X= M* 128+ 128:GOSUB 920:LB$= H$
780 A1$= LB$:GOSUB 890:FOR I= 0TO M:FOR J= 2TO 107STEP 21
790 IF PEEK (E+ 1+ I* 128+ J)= 1GOTO 810
800 NEXT J,I
810 IF J= 2THEN I= I- 1:J= 128
820 M= E+ I* 128+ J- 4:H$= E$:GOSUB 980
830 IF XL< > PEEK (M)OR XH< > PEEK (M+ 1)GOTO 1050
840 M= M- 5:S2= PEEK (M)+ PEEK (M+ 1)* 256:RETURN
850 PLOT 6,6,3,0,5:PRINT M$MB$M4$;:MA$= M3$:MC$= M4$
860 GOSUB 900:PLOT 28,11
870 PLOT 19:PRINT A$MA$"TO "MB$MC$
880 PLOT 19,3,0,9,11:PRINT "FCS>"A$A1$:PLOT 15,3,64,10:L= 11
890 PLOT 27,4:PRINT A$A1$:PLOT 27,27:GOSUB 1030:RETURN
900 PLOT 19:PRINT " (HIT ";:PLOT 6,71:PRINT "RETURN ";:PLOT 6,3
910 PRINT "WHEN READY)"SPC( 6):PLOT 3,64,5:INPUT "";Z$:RETURN
919 REM X=DEC TO HEX=H$
920 H$= "":XX= X:FOR II= 3TO 0STEP - 1
930 IF II= 0THEN X1= XX:GOTO 950
940 X1= INT (XX/ 16^ II):XX= XX- X1* 16^ II
950 IF X1< 10THEN X1= X1+ 48:GOTO 970
960 X1= X1+ 55
970 H$= H$+ CHR$ (X1):NEXT II:RETURN
979 REM H$=HEX TO DEC, XL=LOW BYTE, XH=HIGH BYTE
980 H1$= "0000"+ H$:XL= 0:XH= 0:FOR II= 0TO 1
990 X1= II+ 1:GOSUB 1010:XL= XL+ X1* 16^ II
1000 X1= II+ 3:GOSUB 1010:XH= XH+ X1* 16^ II:NEXT II:RETURN
1010 X1= ASC (RIGHT$ (H1$,X1)):IF X1> 64THEN X1= X1- 55:RETURN
1020 X1= X1- 48:RETURN
1029 REM ERROR CHECK
1030 I= PEEK (L* 128+ SS):IF I= 69OR I= 70GOTO 1050
1040 PLOT 14:RETURN
1050 PLOT 6,65,3,20,L:PRINT "ERROR":PLOT 6,2,10,14:GOTO 700