;MemPoolLib Demo 1
;
;Speicher resevieren.

DEFTYPE.l MEM1,MEM2,MEM3,TEMPMEM,POOL,I

Function.b Kick {Version.w}
  MOVE.l  4,A6
  MOVE.w  20(A6),D1
  CMP.w   D0,D1
  BCS     WrongKick
  MOVEQ   #-1,D0
  AsmExit
WrongKick
  MOVEQ   #0,D0
  AsmExit
End Function

Function.l AllocVec {Requirements.l,Size.l}
  Let Size+4
  MEM.l=AllocMem (Size,Requirements)
  If MEM
    Poke.l MEM,Size
    Let MEM+4
    Function Return {MEM}
  Else
    Function Return {False}
  End If
End Function

Statement FreeVec {MEM.l}
  If MEM
    Let MEM-4
    Let Size.l=Peek.l(MEM)
    FreeMem MEM,Size
  End If
End Statement

If Kick{39}=True
  POOL=CreatePool (1,$10004,40960,20480)  ;Testen ob Fastram vorhanden ist...
  If POOL=False
    POOL=CreatePool (1,$10001,40960,20480)  ;Aber Publicram ist vorhanden...
  End If
Else
  If Kick{36}=False
    NPrint "Sorry Kickstart 2.0 oder hher wird bentigt..."
  End If
End If


;Wenn POOL=false ist, dann mssen wir den speicher anders reservieren,
;Am besten mit AllocMem oder auch AllocVec_. Jedoch hat AllocVec_ den
;Nachteil, dass man selbst allen Speicher wieder frei geben muss!
;
;Deshalb habe ich zwei funktionen geschrieben, welche AllocVec_ und
;FreeVec_ simulieren...


If POOL
  MEM1=AllocPooled (1,890)
Else
  MEM1=AllocVec {$10001,890}
End If

If MEM1

  If POOL
    MEM2=AllocPooled (1,51200)
  Else
    MEM2=AllocVec {$10001,51200}
  End If

  If MEM2

    For I=0 To 10 Step 1

      If POOL
        MEM3=AllocPooled (1,512)
      Else
        MEM3=AllocVec {$10001,512}
      End If

      NPrint Str$(I)," ",Hex$(MEM3)

      If POOL
        FreePooled 1,MEM3
      Else
        FreeVec {MEM3}
      End If

    Next I
    MouseWait
  End If


  If POOL
    FreePooled 1,MEM2
  Else
    FreeVec {MEM2}
  End If

End If

If POOL
  FreePooled 1,MEM1
Else
  FreeVec {MEM1}
End If

Free MemPool 1  ;MemoryPool und alle entrge freigeben...
End

