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

  1. ;*** ╦┴╥ FILE ENCODER VERSION 1.00 - BY ├RAIG ┬RUCE - 10-╙EP-94
  2.  
  3. ;KAR [-HELP] FILE ...
  4.  
  5. ;╦EVIN'S ┴╥CHIVER FORMAT, CREATED BY ╦EVIN ╨HILLIPS AND ├RAIG ┬RUCE, 1991
  6.  
  7. .SEQ ACEHEAD.S
  8. .ORG ACE┴PP┴DDRESS
  9. .OBJ "@0:KAR"
  10.  
  11. JMP MAIN
  12. .BYTE ACE╔─1,ACE╔─2,ACE╔─3
  13. .BYTE 64,0  ;** STACK,RESERVED
  14.  
  15. ;*** GLOBAL DECLARATIONS
  16.  
  17. CHR┬┼╠ = $07
  18. CHR╘┴┬ = $09
  19. CHR╠╞ = $0A
  20. CHR├╥ = $0D
  21. CHR┬╙ = $14
  22. CHR├╠╥ = $93
  23. CHR╤╒╧╘┼ = $22
  24.  
  25. ARG          =  2 ;(2)  ;CURRENT ARGUMENT NUMBER
  26. NAME         =  4 ;(2)  ;NAME OF FILE BEING KARED
  27. IN┬UF╠EN     = 10 ;(2)  ;TOTAL SIZE OF INPUT BUFFER
  28. FILE├OUNT    = 24 ;(4)  ;FILES TO PUT INTO ARCHIVE
  29. LINE├OUNT    = 28 ;(4)  ;LINES IN CURRENT FILE
  30. IN╞ILE       = 32 ;(1)  ;INPUT FILE DESCRIPTOR
  31. LAST╞ILE├HAR = 33 ;(1)  ;LAST CHAR READ WHILE COUNTING A FILE
  32. WORK         = 112 ;(16);TEMPORARY WORK AREA, LOWEST LEVEL
  33.  
  34. ;===MAIN===
  35.  
  36. MAIN = *
  37.    ;** CHECK FOR A LARGE ENOUGH ╘╨┴
  38.    SEC
  39.    LDA #<BSS┼ND
  40.    CMP ACE═EM╘OP+0
  41.    LDA #>BSS┼ND
  42.    SBC ACE═EM╘OP+1
  43.    BCS +
  44.    JMP MAIN╔NIT
  45. +  LDA #<TPA═SG
  46.    LDY #>TPA═SG
  47.    JSR EPUTS
  48. DIE = *
  49.    LDA #1
  50.    LDX #0
  51.    JMP EXIT
  52.  
  53. TPA═SG = *
  54.    .ASC "╔NSUFFICIENT PROGRAM SPACE TO RUN"
  55.    .BYTE CHR├╥,0
  56.  
  57. USAGE = *
  58.    LDA #<USAGE═SG
  59.    LDY #>USAGE═SG
  60.    JSR EPUTS
  61.    JMP DIE
  62.  
  63. USAGE═SG = *
  64.    .ASC "USAGE: KAR [-HELP] FILE ..."
  65.    .BYTE CHR├╥,0
  66.  
  67. MAIN╔NIT = *
  68.    LDA #0
  69.    STA ARG+0
  70.    STA ARG+1
  71.    JSR PUT╞ILE├OUNT
  72.  
  73.    MAIN╬EXT = *
  74.    JSR CHECK╙TOP
  75.    INC ARG+0
  76.    BNE +
  77.    INC ARG+1
  78. +  LDA ARG+0
  79.    LDY ARG+1
  80.    JSR GETARG
  81.    BEQ MAIN┼XIT
  82.    LDA ZP+0
  83.    LDY ZP+1
  84.    STA NAME+0
  85.    STY NAME+1
  86.    JSR KAR
  87.    JMP MAIN╬EXT
  88.  
  89. MAIN┼XIT = *
  90.    RTS
  91.  
  92. CHECK╙TOP = *
  93.    JSR STOPKEY
  94.    BCS +
  95.    RTS
  96. +  LDA #<STOPPED═SG
  97.    LDY #>STOPPED═SG
  98.    JSR EPUTS
  99.    JMP DIE
  100.  
  101.    STOPPED═SG = *
  102.    .ASC "<╙TOPPED>"
  103.    .BYTE CHR├╥,0
  104.  
  105. PUT╞ILE├OUNT = *
  106.    LDA ACE┴RGC+0
  107.    LDY ACE┴RGC+1
  108.    LDX #$00
  109.    STA FILE├OUNT+0
  110.    STY FILE├OUNT+1
  111.    STX FILE├OUNT+2
  112.    STX FILE├OUNT+3
  113.    LDA #1
  114.    LDY #0
  115.    JSR GETARG
  116.    LDY #0
  117.    LDA (ZP),Y
  118.    CMP #"-"
  119.    BNE +
  120.    JMP USAGE
  121. +  LDA FILE├OUNT+0
  122.    BNE +
  123.    DEC FILE├OUNT+1
  124. +  DEC FILE├OUNT+0
  125.    LDX #FILE├OUNT
  126.    ;XX FALL THROUGH
  127.    
  128. PUTNUM = *  ;( .╪=ZPOFF )
  129.    LDA #<NUMBUF
  130.    LDY #>NUMBUF
  131.    STA ZP+0
  132.    STY ZP+1
  133.    LDA #1
  134.    JSR UTOA
  135.    LDA #<NUMBUF
  136.    LDY #>NUMBUF
  137.    JSR PUTS
  138.    LDA #CHR├╥
  139.    JSR PUTCHAR
  140.    RTS
  141.  
  142.    NUMBUF .BUF 11
  143.  
  144. KAR = *
  145.    JSR ECHO
  146.    LDA NAME+0
  147.    LDY NAME+1
  148.    JSR PUTS
  149.    LDA #CHR├╥
  150.    JSR PUTCHAR
  151.    JSR COUNT╠INES
  152.    BCC +
  153.    RTS
  154. +  LDX #LINE├OUNT
  155.    JSR PUTNUM
  156.    ;** OPEN FILE
  157.    LDA NAME+0
  158.    LDY NAME+1
  159.    STA ZP+0
  160.    STY ZP+1
  161.    LDA #"R"
  162.    JSR OPEN
  163.    BCC +
  164.    JSR ECHO╬AME
  165.    LDA #<OPEN┼RR═SG
  166.    LDY #>OPEN┼RR═SG
  167.    JSR EPUTS
  168.    RTS
  169. +  STA IN╞ILE
  170.    JSR KAR┬ODY
  171.    LDA IN╞ILE
  172.    JSR CLOSE
  173.    RTS
  174.    OPEN┼RR═SG = *
  175.    .ASC ": CANNOT OPEN"
  176.    .BYTE CHR├╥,0
  177.  
  178. ECHO = *
  179.    LDA #<ECHO═SG1
  180.    LDY #>ECHO═SG1
  181.    JSR EPUTS
  182.    JSR ECHO╬AME
  183.    LDA #<ECHO═SG2
  184.    LDY #>ECHO═SG2
  185.    JMP EPUTS
  186. ECHO═SG1 = *
  187.    .ASC "KARING "
  188.    .BYTE CHR╤╒╧╘┼,0
  189. ECHO═SG2 = *
  190.    .BYTE CHR╤╒╧╘┼,CHR├╥,0
  191.  
  192. ECHO╬AME = *
  193.    LDA NAME+0
  194.    LDY NAME+1
  195.    JSR EPUTS
  196.    RTS
  197.  
  198. KAR┬ODY = *
  199.    JSR INIT╔N┬UF
  200.    LDA #<IN┬UF
  201.    LDY #>IN┬UF
  202.    STA ZP+0
  203.    STY ZP+1
  204. -  JSR CHECK╙TOP
  205.    LDA IN┬UF╠EN+0
  206.    LDY IN┬UF╠EN+1
  207.    LDX IN╞ILE
  208.    JSR READ
  209.    BCS ++
  210.    BEQ +
  211.    PHA
  212.    TYA
  213.    PHA
  214.    JSR CHECK╙TOP
  215.    PLA
  216.    TAY
  217.    PLA
  218.    LDX #STDOUT
  219.    JSR WRITE
  220.    BCC -
  221.    BCS ++
  222. +  RTS
  223. +  JSR ECHO╬AME
  224.    LDA #<IO┼RR═SG
  225.    LDY #>IO┼RR═SG
  226.    JSR EPUTS
  227.    RTS
  228.    IO┼RR═SG = *
  229.    .ASC ": READ/WRITE ERROR"
  230.    .BYTE CHR├╥,0
  231.  
  232. ;=== LINE COUNTING PORTION ===
  233.  
  234. COUNT╠INES = *
  235.    LDA NAME+0
  236.    LDY NAME+1
  237.    STA ZP+0
  238.    STY ZP+1
  239.    LDA #"R"
  240.    JSR OPEN
  241.    BCC +
  242.    JSR ECHO╬AME
  243.    LDA #<OPEN┼RR═SG
  244.    LDY #>OPEN┼RR═SG
  245.    JSR EPUTS
  246.    SEC
  247.    RTS
  248. +  STA IN╞ILE
  249.    JSR COUNT╔NIT
  250.    JSR COUNT┬ODY
  251.    LDA IN╞ILE
  252.    JSR CLOSE
  253.    RTS
  254.  
  255. COUNT╔NIT = *
  256.    LDA #0
  257.    LDX #3
  258. -  STA LINE├OUNT,X
  259.    DEX
  260.    BPL -
  261.    RTS
  262.  
  263. COUNT┬ODY = *
  264. -  JSR CHECK╙TOP
  265.    LDA #<IN┬UF
  266.    LDY #>IN┬UF
  267.    STA ZP+0
  268.    STY ZP+1
  269.    LDA #254
  270.    LDY #0
  271.    LDX IN╞ILE
  272.    JSR READ
  273.    STA IN┬UF╠EN+0
  274.    STY IN┬UF╠EN+1
  275.    BEQ +
  276.    JSR COUNT╙CAN┬UFFER
  277.    JMP -
  278. +  RTS
  279.  
  280. COUNT╙CAN┬UFFER = *
  281.    LDY #0
  282. -  LDA IN┬UF,Y
  283.    CMP #CHR├╥
  284.    BNE +
  285.    INC LINE├OUNT+0
  286.    BNE +
  287.    INC LINE├OUNT+1
  288.    BNE +
  289.    INC LINE├OUNT+2 
  290.    BNE +
  291.    INC LINE├OUNT+3
  292. +  INY
  293.    CPY IN┬UF╠EN
  294.    BCC -
  295.    STA LAST╞ILE├HAR
  296.    RTS
  297.  
  298. ;=== STANDARD LIBRARY ===
  299.  
  300. PUTS = *
  301.    LDX #STDOUT
  302. FPUTS = *
  303.    STA ZP+0
  304.    STY ZP+1
  305.    LDY #$FF
  306. -  INY
  307.    LDA (ZP),Y
  308.    BNE -
  309.    TYA
  310.    LDY #0
  311.    JMP WRITE
  312. EPUTS = *
  313.    LDX #STDERR
  314.    JMP FPUTS
  315.  
  316. EPUTCHAR = *
  317.    LDX #STDERR
  318.    JMP PUTC
  319. PUTCHAR = *
  320.    LDX #STDOUT
  321. PUTC = *
  322.    STA PUTC┬UFFER
  323.    LDA #<PUTC┬UFFER
  324.    LDY #>PUTC┬UFFER
  325.    STA ZP+0
  326.    STY ZP+1
  327.    LDA #1
  328.    LDY #0
  329.    JMP WRITE
  330.    PUTC┬UFFER .BUF 1
  331.  
  332. GETARG = *
  333.    STY ZP+1
  334.    ASL
  335.    STA ZP+0
  336.    ROL ZP+1
  337.    CLC
  338.    LDA ACE┴RGV+0
  339.    ADC ZP+0
  340.    STA ZP+0
  341.    LDA ACE┴RGV+1
  342.    ADC ZP+1
  343.    STA ZP+1
  344.    LDY #0
  345.    LDA (ZP),Y
  346.    TAX
  347.    INY
  348.    LDA (ZP),Y
  349.    STX ZP+0
  350.    STA ZP+1
  351.    ORA ZP+0
  352.    RTS
  353.  
  354. INIT╔N┬UF = *
  355.    SEC
  356.    LDA ACE═EM╘OP+0
  357.    SBC #<IN┬UF
  358.    STA IN┬UF╠EN+0
  359.    LDA ACE═EM╘OP+1
  360.    SBC #>IN┬UF
  361.    STA IN┬UF╠EN+1
  362.    RTS
  363.  
  364. ;===BSS===
  365.  
  366. BSS    = *
  367. IN┬UF  = BSS
  368. BSS┼ND = IN┬UF+256
  369.