mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-26 13:49:18 +00:00
188 lines
3.1 KiB
Plaintext
188 lines
3.1 KiB
Plaintext
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 CL.CLR
|
||
|
||
.1 >STA.G HIS.Index
|
||
*--------------------------------------
|
||
HIS.SetA jsr HIS.GetA
|
||
|
||
tya
|
||
clc
|
||
adc ZPPTR1
|
||
sta ZPPTR1
|
||
bcc .1
|
||
inc ZPPTR1+1
|
||
|
||
.1 jsr CL.CLR
|
||
|
||
ldy #$ff
|
||
|
||
.2 iny
|
||
lda (ZPPTR1),y
|
||
sta (ZPCMDBuf),y
|
||
bne .2
|
||
|
||
tya
|
||
>STA.G CmdBufPtr
|
||
>STA.G CmdBuflen
|
||
|
||
jmp CL.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
|