From 5bb1fcb00ae2661e8b501437021cd96a74d1ca2c Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Sat, 12 Aug 2000 15:33:17 +0000 Subject: [PATCH] Cleanups and new control functions (hfirst, hlast, hnext, hprev, hcount). --- include/control.h | 17 +++++++++++++++-- src/control/controls.c | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/include/control.h b/include/control.h index af1eba9b..ad88add7 100644 --- a/include/control.h +++ b/include/control.h @@ -50,6 +50,10 @@ int snd_ctl_rawmidi_info(snd_ctl_t *handle, snd_rawmidi_info_t * info); int snd_ctl_read(snd_ctl_t *handle, snd_ctl_callbacks_t * callbacks); +#ifdef __cplusplus +} +#endif + /* * Highlevel API for controls */ @@ -86,12 +90,21 @@ struct snd_hcontrol_stru { snd_ctl_t *handle; /* associated handle */ }; +#ifdef __cplusplus +extern "C" { +#endif + typedef int (snd_ctl_hsort_t)(const snd_hcontrol_t *c1, const snd_hcontrol_t *c2); -typedef int (snd_ctl_hcallback_rebuild_t)(snd_ctl_t *handle, void *private_data); -typedef int (snd_ctl_hcallback_add_t)(snd_ctl_t *handle, void *private_data, snd_hcontrol_t *hcontrol); +typedef void (snd_ctl_hcallback_rebuild_t)(snd_ctl_t *handle, void *private_data); +typedef void (snd_ctl_hcallback_add_t)(snd_ctl_t *handle, void *private_data, snd_hcontrol_t *hcontrol); int snd_ctl_hbuild(snd_ctl_t *handle, snd_ctl_hsort_t *csort); int snd_ctl_hfree(snd_ctl_t *handle); +snd_hcontrol_t *snd_ctl_hfirst(snd_ctl_t *handle); +snd_hcontrol_t *snd_ctl_hlast(snd_ctl_t *handle); +snd_hcontrol_t *snd_ctl_hnext(snd_ctl_t *handle, snd_hcontrol_t *hcontrol); +snd_hcontrol_t *snd_ctl_hprev(snd_ctl_t *handle, snd_hcontrol_t *hcontrol); +int snd_ctl_hcount(snd_ctl_t *handle); snd_hcontrol_t *snd_ctl_hfind(snd_ctl_t *handle, snd_control_id_t *id); int snd_ctl_hlist(snd_ctl_t *handle, snd_hcontrol_list_t *hlist); int snd_ctl_hsort(const snd_hcontrol_t *c1, const snd_hcontrol_t *c2); diff --git a/src/control/controls.c b/src/control/controls.c index 9a169423..6d31968b 100644 --- a/src/control/controls.c +++ b/src/control/controls.c @@ -190,6 +190,44 @@ int snd_ctl_hresort(snd_ctl_t *handle, snd_ctl_hsort_t *hsort) return 0; } +snd_hcontrol_t *snd_ctl_hfirst(snd_ctl_t *handle) +{ + assert(handle != NULL); + if (list_empty(&handle->hlist)) + return NULL; + return (snd_hcontrol_t *)list_entry(handle->hlist.next, snd_hcontrol_t, list); +} + +snd_hcontrol_t *snd_ctl_hlast(snd_ctl_t *handle) +{ + assert(handle != NULL); + if (list_empty(&handle->hlist)) + return NULL; + return (snd_hcontrol_t *)list_entry(handle->hlist.prev, snd_hcontrol_t, list); +} + +snd_hcontrol_t *snd_ctl_hnext(snd_ctl_t *handle, snd_hcontrol_t *hcontrol) +{ + assert(handle != NULL && hcontrol != NULL); + if (hcontrol->list.next == &handle->hlist) + return NULL; + return (snd_hcontrol_t *)list_entry(hcontrol->list.next, snd_hcontrol_t, list); +} + +snd_hcontrol_t *snd_ctl_hprev(snd_ctl_t *handle, snd_hcontrol_t *hcontrol) +{ + assert(handle != NULL && hcontrol != NULL); + if (hcontrol->list.prev == &handle->hlist) + return NULL; + return (snd_hcontrol_t *)list_entry(hcontrol->list.prev, snd_hcontrol_t, list); +} + +int snd_ctl_hcount(snd_ctl_t *handle) +{ + assert(handle != NULL); + return handle->hcount; +} + snd_hcontrol_t *snd_ctl_hfind(snd_ctl_t *handle, snd_control_id_t *id) { void *res; -- 2.47.1