Compucolor.org – Virtual Media

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

10 REM 
20 REM 	PROGRAM NAME:	UTIL02
30 REM 	PROGRAMMER:	JIM PARKER
40 REM
50 REM  PURPOSE:
60 REM 		THIS PROGRAM MOVES A FILE FROM ONE DISK
70 REM 		TO ANOTHER DISK USING ONLY ONE DRIVE.
80 REM 		THE PROGRAM WILL PROMT FOR THE NAME OF
90 REM 		THE FILE TO BE MOVED. THE FORMAT OF THE
100 REM 	REPLY IS:
110 REM 		   FILENM.TYP;VR
120 REM 	WHERE:
130 REM 	FILENM	IS THE NAME OF THE FILE TO BE
140 REM 	MOVED. THIS PARAMETER MUST BE PRESENT.
150 REM
160 REM 	TYP     IS THE FILE TYPE: BAS, RND, ETC.
170 REM 	THIS PARAMETER IS OPTIONAL. IF OMMITED
180 REM 	BAS WILL BE ASSUMED.
190 REM
200 REM 	VR      IS THE VERSION NUMBER OF THE FILE
210 REM 	TO BE MOVED. THIS PARAMETER IS OPTIONAL.
220 REM 	IF OMMITED THE HIGHEST NUMBERED VERSION
230 REM 	WILL BE MOVED.
240 REM
250 REM 	IF IT IS NECESSARY TO USE THIS PROGRAM
260 REM 	WITH DISKS HAVING MORE THAN 8 DIRECTORY
270 REM 	BLOCKS LINE 31040 WILL HAVE TO BE MODIFIED.
280 REM
290 REM 	DELETE THESE REMARKS TO INCREASE THE
300 REM 	AVAILABLE BUFFER SPACE.
310 REM
1000 CLEAR 150
1010 DIM H(6)
2000 REM 
2010 REM 	GET NAME OF FILE TO BE MOVED
2020 REM
2040 INPUT "




