Random software
Random software
Random software
Entry name:
 Disk Duplicate Program 
Publisher/Developer:

BELLCOM - Public Domain Library
(Software library)
  • Category:

    Disk utilities
  • Media format:

    Diskette
  • Programming language:

    Atari BASIC
Disk Duplicate Program Disk Duplicate Program Disk Duplicate Program
Listing 1
100REMDISKDUPLICATEPROGRAM06/25/81
110REMDUPLICATESD1TOD1ORD1TOD2
120REMALPHABETIZESFILES
900DIMCIO$(7):CIO$="hV`":REMPLA/LDX#$10/JSRCIO/RTS
910DIMCIO2$(7):CIO2$="hV`":REMPLA/LDX#$20/JSRCIO/RTS
1000DIMA$(1),DRV2$(1)
1010?"":?"HaveyouformattedandwrittenaDOS"
1020?"fileonthenewdisk";:INPUTA$
1030IFA$<>"Y"THENEND
1040?"Use2drives";:INPUTDRV2$
1100?"Entersourcedisk(DRIVE1)";:INPUTA$
1105IFDRV2$="Y"THEN?"Enterdestinationdisk(DRIVE2)";:INPUTA$
1110OPEN#1,6,0,"D:*.*"
1120DIMNAMES$(28*11),LOCK$(28),STRT(28),LENG(28),LINE$(30),TMP$(15),FILE$(15),USED(28)
1121BUFLEN=50*INT((FRE(0)-256)/50):DIMBUF$(BUFLEN)
1124FORI=1TOBUFLENSTEP50:BUF$(LEN(BUF$)+1)="":NEXTI
1125?"EnterYtoduplicatefile:"
1130FILES=0
1140TRAP1200
1150INPUT#1,LINE$
1155?LINE$;
1160IFLINE$(10,16)="SECTORS"THEN1205
1165IFLINE$(3,13)="DOSSYS"THEN?:GOTO1150
1166IFLINE$(3,13)="DUPSYS"THEN?:GOTO1150
1167IFLINE$(3,13)="MEMSAV"THEN?:GOTO1150
1169IFLINE$(3,10)="BAD"THEN1150:REMIGNOREBADFILES
1170?"dupl(Y/N)?";
1175OPEN#2,4,0,"K:":GET#2,I:CLOSE#2:?CHR$(I):IFI<>ASC("Y")THEN1150
1179FILES=FILES+1
1180NAMES$(FILES*11-10,FILES*11)=LINE$(3,13)
1185LOCK$(FILES)=LINE$(1,1)
1190GOTO1150
1200REMSTARTUPCOPY
1201FILES=FILES-1
1205CLOSE#1:TRAP40000:?
1210FORI=1TOFILES:STRT(I)=0:USED(I)=0:NEXTI
1220INFILE=1:OUTFILE=1
1230APPND=0
1300REMSETUPBUFFERFORCOPYFROMSOURCETODESTINATION
1310INDEX=1
1400IFINFILE>FILESTHEN2000:REMNOMOREFILES
1405IFSTRT(INFILE)>0THEN1412:REMCONTINUEPREVIOUSFILE
1410GOSUB20000:REMFILENOISSMALLEST(ALPHA)FILEINDEX
1411USED(FILENO)=INFILE
1412FILE$=NAMES$(FILENO*11-10,FILENO*11)
1415?"INPUT:";FILE$(1,8);"";FILE$(9,11),
1420GOSUB10000:REMFIXFILENAME
1430OPEN#1,4,0,FILE$
1440IFSTRT(INFILE)<>0THENPOINT#1,INA,INB:APPND=1:OUTFILE=OUTFILE-1
1450STRT(INFILE)=INDEX:LENG(INFILE)=0
1500REMCOPYFILETOMEMORY
1505RETRY=0
1510GOSUB11000:REMREADCHARACTERSINTOBUF$
1520IFISTAT=136THEN1600
1530IFINDEX>BUFLEN+1THEN?"READERROR":STOP
1540IFISTAT<=1THEN1700
1550IFRETRY<5THENRETRY=RETRY+1:?"ERROR-";ISTAT:GOTO1510
1560?"ERRORAFTER5RETRIES,COPYABORTED.":STOP
1600REMEND-OF-FILE
1605?LENG(INFILE)
1620CLOSE#1
1630INFILE=INFILE+1
1640IFBUFLEN+1-INDEX>=125THEN1400
1650GOTO1720:REMBUFFERDOESNOTHAVEROOMFORANOTHERSECTOR
1700REMBUFFERFULL
1705?LENG(INFILE);"*"
1710NOTE#1,INA,INB
1720CLOSE#1
2000REMCOPYBUFFERTODESTINATIONDISK
2005OUTIND=1
2010IFINDEX=1THEN3000:REMBUFFEREMPTY
2020IFDRV2$<>"Y"THEN?"Enterdestinationdisk";:INPUTA$
2030FORI=1TOFILES:IFUSED(I)=OUTFILETHENFILENO=I
2031NEXTI:REMFINDFILEINLIST
2032FILE$=NAMES$(FILENO*11-10,FILENO*11)
2035?"OUTPUT:";FILE$(1,8);"";FILE$(9,11)
2040GOSUB10000:REMFIXFILENAME
2041IFDRV2$="Y"THENTMP$=FILE$(3):FILE$="D2:":FILE$(4)=TMP$:REMD2:XXXXXXXX.XXX
2050IFAPPND<>0THEN2100
2060REMOPENFILEFIRSTTIME
2070OPEN#2,8,0,FILE$
2080GOTO2200
2100REMRE-OPENFILE(APPEND)
2110IFDRV2$<>"Y"THENOPEN#2,9,0,FILE$:REMAPPENDWHENONLY1DRIVE
2200REMCOPYFILES
2210APPND=0
2220GOSUB12000:REMWRITEOUTFILE
2260IFINFILE<>OUTFILEORDRV2$<>"Y"THENCLOSE#2:REMCLOSEONLYIFFILEFINISHED,LEAVEOPENFORAPPEND(2DRV)
2300OUTFILE=OUTFILE+1
2310IFOUTIND<INDEXTHEN2030
3000REMCHECKIFFINISHED
3010IFINFILE>FILESTHEN4000
3020IFDRV2$<>"Y"THEN?"Entersourcedisk";:INPUTA$
3030GOTO1300
4000REMFINISHED,NOWPROTECTFILES
4010FORI=1TOFILES:IFLOCK$(I,I)="*"THEN4020:NEXTI:GOTO5000
4020IFINDEX=1THEN?"Enterdestinationdisk";:INPUTA$
4030FORJ=1TOFILES
4040IFLOCK$(J,J)=""THEN4100
4050FILE$=NAMES$(J*11-10,J*11)
4060?"LOCK:";FILE$
4070GOSUB10000:REMFIXFILENAME
4075IFDRV2$="Y"THENTMP$=FILE$(3):FILE$="D2:":FILE$(4)=TMP$:REMUSED2:
4080XIO35,#1,0,0,FILE$
4100NEXTJ
5000REMDONE
5010?"Copycomplete."
5020STOP
10000REMFIXFILENAME
10010TMP$=FILE$
10020FILE$="D:"
10030FORI=1TO8
10040IFTMP$(I,I)=""THEN10100
10050FILE$(LEN(FILE$)+1)=TMP$(I,I)
10060NEXTI
10100FILE$(LEN(FILE$)+1)="."
10110FILE$(LEN(FILE$)+1)=TMP$(9,11)
10120RETURN
11000REMREADINTOBUF$
11010POKE850,7:REMREADCHARACTERS
11020I=ADR(BUF$(INDEX))
11030POKE852,I-256*INT(I/256):POKE853,INT(I/256)
11040I=BUFLEN+1-INDEX
11045I=125*INT(I/125):REMDON'TREADAPARTIALSECTORATTHEENDOFTHEBUFFER
11050POKE856,I-256*INT(I/256):POKE857,INT(I/256)
11060I=USR(ADR(CIO$))
11070I=PEEK(856)+256*PEEK(857)
11075ISTAT=PEEK(851):IFISTAT>1ANDISTAT<>136THENRETURN
11080LENG(INFILE)=LENG(INFILE)+I
11090INDEX=INDEX+I
11110RETURN
12000REMWRITEFROMBUF$
12010POKE866,11:REMWRITECHARACTERS
12020I=ADR(BUF$(OUTIND))
12030POKE868,I-256*INT(I/256):POKE869,INT(I/256)
12040I=LENG(OUTFILE)
12050POKE872,I-256*INT(I/256):POKE873,INT(I/256)
12060I=USR(ADR(CIO2$))
12070IFPEEK(867)>1THEN?"WRITEERROR:";ISTAT:STOP
12080OUTIND=OUTIND+LENG(OUTFILE)
12090RETURN
20000REMGETNEXT(ALPHA)FILENAME
20010REMFILENO=INDEXOFLOWESTNAME
20020FILENO=-1:FILE$="||||||||||||"
20030FORI=1TOFILES
20040IFUSED(I)<>0THEN20900
20050IFFILE$<NAMES$(I*11-10,I*11)THEN20900
20060FILE$=NAMES$(I*11-10,I*11)
20070FILENO=I
20900NEXTI
20910RETURN	

This is non-commercial site, its content is based on Atari 8-bit home computer contents and references.
If you feel your rights are violated by showing/using any part of contents of your product represented on this page, please contact me immediatelly so I can remove it!