finished reading buffer
authorDaniel Liu <mr.picklepinosaur@gmail.com>
Sat, 19 Jun 2021 17:11:07 +0000 (13:11 -0400)
committerDaniel Liu <mr.picklepinosaur@gmail.com>
Sat, 19 Jun 2021 17:11:07 +0000 (13:11 -0400)
sped.asm

index d0a634b..21d1910 100644 (file)
--- a/sped.asm
+++ b/sped.asm
@@ -72,15 +72,24 @@ main:
 ;    eax - pointer to mem
 ;    ecx - lines read
 readFile:
-    %define _FILE_NAME 8
+    %define _FILE_NAME  8
     %define FILE_HANDLE 4
+    %define IS_EOF      8
+    %define LINES_READ  12
+    %define BUF_PTR     16 ; malloced array of strings
 
     push ebp
     mov ebp, esp
     
     ; allocate vars
-    sub esp, 4
+    sub esp, 16
     mov DWORD [ebp-FILE_HANDLE], 0x00
+    mov DWORD [ebp-IS_EOF], 0x00
+    mov DWORD [ebp-LINES_READ], 0x00
+
+    push 0
+    call malloc 
+    mov [ebp-BUF_PTR], eax
 
     ; open existing file
     mov eax, 5
@@ -92,20 +101,46 @@ readFile:
 
     ; check if file was open successfully
     cmp eax, 0
-    jge _readFile_noerror
+    jge _readFile_loop
     push eax
     push wrongfile_str
     call printf
     jmp _readFile_exit
 
-    _readFile_noerror:
+    _readFile_loop:
+
+    ; check if eof was reached
+    cmp DWORD [ebp-IS_EOF], 1
+    je _readFile_exit
+
     push DWORD [ebp-FILE_HANDLE]
     call readLine 
 
-    push eax
+    mov esi, eax
+    mov [ebp-IS_EOF], ebx
+    
+    push esi
     call printf
 
-    jmp _readFile_exit
+    ; make string buffer bigger
+    mov eax, DWORD [ebp-LINES_READ]
+    add eax, 1
+    mov ecx, 4
+    mul ecx
+    push eax
+    push DWORD [ebp-BUF_PTR]
+    call realloc
+    mov DWORD [ebp-BUF_PTR], eax
+
+    ; write string to buffer
+    mov eax, DWORD [ebp-BUF_PTR]
+    mov ecx, 4
+    mul ecx
+    mov eax, esi
+
+    add DWORD [ebp-LINES_READ], 1
+
+    jmp _readFile_loop
 
     _readFile_exit:
     ; close file
@@ -115,6 +150,9 @@ readFile:
 
     %undef _FILE_NAME
     %undef FILE_HANDLE
+    %undef IS_EOF
+    %undef LINES_READ
+    %undef BUF_PTR
 
     mov esp, ebp
     pop ebp
@@ -136,7 +174,7 @@ readLine:
     mov ebp, esp
     
     ; allocate vars
-    sub esp, 8
+    sub esp, 12
     mov DWORD [ebp-CHAR_COUNT], 0x00
     mov DWORD [ebp-BLOCK_COUNT], 0x00
 
@@ -169,6 +207,13 @@ readLine:
     ; add ecx, [ebp-CHAR_COUNT]
     ; mov edx, 1
     ; int 0x80
+    
+    ; check for eof
+    cmp eax, 0 ; eax has zero on eof
+    jne _readLine_not_eof
+    mov ebx, 1
+    jmp _readLine_exit 
+    _readLine_not_eof:
 
     ; check for newline
     mov eax, [ebp-STR_PTR]
@@ -178,15 +223,6 @@ readLine:
     mov ebx, 0
     jmp _readLine_exit
     _readLine_not_newline:
-    
-    ; check for eof
-    mov eax, [ebp-STR_PTR]
-    add eax, [ebp-CHAR_COUNT]
-    cmp DWORD [eax], 0x05
-    jne _readLine_not_eof
-    mov ebx, 1
-    jmp _readLine_exit 
-    _readLine_not_eof:
 
     add DWORD [ebp-CHAR_COUNT], 1
     jmp _readLine_loop