A2osX/SBIN/SHELL.S.HIS.txt
2017-09-27 17:40:31 +02:00

188 lines
3.1 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.

PR#3
PREFIX /A2OSX.BUILD
LOMEM $A00
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
HIS.Init >LDYAI History.MAX Get a buffer for History
>SYSCALL GetMem0.YA
bcs .9
txa
>STA.G HIS.hBuf
lda #0
>STA.G HIS.Count
>STA.G HIS.Index
.9 rts
*--------------------------------------
HIS.Add >LDA.G HIS.hBuf
beq .9
>SYSCALL GetMemPtr.A
>STYA ZPPTR1
.10 lda #$ff
jsr HIS.GetA Y=ending 0
phy
tya
sec add len+1
>ADC.G CmdBuflen CmdBuffer length
pla
bcc .2 enough room
ldy #$ff we must remove oldest
.12 iny
lda (ZPPTR1),y get len of oldest string
bne .12
tya
* sec
adc ZPPTR1
sta ZPPTR2
lda ZPPTR1+1
adc #0
sta ZPPTR2+1
ldy #$FF
.1 iny
lda (ZPPTR2),y move back until String ending 0 found
sta (ZPPTR1),y
bne .1
iny
lda (ZPPTR2),y move back until Array ending 0 found
sta (ZPPTR1),y
bne .1
>DEC.G HIS.Count
bra .10 retry....
.2 clc A = ending O offset
adc ZPPTR1
sta ZPPTR1
bcc .3
inc ZPPTR1+1
.3 ldy #$ff
.4 iny
lda (ZPCMDBuf),y
sta (ZPPTR1),y
bne .4
iny
sta (ZPPTR1),y set new array ending 0
* lda #0
>STA.G HIS.Index Reset Index
>INC.G HIS.Count
.9 rts
*--------------------------------------
HIS.GetPrev >LDA.G HIS.hBuf
beq HISTORY.RTS
>SYSCALL GetMemPtr.A
>STYA ZPPTR1
>LDA.G HIS.Count
beq HISTORY.RTS empty history,nothing to do
>LDA.G HIS.Index
bne .1
>LDA.G HIS.Count
.1 dec
>STA.G HIS.Index
bra HIS.SetA
History.RTS rts
*--------------------------------------
HIS.GetNext >LDA.G HIS.hBuf
beq HISTORY.RTS
>SYSCALL GetMemPtr.A
>STYA ZPPTR1
>LDA.G HIS.Count
beq HISTORY.RTS empty history,nothing to do
>LDA.G HIS.Index
inc
>CMP.G HIS.Count
bne .1
lda #0
>STA.G HIS.Index
jmp CmdLine.CLR
.1 >STA.G HIS.Index
*--------------------------------------
HIS.SetA jsr HIS.GetA
tya
clc
adc ZPPTR1
sta ZPPTR1
bcc .1
inc ZPPTR1+1
.1 jsr CmdLine.CLR
ldy #$ff
.2 iny
lda (ZPPTR1),y
sta (ZPCMDBuf),y
bne .2
tya
>STA.G CmdBufPtr
>STA.G CmdBuflen
jmp CmdLine.PRINT
*--------------------------------------
HIS.GetA ldy #0
tax
beq .80
lda (ZPPTR1),y
beq .9
.1 iny
lda (ZPPTR1),y
bne .1
dex
beq .8
iny
lda (ZPPTR1),y
bne .1
.9 sec Found ending 0....
rts
.8 iny
.80 clc
rts
*--------------------------------------
HIS.Quit >LDA.G HIS.hBuf
beq .9
>SYSCALL FreeMem.A
.9 rts
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SBIN/SHELL.S.HIS
LOAD /A2OSX.SRC/SBIN/SHELL.S
ASM