restructuring
authorRalph Ronnquist <ralph.ronnquist@gmail.com>
Mon, 24 Apr 2023 06:43:20 +0000 (16:43 +1000)
committerRalph Ronnquist <ralph.ronnquist@gmail.com>
Mon, 24 Apr 2023 06:43:20 +0000 (16:43 +1000)
23 files changed:
Makefile
archive.mk [new file with mode: 0644]
lsp-alsa/API [new file with mode: 0644]
lsp-alsa/ASOUND [new file with mode: 0644]
lsp-alsa/Makefile [new file with mode: 0644]
lsp-alsa/ex1.conf [new file with mode: 0644]
lsp-alsa/import-api.lsp [new file with mode: 0644]
lsp-alsa/libasound-config.lsp [new file with mode: 0644]
lsp-alsa/libasound-control.lsp [new file with mode: 0644]
lsp-alsa/libasound-pcm.lsp [new file with mode: 0644]
lsp-alsa/libasound.lsp [new file with mode: 0644]
lsp-alsa/lsp-libasound.a.8.adoc [new file with mode: 0644]
lsp-alsa/lsp-pcm-dispatch.a.8.adoc [new file with mode: 0644]
lsp-alsa/lsp-utils.a.8.adoc [new file with mode: 0644]
lsp-alsa/overview.adoc [new file with mode: 0644]
lsp-alsa/pcm-dispatch.lsp [new file with mode: 0644]
lsp-alsa/sounder.lsp [new file with mode: 0755]
lsp-dbus/Makefile
lsp-dbus/lsp-dbus.a.8.adoc
lsp-misc/Makefile
lsp-misc/lsp-misc.a.8.adoc
lsplib.mk [deleted file]
manpage.mk [deleted file]

index c9f3ceff5d8d9705aca66e1bddeed7aad9f4104b..d7bb8d85ddc037cc9ad6f621d1f7ec0caba8b59d 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,21 +1,31 @@
-# Building archives and the test0 app
+# Building archives and the test? apps
 
-PACKNL = ${HOME}/src/borta/packnl/packnl
+default: .archives
+
+####################
+SUBDIR = $(dir $(wildcard */Makefile))
 
-LSPSRC = lsp-dbus-test.lsp
-ARCHIVES = lsp-misc.a lsp-dbus.a
-DOCS = lsp-dbus.a.8 lsp-misc.a.8
+.PHONY: .archives
+.archives:
+       for D in ${SUBDIR} ; do $(MAKE) -C $$D ; done
 
-default: test0 docs
+.PHONY: .clean
+.clean:
+       for D in ${SUBDIR} ; do $(MAKE) -C $$D clean ; done
 
-include manpage.mk
-include lsplib.mk
+####################
+PACKNL = ${HOME}/src/borta/packnl/packnl
+define PACKNLACTION
+${PACKNL} -w $@ $< $(addprefix -A ,$(wordlist 2,1000,$^))
+endef
 
-.PHONY: docs
-docs: ${DOCS}
+test0: lsp-dbus-test.lsp
+test0: lsp-misc/lsp-misc.a lsp-dbus/lsp-dbus.a
+       ${PACKNLACTION}
 
-test0: lsp-dbus-test.lsp ${ARCHIVES}
-        ${PACKNL} -w $@ $< $(addprefix -A ,${ARCHIVES})
+test1: lsp-alsa-test.lsp
+test1: lsp-alsa/pcm-dispatch.a lsp-alsa/libasound.a lsp-alsa/lib-utils.a
+       ${PACKNLACTION}
 
