From: Daniel Liu Date: Sat, 19 Jun 2021 17:11:07 +0000 (-0400) Subject: finished reading buffer X-Git-Url: https://git.danieliu.xyz/?a=commitdiff_plain;h=f4e4f6cbfee907de343ab7a08a90d38b18def0a1;p=sped.git finished reading buffer --- diff --git a/sped.asm b/sped.asm index d0a634b..21d1910 100644 --- 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