rem: KPrintF("Found free channel: %ld\n",channel);
context: static void AddWriter(struct AHIRequest *ioreq, struct AHIDevUnit *iounit,    struct AHIBase *AHIBase){  int channel;  KPrintF("Addwriter(0x%08lx)\n", ioreq);  // Search for a free channel, and use if found  for(channel = 0; channel < iounit->Channels; channel++)  {    if(iounit->Voices[channel].NextOffset == FREE)    {      KPrintF("Found free channel: %ld\n",channel);      Enqueue((struct List *) &iounit->PlayingList,(struct Node *) ioreq);      PlayRequest(channel, ioreq, iounit, AHIBase);      break;    }  }  if(channel == iounit->Channels)  {    struct AHIRequest *ioreq2;    // No free channel found. Check if we can kick the last one out...    // There is at least on node in the list, and the last one has lowest priority.    ioreq2 = (struct AHIRequest *) iounit->PlayingList.mlh_TailPred;     if(ioreq->ahir_Std.io_Message.mn_Node.ln_Pri        > ioreq2->ahir_Std.io_Message.mn_Node.ln_Pri)    {      // Let's steal his place!      KPrintF("Stealing channel %ld\n", ioreq2->ahir_Channel);      RemTail((struct List *) &iounit->PlayingList);      channel = ioreq2->ahir_Channel;      ioreq2->ahir_Channel = NOCHANNEL;      Enqueue((struct List *) &iounit->SilentList,(struct Node *) ioreq2);      Enqueue((struct List *) &iounit->PlayingList,(struct Node *) ioreq);      PlayRequest(channel, ioreq, iounit, AHIBase);    }    else    {      // Let's be quiet for a while.      KPrintF("There's no place left for us!\n");      ioreq->ahir_Channel = NOCHANNEL;      Enqueue((struct List *) &iounit->SilentList,(struct Node *) ioreq);    }  }}