home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64-128Toolkit / ACE-R11-SCR2.ARC / CP.S < prev    next >
Encoding:
Text File  |  2019-04-13  |  7.4 KB  |  527 lines

  1. ;*** CP PROGRAM ***
  2.  
  3. .SEQ ACEHEAD.S
  4. .ORG ACE┴PP┴DDRESS
  5. .OBJ "@0:CP"
  6.  
  7. JMP COPYMAIN
  8. .BYTE ACE╔─1,ACE╔─2,ACE╔─3
  9. .BYTE 64,0  ;** STACK,RESERVED
  10.  
  11. ;*** GLOBAL DECLARATIONS
  12.  
  13. LIBWORK = $60
  14. CHR├╥ = $0D
  15. CHR╤UOTE = $22
  16. OVERWRITE┴LL╞LAG .BUF 1
  17. ABORT╞LAG .BUF 1
  18.  
  19. ;******** STANDARD LIBRARY ********
  20. EPUTS = *
  21.    LDX #STDERR
  22.    JMP FPUTS
  23. PUTS = *
  24.    LDX #STDOUT
  25. FPUTS = *
  26.    STA ZP
  27.    STY ZP+1
  28.    LDY #$FF
  29. -  INY
  30.    LDA (ZP),Y
  31.    BNE -
  32.    TYA
  33.    LDY #0
  34.    JMP WRITE
  35.  
  36. PUTCHAR = *
  37.    LDX #STDOUT
  38. PUTC = *
  39.    STA PUTC┬UFFER
  40.    LDA #<PUTC┬UFFER
  41.    LDY #>PUTC┬UFFER
  42.    STA ZP
  43.    STY ZP+1
  44.    LDA #1
  45.    LDY #0
  46.    JMP WRITE
  47.    PUTC┬UFFER .BUF 1
  48.  
  49. GETCHAR = *
  50.    LDX #STDIN
  51. GETC = *
  52.    LDA #<GETC┬UFFER
  53.    LDY #>GETC┬UFFER
  54.    STA ZP
  55.    STY ZP+1
  56.    LDA #1
  57.    LDY #0
  58.    JSR READ
  59.    BEQ +
  60.    LDA GETC┬UFFER
  61.    RTS
  62. +  SEC
  63.    RTS
  64.    GETC┬UFFER .BUF 1
  65.  
  66. ;===COPY LIBRARY===
  67. COPY┬UFFER╨TR = 2
  68. COPY┬UFFER╠ENGTH = 4
  69.  
  70. GET┬UFFER╨ARMS = *
  71.    LDA #<CP┼ND
  72.    LDY #>CP┼ND
  73.    STA COPY┬UFFER╨TR
  74.    STY COPY┬UFFER╨TR+1
  75.    SEC
  76.    LDA ACE═EM╘OP+0
  77.    SBC COPY┬UFFER╨TR
  78.    STA COPY┬UFFER╠ENGTH
  79.    LDA ACE═EM╘OP+1
  80.    SBC COPY┬UFFER╨TR+1
  81.    STA COPY┬UFFER╠ENGTH+1
  82.    RTS
  83.  
  84. GETARG = *
  85.    STY ZP+1
  86.    ASL
  87.    STA ZP
  88.    ROL ZP+1
  89.    CLC
  90.    LDA ACE┴RGV
  91.    ADC ZP
  92.    STA ZP
  93.    LDA ACE┴RGV+1
  94.    ADC ZP+1
  95.    STA ZP+1
  96.    LDY #0
  97.    LDA (ZP),Y
  98.    TAX
  99.    INY
  100.    LDA (ZP),Y
  101.    STX ZP
  102.    STA ZP+1
  103.    RTS
  104.  
  105. GET╠AST┴RG = *
  106.    LDA ACE┴RGC
  107.    LDY ACE┴RGC+1
  108.    SEC
  109.    SBC #1
  110.    BCS +
  111.    DEY
  112. +  JMP GETARG
  113.  
  114. ;===COPY===
  115. COPY╔N╞ILE = 6
  116. COPY╧UT╞ILE = 7
  117. COPY╔N╬AME = 8
  118. COPY╧UT╬AME = 10
  119. BASE┴RG = $48
  120.  
  121. COPYMAIN = *
  122.    LDA #0
  123.    STA OVERWRITE┴LL╞LAG
  124.    STA ABORT╞LAG
  125.    JSR GET┬UFFER╨ARMS
  126.    ;** CHECK FOR AT LEAST THREE ARGUMENTS
  127.    LDA ACE┴RGC+1
  128.    BNE +
  129.    LDA ACE┴RGC
  130.    CMP #3
  131.    BCC COPY╒SAGE┼RROR
  132.    ;** CHECK FOR FIRST ARGUMENT BEING "-F"
  133. +  LDA #1
  134.    STA BASE┴RG
  135.    LDA #1
  136.    LDY #0
  137.    JSR GETARG
  138.    LDY #0
  139.    LDA (ZP),Y
  140.    CMP #"-"
  141.    BNE +
  142.    INY
  143.    LDA (ZP),Y
  144.    CMP #"F"
  145.    BNE +
  146.    INY
  147.    LDA (ZP),Y
  148.    CMP #0
  149.    BNE +
  150.    LDA #$FF
  151.    STA OVERWRITE┴LL╞LAG
  152.    INC BASE┴RG
  153.    ;** CHECK IF DESTINATION IS A DIRECTORY
  154. +  JSR GET╠AST┴RG
  155.    JSR ISDIR
  156.    CPY #0
  157.    BEQ +
  158.    JMP COPY╘O─IR
  159.    ;** CHECK FOR EXACTLY THREE PARAMETERS
  160. +  LDA ACE┴RGC+1
  161.    BNE COPY╒SAGE┼RROR
  162.    SEC
  163.    LDA ACE┴RGC
  164.    SBC BASE┴RG
  165.    CMP #2
  166.    BNE COPY╒SAGE┼RROR
  167.    ;** GET BUFFER PARAMETERS
  168.    LDA BASE┴RG
  169.    LDY #0
  170.    JSR GETARG
  171.    LDA ZP
  172.    LDY ZP+1
  173.    STA COPY╔N╬AME
  174.    STY COPY╔N╬AME+1
  175.    INC BASE┴RG
  176.    LDA BASE┴RG
  177.    LDY #0
  178.    JSR GETARG
  179.    LDA ZP
  180.    LDY ZP+1
  181.    STA COPY╧UT╬AME
  182.    STY COPY╧UT╬AME+1
  183.    JSR COPYFILE
  184.    RTS
  185.  
  186. COPY╒SAGE┼RROR = *
  187.    LDA #<COPY╒SAGE┼RROR═SG
  188.    LDY #>COPY╒SAGE┼RROR═SG
  189.    LDX #STDERR
  190.    JSR FPUTS
  191.    RTS
  192.    COPY╒SAGE┼RROR═SG = *
  193.    .ASC "USAGE: CP FROMFILE TOFILE"
  194.    .BYTE CHR├╥
  195.    .ASC "       CP FROMFILE1 FROM2 ...FROM╬ TODIR"
  196.    .BYTE CHR├╥,0
  197.  
  198. COPYFILE = *
  199.    ;** OPEN FILES
  200.    LDA COPY╔N╬AME
  201.    LDY COPY╔N╬AME+1
  202.    STA ZP
  203.    STY ZP+1
  204.    LDA #"R"
  205.    JSR OPEN
  206.    BCC +
  207.    LDA COPY╔N╬AME
  208.    LDY COPY╔N╬AME+1
  209.    JMP COPY╧PEN┼RROR
  210. +  STA COPY╔N╞ILE
  211. COPYFILE╧UTPUT = *
  212.    LDA COPY╧UT╬AME
  213.    LDY COPY╧UT╬AME+1
  214.    STA ZP
  215.    STY ZP+1
  216.    LDA #"W"
  217.    JSR OPEN
  218.    BCC COPY╫RITE╧K
  219.    LDA ERRNO
  220.    CMP #ACE┼RR╞ILE┼XISTS
  221.    BEQ +
  222. -  LDA COPY╔N╞ILE
  223.    JSR CLOSE
  224.    LDA COPY╧UT╬AME
  225.    LDY COPY╧UT╬AME+1
  226.    JMP COPY╧PEN┼RROR
  227. +  JSR COPY┴SK╧VERWRITE
  228.    BEQ +
  229.    LDA COPY╔N╞ILE
  230.    JSR CLOSE
  231.    SEC
  232.    RTS
  233. +  JSR COPY╥EMOVE╧UTFILE
  234.    JMP COPYFILE╧UTPUT
  235.  
  236.    COPY╫RITE╧K = *
  237.    STA COPY╧UT╞ILE
  238.    JSR COPY╞ILE├ONTENTS
  239.    LDA COPY╧UT╞ILE
  240.    JSR CLOSE
  241.    LDA COPY╔N╞ILE
  242.    JSR CLOSE
  243.    RTS
  244.  
  245. COPY┴SK╧VERWRITE = *  ;() : .├╙=QUIT, .┼╤=YES, .╬┼=NO
  246.    LDA OVERWRITE┴LL╞LAG
  247.    BEQ +
  248.    LDA #0
  249.    RTS
  250. /  LDA #<COPY┴SK╧VERWRITE═SG
  251.    LDY #>COPY┴SK╧VERWRITE═SG
  252.    JSR PUTS
  253.    LDA COPY╧UT╬AME
  254.    LDY COPY╧UT╬AME+1
  255.    JSR PUTS
  256.    LDA #<COPY┴SK╧VERWRITE═SG2
  257.    LDY #>COPY┴SK╧VERWRITE═SG2
  258.    JSR PUTS
  259.    JSR GETCHAR
  260.    CMP #CHR├╥
  261.    BEQ -
  262.    PHA
  263. -  JSR GETCHAR
  264.    CMP #CHR├╥
  265.    BNE -
  266.    PLA
  267.    CMP #"Q"
  268.    BNE +
  269. -  LDA #$FF
  270.    STA ABORT╞LAG
  271.    SEC
  272.    RTS
  273. +  CMP #"╤"
  274.    BEQ -
  275.    CMP #"A"
  276.    BNE +
  277. -  LDA #$FF
  278.    STA OVERWRITE┴LL╞LAG
  279.    LDA #"Y"
  280. +  CMP #"┴"
  281.    BEQ -
  282.    CMP #"Y"
  283.    BEQ +
  284.    CMP #"┘"
  285. +  CLC
  286.    RTS
  287.    COPY┴SK╧VERWRITE═SG = *
  288.    .ASC "╧VERWRITE "
  289.    .BYTE CHR╤UOTE,0
  290.    COPY┴SK╧VERWRITE═SG2 = *
  291.    .BYTE CHR╤UOTE
  292.    .ASC " (Y/N/A/Q)? "
  293.    .BYTE 0
  294.  
  295. COPY╥EMOVE╧UTFILE = *
  296.    LDA COPY╧UT╬AME
  297.    LDY COPY╧UT╬AME+1
  298.    STA ZP
  299.    STY ZP+1
  300.    JSR REMOVE
  301.    RTS
  302.  
  303. COPY╞ILE├ONTENTS = *
  304.    ;** COPY FILE CONTENTS
  305.    LDA COPY┬UFFER╨TR
  306.    LDY COPY┬UFFER╨TR+1
  307.    STA ZP
  308.    STY ZP+1
  309. -  JSR CHECKSTOP
  310.    LDA COPY┬UFFER╠ENGTH
  311.    LDY COPY┬UFFER╠ENGTH+1
  312.    LDX COPY╔N╞ILE
  313.    JSR READ
  314.    BCS ++
  315.    BEQ +
  316.    PHA
  317.    TYA
  318.    PHA
  319.    JSR CHECKSTOP
  320.    PLA
  321.    TAY
  322.    PLA
  323.    LDX COPY╧UT╞ILE
  324.    JSR WRITE
  325.    BCC -
  326.    BCS COPY╞ILE┼RROR
  327. +  RTS
  328. +  JMP COPY╞ILE┼RROR
  329.    
  330.    COPY╧PEN╬AME = 14
  331. CP┼RRNO = $50
  332. CP╬UMBUF .BUF 12
  333.    COPY╧PEN┼RROR = *
  334.    LDX ERRNO
  335.    STX CP┼RRNO+0
  336.    STA COPY╧PEN╬AME
  337.    STY COPY╧PEN╬AME+1
  338.    LDA #<COPY╧PEN┼RROR═SG1
  339.    LDY #>COPY╧PEN┼RROR═SG1
  340.    LDX #STDERR
  341.    JSR FPUTS
  342.    LDA COPY╧PEN╬AME
  343.    LDY COPY╧PEN╬AME+1
  344.    LDX #STDERR
  345.    JSR FPUTS
  346.    LDA #<COPY╧PEN┼RROR═SG2
  347.    LDY #>COPY╧PEN┼RROR═SG2
  348.    LDX #STDERR
  349.    JSR FPUTS
  350.    LDA #0
  351.    STA CP┼RRNO+1
  352.    STA CP┼RRNO+2
  353.    STA CP┼RRNO+3
  354.    LDA #<CP╬UMBUF
  355.    LDY #>CP╬UMBUF
  356.    STA ZP+0
  357.    STY ZP+1
  358.    LDX #CP┼RRNO
  359.    LDA #1
  360.    JSR UTOA
  361.    LDA #<CP╬UMBUF
  362.    LDY #>CP╬UMBUF
  363.    LDX #STDERR
  364.    JSR FPUTS
  365.    LDA #<COPY╧PEN┼RROR═SG3
  366.    LDY #>COPY╧PEN┼RROR═SG3
  367.    LDX #STDERR
  368.    JSR FPUTS
  369.    RTS
  370.  
  371.    COPY╧PEN┼RROR═SG1 = *
  372.    .ASC "┼RROR OPENING FILE "
  373.    .BYTE CHR╤UOTE
  374.    .BYTE 0
  375.    COPY╧PEN┼RROR═SG2 = *
  376.    .BYTE CHR╤UOTE
  377.    .ASC ", CODE "
  378.    .BYTE 0
  379.    COPY╧PEN┼RROR═SG3 = *
  380.    .BYTE CHR├╥
  381.    .BYTE 0
  382.  
  383.    COPY╞ILE┼RROR = *
  384.    LDA #<COPY╞ILE┼RROR═SG
  385.    LDY #>COPY╞ILE┼RROR═SG
  386.    LDX #STDERR
  387.    JMP FPUTS
  388.    COPY╞ILE┼RROR═SG = *
  389.    .ASC "╞ILE DATA ERROR!"
  390.    .BYTE CHR├╥
  391.    .BYTE 0
  392.  
  393. COPY┴RG = 12
  394. LAST┴RG = 14
  395. COPY╘O─IR = *
  396.    LDA BASE┴RG
  397.    LDY #0
  398.    STA COPY┴RG
  399.    STY COPY┴RG+1
  400. -  LDA ACE┴RGC
  401.    LDY ACE┴RGC+1
  402.    SEC
  403.    SBC #1
  404.    BCS +
  405.    DEY
  406. +  CMP COPY┴RG
  407.    BNE +
  408.    CPY COPY┴RG+1
  409.    BEQ COPY╘O─IR┼XIT
  410. +  JSR CHECKSTOP
  411.    LDA COPY┴RG
  412.    LDY COPY┴RG+1
  413.    JSR GETARG
  414.    LDA ZP
  415.    LDY ZP+1
  416.    STA COPY╔N╬AME
  417.    STY COPY╔N╬AME+1
  418.    JSR COPY╞ILE╘O─IR
  419.    LDA ABORT╞LAG
  420.    BNE COPY╘O─IR╙TOPPED
  421.    INC COPY┴RG
  422.    BNE +
  423.    INC COPY┴RG+1
  424. +  JMP -
  425.  
  426. COPY╘O─IR┼XIT = *
  427.    RTS
  428.  
  429. CHECKSTOP = *
  430.    JSR STOPKEY
  431.    BCS +
  432.    RTS
  433. COPY╘O─IR╙TOPPED = *
  434. +  LDA #<STOPPED═SG
  435.    LDY #>STOPPED═SG
  436.    JSR EPUTS
  437.    LDA #1
  438.    LDX #0
  439.    JMP EXIT
  440.  
  441.    STOPPED═SG = *
  442.    .ASC "<╙TOPPED>"
  443.    .BYTE CHR├╥,0
  444.  
  445. SCAN╨OS = 6
  446.  
  447. COPY╞ILE╘O─IR = *
  448.    ;** GENERATE OUTPUT FILE NAME
  449.    JSR GET╠AST┴RG
  450.    LDY #0
  451. -  LDA (ZP),Y
  452.    BEQ +
  453.    STA COPY╬AME┬UF,Y
  454.    INY
  455.    BNE -
  456. +  TYA
  457.    TAX
  458.    ;** EXTRACT BASENAME
  459.    LDY #0
  460.    STY SCAN╨OS
  461. -  LDA (COPY╔N╬AME),Y
  462.    BEQ +
  463.    CMP #":"
  464.    BNE BASENAME╬EXT
  465.    INY
  466.    STY SCAN╨OS
  467.    DEY
  468.    BASENAME╬EXT = *
  469.    INY
  470.    BNE -
  471.  
  472. +  LDY SCAN╨OS
  473. -  LDA (COPY╔N╬AME),Y
  474.    STA COPY╬AME┬UF,X
  475.    BEQ +
  476.    INX
  477.    INY
  478.    BNE -
  479.    ;** COPY FILE
  480. +  LDA #<COPY╬AME┬UF
  481.    LDY #>COPY╬AME┬UF
  482.    STA COPY╧UT╬AME
  483.    STY COPY╧UT╬AME+1
  484.    JSR COPY╘O─IR╙TATUS
  485.    JSR COPYFILE
  486.    RTS
  487.  
  488. NAME╙PACE .BUF 1
  489.  
  490. COPY╘O─IR╙TATUS = *
  491.    LDA COPY╔N╬AME
  492.    LDY COPY╔N╬AME+1
  493.    JSR PUTS
  494.  
  495.    LDY #255
  496. -  INY
  497.    LDA (COPY╔N╬AME),Y
  498.    BNE -
  499.    TYA
  500. -  SEC
  501.    SBC #10
  502.    BCS -
  503.    ADC #10
  504.    STA NAME╙PACE
  505.    STA NAME╙PACE
  506.    SEC
  507.    LDA #10
  508.    SBC NAME╙PACE
  509.    STA NAME╙PACE
  510.  
  511. -  LDA #" "
  512.    JSR PUTCHAR
  513.    DEC NAME╙PACE
  514.    BNE -
  515.  
  516.    LDA COPY╧UT╬AME
  517.    LDY COPY╧UT╬AME+1
  518.    JSR PUTS
  519.    LDA #CHR├╥
  520.    JSR PUTCHAR
  521.    RTS
  522.  
  523. ;===THE END===
  524. CP┬SS = *
  525. COPY╬AME┬UF = CP┬SS+0
  526. CP┼ND = CP┬SS+256
  527.