class column { enum { pt_note, pt_trigger, pt_byte, pt_word, pt_float } type; float min, max, default_value; void *column_user_data; }; interface IPatternEditor { void set_pattern(int rows, int tracks, column[] globals, column []locals, void *user_data); void set_sample(int sample); }; interface IPatternEditorHost { float get_value(int row, int track, int param, void *user_data, void *column_user_data); void set_value(int row, int track, int param, float value, bool skip_playing, void *user_data, void *column_user_data); };