Compucolor.org – Virtual Media

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