appending lines after
[sped.git] / repl.asm
index 3c7f429..6a1472f 100644 (file)
--- a/repl.asm
+++ b/repl.asm
@@ -1,11 +1,14 @@
 
-%include "fileutils.S"
-
 extern printf
 extern fflush
 extern stdout
 extern free
 
+extern readLine
+extern writeFile
+extern shiftLeft
+extern shiftRight
+
 global repl
 
 section .data
@@ -190,12 +193,50 @@ repl:
     mov eax, DWORD [ebp-CMDSTR]
     cmp BYTE [eax], 'd'
     jne _repl_cmd_delete_end
-
     
+    ; check to make sure we don't have only one line
+
+    ; delete the line
+    push DWORD [buffer]
+    push DWORD [buffer_lines]
+    push DWORD [cur_line]
+    call shiftLeft
+    mov [buffer], eax
+
+    sub DWORD [buffer_lines], 1
 
     jmp _repl_continue
     _repl_cmd_delete_end:
 
+    ; o appends text after line =-=-=-=-=-=-=-=-=
+    mov eax, DWORD [ebp-CMDSTR]
+    cmp BYTE [eax], 'o'
+    jne _repl_cmd_appendup_end
+
+    ; make room first
+    push DWORD [buffer]
+    push DWORD [buffer_lines]
+    push DWORD [cur_line]
+    call shiftRight
+    mov [buffer], eax
+
+    ; input text
+    push 0
+    call readLine
+    mov esi, eax
+
+    ; insert new string
+    mov eax, [cur_line]
+    mov ecx, 4
+    mul ecx
+    add eax, DWORD [buffer]
+    mov [eax], esi
+
+    add DWORD [buffer_lines], 1
+
+    jmp _repl_continue
+    _repl_cmd_appendup_end:
+
     ; w writes file =-=-=-=-=-=-=-=-=-=-=-=-=
     mov eax, DWORD [ebp-CMDSTR]
     cmp BYTE [eax], 'w'