- ; open existing file
- mov eax, 5
- mov ebx, [ebp+_FILE_NAME]
- mov ecx, 0
- mov edx, 0777
- int 0x80
- mov [ebp-FILE_HANDLE], eax
+ _repl_loop:
+
+ ; print the prompt
+ push prompt_str
+ call printf
+ push DWORD [stdout]
+ call fflush
+
+ ; read line from stdin
+ push 0
+ call readLine
+
+ mov DWORD [ebp-CMDSTR], eax
+
+ ; commands are single char for now
+ cmp ecx, 1
+ jne _repl_invalid_cmd
+
+ ; parse commands
+ mov eax, DWORD [ebp-CMDSTR]
+ mov eax, [eax]
+
+ ; q exists program =-=-=-=-=-=-=-=-=-=-=-=-=
+ 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 =-=-=-=-=-=-=-=-=-=-=
+ mov eax, DWORD [ebp-CMDSTR]
+ cmp BYTE [eax], 'p'
+ jne _repl_cmd_print_end
+
+ mov eax, DWORD [cur_line]
+ mov ecx, 4
+ mul ecx
+ add eax, [buffer]
+ push DWORD [eax]
+ push echo_str
+ call printf
+ jmp _repl_continue
+ _repl_cmd_print_end: