Update of /cvsroot/alsa/alsa-lib/src/alisp
In directory sc8-pr-cvs1:/tmp/cvs-serv9993/src/alisp

Modified Files:
        alisp_snd.c 
Log Message:
Added some hctl_elem functions to alisp

Index: alisp_snd.c
===================================================================
RCS file: /cvsroot/alsa/alsa-lib/src/alisp/alisp_snd.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- alisp_snd.c 29 Jul 2003 13:19:19 -0000      1.2
+++ alisp_snd.c 30 Jul 2003 19:14:01 -0000      1.3
@@ -192,6 +192,24 @@
        return lexpr;
 }
 
+static struct alisp_object * new_result4(struct alisp_instance * instance, const char 
*ptr_id, void *ptr)
+{
+       struct alisp_object * lexpr;
+
+       if (ptr == NULL)
+               return &alsa_lisp_nil;
+       lexpr = new_object(instance, ALISP_OBJ_CONS);
+       if (lexpr == NULL)
+               return NULL;
+       lexpr->value.c.car = new_string(instance, ptr_id);
+       if (lexpr->value.c.car == NULL)
+               return NULL;
+       lexpr->value.c.cdr = new_pointer(instance, ptr);
+       if (lexpr->value.c.cdr == NULL)
+               return NULL;
+       return lexpr;
+}
+
 /*
  *  macros
  */
@@ -200,14 +218,15 @@
  *  HCTL functions
  */
 
-typedef int (*snd_xxx_open_t)(void **rctl, const char *name, int mode);
-typedef int (*snd_xxx_open1_t)(void **rctl, void *handle);
-typedef int (*snd_xxx_close_t)(void **rctl);
+typedef int (*snd_int_pp_strp_int_t)(void **rctl, const char *name, int mode);
+typedef int (*snd_int_pp_p_t)(void **rctl, void *handle);
+typedef int (*snd_int_p_t)(void *rctl);
 typedef int (*snd_int_intp_t)(int *val);
 typedef int (*snd_int_str_t)(const char *str);
 typedef int (*snd_int_int_strp_t)(int val, char **str);
+typedef void *(*snd_p_p_t)(void *handle);
 
-static struct alisp_object * FA_xxx_open(struct alisp_instance * instance, struct 
acall_table * item, struct alisp_object * args)
+static struct alisp_object * FA_int_pp_strp_int(struct alisp_instance * instance, 
struct acall_table * item, struct alisp_object * args)
 {
        const char *name;
        int err, mode;
@@ -224,33 +243,57 @@
                return &alsa_lisp_nil;
        mode = get_flags(eval(instance, car(cdr(args))), flags, 0);
        
-       err = ((snd_xxx_open_t)item->xfunc)(&handle, name, mode);
+       err = ((snd_int_pp_strp_int_t)item->xfunc)(&handle, name, mode);
        return new_result1(instance, err, item->prefix, handle);
 }
 
-static struct alisp_object * FA_xxx_open1(struct alisp_instance * instance, struct 
acall_table * item, struct alisp_object * args)
+static struct alisp_object * FA_int_pp_p(struct alisp_instance * instance, struct 
acall_table * item, struct alisp_object * args)
 {
        int err;
        void *handle;
-       const char *prefix1 = "ctl";
+       const char *prefix1;
 
+       if (item->xfunc == &snd_hctl_open_ctl)
+               prefix1 = "ctl";
+       else
+               return &alsa_lisp_nil;
        args = eval(instance, args);
        handle = (void *)get_ptr(args, prefix1);
        if (handle == NULL)
                return &alsa_lisp_nil;
-       err = ((snd_xxx_open1_t)item->xfunc)(&handle, handle);
+       err = ((snd_int_pp_p_t)item->xfunc)(&handle, handle);
        return new_result1(instance, err, item->prefix, handle);
 }
 
