/*ALLOC.C*/#define NULL 0#define AV struct availistAV $(  AV *ptr;  int bsz;$);int tot;int holdtot, lomem, blocka, blockb;int endprog = 0x9F70;extern int dofirst();extern char msg2[];static AV *freep = NULL;char pmpt[] = "Overflow...";char *malloc(nunits)int nunits;$(  AV *p, *prevp;  if((nunits < 4) && (nunits > 0))    nunits = 4;  if((prevp = freep) == NULL)    dofreep();  prevp = freep;  p = prevp->ptr;  while(1)  $(    if((p->bsz >= nunits+4) || (p->bsz == nunits))    $(      if(p->bsz == nunits)        prevp->ptr = p->ptr;      else      $(        p->bsz -= nunits;        p = (AV *)(p->bsz + (int)p);      $)      tot -= nunits;      return((char *)p);    $)    if(p == freep)    $(      printf("\n%s\n",pmpt);      printf("%s\n\n",msg2);      getkey();      return(NULL);    $)    prevp = p;    p = p->ptr;  $)$)/*function free*/free(adr,siz)char *adr;int siz;$(  AV *bp,     *p;  bp = (AV *)adr;  if((siz < 4) && (siz > 0))    siz = 4;  bp->bsz = siz;  p = freep;  while(!(bp > p && bp < p->ptr))  $(    if(p >= p->ptr && (bp > p || bp < p->ptr))      break;    p = p->ptr;  $)  if(bp->bsz + (int)bp == p->ptr)  $(    bp->bsz += p->ptr->bsz;    bp->ptr = p->ptr->ptr;  $)  else bp->ptr = p->ptr;  if(p->bsz + (int)p == bp)  $(    p->bsz += bp->bsz;    p->ptr = bp->ptr;  $)  else p->ptr = bp;  tot += siz;$)/*function dofreep()*/dofreep()$(  AV *prevp;  freep = (AV *) lomem;  freep->ptr = lomem + 4;  freep->bsz = 0;  prevp = freep;  freep = freep->ptr;  freep->ptr = endprog;  freep->bsz = blockb - 4;  freep = freep->ptr;  freep->ptr = prevp;  freep->bsz = blocka;  freep = prevp;$)front()$(  closeall();  lomem = dpeek(743);  blocka = 0xBC00 - endprog;  blockb = 0x2C00 - lomem;  holdtot = blocka + blockb;  tot = holdtot;$)clearfl()$(  tot = holdtot;  dofreep();  dofirst();$)