Compucolor.org – Virtual Media

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

100 REM  ** READ AND MODIFY DIRECTORY **
110 POKE 32941,191:POKE 32940,255
120 REM  ** BACK UP END OF BASIC **
130 AD= PEEK (32941)* 256+ PEEK (32940):AD= AD- 5000
140 POKE 32941,INT (AD/ 256):POKE 32940,AD- INT (AD/ 256)* 256
150 CLEAR 1000:DN$= "          ":DB= 0:FR= 0
160 PLOT 6,2,12,14,3,10,0
170 PRINT "C O M P U C O L O R     F I L E     E D I T O R"
180 PLOT 15,0,4:PRINT TAB( 2)"DEL - DELETE FILE";
190 PRINT TAB( 34)"RND - RENAME DIRECTORY"
200 PRINT TAB( 2)"KEP - KEEP FILE";
210 PRINT TAB( 34)"SDS - SET DIRECTORY SIZE"
220 PRINT TAB( 2)"DOV - DELETE OLD VERSIONS"
230 PRINT TAB( 2)"REN - RENAME FILE";
240 PRINT TAB( 34)"RDD - READ DISK DIRECTORY"
250 PRINT TAB( 2)"NVN - NEW VERSION NUMBERS";
260 PRINT TAB( 34)"UDD - UPDATE DISK"
270 PRINT TAB( 2)"CPD - COMPACT DIRECTORY";
280 PRINT TAB( 34)"END - END PROGRAM":PRINT
290 PRINT "DIRECTORY NAME: ";DN$;"";:AA= DB:GOSUB 1010
300 PRINT "  DIRECTORY LENGTH:";RIGHT$ (AD$,2);"";
310 AA= FR:GOSUB 1010:PRINT "  FREE SPACE: ";RIGHT$ (AD$,3);""
320 FOR I= 11TO 31:PLOT 3,0,I,11:NEXT I:IF NF= 0THEN 400
330 FOR I= 1TO NF:X= 20:IF NF> 15THEN X= 10
340 IF NF> 30THEN X= 0
350 IF I= < 15THEN Y= I+ 11
360 IF I> 15THEN Y= I+ 11- 15:X= 35
370 IF I> 15AND NF> 30THEN X= 23
380 IF I> 30THEN Y= I+ 11- 30:X= 46
390 PLOT 3,X,Y:N= I:GOSUB 710:NEXT I
400 FOR I= 28TO 31:PLOT 3,0,I,11:NEXT I:PLOT 3,0,29
410 PRINT TAB( 10):INPUT "ENTER FILE EDITING COMMAND: ";I$:REM 
420 IF I$= "DEL"OR I$= "KEP"OR I$= "REN"THEN 600
430 IF I$= "DOV"THEN GOSUB 1110:GOTO 320
440 IF I$= "REN"THEN GOSUB 1780:GOTO 620
450 IF I$= "NVN"THEN GOSUB 2020:GOTO 320
460 IF I$= "CPD"THEN GOSUB 1170:GOTO 320
470 IF I$< > "RND"THEN 500
480 PRINT TAB( 10)"ENTER NEW DIRECTORY NAME:";
490 INPUT "";DN$:DN$= LEFT$ (DN$+ "          ",10):GOTO 160:REM 
500 IF I$< > "SDS"THEN 560
510 PRINT TAB( 10)"ENTER DIRECTORY SIZE:";
520 INPUT " ";I1$:DB= VAL (I1$):REM 
530 IF  DB< INT (((2+ NF)/ 6)+ .99)THEN DB= INT (.99+ (2+ NF)/ 6)
535 IF DB> 32THEN DB= 32
540 SB= DB:FOR I= 1TO NF:SB(I)= SB:SB= SB+ NB(I):NEXT I
550 FR= 400- SB:SB= DB:GOTO 160
560 IF I$= "RDD"THEN GOTO 780
570 IF I$= "UDD"THEN GOSUB 1300:GOTO 320
580 IF I$= "END"THEN 750
590 GOTO 400
600 PRINT TAB( 10):INPUT "ENTER FILE NUMBER: ";I1$:N= VAL (I1$):REM 
610 IF N< 1OR N> NFTHEN 400
620 IF I$= "REN"THEN GOSUB 1780
630 P(N)= ABS (P(N)):IF I$= "DEL"THEN P(N)= - P(N)
640 X= 20:IF NF> 15THEN X= 10
650 IF NF> 30THEN X= 0
660 IF N= < 15THEN Y= N+ 11
670 IF N> 15THEN Y= N+ 11- 15:X= 35
680 IF N> 15AND NF> 30THEN X= 23
690 IF N> 30THEN Y= N+ 11- 30:X= 46
700 PLOT 3,X,Y:GOSUB 710:GOTO 400
710 PRINT "";:IF P(N)< 0THEN PRINT "";:REM 
720 IF ABS (P(N))< 10THEN PRINT " ";
730 PRINT ABS (P(N));". ";N$(N);";";
740 AA= V(N):GOSUB 1010:PRINT RIGHT$ (AD$,2):RETURN
750 REM


    ** RESTORE END OF BASIC POINTER **
