10
20
30
40
50
60
70 :
80
90
100 :
110 :
120 DEFFNm_alloc(size%):LOCALA%,B%:m_heap%=m_heap%
130 size%=(size%+3)AND-4:IFsize%<1:DIMB%-1:=HIMEM-B%-1280
140 A%=m_heap%:IFA%:IF!A%<size%:REPEATB%=A%:A%=A%!4:UNTIL!A%>=size%ORA%=0
150 IFA%=0:DIMB%-1:IFHIMEM-B%-size%-1280<0:=0
160 IFA%=0:DIMA%size%+3:!A%=size%:=A%+4
170 IF!A%>size%+7:A%!(size%+8)=A%!4:A%!(size%+4)=!A%-size%-4:A%!4=A%+size%+4:!A%=size%
180 IFB%:B%!4=A%!4 ELSE m_heap%=A%!4
190 =A%+4
200 :
210 DEFPROCm_free(ptr%):m_heap%=m_heap%:IFptr%=0:ENDPROC
220 !ptr%=m_heap%:m_heap%=ptr%-4
230 IF!ptr%=ptr%+ptr%!-4:ptr%!-4=ptr%!-4+!!ptr%+4:!ptr%=!(!ptr%+4)
240 ENDPROC
250 :
260 DEFFNm_realloc(ptr%,size%):PROCm_free(ptr%):=FNm_alloc(size%)
270 :
280 DEFFNm_zalloc(size%):LOCALA%:A%=FNm_alloc(size%):IFA%=0ORsize%<1:=A%
290 REPEATsize%=size%-1:A%?size%=0:UNTILsize%<0:=A%