-static struct alisp_object * FA_xxx_close(struct alisp_instance * instance, struct 
acall_table * item, struct alisp_object * args)
+static struct alisp_object * FA_p_p(struct alisp_instance * instance, struct 
acall_table * item, struct alisp_object * args)
 {
        void *handle;
+       const char *prefix1;
 
+       if (item->xfunc == &snd_hctl_first_elem ||
+           item->xfunc == &snd_hctl_last_elem ||
+           item->xfunc == &snd_hctl_elem_next ||
+           item->xfunc == &snd_hctl_elem_prev)
+               prefix1 = "hctl_elem";
+       else
+               return &alsa_lisp_nil;
        args = eval(instance, args);
        handle = (void *)get_ptr(args, item->prefix);
        if (handle == NULL)
                return &alsa_lisp_nil;
-       return new_result(instance, ((snd_xxx_close_t)item->xfunc)(handle));
+       handle = ((snd_p_p_t)item->xfunc)(handle);
+       return new_result4(instance, prefix1, handle);
+}
+
+static struct alisp_object * FA_int_p(struct alisp_instance * instance, struct 
acall_table * item, struct alisp_object * args)
+{
+       void *handle;
+
+       args = eval(instance, args);
+       handle = (void *)get_ptr(args, item->prefix);
+       if (handle == NULL)
+               return &alsa_lisp_nil;
+       return new_result(instance, ((snd_int_p_t)item->xfunc)(handle));
 }
 
 static struct alisp_object * FA_int_intp(struct alisp_instance * instance, struct 
acall_table * item, struct alisp_object * args)
@@ -315,6 +358,57 @@
        return lexpr;
 }
 
+static struct alisp_object * create_ctl_elem_id(struct alisp_instance * instance, 
snd_ctl_elem_id_t * id, struct alisp_object * cons)
+{
+       cons = add_cons(instance, cons, 0, "numid", new_integer(instance, 
snd_ctl_elem_id_get_numid(id)));
+       cons = add_cons(instance, cons, 1, "iface", new_string(instance, 
snd_ctl_elem_iface_name(snd_ctl_elem_id_get_numid(id))));
+       cons = add_cons(instance, cons, 1, "dev", new_integer(instance, 
snd_ctl_elem_id_get_device(id)));
+       cons = add_cons(instance, cons, 1, "subdev", new_integer(instance, 
snd_ctl_elem_id_get_subdevice(id)));
+       cons = add_cons(instance, cons, 1, "name", new_string(instance, 
snd_ctl_elem_id_get_name(id)));
+       cons = add_cons(instance, cons, 1, "index", new_integer(instance, 
snd_ctl_elem_id_get_index(id)));
+       return cons;
+}
+
+static struct alisp_object * FA_hctl_elem_info(struct alisp_instance * instance, 
struct acall_table * item, struct alisp_object * args)
+{
+       snd_hctl_elem_t *handle;
+       struct alisp_object * lexpr, * p1, * p2;
+       snd_ctl_elem_info_t *info;
+       snd_ctl_elem_id_t *id;
+       snd_ctl_elem_type_t type;
+       int err;
+
+       args = eval(instance, args);
+       handle = (snd_hctl_elem_t *)get_ptr(args, item->prefix);
+       if (handle == NULL)
+               return &alsa_lisp_nil;
+       snd_ctl_elem_info_alloca(&info);
+       snd_ctl_elem_id_alloca(&id);
+       err = snd_hctl_elem_info(handle, info);
+       lexpr = new_lexpr(instance, err);
+       if (err < 0)
+               return lexpr;
+       type = snd_ctl_elem_info_get_type(info);
+       p1 = add_cons(instance, lexpr->value.c.cdr, 0, "id", p2 = new_object(instance, 
ALISP_OBJ_CONS));
+       snd_ctl_elem_info_get_id(info, id);
+       if (create_ctl_elem_id(instance, id, p2) == NULL)
+               return NULL;
+       p1 = add_cons(instance, p1, 1, "type", new_string(instance, 
snd_ctl_elem_type_name(type)));
+       p1 = add_cons(instance, p1, 1, "readable", new_integer(instance, 
snd_ctl_elem_info_is_readable(info)));
+       p1 = add_cons(instance, p1, 1, "writeable", new_integer(instance, 
snd_ctl_elem_info_is_writable(info)));
+       p1 = add_cons(instance, p1, 1, "volatile", new_integer(instance, 
snd_ctl_elem_info_is_volatile(info)));
+       p1 = add_cons(instance, p1, 1, "inactive", new_integer(instance, 
snd_ctl_elem_info_is_inactive(info)));
+       p1 = add_cons(instance, p1, 1, "locked", new_integer(instance, 
snd_ctl_elem_info_is_locked(info)));
+       p1 = add_cons(instance, p1, 1, "isowner", new_integer(instance, 
snd_ctl_elem_info_is_owner(info)));
+       p1 = add_cons(instance, p1, 1, "owner", new_integer(instance, 
snd_ctl_elem_info_get_owner(info)));
+       p1 = add_cons(instance, p1, 1, "count", new_integer(instance, 
snd_ctl_elem_info_get_count(info)));
+       if (type == SND_CTL_ELEM_TYPE_ENUMERATED)
+               p1 = add_cons(instance, p1, 1, "items", new_integer(instance, 
snd_ctl_elem_info_get_items(info)));
+       if (p1 == NULL)
+               return NULL;
+       return lexpr;
+}
+
 /*
  *  main code
  */
