home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64-128Toolkit / ACE12-SRC-3.SFX / wc.s < prev    next >
Encoding:
Text File  |  1990-02-12  |  4.9 KB  |  399 lines

  1. ;*** WORD COUNTER PROGRAM
  2.  
  3. .SEQ ACEHEAD.S
  4. .ORG ACE┴PP┴DDRESS
  5. .OBJ "@0:WC"
  6.  
  7. JMP WC═AIN
  8. .BYTE ACE╔─1,ACE╔─2,ACE╔─3
  9. .BYTE 64,0  ;** STACK,RESERVED
  10.  
  11. ;*** GLOBAL DECLARATIONS
  12.  
  13. LIBWORK = $60
  14.  
  15. CHR├╥ = $0D
  16. CHR╤UOTE = $22
  17.  
  18. ;******** STANDARD LIBRARY ********
  19. PUTS = *
  20.    LDX #STDOUT
  21. FPUTS = *
  22.    STA ZP
  23.    STY ZP+1
  24.    LDY #$FF
  25. -  INY
  26.    LDA (ZP),Y
  27.    BNE -
  28.    TYA
  29.    LDY #0
  30.    JMP WRITE
  31. EPUTS = *
  32.    LDX #STDERR
  33.    JMP FPUTS
  34.  
  35. PUTCHAR = *
  36.    STX XSAVE
  37.    STY YSAVE
  38.    LDX #STDOUT
  39.    JSR PUTC
  40.    LDX XSAVE
  41.    LDY YSAVE
  42.    RTS
  43.    XSAVE .BUF 1
  44.    YSAVE .BUF 1
  45.  
  46. PUTC = *
  47.    STA PUTC┬UFFER
  48.    LDA #<PUTC┬UFFER
  49.    LDY #>PUTC┬UFFER
  50.    STA ZP
  51.    STY ZP+1
  52.    LDA #1
  53.    LDY #0
  54.    JMP WRITE
  55.    PUTC┬UFFER .BUF 1
  56.  
  57. GETCHAR = *
  58.    LDX #STDIN
  59. GETC = *
  60.    LDA #<GETC┬UFFER
  61.    LDY #>GETC┬UFFER
  62.    STA ZP
  63.    STY ZP+1
  64.    LDA #1
  65.    LDY #0
  66.    JSR READ
  67.    BEQ +
  68.    LDA GETC┬UFFER
  69.    RTS
  70. +  SEC
  71.    RTS
  72.    GETC┬UFFER .BUF 1
  73.  
  74. GETARG = *
  75.    STY ZP+1
  76.    ASL
  77.    STA ZP
  78.    ROL ZP+1
  79.    CLC
  80.    LDA ACE┴RGV
  81.    ADC ZP
  82.    STA ZP
  83.    LDA ACE┴RGV+1
  84.    ADC ZP+1
  85.    STA ZP+1
  86.    LDY #0
  87.    LDA (ZP),Y
  88.    TAX
  89.    INY
  90.    LDA (ZP),Y
  91.    STX ZP
  92.    STA ZP+1
  93.    RTS
  94.  
  95. CHECKSTOP = *
  96.    JSR STOPKEY
  97.    BCS +
  98.    RTS
  99. +  LDA #<STOPPED═SG
  100.    LDY #>STOPPED═SG
  101.    JSR EPUTS
  102.    LDA #1
  103.    LDX #0
  104.    JMP EXIT
  105.    STOPPED═SG = *
  106.    .ASC "<╙TOPPED>"
  107.    .BYTE CHR├╥,0
  108.  
  109. ;===WORD COUNT===
  110. WC┴RG = 2
  111. WC╬AME = 4
  112. IN┬UF╠EN = 6
  113. FILES = $50
  114.  
  115. WC═AIN = *
  116.    ;** CHECK ARGUMENT COUNT
  117.    LDA ACE┴RGC+1
  118.    BNE WC┼NOUGH┴RGS
  119.    LDA ACE┴RGC
  120.    CMP #2
  121.    BCS WC┼NOUGH┴RGS
  122.  
  123. WC╒SAGE = *
  124.    LDA #<WC╒SAGE═SG
  125.    LDY #>WC╒SAGE═SG
  126.    JMP EPUTS
  127.  
  128. WC╒SAGE═SG = *
  129.    .ASC "╒SAGE: WC FILE1 FILE2 ... FILE╬"
  130.    .BYTE CHR├╥,0
  131.  
  132. WC┼NOUGH┴RGS = *
  133.    ;** GET INPUT BUFFER LENGTH
  134.    SEC
  135.    LDA ACE═EM╘OP+0
  136.    SBC #<WC╔N┬UF
  137.    STA IN┬UF╠EN
  138.    LDA ACE═EM╘OP+1
  139.    SBC #>WC╔N┬UF
  140.    STA IN┬UF╠EN+1
  141.    ;** MAIN LOOP
  142.    LDA #1
  143.    LDY #0
  144.    STA WC┴RG
  145.    STY WC┴RG+1
  146.    STY FILES
  147.    JSR TOT╔NIT
  148. -  JSR CHECKSTOP
  149.    LDA WC┴RG
  150.    LDY WC┴RG+1
  151.    JSR GETARG
  152.    LDA ZP
  153.    LDY ZP+1
  154.    STA WC╬AME
  155.    STY WC╬AME+1
  156.    ORA ZP+1
  157.    BEQ WC┼XIT
  158.    JSR WC╞ILE
  159.    BCS +
  160.    LDA FILES
  161.    BMI +
  162.    INC FILES
  163. +  BCC +
  164.    JSR WC┼RROR
  165. +  INC WC┴RG
  166.    BNE +
  167.    INC WC┴RG+1
  168. +  JMP -
  169.  
  170. WC┼XIT = *
  171.    LDA FILES
  172.    CMP #2
  173.    BCC +
  174.    JSR REPORT╘OTAL
  175. +  RTS
  176.  
  177. WC┼RROR = *
  178.    LDA #<WC┼RROR═SG1
  179.    LDY #>WC┼RROR═SG1
  180.    JSR EPUTS
  181.    LDA WC╬AME
  182.    LDY WC╬AME+1
  183.    JSR EPUTS
  184.    LDA #<WC┼RROR═SG2
  185.    LDY #>WC┼RROR═SG2
  186.    JMP EPUTS
  187.  
  188. WC┼RROR═SG1 = *
  189.    .ASC "┼RROR READING FILE "
  190.    .BYTE CHR╤UOTE,0
  191.  
  192. WC┼RROR═SG2 = *
  193.    .BYTE CHR╤UOTE,CHR├╥,0
  194.  
  195. BUF├OUNT = 10
  196. INFILE = 12
  197.  
  198. WC╞ILE = *
  199.    ;** OPEN FILE
  200.    LDA WC╬AME
  201.    LDY WC╬AME+1
  202.    STA ZP
  203.    STY ZP+1
  204.    LDA #"R"
  205.    JSR FASTOPEN
  206.    BCC +
  207.    RTS
  208. +  STA INFILE
  209.    ;** COUNT FILE
  210.    JSR WC╔NIT
  211.    JSR WC┬ODY
  212.    ;** CLOSE FILE
  213.    LDA INFILE
  214.    JSR FASTCLOSE
  215.    JSR WC╥EPORT
  216.    JSR ADD╘O╘OTAL
  217.    RTS
  218.  
  219. WC┬ODY = *
  220. -  JSR CHECKSTOP
  221.    LDA #<WC╔N┬UF
  222.    LDY #>WC╔N┬UF
  223.    STA ZP+0
  224.    STY ZP+1
  225.    LDA #254
  226.    LDY #0
  227.    LDX INFILE
  228.    JSR FASTREAD
  229.    STA BUF├OUNT
  230.    STY BUF├OUNT+1
  231.    BEQ +
  232.    JSR WC╙CAN┬UFFER
  233.    JMP -
  234. +  RTS
  235.  
  236. WC╔N╫ORD = $4C ;(1)
  237. WC╠INES = $40  ;(3)
  238. WC╫ORDS = $44  ;(3)
  239. WC┬YTES = $48  ;(3)
  240. TOT╠INES = $20  ;(3)
  241. TOT╫ORDS = $24  ;(3)
  242. TOT┬YTES = $28  ;(3)
  243.  
  244. WC╔NIT = *
  245.    LDA #0
  246.    LDX #11
  247. -  STA WC╠INES,X
  248.    DEX
  249.    BPL -
  250.    STA WC╔N╫ORD
  251.    RTS
  252.  
  253. TOT╔NIT = *
  254.    LDA #0
  255.    LDX #11
  256. -  STA TOT╠INES,X
  257.    DEX
  258.    BPL -
  259.    RTS
  260.  
  261. WC╙CAN┬UFFER = *
  262.    LDY #0
  263.    CPY BUF├OUNT
  264.    BNE +
  265.    RTS
  266. +  LDX WC╔N╫ORD
  267. -  LDA WC╔N┬UF,Y
  268.    CMP #CHR├╥
  269.    BNE +
  270.    INC WC╠INES
  271.    BNE +
  272.    INC WC╠INES+1
  273.    BNE +
  274.    INC WC╠INES+2 
  275.    BNE +
  276.    INC WC╠INES+3
  277. +  CMP #33
  278.    BCS IS╠ETTER
  279.    CMP #" "
  280.    BEQ IS─ELIMITER
  281.    CMP #CHR├╥
  282.    BEQ IS─ELIMITER
  283.    CMP #9
  284.    BEQ IS─ELIMITER
  285.  
  286.    IS╠ETTER = *
  287.    CPX #1
  288.    BEQ SCAN├ONT
  289.    LDX #1
  290.    INC WC╫ORDS
  291.    BNE SCAN├ONT
  292.    INC WC╫ORDS+1
  293.    BNE SCAN├ONT
  294.    INC WC╫ORDS+2
  295.    BNE SCAN├ONT
  296.    INC WC╫ORDS+3
  297.    JMP SCAN├ONT
  298.  
  299.    IS─ELIMITER = *
  300.    LDX #0
  301.  
  302.    SCAN├ONT = *
  303.    INY
  304.    CPY BUF├OUNT
  305.    BCC -
  306.    CLC
  307.    LDA WC┬YTES
  308.    ADC BUF├OUNT
  309.    STA WC┬YTES
  310.    BCC +
  311.    INC WC┬YTES+1
  312.    BNE +
  313.    INC WC┬YTES+2
  314.    BNE +
  315.    INC WC┬YTES+3
  316. +  STX WC╔N╫ORD
  317.    RTS
  318.  
  319. WC╥EPORT = *
  320.    LDX #WC╠INES
  321.    LDA #6
  322.    JSR PUTNUM
  323.    LDX #WC╫ORDS
  324.    LDA #6
  325.    JSR PUTNUM
  326.    LDX #WC┬YTES
  327.    LDA #7
  328.    JSR PUTNUM
  329.    LDA WC╬AME
  330.    LDY WC╬AME+1
  331.    JSR PUTS
  332.    LDA #CHR├╥
  333.    JSR PUTCHAR
  334.    RTS
  335.  
  336. PUTNUM = *
  337.    LDY #<NUMBUF
  338.    STY ZP+0
  339.    LDY #>NUMBUF
  340.    STY ZP+1
  341.    JSR UTOA
  342.    LDA #<NUMBUF
  343.    LDY #>NUMBUF
  344.    JSR PUTS
  345.    LDA #" "
  346.    JSR PUTCHAR
  347.    RTS
  348.  
  349. ADD╘O╘OTAL = *
  350.    CLC
  351.    LDX #0
  352. -  LDA TOT╠INES,X
  353.    ADC WC╠INES,X
  354.    STA TOT╠INES,X
  355.    INX
  356.    TXA
  357.    AND #$03
  358.    BNE -
  359.    CLC
  360.    LDX #0
  361. -  LDA TOT╫ORDS,X
  362.    ADC WC╫ORDS,X
  363.    STA TOT╫ORDS,X
  364.    INX
  365.    TXA
  366.    AND #$03
  367.    BNE -
  368.    CLC
  369.    LDX #0
  370. -  LDA TOT┬YTES,X
  371.    ADC WC┬YTES,X
  372.    STA TOT┬YTES,X
  373.    INX
  374.    TXA
  375.    AND #$03
  376.    BNE -
  377.    RTS
  378.  
  379. REPORT╘OTAL = *
  380.    LDA #<TOTAL═SG
  381.    LDY #>TOTAL═SG
  382.    STA WC╬AME
  383.    STY WC╬AME+1
  384.    LDX #11
  385. -  LDA TOT╠INES,X
  386.    STA WC╠INES,X
  387.    DEX
  388.    BPL -
  389.    JSR WC╥EPORT
  390.    RTS
  391.    TOTAL═SG = *
  392.    .ASC "<TOTAL>"
  393.    .BYTE 0
  394.  
  395. ;===THE END===
  396. WC┬SS = *
  397. NUMBUF = WC┬SS
  398. WC╔N┬UF = NUMBUF+12
  399.