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
|
||||
; at index HL, offsetting all lines by 2 bytes.
|
||||
bufInsertLine:
|
||||
call bufIndexInBounds
|
||||
jr nz, .append
|
||||
push de ; --> lvl 1, scratchpad ptr
|
||||
push hl ; --> lvl 2, insert index
|
||||
; The logic below is mostly copy-pasted from bufDelLines, but with a
|
||||
@ -155,6 +157,7 @@ bufInsertLine:
|
||||
inc de ; second byte beyond last line
|
||||
; HL = BUF_LINECNT-1, DE = BUF_LINECNT, BC is set. We're good!
|
||||
lddr
|
||||
.set:
|
||||
; We still need to increase BUF_LINECNT
|
||||
ld hl, (BUF_LINECNT)
|
||||
inc hl
|
||||
@ -168,6 +171,16 @@ bufInsertLine:
|
||||
inc hl
|
||||
ld (hl), d
|
||||
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
|
||||
; scratchpad, in HL.
|
||||
@ -181,3 +194,16 @@ bufScratchpadAdd:
|
||||
pop hl ; <-- lvl 1
|
||||
pop de
|
||||
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