/* only disallow Note Off if the drum sample is not looped */ if (!(bank->tone[note].instrument->sample->modes & MODES_LOOPING)) return;	/* Note Off is not allowed. */ 
/* only disallow Note Off if the drum sample is not looped */ if (!(bank->tone[nprog].instrument->sample->modes & MODES_LOOPING)) return;	/* Note Off is not allowed. */ } 
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 &&     get_rx_drum(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;      /* this drum is not loaded for some reason (error occured?) */      if (IS_MAGIC_INSTRUMENT(bank->tone[note].instrument))          return;      /* only disallow Note Off if the drum sample is not looped */      if (!(bank->tone[note].instrument->sample->modes & MODES_LOOPING))	  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;	      ctl_note_event(i);	  }	  else	      finish_note(i);      }  }  channel[ch].legato_flag = 0;}
4357	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4357/7bdaab899478fab06ebc999b0af2a7f4a394ab07/playmidi.c/clean/timidity/playmidi.c