10 REM > BLib.MAlloc 1.04 12Aug2006
   20 REM v1.04 12Aug2006 JGH: Checks for size of free memory
   30 REM v1.03 23Jul2006 JGH: m_zalloc() added
   40 REM v1.02 15Sep1989 JGH: m_realloc() added
   50 REM v1.01 08Sep1989 JGH: Bug in reuse of released memory fixed
   60 REM v1.00 06Sep1989 JGH: m_alloc() and m_free() written
   70 :
   80 REM Memory Allocation Routines
   90 REM ~~~~~~~~~~~~~~~~~~~~~~~~~~
  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%