1 ; sped - the stupidly pointless editor
3 ; utils.asm: some buffer utilities
16 ; shrinks array (4byte) by shifting blocks left
17 ; args: buffer, buffer_len, shift_pos (index that gets destroyed)
19 ; eax: location of new buffer
23 %define _BUFFER_LEN 12
26 %define BLOCK_OFFSET 8 ; mem location of block to be destroyed
35 mov eax, DWORD [ebp+_BUFFER_LEN]
36 sub eax, [ebp+_SHIFT_POS]
38 mov [ebp-SHIFT_LEN], eax
40 str_offset [ebp+_BUFFER], [ebp+_SHIFT_POS]
41 mov [ebp-BLOCK_OFFSET], eax
43 ; free string to be destoryed first
44 mov eax, DWORD [ebp-BLOCK_OFFSET]
50 mov eax, DWORD [ebp-SHIFT_LEN]
54 mov eax, DWORD [ebp-BLOCK_OFFSET]
57 push DWORD [ebp-BLOCK_OFFSET]
60 ; realloc to shrink the array
61 mov eax, DWORD [ebp+_BUFFER_LEN]
66 push DWORD [ebp+_BUFFER]
68 mov [ebp-NEW_BUFFER], eax
74 mov eax, [ebp-NEW_BUFFER]
80 ; grows array by shifting blocks right
81 ; args: buffer, buffer_len, shift_pos (new uninitalized index)
83 ; eax: location of new buffer
86 %define _BUFFER_LEN 12
89 %define BLOCK_OFFSET 8 ; mem location of block to be destroyed
97 ; realloc to make memory bigger first
98 mov eax, DWORD [ebp+_BUFFER_LEN]
103 push DWORD [ebp+_BUFFER]
105 mov [ebp-NEW_BUFFER], eax
108 mov eax, DWORD [ebp+_BUFFER_LEN]
109 sub eax, [ebp+_SHIFT_POS]
110 mov [ebp-SHIFT_LEN], eax
112 str_offset [ebp-NEW_BUFFER], [ebp+_SHIFT_POS]
113 mov [ebp-BLOCK_OFFSET], eax
116 mov eax, DWORD [ebp-SHIFT_LEN]
120 push DWORD [ebp-BLOCK_OFFSET]
121 mov eax, DWORD [ebp-BLOCK_OFFSET]
130 mov eax, [ebp-NEW_BUFFER]