-clean:
-       rm -f test0 ${CLEAN}
+clean: .clean
+       rm -f test0 test1
diff --git a/archive.mk b/archive.mk
new file mode 100644 (file)
index 0000000..557281a
--- /dev/null
@@ -0,0 +1,18 @@
+# This Makfile include file provides default setup for archive
+# subdiratory, which typically would start with the follwing lines:
+#
+# ARCHIVES = .... # some .a files
+# include ../archive.mk
+
+DOCS = ${ARCHIVES:=.8.adoc}
+
+default: ${ARCHIVES} ${DOCS}
+
+%.8.adoc:
+       echo "== ${@:.8.adoc=(8)}" >> $@
+
+%.8: %.8.adoc
+       asciidoctor -b manpage $<
+
+clean:
+       rm -f ${ARCHIVES} ${DOCS}
diff --git a/lsp-alsa/API b/lsp-alsa/API
new file mode 100644 (file)
index 0000000..4c83726
--- /dev/null
@@ -0,0 +1,182 @@
+=== libasound_module_conf_pulse.so ===
+conf_pulse_hook_load_if_running
+=== libasound_module_ctl_arcam_av.so ===
+arcam_av_client
+arcam_av_connect
+arcam_av_send
+arcam_av_server_start
+arcam_av_server_stop
+arcam_av_state_attach
+arcam_av_state_detach
+_snd_ctl_arcam_av_open
+=== libasound_module_ctl_oss.so ===
+_snd_ctl_oss_open
+=== libasound_module_ctl_pulse.so ===
+pulse_check_connection
+pulse_connect
+pulse_context_success_cb
+pulse_free
+pulse_new
+pulse_poll_activate
+pulse_poll_deactivate
+pulse_wait_operation
+_snd_ctl_pulse_open
+=== libasound_module_pcm_a52.so ===
+_snd_pcm_a52_open
+=== libasound_module_pcm_jack.so ===
+_snd_pcm_jack_open
+=== libasound_module_pcm_oss.so ===
+_snd_pcm_oss_open
+=== libasound_module_pcm_pulse.so ===
+pulse_check_connection
+pulse_connect
+pulse_context_success_cb
+pulse_free
+pulse_new
+pulse_poll_activate
+pulse_poll_deactivate
+pulse_wait_operation
+_snd_pcm_pulse_open
+=== libasound_module_pcm_upmix.so ===
+_snd_pcm_upmix_open
+=== libasound_module_pcm_usb_stream.so ===
+_snd_pcm_usb_stream_open
+=== libasound_module_pcm_vdownmix.so ===
+_snd_pcm_vdownmix_open
+=== libasound_module_rate_lavrate_faster.so ===
+pcm_src_open
+_snd_pcm_rate_lavrate_faster_open
+_snd_pcm_rate_lavrate_fast_open
+_snd_pcm_rate_lavrate_higher_open
+_snd_pcm_rate_lavrate_high_open
+_snd_pcm_rate_lavrate_open
+=== libasound_module_rate_lavrate_fast.so ===
+pcm_src_open
+_snd_pcm_rate_lavrate_faster_open
+_snd_pcm_rate_lavrate_fast_open
+_snd_pcm_rate_lavrate_higher_open
+_snd_pcm_rate_lavrate_high_open
+_snd_pcm_rate_lavrate_open
+=== libasound_module_rate_lavrate_higher.so ===
+pcm_src_open
+_snd_pcm_rate_lavrate_faster_open
+_snd_pcm_rate_lavrate_fast_open
+_snd_pcm_rate_lavrate_higher_open
+_snd_pcm_rate_lavrate_high_open
+_snd_pcm_rate_lavrate_open
+=== libasound_module_rate_lavrate_high.so ===
+pcm_src_open
+_snd_pcm_rate_lavrate_faster_open
+_snd_pcm_rate_lavrate_fast_open
+_snd_pcm_rate_lavrate_higher_open
+_snd_pcm_rate_lavrate_high_open
+_snd_pcm_rate_lavrate_open
+=== libasound_module_rate_lavrate.so ===
+pcm_src_open
+_snd_pcm_rate_lavrate_faster_open
+_snd_pcm_rate_lavrate_fast_open
+_snd_pcm_rate_lavrate_higher_open
+_snd_pcm_rate_lavrate_high_open
+_snd_pcm_rate_lavrate_open
+=== libasound_module_rate_samplerate_best.so ===
+_snd_pcm_rate_samplerate_best_open
+_snd_pcm_rate_samplerate_linear_open
+_snd_pcm_rate_samplerate_medium_open
+_snd_pcm_rate_samplerate_open
+_snd_pcm_rate_samplerate_order_open
+=== libasound_module_rate_samplerate_linear.so ===
+_snd_pcm_rate_samplerate_best_open
+_snd_pcm_rate_samplerate_linear_open
+_snd_pcm_rate_samplerate_medium_open
+_snd_pcm_rate_samplerate_open
+_snd_pcm_rate_samplerate_order_open
+=== libasound_module_rate_samplerate_medium.so ===
+_snd_pcm_rate_samplerate_best_open
+_snd_pcm_rate_samplerate_linear_open
+_snd_pcm_rate_samplerate_medium_open
+_snd_pcm_rate_samplerate_open
+_snd_pcm_rate_samplerate_order_open
+=== libasound_module_rate_samplerate_order.so ===
+_snd_pcm_rate_samplerate_best_open
+_snd_pcm_rate_samplerate_linear_open
+_snd_pcm_rate_samplerate_medium_open
+_snd_pcm_rate_samplerate_open
+_snd_pcm_rate_samplerate_order_open
+=== libasound_module_rate_samplerate.so ===
+_snd_pcm_rate_samplerate_best_open
+_snd_pcm_rate_samplerate_linear_open
+_snd_pcm_rate_samplerate_medium_open
+_snd_pcm_rate_samplerate_open
+_snd_pcm_rate_samplerate_order_open
+=== libasound_module_rate_speexrate_best.so ===
+alsa_lib_resampler_destroy
+alsa_lib_resampler_get_input_stride
+alsa_lib_resampler_get_output_stride
+alsa_lib_resampler_get_quality
+alsa_lib_resampler_get_rate
+alsa_lib_resampler_get_ratio
+alsa_lib_resampler_init
+alsa_lib_resampler_init_frac
+alsa_lib_resampler_process_float
+alsa_lib_resampler_process_int
+alsa_lib_resampler_process_interleaved_float
+alsa_lib_resampler_process_interleaved_int
+alsa_lib_resampler_reset_mem
+alsa_lib_resampler_set_input_stride
+alsa_lib_resampler_set_output_stride
+alsa_lib_resampler_set_quality
+alsa_lib_resampler_set_rate
+alsa_lib_resampler_set_rate_frac
+alsa_lib_resampler_skip_zeros
+alsa_lib_resampler_strerror
+_snd_pcm_rate_speexrate_best_open
+_snd_pcm_rate_speexrate_medium_open
+_snd_pcm_rate_speexrate_open
+=== libasound_module_rate_speexrate_medium.so ===
+alsa_lib_resampler_destroy
+alsa_lib_resampler_get_input_stride
+alsa_lib_resampler_get_output_stride
+alsa_lib_resampler_get_quality
+alsa_lib_resampler_get_rate
+alsa_lib_resampler_get_ratio
+alsa_lib_resampler_init
+alsa_lib_resampler_init_frac
+alsa_lib_resampler_process_float
+alsa_lib_resampler_process_int
+alsa_lib_resampler_process_interleaved_float
+alsa_lib_resampler_process_interleaved_int
+alsa_lib_resampler_reset_mem
+alsa_lib_resampler_set_input_stride
+alsa_lib_resampler_set_output_stride
+alsa_lib_resampler_set_quality
+alsa_lib_resampler_set_rate
+alsa_lib_resampler_set_rate_frac
+alsa_lib_resampler_skip_zeros
+alsa_lib_resampler_strerror
+_snd_pcm_rate_speexrate_best_open
+_snd_pcm_rate_speexrate_medium_open
+_snd_pcm_rate_speexrate_open
+=== libasound_module_rate_speexrate.so ===
+alsa_lib_resampler_destroy
+alsa_lib_resampler_get_input_stride
+alsa_lib_resampler_get_output_stride
+alsa_lib_resampler_get_quality
+alsa_lib_resampler_get_rate
+alsa_lib_resampler_get_ratio
+alsa_lib_resampler_init
+alsa_lib_resampler_init_frac
+alsa_lib_resampler_process_float
+alsa_lib_resampler_process_int
+alsa_lib_resampler_process_interleaved_float
+alsa_lib_resampler_process_interleaved_int
+alsa_lib_resampler_reset_mem
+alsa_lib_resampler_set_input_stride
+alsa_lib_resampler_set_output_stride
+alsa_lib_resampler_set_quality
+alsa_lib_resampler_set_rate
+alsa_lib_resampler_set_rate_frac
+alsa_lib_resampler_skip_zeros
+alsa_lib_resampler_strerror
+_snd_pcm_rate_speexrate_best_open
+_snd_pcm_rate_speexrate_medium_open
+_snd_pcm_rate_speexrate_open
diff --git a/lsp-alsa/ASOUND b/lsp-alsa/ASOUND
new file mode 100644 (file)
index 0000000..deacb9c
--- /dev/null
@@ -0,0 +1,1619 @@
+snd_asoundlib_version@@ALSA_0.9
+snd_async_add_ctl_handler@@ALSA_0.9
+snd_async_add_handler@@ALSA_0.9
+snd_async_add_pcm_handler@@ALSA_0.9
+snd_async_add_timer_handler@@ALSA_0.9
+snd_async_del_handler@@ALSA_0.9
+snd_async_handler_get_callback_private@@ALSA_0.9
+snd_async_handler_get_ctl@@ALSA_0.9
+snd_async_handler_get_fd@@ALSA_0.9
+snd_async_handler_get_pcm@@ALSA_0.9
+snd_async_handler_get_signo@@ALSA_0.9
+snd_async_handler_get_timer@@ALSA_0.9
+snd_card_get_index@@ALSA_0.9
+snd_card_get_longname@@ALSA_0.9
+snd_card_get_name@@ALSA_0.9
+snd_card_load@@ALSA_0.9
+snd_card_next@@ALSA_0.9
+snd_config_add_after@@ALSA_0.9
+snd_config_add@@ALSA_0.9
+snd_config_add_before@@ALSA_0.9
+snd_config_copy@@ALSA_0.9
+snd_config_delete@@ALSA_0.9
+snd_config_delete_compound_members@@ALSA_0.9
+snd_config_evaluate@@ALSA_0.9
+snd_config_expand@@ALSA_0.9
+snd_config_get_ascii@@ALSA_0.9
+snd_config_get_bool@@ALSA_0.9
+snd_config_get_bool_ascii@@ALSA_0.9
+snd_config_get_ctl_iface@@ALSA_0.9
+snd_config_get_ctl_iface_ascii@@ALSA_0.9
+snd_config_get_id@@ALSA_0.9
+snd_config_get_integer64@@ALSA_0.9
+snd_config_get_integer@@ALSA_0.9
+snd_config_get_ireal@@ALSA_0.9
+snd_config_get_pointer@@ALSA_0.9
+snd_config_get_real@@ALSA_0.9
+snd_config_get_string@@ALSA_0.9
+snd_config_get_type@@ALSA_0.9
+snd_config_get_type_ascii@@ALSA_0.9
+snd_config_hook_load@@ALSA_0.9
+snd_config_hook_load_for_all_cards@@ALSA_0.9
+snd_config_imake_integer64@@ALSA_0.9
+snd_config_imake_integer@@ALSA_0.9
+snd_config_imake_pointer@@ALSA_0.9
+snd_config_imake_real@@ALSA_0.9
+snd_config_imake_safe_string@@ALSA_0.9
+snd_config_imake_string@@ALSA_0.9
+snd_config_is_array@@ALSA_0.9
+snd_config_iterator_end@@ALSA_0.9
+snd_config_iterator_entry@@ALSA_0.9
+snd_config_iterator_first@@ALSA_0.9
+snd_config_iterator_next@@ALSA_0.9
+snd_config_load@@ALSA_0.9
+snd_config_load_override@@ALSA_0.9
+snd_config_make@@ALSA_0.9
+snd_config_make_compound@@ALSA_0.9
+snd_config_make_integer64@@ALSA_0.9
+snd_config_make_integer@@ALSA_0.9
+snd_config_make_pointer@@ALSA_0.9
+snd_config_make_real@@ALSA_0.9
+snd_config_make_string@@ALSA_0.9
+snd_config_ref@@ALSA_0.9
+snd_config_remove@@ALSA_0.9
+snd_config_save@@ALSA_0.9
+snd_config_searcha@@ALSA_0.9
+snd_config_searcha_hooks@@ALSA_0.9
+snd_config_search_alias@@ALSA_0.9
+snd_config_search@@ALSA_0.9
+snd_config_search_definition@@ALSA_0.9
+snd_config_search_hooks@@ALSA_0.9
+snd_config_searchva@@ALSA_0.9
+snd_config_searchva_hooks@@ALSA_0.9
+snd_config_searchv@@ALSA_0.9
+snd_config_set_ascii@@ALSA_0.9
+snd_config_set_id@@ALSA_0.9
+snd_config_set_integer64@@ALSA_0.9
+snd_config_set_integer@@ALSA_0.9
+snd_config_set_pointer@@ALSA_0.9
+snd_config_set_real@@ALSA_0.9
+snd_config_set_string@@ALSA_0.9
+snd_config_substitute@@ALSA_0.9
+snd_config_test_id@@ALSA_0.9
+snd_config_top@@ALSA_0.9
+snd_config_topdir@@ALSA_0.9
+snd_config_unref@@ALSA_0.9
+snd_config_update@@ALSA_0.9
+snd_config_update_free@@ALSA_0.9
+snd_config_update_free_global@@ALSA_0.9
+snd_config_update_r@@ALSA_0.9
+snd_config_update_ref@@ALSA_0.9
+snd_ctl_add_boolean_elem_set@@ALSA_0.9
+snd_ctl_add_bytes_elem_set@@ALSA_0.9
+snd_ctl_add_enumerated_elem_set@@ALSA_0.9
+snd_ctl_add_integer64_elem_set@@ALSA_0.9
+snd_ctl_add_integer_elem_set@@ALSA_0.9
+snd_ctl_ascii_elem_id_get@@ALSA_0.9
+snd_ctl_ascii_elem_id_parse@@ALSA_0.9
+snd_ctl_ascii_value_parse@@ALSA_0.9
+snd_ctl_async@@ALSA_0.9
+snd_ctl_card_info@@ALSA_0.9
+snd_ctl_card_info_clear@@ALSA_0.9
+snd_ctl_card_info_copy@@ALSA_0.9
+snd_ctl_card_info_free@@ALSA_0.9
+snd_ctl_card_info_get_card@@ALSA_0.9
+snd_ctl_card_info_get_components@@ALSA_0.9
+snd_ctl_card_info_get_driver@@ALSA_0.9
+snd_ctl_card_info_get_id@@ALSA_0.9
+snd_ctl_card_info_get_longname@@ALSA_0.9
+snd_ctl_card_info_get_mixername@@ALSA_0.9
+snd_ctl_card_info_get_name@@ALSA_0.9
+snd_ctl_card_info_malloc@@ALSA_0.9
+snd_ctl_card_info_sizeof@@ALSA_0.9
+snd_ctl_close@@ALSA_0.9
+snd_ctl_convert_from_dB@@ALSA_0.9
+snd_ctl_convert_to_dB@@ALSA_0.9
+snd_ctl_elem_add_boolean@@ALSA_0.9
+snd_ctl_elem_add_enumerated@@ALSA_0.9
+snd_ctl_elem_add_iec958@@ALSA_0.9
+snd_ctl_elem_add_integer64@@ALSA_0.9
+snd_ctl_elem_add_integer@@ALSA_0.9
+snd_ctl_elem_id_clear@@ALSA_0.9
+snd_ctl_elem_id_copy@@ALSA_0.9
+snd_ctl_elem_id_free@@ALSA_0.9
+snd_ctl_elem_id_get_device@@ALSA_0.9
+snd_ctl_elem_id_get_index@@ALSA_0.9
+snd_ctl_elem_id_get_interface@@ALSA_0.9
+snd_ctl_elem_id_get_name@@ALSA_0.9
+snd_ctl_elem_id_get_numid@@ALSA_0.9
+snd_ctl_elem_id_get_subdevice@@ALSA_0.9
+snd_ctl_elem_id_malloc@@ALSA_0.9
+snd_ctl_elem_id_set_device@@ALSA_0.9
+snd_ctl_elem_id_set_index@@ALSA_0.9
+snd_ctl_elem_id_set_interface@@ALSA_0.9
+snd_ctl_elem_id_set_name@@ALSA_0.9
+snd_ctl_elem_id_set_numid@@ALSA_0.9
+snd_ctl_elem_id_set_subdevice@@ALSA_0.9
+snd_ctl_elem_id_sizeof@@ALSA_0.9
+snd_ctl_elem_iface_name@@ALSA_0.9
+snd_ctl_elem_info@@ALSA_0.9
+snd_ctl_elem_info_clear@@ALSA_0.9
+snd_ctl_elem_info_copy@@ALSA_0.9
+snd_ctl_elem_info_free@@ALSA_0.9
+snd_ctl_elem_info_get_count@@ALSA_0.9
+snd_ctl_elem_info_get_device@@ALSA_0.9
+snd_ctl_elem_info_get_dimension@@ALSA_0.9.3
+snd_ctl_elem_info_get_dimensions@@ALSA_0.9.3
+snd_ctl_elem_info_get_id@@ALSA_0.9
+snd_ctl_elem_info_get_index@@ALSA_0.9
+snd_ctl_elem_info_get_interface@@ALSA_0.9
+snd_ctl_elem_info_get_item_name@@ALSA_0.9
+snd_ctl_elem_info_get_items@@ALSA_0.9
+snd_ctl_elem_info_get_max64@@ALSA_0.9
+snd_ctl_elem_info_get_max@@ALSA_0.9
+snd_ctl_elem_info_get_min64@@ALSA_0.9
+snd_ctl_elem_info_get_min@@ALSA_0.9
+snd_ctl_elem_info_get_name@@ALSA_0.9
+snd_ctl_elem_info_get_numid@@ALSA_0.9
+snd_ctl_elem_info_get_owner@@ALSA_0.9
+snd_ctl_elem_info_get_step64@@ALSA_0.9
+snd_ctl_elem_info_get_step@@ALSA_0.9
+snd_ctl_elem_info_get_subdevice@@ALSA_0.9
+snd_ctl_elem_info_get_type@@ALSA_0.9
+snd_ctl_elem_info_is_inactive@@ALSA_0.9
+snd_ctl_elem_info_is_indirect@@ALSA_0.9
+snd_ctl_elem_info_is_locked@@ALSA_0.9
+snd_ctl_elem_info_is_owner@@ALSA_0.9
+snd_ctl_elem_info_is_readable@@ALSA_0.9
+snd_ctl_elem_info_is_tlv_commandable@@ALSA_0.9
+snd_ctl_elem_info_is_tlv_readable@@ALSA_0.9
+snd_ctl_elem_info_is_tlv_writable@@ALSA_0.9
+snd_ctl_elem_info_is_user@@ALSA_0.9
+snd_ctl_elem_info_is_volatile@@ALSA_0.9
+snd_ctl_elem_info_is_writable@@ALSA_0.9
+snd_ctl_elem_info_malloc@@ALSA_0.9
+snd_ctl_elem_info_set_device@@ALSA_0.9
+snd_ctl_elem_info_set_dimension@@ALSA_0.9
+snd_ctl_elem_info_set_id@@ALSA_0.9
+snd_ctl_elem_info_set_index@@ALSA_0.9
+snd_ctl_elem_info_set_interface@@ALSA_0.9
+snd_ctl_elem_info_set_item@@ALSA_0.9
+snd_ctl_elem_info_set_name@@ALSA_0.9
+snd_ctl_elem_info_set_numid@@ALSA_0.9
+snd_ctl_elem_info_set_subdevice@@ALSA_0.9
+snd_ctl_elem_info_sizeof@@ALSA_0.9
+snd_ctl_elem_list_alloc_space@@ALSA_0.9
+snd_ctl_elem_list@@ALSA_0.9
+snd_ctl_elem_list_clear@@ALSA_0.9
+snd_ctl_elem_list_copy@@ALSA_0.9
+snd_ctl_elem_list_free@@ALSA_0.9
+snd_ctl_elem_list_free_space@@ALSA_0.9
+snd_ctl_elem_list_get_count@@ALSA_0.9
+snd_ctl_elem_list_get_device@@ALSA_0.9
+snd_ctl_elem_list_get_id@@ALSA_0.9
+snd_ctl_elem_list_get_index@@ALSA_0.9
+snd_ctl_elem_list_get_interface@@ALSA_0.9
+snd_ctl_elem_list_get_name@@ALSA_0.9
+snd_ctl_elem_list_get_numid@@ALSA_0.9
+snd_ctl_elem_list_get_subdevice@@ALSA_0.9
+snd_ctl_elem_list_get_used@@ALSA_0.9
+snd_ctl_elem_list_malloc@@ALSA_0.9
+snd_ctl_elem_list_set_offset@@ALSA_0.9
+snd_ctl_elem_list_sizeof@@ALSA_0.9
+snd_ctl_elem_lock@@ALSA_0.9
+snd_ctl_elem_read@@ALSA_0.9
+snd_ctl_elem_remove@@ALSA_0.9
+snd_ctl_elem_set_bytes@@ALSA_0.9
+snd_ctl_elem_tlv_command@@ALSA_0.9
+snd_ctl_elem_tlv_read@@ALSA_0.9
+snd_ctl_elem_tlv_write@@ALSA_0.9
+snd_ctl_elem_type_name@@ALSA_0.9
+snd_ctl_elem_unlock@@ALSA_0.9
+snd_ctl_elem_value_clear@@ALSA_0.9
+snd_ctl_elem_value_compare@@ALSA_0.9
+snd_ctl_elem_value_copy@@ALSA_0.9
+snd_ctl_elem_value_free@@ALSA_0.9
+snd_ctl_elem_value_get_boolean@@ALSA_0.9
+snd_ctl_elem_value_get_byte@@ALSA_0.9
+snd_ctl_elem_value_get_bytes@@ALSA_0.9
+snd_ctl_elem_value_get_device@@ALSA_0.9
+snd_ctl_elem_value_get_enumerated@@ALSA_0.9
+snd_ctl_elem_value_get_id@@ALSA_0.9
+snd_ctl_elem_value_get_iec958@@ALSA_0.9
+snd_ctl_elem_value_get_index@@ALSA_0.9
+snd_ctl_elem_value_get_integer64@@ALSA_0.9
+snd_ctl_elem_value_get_integer@@ALSA_0.9
+snd_ctl_elem_value_get_interface@@ALSA_0.9
+snd_ctl_elem_value_get_name@@ALSA_0.9
+snd_ctl_elem_value_get_numid@@ALSA_0.9
+snd_ctl_elem_value_get_subdevice@@ALSA_0.9
+snd_ctl_elem_value_malloc@@ALSA_0.9
+snd_ctl_elem_value_set_boolean@@ALSA_0.9
+snd_ctl_elem_value_set_byte@@ALSA_0.9
+snd_ctl_elem_value_set_device@@ALSA_0.9
+snd_ctl_elem_value_set_enumerated@@ALSA_0.9
+snd_ctl_elem_value_set_id@@ALSA_0.9
+snd_ctl_elem_value_set_iec958@@ALSA_0.9
+snd_ctl_elem_value_set_index@@ALSA_0.9
+snd_ctl_elem_value_set_integer64@@ALSA_0.9
+snd_ctl_elem_value_set_integer@@ALSA_0.9
+snd_ctl_elem_value_set_interface@@ALSA_0.9
+snd_ctl_elem_value_set_name@@ALSA_0.9
+snd_ctl_elem_value_set_numid@@ALSA_0.9
+snd_ctl_elem_value_set_subdevice@@ALSA_0.9
+snd_ctl_elem_value_sizeof@@ALSA_0.9
+snd_ctl_elem_write@@ALSA_0.9
+snd_ctl_event_clear@@ALSA_0.9
+snd_ctl_event_copy@@ALSA_0.9
+snd_ctl_event_elem_get_device@@ALSA_0.9
+snd_ctl_event_elem_get_id@@ALSA_0.9
+snd_ctl_event_elem_get_index@@ALSA_0.9
+snd_ctl_event_elem_get_interface@@ALSA_0.9
+snd_ctl_event_elem_get_mask@@ALSA_0.9
+snd_ctl_event_elem_get_name@@ALSA_0.9
+snd_ctl_event_elem_get_numid@@ALSA_0.9
+snd_ctl_event_elem_get_subdevice@@ALSA_0.9
+snd_ctl_event_free@@ALSA_0.9
+snd_ctl_event_get_type@@ALSA_0.9
+snd_ctl_event_malloc@@ALSA_0.9
+snd_ctl_event_sizeof@@ALSA_0.9
+snd_ctl_event_type_name@@ALSA_0.9
+snd_ctl_ext_create@@ALSA_0.9
+snd_ctl_ext_delete@@ALSA_0.9
+snd_ctl_get_dB_range@@ALSA_0.9
+snd_ctl_get_power_state@@ALSA_0.9
+snd_ctl_hwdep_info@@ALSA_0.9
+snd_ctl_hwdep_next_device@@ALSA_0.9
+_snd_ctl_hw_open@@ALSA_0.9
+snd_ctl_hw_open@@ALSA_0.9
+snd_ctl_name@@ALSA_0.9
+snd_ctl_nonblock@@ALSA_0.9
+snd_ctl_open@@ALSA_0.9
+snd_ctl_open_fallback@@ALSA_0.9
+snd_ctl_open_lconf@@ALSA_0.9
+snd_ctl_pcm_info@@ALSA_0.9
+snd_ctl_pcm_next_device@@ALSA_0.9
+snd_ctl_pcm_prefer_subdevice@@ALSA_0.9
+_snd_ctl_poll_descriptor@@ALSA_0.9
+snd_ctl_poll_descriptors@@ALSA_0.9
+snd_ctl_poll_descriptors_count@@ALSA_0.9
+snd_ctl_poll_descriptors_revents@@ALSA_0.9
+snd_ctl_rawmidi_info@@ALSA_0.9
+snd_ctl_rawmidi_next_device@@ALSA_0.9
+snd_ctl_rawmidi_prefer_subdevice@@ALSA_0.9
+snd_ctl_read@@ALSA_0.9
+snd_ctl_set_power_state@@ALSA_0.9
+_snd_ctl_shm_open@@ALSA_0.9
+snd_ctl_shm_open@@ALSA_0.9
+snd_ctl_subscribe_events@@ALSA_0.9
+snd_ctl_type@@ALSA_0.9
+snd_ctl_wait@@ALSA_0.9
+snd_determine_driver@@ALSA_0.9
+snd_device_name_free_hint@@ALSA_0.9
+snd_device_name_get_hint@@ALSA_0.9
+snd_device_name_hint@@ALSA_0.9
+snd_dlclose@@ALSA_0.9
+snd_dlopen@ALSA_0.9
+snd_dlopen@@ALSA_1.1.6
+snd_dlpath@@ALSA_0.9
+snd_dlsym@@ALSA_0.9
+snd_func_card_driver@@ALSA_0.9
+snd_func_card_id@@ALSA_0.9
+snd_func_card_inum@@ALSA_0.9
+snd_func_card_name@@ALSA_0.9
+snd_func_concat@@ALSA_0.9
+snd_func_datadir@@ALSA_0.9
+snd_func_getenv@@ALSA_0.9
+snd_func_iadd@@ALSA_0.9
+snd_func_igetenv@@ALSA_0.9
+snd_func_imul@@ALSA_0.9
+snd_func_pcm_args_by_class@@ALSA_0.9
+snd_func_pcm_id@@ALSA_0.9
+snd_func_private_card_driver@@ALSA_0.9
+snd_func_private_pcm_subdevice@@ALSA_0.9
+snd_func_private_string@@ALSA_0.9
+snd_func_refer@@ALSA_0.9
+snd_hctl_async@@ALSA_0.9
+snd_hctl_close@@ALSA_0.9
+snd_hctl_compare_fast@@ALSA_0.9
+snd_hctl_ctl@@ALSA_0.9
+snd_hctl_elem_get_callback_private@@ALSA_0.9
+snd_hctl_elem_get_device@@ALSA_0.9
+snd_hctl_elem_get_hctl@@ALSA_0.9
+snd_hctl_elem_get_id@@ALSA_0.9
+snd_hctl_elem_get_index@@ALSA_0.9
+snd_hctl_elem_get_interface@@ALSA_0.9
+snd_hctl_elem_get_name@@ALSA_0.9
+snd_hctl_elem_get_numid@@ALSA_0.9
+snd_hctl_elem_get_subdevice@@ALSA_0.9
+snd_hctl_elem_info@@ALSA_0.9
+snd_hctl_elem_next@@ALSA_0.9
+snd_hctl_elem_prev@@ALSA_0.9
+snd_hctl_elem_read@@ALSA_0.9
+snd_hctl_elem_set_callback@@ALSA_0.9
+snd_hctl_elem_set_callback_private@@ALSA_0.9
+snd_hctl_elem_tlv_command@@ALSA_0.9
+snd_hctl_elem_tlv_read@@ALSA_0.9
+snd_hctl_elem_tlv_write@@ALSA_0.9
+snd_hctl_elem_write@@ALSA_0.9
+snd_hctl_find_elem@@ALSA_0.9
+snd_hctl_first_elem@@ALSA_0.9
+snd_hctl_free@@ALSA_0.9
+snd_hctl_get_callback_private@@ALSA_0.9
+snd_hctl_get_count@@ALSA_0.9
+snd_hctl_handle_events@@ALSA_0.9
+snd_hctl_last_elem@@ALSA_0.9
+snd_hctl_load@@ALSA_0.9
+snd_hctl_name@@ALSA_0.9
+snd_hctl_nonblock@@ALSA_0.9
+snd_hctl_open@@ALSA_0.9
+snd_hctl_open_ctl@@ALSA_0.9
+snd_hctl_poll_descriptors@@ALSA_0.9
+snd_hctl_poll_descriptors_count@@ALSA_0.9
+snd_hctl_poll_descriptors_revents@@ALSA_0.9
+snd_hctl_set_callback@@ALSA_0.9
+snd_hctl_set_callback_private@@ALSA_0.9
+snd_hctl_set_compare@@ALSA_0.9
+snd_hctl_wait@@ALSA_0.9
+snd_hwdep_close@@ALSA_0.9
+snd_hwdep_dsp_image_copy@@ALSA_0.9
+snd_hwdep_dsp_image_free@@ALSA_0.9
+snd_hwdep_dsp_image_get_image@@ALSA_0.9
+snd_hwdep_dsp_image_get_index@@ALSA_0.9
+snd_hwdep_dsp_image_get_length@@ALSA_0.9
+snd_hwdep_dsp_image_get_name@@ALSA_0.9
+snd_hwdep_dsp_image_malloc@@ALSA_0.9
+snd_hwdep_dsp_image_set_image@@ALSA_0.9
+snd_hwdep_dsp_image_set_index@@ALSA_0.9
+snd_hwdep_dsp_image_set_length@@ALSA_0.9
+snd_hwdep_dsp_image_set_name@@ALSA_0.9
+snd_hwdep_dsp_image_sizeof@@ALSA_0.9
+snd_hwdep_dsp_load@@ALSA_0.9
+snd_hwdep_dsp_status@@ALSA_0.9
+snd_hwdep_dsp_status_copy@@ALSA_0.9
+snd_hwdep_dsp_status_free@@ALSA_0.9
+snd_hwdep_dsp_status_get_chip_ready@@ALSA_0.9
+snd_hwdep_dsp_status_get_dsp_loaded@@ALSA_0.9
+snd_hwdep_dsp_status_get_id@@ALSA_0.9
+snd_hwdep_dsp_status_get_num_dsps@@ALSA_0.9
+snd_hwdep_dsp_status_get_version@@ALSA_0.9
+snd_hwdep_dsp_status_malloc@@ALSA_0.9
+snd_hwdep_dsp_status_sizeof@@ALSA_0.9
+_snd_hwdep_hw_open@@ALSA_0.9
+snd_hwdep_hw_open@@ALSA_0.9
+snd_hwdep_info@@ALSA_0.9
+snd_hwdep_info_copy@@ALSA_0.9
+snd_hwdep_info_free@@ALSA_0.9
+snd_hwdep_info_get_card@@ALSA_0.9
+snd_hwdep_info_get_device@@ALSA_0.9
+snd_hwdep_info_get_id@@ALSA_0.9
+snd_hwdep_info_get_iface@@ALSA_0.9
+snd_hwdep_info_get_name@@ALSA_0.9
+snd_hwdep_info_malloc@@ALSA_0.9
+snd_hwdep_info_set_device@@ALSA_0.9
+snd_hwdep_info_sizeof@@ALSA_0.9
+snd_hwdep_ioctl@@ALSA_0.9
+snd_hwdep_name@@ALSA_0.9
+snd_hwdep_nonblock@@ALSA_0.9
+snd_hwdep_open@@ALSA_0.9
+snd_hwdep_open_lconf@@ALSA_0.9
+snd_hwdep_poll_descriptors@@ALSA_0.9
+snd_hwdep_poll_descriptors_count@@ALSA_0.9
+snd_hwdep_poll_descriptors_revents@@ALSA_0.9
+snd_hwdep_read@@ALSA_0.9
+snd_hwdep_type@@ALSA_0.9
+snd_hwdep_write@@ALSA_0.9
+snd_input_buffer_open@@ALSA_0.9
+snd_input_close@@ALSA_0.9
+snd_input_getc@@ALSA_0.9
+snd_input_gets@@ALSA_0.9
+snd_input_scanf@@ALSA_0.9
+snd_input_stdio_attach@@ALSA_0.9
+snd_input_stdio_open@@ALSA_0.9
+snd_input_ungetc@@ALSA_0.9
+snd_instr_fm_convert_from_stream@@ALSA_0.9
+snd_instr_fm_convert_to_stream@@ALSA_0.9
+snd_instr_fm_free@@ALSA_0.9
+snd_instr_header_copy@@ALSA_0.9
+snd_instr_header_free@@ALSA_0.9
+snd_instr_header_get_alias@@ALSA_0.9
+snd_instr_header_get_cluster@@ALSA_0.9
+snd_instr_header_get_cmd@@ALSA_0.9
+snd_instr_header_get_data@@ALSA_0.9
+snd_instr_header_get_follow_alias@@ALSA_0.9
+snd_instr_header_get_format@@ALSA_0.9
+snd_instr_header_get_id@@ALSA_0.9
+snd_instr_header_get_len@@ALSA_0.9
+snd_instr_header_get_name@@ALSA_0.9
+snd_instr_header_get_type@@ALSA_0.9
+snd_instr_header_malloc@@ALSA_0.9
+snd_instr_header_set_alias@@ALSA_0.9
+snd_instr_header_set_cluster@@ALSA_0.9
+snd_instr_header_set_cmd@@ALSA_0.9
+snd_instr_header_set_follow_alias@@ALSA_0.9
+snd_instr_header_set_format@@ALSA_0.9
+snd_instr_header_set_id@@ALSA_0.9
+snd_instr_header_set_len@@ALSA_0.9
+snd_instr_header_set_name@@ALSA_0.9
+snd_instr_header_set_type@@ALSA_0.9
+snd_instr_header_sizeof@@ALSA_0.9
+snd_instr_iwffff_close@@ALSA_0.9
+snd_instr_iwffff_convert_from_stream@@ALSA_0.9
+snd_instr_iwffff_convert_to_stream@@ALSA_0.9
+snd_instr_iwffff_free@@ALSA_0.9
+snd_instr_iwffff_load@@ALSA_0.9
+snd_instr_iwffff_open@@ALSA_0.9
+snd_instr_iwffff_open_rom@@ALSA_0.9
+snd_instr_iwffff_open_rom_file@@ALSA_0.9
+snd_instr_simple_convert_from_stream@@ALSA_0.9
+snd_instr_simple_convert_to_stream@@ALSA_0.9
+snd_instr_simple_free@@ALSA_0.9
+snd_lib_error_set_handler@@ALSA_0.9
+snd_lib_error_set_local@@ALSA_0.9
+snd_midi_event_decode@@ALSA_0.9
+snd_midi_event_encode@@ALSA_0.9
+snd_midi_event_encode_byte@@ALSA_0.9
+snd_midi_event_free@@ALSA_0.9
+snd_midi_event_init@@ALSA_0.9
+snd_midi_event_new@@ALSA_0.9
+snd_midi_event_no_status@@ALSA_0.9
+snd_midi_event_reset_decode@@ALSA_0.9
+snd_midi_event_reset_encode@@ALSA_0.9
+snd_midi_event_resize_buffer@@ALSA_0.9
+snd_mixer_attach@@ALSA_0.9
+snd_mixer_attach_hctl@@ALSA_0.9
+snd_mixer_class_copy@@ALSA_0.9
+snd_mixer_class_free@@ALSA_0.9
+snd_mixer_class_get_compare@@ALSA_0.9
+snd_mixer_class_get_event@@ALSA_0.9
+snd_mixer_class_get_mixer@@ALSA_0.9
+snd_mixer_class_get_private@@ALSA_0.9
+snd_mixer_class_malloc@@ALSA_0.9
+snd_mixer_class_register@@ALSA_0.9
+snd_mixer_class_set_compare@@ALSA_0.9
+snd_mixer_class_set_event@@ALSA_0.9
+snd_mixer_class_set_private@@ALSA_0.9
+snd_mixer_class_set_private_free@@ALSA_0.9
+snd_mixer_class_sizeof@@ALSA_0.9
+snd_mixer_class_unregister@@ALSA_0.9
+snd_mixer_close@@ALSA_0.9
+snd_mixer_detach@@ALSA_0.9
+snd_mixer_detach_hctl@@ALSA_0.9
+snd_mixer_elem_add@@ALSA_0.9
+snd_mixer_elem_attach@@ALSA_0.9
+snd_mixer_elem_detach@@ALSA_0.9
+snd_mixer_elem_empty@@ALSA_0.9
+snd_mixer_elem_free@@ALSA_0.9
+snd_mixer_elem_get_callback_private@@ALSA_0.9
+snd_mixer_elem_get_private@@ALSA_0.9
+snd_mixer_elem_get_type@@ALSA_0.9
+snd_mixer_elem_info@@ALSA_0.9
+snd_mixer_elem_new@@ALSA_0.9
+snd_mixer_elem_next@@ALSA_0.9
+snd_mixer_elem_prev@@ALSA_0.9
+snd_mixer_elem_remove@@ALSA_0.9
+snd_mixer_elem_set_callback@@ALSA_0.9
+snd_mixer_elem_set_callback_private@@ALSA_0.9
+snd_mixer_elem_value@@ALSA_0.9
+snd_mixer_find_selem@@ALSA_0.9
+snd_mixer_first_elem@@ALSA_0.9
+snd_mixer_free@@ALSA_0.9
+snd_mixer_get_callback_private@@ALSA_0.9
+snd_mixer_get_count@@ALSA_0.9
+snd_mixer_get_hctl@@ALSA_0.9
+snd_mixer_handle_events@@ALSA_0.9
+snd_mixer_last_elem@@ALSA_0.9
+snd_mixer_load@@ALSA_0.9
+snd_mixer_open@@ALSA_0.9
+snd_mixer_poll_descriptors@@ALSA_0.9
+snd_mixer_poll_descriptors_count@@ALSA_0.9
+snd_mixer_poll_descriptors_revents@@ALSA_0.9
+snd_mixer_sbasic_get_private@@ALSA_0.9
+snd_mixer_sbasic_info@@ALSA_0.9
+snd_mixer_sbasic_set_private@@ALSA_0.9
+snd_mixer_sbasic_set_private_free@@ALSA_0.9
+snd_mixer_selem_ask_capture_dB_vol@@ALSA_0.9
+snd_mixer_selem_ask_capture_vol_dB@@ALSA_0.9
+snd_mixer_selem_ask_playback_dB_vol@@ALSA_0.9
+snd_mixer_selem_ask_playback_vol_dB@@ALSA_0.9
+snd_mixer_selem_channel_name@@ALSA_0.9
+snd_mixer_selem_compare@@ALSA_0.9
+snd_mixer_selem_get_capture_dB@@ALSA_0.9
+snd_mixer_selem_get_capture_dB_range@@ALSA_0.9
+snd_mixer_selem_get_capture_group@@ALSA_0.9
+snd_mixer_selem_get_capture_switch@@ALSA_0.9
+snd_mixer_selem_get_capture_volume@@ALSA_0.9
+snd_mixer_selem_get_capture_volume_range@@ALSA_0.9
+snd_mixer_selem_get_enum_item@@ALSA_0.9
+snd_mixer_selem_get_enum_item_name@@ALSA_0.9
+snd_mixer_selem_get_enum_items@@ALSA_0.9
+snd_mixer_selem_get_id@@ALSA_0.9
+snd_mixer_selem_get_index@@ALSA_0.9
+snd_mixer_selem_get_name@@ALSA_0.9
+snd_mixer_selem_get_playback_dB@@ALSA_0.9
+snd_mixer_selem_get_playback_dB_range@@ALSA_0.9
+snd_mixer_selem_get_playback_switch@@ALSA_0.9
+snd_mixer_selem_get_playback_volume@@ALSA_0.9
+snd_mixer_selem_get_playback_volume_range@@ALSA_0.9
+snd_mixer_selem_has_capture_channel@@ALSA_0.9
+snd_mixer_selem_has_capture_switch@@ALSA_0.9
+snd_mixer_selem_has_capture_switch_exclusive@@ALSA_0.9
+snd_mixer_selem_has_capture_switch_joined@@ALSA_0.9
+snd_mixer_selem_has_capture_volume@@ALSA_0.9
+snd_mixer_selem_has_capture_volume_joined@@ALSA_0.9
+snd_mixer_selem_has_common_switch@@ALSA_0.9
+snd_mixer_selem_has_common_volume@@ALSA_0.9
+snd_mixer_selem_has_playback_channel@@ALSA_0.9
+snd_mixer_selem_has_playback_switch@@ALSA_0.9
+snd_mixer_selem_has_playback_switch_joined@@ALSA_0.9
+snd_mixer_selem_has_playback_volume@@ALSA_0.9
+snd_mixer_selem_has_playback_volume_joined@@ALSA_0.9
+snd_mixer_selem_id_copy@@ALSA_0.9
+snd_mixer_selem_id_free@@ALSA_0.9
+snd_mixer_selem_id_get_index@@ALSA_0.9
+snd_mixer_selem_id_get_name@@ALSA_0.9
+snd_mixer_selem_id_malloc@@ALSA_0.9
+snd_mixer_selem_id_parse@@ALSA_0.9
+snd_mixer_selem_id_set_index@@ALSA_0.9
+snd_mixer_selem_id_set_name@@ALSA_0.9
+snd_mixer_selem_id_sizeof@@ALSA_0.9
+snd_mixer_selem_is_active@@ALSA_0.9
+snd_mixer_selem_is_capture_mono@@ALSA_0.9
+snd_mixer_selem_is_enum_capture@@ALSA_0.9
+snd_mixer_selem_is_enumerated@@ALSA_0.9
+snd_mixer_selem_is_enum_playback@@ALSA_0.9
+snd_mixer_selem_is_playback_mono@@ALSA_0.9
+snd_mixer_selem_register@@ALSA_0.9
+snd_mixer_selem_set_capture_dB_all@@ALSA_0.9
+snd_mixer_selem_set_capture_dB@@ALSA_0.9
+snd_mixer_selem_set_capture_switch_all@@ALSA_0.9
+snd_mixer_selem_set_capture_switch@@ALSA_0.9
+snd_mixer_selem_set_capture_volume_all@@ALSA_0.9
+snd_mixer_selem_set_capture_volume@@ALSA_0.9
+snd_mixer_selem_set_capture_volume_range@@ALSA_0.9
+snd_mixer_selem_set_enum_item@@ALSA_0.9
+snd_mixer_selem_set_playback_dB_all@@ALSA_0.9
+snd_mixer_selem_set_playback_dB@@ALSA_0.9
+snd_mixer_selem_set_playback_switch_all@@ALSA_0.9
+snd_mixer_selem_set_playback_switch@@ALSA_0.9
+snd_mixer_selem_set_playback_volume_all@@ALSA_0.9
+snd_mixer_selem_set_playback_volume@@ALSA_0.9
+snd_mixer_selem_set_playback_volume_range@@ALSA_0.9
+snd_mixer_set_callback@@ALSA_0.9
+snd_mixer_set_callback_private@@ALSA_0.9
+snd_mixer_set_compare@@ALSA_0.9
+snd_mixer_wait@@ALSA_0.9
+snd_names_list@@ALSA_0.9
+snd_names_list_free@@ALSA_0.9
+snd_output_buffer_open@@ALSA_0.9
+snd_output_buffer_string@@ALSA_0.9
+snd_output_close@@ALSA_0.9
+snd_output_flush@@ALSA_0.9
+snd_output_printf@@ALSA_0.9
+snd_output_putc@@ALSA_0.9
+snd_output_puts@@ALSA_0.9
+snd_output_stdio_attach@@ALSA_0.9
+snd_output_stdio_open@@ALSA_0.9
+snd_output_vprintf@@ALSA_0.9
+snd_pcm_access_mask_any@@ALSA_0.9
+snd_pcm_access_mask_copy@@ALSA_0.9
+snd_pcm_access_mask_empty@@ALSA_0.9
+snd_pcm_access_mask_free@@ALSA_0.9
+snd_pcm_access_mask_malloc@@ALSA_0.9
+snd_pcm_access_mask_none@@ALSA_0.9
+snd_pcm_access_mask_reset@@ALSA_0.9
+snd_pcm_access_mask_set@@ALSA_0.9
+snd_pcm_access_mask_sizeof@@ALSA_0.9
+snd_pcm_access_mask_test@@ALSA_0.9
+snd_pcm_access_name@@ALSA_0.9
+_snd_pcm_adpcm_open@@ALSA_0.9
+snd_pcm_adpcm_open@@ALSA_0.9
+_snd_pcm_alaw_open@@ALSA_0.9
+snd_pcm_alaw_open@@ALSA_0.9
+snd_pcm_area_copy@@ALSA_0.9
+snd_pcm_areas_copy@@ALSA_0.9
+snd_pcm_areas_copy_wrap@@ALSA_0.9
+snd_pcm_area_silence@@ALSA_0.9
+snd_pcm_areas_silence@@ALSA_0.9
+_snd_pcm_asym_open@@ALSA_0.9
+snd_pcm_async@@ALSA_0.9
+snd_pcm_avail@@ALSA_0.9
+snd_pcm_avail_delay@@ALSA_0.9
+snd_pcm_avail_update@@ALSA_0.9
+snd_pcm_build_linear_format@@ALSA_0.9
+snd_pcm_bytes_to_frames@@ALSA_0.9
+snd_pcm_bytes_to_samples@@ALSA_0.9
+snd_pcm_chmap_from_string@@ALSA_0.9
+snd_pcm_chmap_long_name@@ALSA_0.9
+snd_pcm_chmap_name@@ALSA_0.9
+snd_pcm_chmap_parse_string@@ALSA_0.9
+snd_pcm_chmap_print@@ALSA_0.9
+snd_pcm_chmap_type_name@@ALSA_0.9
+snd_pcm_close@@ALSA_0.9
+_snd_pcm_copy_open@@ALSA_0.9
+snd_pcm_copy_open@@ALSA_0.9
+snd_pcm_delay@@ALSA_0.9
+snd_pcm_direct_client_chk_xrun@@ALSA_0.9
+snd_pcm_direct_poll_descriptors@@ALSA_0.9
+snd_pcm_direct_slave_recover@@ALSA_0.9
+_snd_pcm_dmix_open@@ALSA_0.9
+snd_pcm_dmix_open@@ALSA_0.9
+snd_pcm_drain@@ALSA_0.9
+snd_pcm_drop@@ALSA_0.9
+_snd_pcm_dshare_open@@ALSA_0.9
+snd_pcm_dshare_open@@ALSA_0.9
+_snd_pcm_dsnoop_open@@ALSA_0.9
+snd_pcm_dsnoop_open@@ALSA_0.9
+snd_pcm_dump@@ALSA_0.9
+snd_pcm_dump_hw_setup@@ALSA_0.9
+snd_pcm_dump_setup@@ALSA_0.9
+snd_pcm_dump_sw_setup@@ALSA_0.9
+_snd_pcm_empty_open@@ALSA_0.9
+snd_pcm_extplug_create@@ALSA_0.9
+snd_pcm_extplug_delete@@ALSA_0.9
+snd_pcm_extplug_params_reset@@ALSA_0.9
+snd_pcm_extplug_set_param_link@@ALSA_0.9
+snd_pcm_extplug_set_param_list@@ALSA_0.9
+snd_pcm_extplug_set_param_minmax@@ALSA_0.9
+snd_pcm_extplug_set_slave_param_list@@ALSA_0.9
+snd_pcm_extplug_set_slave_param_minmax@@ALSA_0.9
+_snd_pcm_file_open@@ALSA_0.9
+snd_pcm_file_open@@ALSA_0.9
+snd_pcm_format_big_endian@@ALSA_0.9
+snd_pcm_format_cpu_endian@@ALSA_0.9
+snd_pcm_format_description@@ALSA_0.9
+snd_pcm_format_float@@ALSA_0.9
+snd_pcm_format_linear@@ALSA_0.9
+snd_pcm_format_little_endian@@ALSA_0.9
+snd_pcm_format_mask_any@@ALSA_0.9
+snd_pcm_format_mask_copy@@ALSA_0.9
+snd_pcm_format_mask_empty@@ALSA_0.9
+snd_pcm_format_mask_free@@ALSA_0.9
+snd_pcm_format_mask_malloc@@ALSA_0.9
+snd_pcm_format_mask_none@@ALSA_0.9
+snd_pcm_format_mask_reset@@ALSA_0.9
+snd_pcm_format_mask_set@@ALSA_0.9
+snd_pcm_format_mask_sizeof@@ALSA_0.9
+snd_pcm_format_mask_test@@ALSA_0.9
+snd_pcm_format_name@@ALSA_0.9
+snd_pcm_format_physical_width@@ALSA_0.9
+snd_pcm_format_set_silence@@ALSA_0.9
+snd_pcm_format_signed@@ALSA_0.9
+snd_pcm_format_silence_16@@ALSA_0.9
+snd_pcm_format_silence_32@@ALSA_0.9
+snd_pcm_format_silence_64@@ALSA_0.9
+snd_pcm_format_silence@@ALSA_0.9
+snd_pcm_format_size@@ALSA_0.9
+snd_pcm_format_unsigned@@ALSA_0.9
+snd_pcm_format_value@@ALSA_0.9
+snd_pcm_format_width@@ALSA_0.9
+snd_pcm_forwardable@@ALSA_0.9
+snd_pcm_forward@@ALSA_0.9.0rc8
+snd_pcm_frames_to_bytes@@ALSA_0.9
+snd_pcm_free_chmaps@@ALSA_0.9
+snd_pcm_generic_htimestamp@@ALSA_0.9
+snd_pcm_generic_real_htimestamp@@ALSA_0.9
+snd_pcm_get_chmap@@ALSA_0.9
+snd_pcm_get_params@@ALSA_0.9
+snd_pcm_hook_add@@ALSA_0.9
+_snd_pcm_hook_ctl_elems_install@@ALSA_0.9
+snd_pcm_hook_get_pcm@@ALSA_0.9
+snd_pcm_hook_get_private@@ALSA_0.9
+snd_pcm_hook_remove@@ALSA_0.9
+snd_pcm_hook_set_private@@ALSA_0.9
+_snd_pcm_hooks_open@@ALSA_0.9
+snd_pcm_hooks_open@@ALSA_0.9
+snd_pcm_htimestamp@@ALSA_0.9
+snd_pcm_hw_fast_tstamp@@ALSA_0.9
+snd_pcm_hw_free@@ALSA_0.9
+_snd_pcm_hw_open@@ALSA_0.9
+snd_pcm_hw_open@@ALSA_0.9
+snd_pcm_hw_param_dump@@ALSA_0.9
+snd_pcm_hw_params@@ALSA_0.9
+snd_pcm_hw_params_any@@ALSA_0.9
+snd_pcm_hw_params_can_disable_period_wakeup@@ALSA_0.9
+snd_pcm_hw_params_can_mmap_sample_resolution@@ALSA_0.9
+snd_pcm_hw_params_can_overrange@@ALSA_0.9
+snd_pcm_hw_params_can_pause@@ALSA_0.9
+snd_pcm_hw_params_can_resume@@ALSA_0.9
+snd_pcm_hw_params_can_sync_start@@ALSA_0.9
+snd_pcm_hw_params_copy@@ALSA_0.9
+snd_pcm_hw_params_current@@ALSA_0.9
+snd_pcm_hw_params_dump@@ALSA_0.9
+snd_pcm_hw_params_free@@ALSA_0.9
+__snd_pcm_hw_params_get_access@@ALSA_0.9
+snd_pcm_hw_params_get_access@ALSA_0.9
+snd_pcm_hw_params_get_access@@ALSA_0.9.0rc4
+snd_pcm_hw_params_get_access_mask@@ALSA_0.9
+__snd_pcm_hw_params_get_buffer_size@@ALSA_0.9
+snd_pcm_hw_params_get_buffer_size@ALSA_0.9
+snd_pcm_hw_params_get_buffer_size@@ALSA_0.9.0rc4
+__snd_pcm_hw_params_get_buffer_size_max@@ALSA_0.9
+snd_pcm_hw_params_get_buffer_size_max@ALSA_0.9
+snd_pcm_hw_params_get_buffer_size_max@@ALSA_0.9.0rc4
+__snd_pcm_hw_params_get_buffer_size_min@@ALSA_0.9
+snd_pcm_hw_params_get_buffer_size_min@ALSA_0.9
+snd_pcm_hw_params_get_buffer_size_min@@ALSA_0.9.0rc4
+__snd_pcm_hw_params_get_buffer_time@@ALSA_0.9
+snd_pcm_hw_params_get_buffer_time@ALSA_0.9
+snd_pcm_hw_params_get_buffer_time@@ALSA_0.9.0rc4
+__snd_pcm_hw_params_get_buffer_time_max@@ALSA_0.9
+snd_pcm_hw_params_get_buffer_time_max@ALSA_0.9
+snd_pcm_hw_params_get_buffer_time_max@@ALSA_0.9.0rc4
+__snd_pcm_hw_params_get_buffer_time_min@@ALSA_0.9
+snd_pcm_hw_params_get_buffer_time_min@ALSA_0.9
+snd_pcm_hw_params_get_buffer_time_min@@ALSA_0.9.0rc4
+__snd_pcm_hw_params_get_channels@@ALSA_0.9
+snd_pcm_hw_params_get_channels@ALSA_0.9
+snd_pcm_hw_params_get_channels@@ALSA_0.9.0rc4
+__snd_pcm_hw_params_get_channels_max@@ALSA_0.9
+snd_pcm_hw_params_get_channels_max@ALSA_0.9
+snd_pcm_hw_params_get_channels_max@@ALSA_0.9.0rc4
+__snd_pcm_hw_params_get_channels_min@@ALSA_0.9
+snd_pcm_hw_params_get_channels_min@ALSA_0.9
+snd_pcm_hw_params_get_channels_min@@ALSA_0.9.0rc4
+snd_pcm_hw_params_get_export_buffer@@ALSA_0.9
+snd_pcm_hw_params_get_fifo_size@@ALSA_0.9
+__snd_pcm_hw_params_get_format@@ALSA_0.9
+snd_pcm_hw_params_get_format@ALSA_0.9
+snd_pcm_hw_params_get_format@@ALSA_0.9.0rc4
+snd_pcm_hw_params_get_format_mask@@ALSA_0.9
+snd_pcm_hw_params_get_min_align@@ALSA_0.9
+__snd_pcm_hw_params_get_periods@@ALSA_0.9
+snd_pcm_hw_params_get_periods@ALSA_0.9
+snd_pcm_hw_params_get_periods@@ALSA_0.9.0rc4
+__snd_pcm_hw_params_get_period_size@@ALSA_0.9
+snd_pcm_hw_params_get_period_size@ALSA_0.9
+snd_pcm_hw_params_get_period_size@@ALSA_0.9.0rc4
+__snd_pcm_hw_params_get_period_size_max@@ALSA_0.9
+snd_pcm_hw_params_get_period_size_max@ALSA_0.9
+snd_pcm_hw_params_get_period_size_max@@ALSA_0.9.0rc4
+__snd_pcm_hw_params_get_period_size_min@@ALSA_0.9
+snd_pcm_hw_params_get_period_size_min@ALSA_0.9
+snd_pcm_hw_params_get_period_size_min@@ALSA_0.9.0rc4
+__snd_pcm_hw_params_get_periods_max@@ALSA_0.9
+snd_pcm_hw_params_get_periods_max@ALSA_0.9
+snd_pcm_hw_params_get_periods_max@@ALSA_0.9.0rc4
+__snd_pcm_hw_params_get_periods_min@@ALSA_0.9
+snd_pcm_hw_params_get_periods_min@ALSA_0.9
+snd_pcm_hw_params_get_periods_min@@ALSA_0.9.0rc4
+__snd_pcm_hw_params_get_period_time@@ALSA_0.9
+snd_pcm_hw_params_get_period_time@ALSA_0.9
+snd_pcm_hw_params_get_period_time@@ALSA_0.9.0rc4
+__snd_pcm_hw_params_get_period_time_max@@ALSA_0.9
+snd_pcm_hw_params_get_period_time_max@ALSA_0.9
+snd_pcm_hw_params_get_period_time_max@@ALSA_0.9.0rc4
+__snd_pcm_hw_params_get_period_time_min@@ALSA_0.9
+snd_pcm_hw_params_get_period_time_min@ALSA_0.9
+snd_pcm_hw_params_get_period_time_min@@ALSA_0.9.0rc4
+snd_pcm_hw_params_get_period_wakeup@@ALSA_0.9
+__snd_pcm_hw_params_get_rate@@ALSA_0.9
+snd_pcm_hw_params_get_rate@ALSA_0.9
+snd_pcm_hw_params_get_rate@@ALSA_0.9.0rc4
+__snd_pcm_hw_params_get_rate_max@@ALSA_0.9
+snd_pcm_hw_params_get_rate_max@ALSA_0.9
+snd_pcm_hw_params_get_rate_max@@ALSA_0.9.0rc4
+__snd_pcm_hw_params_get_rate_min@@ALSA_0.9
+snd_pcm_hw_params_get_rate_min@ALSA_0.9
+snd_pcm_hw_params_get_rate_min@@ALSA_0.9.0rc4
+snd_pcm_hw_params_get_rate_numden@@ALSA_0.9
+snd_pcm_hw_params_get_rate_resample@@ALSA_0.9
+snd_pcm_hw_params_get_sbits@@ALSA_0.9
+__snd_pcm_hw_params_get_subformat@@ALSA_0.9
+snd_pcm_hw_params_get_subformat@ALSA_0.9
+snd_pcm_hw_params_get_subformat@@ALSA_0.9.0rc4
+snd_pcm_hw_params_get_subformat_mask@@ALSA_0.9
+__snd_pcm_hw_params_get_tick_time@@ALSA_0.9
+snd_pcm_hw_params_get_tick_time@ALSA_0.9
+snd_pcm_hw_params_get_tick_time@@ALSA_0.9.0rc4
+__snd_pcm_hw_params_get_tick_time_max@@ALSA_0.9
+snd_pcm_hw_params_get_tick_time_max@ALSA_0.9
+snd_pcm_hw_params_get_tick_time_max@@ALSA_0.9.0rc4
+__snd_pcm_hw_params_get_tick_time_min@@ALSA_0.9
+snd_pcm_hw_params_get_tick_time_min@ALSA_0.9
+snd_pcm_hw_params_get_tick_time_min@@ALSA_0.9.0rc4
+snd_pcm_hw_params_is_batch@@ALSA_0.9
+snd_pcm_hw_params_is_block_transfer@@ALSA_0.9
+snd_pcm_hw_params_is_double@@ALSA_0.9
+snd_pcm_hw_params_is_half_duplex@@ALSA_0.9
+snd_pcm_hw_params_is_joint_duplex@@ALSA_0.9
+snd_pcm_hw_params_is_monotonic@@ALSA_0.9
+snd_pcm_hw_params_malloc@@ALSA_0.9
+snd_pcm_hw_params_set_access@@ALSA_0.9
+__snd_pcm_hw_params_set_access_first@@ALSA_0.9
+snd_pcm_hw_params_set_access_first@ALSA_0.9
+snd_pcm_hw_params_set_access_first@@ALSA_0.9.0rc4
+__snd_pcm_hw_params_set_access_last@@ALSA_0.9
+snd_pcm_hw_params_set_access_last@ALSA_0.9
+snd_pcm_hw_params_set_access_last@@ALSA_0.9.0rc4
+snd_pcm_hw_params_set_access_mask@@ALSA_0.9
+snd_pcm_hw_params_set_buffer_size@@ALSA_0.9
+__snd_pcm_hw_params_set_buffer_size_first@@ALSA_0.9
+snd_pcm_hw_params_set_buffer_size_first@ALSA_0.9
+snd_pcm_hw_params_set_buffer_size_first@@ALSA_0.9.0rc4
+__snd_pcm_hw_params_set_buffer_size_last@@ALSA_0.9
+snd_pcm_hw_params_set_buffer_size_last@ALSA_0.9
+snd_pcm_hw_params_set_buffer_size_last@@ALSA_0.9.0rc4
+snd_pcm_hw_params_set_buffer_size_max@@ALSA_0.9
+snd_pcm_hw_params_set_buffer_size_min@@ALSA_0.9
+snd_pcm_hw_params_set_buffer_size_minmax@@ALSA_0.9
+__snd_pcm_hw_params_set_buffer_size_near@@ALSA_0.9
+snd_pcm_hw_params_set_buffer_size_near@ALSA_0.9
+snd_pcm_hw_params_set_buffer_size_near@@ALSA_0.9.0rc4
+snd_pcm_hw_params_set_buffer_time@@ALSA_0.9
+__snd_pcm_hw_params_set_buffer_time_first@@ALSA_0.9
+snd_pcm_hw_params_set_buffer_time_first@ALSA_0.9
+snd_pcm_hw_params_set_buffer_time_first@@ALSA_0.9.0rc4
+__snd_pcm_hw_params_set_buffer_time_last@@ALSA_0.9
+snd_pcm_hw_params_set_buffer_time_last@ALSA_0.9
+snd_pcm_hw_params_set_buffer_time_last@@ALSA_0.9.0rc4
+snd_pcm_hw_params_set_buffer_time_max@@ALSA_0.9
+snd_pcm_hw_params_set_buffer_time_min@@ALSA_0.9
+snd_pcm_hw_params_set_buffer_time_minmax@@ALSA_0.9
+__snd_pcm_hw_params_set_buffer_time_near@@ALSA_0.9
+snd_pcm_hw_params_set_buffer_time_near@ALSA_0.9
+snd_pcm_hw_params_set_buffer_time_near@@ALSA_0.9.0rc4
+snd_pcm_hw_params_set_channels@@ALSA_0.9
+__snd_pcm_hw_params_set_channels_first@@ALSA_0.9
+snd_pcm_hw_params_set_channels_first@ALSA_0.9
+snd_pcm_hw_params_set_channels_first@@ALSA_0.9.0rc4
+__snd_pcm_hw_params_set_channels_last@@ALSA_0.9
+snd_pcm_hw_params_set_channels_last@ALSA_0.9
+snd_pcm_hw_params_set_channels_last@@ALSA_0.9.0rc4
+snd_pcm_hw_params_set_channels_max@@ALSA_0.9
+snd_pcm_hw_params_set_channels_min@@ALSA_0.9
+snd_pcm_hw_params_set_channels_minmax@@ALSA_0.9
+__snd_pcm_hw_params_set_channels_near@@ALSA_0.9
+snd_pcm_hw_params_set_channels_near@ALSA_0.9
+snd_pcm_hw_params_set_channels_near@@ALSA_0.9.0rc4
+snd_pcm_hw_params_set_export_buffer@@ALSA_0.9
+snd_pcm_hw_params_set_format@@ALSA_0.9
+__snd_pcm_hw_params_set_format_first@@ALSA_0.9
+snd_pcm_hw_params_set_format_first@ALSA_0.9
+snd_pcm_hw_params_set_format_first@@ALSA_0.9.0rc4
+__snd_pcm_hw_params_set_format_last@@ALSA_0.9
+snd_pcm_hw_params_set_format_last@ALSA_0.9
+snd_pcm_hw_params_set_format_last@@ALSA_0.9.0rc4
+snd_pcm_hw_params_set_format_mask@@ALSA_0.9
+snd_pcm_hw_params_set_periods@@ALSA_0.9
+__snd_pcm_hw_params_set_periods_first@@ALSA_0.9
+snd_pcm_hw_params_set_periods_first@ALSA_0.9
+snd_pcm_hw_params_set_periods_first@@ALSA_0.9.0rc4
+snd_pcm_hw_params_set_periods_integer@@ALSA_0.9
+snd_pcm_hw_params_set_period_size@@ALSA_0.9
+__snd_pcm_hw_params_set_period_size_first@@ALSA_0.9
+snd_pcm_hw_params_set_period_size_first@ALSA_0.9
+snd_pcm_hw_params_set_period_size_first@@ALSA_0.9.0rc4
+snd_pcm_hw_params_set_period_size_integer@@ALSA_0.9
+__snd_pcm_hw_params_set_period_size_last@@ALSA_0.9
+snd_pcm_hw_params_set_period_size_last@ALSA_0.9
+snd_pcm_hw_params_set_period_size_last@@ALSA_0.9.0rc4
+snd_pcm_hw_params_set_period_size_max@@ALSA_0.9
+snd_pcm_hw_params_set_period_size_min@@ALSA_0.9
+snd_pcm_hw_params_set_period_size_minmax@@ALSA_0.9
+__snd_pcm_hw_params_set_period_size_near@@ALSA_0.9
+snd_pcm_hw_params_set_period_size_near@ALSA_0.9
+snd_pcm_hw_params_set_period_size_near@@ALSA_0.9.0rc4
+__snd_pcm_hw_params_set_periods_last@@ALSA_0.9
+snd_pcm_hw_params_set_periods_last@ALSA_0.9
+snd_pcm_hw_params_set_periods_last@@ALSA_0.9.0rc4
+snd_pcm_hw_params_set_periods_max@@ALSA_0.9
+snd_pcm_hw_params_set_periods_min@@ALSA_0.9
+snd_pcm_hw_params_set_periods_minmax@@ALSA_0.9
+__snd_pcm_hw_params_set_periods_near@@ALSA_0.9
+snd_pcm_hw_params_set_periods_near@ALSA_0.9
+snd_pcm_hw_params_set_periods_near@@ALSA_0.9.0rc4
+snd_pcm_hw_params_set_period_time@@ALSA_0.9
+__snd_pcm_hw_params_set_period_time_first@@ALSA_0.9
+snd_pcm_hw_params_set_period_time_first@ALSA_0.9
+snd_pcm_hw_params_set_period_time_first@@ALSA_0.9.0rc4
+__snd_pcm_hw_params_set_period_time_last@@ALSA_0.9
+snd_pcm_hw_params_set_period_time_last@ALSA_0.9
+snd_pcm_hw_params_set_period_time_last@@ALSA_0.9.0rc4
+snd_pcm_hw_params_set_period_time_max@@ALSA_0.9
+snd_pcm_hw_params_set_period_time_min@@ALSA_0.9
+snd_pcm_hw_params_set_period_time_minmax@@ALSA_0.9
+__snd_pcm_hw_params_set_period_time_near@@ALSA_0.9
+snd_pcm_hw_params_set_period_time_near@ALSA_0.9
+snd_pcm_hw_params_set_period_time_near@@ALSA_0.9.0rc4
+snd_pcm_hw_params_set_period_wakeup@@ALSA_0.9
+snd_pcm_hw_params_set_rate@@ALSA_0.9
+__snd_pcm_hw_params_set_rate_first@@ALSA_0.9
+snd_pcm_hw_params_set_rate_first@ALSA_0.9
+snd_pcm_hw_params_set_rate_first@@ALSA_0.9.0rc4
+__snd_pcm_hw_params_set_rate_last@@ALSA_0.9
+snd_pcm_hw_params_set_rate_last@ALSA_0.9
+snd_pcm_hw_params_set_rate_last@@ALSA_0.9.0rc4
+snd_pcm_hw_params_set_rate_max@@ALSA_0.9
+snd_pcm_hw_params_set_rate_min@@ALSA_0.9
+snd_pcm_hw_params_set_rate_minmax@@ALSA_0.9
+__snd_pcm_hw_params_set_rate_near@@ALSA_0.9
+snd_pcm_hw_params_set_rate_near@ALSA_0.9
+snd_pcm_hw_params_set_rate_near@@ALSA_0.9.0rc4
+snd_pcm_hw_params_set_rate_resample@@ALSA_0.9
+snd_pcm_hw_params_set_subformat@@ALSA_0.9
+__snd_pcm_hw_params_set_subformat_first@@ALSA_0.9
+snd_pcm_hw_params_set_subformat_first@ALSA_0.9
+snd_pcm_hw_params_set_subformat_first@@ALSA_0.9.0rc4
+__snd_pcm_hw_params_set_subformat_last@@ALSA_0.9
+snd_pcm_hw_params_set_subformat_last@ALSA_0.9
+snd_pcm_hw_params_set_subformat_last@@ALSA_0.9.0rc4
+snd_pcm_hw_params_set_subformat_mask@@ALSA_0.9
+snd_pcm_hw_params_set_tick_time@@ALSA_0.9
+__snd_pcm_hw_params_set_tick_time_first@@ALSA_0.9
+snd_pcm_hw_params_set_tick_time_first@ALSA_0.9
+snd_pcm_hw_params_set_tick_time_first@@ALSA_0.9.0rc4
+__snd_pcm_hw_params_set_tick_time_last@@ALSA_0.9
+snd_pcm_hw_params_set_tick_time_last@ALSA_0.9
+snd_pcm_hw_params_set_tick_time_last@@ALSA_0.9.0rc4
+snd_pcm_hw_params_set_tick_time_max@@ALSA_0.9
+snd_pcm_hw_params_set_tick_time_min@@ALSA_0.9
+snd_pcm_hw_params_set_tick_time_minmax@@ALSA_0.9
+__snd_pcm_hw_params_set_tick_time_near@@ALSA_0.9
+snd_pcm_hw_params_set_tick_time_near@ALSA_0.9
+snd_pcm_hw_params_set_tick_time_near@@ALSA_0.9.0rc4
+snd_pcm_hw_params_sizeof@@ALSA_0.9
+snd_pcm_hw_params_supports_audio_ts_type@@ALSA_0.9
+snd_pcm_hw_params_supports_audio_wallclock_ts@@ALSA_0.9
+snd_pcm_hw_params_test_access@@ALSA_0.9
+snd_pcm_hw_params_test_buffer_size@@ALSA_0.9
+snd_pcm_hw_params_test_buffer_time@@ALSA_0.9
+snd_pcm_hw_params_test_channels@@ALSA_0.9
+snd_pcm_hw_params_test_format@@ALSA_0.9
+snd_pcm_hw_params_test_periods@@ALSA_0.9
+snd_pcm_hw_params_test_period_size@@ALSA_0.9
+snd_pcm_hw_params_test_period_time@@ALSA_0.9
+snd_pcm_hw_params_test_rate@@ALSA_0.9
+snd_pcm_hw_params_test_subformat@@ALSA_0.9
+snd_pcm_hw_params_test_tick_time@@ALSA_0.9
+snd_pcm_hw_refine@@ALSA_0.9
+snd_pcm_hwsync@@ALSA_0.9
+_snd_pcm_iec958_open@@ALSA_0.9
+snd_pcm_iec958_open@@ALSA_0.9
+snd_pcm_info@@ALSA_0.9
+snd_pcm_info_copy@@ALSA_0.9
+snd_pcm_info_free@@ALSA_0.9
+snd_pcm_info_get_card@@ALSA_0.9
+snd_pcm_info_get_class@@ALSA_0.9
+snd_pcm_info_get_device@@ALSA_0.9
+snd_pcm_info_get_id@@ALSA_0.9
+snd_pcm_info_get_name@@ALSA_0.9
+snd_pcm_info_get_stream@@ALSA_0.9
+snd_pcm_info_get_subclass@@ALSA_0.9
+snd_pcm_info_get_subdevice@@ALSA_0.9
+snd_pcm_info_get_subdevice_name@@ALSA_0.9
+snd_pcm_info_get_subdevices_avail@@ALSA_0.9
+snd_pcm_info_get_subdevices_count@@ALSA_0.9
+snd_pcm_info_get_sync@@ALSA_0.9
+snd_pcm_info_malloc@@ALSA_0.9
+snd_pcm_info_set_device@@ALSA_0.9
+snd_pcm_info_set_stream@@ALSA_0.9
+snd_pcm_info_set_subdevice@@ALSA_0.9
+snd_pcm_info_sizeof@@ALSA_0.9
+snd_pcm_ioplug_avail@@ALSA_0.9
+snd_pcm_ioplug_create@@ALSA_0.9
+snd_pcm_ioplug_delete@@ALSA_0.9
+snd_pcm_ioplug_hw_avail@@ALSA_0.9
+snd_pcm_ioplug_mmap_areas@@ALSA_0.9
+snd_pcm_ioplug_params_reset@@ALSA_0.9
+snd_pcm_ioplug_reinit_status@@ALSA_0.9
+snd_pcm_ioplug_set_param_list@@ALSA_0.9
+snd_pcm_ioplug_set_param_minmax@@ALSA_0.9
+snd_pcm_ioplug_set_state@@ALSA_0.9
+_snd_pcm_ladspa_open@@ALSA_0.9
+snd_pcm_ladspa_open@@ALSA_0.9
+snd_pcm_lfloat_convert_float_integer@@ALSA_0.9
+snd_pcm_lfloat_convert_integer_float@@ALSA_0.9
+snd_pcm_lfloat_get_s32_index@@ALSA_0.9
+_snd_pcm_lfloat_open@@ALSA_0.9
+snd_pcm_lfloat_open@@ALSA_0.9
+snd_pcm_lfloat_put_s32_index@@ALSA_0.9
+_snd_pcm_linear_open@@ALSA_0.9
+snd_pcm_linear_open@@ALSA_0.9
+snd_pcm_link@@ALSA_0.9
+snd_pcm_meter_add_scope@@ALSA_0.9
+snd_pcm_meter_get_boundary@@ALSA_0.9
+snd_pcm_meter_get_bufsize@@ALSA_0.9
+snd_pcm_meter_get_channels@@ALSA_0.9
+snd_pcm_meter_get_now@@ALSA_0.9
+snd_pcm_meter_get_rate@@ALSA_0.9
+_snd_pcm_meter_open@@ALSA_0.9
+snd_pcm_meter_open@@ALSA_0.9
+snd_pcm_meter_search_scope@@ALSA_0.9
+snd_pcm_mmap@@ALSA_0.9
+snd_pcm_mmap_begin@@ALSA_0.9
+snd_pcm_mmap_commit@@ALSA_0.9
+_snd_pcm_mmap_emul_open@@ALSA_0.9
+snd_pcm_mmap_readi@@ALSA_0.9
+snd_pcm_mmap_readn@@ALSA_0.9
+snd_pcm_mmap_writei@@ALSA_0.9
+snd_pcm_mmap_writen@@ALSA_0.9
+_snd_pcm_mulaw_open@@ALSA_0.9
+snd_pcm_mulaw_open@@ALSA_0.9
+_snd_pcm_multi_open@@ALSA_0.9
+snd_pcm_multi_open@@ALSA_0.9
+snd_pcm_munmap@@ALSA_0.9
+snd_pcm_name@@ALSA_0.9
+snd_pcm_nonblock@@ALSA_0.9
+_snd_pcm_null_open@@ALSA_0.9
+snd_pcm_null_open@@ALSA_0.9
+snd_pcm_open@@ALSA_0.9
+snd_pcm_open_fallback@@ALSA_0.9
+snd_pcm_open_lconf@@ALSA_0.9
+snd_pcm_parse_control_id@@ALSA_0.9
+snd_pcm_pause@@ALSA_0.9
+_snd_pcm_plug_open@@ALSA_0.9
+snd_pcm_plug_open@@ALSA_0.9
+_snd_pcm_poll_descriptor@@ALSA_0.9
+snd_pcm_poll_descriptors@@ALSA_0.9
+snd_pcm_poll_descriptors_count@@ALSA_0.9
+snd_pcm_poll_descriptors_revents@@ALSA_0.9
+snd_pcm_prepare@@ALSA_0.9
+snd_pcm_query_chmaps@@ALSA_0.9
+snd_pcm_query_chmaps_from_hw@@ALSA_0.9
+_snd_pcm_rate_linear_open@@ALSA_0.9
+_snd_pcm_rate_open@@ALSA_0.9
+snd_pcm_rate_open@@ALSA_0.9
+snd_pcm_readi@@ALSA_0.9
+snd_pcm_readn@@ALSA_0.9
+snd_pcm_recover@@ALSA_0.9
+snd_pcm_reset@@ALSA_0.9
+snd_pcm_resume@@ALSA_0.9
+snd_pcm_rewindable@@ALSA_0.9
+snd_pcm_rewind@@ALSA_0.9
+snd_pcm_route_determine_ttable@@ALSA_0.9
+snd_pcm_route_load_ttable@@ALSA_0.9
+_snd_pcm_route_open@@ALSA_0.9
+snd_pcm_route_open@@ALSA_0.9
+snd_pcm_samples_to_bytes@@ALSA_0.9
+snd_pcm_scope_get_callback_private@@ALSA_0.9
+snd_pcm_scope_get_name@@ALSA_0.9
+snd_pcm_scope_malloc@@ALSA_0.9
+snd_pcm_scope_s16_get_channel_buffer@@ALSA_0.9
+snd_pcm_scope_s16_open@@ALSA_0.9
+snd_pcm_scope_set_callback_private@@ALSA_0.9
+snd_pcm_scope_set_name@@ALSA_0.9
+snd_pcm_scope_set_ops@@ALSA_0.9
+snd_pcm_set_chmap@@ALSA_0.9
+snd_pcm_set_params@@ALSA_0.9
+_snd_pcm_share_open@@ALSA_0.9
+snd_pcm_share_open@@ALSA_0.9
+_snd_pcm_shm_open@@ALSA_0.9
+snd_pcm_shm_open@@ALSA_0.9
+snd_pcm_slave_conf@@ALSA_0.9
+_snd_pcm_softvol_open@@ALSA_0.9
+snd_pcm_softvol_open@@ALSA_0.9
+snd_pcm_start@@ALSA_0.9
+snd_pcm_start_mode_name@@ALSA_0.9
+snd_pcm_state@@ALSA_0.9
+snd_pcm_state_name@@ALSA_0.9
+snd_pcm_status@@ALSA_0.9
+snd_pcm_status_copy@@ALSA_0.9
+snd_pcm_status_dump@@ALSA_0.9
+snd_pcm_status_free@@ALSA_0.9
+snd_pcm_status_get_audio_htstamp@@ALSA_0.9
+snd_pcm_status_get_audio_htstamp_report@@ALSA_0.9
+snd_pcm_status_get_avail@@ALSA_0.9
+snd_pcm_status_get_avail_max@@ALSA_0.9
+snd_pcm_status_get_delay@@ALSA_0.9
+snd_pcm_status_get_driver_htstamp@@ALSA_0.9
+snd_pcm_status_get_htstamp@@ALSA_0.9.0rc8
+snd_pcm_status_get_overrange@@ALSA_0.9
+snd_pcm_status_get_state@@ALSA_0.9
+snd_pcm_status_get_trigger_htstamp@@ALSA_0.9.0rc8
+snd_pcm_status_get_trigger_tstamp@@ALSA_0.9
+snd_pcm_status_get_tstamp@@ALSA_0.9
+snd_pcm_status_malloc@@ALSA_0.9
+snd_pcm_status_set_audio_htstamp_config@@ALSA_0.9
+snd_pcm_status_sizeof@@ALSA_0.9
+snd_pcm_stream@@ALSA_0.9
+snd_pcm_stream_name@@ALSA_0.9
+snd_pcm_subformat_description@@ALSA_0.9
+snd_pcm_subformat_mask_any@@ALSA_0.9
+snd_pcm_subformat_mask_copy@@ALSA_0.9
+snd_pcm_subformat_mask_empty@@ALSA_0.9
+snd_pcm_subformat_mask_free@@ALSA_0.9
+snd_pcm_subformat_mask_malloc@@ALSA_0.9
+snd_pcm_subformat_mask_none@@ALSA_0.9
+snd_pcm_subformat_mask_reset@@ALSA_0.9
+snd_pcm_subformat_mask_set@@ALSA_0.9
+snd_pcm_subformat_mask_sizeof@@ALSA_0.9
+snd_pcm_subformat_mask_test@@ALSA_0.9
+snd_pcm_subformat_name@@ALSA_0.9
+snd_pcm_sw_params@@ALSA_0.9
+snd_pcm_sw_params_copy@@ALSA_0.9
+snd_pcm_sw_params_current@@ALSA_0.9
+snd_pcm_sw_params_dump@@ALSA_0.9
+snd_pcm_sw_params_free@@ALSA_0.9
+__snd_pcm_sw_params_get_avail_min@@ALSA_0.9
+snd_pcm_sw_params_get_avail_min@ALSA_0.9
+snd_pcm_sw_params_get_avail_min@@ALSA_0.9.0rc4
+snd_pcm_sw_params_get_boundary@@ALSA_0.9
+snd_pcm_sw_params_get_period_event@@ALSA_0.9
+__snd_pcm_sw_params_get_silence_size@@ALSA_0.9
+snd_pcm_sw_params_get_silence_size@ALSA_0.9
+snd_pcm_sw_params_get_silence_size@@ALSA_0.9.0rc4
+__snd_pcm_sw_params_get_silence_threshold@@ALSA_0.9
+snd_pcm_sw_params_get_silence_threshold@ALSA_0.9
+snd_pcm_sw_params_get_silence_threshold@@ALSA_0.9.0rc4
+__snd_pcm_sw_params_get_sleep_min@@ALSA_0.9
+snd_pcm_sw_params_get_sleep_min@ALSA_0.9
+snd_pcm_sw_params_get_sleep_min@@ALSA_0.9.0rc4
+snd_pcm_sw_params_get_start_mode@@ALSA_0.9
+__snd_pcm_sw_params_get_start_threshold@@ALSA_0.9
+snd_pcm_sw_params_get_start_threshold@ALSA_0.9
+snd_pcm_sw_params_get_start_threshold@@ALSA_0.9.0rc4
+__snd_pcm_sw_params_get_stop_threshold@@ALSA_0.9
+snd_pcm_sw_params_get_stop_threshold@ALSA_0.9
+snd_pcm_sw_params_get_stop_threshold@@ALSA_0.9.0rc4
+__snd_pcm_sw_params_get_tstamp_mode@@ALSA_0.9
+snd_pcm_sw_params_get_tstamp_mode@ALSA_0.9
+snd_pcm_sw_params_get_tstamp_mode@@ALSA_0.9.0rc4
+snd_pcm_sw_params_get_tstamp_type@@ALSA_0.9
+__snd_pcm_sw_params_get_xfer_align@@ALSA_0.9
+snd_pcm_sw_params_get_xfer_align@ALSA_0.9
+snd_pcm_sw_params_get_xfer_align@@ALSA_0.9.0rc4
+snd_pcm_sw_params_get_xrun_mode@@ALSA_0.9
+snd_pcm_sw_params_malloc@@ALSA_0.9
+snd_pcm_sw_params_set_avail_min@@ALSA_0.9
+snd_pcm_sw_params_set_period_event@@ALSA_0.9
+snd_pcm_sw_params_set_silence_size@@ALSA_0.9
+snd_pcm_sw_params_set_silence_threshold@@ALSA_0.9
+snd_pcm_sw_params_set_sleep_min@@ALSA_0.9
+snd_pcm_sw_params_set_start_mode@@ALSA_0.9
+snd_pcm_sw_params_set_start_threshold@@ALSA_0.9
+snd_pcm_sw_params_set_stop_threshold@@ALSA_0.9
+snd_pcm_sw_params_set_tstamp_mode@@ALSA_0.9
+snd_pcm_sw_params_set_tstamp_type@@ALSA_0.9
+snd_pcm_sw_params_set_xfer_align@@ALSA_0.9
+snd_pcm_sw_params_set_xrun_mode@@ALSA_0.9
+snd_pcm_sw_params_sizeof@@ALSA_0.9
+snd_pcm_tstamp_mode_name@@ALSA_0.9
+snd_pcm_tstamp_type_name@@ALSA_0.9
+snd_pcm_type@@ALSA_0.9
+snd_pcm_type_name@@ALSA_0.9.0
+snd_pcm_unlink@@ALSA_0.9
+snd_pcm_wait@@ALSA_0.9
+snd_pcm_writei@@ALSA_0.9
+snd_pcm_writen@@ALSA_0.9
+snd_pcm_xrun_mode_name@@ALSA_0.9
+snd_rawmidi_close@@ALSA_0.9
+snd_rawmidi_drain@@ALSA_0.9
+snd_rawmidi_drop@@ALSA_0.9
+_snd_rawmidi_hw_open@@ALSA_0.9
+snd_rawmidi_hw_open@@ALSA_0.9
+snd_rawmidi_info@@ALSA_0.9
+snd_rawmidi_info_copy@@ALSA_0.9
+snd_rawmidi_info_free@@ALSA_0.9
+snd_rawmidi_info_get_card@@ALSA_0.9
+snd_rawmidi_info_get_device@@ALSA_0.9
+snd_rawmidi_info_get_flags@@ALSA_0.9
+snd_rawmidi_info_get_id@@ALSA_0.9
+snd_rawmidi_info_get_name@@ALSA_0.9
+snd_rawmidi_info_get_stream@@ALSA_0.9
+snd_rawmidi_info_get_subdevice@@ALSA_0.9
+snd_rawmidi_info_get_subdevice_name@@ALSA_0.9
+snd_rawmidi_info_get_subdevices_avail@@ALSA_0.9
+snd_rawmidi_info_get_subdevices_count@@ALSA_0.9
+snd_rawmidi_info_malloc@@ALSA_0.9
+snd_rawmidi_info_set_device@@ALSA_0.9
+snd_rawmidi_info_set_stream@@ALSA_0.9
+snd_rawmidi_info_set_subdevice@@ALSA_0.9
+snd_rawmidi_info_sizeof@@ALSA_0.9
+snd_rawmidi_name@@ALSA_0.9
+snd_rawmidi_nonblock@@ALSA_0.9
+snd_rawmidi_open@@ALSA_0.9
+snd_rawmidi_open_lconf@@ALSA_0.9
+snd_rawmidi_params@@ALSA_0.9
+snd_rawmidi_params_copy@@ALSA_0.9
+snd_rawmidi_params_current@@ALSA_0.9
+snd_rawmidi_params_free@@ALSA_0.9
+snd_rawmidi_params_get_avail_min@@ALSA_0.9
+snd_rawmidi_params_get_buffer_size@@ALSA_0.9
+snd_rawmidi_params_get_no_active_sensing@@ALSA_0.9
+snd_rawmidi_params_malloc@@ALSA_0.9
+snd_rawmidi_params_set_avail_min@@ALSA_0.9
+snd_rawmidi_params_set_buffer_size@@ALSA_0.9
+snd_rawmidi_params_set_no_active_sensing@@ALSA_0.9
+snd_rawmidi_params_sizeof@@ALSA_0.9
+snd_rawmidi_poll_descriptors@@ALSA_0.9
+snd_rawmidi_poll_descriptors_count@@ALSA_0.9
+snd_rawmidi_poll_descriptors_revents@@ALSA_0.9
+snd_rawmidi_read@@ALSA_0.9
+snd_rawmidi_status@@ALSA_0.9
+snd_rawmidi_status_copy@@ALSA_0.9
+snd_rawmidi_status_free@@ALSA_0.9
+snd_rawmidi_status_get_avail@@ALSA_0.9
+snd_rawmidi_status_get_tstamp@@ALSA_0.9
+snd_rawmidi_status_get_xruns@@ALSA_0.9
+snd_rawmidi_status_malloc@@ALSA_0.9
+snd_rawmidi_status_sizeof@@ALSA_0.9
+snd_rawmidi_stream@@ALSA_0.9
+snd_rawmidi_type@@ALSA_0.9
+_snd_rawmidi_virtual_open@@ALSA_0.9
+snd_rawmidi_virtual_open@@ALSA_0.9
+snd_rawmidi_write@@ALSA_0.9
+snd_receive_fd@@ALSA_0.9
+snd_sctl_build@@ALSA_0.9
+snd_sctl_free@@ALSA_0.9
+snd_sctl_install@@ALSA_0.9
+snd_sctl_remove@@ALSA_0.9
+snd_send_fd@@ALSA_0.9
+snd_seq_alloc_named_queue@@ALSA_0.9
+snd_seq_alloc_queue@@ALSA_0.9
+snd_seq_change_bit@@ALSA_0.9
+snd_seq_client_id@@ALSA_0.9
+snd_seq_client_info_copy@@ALSA_0.9
+snd_seq_client_info_event_filter_add@@ALSA_0.9
+snd_seq_client_info_event_filter_check@@ALSA_0.9
+snd_seq_client_info_event_filter_clear@@ALSA_0.9
+snd_seq_client_info_event_filter_del@@ALSA_0.9
+snd_seq_client_info_free@@ALSA_0.9
+snd_seq_client_info_get_broadcast_filter@@ALSA_0.9
+snd_seq_client_info_get_card@@ALSA_0.9
+snd_seq_client_info_get_client@@ALSA_0.9
+snd_seq_client_info_get_error_bounce@@ALSA_0.9
+snd_seq_client_info_get_event_filter@@ALSA_0.9
+snd_seq_client_info_get_event_lost@@ALSA_0.9
+snd_seq_client_info_get_name@@ALSA_0.9
+snd_seq_client_info_get_num_ports@@ALSA_0.9
+snd_seq_client_info_get_pid@@ALSA_0.9
+snd_seq_client_info_get_type@@ALSA_0.9
+snd_seq_client_info_malloc@@ALSA_0.9
+snd_seq_client_info_set_broadcast_filter@@ALSA_0.9
+snd_seq_client_info_set_client@@ALSA_0.9
+snd_seq_client_info_set_error_bounce@@ALSA_0.9
+snd_seq_client_info_set_event_filter@@ALSA_0.9
+snd_seq_client_info_set_name@@ALSA_0.9
+snd_seq_client_info_sizeof@@ALSA_0.9
+snd_seq_client_pool_copy@@ALSA_0.9
+snd_seq_client_pool_free@@ALSA_0.9
+snd_seq_client_pool_get_client@@ALSA_0.9
+snd_seq_client_pool_get_input_free@@ALSA_0.9
+snd_seq_client_pool_get_input_pool@@ALSA_0.9
+snd_seq_client_pool_get_output_free@@ALSA_0.9
+snd_seq_client_pool_get_output_pool@@ALSA_0.9
+snd_seq_client_pool_get_output_room@@ALSA_0.9
+snd_seq_client_pool_malloc@@ALSA_0.9
+snd_seq_client_pool_set_input_pool@@ALSA_0.9
+snd_seq_client_pool_set_output_pool@@ALSA_0.9
+snd_seq_client_pool_set_output_room@@ALSA_0.9
+snd_seq_client_pool_sizeof@@ALSA_0.9
+snd_seq_close@@ALSA_0.9
+snd_seq_connect_from@@ALSA_0.9
+snd_seq_connect_to@@ALSA_0.9
+snd_seq_control_queue@@ALSA_0.9
+snd_seq_create_event@@ALSA_0.9
+snd_seq_create_port@@ALSA_0.9
+snd_seq_create_queue@@ALSA_0.9
+snd_seq_create_simple_port@@ALSA_0.9
+snd_seq_delete_port@@ALSA_0.9
+snd_seq_delete_simple_port@@ALSA_0.9
+snd_seq_disconnect_from@@ALSA_0.9
+snd_seq_disconnect_to@@ALSA_0.9
+snd_seq_drain_output@@ALSA_0.9
+snd_seq_drop_input@@ALSA_0.9
+snd_seq_drop_input_buffer@@ALSA_0.9
+snd_seq_drop_output@@ALSA_0.9
+snd_seq_drop_output_buffer@@ALSA_0.9
+snd_seq_event_input@@ALSA_0.9
+snd_seq_event_input_pending@@ALSA_0.9
+snd_seq_event_length@@ALSA_0.9
+snd_seq_event_output@@ALSA_0.9
+snd_seq_event_output_buffer@@ALSA_0.9
+snd_seq_event_output_direct@@ALSA_0.9
+snd_seq_event_output_pending@@ALSA_0.9
+snd_seq_extract_output@@ALSA_0.9
+snd_seq_free_event@@ALSA_0.9
+snd_seq_free_queue@@ALSA_0.9
+snd_seq_get_any_client_info@@ALSA_0.9
+snd_seq_get_any_port_info@@ALSA_0.9
+snd_seq_get_bit@@ALSA_0.9
+snd_seq_get_client_info@@ALSA_0.9
+snd_seq_get_client_pool@@ALSA_0.9
+snd_seq_get_input_buffer_size@@ALSA_0.9
+snd_seq_get_output_buffer_size@@ALSA_0.9
+snd_seq_get_port_info@@ALSA_0.9
+snd_seq_get_port_subscription@@ALSA_0.9
+snd_seq_get_queue_info@@ALSA_0.9
+snd_seq_get_queue_status@@ALSA_0.9
+snd_seq_get_queue_tempo@@ALSA_0.9
+snd_seq_get_queue_timer@@ALSA_0.9
+snd_seq_get_queue_usage@@ALSA_0.9
+_snd_seq_hw_open@@ALSA_0.9
+snd_seq_hw_open@@ALSA_0.9
+snd_seq_name@@ALSA_0.9
+snd_seq_nonblock@@ALSA_0.9
+snd_seq_open@@ALSA_0.9
+snd_seq_open_lconf@@ALSA_0.9
+snd_seq_parse_address@@ALSA_0.9
+snd_seq_poll_descriptors@@ALSA_0.9
+snd_seq_poll_descriptors_count@@ALSA_0.9
+snd_seq_poll_descriptors_revents@@ALSA_0.9
+snd_seq_port_info_copy@@ALSA_0.9
+snd_seq_port_info_free@@ALSA_0.9
+snd_seq_port_info_get_addr@@ALSA_0.9
+snd_seq_port_info_get_capability@@ALSA_0.9
+snd_seq_port_info_get_client@@ALSA_0.9
+snd_seq_port_info_get_midi_channels@@ALSA_0.9
+snd_seq_port_info_get_midi_voices@@ALSA_0.9
+snd_seq_port_info_get_name@@ALSA_0.9
+snd_seq_port_info_get_port@@ALSA_0.9
+snd_seq_port_info_get_port_specified@@ALSA_0.9
+snd_seq_port_info_get_read_use@@ALSA_0.9
+snd_seq_port_info_get_synth_voices@@ALSA_0.9
+snd_seq_port_info_get_timestamping@@ALSA_0.9
+snd_seq_port_info_get_timestamp_queue@@ALSA_0.9
+snd_seq_port_info_get_timestamp_real@@ALSA_0.9
+snd_seq_port_info_get_type@@ALSA_0.9
+snd_seq_port_info_get_write_use@@ALSA_0.9
+snd_seq_port_info_malloc@@ALSA_0.9
+snd_seq_port_info_set_addr@@ALSA_0.9
+snd_seq_port_info_set_capability@@ALSA_0.9
+snd_seq_port_info_set_client@@ALSA_0.9
+snd_seq_port_info_set_midi_channels@@ALSA_0.9
+snd_seq_port_info_set_midi_voices@@ALSA_0.9
+snd_seq_port_info_set_name@@ALSA_0.9
+snd_seq_port_info_set_port@@ALSA_0.9
+snd_seq_port_info_set_port_specified@@ALSA_0.9
+snd_seq_port_info_set_synth_voices@@ALSA_0.9
+snd_seq_port_info_set_timestamping@@ALSA_0.9
+snd_seq_port_info_set_timestamp_queue@@ALSA_0.9
+snd_seq_port_info_set_timestamp_real@@ALSA_0.9
+snd_seq_port_info_set_type@@ALSA_0.9
+snd_seq_port_info_sizeof@@ALSA_0.9
+snd_seq_port_subscribe_copy@@ALSA_0.9
+snd_seq_port_subscribe_free@@ALSA_0.9
+snd_seq_port_subscribe_get_dest@@ALSA_0.9
+snd_seq_port_subscribe_get_exclusive@@ALSA_0.9
+snd_seq_port_subscribe_get_queue@@ALSA_0.9
+snd_seq_port_subscribe_get_sender@@ALSA_0.9
+snd_seq_port_subscribe_get_time_real@@ALSA_0.9
+snd_seq_port_subscribe_get_time_update@@ALSA_0.9
+snd_seq_port_subscribe_malloc@@ALSA_0.9
+snd_seq_port_subscribe_set_dest@@ALSA_0.9
+snd_seq_port_subscribe_set_exclusive@@ALSA_0.9
+snd_seq_port_subscribe_set_queue@@ALSA_0.9
+snd_seq_port_subscribe_set_sender@@ALSA_0.9
+snd_seq_port_subscribe_set_time_real@@ALSA_0.9
+snd_seq_port_subscribe_set_time_update@@ALSA_0.9
+snd_seq_port_subscribe_sizeof@@ALSA_0.9
+snd_seq_query_named_queue@@ALSA_0.9
+snd_seq_query_next_client@@ALSA_0.9
+snd_seq_query_next_port@@ALSA_0.9
+snd_seq_query_port_subscribers@@ALSA_0.9
+snd_seq_query_subscribe_copy@@ALSA_0.9
+snd_seq_query_subscribe_free@@ALSA_0.9
+snd_seq_query_subscribe_get_addr@@ALSA_0.9
+snd_seq_query_subscribe_get_client@@ALSA_0.9
+snd_seq_query_subscribe_get_exclusive@@ALSA_0.9
+snd_seq_query_subscribe_get_index@@ALSA_0.9
+snd_seq_query_subscribe_get_num_subs@@ALSA_0.9
+snd_seq_query_subscribe_get_port@@ALSA_0.9
+snd_seq_query_subscribe_get_queue@@ALSA_0.9
+snd_seq_query_subscribe_get_root@@ALSA_0.9
+snd_seq_query_subscribe_get_time_real@@ALSA_0.9
+snd_seq_query_subscribe_get_time_update@@ALSA_0.9
+snd_seq_query_subscribe_get_type@@ALSA_0.9
+snd_seq_query_subscribe_malloc@@ALSA_0.9
+snd_seq_query_subscribe_set_client@@ALSA_0.9
+snd_seq_query_subscribe_set_index@@ALSA_0.9
+snd_seq_query_subscribe_set_port@@ALSA_0.9
+snd_seq_query_subscribe_set_root@@ALSA_0.9
+snd_seq_query_subscribe_set_type@@ALSA_0.9
+snd_seq_query_subscribe_sizeof@@ALSA_0.9
+snd_seq_queue_info_copy@@ALSA_0.9
+snd_seq_queue_info_free@@ALSA_0.9
+snd_seq_queue_info_get_flags@@ALSA_0.9
+snd_seq_queue_info_get_locked@@ALSA_0.9
+snd_seq_queue_info_get_name@@ALSA_0.9
+snd_seq_queue_info_get_owner@@ALSA_0.9
+snd_seq_queue_info_get_queue@@ALSA_0.9
+snd_seq_queue_info_malloc@@ALSA_0.9
+snd_seq_queue_info_set_flags@@ALSA_0.9
+snd_seq_queue_info_set_locked@@ALSA_0.9
+snd_seq_queue_info_set_name@@ALSA_0.9
+snd_seq_queue_info_set_owner@@ALSA_0.9
+snd_seq_queue_info_sizeof@@ALSA_0.9
+snd_seq_queue_status_copy@@ALSA_0.9
+snd_seq_queue_status_free@@ALSA_0.9
+snd_seq_queue_status_get_events@@ALSA_0.9
+snd_seq_queue_status_get_queue@@ALSA_0.9
+snd_seq_queue_status_get_real_time@@ALSA_0.9
+snd_seq_queue_status_get_status@@ALSA_0.9
+snd_seq_queue_status_get_tick_time@@ALSA_0.9
+snd_seq_queue_status_malloc@@ALSA_0.9
+snd_seq_queue_status_sizeof@@ALSA_0.9
+snd_seq_queue_tempo_copy@@ALSA_0.9
+snd_seq_queue_tempo_free@@ALSA_0.9
+snd_seq_queue_tempo_get_ppq@@ALSA_0.9
+snd_seq_queue_tempo_get_queue@@ALSA_0.9
+snd_seq_queue_tempo_get_skew@@ALSA_0.9
+snd_seq_queue_tempo_get_skew_base@@ALSA_0.9
+snd_seq_queue_tempo_get_tempo@@ALSA_0.9
+snd_seq_queue_tempo_malloc@@ALSA_0.9
+snd_seq_queue_tempo_set_ppq@@ALSA_0.9
+snd_seq_queue_tempo_set_skew@@ALSA_0.9
+snd_seq_queue_tempo_set_skew_base@@ALSA_0.9
+snd_seq_queue_tempo_set_tempo@@ALSA_0.9
+snd_seq_queue_tempo_sizeof@@ALSA_0.9
+snd_seq_queue_timer_copy@@ALSA_0.9
+snd_seq_queue_timer_free@@ALSA_0.9
+snd_seq_queue_timer_get_id@@ALSA_0.9
+snd_seq_queue_timer_get_queue@@ALSA_0.9
+snd_seq_queue_timer_get_resolution@@ALSA_0.9
+snd_seq_queue_timer_get_type@@ALSA_0.9
+snd_seq_queue_timer_malloc@@ALSA_0.9
+snd_seq_queue_timer_set_id@@ALSA_0.9
+snd_seq_queue_timer_set_resolution@@ALSA_0.9
+snd_seq_queue_timer_set_type@@ALSA_0.9
+snd_seq_queue_timer_sizeof@@ALSA_0.9
+snd_seq_remove_events@@ALSA_0.9
+snd_seq_remove_events_copy@@ALSA_0.9
+snd_seq_remove_events_free@@ALSA_0.9
+snd_seq_remove_events_get_channel@@ALSA_0.9
+snd_seq_remove_events_get_condition@@ALSA_0.9
+snd_seq_remove_events_get_dest@@ALSA_0.9
+snd_seq_remove_events_get_event_type@@ALSA_0.9
+snd_seq_remove_events_get_queue@@ALSA_0.9
+snd_seq_remove_events_get_tag@@ALSA_0.9
+snd_seq_remove_events_get_time@@ALSA_0.9
+snd_seq_remove_events_malloc@@ALSA_0.9
+snd_seq_remove_events_set_channel@@ALSA_0.9
+snd_seq_remove_events_set_condition@@ALSA_0.9
+snd_seq_remove_events_set_dest@@ALSA_0.9
+snd_seq_remove_events_set_event_type@@ALSA_0.9
+snd_seq_remove_events_set_queue@@ALSA_0.9
+snd_seq_remove_events_set_tag@@ALSA_0.9
+snd_seq_remove_events_set_time@@ALSA_0.9
+snd_seq_remove_events_sizeof@@ALSA_0.9
+snd_seq_reset_pool_input@@ALSA_0.9
+snd_seq_reset_pool_output@@ALSA_0.9
+snd_seq_set_bit@@ALSA_0.9
+snd_seq_set_client_event_filter@@ALSA_0.9
+snd_seq_set_client_info@@ALSA_0.9
+snd_seq_set_client_name@@ALSA_0.9
+snd_seq_set_client_pool@@ALSA_0.9
+snd_seq_set_client_pool_input@@ALSA_0.9
+snd_seq_set_client_pool_output@@ALSA_0.9
+snd_seq_set_client_pool_output_room@@ALSA_0.9
+snd_seq_set_input_buffer_size@@ALSA_0.9
+snd_seq_set_output_buffer_size@@ALSA_0.9
+snd_seq_set_port_info@@ALSA_0.9
+snd_seq_set_queue_info@@ALSA_0.9
+snd_seq_set_queue_tempo@@ALSA_0.9
+snd_seq_set_queue_timer@@ALSA_0.9
+snd_seq_set_queue_usage@@ALSA_0.9
+snd_seq_subscribe_port@@ALSA_0.9
+snd_seq_sync_output_queue@@ALSA_0.9
+snd_seq_system_info@@ALSA_0.9
+snd_seq_system_info_copy@@ALSA_0.9
+snd_seq_system_info_free@@ALSA_0.9
+snd_seq_system_info_get_channels@@ALSA_0.9
+snd_seq_system_info_get_clients@@ALSA_0.9
+snd_seq_system_info_get_cur_clients@@ALSA_0.9
+snd_seq_system_info_get_cur_queues@@ALSA_0.9
+snd_seq_system_info_get_ports@@ALSA_0.9
+snd_seq_system_info_get_queues@@ALSA_0.9
+snd_seq_system_info_malloc@@ALSA_0.9
+snd_seq_system_info_sizeof@@ALSA_0.9
+snd_seq_type@@ALSA_0.9
+snd_seq_unset_bit@@ALSA_0.9
+snd_seq_unsubscribe_port@@ALSA_0.9
+snd_shm_area_create@@ALSA_0.9
+snd_shm_area_destroy@@ALSA_0.9
+snd_shm_area_destructor@@ALSA_0.9
+snd_shm_area_share@@ALSA_0.9
+snd_spcm_init@@ALSA_0.9
+snd_spcm_init_duplex@@ALSA_0.9
+snd_spcm_init_get_params@@ALSA_0.9
+snd_strerror@@ALSA_0.9
+snd_strlcpy@@ALSA_0.9
+snd_timer_async@@ALSA_0.9
+snd_timer_close@@ALSA_0.9
+snd_timer_continue@@ALSA_0.9
+snd_timer_ginfo_copy@@ALSA_0.9
+snd_timer_ginfo_free@@ALSA_0.9
+snd_timer_ginfo_get_card@@ALSA_0.9
+snd_timer_ginfo_get_clients@@ALSA_0.9
+snd_timer_ginfo_get_flags@@ALSA_0.9
+snd_timer_ginfo_get_id@@ALSA_0.9
+snd_timer_ginfo_get_name@@ALSA_0.9
+snd_timer_ginfo_get_resolution@@ALSA_0.9
+snd_timer_ginfo_get_resolution_max@@ALSA_0.9
+snd_timer_ginfo_get_resolution_min@@ALSA_0.9
+snd_timer_ginfo_get_tid@@ALSA_0.9
+snd_timer_ginfo_malloc@@ALSA_0.9
+snd_timer_ginfo_set_tid@@ALSA_0.9
+snd_timer_ginfo_sizeof@@ALSA_0.9
+_snd_timer_hw_open@@ALSA_0.9
+snd_timer_hw_open@@ALSA_0.9
+snd_timer_id_copy@@ALSA_0.9
+snd_timer_id_free@@ALSA_0.9
+snd_timer_id_get_card@@ALSA_0.9
+snd_timer_id_get_class@@ALSA_0.9
+snd_timer_id_get_device@@ALSA_0.9
+snd_timer_id_get_sclass@@ALSA_0.9
+snd_timer_id_get_subdevice@@ALSA_0.9
+snd_timer_id_malloc@@ALSA_0.9
+snd_timer_id_set_card@@ALSA_0.9
+snd_timer_id_set_class@@ALSA_0.9
+snd_timer_id_set_device@@ALSA_0.9
+snd_timer_id_set_sclass@@ALSA_0.9
+snd_timer_id_set_subdevice@@ALSA_0.9
+snd_timer_id_sizeof@@ALSA_0.9
+snd_timer_info@@ALSA_0.9
+snd_timer_info_copy@@ALSA_0.9
+snd_timer_info_free@@ALSA_0.9
+snd_timer_info_get_card@@ALSA_0.9
+snd_timer_info_get_id@@ALSA_0.9
+snd_timer_info_get_name@@ALSA_0.9
+snd_timer_info_get_resolution@@ALSA_0.9
+snd_timer_info_get_ticks@@ALSA_0.9
+snd_timer_info_is_slave@@ALSA_0.9
+snd_timer_info_malloc@@ALSA_0.9
+snd_timer_info_sizeof@@ALSA_0.9
+snd_timer_name@@ALSA_0.9
+snd_timer_nonblock@@ALSA_0.9
+snd_timer_open@@ALSA_0.9
+snd_timer_open_lconf@@ALSA_0.9
+snd_timer_params@@ALSA_0.9
+snd_timer_params_copy@@ALSA_0.9
+snd_timer_params_free@@ALSA_0.9
+snd_timer_params_get_auto_start@@ALSA_0.9
+snd_timer_params_get_early_event@@ALSA_0.9
+snd_timer_params_get_exclusive@@ALSA_0.9.0
+snd_timer_params_get_filter@@ALSA_0.9.0
+snd_timer_params_get_queue_size@@ALSA_0.9
+snd_timer_params_get_ticks@@ALSA_0.9
+snd_timer_params_malloc@@ALSA_0.9
+snd_timer_params_set_auto_start@@ALSA_0.9
+snd_timer_params_set_early_event@@ALSA_0.9
+snd_timer_params_set_exclusive@@ALSA_0.9.0
+snd_timer_params_set_filter@@ALSA_0.9.0
+snd_timer_params_set_queue_size@@ALSA_0.9
+snd_timer_params_set_ticks@@ALSA_0.9
+snd_timer_params_sizeof@@ALSA_0.9
+snd_timer_poll_descriptors@@ALSA_0.9
+snd_timer_poll_descriptors_count@@ALSA_0.9
+snd_timer_poll_descriptors_revents@@ALSA_0.9
+snd_timer_query_close@@ALSA_0.9
+_snd_timer_query_hw_open@@ALSA_0.9
+snd_timer_query_hw_open@@ALSA_0.9
+snd_timer_query_info@@ALSA_0.9.0
+snd_timer_query_next_device@@ALSA_0.9
+snd_timer_query_open@@ALSA_0.9
+snd_timer_query_open_lconf@@ALSA_0.9
+snd_timer_query_params@@ALSA_0.9.0
+snd_timer_query_status@@ALSA_0.9.0
+snd_timer_read@@ALSA_0.9
+snd_timer_start@@ALSA_0.9
+snd_timer_status@@ALSA_0.9
+snd_timer_status_copy@@ALSA_0.9
+snd_timer_status_free@@ALSA_0.9
+snd_timer_status_get_lost@@ALSA_0.9
+snd_timer_status_get_overrun@@ALSA_0.9
+snd_timer_status_get_queue@@ALSA_0.9
+snd_timer_status_get_resolution@@ALSA_0.9
+snd_timer_status_get_timestamp@@ALSA_0.9
+snd_timer_status_malloc@@ALSA_0.9
+snd_timer_status_sizeof@@ALSA_0.9
+snd_timer_stop@@ALSA_0.9
+snd_timer_type@@ALSA_0.9
+snd_tlv_convert_from_dB@@ALSA_0.9
+snd_tlv_convert_to_dB@@ALSA_0.9
+snd_tlv_get_dB_range@@ALSA_0.9
+snd_tlv_parse_dB_info@@ALSA_0.9
+snd_use_case_free_list@@ALSA_0.9
+snd_use_case_get@@ALSA_0.9
+snd_use_case_geti@@ALSA_0.9
+snd_use_case_get_list@@ALSA_0.9
+snd_use_case_identifier@@ALSA_0.9
+snd_use_case_mgr_close@@ALSA_0.9
+snd_use_case_mgr_open@@ALSA_0.9
+snd_use_case_mgr_reload@@ALSA_0.9
+snd_use_case_mgr_reset@@ALSA_0.9
+snd_use_case_parse_ctl_elem_id@@ALSA_0.9
+snd_use_case_parse_selem_id@@ALSA_0.9
+snd_use_case_set@@ALSA_0.9
+snd_user_file@@ALSA_0.9
diff --git a/lsp-alsa/Makefile b/lsp-alsa/Makefile
new file mode 100644 (file)
index 0000000..48e4a17
--- /dev/null
@@ -0,0 +1,12 @@
+
+ARCHIVES = lsp-libasound.a lsp-pcm-dispatch.a
+
+include ../archive.mk
+
+lsp-libasound.a: import-api.lsp
+lsp-libasound.a: libasound.lsp libasound-config.lsp libasound-pcm.lsp
+       ar -rc $@ $^
+
+lsp-pcm-dispatch.a: pcm-dispatch.lsp ex1.conf
+       ar -rc $@ $^
+
diff --git a/lsp-alsa/ex1.conf b/lsp-alsa/ex1.conf
new file mode 100644 (file)
index 0000000..8ecdef1
--- /dev/null
@@ -0,0 +1 @@
+(("PCM-LIST" "bluealsa" "plughw"))
diff --git a/lsp-alsa/import-api.lsp b/lsp-alsa/import-api.lsp
new file mode 100644 (file)
index 0000000..d20aaa5
--- /dev/null
@@ -0,0 +1,107 @@
+;; This module provides "import extension" functions in support of
+;; importing libasound functions.
+
+;; Function: (get-string-safe ADDR)
+; Invoke get-string unless ADDR is 0 in which case nil is returned.
+(define (get-string-safe ADDR)
+  (when (!= ADDR) (get-string ADDR)))
+
+;; Macro: (ptr-api FN ARGS [FORMAT [FILTER]])
+; This macro is used to define an API function for an import function
+; <fn> that a) returns an int error code with 0 on success and
+; negative on error, and b) has a * argument for an on-success return
+; value.
+;
+; The given argument list <args> includes a place marker **
+; where the low-level import function has a ** argument for returning
+; a pointer value. The resulting API function wraps the import
+; function so that the ** argument is omitted but that the pointer
+; value is returned.
+;
+(define-macro (wrap** FN ARGS (FORMAT "Lu") (FILTER nil))
+  (let ((UNPACK (list (list 'unpack FORMAT 'DATA) 0)))
+    (when FILTER (setf UNPACK (list FILTER UNPACK)))
+    (letex ((UNPACK UNPACK)
+            (CALL (cons (eval FN) (replace '** (copy ARGS) 'DATA)))
+            (REST (clean (curry = '**) ARGS))
+            (FORMAT FORMAT))
+      ;; redefine FN with wrapper
+      (constant FN (fn REST
+                     (let ((DATA (pack FORMAT 0)) (E 0))
+                       (if (>= (setf E CALL)) UNPACK E)))) )
+    ))
+
+; Wrap an import function that returns "int" error code and has a **
+; argument for an actual return data when error code is 0. The
+; import** term looks like an import, but the return type slot holds
+; list of format and filter, and the ** argument is marked as **.
+;
+(define (naming x n)
+  (if (string? x)
+      (list x (sym (format "__%d" n)))
+    
+      (= '** x) (list "void*" x) (list x (sym (format "__%d" n)))))
+
+; The import is wrapped into a lambda for all other arguments, that
+; then returns the ** data or the error code.
+(define-macro (import** _LIB FN RET)
+  (let ((FORMAT "Lu") (FILTER nil) (NAMED '()) (n 0))
+    (dolist (i (args))
+      (when (list? i)
+        (when (and i (string? (i 0))) (setf FORMAT (pop i)))
+        (when i (setf FILTER (i 0))))
+      (if (string? i) (push (list i (sym (string "__" n))) NAMED -1)
+        (push '("void*" **) NAMED -1))
+      (inc n))
+    (eval (flat (list 'import _LIB FN RET (map first NAMED))))
+    (eval (list 'wrap** (sym FN) (map last NAMED) (or FORMAT "Lu") FILTER))
+    ))
+
+;======================================================================
+;; Macro: (define-api FN args [format [filter]]
+; define-api is a helper macro to define an API function for a
+; low-level function FN that provides a return value via a ** argument
+; (i.e., a pointer to a pointer variable).
+;
+; The first macro argument, FN, is the symbol name of the low-level
+; function. The APi function gets the same name with "@" added to it.
+;
+; If the second macro argument is a string, then that will
+;
+; This is handled in newlisp by allocating a pointer
+; variable memory block through a (pack "Lu" 0) term as value for a
+; DATA variable, and then pass DATA as the ** argument for the
+; low-level function. Upon the low-level function's successful return,
+; the now assigned memory block assignment is captured through an
+; (unpack "Lu" DATA) term for return as API function value.
+;
+; The first macro argument 
+; Helper macro for functions the return pointers via ** arguments.
+;
+; Eg: (define-api foo x DATA y) will define API function foo@ that
+; calls (foo x DATA y) with DATA being a ** argument, and then returns
+; the value of DATA or the error code of foo.
+;
+; With (define-api foo "lf" x DATA y), i.e. a format string as first
+; argument, then that will be used as unpacking format.
+;
+; With (define-api foo (get-string) x DATA y), i.e. a list with a
+; filter function name as first argument, then that will be used as
+; filter for the unpacked data.
+;
+; Both format and filter may be given, in that order.
+(define-macro (define-api FN)
+  (let ((ARGS (args)) (RES '((unpack "Lu" DATA) 0)))
+    (when (string? (first ARGS))
+      (setf RES (letex ((FMT (pop ARGS))) '((unpack FMT DATA) 0))))
+    (when (list? (first ARGS)) (setf RES (list ((pop ARGS) 0) RES)))
+    (letex ((REAL (cons FN ARGS))
+            (API (cons (sym (string (term FN) "@"))
+                       (clean (fn (x) (= (term x) "DATA")) ARGS)))
+            (RES RES))
+      (define API
+        (let ((DATA (pack "Lu" 0)) (R nil) (E 0))
+          (when (>= (setf E REAL)) (setf R RES))
+          (or R E))))))
+
+"import-api.lsp"
diff --git a/lsp-alsa/libasound-config.lsp b/lsp-alsa/libasound-config.lsp
new file mode 100644 (file)
index 0000000..5183f05
--- /dev/null
@@ -0,0 +1,277 @@
+;; == Configuration Interface
+; https://alsa-project.org/alsa-doc/alsa-lib/group___config.html
+
+;; Type: snd_config_t
+; This is an opaque internal struct for configuration nodes. The ALSA
+; library uses pointers to this structure as handles to configuration
+; nodes. Applications don't access contents directly.
+
+;; Type: snd_config_update_t
+; This is an opaque internal struct for configuration private update
+; objects. The ALSA library uses this structure to save private update
+; information.
+
+;; Type: snd_config_iterator_t
+; This is a pointer to the opaque struct type used for configuration
+; compound iterators. The ALSA library uses these as handles for
+; configuration compound iterators. Applications don't access contents
+; directly.
+
+;; Enum: snd_config_type_t
+(constant
+ 'SND_CONFIG_TYPE_INTEGER 0
+ 'SND_CONFIG_TYPE_INTEGER64 1
+ 'SND_CONFIG_TYPE_REAL 2
+ 'SND_CONFIG_TYPE_STRING 3
+ 'SND_CONFIG_TYPE_POINTER 4
+ 'SND_CONFIG_TYPE_COMPOUND 1024
+ )
+
+;; Type snd_devname_t
+(struct 'snd_devname_t
+        "char*" ; char * name
+        "char*" ; char * comment
+        "void*" ; snd_devname_t * next
+ )
+
+;; Variable: snd_config_t *snd_config
+; Holds the ALSA configuration tree.
+(import LIB "snd_config")
+(define (snd_config@)
+  ((unpack "Lu" (address snd_config)) 0))
+
+;; Function: int snd_config_update()
+; Updates variable snd_config by rereading the global configuration
+; files (if needed).
+(import LIB "snd_config_update" "int" "void")
+(when (< (setf E (snd_config_update)))
+  (die 1 "** Cannot load the ALSA configuration tree: " E)
+  )
+
+;; Function: int snd_config_expand
+;; [in] snd_config_t *node = Handle to the expansion node
+;; [in] snd_config_t *root = Handle to the configuration root node
+;; [in] const char *args = Arguments string, can be NULL (last must be null)
+;; [in] snd_config_t *private_data = Handle to private data node for functions
+;; [out] snd_config_t **result
+; Expands a configuration node, applying arguments and functions. If
+; config has arguments (defined by a child with id @args), this
+; function replaces any string node beginning with $ with the
+; respective argument value, or the default argument value, or
+; nothing. Furthermore, any functions are evaluated (see
+; snd_config_evaluate). The resulting copy of config is returned in
+; result.
+;
+; Returns a non-negative value if successful, otherwise a negative
+; error code.
+;
+; The import is wrapped to return the result pointer or (negative)
+; error code.
+(import** LIB "snd_config_expand"
+          "int" ; int snd_config_expand
+         "void*" ; snd_config_t *config
+          "void*" ; snd_config_t *root
+          "void*" ; const char *args
+          "void*" ; snd_config_t *private_data
+          ()      ; snd_config_t **result
+          )
+
+;; Function: int snd_config_evaluate
+;; [in,out] snd_config_t *node = node in root to evaluate
+;; [in] snd_config_t *root = configuration root
+;; [in] snd_config_t *private_data
+;; [*] snd_config_t **result = must be null!
+; Evaluates a configuration node at runtime. This function evaluates
+; any functions (@func) in config and replaces those nodes with the
+; respective function results. Returns a non-negative value if
+; successful, otherwise a negative error code.
+(import LIB "snd_config_evaluate"
+        "int" ; int snd_config_evaluate
+        "void*" ; snd_config_t *config
+        "void*" ; snd_config_t *root
+        "void*" ;snd_config_t *private_data
+        "void*" ;snd_config_t **result 
+        )
+
+
+;; Term: (snd_config_get_id NODE)
+; Returns the id string for a configuration node.
+;
+;; Function: int snd_config_get_id(char** id)
+;; [in] const snd_config_t *config - Handle to the configuration node.
+;; [out] config, const char **value - node id
+; Returns 0 if successful, otherwise a negative error code. The
+; returned string is owned by the configuration node; the application
+; must not modify or delete it, and the string becomes invalid when
+; the node's id changes or when the node is freed. If the node does
+; not have an id, *id is set to NULL.
+;
+; The import is wrapped to return the id string or (negative) error
+; code.
+(import** LIB "snd_config_get_id"
+          "int" ;; int snd_config_get_id
+          "void*"           ; [in] const snd_config_t *config,
+          (get-string-safe) ; [out] const char **id
+          )
+
+;; Function: int snd_config_get_integer(snd_config_t *node,int *value)
+; Returns the value of an integer ("lu") configuration node.
+;
+; @param node - the configuration node concerned.
+;
+; @param value - pointer for the return value.
+; 
+; The import is wrapped to return the integer as such, or (negative)
+; error code.
+(import** LIB "snd_config_get_integer"
+          "int" ; int snd_config_get_integer
+          "void*" ; const snd_config_t *config,
+          () ; long *value
+          )
+
+;; Function: int snd_config_get_integer64
+; [in] snd_config_t *config
+; [out] int64_t *value
+;
+; Returns the value of a 64-bit-integer ("Lu") configuration node.
+; 
+; The import is wrapped to return the integer as such, or (negative)
+; error code.
+(import** LIB "snd_config_get_integer64"
+          "int" ; int snd_config_get_integer64
+          "void*" ; const snd_config_t *config,
+          () ; long long *value
+          )
+
+;; Function: int snd_config_get_real
+;; [in] const snd_config_t *node
+;; [out] double *value
+;
+; Returns the value of a real-number configuration node.
+;
+; The import is wrapped to return the double as such, or (negative)
+; error code.
+(import** LIB "snd_config_get_real"
+          "int" ; int snd_config_get_real
+          "void*" ; const snd_config_t *node,
+          ("lf") ; double *value
+          )
+
+; Returns the value of a real or integer configuration node as double. More...
+;; API function to return the double as such, or (negative) error code.
+(import** LIB "snd_config_get_ireal"
+          "int" ; int snd_config_get_real
+          "void*" ; const snd_config_t *config,
+          ("lf") ; double *value)
+          )
+
+; Returns the value of a string configuration node. The returned
+; string is owned by the configuration node; the application must not
+; modify or delete it, and the string becomes invalid when the node's
+; value changes or when the node is freed.
+;
+;; API function to return the string (copied), or (negative) error
+;; code.
+(import** LIB "snd_config_get_string"
+          "int" ; int snd_config_get_string (
+          "void*" ; const snd_config_t *config,
+          (get-string) ; const char **value)
+          )
+
+;; int         snd_config_get_ascii (const snd_config_t *config, char **value)
+; Returns the value of a configuration node as a string. This function
+; dynamically allocates the returned string. The application is
+; responsible for deleting it with free() when it is no longer used.
+; For a string node with NULL value, the returned string is NULL.
+
+
+; Returns the value of a pointer configuration node.
+;
+;; API function to return the pointer (value), or (negative) error.
+(import** LIB "snd_config_get_pointer"
+          "int" ; int snd_config_get_pointer (
+          "void*" ; const snd_config_t *config,
+          () ; const void **value)
+        )
+
+; Returns the type of a configuration node.
+(import LIB "snd_config_get_type"
+        "unsigned int" ; snd_config_type_t snd_config_get_type
+        "void*" ; const snd_config_t *config
+        )
+
+; Returns count of items in array, zero when the compound is not an
+; array, otherwise a negative error code.
+(import LIB "snd_config_is_array"
+        "int" ; int snd_config_is_array
+        "void*" ; const snd_config_t *config
+        )
+
+;; ------- iterator functions --------
+
+; Returns an iterator pointing to a node's first child. More...
+(import LIB "snd_config_iterator_first"
+        "void*" ;; snd_config_iterator_t snd_config_iterator_first
+        "void*" ; const snd_config_t *node
+        )
+
+; Returns an iterator pointing to the next sibling. More...
+(import        LIB "snd_config_iterator_next"
+        "void*" ; snd_config_iterator_t snd_config_iterator_next
+        "void*" ; const snd_config_iterator_t iterator
+        )
+
+; Returns an iterator that ends a node's children list.
+;; Parameters
+; [in] config  Handle to a configuration node.
+;;
+; Returns n iterator that indicates the end of config's children list.
+; config must be a compound node. The return value can be understood
+; as pointing past the last child of config.
+(import LIB "snd_config_iterator_end"
+        "void*" ; snd_config_iterator_t snd_config_iterator_end
+       "void*" ; const snd_config_t *config
+        )
+
+; Returns the configuration node handle pointed to by an iterator.
+(import LIB "snd_config_iterator_entry"
+        "void*" ; snd_config_t * snd_config_iterator_entry
+        "void*" ; const snd_config_iterator_t iterator
+        )
+
+;;======================================================================
+; Extended API
+
+;; Term: (iterate NODE)
+; Make a list of a compound node's children by iterating over them.
+(define (iterate NODE)
+  (let ((CUR (snd_config_iterator_first NODE))
+        (END (snd_config_iterator_end NODE))
+        (RES '()))
+    (while (!= CUR END)
+      (push (traverse (snd_config_iterator_entry CUR)) RES -1)
+      (setf CUR (snd_config_iterator_next CUR)))
+    (if (snd_config_is_array NODE)
+        (map list (sequence 0 (- (length RES) 1)) RES)
+      RES)))
+
+;; Term: (traverse NODE)
+; Return the pair (ID value) for a node. The value of a compound node
+; is the list of its child nodes.
+(define (traverse NODE)
+  (let ((TYPE (snd_config_get_type NODE))
+        (ID (snd_config_get_id NODE)))
+    (list ID
+          (case TYPE
+            (0 (snd_config_get_integer NODE))
+            (1 (snd_config_get_integer64 NODE))
+            (2 (snd_config_get_real NODE))
+            (3 (snd_config_get_string NODE))
+            (4 (snd_config_get_integer NODE))
+            (5 (sym (string ">" (snd_config_get_pointer NODE))))
+            (1024 (iterate NODE))
+            (true (list 'unknown NODE TYPE))))))
+
+
+
+"libasound-config.lsp"
diff --git a/lsp-alsa/libasound-control.lsp b/lsp-alsa/libasound-control.lsp
new file mode 100644 (file)
index 0000000..eacbe55
--- /dev/null
@@ -0,0 +1,344 @@
+;; == Control Interface
+; https://alsa-project.org/alsa-doc/alsa-lib/group___control.html
+
+;;***************************************************************************
+; Highlevel control interface
+
+;; Function: int snd_hctl_compare_fast
+;; [in] const snd_hctl_elem_t *c1
+;; [in] const snd_hctl_elem_t *c2)
+; A "don't care" fast compare functions that may be used with
+; snd_hctl_set_compare.
+;
+; Returns -1 if c1<c2, 0 if c1==c2, 1 if c1>c2
+
+;; Function: int snd_hctl_open
+;; [out] snd_hctl_t **hctl = Returned HCTL handle
+;; [in] const char *name = ASCII identifier of the underlying CTL handle
+;; [in] int mode = Open mode (see SND_CTL_NONBLOCK, SND_CTL_ASYNC)
+; Opens an HCTL. 
+
+;; Function: int snd_hctl_open_ctl
+;; [out] snd_hctl_t **hctlp = Returned HCTL handle
+;; [in] snd_ctl_t *ctl = underlying CTL handle
+; Opens an HCTL. 
+;; Function: int snd_hctl_close
+;; [in] snd_hctl_t *hctl = HCTL handle
+; Closes the specified HCTL handle and frees all associated resources.
+;; Function: int snd_hctl_nonblock
+;; [in] snd_hctl_t *hctl
+;; [in] int nonblock
+; set nonblock mode. 0 = block, 1 = nonblock.
+;; Function: int snd_hctl_poll_descriptors_count
+;; [in] snd_hctl_t *hctl
+; Get count of poll descriptors for HCTL handle.
+
+;; Function: int snd_hctl_poll_descriptors
+;; [in] snd_hctl_t *hctl = HCTL handle
+;; [out] struct pollfd *pfds = array of poll descriptors
+;; [in] unsigned int space = space in the poll descriptor array
+; Get poll descriptors; fills the array and retuns count of filled
+; descriptors.
+;; Function: int snd_hctl_poll_descriptors_revents
+;; [in] snd_hctl_t *ctl = HCTL handle
+;; [in] struct pollfd *pfds = array of poll descriptors
+;; [in] unsigned int nfds = count of poll descriptors
+;; [out] unsigned short *revents = returned events
+; Get returned events from poll descriptors. Returns 0 on success,
+; otherwise a negative error code
+;; Function: unsigned int snd_hctl_get_count
+; [in] snd_hctl_t *hctl = HCTL handle
+; Get number of loaded elements for an HCTL.
+;; Function: int snd_hctl_set_compare
+;; [in] snd_hctl_t *hctl = HCTL handle
+;; [in] snd_hctl_compare_t hsort = Element compare function
+; Change HCTL compare function and reorder elements. Returns 0 on
+; success otherwise a negative error code
+;; Function: snd _hctl_elem_t * snd_hctl_first_elem
+;; [in] snd_hctl_t *hctl = HCTL handle
+; get first element for an HCTL.
+
+;; Function snd _hctl_elem_t * snd_hctl_last_elem
+;; [in] snd_hctl_t *hctl = HCTL handle
+; get last element for an HCTL.
+
+;; Function: snd _hctl_elem_t * snd_hctl_find_elem
+;; [in] snd_hctl_t *hctl = HCTL handle
+;; [in] const snd_ctl_elem_id_t *id = Element identifier
+; Find an HCTL element by id. Returns pointer to found HCTL element or
+; NULL if not found.
+
+;; Function: void snd_hctl_set_callback
+;; [in] snd_hctl_t *hctl
+;; [in] snd_hctl_callback_t callback
+; Set callback function for an HCTL.
+
+;; Function: void snd_hctl_set_callback_private
+;; [in] snd_hctl_t *hctl
+;; [in] void *data
+; Set callback private value for an HCTL.
+;; Function: void * snd_hctl_get_callback_private
+;; [in] snd_hctl_t *hctl
+; Get callback private value for an HCTL.
+
+;; Function: int snd_hctl_load
+;; [int] snd_hctl_t *hctl
+; Load an HCTL with all elements and sort them.
+
+;; Function: int snd_hctl_free
+;; [in] snd_hctl_t *hctl
+; Free HCTL loaded elements
+
+;; Function: int snd_hctl_handle_events
+;; [in] snd_hctl_t *hctl
+; Handle pending HCTL events invoking callbacks.
+
+;; Function: const char * snd_hctl_name
+;; [in] snd_hctl_t *hctl
+; Get identifier of HCTL handle. Returns the ASCII identifier of given
+; HCTL handle. It's the same identifier specified in snd_hctl_open().
+
+;; Function: int snd_hctl_wait
+;; [in] snd_hctl_t *hctl = HCTL handle
+;; [in] int timeout = maximum time in milliseconds to wait
+; Wait for a HCTL to become ready (i.e. at least one event pending).
+; Returns a positive value on success otherwise a negative error code.
+; 0 timeout occurred; 1 an event is pending.
+
+;; Function: snd _ctl_t * snd_hctl_ctl
+;; [in] snd_hctl_t *hctl
+; Get a ctl handle associated to the given hctl handle.
+
+;; Function: snd _hctl_elem_t * snd_hctl_elem_next
+;; [in] snd_hctl_elem_t *elem
+; get next HCTL element. Returns pointer to next element.
+
+;; Function: snd _hctl_elem_t * snd_hctl_elem_prev
+;; [in] snd_hctl_elem_t *elem
+; Get previous HCTL element. Returns pointer to next element.
+;; Function: int snd_hctl_elem_info
+;; [in] snd_hctl_elem_t *elem
+;; [out] snd_ctl_elem_info_t *info
+; Get information for an HCTL element.
+;; Function: int snd_hctl_elem_read
+;; [in] snd_hctl_elem_t *elem
+;; [out] snd_ctl_elem_value_t *value
+; Get value for an HCTL element.
+
+;; Function: int snd_hctl_elem_write
+;; [in] snd_hctl_elem_t *elem
+;; [in] snd_ctl_elem_value_t *value
+; Set value for an HCTL element.
+
+;; Function: int snd_hctl_elem_tlv_read
+;; [in] snd_hctl_elem_t *elem
+;; [out] unsigned int *tlv = TLV array for value
+;; [in] unsigned int tlv_size = byte size of TLV array
+; Get TLV value for an HCTL element. Returns 0 otherwise a negative
+; error code on failure.
+
+;; Function: int snd_hctl_elem_tlv_write
+;; [in] snd_hctl_elem_t *elem
+;; [in] const unsigned int *tlv = TLV array for value
+; Set TLV value for an HCTL element. Returns 0 on success, >1 on
+; success when value was changed, and <0 a negative error code on
+; failure.
+
+;; Function: int snd_hctl_elem_tlv_command
+;; [in] snd_hctl_elem_t *elem
+;; [in] const unsigned int *tlv = TLV array for value
+; Set TLV value for an HCTL element. Returns 0 on success, >1 on
+; success when value was changed, and <0 a negative error code on
+; failure.
+;; Function: snd _hctl_t * snd_hctl_elem_get_hctl
+;; [in] snd_hctl_elem_t *elem
+; Get HCTL handle for an HCTL element.
+
+;; Function: void snd_hctl_elem_get_id
+;; [in] const snd_hctl_elem_t *obj
+;; [out] snd_ctl_elem_id_t *ptr = Pointer to returned CTL element identifier
+; Get CTL element identifier of a CTL element id/value.
+;; Functionunsigned int snd_hctl_elem_get_numid
+;; [in] const snd_hctl_elem_t *obj
+; Get element numeric identifier of a CTL element id/value.
+
+;; Function: snd _ctl_elem_iface_t snd_hctl_elem_get_interface
+;; [in] const snd_hctl_elem_t *obj
+; Get interface part of CTL element identifier of a CTL element
+; id/value.
+
+;; Function: unsigned int snd_hctl_elem_get_device
+;; [in] const snd_hctl_elem_t *obj
+; Get device part of CTL element identifier of a CTL element id/value.
+
+;; Function: unsigned int snd_hctl_elem_get_subdevice
+;; [in] const snd_hctl_elem_t *obj
+; Get subdevice part of CTL element identifier of a CTL element
+; id/value.
+
+;; Function: const char * snd_hctl_elem_get_name
+;; [in] const snd_hctl_elem_t *obj
+; Get name part of CTL element identifier of a CTL element id/value.
+
+;; Function: unsigned int snd_hctl_elem_get_index
+;; [in] const snd_hctl_elem_t *obj
+; Get index part of CTL element identifier of a CTL element id/value.
+;; Function: void snd_hctl_elem_set_callback
+;; [in] snd_hctl_elem_t *obj
+;; snd_hctl_elem_callback_t val
+; Set callback function for an HCTL element.
+;; Function: void * snd_hctl_elem_get_callback_private
+;; [in] const snd_hctl_elem_t *obj
+; Get callback private value for an HCTL element.
+
+;; Function: void snd_hctl_elem_set_callback_private
+;; [in] snd_hctl_elem_t *obj
+;; [in]  void *val
+; Set callback private value for an HCTL element.
+
+;***************************************************************************
+; Setup Control Interface
+
+;; Function: int snd_sctl_build
+;; [out] snd_sctl_t **ctl = Result - setup control handle
+;; [in] snd_ctl_t *handle = Master control handle
+;; [in] snd_config_t *config = Setup configuration
+;; [in] snd_config_t *private_data = Private data for runtime evaluation
+;; [in] int mode = Build mode - SND_SCTL_xxxx
+; Build setup control handle.
+;; Function: int snd_sctl_free
+;; [in] snd_sctl_t *handle
+; Free setup control handle.
+;; Function: int snd_sctl_install
+;; [in] snd_sctl_t *handle
+; Install given values to control elements.
+;; Function: int snd_sctl_remove
+;; [in] (snd_sctl_t *handle
+; Remove (restore) previous values from control elements.
+
+;***************************************************************************
+
+(constant
+ ;;'SND_CONTROL_DLSYM_VERSION   "_dlsym_control_001"
+ ;;'SND_CTL_EVENT_MASK_REMOVE ??
+ ;;'SND_CTL_EVENT_MASK_VALUE ??
+ ;;'SND_CTL_EVENT_MASK_INFO ??
+ ;;'SND_CTL_EVENT_MASK_ADD ??
+ ;;'SND_CTL_EVENT_MASK_TLV ??
+ 'SND_CTL_NAME_NONE   ""
+ 'SND_CTL_NAME_PLAYBACK   "Playback "
+ 'SND_CTL_NAME_CAPTURE   "Capture "
+ 'SND_CTL_NAME_IEC958_NONE   ""
+ 'SND_CTL_NAME_IEC958_SWITCH   "Switch"
+ 'SND_CTL_NAME_IEC958_VOLUME   "Volume"
+ 'SND_CTL_NAME_IEC958_DEFAULT   "Default"
+ 'SND_CTL_NAME_IEC958_MASK   "Mask"
+ 'SND_CTL_NAME_IEC958_CON_MASK   "Con Mask"
+ 'SND_CTL_NAME_IEC958_PRO_MASK   "Pro Mask"
+ 'SND_CTL_NAME_IEC958_PCM_STREAM   "PCM Stream"
+
+ ;;'SND_CTL_NAME_IEC958(expl, direction, what)   "IEC958 " expl SND_CTL_NAME_##direction SND_CTL_NAME_IEC958_##what
+ 'SND_CTL_POWER_MASK   0xff00
+ 'SND_CTL_POWER_D0   0x0000
+ 'SND_CTL_POWER_D1   0x0100
+ 'SND_CTL_POWER_D2   0x0200
+ 'SND_CTL_POWER_D3   0x0300
+ 'SND_CTL_POWER_D3hot   (or SND_CTL_POWER_D3 0x0000)
+ 'SND_CTL_POWER_D3cold (or SND_CTL_POWER_D3 0x0001)
+ 'SND_CTL_TLVT_CONTAINER   0x0000
+ 'SND_CTL_TLVT_DB_SCALE   0x0001
+ 'SND_CTL_TLVT_DB_LINEAR   0x0002
+ 'SND_CTL_TLVT_DB_RANGE   0x0003
+ 'SND_CTL_TLVT_DB_MINMAX   0x0004
+ 'SND_CTL_TLVT_DB_MINMAX_MUTE   0x0005
+ 'SND_CTL_TLV_DB_GAIN_MUTE   -9999999
+ 'SND_CTL_TLVT_CHMAP_FIXED   0x00101
+ 'SND_CTL_TLVT_CHMAP_VAR   0x00102
+ 'SND_CTL_TLVT_CHMAP_PAIRED   0x00103
+ ;;'SND_CTL_NONBLOCK
+ ;;'SND_CTL_ASYNC
+ ;;'SND_CTL_READONLY
+ 'SND_SCTL_NOFREE   0x0001
+
+ ;;snd_ctl_elem_id_alloca(ptr)
+ ;; allocate an invalid snd_ctl_elem_id_t using standard alloca More...
+
+ ;;snd_ctl_card_info_alloca(ptr)
+ ;; Allocate an invalid snd_ctl_card_info_t on the stack. More...
+
+ ;;snd_ctl_event_alloca(ptr)
+ ;; allocate an invalid snd_ctl_event_t using standard alloca More...
+
+ ;;snd_ctl_elem_list_alloca(ptr)
+ ;; Allocate a snd_ctl_elem_list_t using standard alloca. More...
+
+ ;;snd_ctl_elem_info_alloca(ptr)
+ ;;allocate an invalid snd_ctl_elem_info_t using standard alloca More...
+
+ ;;snd_ctl_elem_value_alloca(ptr)
+ ;;Allocate an invalid snd_ctl_elem_value_t on the stack. More...
+ )
+
+;***************************************************************************
+;;========== CARD Functions
+(import LIB "snd_card_next" "int" "void*")
+
+(import LIB "snd_card_get_longname" "int" "int" "void*")
+(import LIB "snd_card_get_name" "int" "int" "void*")
+(import LIB "snd_ctl_open" "int" "void*" "char*" "int")
+(import LIB "snd_ctl_close" "int" "void*")
+
+;; snd_ctl_card_info_t functions
+(import LIB "snd_ctl_card_info_malloc" "int" "void*")
+(import LIB "snd_ctl_card_info_free" "int" "void*")
+(import LIB "snd_ctl_card_info" "int" "void*" "void*")
+(import LIB "snd_ctl_card_info_get_card" "int" "void*")
+(import LIB "snd_ctl_card_info_get_name" "char*" "void*")
+(import LIB "snd_ctl_card_info_get_id" "char*" "void*")
+(import LIB "snd_ctl_card_info_get_longname" "char*" "void*")
+(import LIB "snd_ctl_card_info_get_components" "char*" "void*")
+(import LIB "snd_ctl_card_info_get_driver" "char*" "void*")
+(import LIB "snd_ctl_card_info_get_mixername" "char*" "void*")
+
+;; snd_ctl_elem_list_t functions
+(import LIB "snd_ctl_elem_info_free" "void" "void*")
+(import LIB "snd_ctl_elem_info_malloc" "int" "void*")
+(import LIB "snd_ctl_elem_list" "int" "void*" "void*")
+(import LIB "snd_ctl_elem_list_alloc_space" "int" "void*" "int")
+(import LIB "snd_ctl_elem_list_free" "int" "void*")
+(import LIB "snd_ctl_elem_list_free_space" "int" "void*")
+(import LIB "snd_ctl_elem_list_get_count" "unsigned int" "void*")
+(import LIB "snd_ctl_elem_list_get_device" "unsigned int" "void*" "int")
+(import LIB "snd_ctl_elem_list_get_id" "void" "void*" "int" "void*")
+(import LIB "snd_ctl_elem_list_get_index" "unsigned int" "void*" "int")
+(import LIB "snd_ctl_elem_list_get_interface" "int" "void*""int")
+(import LIB "snd_ctl_elem_list_get_name" "char*" "void*""int")
+(import LIB "snd_ctl_elem_list_get_numid" "unsigned int" "void*" "int")
+(import LIB "snd_ctl_elem_list_get_subdevice" "unsigned int" "void*" "int")
+(import LIB "snd_ctl_elem_list_get_used" "unsigned int" "void*")
+(import LIB "snd_ctl_elem_list_malloc" "int" "void*")
+
+;; snd_ctl_elem_info_t functions
+(import LIB "snd_ctl_elem_info" "int" "void*" "void*")
+(import LIB "snd_ctl_elem_info_malloc" "int" "void*")
+(import LIB "snd_ctl_elem_info_free" "void" "void*")
+(import LIB "snd_ctl_elem_info_get_type" "int" "void*")
diff --git a/lsp-alsa/libasound-pcm.lsp b/lsp-alsa/libasound-pcm.lsp
new file mode 100644 (file)
index 0000000..7862b1c
--- /dev/null
@@ -0,0 +1,18 @@
+(constant
+ ;; typedef enum _snd_pcm_stream
+ 'SND_PCM_STREAM_PLAYBACK 0
+ 'SND_PCM_STREAM_CAPTURE  1
+ ;; Non blocking mode (flag for open mode)
+ 'SND_PCM_NONBLOCK 0x00000001
+ ;; Async notification
+ 'SND_PCM_ASYNC    0x00000002
+ )
+
+(import LIB "snd_pcm_open" "int"
+        "void*" ; snd_pcm_t **pcmp [output]
+        "char*" ; const char *name
+        "int"   ; snd_pcm_stream_t stream
+        "int"   ; int mode
+        )
+
+
diff --git a/lsp-alsa/libasound.lsp b/lsp-alsa/libasound.lsp
new file mode 100644 (file)
index 0000000..ef4a571
--- /dev/null
@@ -0,0 +1,165 @@
+;; This module implements contexts libc, libasound and ALSA for
+;; providing a higher level ALSA API over a lower level libasound API
+;; on top of a libc API.
+
+;; This implementation expects lib-utils.lsp to be loaded beforehand
+;; for providing the <prog1> and <loginfo> functions.
+
+;;=====================================================================
+; The libc context is an API towards libc.so.6 dynamic library which
+; offers the basic C functions
+(context 'MAIN:libc)
+
+(constant 'LIB "/lib/x86_64-linux-gnu/libc.so.6")
+
+;; The free() function frees the memory space pointed to by ptr, which
+;; must have been returned by a previous call to malloc(), calloc(),
+;; or realloc(). Otherwise, or if free(ptr) has already been called
+;; before, undefined behavior occurs. If ptr is NULL, no operation is
+;; performed.
+(import LIB "free" "void" 
+        "void*" ; void *ptr
+        )
+
+;; Function: (freestr ADDR)
+; Given a string address, copy that into a newlisp string value, and
+; free the memory of the given address.
+(define (freestr ADDR)
+  (prog1 (get-string ADDR) (free ADDR)))
+
+;;======================================================================
+; The libsasound context is an API towards the libasound.so.2 dynammic
+; library which offers functions for the Advanced Linux Sound
+; Architecture (ALSA)
+(context 'MAIN:libasound)
+
+
+(load "import-api.lsp" libasound)
+
+; Find the library full pathname as constant LIB
+(if (exec "find /lib /usr/lib -name 'libasound.so*' -type f")
+    (constant 'LIB ($it 0))
+  (die 1 "Cannot find libasound.so"))
+(when (ENV "LOG") (println "Using " LIB))
+
+;; == Global functions
+; https://alsa-project.org/alsa-doc/alsa-lib/group___global.html
+
+;; Function: char *snd_asoundlib_version()
+; Returns the ALSA sound library version string.
+(import LIB "snd_asoundlib_version" "char*" "void")
+
+;; Include libasound-config.lsp" into this context
+(load "libasound-config.lsp" (context))
+
+;; Include libasound-pcm.lsp" into this context
+(load "libasound-pcm.lsp" (context))
+
+
+;;============================================================
+(context 'MAIN:ALSA)
+
+(define (snd_use_case_get_list MGR ID)
+  (let ((DATA (pack "Lu" 0)) (LIST nil) (E nil) (RES '()) (i nil))
+    (when (>= (setf E (ALSA_UCM:snd_use_case_get_list MGR ID DATA)))
+      (setf LIST ((unpack "Lu" DATA) 0))
+      (dotimes (i E)
+        (push (get-string ((unpack "Lu" LIST) 0)) RES -1)
+        (inc LIST 8)))
+    (or RES E)))
+
+(define (snd_asoundlib_version)
+  (libasound:snd_asoundlib_version))
+
+(define (snd_card_next IX)
+  (let ((DATA (pack "ld" IX)) (E 0))
+    (if (< (setf E (libasound:snd_card_next DATA))) E
+      ((unpack "ld" DATA) 0))))
+
+(define (snd_card_get_longname IX)
+  (let ((DATA (pack "Lu" 0)) (E 0))
+    (if (< (setf E (libasound:snd_card_get_longname IX DATA))) E
+      (libc:freestr ((unpack  "Lu" DATA) 0)))))
+
+(define (snd_card_get_name IX)
+  (let ((DATA (pack "Lu" 0)) (E 0) (A 0))
+    (if (< (setf E (libasound:snd_card_get_name IX DATA))) E
+      (libc:freestr ((unpack  "Lu" DATA) 0)))))
+
+;; Return CTL
+(define (snd_ctl_open NAME MODE) 
+  (let ((DATA (pack "Lu" 0)) (E 0))
+    (if (< (setf E (libasound:snd_ctl_open DATA NAME MODE))) E
+      ((unpack  "Lu" DATA) 0))))
+
+(define (snd_ctl_close CTL)
+  (libasound:snd_ctl_close CTL))
+
+(define (card-info CTL)
+  (let ((DATA (pack "Lu" 0)) (E nil) (INFO nil) (RES nil))
+    (when (>= (setf E (libasound:snd_ctl_card_info_malloc DATA)))
+      (setf INFO ((unpack  "Lu" DATA) 0))
+      (when (>= (setf E (libasound:snd_ctl_card_info CTL INFO)))
+        (setf RES
+              (list
+               (libasound:snd_ctl_card_info_get_card INFO)
+               (libasound:snd_ctl_card_info_get_id INFO)
+               (libasound:snd_ctl_card_info_get_name INFO)
+               (libasound:snd_ctl_card_info_get_longname INFO)
+               (libasound:snd_ctl_card_info_get_components INFO)
+               (libasound:snd_ctl_card_info_get_driver INFO)
+               (libasound:snd_ctl_card_info_get_mixername INFO)))
+        )
+      (libasound:snd_ctl_card_info_free INFO))
+    (or RES E)))
+
+(apply struct (cons 'char44 (dup "char" 44 true)))
+
+(struct 'snd_ctl_elem_id
+        "unsigned int" ; numid; /* numeric identifier, zero = invalid */
+        "unsigned int" ; snd_ctl_elem_iface_t iface; /* interface identifier */
+        "unsigned int" ; device; /* device/client number */
+        "unsigned int" ; subdevice; /* subdevice (substream) number */
+        "char44" ;; unsigned char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN (44)];
+        ;; /* ASCII name of item */
+        "unsigned int" ; index; /* index of item */
+)
+
+(define (element-details CTL LIST i)
+  (list (libasound:snd_ctl_elem_list_get_index LIST i) ; card index?
+        (libasound:snd_ctl_elem_list_get_interface LIST i)
+        (libasound:snd_ctl_elem_list_get_name LIST i)
+        (libasound:snd_ctl_elem_list_get_device LIST i)
+        (libasound:snd_ctl_elem_list_get_numid LIST i)
+        (libasound:snd_ctl_elem_list_get_subdevice LIST i)
+        ))
+
+(define (elements CTL)
+  (let ((DATA (pack "Lu" 0)) (E nil) (LIST nil) (RES '()) (COUNT nil))
+    (when (>= (setf E (libasound:snd_ctl_elem_list_malloc DATA)))
+      (setf LIST ((unpack  "Lu" DATA) 0))
+      (when (>= (setf E (libasound:snd_ctl_elem_list CTL LIST)))
+        (setf COUNT (libasound:snd_ctl_elem_list_get_count LIST))
+        (when (>= (setf E
+                        (libasound:snd_ctl_elem_list_alloc_space LIST COUNT)))
+          (when (>= (libasound:snd_ctl_elem_list CTL LIST))
+            ;; Process the COUNT elements into RES
+            (println COUNT " elements, "
+                     (libasound:snd_ctl_elem_list_get_used LIST) " used." )
+            (dotimes (i COUNT)
+              (push (element-details CTL LIST i) RES -1))
+            )
+          (libasound:snd_ctl_elem_list_free_space LIST))
+        )
+      (libasound:snd_ctl_elem_list_free LIST))
+    (or RES E)))
+
+;;; PCM API
+
+;; Opens a PCM
+(define (snd_pcm_open NAME STREAM-TYPE MODE)
+  (let ((PCM (pack "Lu" 0)))
+    (when (= (libasound:snd_pcm_open (address PCM) NAME STREAM-TYPE MODE))
+      ((unpack "Lu" PCM) 0))))
+
+"libasound.lsp"
diff --git a/lsp-alsa/lsp-libasound.a.8.adoc b/lsp-alsa/lsp-libasound.a.8.adoc
new file mode 100644 (file)
index 0000000..2c28ace
--- /dev/null
@@ -0,0 +1 @@
+== lsp-libasound.a(8)
diff --git a/lsp-alsa/lsp-pcm-dispatch.a.8.adoc b/lsp-alsa/lsp-pcm-dispatch.a.8.adoc
new file mode 100644 (file)
index 0000000..447a73e
--- /dev/null
@@ -0,0 +1 @@
+== lsp-pcm-dispatch.a(8)
diff --git a/lsp-alsa/lsp-utils.a.8.adoc b/lsp-alsa/lsp-utils.a.8.adoc
new file mode 100644 (file)
index 0000000..c2c0398
--- /dev/null
@@ -0,0 +1 @@
+== lsp-utils.a(8)
diff --git a/lsp-alsa/overview.adoc b/lsp-alsa/overview.adoc
new file mode 100644 (file)
index 0000000..0f4ca8f
--- /dev/null
@@ -0,0 +1,23 @@
+ALSA Overview
+=============
+
+The Advanced Linux Sound Architecture (ALSA) is a collection of
+software to handle sound hardware on Linux. It includes a range of
+card specific kernel modules that implement the ALSA API for their
+particular hardware, as well as a range of end user applications for
+comfiguring and operating the sourd system.
+
+The ALSA API is quite flexible. It deals with the ides of a sound
+system as consisting of two perspectives: the audio streaming (input
+and output) and the audio control settings. A configuration includes
+both declarations of possibilies for both streaming and control as
+well as selected particulars. This flexibility makes up a rather
+complex thought structure even though any one host typically has a
+simple, particular setup.
+
+ALSA recognizes "cards", i.e. actual hardware sound card a well as
+virtual software emulated sound cards.
+
+https://wiki.st.com/stm32mpu/wiki/ALSA_overview
+
+https://www.alsa-project.org/alsa-doc/alsa-lib/
diff --git a/lsp-alsa/pcm-dispatch.lsp b/lsp-alsa/pcm-dispatch.lsp
new file mode 100644 (file)
index 0000000..dee0f76
--- /dev/null
@@ -0,0 +1,25 @@
+;; This is the main script for the pcm-dispatch tool
+;; last main-arg nominates the configuration file
+
+(load "lsp-utils.lsp")
+
+; load contexts libasound and ALSA
+(load "libasound.lsp")
+
+(setf
+ CONFIGFILE (println (main-args -1))
+ CONFIGTEXT (read-file CONFIGFILE)
+ CONFIG (println (read-expr CONFIGTEXT))
+ PCM-LIST (println (rest (assoc "PCM-LIST" CONFIG)))
+ )
+
+(define (open-pcm PCM)
+  (ALSA:snd_pcm_open PCM libasound:SND_PCM_STREAM_PLAYBACK 0))
+
+;; Find first usable PCM
+(setf PCM (unless (dolist (PCM PCM-LIST (open-pcm PCM)))
+            (die 1 "No PCM available")))
+
+(println (list 'PCM PCM))
+
+
diff --git a/lsp-alsa/sounder.lsp b/lsp-alsa/sounder.lsp
new file mode 100755 (executable)
index 0000000..44c718a
--- /dev/null
@@ -0,0 +1,46 @@
+#!/usr/bin/newlisp
+
+;; Include alsa-api.lsp
+(load "libasound.lsp")
+
+(constant 'INFOFMT [text]Information =================================================
+| Card: %d Id: %s Name: %s
+| Long name: %s
+| Components: %s
+| Driver: %s Mixer name: %s
+|============================================================[/text] )
+
+;;(SIZE (ALSA:snd_ctl_card_info_sizeof))
+(define (show-card-info CTL)
+  (println (format INFOFMT (ALSA:card-info CTL)))
+  (map println (ALSA:elements CTL))
+  )
+
+(define (show-card CARD)
+  (let ((NAME (ALSA:snd_card_get_name CARD))
+        (LONG (ALSA:snd_card_get_longname CARD))
+        (CTL (ALSA:snd_ctl_open (format "hw:%d" CARD) 0)))
+    (println "Card " CARD " is " NAME " (" LONG ")")
+    ;;(show-card-info CTL)
+    (ALSA:snd_ctl_close CTL)))
+
+(println (format "ALSA %s (%s) "
+                 (ALSA:snd_asoundlib_version) libasound:LIB))
+
+(setf CARD -1)
+(while (>= (setf CARD (ALSA:snd_card_next CARD)))
+  (show-card CARD)
+  )
+
+(setf CFG (libasound:traverse (libasound:snd_config@)))
+
+(define (key-of-list LIST)
+  (if (and (list? LIST) (not (list? (LIST 0)))) (LIST 0) ""))
+
+(define (path-of-ref REF)
+  (let ((P '()) (i 0))
+    (dotimes (i (length REF))
+      (push (key-of-list (nth (0 i REF) CFG)) P -1))))
+       
+;(println CFG)
+;(exit 0)
index bd97a2ff1a4a298170b5727ccf83cbeab0f95b05..5d713a25c3c82569d87cb5b17ac0e75b212d1c32 100644 (file)
@@ -1,9 +1,9 @@
 # Create the newlisp library dbus.lsplib
 
-LSPSRC = lsp-dbus-connection.lsp lsp-dbus.lsp lsp-dbus-marshal.lsp
-LSPSRC += lsp-dbus-events.lsp 
-
-lsp-dbus.a: ${LSPSRC}
-       ar r $@ $^
+ARCHIVES = lsp-dbus.a
 
+include ../archive.mk
 
+lsp-dbus.a: lsp-dbus-connection.lsp lsp-dbus.lsp lsp-dbus-marshal.lsp
+lsp-dbus.a: lsp-dbus-events.lsp 
+       ar rc $@ $^
index c840c5d2c66553a849d48bd607459c0724d86360..d433abfd6897ca6d5ee1b6b35063070394e5964d 100644 (file)
@@ -1,246 +1 @@
-= lsp-dbus.a(8)
-:doctype: manpage
-:revdate: {sys:date "+%Y-%m-%d %H:%M:%S"}
-:BC: *:*
-
-== NAME
-
-lsp-dbus.a - Dbus API for newlisp.
-
-== SYNOPSIS
-
-.With packnl
-packnl _main.lsp_ *-A lsp-misc.a* *-A lsp-dbus.a*
-
-
-.With incore.lsp
-(load "incore.lsp") +
-(archive "lsp-misc.a") +
-(archive "lsp-utils.a") +
-(load "lsp-dbus.lsp")
-
-== DESCRIPTION
-
-*lsp-dbus.a* implements a newlisp API for Dbus. The module includes a
-context _DbusConnection_ that implements the connection/authorization
-level and a context _Dbus_ that implements the "object
-modelling"/messaging level.
-
-The source software is divided into a couple of different source files
-that are packed together into an _ar_ archive.
-
-Note that *lsp-dbus.a* depends on _FOOP_ and _prog1_ from *lsp-misc.a*.
-
-=== lsp-dbus API
-
-(*load* "lsp-dbus.lsp")::
-
-The main file, *lsp-dbus.lsp*, includes connection setup (see
-*:initialize* below) and client registration (i.e. issuing the dbus
-"Hello():s" message as part of its loading. Currently it connects on
-the system bus (only). It also installs the funcion _main-loop_ as
-_prompt-event_ function for processing any unsolicited messages from
-dbus (so called "signals").
-
-==== The Dbus Context
-
-(*Dbus* _PATH_ [_DESTINATION_])::
-
-The _Dbus_ context is used for identifying remote "objects" with the
-given _PATH_ and _DESTINATION_ (aka bus name). The resulting _FOOP_
-object provides a proxying channel for invoking methods targeting the
-given path on the given bus-name application. When omitted, the
-_DESTINATION_ string is obtained from the _PATH_ string following the
-convention of chopping the initial "/" and replacing remaining "/"
-with ".".
-+
-====
-Note that a term like _(Dbus "/org/freedesktop/DBus")_ defines an
-identifer for, or pointer to, a remote "dbus object", and it is here
-referred to as _PROXY_. The _PATH_ part serves as the object
-identifier for dbus while the _DESTINATION_ part is an identfier for
-the application that we expect holds the actual "dbus object" for the
-given _PATH_. This particular term identifies object path
-"/org/freedesktop/DBus" held by the application named
-"org.freedesktop.DBus", which belongs to the dbus framewok.
-
-There is however no central arbitration for paths in dbus. It all
-relies on application developers documenting which paths their
-applications service and access, and then client applications rely on
-using the destination tags for directing their messages to the
-intended applications.
-====
-
-(*:new-path* _PROXY_ _PATH_)::
-
-The _:new-path_ method clones the FOOP object to dentify the given
-_PATH_ for the same destination.
-
-(*:invoke* _PROXY_ _METHOD_ _ARGUMENTS_ _FLAGS_)::
-
-The _:invoke_ method performs a Dbus _METHOD_CALL_ handshake for the
-gven _PROXY_ using the given _METHOD_, _ARGUMENTS_ and message
-_FLAGS_. The function sends a dbus message and then polls for debus
-messages until the reply message has arrived. any and all other
-messages recevied meanwhile are added to the _pending_ list.
-+
-The _METHOD_ is given as a string composed as path, interface, name
-and signature
-+
-====
-_path:interface.name(signature)_
-====
-+
-The _path:_ component including the colon is optional and taken from
-the _PROXY_ by default. The _interface._ component incuding the period
-is also optional as per dbus documentation: a method call without
-explicit interface results in that the method name is looked up across
-all interfaces of the destination path.
-+
-The _SIGNATURE_ is the dbus style signature as a character sequence,
-where y, b, n, q, i, u, x, t, d and h indicate the basic types BYTE,
-BOOLEAN, INT16, UINT16, INT32, UINT32, INT64, UINT64, DOUBLE and FD
-respectivly (both BOOLEAN and FD are also UINT32); a indicates
-"array"; s, o and g indicate strings of various restrictions;
-parentheses and curly braces wrap "struct" signatures, and v indicates
-a pair of a data item preceded by its signature. Refer to dbus
-documentation for further details.
-+
-The given _ARGUMENTS_ is a list structure that must correspond to the
-given signature. All number and string values are mapped naturally
-into the indicated signatures while arrays, struct and variant
-elements should occur as lists: an array is formed from the list of
-elements, as is a struct. A variant typed element must occur as the
-list of signature and data. See also the MARSHALLING section below.
-+
-The optional _FLAGS_ argument is given either a bit mask (number) or a
-list of the _Dbus_ context symbols _NO_REPLY_EXPECTED_,
-_NO_AUTO_START_ and _ALLOW_INTERACTIVE_AUTHORIZATION_. Each of these
-correspond to a bit position in the _FLAGS_ mask and they are combined
-with bit-OR. Refer to dbus documentation for further details.
-+
-.Some :invoke usage examples
-----
-(:invoke Dbus:ROOT "RequestName(su)" '("my.client" 0))
-
-(:invoke Dbus:ROOT "GetNameOwner(s)" '("org.bluez" 0))
-
-(setf BT (Dbus "/" "org.bluez"))
-(:invoke BT "GetManagedObjects()")
-(Dbus:process-pending)
-----
-+
-Note "org.bluez" here provides the "GetManagedObjects()" method of
-interface "org.freedesktop.ObjectManager" unambiguously on the root
-path, "/", rather than its bus name path "/org/bluez".
-+
-While this process is waiting for the _METHOD_CALL_ reply it may
-receive signal messsages from _dbus_. These will be added to the list
-of "pending callbacks" that is processed via the _process-all-pending_
-function, either via an explicit call following the handshake or
-"automagically" as part of the _main-loop_ function that gets
-installed as as _prompt-event_ function.
-+
-.Return value:
-[caption=""]
-====
-The return value of *:invoke* is the METHOD_REPLY message reduced into
-an association list of the headers (with the _Dbus_ header symbols as
-keys) extended with the method return value as a list wrapped into a
-final association that is keyed by the empty string.
-
-In other words, the template for using *:invoke* may look like the
-following:
-----
-(if (:invoke ...) ($it -1 -1 -1))
-----
-====
-
-(*Dbus:process-all-pending*)::
-
-The _process-all-pending_ function processes all pending signal
-messages by invoking their associated handler functions.
-
-(*prompt-event Dbus:main-loop*)::
-
-The _main-loop_ function is set up as _prompt-event_ function for a
-combined _net-select_ on both stdin and the dbus socket as well as to
-process all pending signal messages. Any input from dbus, which are
-signal messages, are added to the pending list, which also is
-processed one message at a time until empty.
-+
-Note that newlisp uses readline for input but that this is not
-activated in _main-loop_. Therefore line editing is not available
-immediately. However the operator may use ^D to leave the main-loop
-and enter the "normal" command line input state for a single line
-input (with line editing), or an initial newline for multi-line input
-that is "submitted" by means of two newlines.
-
-(*:handler* _OBJ_ _KEY_ _HANDLER_)::
-
-This function registers a handler callback for a key that is a string
-composed as "path:interface.member(signature)". The handler function
-takes a single argument, which is the list of unmarshalled actual call
-arguments.
-
-==== The DbusConnection Context
-
-(*DbusConnection* _PATH)::
-
-The _DbusConnection_ context is a FOOP implementation intended for the
-dbus socket connection. Each _(DbusConnection PATH)_ is intended to be
-like a real object that contains state, namely the opened socket file
-descriptor, the connection name given to it by DBus on connection and
-and the messaging serial.
-
-(*:serial++* _OBJECT_)::
-
-This method increments the serial of the given object.
-
-(*:open-socket* _OBJECT_)::
-
-This method opens the path and assignes the socket file descriptor of
-the given object. Before that though, if the socket file descriptor is
-non-negative then that file descriptor is closed before opening the
-object's path.
-
-(*:read-message* _OBJECT_)::
-
-This method reads the next message by reading data from the socket
-successively while there's something to read within a millisecond.
-
-(*:handshake* _OBJECT_ _MESSAGE_ [_PATTERN_])::
-
-This method performs a "raw" text-based handshake on the connection,
-which means to send the given message and then read and return the
-response message. If a _PATTERN_ is given, then the response must
-match the pattern (assigning the automatic variables $1 etc according
-to the pattern). The method returns nil if the given pattern is not
-matched. Note that this method is used only during connection setup
-and dbus communication uses its own marshalling subsequently.
-
-(*:initialize* _OBJECT_  [_USER_])::
-
-This method performs the connection set up including the very first
-newline and the subsequent AUTH handshake. It ends with the connection
-in "BEGIN" mode and returns the received connection name.
-
-=== MARSHALLING
-
-dbus documentation uses the terms "marshalling" and "unmarshalling"
-for the translations of data from/to program data to/from dbus message
-bytes. The data in newlisp mapped straight-forwardly with the special
-note that both "struct" and "array" are held as lists in newlisp. To
-that end, the data for the variant type signature must be wrapped into
-an extra list of the format _(signature value)_ with explcit dbus
-signature string. However, such wrapping does not take place upon
-unmarshalling.
-
-
-== SEE ALSO
-
-*newlisp*, *packnl*, *incore.lsp*
-
-== AUTHOR
-
-Ralph Ronnquist <ralph.ronnquist@gmail.com>
+== lsp-dbus.a(8)
index e691976f6210d45cb0f33b27d561dc3c2dc6bf1b..9a82ec9dc786fcd8b806076d479c41f6db3cb6bb 100644 (file)
@@ -1,6 +1,8 @@
 # Create the newlisp library foop.lsplib
 
-LSPSRC = misc.lsp foop.lsp
+ARCHIVES = lsp-misc.a
 
-lsp-misc.a: ${LSPSRC}
+include ../archive.mk
+
+lsp-misc.a: misc.lsp foop.lsp
        ar r $@ $^
index 7f8a5d05c4257a1db4d02a671f56ebdfb4a5c646..670af48400e1540c8f2659e01cad0d1ca3beab41 100644 (file)
@@ -1,138 +1 @@
-= lsp-misc.a(8)
-:doctype: manpage
-:revdate: {sys:date "+%Y-%m-%d %H:%M:%S"}
-
-== NAME
-
-lsp-misc.a - Misceallaneous useful functions.
-
-== SYNOPSIS
-
-.With packnl (example)
-packnl _main.lsp_ *-A lsp-misc.a*
-
-
-.With incore.lsp
-(load "incore.lsp") +
-(archive "lsp-misc.a") +
-(load "misc.lsp")
-
-== DESCRIPTION
-
-*lsp-misc.a* provides a few global utility functions.
-
-=== misc.lsp API
-
-(prog1 [_term_]*)::
-
-The *prog1* function is like a *begin* function except that it returns
-the value of the first term rather than the last.
-
-(die _N_ [_term_]*)::
-
-The *die* function printes to stderr the join of term values as
-strings with space separation, and if _N_ is a number, then the
-function exits the program with that return code.
-+
-.Example of stderr logging
-(die nil 'This "is" 'printed "to stderr")
-
-(octal-byte _B_)::
-Print binary byte as octal or as ASCII character [32-126].
-
-(octals-string _S_)::
-Print string as a succesion of +octal-byte+.
-
-(human-byte _B_)::
-Return byte code as printable (string) or as code (number).
-
-(human-bytes _BL_)::
-
-Return a list of human-byte elements from a list of byte codes but
-also joining consecutive string elements to form packed strings.
-
-=== foop.lsp API
-
-This newlisp module provides Functional Object-Oriented Programming
-(FOOP) modelling support.
-
-FOOP is an abstraction overlay using the newlisp context notion as a
-simile to the _class_ notion in genuine object-oriented programming
-languages. This is set out in newlisp by means of the representation
-principle that an instance of a FOOP "class" (i.e. context) is a list
-headed by the context itself, and followed by the "member values".
-
-FOOP further includes by the "method invocation" syntax where a
-function is preceded by ':' and then followed by the instance
-concerned before actual function arguments. That instance is then
-stoved away as implicitly available via the (self) function, and the
-member values accessible via index, e.g. the term (self 3) refers to
-the third member of the instance. The self references are
-destructively assignable with setf.
-
-This modelling support adds member name declaration together with
-automatic getter and setter defintions. The (FOOP ...) term is used
-for declaring member names in order. For example:
-
-(FOOP [_name_])::
-
-*FOOP* is like a language extension to declare the field names of a
-FOOP class, and thereby gain "get" and "set" functions generated with
-the respective naming formats (:%name obj) and (:!name obj value).
-
-.illustration 
-----
-(context 'MAIN:EX)
-(FOOP here there more)
-(define (EX HERE THERE MORE) (list (context) HERE THERE MORE))
-
-(context MAIN)
-(setf A (EX 1 2 3))
---> A = (EX 1 2 3)
-(:!there A 4)
---> A = (EX 1 4 3)
-----
-
-=== mmap.lsp API
-
-This newlisp module implements a small FOOP model based memory mapping
-API that links in the _libc6_ functions _mmap_, _munmap_, _msync_ and
-_lseek_.
-
-(*MMap* _FD_ _LENGTH_ [_OFFSET_ [_PROT_]])::
-
-This function creates a FOOP object that represents the memory mapping
-of the given file descriptor. _FD_ may be the pathname string of a
-file to memory map or an already opened file descriptor. The MMap
-object represents the memory block starting at (:%base) and (%len)
-bytes in length where the file is memory mapped.
-+
-.Access example (from test.lsp)
-[caption=""]
-----
-(println (setf X (MMap "mmap.lsp")))
-(println (get-string (:%base X)))
-----
-+
-Note that only a plain text file would be accessed with _get-string_.
-A binary file would rather be accessed with _unpack_. The memory
-mapping provides read-only "random access" to the file content.
-+
-To set up read-write acces requires an _OFFSET_ and the _PROT_
-argument 0x3, and writing should be accompanied by _MMap:msync_ calls
-so as to synchronize with the backing file.
-+
-The FOOP object includes get and set methods for the fields (in
-order): _base_, _len_, _prot_, _flags_, _fd_ and _offset_.
-
-=== test.lsp
-
-This file is a small test of the MMap memory mapping.
-
-== SEE ALSO
-
-*newlisp*
-
-== AUTHOR
-
-Ralph Ronnquist <ralph.ronnquist@gmail.com>
+== lsp-misc.a(8)
diff --git a/lsplib.mk b/lsplib.mk
deleted file mode 100644 (file)
index c1871cb..0000000
--- a/lsplib.mk
+++ /dev/null
@@ -1,14 +0,0 @@
-# This is a Makefile include file for build ar archives as declared in
-# the $(ARCHIVES) variable. Each archive is build by including all
-# .lsp files in the same named subdirectory. E.g. lib-misc.a contains
-# the files lib-misc/*.lsp
-
-# The following defines a Makefile block for archive building
-define archive
-$1: $$(wildcard ${1:.a=}/*.lsp)
-       ar r $$@ $$^
-CLEAN += $1
-endef
-
-# The following command generates the archive building blocks
-$(foreach F,${ARCHIVES},$(eval $(call archive,$F)))
diff --git a/manpage.mk b/manpage.mk
deleted file mode 100644 (file)
index 071f31f..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-%.8: %.8.adoc
-       asciidoctor -b manpage $<