more commands + readme
authorDaniel Liu <mr.picklepinosaur@gmail.com>
Sat, 19 Jun 2021 20:57:28 +0000 (16:57 -0400)
committerDaniel Liu <mr.picklepinosaur@gmail.com>
Sat, 19 Jun 2021 20:57:28 +0000 (16:57 -0400)
README.md
fileutils.asm
sped.asm

index 13bcd24..0664806 100644 (file)
--- a/README.md
+++ b/README.md
@@ -1 +1,37 @@
 ## SPED - the stupidly pointless editor
 ## SPED - the stupidly pointless editor
+
+**sped** is a line editor written in x86 assembly. Back in the day, before visual editors, line editors like **ed** were used.
+This is my own stupid and pointless attempt at writing such line editor.
+
+### FEATURES/NON-FEATURES
+
+
+
+### INSTALLATION
+
+#### Build from source
+
+With `gcc` and `nasm` installed, you can simply run
+```
+make
+```
+to build the project
+
+### COMMANDS
+
+**p** - prints the contents of the current line
+
+**n** - prints the current line number
+
+**+/-** - moves up/down a line
+
+**g/G** - jumps to top/bottom of file
+
+**c** - change the contents of the current line
+
+### FAQ
+
+**are you insane**
+
+yes
+
index ad284b5..8596ff3 100644 (file)
@@ -201,3 +201,7 @@ readLine:
     pop ebp
     ret
 
     pop ebp
     ret
 
+; writes contents of string array into file
+; arg: filename, string array
+; writeFile:
+
index 585697b..d7dcb8d 100644 (file)
--- a/sped.asm
+++ b/sped.asm
@@ -3,10 +3,12 @@
 
 %include "fileutils.S"
 
 
 %include "fileutils.S"
 
-global main
 extern printf
 extern fflush
 extern stdout
 extern printf
 extern fflush
 extern stdout
+extern free
+
+global main
 
 ; macros
 %macro write_str 2
 
 ; macros
 %macro write_str 2
@@ -72,6 +74,10 @@ main:
     jmp _main_exit
 
     _main_exit:
     jmp _main_exit
 
     _main_exit:
+
+    ; free string array
+
+
     %undef _ARGC
     %undef _ARGV
 
     %undef _ARGC
     %undef _ARGV
 
@@ -112,14 +118,14 @@ repl:
     mov eax, DWORD [ebp-CMDSTR]
     mov eax, [eax]
 
     mov eax, DWORD [ebp-CMDSTR]
     mov eax, [eax]
 
-    ; q exists program
+    ; q exists program =-=-=-=-=-=-=-=-=-=-=-=-=
     mov eax, DWORD [ebp-CMDSTR]
     cmp BYTE [eax], 'q'
     jne _repl_cmd_quit_end
     jmp _repl_exit
     _repl_cmd_quit_end:
 
     mov eax, DWORD [ebp-CMDSTR]
     cmp BYTE [eax], 'q'
     jne _repl_cmd_quit_end
     jmp _repl_exit
     _repl_cmd_quit_end:
 
-    ; p prints current line
+    ; p prints current line =-=-=-=-=-=-=-=-=-=-=
     mov eax, DWORD [ebp-CMDSTR]
     cmp BYTE [eax], 'p'
     jne _repl_cmd_print_end
     mov eax, DWORD [ebp-CMDSTR]
     cmp BYTE [eax], 'p'
     jne _repl_cmd_print_end
@@ -134,7 +140,7 @@ repl:
     jmp _repl_continue
     _repl_cmd_print_end:
 
     jmp _repl_continue
     _repl_cmd_print_end:
 
-    ; n prints the current line number
+    ; n prints the current line number =-=-=-=-=-=-=-=
     mov eax, DWORD [ebp-CMDSTR]
     cmp BYTE [eax], 'n'
     jne _repl_cmd_number_end
     mov eax, DWORD [ebp-CMDSTR]
     cmp BYTE [eax], 'n'
     jne _repl_cmd_number_end
@@ -146,7 +152,7 @@ repl:
     jmp _repl_continue
     _repl_cmd_number_end:
 
     jmp _repl_continue
     _repl_cmd_number_end:
 
-    ; - goes to prev line
+    ; - goes to prev line =-=-=-=-=-=-=-=-=-=-=-=-=
     mov eax, DWORD [ebp-CMDSTR]
     cmp BYTE [eax], '-'
     jne _repl_cmd_decline_end
     mov eax, DWORD [ebp-CMDSTR]
     cmp BYTE [eax], '-'
     jne _repl_cmd_decline_end
@@ -162,7 +168,7 @@ repl:
     jmp _repl_continue
     _repl_cmd_decline_end:
 
     jmp _repl_continue
     _repl_cmd_decline_end:
 
-    ; + goes to next line
+    ; + goes to next line =-=-=-=-=-=-=-=-=-=-=-=-=
     mov eax, DWORD [ebp-CMDSTR]
     cmp BYTE [eax], '+'
     jne _repl_cmd_incline_end
     mov eax, DWORD [ebp-CMDSTR]
     cmp BYTE [eax], '+'
     jne _repl_cmd_incline_end
@@ -178,6 +184,57 @@ repl:
     jmp _repl_continue
     _repl_cmd_incline_end:
 
     jmp _repl_continue
     _repl_cmd_incline_end:
 
+    ; g goes to first line =-=-=-=-=-=-=-=-=-=-=-=-=
+    mov eax, DWORD [ebp-CMDSTR]
+    cmp BYTE [eax], 'g'
+    jne _repl_cmd_jumptop_end
+
+    mov DWORD [cur_line], 0x00
+
+    jmp _repl_continue
+    _repl_cmd_jumptop_end:
+
+    ; G goes to last line =-=-=-=-=-=-=-=-=-=-=-=-=
+    mov eax, DWORD [ebp-CMDSTR]
+    cmp BYTE [eax], 'G'
+    jne _repl_cmd_jumpbot_end
+
+    mov eax, DWORD [buffer_lines]
+    sub eax, 1
+    mov DWORD [cur_line], eax
+
+    jmp _repl_continue
+    _repl_cmd_jumpbot_end:
+
+    ; c changes the current line =-=-=-=-=-=-=-=-=-=
+    mov eax, DWORD [ebp-CMDSTR]
+    cmp BYTE [eax], 'c'
+    jne _repl_cmd_change_end
+
+    ; read a new line to use
+    push 0
+    call readLine
+
+    mov esi, eax
+
+    ; free old string
+    mov eax, [cur_line]
+    mov ecx, 4
+    mul ecx
+    add eax, [buffer]
+    push DWORD [eax]
+    call free
+
+    ; insert new string
+    mov eax, [cur_line]
+    mov ecx, 4
+    mul ecx
+    add eax, DWORD [buffer]
+    mov [eax], esi
+
+    jmp _repl_continue
+    _repl_cmd_change_end:
+
 
     jmp _repl_invalid_cmd
 
 
     jmp _repl_invalid_cmd