mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-26 13:49:18 +00:00
186 lines
3.5 KiB
Plaintext
186 lines
3.5 KiB
Plaintext
|
PR#3
|
|||
|
PREFIX /A2OSX.SRC
|
|||
|
NEW
|
|||
|
INC 1
|
|||
|
AUTO 6
|
|||
|
.LIST OFF
|
|||
|
*--------------------------------------
|
|||
|
History.Init >PUSHWI 256 Get a buffer for History
|
|||
|
>PUSHBI S.MEM.F.INIT0
|
|||
|
>SYSCALL SYS.GetMem
|
|||
|
bcs .9
|
|||
|
|
|||
|
txa
|
|||
|
ldy #hCmdHistory
|
|||
|
sta (pData),y
|
|||
|
|
|||
|
lda #0
|
|||
|
ldy #CmdHistory.IDX
|
|||
|
sta (pData),y
|
|||
|
ldy #CmdHistory.END
|
|||
|
sta (pData),y
|
|||
|
.9 rts
|
|||
|
*--------------------------------------
|
|||
|
History.Add ldy #hCmdHistory
|
|||
|
lda (pData),y
|
|||
|
beq .9
|
|||
|
>SYSCALL SYS.GetMemPtrA
|
|||
|
>STYA ZPPTR1
|
|||
|
|
|||
|
.10 ldy #CmdHistory.END
|
|||
|
lda (pData),y
|
|||
|
sec add len+1
|
|||
|
adc (pData) CmdBuffer length
|
|||
|
bcc .2 enough room
|
|||
|
|
|||
|
lda (ZPPTR1) get len of oldest string
|
|||
|
sec
|
|||
|
adc ZPPTR1
|
|||
|
sta ZPPTR2
|
|||
|
lda ZPPTR1+1
|
|||
|
adc #0
|
|||
|
sta ZPPTR2+1
|
|||
|
|
|||
|
ldy #$FF
|
|||
|
|
|||
|
.1 iny
|
|||
|
lda (ZPPTR2),y move back until ending 0 found
|
|||
|
sta (ZPPTR1),y
|
|||
|
bne .1
|
|||
|
|
|||
|
tya
|
|||
|
|
|||
|
ldy #CmdHistory.END mark new end of history
|
|||
|
sta (pData),y
|
|||
|
bra .10 retry....
|
|||
|
|
|||
|
.2 tax keep new CmdHistory.END
|
|||
|
|
|||
|
tay
|
|||
|
lda #0
|
|||
|
sta (ZPPTR1),y set ending 0
|
|||
|
|
|||
|
ldy #CmdHistory.END save old END
|
|||
|
lda (pData),y
|
|||
|
pha
|
|||
|
|
|||
|
txa get back new END
|
|||
|
|
|||
|
ldy #CmdHistory.IDX set it as new IDX
|
|||
|
sta (pData),y
|
|||
|
|
|||
|
ldy #CmdHistory.END
|
|||
|
sta (pData),y set new CmdHistory.END
|
|||
|
|
|||
|
pla get back old END
|
|||
|
clc
|
|||
|
adc ZPPTR1
|
|||
|
sta ZPPTR1
|
|||
|
bcc .3
|
|||
|
inc ZPPTR1+1
|
|||
|
|
|||
|
.3 lda (pData)
|
|||
|
tay
|
|||
|
|
|||
|
.4 lda (pData),y
|
|||
|
sta (ZPPTR1),y
|
|||
|
dey
|
|||
|
bpl .4
|
|||
|
.9 rts
|
|||
|
*--------------------------------------
|
|||
|
History.GetPrev ldy #hCmdHistory
|
|||
|
lda (pData),y
|
|||
|
beq HISTORY.RTS
|
|||
|
|
|||
|
tax
|
|||
|
|
|||
|
ldy #CmdHistory.END
|
|||
|
lda (pData),y
|
|||
|
beq HISTORY.RTS empty history,nothing to do
|
|||
|
ldy #CmdHistory.IDX
|
|||
|
lda (pData),y
|
|||
|
beq HISTORY.RTS already oldest,nothing to do
|
|||
|
|
|||
|
txa
|
|||
|
|
|||
|
>SYSCALL SYS.GetMemPtrA
|
|||
|
>STYA ZPPTR1
|
|||
|
|
|||
|
lda #0
|
|||
|
|
|||
|
.1 tax
|
|||
|
tay
|
|||
|
sec
|
|||
|
adc (ZPPTR1),y
|
|||
|
ldy #CmdHistory.IDX
|
|||
|
cmp (pData),y
|
|||
|
bne .1 reached current index
|
|||
|
|
|||
|
.2 txa
|
|||
|
ldy #CmdHistory.IDX set new index
|
|||
|
sta (pData),y
|
|||
|
bra History.SetBuf
|
|||
|
History.RTS rts
|
|||
|
*--------------------------------------
|
|||
|
History.GetNext ldy #hCmdHistory
|
|||
|
lda (pData),y
|
|||
|
beq HISTORY.RTS
|
|||
|
|
|||
|
tax
|
|||
|
|
|||
|
ldy #CmdHistory.END
|
|||
|
lda (pData),y
|
|||
|
beq HISTORY.RTS empty history,nothing to do
|
|||
|
ldy #CmdHistory.IDX
|
|||
|
cmp (pData),y
|
|||
|
beq HISTORY.RTS already oldest,nothing to do
|
|||
|
|
|||
|
txa
|
|||
|
|
|||
|
>SYSCALL SYS.GetMemPtrA
|
|||
|
>STYA ZPPTR1
|
|||
|
|
|||
|
ldy #CmdHistory.IDX
|
|||
|
lda (pData),y
|
|||
|
phy
|
|||
|
tay
|
|||
|
sec
|
|||
|
adc (ZPPTR1),y add length+1 of current line in history
|
|||
|
ply
|
|||
|
sta (pData),y
|
|||
|
|
|||
|
ldy #CmdHistory.END
|
|||
|
cmp (pData),y
|
|||
|
bne History.SetBuf
|
|||
|
jmp CmdBuffer.CLR end of history, just blank buffer
|
|||
|
*--------------------------------------
|
|||
|
History.SetBuf jsr CmdBuffer.CLR
|
|||
|
|
|||
|
ldy #CmdHistory.IDX
|
|||
|
lda (pData),y
|
|||
|
tay keep length of string
|
|||
|
|
|||
|
clc
|
|||
|
adc ZPPTR1
|
|||
|
sta ZPPTR1
|
|||
|
bcc .1
|
|||
|
inc ZPPTR1+1
|
|||
|
|
|||
|
.1 lda (ZPPTR1),y
|
|||
|
sta (pData),y
|
|||
|
dey
|
|||
|
bpl .1
|
|||
|
|
|||
|
jmp CmdBuffer.PRINT
|
|||
|
*--------------------------------------
|
|||
|
History.Quit ldy #hCmdHistory
|
|||
|
lda (pData),y
|
|||
|
beq .9
|
|||
|
>SYSCALL SYS.FreeMemA
|
|||
|
.9 rts
|
|||
|
*--------------------------------------
|
|||
|
MAN
|
|||
|
SAVE SBIN/SHELL.S.HIS
|
|||
|
LOAD SBIN/SHELL.S
|
|||
|
ASM
|