760 AD= AD+ 5000:POKE 32941,INT (AD/ 256)
770 POKE 32940,AD- INT (AD/ 256)* 256:CLEAR 100:END
780 REM  ** DISSECT DIRECTORY ENTRY **
790 CLEAR 2000:AD= PEEK (32941)* 256+ PEEK (32940):A= AD+ 1
800 DIM  SB(45),NB(45),N$(45),F$(45),P(45),V(45),SO(45)
810 AA= A:GOSUB 1010
820 FOR I= 1TO 45:P(I)= I:NEXT I
830 PRINT TAB( 10):INPUT "ENTER DRIVE NUMBER:";R$:REM 
840 IF R$< > "1"AND R$< > "0"THEN 830
850 R$= "READ "+ R$+ ": "
860 PLOT 27,4:PRINT R$+ "0 "+ AD$+ " 1000":PLOT  27,27
870 SB= PEEK (AD+ 2)+ 1:DB= SB:DN$= ""
880 FOR I= AD+ 4TO AD+ 13:DN$= DN$+ CHR$ (PEEK (I)):NEXT I
890 FOR I= AD+ 24TO AD+ 128* (PEEK (AD+ 2)+ 1)STEP 21
900 I1= I- AD- 1:IF I1/ 128= INT (I1/ 128)THEN I= I+ 2
910 IF PEEK (I)< > 1THEN A= I:GOSUB 940:GOTO 930
920 FR= PEEK (I+ 13)+ PEEK (I+ 14)* 256:I= 999999
930 NEXT I:GOTO 160
940 NF= NF+ 1:FOR J= A+ 1TO A+ 9:IF J= A+ 7THEN N$(NF)= N$(NF)+ "."
950 N$(NF)= N$(NF)+ CHR$ (PEEK (J)):NEXT J
960 V(NF)= PEEK (A+ 10)
970 SB(NF)= PEEK (A+ 11)+ PEEK (A+ 12)* 256:SO(NF)= SB(NF)
980 NB(NF)= PEEK (A+ 13)+ PEEK (A+ 14)* 256
990 FOR J= A+ 15TO A+ 20:F$(NF)= F$(NF)+ CHR$ (PEEK (J)):NEXT J
1000 RETURN
1010 REM  ** CONVERT DEC TO HEX **
1020 S$= "0123456789ABCDEF":D= 65536:AD$= ""
1030 FOR II= 1TO 4:D= D/ 16:V= INT (AA/ D):AA= AA- V* D
1040 AD$= AD$+ MID$ (S$,V+ 1,1):NEXT II:RETURN
1050 REM  ** CONVERT HEX TO DEC **
1060 AD$= RIGHT$ ("0000"+ AD$,4):D= 65536:AA= 0:S$= "0123456789ABCDEF"
1070 FOR II= 1TO 4:D= D/ 16:FOR JJ= 1TO 16
1080 IF MID$ (AD$,II,1)< > MID$ (S$,JJ,1)THEN 1100
1090 AA= AA+ (JJ- 1)* D:JJ= 16
1100 NEXT JJ:NEXT II:RETURN
1110 REM  ** KEEP MOST RECENT VERSIONS **
1120 FOR I= 1TO NF:R= I:N$= N$(I)
1130 FOR J= I+ 1TO NF:IF N$= N$(J)AND  V(R)< V(J)THEN R= J
1140 NEXT J:P(R)= R
1150 FOR J= 1TO NF:IF N$= N$(J)AND R< > JTHEN P(J)= - J
1160 NEXT J:NEXT I:RETURN
1170 REM  ** DELETE DESIRED FILES **
1180 FOR I= 1TO 99:IF I= NF+ 1THEN I= 99:GOTO 1260
1190 IF P(I)> 0THEN 1260
1200 IF I= NFTHEN I= 99:NF= NF- 1:GOTO 1260
1210 FOR J= ITO NF
1220 N$(J)= N$(J+ 1):SB(J)= SB(J+ 1):NB(J)= NB(J+ 1)
1230 F$(J)= F$(J+ 1):V(J)= V(J+ 1):SO(J)= SO(J+ 1)
1240 P(J)= J:IF P(J+ 1)< 0THEN P(J)= - J
1250 NEXT J:NF= NF- 1:GOTO 1190
1260 NEXT I:SB(1)= SB
1270 FOR I= 2TO NF:SB(I)= SB(I- 1)+ NB(I- 1)
1280 NEXT I:FR= 400- SB(NF)- NB(NF):IF NF= 0THEN FR= 400- SB
1290 RETURN
1300 REM  ** CREATE NEW DIRECTORY **
1310 PRINT TAB( 10):INPUT "ENTER DESTINATION DISK:";W$:REM 
1320 IF W$< > "1"AND W$< > "0"THEN 1310
1330 W$= "WRITE "+ W$+ ":"
1340 POKE AD+ 1,0:POKE AD+ 2,DB- 1:POKE AD+ 3,ASC ("A")
1350 FOR I= AD+ 4TO AD+ 13
1360 POKE I,ASC (MID$ (DN$+ "          ",I- AD- 3,1)):NEXT I
1370 BK= 0:F= 0:IF NF= 0THEN 1430
1380 FOR I= AD+ 24TO AD+ 128* (PEEK (AD+ 2)+ 1)STEP 21
1390 I1= I- AD- 1:IF I1/ 128< > INT (I1/ 128)THEN 1410
1400 BK= BK+ 1:POKE I,BK:POKE I+ 1,DB- 1:I= I+ 2
1410 F= F+ 1:IF F> NFTHEN J= I:I= 999999:GOTO 1430
1420 A= I:GOSUB 1640
1430 NEXT I:POKE J,1:SB= SB(NF)+ NB(NF)
1440 POKE J+ 11,SB- INT (SB/ 256)* 256:POKE J+ 12,INT (SB/ 256)
1450 NB= 400- SB:POKE J+ 13,NB- INT (NB/ 256)* 256
1460 POKE J+ 14,INT (NB/ 256):POKE J+ 15,128
1470 AA= AD+ 1:GOSUB 1010:BD$= AD$
1480 AA= DB* 128:GOSUB 1010:ED$= AD$
1490 PLOT 27,4:PRINT W$+ "0 "+ BD$+ " "+ ED$:PLOT 27,27
1500 REM  ** MOVE FILES **
1510 FOR I= 1TO NF
1520 SO= SO(I):SB= SB(I):NB= NB(I)
1525 IF MID$ (R$,6,1)= MID$ (W$,7,1)AND SO= SBTHEN 1635
1530 AA= NB(I):GOSUB 1010:NB$= AD$
1540 FOR J= 0TO NBSTEP 32
1550 AA= SO:GOSUB 1010:SO$= RIGHT$ (AD$,2)
1560 AA= SB:GOSUB 1010:SB$= RIGHT$ (AD$,2)
1570 ED= 4096:IF NB- J< 32THEN ED= (NB- J)* 128
1580 AA= ED:GOSUB 1010:ED$= AD$
1590 AA= AD+ 1:GOSUB 1010:BD$= AD$
1600 PLOT 27,4:PRINT R$+ SO$+ " "+ BD$+ " "+ ED$
1610 PRINT W$+ SB$+ " "+ BD$+ " "+ ED$:PLOT 27,27
1620 SO= SO+ 32:SB= SB+ 32:NEXT J
1635 NEXT I:RETURN
1640 REM  ** PUT DIRECTORY FILE IN DIRECTORY **
1650 POKE A,3
1660 FOR J= A+ 1TO A+ 6
1670 POKE J,ASC (MID$ (N$(F)+ "      ",J- A,1)):NEXT J
1680 FOR J= A+ 7TO A+ 9
1690 POKE J,ASC (MID$ (N$(F)+ "   ",J- A+ 1,1)):NEXT J
1700 POKE A+ 10,V(F)
1710 POKE A+ 11,SB(F)- INT (SB(F)/ 256)* 256
1720 POKE A+ 12,INT (SB(F)/ 256)
1730 POKE A+ 13,NB(F)- INT (NB(F)/ 256)* 256
1740 POKE A+ 14,INT (NB(F)/ 256)
1750 FOR J= A+ 15TO A+ 20
1760 POKE J,ASC (MID$ (F$(F),J- A- 14,1)):NEXT J
1770 RETURN
1780 REM  ** RENAME A FILE **
1790 PLOT 27,24:GOTO 1810
1800 PLOT 3,0,31,11:PRINT "BAD ENTRY";
1810 PRINT TAB( 10):INPUT "ENTER NEW FILE NAME:";F1$:REM 
1820 FL= LEN (F1$):IF F1$= "0"THEN RETURN
1830 FT$= MID$ (N$(N),8,3):D1= 0:C= 0
1840 FOR I= 1TO FL:I$= MID$ (F1$,I,1)
1850 IF D1= 0AND I$= "."THEN D1= I
1860 IF C= 0AND I$= ";"THEN C= I
1870 NEXT I:IF C> 0AND D1> CTHEN 1800
1880 IF D1= 0AND C= 0THEN M= 0:GOTO 1900
1890 M= D1:IF D1= 0THEN M= C:GOTO 1900
1900 IF M= 1THEN 1800
1910 F$= F1$:IF M> 0THEN F$= LEFT$ (F1$,M- 1)
1920 IF LEN (F$)> 6OR LEN (F$)< 1THEN 1800
1930 IF C= 0OR FL= CTHEN 1960
1940 AD$= "00"+ MID$ (F1$,C+ 1,2):GOSUB 1050:V(N)= AA
1950 IF AA< 1THEN 1800
1960 IF D1< 1THEN 2000
1970 IF C= 0THEN C= FL+ 1
1980 IF C- D1< 2THEN 1800
1990 FT$= LEFT$ (MID$ (F1$,D1+ 1,C- D1- 1)+ "   ",3)
2000 N$(N)= LEFT$ (F$+ "      ",6)+ "."+ FT$
2010 PLOT 27,11:RETURN
2020 REM  ** NEW VERSION NUMBERS **
2030 FOR I= 1TO NF:V(I)= 0:NEXT I
2040 FOR I= 1TO NF:N$= N$(I):V= 0
2050 FOR J= 1TO NF:IF V(J)= 0AND N$= N$(J)THEN V= V+ 1:V(J)= V
2060 NEXT J,I:RETURN