home *** CD-ROM | disk | FTP | other *** search
- ;*** CP PROGRAM ***
-
- .SEQ ACEHEAD.S
- .ORG ACE┴PP┴DDRESS
- .OBJ "@0:CP"
-
- JMP COPYMAIN
- .BYTE ACE╔─1,ACE╔─2,ACE╔─3
- .BYTE 64,0 ;** STACK,RESERVED
-
- ;*** GLOBAL DECLARATIONS
-
- LIBWORK = $60
- CHR├╥ = $0D
- CHR╤UOTE = $22
- OVERWRITE┴LL╞LAG .BUF 1
- ABORT╞LAG .BUF 1
-
- ;******** STANDARD LIBRARY ********
- EPUTS = *
- LDX #STDERR
- JMP FPUTS
- PUTS = *
- LDX #STDOUT
- FPUTS = *
- STA ZP
- STY ZP+1
- LDY #$FF
- - INY
- LDA (ZP),Y
- BNE -
- TYA
- LDY #0
- JMP WRITE
-
- PUTCHAR = *
- LDX #STDOUT
- PUTC = *
- STA PUTC┬UFFER
- LDA #<PUTC┬UFFER
- LDY #>PUTC┬UFFER
- STA ZP
- STY ZP+1
- LDA #1
- LDY #0
- JMP WRITE
- PUTC┬UFFER .BUF 1
-
- GETCHAR = *
- LDX #STDIN
- GETC = *
- LDA #<GETC┬UFFER
- LDY #>GETC┬UFFER
- STA ZP
- STY ZP+1
- LDA #1
- LDY #0
- JSR READ
- BEQ +
- LDA GETC┬UFFER
- RTS
- + SEC
- RTS
- GETC┬UFFER .BUF 1
-
- ;===COPY LIBRARY===
- COPY┬UFFER╨TR = 2
- COPY┬UFFER╠ENGTH = 4
-
- GET┬UFFER╨ARMS = *
- LDA #<CP┼ND
- LDY #>CP┼ND
- STA COPY┬UFFER╨TR
- STY COPY┬UFFER╨TR+1
- SEC
- LDA ACE═EM╘OP+0
- SBC COPY┬UFFER╨TR
- STA COPY┬UFFER╠ENGTH
- LDA ACE═EM╘OP+1
- SBC COPY┬UFFER╨TR+1
- STA COPY┬UFFER╠ENGTH+1
- RTS
-
- GETARG = *
- STY ZP+1
- ASL
- STA ZP
- ROL ZP+1
- CLC
- LDA ACE┴RGV
- ADC ZP
- STA ZP
- LDA ACE┴RGV+1
- ADC ZP+1
- STA ZP+1
- LDY #0
- LDA (ZP),Y
- TAX
- INY
- LDA (ZP),Y
- STX ZP
- STA ZP+1
- RTS
-
- GET╠AST┴RG = *
- LDA ACE┴RGC
- LDY ACE┴RGC+1
- SEC
- SBC #1
- BCS +
- DEY
- + JMP GETARG
-
- ;===COPY===
- COPY╔N╞ILE = 6
- COPY╧UT╞ILE = 7
- COPY╔N╬AME = 8
- COPY╧UT╬AME = 10
- BASE┴RG = $48
-
- COPYMAIN = *
- LDA #0
- STA OVERWRITE┴LL╞LAG
- STA ABORT╞LAG
- JSR GET┬UFFER╨ARMS
- ;** CHECK FOR AT LEAST THREE ARGUMENTS
- LDA ACE┴RGC+1
- BNE +
- LDA ACE┴RGC
- CMP #3
- BCC COPY╒SAGE┼RROR
- ;** CHECK FOR FIRST ARGUMENT BEING "-F"
- + LDA #1
- STA BASE┴RG
- LDA #1
- LDY #0
- JSR GETARG
- LDY #0
- LDA (ZP),Y
- CMP #"-"
- BNE +
- INY
- LDA (ZP),Y
- CMP #"F"
- BNE +
- INY
- LDA (ZP),Y
- CMP #0
- BNE +
- LDA #$FF
- STA OVERWRITE┴LL╞LAG
- INC BASE┴RG
- ;** CHECK IF DESTINATION IS A DIRECTORY
- + JSR GET╠AST┴RG
- JSR ISDIR
- CPY #0
- BEQ +
- JMP COPY╘O─IR
- ;** CHECK FOR EXACTLY THREE PARAMETERS
- + LDA ACE┴RGC+1
- BNE COPY╒SAGE┼RROR
- SEC
- LDA ACE┴RGC
- SBC BASE┴RG
- CMP #2
- BNE COPY╒SAGE┼RROR
- ;** GET BUFFER PARAMETERS
- LDA BASE┴RG
- LDY #0
- JSR GETARG
- LDA ZP
- LDY ZP+1
- STA COPY╔N╬AME
- STY COPY╔N╬AME+1
- INC BASE┴RG
- LDA BASE┴RG
- LDY #0
- JSR GETARG
- LDA ZP
- LDY ZP+1
- STA COPY╧UT╬AME
- STY COPY╧UT╬AME+1
- JSR COPYFILE
- RTS
-
- COPY╒SAGE┼RROR = *
- LDA #<COPY╒SAGE┼RROR═SG
- LDY #>COPY╒SAGE┼RROR═SG
- LDX #STDERR
- JSR FPUTS
- RTS
- COPY╒SAGE┼RROR═SG = *
- .ASC "USAGE: CP FROMFILE TOFILE"
- .BYTE CHR├╥
- .ASC " CP FROMFILE1 FROM2 ...FROM╬ TODIR"
- .BYTE CHR├╥,0
-
- COPYFILE = *
- ;** OPEN FILES
- LDA COPY╔N╬AME
- LDY COPY╔N╬AME+1
- STA ZP
- STY ZP+1
- LDA #"R"
- JSR OPEN
- BCC +
- LDA COPY╔N╬AME
- LDY COPY╔N╬AME+1
- JMP COPY╧PEN┼RROR
- + STA COPY╔N╞ILE
- COPYFILE╧UTPUT = *
- LDA COPY╧UT╬AME
- LDY COPY╧UT╬AME+1
- STA ZP
- STY ZP+1
- LDA #"W"
- JSR OPEN
- BCC COPY╫RITE╧K
- LDA ERRNO
- CMP #ACE┼RR╞ILE┼XISTS
- BEQ +
- - LDA COPY╔N╞ILE
- JSR CLOSE
- LDA COPY╧UT╬AME
- LDY COPY╧UT╬AME+1
- JMP COPY╧PEN┼RROR
- + JSR COPY┴SK╧VERWRITE
- BEQ +
- LDA COPY╔N╞ILE
- JSR CLOSE
- SEC
- RTS
- + JSR COPY╥EMOVE╧UTFILE
- JMP COPYFILE╧UTPUT
-
- COPY╫RITE╧K = *
- STA COPY╧UT╞ILE
- JSR COPY╞ILE├ONTENTS
- LDA COPY╧UT╞ILE
- JSR CLOSE
- LDA COPY╔N╞ILE
- JSR CLOSE
- RTS
-
- COPY┴SK╧VERWRITE = * ;() : .├╙=QUIT, .┼╤=YES, .╬┼=NO
- LDA OVERWRITE┴LL╞LAG
- BEQ +
- LDA #0
- RTS
- / LDA #<COPY┴SK╧VERWRITE═SG
- LDY #>COPY┴SK╧VERWRITE═SG
- JSR PUTS
- LDA COPY╧UT╬AME
- LDY COPY╧UT╬AME+1
- JSR PUTS
- LDA #<COPY┴SK╧VERWRITE═SG2
- LDY #>COPY┴SK╧VERWRITE═SG2
- JSR PUTS
- JSR GETCHAR
- CMP #CHR├╥
- BEQ -
- PHA
- - JSR GETCHAR
- CMP #CHR├╥
- BNE -
- PLA
- CMP #"Q"
- BNE +
- - LDA #$FF
- STA ABORT╞LAG
- SEC
- RTS
- + CMP #"╤"
- BEQ -
- CMP #"A"
- BNE +
- - LDA #$FF
- STA OVERWRITE┴LL╞LAG
- LDA #"Y"
- + CMP #"┴"
- BEQ -
- CMP #"Y"
- BEQ +
- CMP #"┘"
- + CLC
- RTS
- COPY┴SK╧VERWRITE═SG = *
- .ASC "╧VERWRITE "
- .BYTE CHR╤UOTE,0
- COPY┴SK╧VERWRITE═SG2 = *
- .BYTE CHR╤UOTE
- .ASC " (Y/N/A/Q)? "
- .BYTE 0
-
- COPY╥EMOVE╧UTFILE = *
- LDA COPY╧UT╬AME
- LDY COPY╧UT╬AME+1
- STA ZP
- STY ZP+1
- JSR REMOVE
- RTS
-
- COPY╞ILE├ONTENTS = *
- ;** COPY FILE CONTENTS
- LDA COPY┬UFFER╨TR
- LDY COPY┬UFFER╨TR+1
- STA ZP
- STY ZP+1
- - JSR CHECKSTOP
- LDA COPY┬UFFER╠ENGTH
- LDY COPY┬UFFER╠ENGTH+1
- LDX COPY╔N╞ILE
- JSR READ
- BCS ++
- BEQ +
- PHA
- TYA
- PHA
- JSR CHECKSTOP
- PLA
- TAY
- PLA
- LDX COPY╧UT╞ILE
- JSR WRITE
- BCC -
- BCS COPY╞ILE┼RROR
- + RTS
- + JMP COPY╞ILE┼RROR
-
- COPY╧PEN╬AME = 14
- CP┼RRNO = $50
- CP╬UMBUF .BUF 12
- COPY╧PEN┼RROR = *
- LDX ERRNO
- STX CP┼RRNO+0
- STA COPY╧PEN╬AME
- STY COPY╧PEN╬AME+1
- LDA #<COPY╧PEN┼RROR═SG1
- LDY #>COPY╧PEN┼RROR═SG1
- LDX #STDERR
- JSR FPUTS
- LDA COPY╧PEN╬AME
- LDY COPY╧PEN╬AME+1
- LDX #STDERR
- JSR FPUTS
- LDA #<COPY╧PEN┼RROR═SG2
- LDY #>COPY╧PEN┼RROR═SG2
- LDX #STDERR
- JSR FPUTS
- LDA #0
- STA CP┼RRNO+1
- STA CP┼RRNO+2
- STA CP┼RRNO+3
- LDA #<CP╬UMBUF
- LDY #>CP╬UMBUF
- STA ZP+0
- STY ZP+1
- LDX #CP┼RRNO
- LDA #1
- JSR UTOA
- LDA #<CP╬UMBUF
- LDY #>CP╬UMBUF
- LDX #STDERR
- JSR FPUTS
- LDA #<COPY╧PEN┼RROR═SG3
- LDY #>COPY╧PEN┼RROR═SG3
- LDX #STDERR
- JSR FPUTS
- RTS
-
- COPY╧PEN┼RROR═SG1 = *
- .ASC "┼RROR OPENING FILE "
- .BYTE CHR╤UOTE
- .BYTE 0
- COPY╧PEN┼RROR═SG2 = *
- .BYTE CHR╤UOTE
- .ASC ", CODE "
- .BYTE 0
- COPY╧PEN┼RROR═SG3 = *
- .BYTE CHR├╥
- .BYTE 0
-
- COPY╞ILE┼RROR = *
- LDA #<COPY╞ILE┼RROR═SG
- LDY #>COPY╞ILE┼RROR═SG
- LDX #STDERR
- JMP FPUTS
- COPY╞ILE┼RROR═SG = *
- .ASC "╞ILE DATA ERROR!"
- .BYTE CHR├╥
- .BYTE 0
-
- COPY┴RG = 12
- LAST┴RG = 14
- COPY╘O─IR = *
- LDA BASE┴RG
- LDY #0
- STA COPY┴RG
- STY COPY┴RG+1
- - LDA ACE┴RGC
- LDY ACE┴RGC+1
- SEC
- SBC #1
- BCS +
- DEY
- + CMP COPY┴RG
- BNE +
- CPY COPY┴RG+1
- BEQ COPY╘O─IR┼XIT
- + JSR CHECKSTOP
- LDA COPY┴RG
- LDY COPY┴RG+1
- JSR GETARG
- LDA ZP
- LDY ZP+1
- STA COPY╔N╬AME
- STY COPY╔N╬AME+1
- JSR COPY╞ILE╘O─IR
- LDA ABORT╞LAG
- BNE COPY╘O─IR╙TOPPED
- INC COPY┴RG
- BNE +
- INC COPY┴RG+1
- + JMP -
-
- COPY╘O─IR┼XIT = *
- RTS
-
- CHECKSTOP = *
- JSR STOPKEY
- BCS +
- RTS
- COPY╘O─IR╙TOPPED = *
- + LDA #<STOPPED═SG
- LDY #>STOPPED═SG
- JSR EPUTS
- LDA #1
- LDX #0
- JMP EXIT
-
- STOPPED═SG = *
- .ASC "<╙TOPPED>"
- .BYTE CHR├╥,0
-
- SCAN╨OS = 6
-
- COPY╞ILE╘O─IR = *
- ;** GENERATE OUTPUT FILE NAME
- JSR GET╠AST┴RG
- LDY #0
- - LDA (ZP),Y
- BEQ +
- STA COPY╬AME┬UF,Y
- INY
- BNE -
- + TYA
- TAX
- ;** EXTRACT BASENAME
- LDY #0
- STY SCAN╨OS
- - LDA (COPY╔N╬AME),Y
- BEQ +
- CMP #":"
- BNE BASENAME╬EXT
- INY
- STY SCAN╨OS
- DEY
- BASENAME╬EXT = *
- INY
- BNE -
-
- + LDY SCAN╨OS
- - LDA (COPY╔N╬AME),Y
- STA COPY╬AME┬UF,X
- BEQ +
- INX
- INY
- BNE -
- ;** COPY FILE
- + LDA #<COPY╬AME┬UF
- LDY #>COPY╬AME┬UF
- STA COPY╧UT╬AME
- STY COPY╧UT╬AME+1
- JSR COPY╘O─IR╙TATUS
- JSR COPYFILE
- RTS
-
- NAME╙PACE .BUF 1
-
- COPY╘O─IR╙TATUS = *
- LDA COPY╔N╬AME
- LDY COPY╔N╬AME+1
- JSR PUTS
-
- LDY #255
- - INY
- LDA (COPY╔N╬AME),Y
- BNE -
- TYA
- - SEC
- SBC #10
- BCS -
- ADC #10
- STA NAME╙PACE
- STA NAME╙PACE
- SEC
- LDA #10
- SBC NAME╙PACE
- STA NAME╙PACE
-
- - LDA #" "
- JSR PUTCHAR
- DEC NAME╙PACE
- BNE -
-
- LDA COPY╧UT╬AME
- LDY COPY╧UT╬AME+1
- JSR PUTS
- LDA #CHR├╥
- JSR PUTCHAR
- RTS
-
- ;===THE END===
- CP┬SS = *
- COPY╬AME┬UF = CP┬SS+0
- CP┼ND = CP┬SS+256
-