A2osX/BIN/MORE.S.txt
2018-11-05 17:28:40 +01:00

240 lines
4.0 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

NEW
PREFIX /A2OSX.BUILD
AUTO 4,1
.LIST OFF
.OP 65C02
.OR $2000
.TF BIN/MORE
*--------------------------------------
.INB INC/MACROS.I
.INB INC/A2OSX.I
.INB INC/MLI.I
.INB INC/MLI.E.I
*--------------------------------------
ZPPTR1 .EQ ZPBIN
ZPBufPtr .EQ ZPBIN+2
*--------------------------------------
* File Header (16 Bytes)
*--------------------------------------
CS.START cld
jmp (.1,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA #S.PS.F.EVENT S.PS.F
.DA #0
.DA CS.END-CS.START CS
.DA DS.END-DS.START DS
.DA #16 SS
.DA #4 ZP
.DA 0
*--------------------------------------
* Relocation Table
*--------------------------------------
.1 .DA CS.INIT
.DA CS.RUN
.DA CS.DOEVENT
.DA CS.QUIT
L.MSG.USAGE .DA MSG.USAGE
L.MSG.LINENUM .DA MSG.LINENUM
.DA 0
*--------------------------------------
CS.INIT clc
rts
*--------------------------------------
CS.RUN
.1 >INC.G ArgCount
>SYSCALL ArgV
bcs .7
>STYA ZPPtr1
lda (ZPPtr1)
cmp #'-'
bne .4
ldy #1
lda (ZPPtr1),y
ldx OptionList
.2 cmp OptionList,x
beq .3
dex
bne .2
.99 >PUSHBI 0
>LDYA L.MSG.USAGE
>SYSCALL printf
lda #E.SYN
sec
.9 rts
.3 ldy OptionVars-1,x
lda #$80
sta (pData),y
bra .1
.4 >LDA.G hFile
bne .99
jsr CS.RUN.OPEN
bcs .9
>STA.G hFile
bra .1 scan for any other args
.7 >LDA.G bHelp
beq .8
jsr .99
lda #0
rts
.8 >LDYAI 256
>SYSCALL GetMem
bcs .9
>STYA ZPBufPtr
txa
>STA.G hBuf
CS.RUN.LOOP >SLEEP
>LDA.G hFILE
beq .11
>SYSCALL GetChar
bcs .10 no char
cmp #$03 Ctrl-C
beq .9 Abort....
cmp #$13 Ctrl-S
bne .10
>LDA.G bPause
eor #$ff
sta (pData),y
bne .8
.10 >LDA.G bPause
bne .8 Pause...
>LDA.G hFile
bra .12
.11 ldy #S.PS.hStdIn
lda (pPS),y
bra .12
.12 pha
>PUSHWI 256
>PUSHW ZPBufPtr
pla
>SYSCALL fgets
>DEBUG
bcs .13
>LDYA ZPBufPtr
>SYSCALL puts
>INC.G LineCount
cmp #20
bne .8
lda #0
sta (pData),y
dec
>STA.G bPause
.8 jmp CS.RUN.LOOP
.13 cmp #MLI.E.EOF
bne .9
lda #0 Exit with no Error
.9 sec
rts
*--------------------------------------
CS.RUN.OPEN >SYSCALL RealPath
bcs .9
phx save hMem
pha
>PUSHWI 0 Aux type
>PUSHBI S.FI.T.TXT
>PUSHBI O.RDONLY+O.TEXT
pla
>SYSCALL FOpen
plx
bcs .99
pha
jsr .99
pla
clc
rts
.99 pha
txa
>SYSCALL FreeMem
pla
sec
.9 rts
*--------------------------------------
CS.RUN.PRINTNUM clc
>LDA.G bLineNum
bpl .8
>PUSHW.G LineNum
>PUSHBI 2
>LDYA L.MSG.LINENUM
>SYSCALL printf
.8 rts
*--------------------------------------
CS.QUIT >LDA.G hBuf
beq .1
>SYSCALL FreeMem
.1 >LDA.G hFILE
beq .8
>SYSCALL FClose
.8 clc
rts
*--------------------------------------
CS.DOEVENT sec
rts
*--------------------------------------
CS.END
*--------------------------------------
OptionList >PSTR "NnHh"
OptionVars .DA #bLineNum,#bLineNum,#bHelp,#bHelp
*--------------------------------------
MSG.USAGE .AS "Usage : MORE <File>\r\n"
.AS " -H : This Help Screen\r\n"
.AZ " -N : Number all output lines\r\n"
MSG.LINENUM .AZ "%5D:"
*--------------------------------------
.DUMMY
.OR 0
DS.START
ArgCount .BS 1
hFile .BS 1
LineCount .BS 1
LineNum .BS 2
bPause .BS 1
bLineNum .BS 1
bHelp .BS 1
ArgIndex .BS 1
hBuf .BS 1
DS.END
.ED
*--------------------------------------
MAN
SAVE /A2OSX.SRC/BIN/MORE.S
ASM