+void PluginClientFrames::sort_position(int dir)
+{
+// enforce order
+ if( dir == PLAY_REVERSE )
+ rev_sort();
+ else
+ fwd_sort();
+}
+
+// pop frames until buffer passes position=pos in direction=dir
+// dir==0, pop frame; pos<0, pop all frames
+// delete past frames, return last popped frame
+PluginClientFrame* PluginClientFrames::get_gui_frame(double pos, int dir)
+{
+ if( dir ) {
+ while( first != last ) {
+ if( pos >= 0 && dir*(first->next->position - pos) > 0 ) break;
+ delete first; --count;
+ }
+ }
+ PluginClientFrame *frame = first;
+ if( frame ) { remove_pointer(frame); --count; }
+ return frame;
+}
+
+PluginClientFrame* PluginClient::get_gui_frame(double pos, int dir)
+{
+ return client_frames.get_gui_frame(pos, dir);
+}
+PluginClientFrame* PluginClient::next_gui_frame()
+{
+ return client_frames.first;
+}