home *** CD-ROM | disk | FTP | other *** search
- ;*** WORD COUNTER PROGRAM
-
- .SEQ ACEHEAD.S
- .ORG ACE┴PP┴DDRESS
- .OBJ "@0:WC"
-
- JMP WC═AIN
- .BYTE ACE╔─1,ACE╔─2,ACE╔─3
- .BYTE 64,0 ;** STACK,RESERVED
-
- ;*** GLOBAL DECLARATIONS
-
- LIBWORK = $60
-
- CHR├╥ = $0D
- CHR╤UOTE = $22
-
- ;******** STANDARD LIBRARY ********
- PUTS = *
- LDX #STDOUT
- FPUTS = *
- STA ZP
- STY ZP+1
- LDY #$FF
- - INY
- LDA (ZP),Y
- BNE -
- TYA
- LDY #0
- JMP WRITE
- EPUTS = *
- LDX #STDERR
- JMP FPUTS
-
- PUTCHAR = *
- STX XSAVE
- STY YSAVE
- LDX #STDOUT
- JSR PUTC
- LDX XSAVE
- LDY YSAVE
- RTS
- XSAVE .BUF 1
- YSAVE .BUF 1
-
- 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
-
- 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
-
- CHECKSTOP = *
- JSR STOPKEY
- BCS +
- RTS
- + LDA #<STOPPED═SG
- LDY #>STOPPED═SG
- JSR EPUTS
- LDA #1
- LDX #0
- JMP EXIT
- STOPPED═SG = *
- .ASC "<╙TOPPED>"
- .BYTE CHR├╥,0
-
- ;===WORD COUNT===
- WC┴RG = 2
- WC╬AME = 4
- IN┬UF╠EN = 6
- FILES = $50
-
- WC═AIN = *
- ;** CHECK ARGUMENT COUNT
- LDA ACE┴RGC+1
- BNE WC┼NOUGH┴RGS
- LDA ACE┴RGC
- CMP #2
- BCS WC┼NOUGH┴RGS
-
- WC╒SAGE = *
- LDA #<WC╒SAGE═SG
- LDY #>WC╒SAGE═SG
- JMP EPUTS
-
- WC╒SAGE═SG = *
- .ASC "╒SAGE: WC FILE1 FILE2 ... FILE╬"
- .BYTE CHR├╥,0
-
- WC┼NOUGH┴RGS = *
- ;** GET INPUT BUFFER LENGTH
- SEC
- LDA ACE═EM╘OP+0
- SBC #<WC╔N┬UF
- STA IN┬UF╠EN
- LDA ACE═EM╘OP+1
- SBC #>WC╔N┬UF
- STA IN┬UF╠EN+1
- ;** MAIN LOOP
- LDA #1
- LDY #0
- STA WC┴RG
- STY WC┴RG+1
- STY FILES
- JSR TOT╔NIT
- - JSR CHECKSTOP
- LDA WC┴RG
- LDY WC┴RG+1
- JSR GETARG
- LDA ZP
- LDY ZP+1
- STA WC╬AME
- STY WC╬AME+1
- ORA ZP+1
- BEQ WC┼XIT
- JSR WC╞ILE
- BCS +
- LDA FILES
- BMI +
- INC FILES
- + BCC +
- JSR WC┼RROR
- + INC WC┴RG
- BNE +
- INC WC┴RG+1
- + JMP -
-
- WC┼XIT = *
- LDA FILES
- CMP #2
- BCC +
- JSR REPORT╘OTAL
- + RTS
-
- WC┼RROR = *
- LDA #<WC┼RROR═SG1
- LDY #>WC┼RROR═SG1
- JSR EPUTS
- LDA WC╬AME
- LDY WC╬AME+1
- JSR EPUTS
- LDA #<WC┼RROR═SG2
- LDY #>WC┼RROR═SG2
- JMP EPUTS
-
- WC┼RROR═SG1 = *
- .ASC "┼RROR READING FILE "
- .BYTE CHR╤UOTE,0
-
- WC┼RROR═SG2 = *
- .BYTE CHR╤UOTE,CHR├╥,0
-
- BUF├OUNT = 10
- INFILE = 12
-
- WC╞ILE = *
- ;** OPEN FILE
- LDA WC╬AME
- LDY WC╬AME+1
- STA ZP
- STY ZP+1
- LDA #"R"
- JSR FASTOPEN
- BCC +
- RTS
- + STA INFILE
- ;** COUNT FILE
- JSR WC╔NIT
- JSR WC┬ODY
- ;** CLOSE FILE
- LDA INFILE
- JSR FASTCLOSE
- JSR WC╥EPORT
- JSR ADD╘O╘OTAL
- RTS
-
- WC┬ODY = *
- - JSR CHECKSTOP
- LDA #<WC╔N┬UF
- LDY #>WC╔N┬UF
- STA ZP+0
- STY ZP+1
- LDA #254
- LDY #0
- LDX INFILE
- JSR FASTREAD
- STA BUF├OUNT
- STY BUF├OUNT+1
- BEQ +
- JSR WC╙CAN┬UFFER
- JMP -
- + RTS
-
- WC╔N╫ORD = $4C ;(1)
- WC╠INES = $40 ;(3)
- WC╫ORDS = $44 ;(3)
- WC┬YTES = $48 ;(3)
- TOT╠INES = $20 ;(3)
- TOT╫ORDS = $24 ;(3)
- TOT┬YTES = $28 ;(3)
-
- WC╔NIT = *
- LDA #0
- LDX #11
- - STA WC╠INES,X
- DEX
- BPL -
- STA WC╔N╫ORD
- RTS
-
- TOT╔NIT = *
- LDA #0
- LDX #11
- - STA TOT╠INES,X
- DEX
- BPL -
- RTS
-
- WC╙CAN┬UFFER = *
- LDY #0
- CPY BUF├OUNT
- BNE +
- RTS
- + LDX WC╔N╫ORD
- - LDA WC╔N┬UF,Y
- CMP #CHR├╥
- BNE +
- INC WC╠INES
- BNE +
- INC WC╠INES+1
- BNE +
- INC WC╠INES+2
- BNE +
- INC WC╠INES+3
- + CMP #33
- BCS IS╠ETTER
- CMP #" "
- BEQ IS─ELIMITER
- CMP #CHR├╥
- BEQ IS─ELIMITER
- CMP #9
- BEQ IS─ELIMITER
-
- IS╠ETTER = *
- CPX #1
- BEQ SCAN├ONT
- LDX #1
- INC WC╫ORDS
- BNE SCAN├ONT
- INC WC╫ORDS+1
- BNE SCAN├ONT
- INC WC╫ORDS+2
- BNE SCAN├ONT
- INC WC╫ORDS+3
- JMP SCAN├ONT
-
- IS─ELIMITER = *
- LDX #0
-
- SCAN├ONT = *
- INY
- CPY BUF├OUNT
- BCC -
- CLC
- LDA WC┬YTES
- ADC BUF├OUNT
- STA WC┬YTES
- BCC +
- INC WC┬YTES+1
- BNE +
- INC WC┬YTES+2
- BNE +
- INC WC┬YTES+3
- + STX WC╔N╫ORD
- RTS
-
- WC╥EPORT = *
- LDX #WC╠INES
- LDA #6
- JSR PUTNUM
- LDX #WC╫ORDS
- LDA #6
- JSR PUTNUM
- LDX #WC┬YTES
- LDA #7
- JSR PUTNUM
- LDA WC╬AME
- LDY WC╬AME+1
- JSR PUTS
- LDA #CHR├╥
- JSR PUTCHAR
- RTS
-
- PUTNUM = *
- LDY #<NUMBUF
- STY ZP+0
- LDY #>NUMBUF
- STY ZP+1
- JSR UTOA
- LDA #<NUMBUF
- LDY #>NUMBUF
- JSR PUTS
- LDA #" "
- JSR PUTCHAR
- RTS
-
- ADD╘O╘OTAL = *
- CLC
- LDX #0
- - LDA TOT╠INES,X
- ADC WC╠INES,X
- STA TOT╠INES,X
- INX
- TXA
- AND #$03
- BNE -
- CLC
- LDX #0
- - LDA TOT╫ORDS,X
- ADC WC╫ORDS,X
- STA TOT╫ORDS,X
- INX
- TXA
- AND #$03
- BNE -
- CLC
- LDX #0
- - LDA TOT┬YTES,X
- ADC WC┬YTES,X
- STA TOT┬YTES,X
- INX
- TXA
- AND #$03
- BNE -
- RTS
-
- REPORT╘OTAL = *
- LDA #<TOTAL═SG
- LDY #>TOTAL═SG
- STA WC╬AME
- STY WC╬AME+1
- LDX #11
- - LDA TOT╠INES,X
- STA WC╠INES,X
- DEX
- BPL -
- JSR WC╥EPORT
- RTS
- TOTAL═SG = *
- .ASC "<TOTAL>"
- .BYTE 0
-
- ;===THE END===
- WC┬SS = *
- NUMBUF = WC┬SS
- WC╔N┬UF = NUMBUF+12
-