#include <functions.h>
#include <exec/types.h>
#include <exec/memory.h>


struct Library *DosBase;

struct MemHelp
{
 struct MemHelp *NextMemPointer;
 long NextMemSize;
};


main(argc,argv)
int argc;
char *argv[];
{
   long AMem, MemSize, MemSize2, AllMem=0;
   struct MemHelp *MemPointer, *NextMem;
   int message, cmp, first=1;

   if(argc<2 || argc>3 || *argv[1]=='?' || argc==3 && strncmp(argv[2],"-m",2))
   {
      printf("Usage: '%s' <Filename> [-m]\n",argv[0]);
      exit(-1L);
   }
   if(argc == 2) printf("%s was written 3/89 by Torsten Budesheim\n",argv[0]);



/*****************************/
/* Now Allocate all FAST_MEM */
/*****************************/
   Forbid();

   for(;;)
   {
      AMem = (long)AvailMem(MEMF_FAST|MEMF_LARGEST);
      if(AMem == NULL) break;
      AllMem += AMem;

      if(first != 0)
      {
         MemPointer = (struct MemHelp *)
               AllocMem(AMem,MEMF_FAST|MEMF_PUBLIC|MEMF_LARGEST);
         MemSize = AMem;
         NextMem = MemPointer;
         first = 0;
      }
      else
      {
         NextMem->NextMemPointer = (struct MemHelp *)
               AllocMem(AMem,MEMF_FAST|MEMF_PUBLIC|MEMF_LARGEST);
         NextMem->NextMemSize = AMem;
         NextMem = NextMem->NextMemPointer;
      }
   }

   Permit();

   if(argc == 2) printf("Allocated %ld bytes FAST-RAM\n",AllMem);



/****************************/
/* Now Start other Programm */
/****************************/
   Execute(argv[1],0L,0L);



/*******************************/
/* Last but not least          */
/* I free all allocated memory */   
/*******************************/
   Forbid();

   NextMem = MemPointer->NextMemPointer;
   MemSize2 = MemPointer->NextMemSize;
   FreeMem(MemPointer,MemSize);

   for(;;)
   {
   MemSize = MemSize2;
   if(NextMem == NULL) break;

   MemPointer = NextMem->NextMemPointer;
   MemSize2 = NextMem->NextMemSize;
   FreeMem(NextMem,MemSize);
   NextMem = MemPointer;
   }

   Permit();

   if(argc == 2) puts("Now back..");

}