@@ -325,11 +419,18 @@
        { "card_get_name", &FA_int_int_strp, (void *)snd_card_get_name, NULL },
        { "card_next", &FA_int_intp, (void *)&snd_card_next, NULL },
        { "ctl_card_info", &FA_card_info, NULL, "ctl" },
-       { "ctl_close", &FA_xxx_close, (void *)&snd_ctl_close, "ctl" },
-       { "ctl_open", &FA_xxx_open, (void *)&snd_ctl_open, "ctl" },
-       { "hctl_close", &FA_xxx_close, (void *)&snd_hctl_close, "hctl" },
-       { "hctl_open", &FA_xxx_open, (void *)&snd_hctl_open, "hctl" },
-       { "hctl_open_ctl", &FA_xxx_open1, (void *)&snd_hctl_open_ctl, "hctl" },
+       { "ctl_close", &FA_int_p, (void *)&snd_ctl_close, "ctl" },
+       { "ctl_open", &FA_int_pp_strp_int, (void *)&snd_ctl_open, "ctl" },
+       { "hctl_close", &FA_int_p, (void *)&snd_hctl_close, "hctl" },
+       { "hctl_elem_info", &FA_hctl_elem_info, (void *)&snd_hctl_elem_info, 
"hctl_elem" },
+       { "hctl_elem_next", &FA_p_p, (void *)&snd_hctl_elem_next, "hctl_elem" },
+       { "hctl_elem_prev", &FA_p_p, (void *)&snd_hctl_elem_prev, "hctl_elem" },
+       { "hctl_first_elem", &FA_p_p, (void *)&snd_hctl_first_elem, "hctl" },
+       { "hctl_free", &FA_int_p, (void *)&snd_hctl_free, "hctl" },
+       { "hctl_last_elem", &FA_p_p, (void *)&snd_hctl_last_elem, "hctl" },
+       { "hctl_load", &FA_int_p, (void *)&snd_hctl_load, "hctl" },
+       { "hctl_open", &FA_int_pp_strp_int, (void *)&snd_hctl_open, "hctl" },
+       { "hctl_open_ctl", &FA_int_pp_p, (void *)&snd_hctl_open_ctl, "hctl" },
 };
 
 static int acall_compar(const void *p1, const void *p2)



-------------------------------------------------------
This SF.Net email sponsored by: Free pre-built ASP.NET sites including
Data Reports, E-commerce, Portals, and Forums are available now.
Download today and enter to win an XBOX or Visual Studio .NET.
http://aspnet.click-url.com/go/psa00100003ave/direct;at.aspnet_072303_01/01
_______________________________________________
Alsa-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog

Reply via email to