if(ISDRUMCHANNEL(ch) && channel[ch].drums[note] != NULL && !channel[ch].drums[note]->rx_note_off) { 
if(ISDRUMCHANNEL(ch) && channel[ch].drums[note] != NULL && !channel[ch].drums[note]->rx_note_off) { ToneBank *bank;  bank = drumset[channel[ch].bank]; if(bank == NULL) bank = drumset[0];  /* uh oh, this drum doesn't have an instrument loaded yet */ if (bank->tone[note].instrument == NULL) return;  /* only disallow Note Off if the drum sample is not looped */ if (!(bank->tone[note].instrument->sample->modes & MODES_LOOPING)) 
static void note_off(MidiEvent *e){  int uv = upper_voices, i;  int ch, note, vid, sustain;  ch = e->channel;  note = MIDI_EVENT_NOTE(e);  if(ISDRUMCHANNEL(ch) && channel[ch].drums[note] != NULL	  && !channel[ch].drums[note]->rx_note_off) {	  return;	/* Note Off is not allowed. */  }  if((vid = last_vidq(ch, note)) == -1)      return;  sustain = channel[ch].sustain;  for(i = 0; i < uv; i++)      if(voice[i].status==VOICE_ON &&	 voice[i].channel==ch &&	 voice[i].note==note &&	 voice[i].vid==vid)      {	  if(sustain)	  {	      voice[i].status=VOICE_SUSTAINED;	      set_voice_timeout(voice + i, ch, note);	      ctl_note_event(i);	  }	  else	      finish_note(i);      }	  channel[ch].legato_flag = 0;}
4357	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4357/9ea023b2660f7ced88fbb1a70fc3ee43950a3bb5/playmidi.c/clean/timidity/playmidi.c