' (c) MAXON Computer GmbH
FUNCTION speicher_inst(bytes%)
  LOCAL bitm_gr%,spei_gr%,malloc_gr%,back%
  LOCAL offset%,bitm_adr%
  IF bytes%=-1
    malloc_gr%=MALLOC(-1)
    bitm_gr%=SHR(malloc_gr%,7)
    SUB malloc_gr%,bitm_gr%
    back%=ROL(SHR(malloc_gr%,7),7)-48
    RETURN back%
  ENDIF
  ADD bytes%,48
  bitm_gr%=SHR(bytes%,7)
  IF ROL(SHR(bytes%,7),7)<bytes%
    INC bitm_gr%
  ENDIF
  spei_gr%=ROL(bitm_gr%,7)
  malloc_gr%=spei_gr%+bitm_gr%
  IF MALLOC(-1)<malloc_gr% OR bitm_gr%<2
    back%=FALSE
    RETURN back%
  ENDIF
  malloc_adr%=MALLOC(malloc_gr%)
  {malloc_adr%}=0
  {malloc_adr%+16}=spei_gr%-16
  {malloc_adr%+12}=malloc_adr%+spei_gr%
  {malloc_adr%+32}=spei_gr%-48
  {malloc_adr%+8}=spei_gr%-48
  {malloc_adr%+4}=malloc_adr%+32
  {malloc_adr%+24}=malloc_adr%+32
  {malloc_adr%+36}=malloc_adr%+16
  {malloc_adr%+40}=malloc_adr%
  {malloc_adr%+44}=FALSE
  bitm_adr%={malloc_adr%+12}
  REPEAT
    IF bitm_gr%>3
      {bitm_adr%+offset%}=-1
      SUB bitm_gr%,4
      ADD offset%,4
    ELSE
      BYTE{bitm_adr%+offset%}=255
      DEC bitm_gr%
      INC offset%
    ENDIF
  UNTIL bitm_gr%=0
  BYTE{bitm_adr%}=63
  BYTE{bitm_adr%+offset%-1}=254
  back%=TRUE
  RETURN back%
ENDFUNC
