Listing of file='COPAID.BAS;01' on disk='vmedia/modified_utilities-sector.ccvf'
10 PLOT 12,6,2:REM COMBINED CPYAID AND INFO FILES 20 PLOT 3,0,12 30 PRINT TAB( 10)"FCS COPY AID BY EDGAR W. SWANK 16K V8.16.80" 40 PRINT :PRINT TAB( 10)"FOR DISK BASIC 6.78 AND 8.79":PLOT 10 50 PRINT TAB( 10)"READS AND SORTS DIRECTORY OF SOURCE DISK" 60 PRINT TAB( 10)"AND GENERATES 3-COLUMN DISPLAY." 70 PRINT :PRINT TAB( 10)"TWO DISK DRIVES ESSENTIAL" 80 FOR I= 1TO 3000:NEXT 90 PLOT 12,6,3,3,8,0,14:REM FIRST PAGE 100 PRINT " C O P Y A I D I N S T R U C T I O N S " 110 PLOT 15,255,13,32,13:PRINT :PRINT :PRINT :PRINT :PRINT :PRINT 120 PRINT "TITLE: USER INSTRUCTIONS FOR CPYAID UTILITY PROGRAM." 130 PRINT :PRINT 140 PRINT "PURPOSE: BRIEFLY, CPYAID READS & SORTS A DIRECTORY OF A" 150 PRINT TAB( 9);"'SOURCE' DISK. YOU MAY SELECT FROM 1 UP TO 87 FILES" 160 PRINT TAB( 9);"THEREFROM AND COPY THEM ONTO A 'DESTINATION' DISK." 170 PRINT :PRINT 180 PRINT "REQUIRED: 1. AT LEAST 16K MEMORY." 190 PRINT TAB( 10);"2. TWO DISK DRIVES." 200 PRINT TAB( 10);"3. 'SOURCE' DISK, WITH NO MORE THAN 87 FILES." 210 PRINT TAB( 10);"4. 'DESTINATION' DISK." 220 PRINT TAB( 10);"5. CPYAID PROGRAM, WITH COPY.PRG;1 MACHINE LANGUAGE" 230 PRINT TAB( 13);"SUBROUTINE." 240 PRINT :PRINT 250 PRINT TAB( 9):INPUT "WHEN READY TO CONTINUE PRESS: RETURN ";A$ 260 ON A$= "RETURN"GOTO 270 270 PLOT 12,6,3,3,12,0,14:REM SECOND PAGE 280 PRINT " C O P Y A I D I N S T R U C T I O N S " 290 PLOT 15,255,13,32,13 300 PRINT "FEATURES: 1. FACILITATES SELECTIVE COPYING OF FILE(S) FROM" 310 PRINT TAB( 13);"ONE DISK TO ANOTHER." 320 PRINT 330 PRINT TAB( 10);"2. DISPLAYS FILE NAMES & SIZE IN FULL-SCREEN," 340 PRINT TAB( 13);"3-COLUMN FORMAT. ENABLES RE-DISPLAY WITHOUT" 350 PRINT TAB( 13);"RE-READING OR RE-SORTING 'SOURCE' DISK." 360 PRINT 370 PRINT TAB( 10);"3. ENABLES FILE SELECTION BY USER POSITIONING OF" 380 PRINT TAB( 13);"CURSOR & PRESSING THE X-KEY TO SELECT (OR C-KEY" 390 PRINT TAB( 13);"TO CANCEL, OR R-KEY TO RESET FILE VERSION NO.)." 400 PRINT 410 PRINT TAB( 10);"4. ALLOWS ALPHANUMERIC OR RANDOM ORDER ARRANGEMENT" 420 PRINT TAB( 13);"OF FILES COPIED ONTO 'DESTINATION' DISK." 430 PRINT 440 PRINT TAB( 10);"5. DETECTS COPY ERRORS; DISPLAYS 'COPY ERROR' PROMPT" 450 PRINT TAB( 13);"UNTIL ENTER IS PRESSED." 460 PRINT 470 PRINT TAB( 10);"6. ALLOWS 'HOLDING DOWN' KEYS TO SPEED UP REPEAT." 480 PRINT 490 PRINT TAB( 10);"7. ENABLES RE-DISPLAY OF 'DESTINATION' DIRECTORY" 500 PRINT TAB( 13);"WITHOUT NEED FOR RE-READING OR RE-SORTING." 510 PRINT 520 PRINT TAB( 10);"8. UTILIZES FCS COPY COMMANDS." 530 PRINT 540 PRINT TAB( 10);"9. OVERCOMES FCS COPY COMMAND PROBLEM PECULIAR " 550 PRINT TAB( 13);"TO VERSION 6.78 OF DISK BASIC WHEREIN EXTRANEOUS" 560 PRINT TAB( 13);"ERRORS & ERRONEOUS FILE NAMES RESULTED." 570 PRINT 580 PRINT TAB( 10):INPUT "WHEN READY TO CONTINUE PRESS: RETURN ";A$ 590 ON A$= "RETURN" GOTO 600 600 PLOT 12,6,3,3,7,0,14:REM THIRD PAGE 610 PRINT " C O P Y A I D I N S T R U C T I O N S " 620 PLOT 15,255,13,32,13 630 PRINT :PRINT :PRINT 640 PRINT "OPERATING INSTRUCTIONS: (THIS IS NOT A STEP-BY-STEP PROCEDURE)" 650 PRINT 660 PRINT TAB( 5);"1. GETTING STARTED:" 670 PRINT 680 PRINT TAB( 8);"LOAD CPYAID PROGRAM." 690 PRINT 700 PRINT TAB( 5);"2. SPECIAL INSTRUCTION FOR V6.78 VERSION OF DISK BASIC:" 710 PRINT 720 PRINT TAB( 8);"AFTER LOADING CPYAID AND BEFORE REMOVING THE" 730 PRINT TAB( 8);"CPYAID DISK, ENTER A RUN COMMAND, IF NOT ALREADY DONE" 740 PRINT TAB( 8);"SO. (THIS IS TO ALLOW CPYAID TO LOAD THE COPY.PRG;1" 750 PRINT TAB( 8);"SUBROUTINE.)" 760 PRINT 770 PRINT TAB( 8);"NOTE: THIS PROGRAM ENTERS RUN...SEE LINE 1980.":REM 780 PRINT 790 PRINT TAB( 8);"ONCE THE SUBROUTINE IS LOADED, CPYAID MAY BE" 800 PRINT TAB( 8);"RESTARTED WITHOUT REFERENCE TO THE CPYAID DISK" 810 PRINT TAB( 8);"BY ENTERING:":PRINT 820 PRINT TAB( 15);"RESET, ESC E, RUN" 830 PRINT :PRINT 840 PRINT TAB( 5):INPUT "WHEN READY TO CONTINUE PRESS: RETURN ";A$ 850 ON A$= "RETURN" GOTO 860 860 PLOT 12,6,3,3,7,0,14:REM FOURTH PAGE 870 PRINT " C O P Y A I D I N S T R U C T I O N S " 880 PLOT 15,255,13,32,13 890 PRINT 900 PRINT "OPERATING INSTRUCTIONS (CONT'D):" 910 PRINT 920 PRINT TAB( 5);"3. SELECTING A FILE TO BE COPIED:" 930 PRINT 940 PRINT TAB( 8);"NOTE THAT THE FULL-SCREEN, 3 COLUMN DISPLAY USES" 950 PRINT TAB( 8);"'WHITE' CHARACTERS, EXCEPT THAT: 'GREEN' CHARACTERS" 960 PRINT TAB( 8);"APPEAR FOR THE 'LATEST VERSION', WHEN MORE THAN" 970 PRINT TAB( 8);"ONE FILE VERSION EXISTS ON THE 'SOURCE' DISK." 980 PRINT 990 PRINT TAB( 8);"POSITION THE CURSOR TO THE LEFT OF THE DESIRED" 1000 PRINT TAB( 8);"ENTRY, USING THE DIRECTION ARROW(S) AND/OR TAB." 1010 PRINT 1020 PRINT TAB( 8);"PRESS THE X-KEY TO SELECT; OR, C-KEY TO CANCEL; OR," 1030 PRINT TAB( 8);"R-KEY TO RESET THE VERSION NO. TO 01 ON THE" 1040 PRINT TAB( 8);"'DESTINATION' DISK. (SEE RESET CAUTION BELOW.)" 1050 PRINT 1060 PRINT TAB( 8);"NOTE THAT A RED BACKGROUND HIGHLIGHTS THE" 1070 PRINT TAB( 8);"DISPLAY WHEN AN ENTRY IS SELECTED (X-KEY)." 1080 PRINT 1090 PRINT TAB( 8);"SIMILIARLY, NOTE THAT A BLUE BACKGROUND HIGHLIGHTS" 1100 PRINT TAB( 8);"THE DISPLAY WHEN AN ENTRY IS RESET (R-KEY)." 1110 PRINT 1120 PRINT TAB( 8);"FINALLY, NOTE THAT A RED, OR BLUE, BACKGROUND" 1130 PRINT TAB( 8);"DISAPPEARS WHEN AN ENTRY IS CANCELLED (C-KEY)." 1140 PRINT :PRINT 1150 PRINT TAB( 5):INPUT "WHEN READY TO CONTINUE PRESS: RETURN ";A$ 1160 ON A$= "RETURN" GOTO 1170 1170 PLOT 12,6,3,3,7,0,14:REM FIFTH PAGE 1180 PRINT " C O P Y A I D I N S T R U C T I O N S " 1190 PLOT 15,255,13,32,13 1200 PRINT 1210 PRINT "OPERATING INSTRUCTIONS (CONT'D):" 1220 PRINT 1230 PRINT TAB( 5);"4. REPEAT FUNCTION:" 1240 PRINT 1250 PRINT TAB( 8);"REPEAT ANY KEY AFOREMENTIONED BY HOLDING IT DOWN." 1260 PRINT 1270 PRINT TAB( 5);"5. COPYING FILE(S) SELECTED:" 1280 PRINT 1290 PRINT TAB( 8);"PRESS ENTER WHENEVER YOU WISH CPYAID TO COPY YOUR" 1300 PRINT TAB( 8);"SELECTION ONTO THE 'DESTINATION' DISK; YOU MAY SELECT" 1310 PRINT TAB( 8);"ONE, OR MORE FILES AT A TIME." 1320 PRINT 1330 PRINT TAB( 8);"IF MORE THAN ONE, THEN FILES ARE COPIED IN ALPHANUMERIC" 1340 PRINT TAB( 8);"ORDER, AS DISPLAYED. HOWEVER, IF ONE ONLY, THEN FILES" 1350 PRINT TAB( 8);"MAY BE COPIED IN RANDOM ORDER, USING THIS PROCEDURE:" 1360 PRINT 1370 PRINT TAB( 11);"A. SELECT FIRST FILE; B. PRESS ENTER TO COPY FILE;" 1380 PRINT TAB( 11);"C. THEN, CPYAID WILL RE-DISPLAY FULL SCREEN;" 1390 PRINT TAB( 11);"D. SELECT NEXT FILE; E. PRESS ENTER TO COPY FILE;" 1400 PRINT TAB( 11);"F. THEN, CPYAID...G. ETC." 1410 PRINT 1420 PRINT TAB( 8);"ANY ATTEMPT TO COPY THE SAME FILE TWICE ONTO THE SAME" 1430 PRINT TAB( 8);"'DESTINATION' DISK WILL CAUSE A COPY ERROR PROMPT." 1440 PRINT :PRINT 1450 PRINT TAB( 5):INPUT "WHEN READY TO CONTINUE PRESS: RETURN ";A$ 1460 ON A$= "RETURN" GOTO 1470 1470 PLOT 12,6,3,3,7,0,14:REM SIXTH PAGE 1480 PRINT " C O P Y A I D I N S T R U C T I O N S " 1490 PLOT 15,255,13,32,13 1500 PRINT :PRINT 1510 PRINT "OPERATING INSTRUCTIONS (CONT'D):" 1520 PRINT 1530 PRINT TAB( 5);"6. FINISHING UP:" 1540 PRINT 1550 PRINT TAB( 8);"PRESS ENTER, BUT SELECT NO FILE TO DISPLAY THE" 1560 PRINT TAB( 8);"DIRECTORY OF THE 'DESTINATION' DISK." 1570 PRINT 1580 PRINT TAB( 8);"IF ATTEMPTING TO LIST THE DIRECTORY OF THE" 1590 PRINT TAB( 8);"'DESTINATION' DISK CAUSES A 'READY' PROMPT, THEN" 1600 PRINT TAB( 8);"ENTER CONT; IF THIS CAUSES A 'CONTINUE ERROR' PROMPT," 1610 PRINT TAB( 8);"THEN ENTER GO TO 10 TO AVOID RE-READING OR RE-SORTING."" 1620 PRINT 1630 PRINT TAB( 5);"7. C A U T I O N :" 1640 PRINT 1650 PRINT TAB( 8);"WHEN RE-INITIALIZING THE 'DESTINATION' DISK, IT IS" 1660 PRINT TAB( 8);"RECOMMENDED THAT THE DISK BE RE-FORMATTED FIRST." 1670 PRINT 1680 PRINT TAB( 8);"OTHERWISE, THE FCS> WRITE COMMAND MAY BE USED. EXAMPLE:" 1690 PRINT 1700 PRINT TAB( 14);"RESET,ESC D, WRITE 0 7000-7FFF" 1710 PRINT :PRINT 1720 PRINT TAB( 5):INPUT "PRESS ENTER TO CONTINUE - ";X 1730 PRINT 1740 GOTO 1830 1750 GOTO 3040 1760 REM ROUTINE TO LOAD MACHINE LANGUAGE PATCH TO READ 1770 REM KEYBOARD AS EACH KEY IS PRESSED. 1780 DATA 245,229,197,62,255,211,8 1790 DATA 1,206,40,205,36,0,202,-1,-1,11 1800 DATA 121,176,194,-1,-1,29,194,-1,-1,17,255,255,195 1810 DATA -1,-1,95,175,87,62,247,211,8,62,0 1820 DATA 50,255,129,193,225,241,201 1830 TM= PEEK (32940)+ 256* PEEK (32941):REM CURRENT TOP OF MEMORY 1840 GOSUB 4530:REM DETERMINE ROM VERSION 1850 REM CHECK TO SEE IF ALREADY LOADED 1860 IF TM> 65503THEN 1930:REM NOT LOADED 1870 IF TM < > 48975- 48 AND V678= 1THEN 1930 1880 RESTORE 1780 1890 FOR I= 1TO 48:READ A 1900 IF A> 0AND A< > PEEK (TM+ I)THEN I= 48:A= 999 1910 NEXT I 1920 IF A< 256THEN 2200:REM LOADED, TO SET JUMP 1930 REM LOAD PROGRAM 1940 IF V678= 0THEN 2070:REM SKIP LOAD FOR V8.79 1950 TM= 48975:REM FORCE FOR COPY.PRG 1960 Z= TM:AD= 32940:GOSUB 2160:CLEAR 200:GOSUB 4530 1970 DV= PEEK (33044)AND 1:REM LOAD DEVICE 1980 PLOT 12,15,6,2,3,1,20 1990 PRINT "LOAD";DV;":COPY.PRG;1" 2000 PLOT 27,27,27,11,3,0,8,11:REM CLEAR POSSIBLE FCS ERROR MSG 2010 PLOT 27,4:PRINT "LOAD";DV;":COPY.PRG;1":PLOT 27,27 2020 IF PEEK (29696)= 32THEN 2070 2030 PRINT "FAILED TO LOAD COPY" 2040 PRINT "FILE COPY.PRG;1 MUST BE ON LOAD DISK" 2050 PRINT "WHEN CPYAID IS LOADED AND RUN" 2060 PRINT "ON VERSION 6.78 FCS":END :RUN 2070 TM= PEEK (32940)+ 256* PEEK (32941)- 48:RESTORE 1780 2080 FOR I= 1TO 48:READ A:POKE TM+ I,A- (A< 0):NEXT I 2090 REM LOAD ADDRESSES 2100 Z= TM+ 33:AD= TM+ 15:GOSUB 2160 2110 Z= TM+ 11:AD= TM+ 21:GOSUB 2160 2120 Z= TM+ 8:AD= TM+ 25:GOSUB 2160 2130 Z= TM+ 36:AD= TM+ 31:GOSUB 2160 2140 GOTO 2180 2150 REM LOAD ADDRESS Z AT AD,AD+1 2160 ZZ= INT (Z/ 256):POKE AD,Z- 256* ZZ:POKE AD+ 1,ZZ:RETURN 2170 REM CHANGE END OF BASIC RAM 2180 Z= TM:AD= 32940:GOSUB 2160 2190 REM LOAD BASIC JUMP LOCATION 2200 Z= TM+ 1:AD= 33283:GOSUB 2160 2210 POKE 33282,195 2220 CLEAR 4000:GOSUB 4530 2230 MX= 86:KB= PEEK (33283)+ 256* PEEK (33284) 2240 PLOT 6,2,12,27,24 2250 REM 2260 PRINT "LATEST VERSIONS ARE IN GREEN." 2270 PRINT "MOVE CURSOR AND PRESS X TO SELECT FILE," 2280 PRINT "OR R TO SELECT FILE AND RESET VERSION NUMBER TO 01." 2290 PRINT "PRESS C TO CANCEL SELECTION." 2300 PRINT "PRESS ENTER TO COPY SELECTED FILES." 2310 PRINT "TO OTHER DISK" 2320 PRINT "HOLD DOWN X, R, C AND CURSOR DIRECTION KEYS TO REPEAT" 2330 PRINT "CAPACITY: LIMITED BY SCREEN DISPLAY TO 87 FILES" 2340 IF V678= 0THEN PLOT 10,10,10,10:GOTO 2380 2350 PLOT 10:PRINT "SPECIAL SUPPORT FOR DISK BASIC 6.78" 2360 PRINT "THIS VERSION USES A MODIFIED VERSION OF FCS COPY TO" 2370 PRINT "BYPASS A PROGRAM BUG IN THE ROM VERSION." 2380 PLOT 10,10:INPUT "ENTER ID OF SOURCE DISK(0 OR 1): ";FD$ 2390 IF FD$= "0" THEN TD$= "1":GOTO 2420 2400 IF FD$= "1" THEN TD$= "0":GOTO 2420 2410 GOTO 2380 2420 FOR N= 12TO 31:PLOT 3,0,N,11:NEXT :PLOT 3,0,12 2430 DIM BA(3),DE$(MX),DS(MX),NM$(1),TP$(1) 2440 BF= PEEK (32986)+ 256* PEEK (32987) 2450 BF= INT ((BF+ 200+ 256)/ 256)* 256 2460 DI= BF:GOSUB 4210:BF$= DO$ 2470 EB= 256* (PEEK (32941)- 18):REM END OF BUFFER AREA +1 2480 EB= EB- 128:TM= EB 2490 PLOT 10 2500 DI= EB:GOSUB 4210:PRINT "DISK BUFFER ";BF$;"-";DO$ 2510 MR= (EB- BF)/ 128 2520 REM SCAN DIRECTORY 2530 PLOT 3,0,15,11,7:PRINT "READING DIRECTORY" 2540 DX= 0:NB= 1:LS= 0:CR= 0:BA(1)= BF:BA(2)= EB:LB$= "" 2550 BA(2)= BA(1)+ 128* NB:IF BA(2)> EB THEN BA(2)= EB 2560 GOSUB 4270:REM READ DIR FROM DISK 2570 IF PEEK (BF+ 2)< > 65THEN 2600 2580 NB= PEEK (BF+ 1)+ 1 2590 FOR N= 1TO 10:LB$= LB$+ CHR$ (PEEK (BF+ 2+ N)):NEXT 2600 P= BF+ 2 2610 REM 2620 IF PEEK (P)= 1THEN 2830 2630 IF PEEK (P)< > 3THEN 2770 2640 IF DX> MX THEN PLOT 3,0,15,11:MX= MX+ 1:PRINT "DIRECTORY TOO LARGE(>";MX;" FILES) FOR INTERNAL TABLES":END :RUN 2650 N$= "" 2660 FOR N= 1TO 6:CH$= CHR$ (PEEK (P+ N)) 2670 N$= N$+ CHR$ (PEEK (P+ N)) 2680 NEXT 2690 DE$(DX)= N$ 2700 N$= "" 2710 FOR N= 7TO 9:CH$= CHR$ (PEEK (P+ N)) 2720 N$= N$+ CHR$ (PEEK (P+ N)) 2730 NEXT 2740 DE$(DX)= DE$(DX)+ N$ 2750 DE$(DX)= DE$(DX)+ CHR$ (PEEK (P+ 10))+ CHR$ (PEEK (P+ 13))+ CHR$ (PEEK (P+ 14)) 2760 DX= DX+ 1:PLOT 3,18,15:PRINT DX 2770 P= P+ 21 2780 IF INT (P/ 128)< > P/ 128THEN 2610 2790 P= P+ 2:NB= NB- 1 2800 IF P< BA(2)THEN 2610 2810 CR= CR+ (BA(2)+ 1- BA(1))/ 128 2820 GOTO 2550 2830 REM SORT DIRECTORY 2840 M= DX:IF M< 1THEN PLOT 10,10,11:PRINT "DIRECTORY IS EMPTY":END :RUN 2850 IF M= 1THEN 3040 2860 PLOT 3,0,15,11:PRINT "SORTING DIRECTORY" 2870 PLOT 10:PRINT "SORT INDEX", 2880 M= INT ((M+ 1)/ 2):PRINT M, 2890 REM GOSUB2100:PLOT0,30:END:REMDIAG 2900 IF M= 0THEN 3040 2910 K= DX- 1- M 2920 J= 0 2930 I= J 2940 L= I+ M 2950 IF DE$(I)< = DE$(L)THEN 3000 2960 N= N+ 1 2970 T$= DE$(I):DE$(I)= DE$(L):DE$(L)= T$ 2980 I= I- M 2990 IF I> = 1THEN 2940 3000 J= J+ 1 3010 IF J< = KTHEN 2930 3020 IF M< 2THEN 3040 3030 GOTO 2880 3040 PRINT "":REM EXIT SORT 3050 GOSUB 3730:REM PRINT ARRAY 3060 CC= 0 3070 SB= 28672:REM BASE FOR SCREEN REFRESH RAM 3080 SY= 6:SX= 0:REM INITIAL SCREEN WRITE POS 3090 REM SETUP KEYBD READ 3100 PLOT 27,27 3110 SY= 3:SX= 0:PLOT 3,0,3:SA= SB+ 3* 128:NS= 0 3120 REM READ KEYBOARD 3130 OUT 8,255:OUT 8,247 3140 IF PEEK (33252)< > 0 THEN KY= PEEK (33278):GOTO 3160 3150 KY= CALL (5):IF KY= - 1 THEN 3150 3160 IF KY= 10 THEN 3370:REM +Y 3170 IF KY= 28 THEN 3350:REM -Y 3180 IF KY= 26 THEN 3390:REM -X 3190 IF KY= 25 THEN 3410:REM +X 3200 IF KY= 9 THEN 3410:REM TAB+X 3210 IF KY= 13 THEN 3470:REM ENTER/RETURN 3220 IF KY< > 67 THEN 3260:REM C CANCEL 3230 FOR N= SA+ 1 TO SA+ 35 STEP 2 3240 POKE N,PEEK (N) AND 7:NEXT :REM RESET BACKGROUND COLOR 3250 DS(NS)= DS(NS)AND 240:GOTO 3370 3260 IF KY < > 88 THEN 3300:REM X SET 3270 FOR N= SA+ 1 TO SA+ 35 STEP 2 3280 POKE N,(PEEK (N)AND 7) OR 8:NEXT :REM SET BACKGROUND COLOR RED 3290 DS(NS)= (DS(NS)AND 240)OR 1:GOTO 3370 3300 IF KY < > 82 THEN 3120:REM R SET 3310 FOR N= SA+ 1 TO SA+ 35 STEP 2 3320 POKE N,(PEEK (N)AND 7) OR 32:NEXT :REM SET BACKGROUND COLOR BLUE 3330 DS(NS)= (DS(NS)AND 240)OR 2:GOTO 3370 3340 REM :CURSOR DIRECTION KEYS 3350 IF NS- 1< 0 THEN 3120:REM -Y 3360 NS= NS- 1:GOTO 3430 3370 IF NS+ 1> DX- 1 THEN 3120:REM +Y 3380 NS= NS+ 1:GOTO 3430 3390 IF NS- 29< 0 THEN 3120:REM -X 3400 NS= NS- 29:GOTO 3430 3410 IF NS+ 29> DX- 1 THEN 3120:REM +X 3420 NS= NS+ 29:GOTO 3430 3430 REM COMMON MOVE CURSOR 3440 SX= INT (NS/ 29):SY= NS- 29* SX+ 3:SX= 22* SX 3450 SA= SB+ 2* (SX+ 64* SY):PLOT 3,SX,SY 3460 GOTO 3120 3470 REM ENTER/RETURN--ISSUE FCS COPY COMMANDS 3480 PLOT 6,2,12:OUT 8,255 3490 IF DX< 0 THEN PRINT "NO FILES SPECIFIED.":END :RUN 3500 REM RELOAD BASIC JUMP LOCATION 3510 Z= 48976:AD= 33283:GOSUB 2160 3520 CP= 49016:REM LOCATION OF COPY PARM BUFFER-1 3530 FOR J= 0 TO DX- 1 3540 IF (DS(J)AND 7)= 0 THEN 3690 3550 CC= CC+ 1:X= 0:Z= J:GOSUB 3960 3560 X$= NM$(0):GOSUB 4090:T$= X$:F$= " "+ FD$+ ":" 3570 X$= TP$(0):GOSUB 4090:T$= T$+ "."+ X$:F$= F$+ T$ 3580 HI= ASC (MID$ (DE$(J),10,1)):GOSUB 4140 3590 F$= F$+ ";"+ HO$+ " TO "+ TD$+ ":"+ T$+ ";" 3600 IF (DS(J)AND 7)= 1THEN F$= F$+ HO$:GOTO 3620 3610 F$= F$+ "01" 3620 PRINT "COPY";F$ 3630 IF V678= 0THEN PLOT 27,4:PRINT "COPY";F$:PLOT 27,27:GOTO 3670 3640 FOR N= 1 TO LEN (F$) 3650 POKE CP+ N,ASC (MID$ (F$,N,1)):NEXT :POKE CP+ N,0:POKE CP+ N+ 1,0 3660 X= CALL (1):REM CALL COPY ROUTINE 3670 IF PEEK (SB+ 128)= 32THEN 3690 3680 DS(J)= (DS(J)OR 16):PRINT "COPY ERROR PRESS RETURN TO CONTINUE";:INPUT "";RP$ 3690 NEXT J 3700 Z= KB:AD= 33283:GOSUB 2160:REM BASIC JUMP TO KB PATCH 3710 IF CC> 0THEN 3050 3720 PLOT 27,11,27,4:PRINT "DIR ";TD$;":":PLOT 27,27:END :GOTO 3050 3730 REM PRINT CONTENTS OF DE$ IN 3-COLUMNS 3740 N= 0:PLOT 6,2,12,27,24:PRINT "CONTENTS OF CD";FD$;" ";LB$; 3750 PRINT " X SELECT. R SELECT/RESET VERS NO." 3760 PRINT TAB( 28);"C CANCEL. ENTER GO" 3770 FOR C= 0TO 2* 22 STEP 22 3780 FOR L= 3TO 31:PLOT 3,C,L,6,7 3790 DS= DS(N):IF (DSAND 15)< > 0THEN DS= ((DSAND 15)* 32)OR (DSAND 16):DS(N)= DS 3800 IF (DSAND 225)= 32THEN PLOT 30,17,29 3810 IF (DSAND 225)= 64THEN PLOT 30,20,29 3820 IF (DSAND 16)= 16THEN PLOT 31 3830 X= 0:Z= N:GOSUB 3960 3840 VN= ASC (MID$ (DE$(N),10,1)):SZ= ASC (MID$ (DE$(N),11,1)) 3850 SZ= SZ+ 256* ASC (MID$ (DE$(N),12,1)) 3860 IF N= MX THEN PLOT 18:GOTO 3890 3870 X= 1:Z= N+ 1:GOSUB 3960 3880 IF NM$(0)+ TP$(0)< > NM$(1)+ TP$(1) THEN PLOT 18 3890 PRINT NM$(0);".";TP$(0); 3900 REM PRINTN+1;TAB(5);NM$(0);".";TP$(0); 3910 HI= VN:GOSUB 4140:PRINT ";";HO$;" "; 3920 DI= SZ:GOSUB 4210:PRINT DO$ 3930 N= N+ 1:IF N> DX- 1THEN 3950 3940 NEXT L:NEXT C 3950 RETURN :REM EXIT 3960 NM$(X)= LEFT$ (DE$(Z),6):TP$(X)= MID$ (DE$(Z),7,3):RETURN 3970 REM CONVERT HEX STRING IN CI$ TO ARITH IN CO 3980 CO= 0 3990 IF MID$ (CI$,1,1)= "+"THEN CO= VAL (CI$):RETURN 4000 FOR I= 1TO LEN (CI$) 4010 C1= ASC (MID$ (CI$,I,1)) 4020 C2= 16 4030 IF C1> 47AND C1< 58THEN C2= C1- 48 4040 IF C1> 64AND C1< 71THEN C2= C1- 55:REM HEX A-F 4050 IF C2> 15THEN PRINT "HEX INPUT ERROR ";CI$:OUT 8,255:END 4060 CO= CO* 16+ C2 4070 NEXT I 4080 RETURN 4090 REM REMOVE TRL BLANKS FROM X$ 4100 IF LEN (X$)= 0THEN RETURN 4110 IF RIGHT$ (X$,1)< > " "THEN RETURN 4120 IF LEN (X$)= 1THEN X$= "":RETURN 4130 X$= LEFT$ (X$,LEN (X$)- 1):GOTO 4100 4140 REM CONVERT ARITH VALUE IN HI(0-255) TO TWO HEX CHAR 4150 REM IN HO$ 4160 IF HI< 0THEN HI= HI+ 256 4170 H0= INT (HI/ 16)+ 48:IF H0> 57 THEN H0= H0+ 7 4180 H1= (HIAND 15)+ 48:IF H1> 57 THEN H1= H1+ 7 4190 HO$= CHR$ (H0)+ CHR$ (H1) 4200 RETURN 4210 REM CONVERT TWO-BYTE VALUE TO 4-BYTE HEX STRING 4220 IF DI< 0THEN DI= DI+ 65536 4230 HI= INT (DI/ 256):GOSUB 4140:DO$= HO$ 4240 HI= (DI- HI* 256):GOSUB 4140 4250 DO$= DO$+ HO$ 4260 RETURN 4270 REM DISK READ SUBR 4280 REM CR=START SECTOR,BA(1)=BUFFER START, 4290 REM BA(2)=BUFFER END 4300 RS$= "READ CD"+ FD$+ ": " 4310 DI= CR:GOSUB 4210 4320 RS$= RS$+ DO$+ " " 4330 DI= BA(1):GOSUB 4210 4340 RS$= RS$+ DO$+ "-" 4350 DI= BA(2)- 1:GOSUB 4210:REM LIMITED BY BUFFER 4360 RS$= RS$+ DO$ 4370 PLOT 3,0,20,11 4380 PLOT 27,4:REM ACCESS FCS 4390 PRINT RS$:PLOT 27,27 4400 SM= 28672+ 20* 128:IF PEEK (SM)< > 32THEN 4430 4410 REM DETECT FCS DISK ERR MSG 4420 RETURN 4430 REM 4440 REM SECT. NUM. FRM FCS ERR MSG 4450 CI$= CHR$ (PEEK (SM+ 26)) 4460 CI$= CI$+ CHR$ (PEEK (SM+ 28)) 4470 CI$= CI$+ CHR$ (PEEK (SM+ 30)) 4480 CI$= CI$+ CHR$ (PEEK (SM+ 32)) 4490 GOSUB 3970 4500 PLOT 3,0,22 4510 PRINT "READ ERROR AT RECORD ";CO;"[";CI$;"]" 4520 END :RUN 4530 V678= 0:IF PEEK (1)+ 256* PEEK (2)= 14188 THEN V678= 1 4540 RETURN