Browse Source

ed: allow appending at the end of the file

pull/10/head
Virgil Dupras 5 years ago
parent
commit
f6479486f2
1 changed files with 26 additions and 0 deletions
  1. +26
    -0
      apps/ed/buf.asm

+ 26
- 0
apps/ed/buf.asm View File

@@ -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…
Cancel
Save