ENTER NAME OF FILE TO BE MOVED : ";FL$
3000 REM
3010 REM 	PARSE FILE NAME
3020 REM
3030 VS$= "0"
3040 TP$= "BAS"
3050 NM$= ""
3060 PM= 1
3070 FOR I= 1TO LEN (FL$)
3080 C$= MID$ (FL$,I,1)
3090 ON PMGOTO 4000,4050,4100
4000 IF C$= "."THEN PM= 2:TP$= "":GOTO 4150
4010 IF C$= ";"THEN PM= 3:GOTO 4150
4020 NM$= NM$+ C$
4040 GOTO 4150
4050 IF C$= ";"THEN PM= 3:GOTO 4150
4060 TP$= TP$+ C$
4080 GOTO 4150
4100 VS$= VS$+ C$
4150 NEXT I
4160 IF LEN (NM$)< 6THEN NM$= NM$+ " ":GOTO 4160
4170 IF LEN (TP$)< 3THEN TP$= TP$+ " ":GOTO 4170
4180 IF LEFT$ (NM$,1)= "0"THEN PLOT 6,2:END
4200 VS= 0
4210 FOR I= 1TO LEN (VS$)
4220 C$= MID$ (VS$,I,1)
4230 C= ASC (C$)
4240 C= C- 48
4250 IF C> 9THEN C= C- 7
4260 IF C< 16GOTO 4300
4270 PRINT "
ILLEGAL HEXADECIMAL VERSION NUMBER
"
4280 GOTO 2000
4300 VS= VS* 16+ C
4310 IF VS> 255GOTO 4270
4320 NEXT I
4400 GOSUB 31000
5000 REM 
5100 REM 
5110 REM      SEARCH DIRECTORY FOR NAMES OF FILE TO BE MOVED
5120 REM
5130 LM= PEEK (B* 256+ 34)- 1
5140 FOR S= 0TO LM
5150 FOR R= 0TO 5
5160 IF R+ S= 0GOTO 5400
5170 FB= B* 256+ S* 128+ R* 21+ 3
5180 LB= FB+ 5
5190 IF PEEK (FB- 1)= 1GOTO 5500
5200 NA$= ""
5210 FOR I= FBTO LB
5220 NA$= NA$+ CHR$ (PEEK (I))
5230 NEXT I
5240 FB= LB+ 1:LB= FB+ 2
5250 TY$= ""
5260 FOR I= FBTO LB
5270 TY$= TY$+ CHR$ (PEEK (I))
5280 NEXT I
5290 VR= PEEK (I)
5300 REM 
5310 REM    DETERMINE IF THIS IS THE FILE TO MOVE
5320 REM
5330 IF NA$< > NM$GOTO 5450
5340 IF TY$< > TP$GOTO 5450
5350 IF VS> 0AND VS< > VRGOTO 5450
5360 SS= S
5370 SR= R
5400 GOSUB 33000
5410 SV$= VN$
5450 NEXT R,S
5500 IF SS+ SR< > OGOTO 5600
5510 PRINT "
FILE NOT FOUND ON VOLUME "SV$;"
"
5520 GOTO 2000
5600 FB= B* 256+ SS* 128+ SR* 21+ 13
5610 S1= PEEK (FB+ 1)
5620 S2= PEEK (FB)
5630 S3= PEEK (FB+ 3)
5640 S4= PEEK (FB+ 2)
5645 FOR I= 1TO 6
5646 H(I)= PEEK (FB+ 3+ I)
5647 NEXT I
5650 X= S1:GOSUB 30000:S1$= H$
5660 X= S2:GOSUB 30000:S2$= H$
7000 REM 
7010 REM   READ DIRECTORY ON DESTINATION DISK
7020 REM
7025 VS= 0
7030 INPUT "
INSERT DESTINATION DISK THEN HIT RETURN";X$
7040 GOSUB 31000
7050 LM= PEEK (B* 256+ 34)- 1
7060 FOR S= 0TO LM- 1
7070 FOR R= 0TO 5
7080 IF S+ R= 0GOTO 7500
7090 FB= B* 256+ S* 128+ R* 21+ 3
7100 LB= FB+ 5
7110 IF PEEK (FB- 1)= 1GOTO 7800
7120 NA$= ""
7130 FOR I= FBTO LB
7140 NA$= NA$+ CHR$ (PEEK (I))
7150 NEXT I
7160 TY$= ""
7170 FB= LB+ 1:LB= FB+ 2
7180 FOR I= FBTO LB
7190 TY$= TY$+ CHR$ (PEEK (I))
7200 NEXT I
7210 VR= PEEK (I)
7300 REM 
7310 REM  IF THIS FILE HAS SAME NAME, UPDATE THE VERSION NUMBER
7320 REM
7330 IF NA$< > NM$GOTO 7700
7340 IF TY$< > TP$GOTO 7700
7350 VS= VR
7360 GOTO 7700
7500 GOSUB 33000
7510 DV$= VN$
7700 NEXT R,S
7800 DS= S:DR= R
7805 IF S= LM- 1AND R= 5GOTO 7910
7810 D1= PEEK (FB+ 11)
7820 D2= PEEK (FB+ 10)
7830 D3= PEEK (FB+ 13)
7840 D4= PEEK (FB+ 12)
7850 X= D1:GOSUB 30000:D1$= H$
7860 X= D2:GOSUB 30000:D2$= H$
7865 DB= D1* 256+ D2
7870 SZ= S3* 256+ S4
7880 DZ= D3* 256+ D4
7890 IF DZ- SZ= > 0GOTO 7950
7900 PRINT "

