A2osX/SBIN/SHELL.S.HIS.txt

179 lines
3.0 KiB
Plaintext
Raw Normal View History

2015-10-19 20:35:00 +00:00
PR#3
PREFIX /A2OSX.BUILD
LOMEM $A00
2015-10-19 20:35:00 +00:00
INC 1
AUTO 6
.LIST OFF
*--------------------------------------
HIS.Init >LDYAI History.MAX Get a buffer for History
>SYSCALL GetMem0.YA
2015-10-19 20:35:00 +00:00
bcs .9
txa
>STA.G HIS.hBuf
2015-10-19 20:35:00 +00:00
lda #0
>STA.G HIS.Count
>STA.G HIS.Index
2015-10-19 20:35:00 +00:00
.9 rts
*--------------------------------------
HIS.Add >LDA.G HIS.hBuf
2015-10-19 20:35:00 +00:00
beq .9
>SYSCALL GetMemPtr.A
2015-10-19 20:35:00 +00:00
>STYA ZPPTR1
.10 lda #$ff
jsr HIS.GetA Y=ending 0
phy
tya
sec add len+1
>ADC.G CmdBuflen CmdBuffer length
pla
2015-10-19 20:35:00 +00:00
bcc .2 enough room
ldy #$ff we must remove oldest
.12 iny
lda (ZPPTR1),y get len of oldest string
bne .12
tya
* sec
2015-10-19 20:35:00 +00:00
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
2015-10-19 20:35:00 +00:00
sta (ZPPTR1),y
bne .1
iny
lda (ZPPTR2),y move back until Array ending 0 found
sta (ZPPTR1),y
bne .1
2015-10-19 20:35:00 +00:00
>DEC.G HIS.Count
bra .10 retry....
2015-10-19 20:35:00 +00:00
.2 clc A = ending O offset
2015-10-19 20:35:00 +00:00
adc ZPPTR1
sta ZPPTR1
bcc .3
inc ZPPTR1+1
.3 ldy #$ff
2015-10-19 20:35:00 +00:00
.4 iny
lda (ZPCMDBuf),y
2015-10-19 20:35:00 +00:00
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
2015-10-19 20:35:00 +00:00
.9 rts
*--------------------------------------
HIS.GetPrev >LDA.G HIS.hBuf
2015-10-19 20:35:00 +00:00
beq HISTORY.RTS
>SYSCALL GetMemPtr.A
2015-10-19 20:35:00 +00:00
>STYA ZPPTR1
>DEBUG
>LDA.G HIS.Count
beq HISTORY.RTS empty history,nothing to do
>LDA.G HIS.Index
bne .1
2015-10-19 20:35:00 +00:00
>LDA.G HIS.Count
2016-04-28 14:55:22 +00:00
.1 dec
>STA.G HIS.Index
2015-10-19 20:35:00 +00:00
jsr HIS.GetA
bra HIS.SetBuf
2015-10-19 20:35:00 +00:00
History.RTS rts
*--------------------------------------
HIS.GetNext >LDA.G HIS.hBuf
2015-10-19 20:35:00 +00:00
beq HISTORY.RTS
>SYSCALL GetMemPtr.A
2015-10-19 20:35:00 +00:00
>STYA ZPPTR1
>DEBUG
>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
.1 >STA.G HIS.Index
jsr HIS.GetA
2015-10-19 20:35:00 +00:00
bne HIS.SetBuf
jmp CmdLine.CLR end of history, just blank buffer
2015-10-19 20:35:00 +00:00
*--------------------------------------
HIS.GetA tax
beq .8
ldy #0
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 clc
rts
*--------------------------------------
HIS.SetBuf jsr CmdLine.CLR
2015-10-19 20:35:00 +00:00
ldy #$ff
2015-10-19 20:35:00 +00:00
.1 lda (ZPPTR1),y
sta (ZPCMDBuf),y
bne .1
jmp CmdLine.PRINT
2015-10-19 20:35:00 +00:00
*--------------------------------------
HIS.Quit >LDA.G HIS.hBuf
2015-10-19 20:35:00 +00:00
beq .9
>SYSCALL FreeMem.A
2015-10-19 20:35:00 +00:00
.9 rts
*--------------------------------------
MAN
SAVE /A2OSX.SRC/SBIN/SHELL.S.HIS
LOAD /A2OSX.SRC/SBIN/SHELL.S
2015-10-19 20:35:00 +00:00
ASM