ed: allow appending at the end of the file
This commit is contained in:
parent
8d7abd9994
commit
f6479486f2
@ -129,6 +129,8 @@ bufDelLines:
|
|||||||
; Insert string where DE points to memory scratchpad, then insert that line
|
; Insert string where DE points to memory scratchpad, then insert that line
|
||||||
; at index HL, offsetting all lines by 2 bytes.
|
; at index HL, offsetting all lines by 2 bytes.
|
||||||
bufInsertLine:
|
bufInsertLine:
|
||||||
|
call bufIndexInBounds
|
||||||
|
jr nz, .append
|
||||||
push de ; --> lvl 1, scratchpad ptr
|
push de ; --> lvl 1, scratchpad ptr
|
||||||
push hl ; --> lvl 2, insert index
|
push hl ; --> lvl 2, insert index
|
||||||
; The logic below is mostly copy-pasted from bufDelLines, but with a
|
; The logic below is mostly copy-pasted from bufDelLines, but with a
|
||||||
@ -155,6 +157,7 @@ bufInsertLine:
|
|||||||
inc de ; second byte beyond last line
|
inc de ; second byte beyond last line
|
||||||
; HL = BUF_LINECNT-1, DE = BUF_LINECNT, BC is set. We're good!
|
; HL = BUF_LINECNT-1, DE = BUF_LINECNT, BC is set. We're good!
|
||||||
lddr
|
lddr
|
||||||
|
.set:
|
||||||
; We still need to increase BUF_LINECNT
|
; We still need to increase BUF_LINECNT
|
||||||
ld hl, (BUF_LINECNT)
|
ld hl, (BUF_LINECNT)
|
||||||
inc hl
|
inc hl
|
||||||
@ -168,6 +171,16 @@ bufInsertLine:
|
|||||||
inc hl
|
inc hl
|
||||||
ld (hl), d
|
ld (hl), d
|
||||||
ret
|
ret
|
||||||
|
.append:
|
||||||
|
; nothing to move, just put the line there. Let's piggy-back on the end
|
||||||
|
; of the regular routine by carefully pushing the right register in the
|
||||||
|
; right place.
|
||||||
|
; But before that, make sure that HL isn't too high. The only place we
|
||||||
|
; can append to is at (BUF_LINECNT)
|
||||||
|
ld hl, (BUF_LINECNT)
|
||||||
|
push de ; --> lvl 1
|
||||||
|
push hl ; --> lvl 2
|
||||||
|
jr .set
|
||||||
|
|
||||||
; copy string that HL points to to scratchpad and return its pointer in
|
; copy string that HL points to to scratchpad and return its pointer in
|
||||||
; scratchpad, in HL.
|
; scratchpad, in HL.
|
||||||
@ -181,3 +194,16 @@ bufScratchpadAdd:
|
|||||||
pop hl ; <-- lvl 1
|
pop hl ; <-- lvl 1
|
||||||
pop de
|
pop de
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
; Sets Z according to whether the line index in HL is within bounds.
|
||||||
|
bufIndexInBounds:
|
||||||
|
push de
|
||||||
|
ld de, (BUF_LINECNT)
|
||||||
|
call cpHLDE
|
||||||
|
pop de
|
||||||
|
jr c, .withinBounds
|
||||||
|
; out of bounds
|
||||||
|
jp unsetZ
|
||||||
|
.withinBounds:
|
||||||
|
cp a ; ensure Z
|
||||||
|
ret
|
||||||
|
Loading…
Reference in New Issue
Block a user