THERE IS NOT ENOUGH FREE SPACE ON THIS DISK"
7905 GOTO 7920
7910 PRINT "
DIRECTORY FULL"
7920 PRINT "
RE-INSERT SOURCE DISK"
7930 GOTO 2000
7950 VS= VS+ 1
7955 BM= PEEK (32987)+ 2
7960 TM= T+ 1- BM
7965 EB= SZ- TM
7970 TA= BM+ SZ- 1
7975 IF TA> TTHEN TA= T
8000 REM 
8010 REM   LOAD FILE FROM SOURCE DISK
8020 REM
8030 GOSUB 35000
8040 TK$= S1$+ RIGHT$ (S2$,2)
8050 X= BM:GOSUB 30000:B$= H$
8060 X= TA:GOSUB 30000:T$= H$
8070 GOSUB 32000
8100 REM 
8110 REM    WRITE FILE TO DESTINATION DISK
8120 REM
8130 GOSUB 35500
8140 TK$= D1$+ RIGHT$ (D2$,2)
8150 X= BM:GOSUB 30000:B$= H$
8160 X= TA:GOSUB 30000:T$= H$
8170 GOSUB 32500
8200 REM 
8210 REM    DETERMINE IF THE WHOLE FILE HAS BEEN MOVED OR NOT
8220 IF EB> 0GOTO GOTO 8300
8230 GOTO 8600
8300 REM 
8310 REM     THERE ARE EB MORE BLOCKS TO MOVE
8320 REM
8330 S2= S2+ SZ
8340 IF S2< 256GOTO 8370
8350 S1= S1+ 1
8360 S2= S2- 256
8370 X= S1:GOSUB 30000:S1$= H$
8380 X= S2:GOSUB 30000:S2$= H$
8390 D2= D2+ SZ
8400 IF D2< 256GOTO 8430
8410 D1= D1+ 1
8420 D2= D2- 256
8430 X= D1:GOSUB 30000:D1$= H$
8440 X= D2:GOSUB 30000:D2$= H$
8450 IF EB< SZGOTO 8480
8460 EB= EB- SZ
8470 GOTO 8000
8480 TA= BM+ EB- 1
8490 EB= 0
8500 GOTO 8000
8600 REM 
8610 REM   PUT NEW FILE IN DIRECTORY
8620 REM
8630 X= DS:GOSUB 30000:TK$= H$
8640 X= BM- 1:GOSUB 30000
8650 B$= H$:T$= H$
8660 GOSUB 32000
8670 FB= BM* 256- 254+ DR* 21
8680 POKE FB,3
8690 FOR I= 1TO 6
8700 C$= MID$ (NM$,I,1)
8710 C= ASC (C$)
8720 POKE FB+ I,C
8730 NEXT I
8740 FOR I= 1TO 3
8750 C$= MID$ (TP$,I,1)
8760 C= ASC (C$)
8770 POKE FB+ 6+ I,C
8780 NEXT I
8790 POKE FB+ 10,VS
8800 POKE FB+ 13,S4
8810 POKE FB+ 14,S3
8820 FOR I= 1TO 6
8830 POKE FB+ 14+ I,H(I)
8840 NEXT I
9000 REM 
9010 REM    WRITE FREE SPACE RECORD
9020 REM
9030 DR= DR+ 1
9040 FB= BM* 256- 254+ DR* 21
9050 IF DR< 6GOTO 9200
9060 FB= BM* 256- 256
9070 D1= PEEK (FB)
9080 D2= PEEK (FB+ 1)
9090 FB= FB+ 130
9100 POKE FB- 2,D1+ 1
9110 POKE FB- 1,D2
9120 FOR I= 21TO 125
9130 POKE FB+ I,0
9140 NEXT I
9200 POKE FB,1
9210 FOR I= 1TO 20
9220 POKE FB+ I,0
9230 NEXT I
9240 DB= DB+ SZ
9250 DZ= DZ- SZ
9260 D1= INT (DB/ 256):D2= DB- D1* 256
9270 D3= INT (DZ/ 256):D4= DZ- D3* 256
9280 POKE FB+ 11,D2
9290 POKE FB+ 12,D1
9300 POKE FB+ 13,D4
9310 POKE FB+ 14,D3
9320 GOSUB 32500
9330 PLOT 27,4
9340 PRINT "DIR"
9350 PLOT 27,27
9360 GOTO 7920
10000 END
30000 REM 
30010 REM   CONVERT X TO HEX CHARACTERS AND RETURN IN H$
30020 REM
30030 H$= " "
30040 X1= INT (X/ 16):X2= X- 16* X1
30050 IF X2> 9THEN X2= X2+ 7
30060 X2= X2+ 48
30070 IF X1> 9THEN X1= X1+ 7
30080 X1= X1+ 48
30090 H$= H$+ CHR$ (X1)+ CHR$ (X2)
30100 IF X1< 71THEN RETURN
30110 X1= X1- 71
30120 H$= "1"
30130 GOTO 30070
31000 REM 
31010 REM    LOAD DIRECTORY INTO MEMORY
31020 REM
31030 T= PEEK (32941)- 2
31040 B= T- 7
31050 X= T:GOSUB 30000:T$= H$
31060 X= B:GOSUB 30000:B$= H$
31070 TK$= " 00"
32000 REM 
32010 REM   READ BLOCKS FROM DISK TO MEMORY
32020 REM
32030 PLOT 27,4
32040 PRINT "READ"TK$;B$;"00-";T$;"FF"
32050 PLOT 27,27
32060 RETURN
32500 REM 
32510 REM   WRITE BLOCKS TO DISK FROM MEMORY
32520 REM
32530 PLOT 27,4
32540 PRINT "WRITE"TK$;B$;"00-";T$;"FF"
32550 PLOT 27,27
32560 RETURN
33000 REM 
33010 REM    READ VOLUME NAME
33020 REM
33030 FB= B* 256+ 3
33040 VN$= ""
33050 FOR I= FBTO FB+ 9
33060 VN$= VN$+ CHR$ (PEEK (I))
33070 NEXT I
33080 RETURN
34000 REM 
34010 REM    RE-READ VOLUME NAME
34020 REM
34030 TK$= "00"
34040 X= BM- 1:GOSUB 30000
34050 B$= H$:T$= H$
34060 GOSUB 32000
34070 FB= 256* BM- 253
34080 GOTO 33040
35000 REM 
35010 REM   INSERT SOURCE DISK
35020 REM
35030 PRINT "
INSERT   SOURCE    DISK  <";SV$;">  ";
35040 INPUT "HIT RETURN";X$
35050 GOSUB 34000
35060 IF VN$= SV$THEN RETURN
35070 PRINT "
 WRONG  VOLUME  MOUNTED  <";VN$;">"
