NEW
  AUTO 3,1
				.LIST OFF	
*--------------------------------------
HIS.Init		>LDYAI HISTORY.MAX		Get a buffer for History
				>SYSCALL GetMem0
				bcs .9

				txa
				>STA.G HIS.hBuf
				
				lda #0
				>STA.G HIS.Count
				>STA.G HIS.Index
.9				rts
*--------------------------------------
HIS.Quit		>LDA.G HIS.hBuf
				beq .9
				>SYSCALL FreeMem
.9				rts
*--------------------------------------
HIS.Add			>LDA.G HIS.hBuf
				beq .9
				
				>SYSCALL GetMemPtr
				>STYA ZPPTR1
				
.10				lda #$ff
				jsr HIS.GetA			Y=ending 0
				phy
				tya
				
				sec						add len+1
				>ADC.G CL.Len		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 (ZPCLBuf),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
				>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
				>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 (ZPCLBuf),y
				bne .2
				
				tya
				>STA.G CL.Ptr
				>STA.G CL.Len
				
				jmp CL.PrintCLBuf
*--------------------------------------
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
*--------------------------------------
MAN
SAVE USR/SRC/BIN/SH.S.HIS
LOAD USR/SRC/BIN/SH.S
ASM