35080 GOTO 35030
35500 REM 
35510 REM   INSERT DESTINATION DISK
35520 REM
35530 PRINT "
INSERT DESTINATION DISK  <";DV$;">  ";
35540 INPUT "HIT RETURN";X$
35550 GOSUB 34000
35560 IF VN$= DV$THEN RETURN
35570 PRINT "
 WRONG  VOLUME  MOUNTED  <";VN$;">"
35580 GOTO 35530
65000 REM 
65005 REM  LIST PROGRAM TO PRINTER
65010 REM
65020 PLOT 27,18,3,27,13
65030 PRINT "          ";
65035 OUT 6,27
65040 PRINT "1       ";
65045 OUT 6,27
65050 PRINT "1       ";
65055 OUT 6,27
65060 PRINT "1"
65065 LIST
65070 POKE 33265,0
65100 REM 
65110 REM
65120 REM
65130 REM 			WARNING
65140 REM 			=======
65150 REM
65160 REM 	THIS PROGRAM MODIFIES THE DIRECTORY OF THE
65170 REM 	DESTINATION DISK. THE PROGRAMMER HAS USED
65180 REM 	IT SUCCESSFULLY WITH LARGE FILES AND SMALL
65190 REM 	FILES; BASIC FILES AND DISPLAY FILES.
65200 REM 	HOWEVER, BACKING UP THE DESTINATION DISK
65210 REM 	IS STILL RECOMMENDABLE.
65220 REM 
65230 REM
65240 REM 	DELETE LINE 1 AND LINES 65100 - 65250
65250 REM