From: <lep...@us...> - 2008-08-02 15:04:55
|
Revision: 10359 http://amsn.svn.sourceforge.net/amsn/?rev=10359&view=rev Author: lephilousophe Date: 2008-08-02 15:05:02 +0000 (Sat, 02 Aug 2008) Log Message: ----------- Make all work for Tcl/Tk 8.5 for Windows Bump Tkvideo version Modified Paths: -------------- trunk/amsn/utils/TkCximage/src/CxImage/cximage.dsp trunk/amsn/utils/TkCximage/src/TkCximage.dsp trunk/amsn/utils/windows/NSIS/aMSN.nsi Modified: trunk/amsn/utils/TkCximage/src/CxImage/cximage.dsp =================================================================== --- trunk/amsn/utils/TkCximage/src/CxImage/cximage.dsp 2008-08-02 06:53:21 UTC (rev 10358) +++ trunk/amsn/utils/TkCximage/src/CxImage/cximage.dsp 2008-08-02 15:05:02 UTC (rev 10359) @@ -141,10 +141,6 @@ # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File -SOURCE=.\tif_xfile.cpp -# End Source File -# Begin Source File - SOURCE=.\ximabmp.cpp # End Source File # Begin Source File @@ -173,10 +169,6 @@ # End Source File # Begin Source File -SOURCE=.\ximaico.cpp -# End Source File -# Begin Source File - SOURCE=.\ximainfo.cpp # End Source File # Begin Source File @@ -185,14 +177,6 @@ # End Source File # Begin Source File -SOURCE=.\ximajas.cpp -# End Source File -# Begin Source File - -SOURCE=.\ximajbg.cpp -# End Source File -# Begin Source File - SOURCE=.\ximajpg.cpp # End Source File # Begin Source File @@ -205,34 +189,18 @@ # End Source File # Begin Source File -SOURCE=.\ximamng.cpp -# End Source File -# Begin Source File - SOURCE=.\ximapal.cpp # End Source File # Begin Source File -SOURCE=.\ximapcx.cpp -# End Source File -# Begin Source File - SOURCE=.\ximapng.cpp # End Source File # Begin Source File -SOURCE=.\ximaraw.cpp -# End Source File -# Begin Source File - SOURCE=.\ximasel.cpp # End Source File # Begin Source File -SOURCE=.\ximaska.cpp -# End Source File -# Begin Source File - SOURCE=.\ximatga.cpp # End Source File # Begin Source File @@ -241,26 +209,10 @@ # End Source File # Begin Source File -SOURCE=.\ximatif.cpp -# End Source File -# Begin Source File - SOURCE=.\ximatran.cpp # End Source File # Begin Source File -SOURCE=.\ximawbmp.cpp -# End Source File -# Begin Source File - -SOURCE=.\ximawmf.cpp -# End Source File -# Begin Source File - -SOURCE=.\ximawnd.cpp -# End Source File -# Begin Source File - SOURCE=.\xmemfile.cpp # End Source File # End Group Modified: trunk/amsn/utils/TkCximage/src/TkCximage.dsp =================================================================== --- trunk/amsn/utils/TkCximage/src/TkCximage.dsp 2008-08-02 06:53:21 UTC (rev 10358) +++ trunk/amsn/utils/TkCximage/src/TkCximage.dsp 2008-08-02 15:05:02 UTC (rev 10359) @@ -53,7 +53,7 @@ # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 -# ADD LINK32 tclstub84.lib tkstub84.lib ./png/Release/png.lib ./jpeg/Release/jpeg.lib ./zlib/Release/zlib.lib ./cximage/Release/cximage.lib /nologo /dll /machine:I386 /out:"./Release/TkCxImage.dll" +# ADD LINK32 tclstub85.lib tkstub85.lib ./png/Release/png.lib ./jpeg/Release/jpeg.lib ./zlib/Release/zlib.lib ./cximage/Release/cximage.lib /nologo /dll /machine:I386 /out:"./Release/TkCxImage.dll" # Begin Special Build Tool SOURCE="$(InputPath)" PostBuild_Cmds=copy .\Release\TkCxImage.dll .\TkCxImage.dll Modified: trunk/amsn/utils/windows/NSIS/aMSN.nsi =================================================================== --- trunk/amsn/utils/windows/NSIS/aMSN.nsi 2008-08-02 06:53:21 UTC (rev 10358) +++ trunk/amsn/utils/windows/NSIS/aMSN.nsi 2008-08-02 15:05:02 UTC (rev 10359) @@ -262,9 +262,9 @@ File "..\..\..\utils\windows\tkdnd\libtkdnd.dll" File "..\..\..\utils\windows\tkdnd\tkDND_Utils.tcl" File "..\..\..\utils\windows\tkdnd\pkgIndex.tcl" - SetOutPath "$INSTDIR\scripts\utils\windows\tkvideo1.2.1" - File "..\..\..\utils\windows\tkvideo1.2.1\tkvideo121.dll" - File "..\..\..\utils\windows\tkvideo1.2.1\pkgIndex.tcl" + SetOutPath "$INSTDIR\scripts\utils\windows\tkvideo1.3.0" + File "..\..\..\utils\windows\tkvideo1.3.0\tkvideo130.dll" + File "..\..\..\utils\windows\tkvideo1.3.0\pkgIndex.tcl" SetOutPath "$INSTDIR\scripts\utils\windows\winflash" File "..\..\..\utils\windows\winflash\flash.dll" File "..\..\..\utils\windows\winflash\pkgIndex.tcl" @@ -276,14 +276,16 @@ File "..\..\..\utils\windows\winutils\pkgIndex.tcl" SetOutPath "$INSTDIR\bin" - File "${WISH_PATH}\bin\tcl84.dll" - File "${WISH_PATH}\bin\tk84.dll" - File "${WISH_PATH}\bin\wish.exe" + File "${WISH_PATH}\bin\tcl85.dll" + File "${WISH_PATH}\bin\tk85.dll" + File /oname=wish.exe "${WISH_PATH}\bin\wish85.exe" - SetOutPath "$INSTDIR\lib\tcl8.4" - File /r "${WISH_PATH}\lib\tcl8.4\*.*" - SetOutPath "$INSTDIR\lib\tk8.4" - File /r "${WISH_PATH}\lib\tk8.4\*.*" + SetOutPath "$INSTDIR\lib\tcl8.5" + File /r "${WISH_PATH}\lib\tcl8.5\*.*" + SetOutPath "$INSTDIR\lib\tcl8\8.5" + File /r "${WISH_PATH}\lib\tcl8\8.5\*.*" + SetOutPath "$INSTDIR\lib\tk8.5" + File /r "${WISH_PATH}\lib\tk8.5\*.*" SetOutPath "$INSTDIR\lib\tls" File /r "${WISH_PATH}\lib\tls\*.*" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <lep...@us...> - 2008-08-23 22:01:14
|
Revision: 10414 http://amsn.svn.sourceforge.net/amsn/?rev=10414&view=rev Author: lephilousophe Date: 2008-08-23 22:01:18 +0000 (Sat, 23 Aug 2008) Log Message: ----------- First commit of libaio thanks to kenshin Added Paths: ----------- trunk/amsn/utils/libaio/ trunk/amsn/utils/libaio/AUTHORS trunk/amsn/utils/libaio/CHANGES trunk/amsn/utils/libaio/COPYING trunk/amsn/utils/libaio/ChangeLog trunk/amsn/utils/libaio/Makefile.am trunk/amsn/utils/libaio/NEWS trunk/amsn/utils/libaio/README trunk/amsn/utils/libaio/aio.pc.in trunk/amsn/utils/libaio/autogen.sh trunk/amsn/utils/libaio/configure.ac trunk/amsn/utils/libaio/doc/ trunk/amsn/utils/libaio/doc/Makefile.am trunk/amsn/utils/libaio/doc/doxygen.cfg trunk/amsn/utils/libaio/doc/index.doxygen trunk/amsn/utils/libaio/include/ trunk/amsn/utils/libaio/include/Makefile.am trunk/amsn/utils/libaio/include/aio/ trunk/amsn/utils/libaio/include/aio/Makefile.am trunk/amsn/utils/libaio/include/aio/af_format.h trunk/amsn/utils/libaio/include/aio/aio.h trunk/amsn/utils/libaio/include/aio/aio_plugin.h trunk/amsn/utils/libaio/m4/ trunk/amsn/utils/libaio/m4/aio.m4 trunk/amsn/utils/libaio/m4/tcl.m4 trunk/amsn/utils/libaio/src/ trunk/amsn/utils/libaio/src/Makefile.am trunk/amsn/utils/libaio/src/aio.c trunk/amsn/utils/libaio/src/aio_null.c trunk/amsn/utils/libaio/src/format.c trunk/amsn/utils/libaio/src/plugins/ trunk/amsn/utils/libaio/src/plugins/Makefile.am trunk/amsn/utils/libaio/src/plugins/alsa/ trunk/amsn/utils/libaio/src/plugins/alsa/Makefile.am trunk/amsn/utils/libaio/src/plugins/alsa/aio_alsa.c trunk/amsn/utils/libaio/src/plugins/oss/ trunk/amsn/utils/libaio/src/plugins/oss/Makefile.am trunk/amsn/utils/libaio/src/plugins/oss/aio_oss.c trunk/amsn/utils/libaio/tcl/ trunk/amsn/utils/libaio/tcl/Makefile.am trunk/amsn/utils/libaio/tcl/aio_play trunk/amsn/utils/libaio/tcl/pkgIndex.tcl trunk/amsn/utils/libaio/tcl/record.tcl trunk/amsn/utils/libaio/tcl/tclaio.c trunk/amsn/utils/libaio/tcl/tclaio.h trunk/amsn/utils/libaio/tcl/tclaio.tcl trunk/amsn/utils/libaio/tcl/tst.tcl trunk/amsn/utils/libaio/test/ trunk/amsn/utils/libaio/test/Makefile.am trunk/amsn/utils/libaio/test/aio_example.c Added: trunk/amsn/utils/libaio/Makefile.am =================================================================== --- trunk/amsn/utils/libaio/Makefile.am (rev 0) +++ trunk/amsn/utils/libaio/Makefile.am 2008-08-23 22:01:18 UTC (rev 10414) @@ -0,0 +1,31 @@ +## Process this file with automake to produce Makefile.in + +AUTOMAKE_OPTIONS = foreign 1.6 dist-zip +ACLOCAL_AMFLAGS = -I m4 +SUBDIRS = src include doc test tcl + +m4datadir = $(datadir)/aclocal +m4data_DATA = m4/aio.m4 + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = aio.pc + +#man_MANS = libao.conf.5 + +EXTRA_DIST = README AUTHORS CHANGES COPYING libaio.spec aio.m4 acinclude.m4 aio.pc.in $(man_MANS) +libtool: $(LIBTOOL_DEPS) + $(SHELL) ./config.status --recheck + +debug: + $(MAKE) all CFLAGS="@DEBUG@" + +profile: + $(MAKE) all CFLAGS="@PROFILE@" + + +doc-dummy : + +doc: doc-dummy + $(MAKE) -C include all + $(MAKE) -C doc doc + Added: trunk/amsn/utils/libaio/aio.pc.in =================================================================== --- trunk/amsn/utils/libaio/aio.pc.in (rev 0) +++ trunk/amsn/utils/libaio/aio.pc.in 2008-08-23 22:01:18 UTC (rev 10414) @@ -0,0 +1,15 @@ +# libaio pkg-config source file + +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: aio +Description: aio is an audio input/output library +Version: @VERSION@ +Requires: +Conflicts: +Libs: -L${libdir} -laio @LIBS@ +Cflags: -I${includedir} + Added: trunk/amsn/utils/libaio/autogen.sh =================================================================== --- trunk/amsn/utils/libaio/autogen.sh (rev 0) +++ trunk/amsn/utils/libaio/autogen.sh 2008-08-23 22:01:18 UTC (rev 10414) @@ -0,0 +1,20 @@ +#!/bin/sh +set -e + +autoreconf -i + +run_configure=true +for arg in $*; do + case $arg in + + --no-configure) + run_configure=false + ;; + *) + ;; + esac +done + +if test $run_configure = true; then + ./configure "$@" +fi Property changes on: trunk/amsn/utils/libaio/autogen.sh ___________________________________________________________________ Added: svn:executable + * Added: trunk/amsn/utils/libaio/configure.ac =================================================================== --- trunk/amsn/utils/libaio/configure.ac (rev 0) +++ trunk/amsn/utils/libaio/configure.ac 2008-08-23 22:01:18 UTC (rev 10414) @@ -0,0 +1,292 @@ +# -*- Autoconf -*- +# Process this file with autoconf to produce a configure script. + +AC_PREREQ(2.61) +AC_INIT([libaio],[0.1], [ke...@ce...]) +AC_CONFIG_MACRO_DIR([m4]) +AC_CONFIG_AUX_DIR([m4]) +AM_INIT_AUTOMAKE([gnu 1.6]) +#Library versioning +LIB_CURRENT=0 +LIB_REVISION=0 +LIB_AGE=0 +AC_SUBST(LIB_CURRENT) +AC_SUBST(LIB_REVISION) +AC_SUBST(LIB_AGE) + + +#Plugin versioning. We use an integer version number much like LIB_CURRENT. +PLUGIN_VERSION=0 + +AC_CANONICAL_BUILD +AC_CANONICAL_HOST + +plugindir=$libdir/aio/plugins-$PLUGIN_VERSION +AC_SUBST(plugindir) + + + + + +# Checks for programs. +AC_PROG_LIBTOOL([disable-static]) +AC_LIBTOOL_DLOPEN +AC_PROG_LIBTOOL +AC_PROG_CC +AC_LIBTOOL_WIN32_DLL +AC_LIBTOOL_DLOPEN +AM_PROG_LIBTOOL + + + +# check fo dlopen + + +AC_CHECK_HEADERS([dlfcn.h], + [AC_SEARCH_LIBS([dlopen],[dl], + [AC_DEFINE([HAVE_DLOPEN],[1], + [support dynamic linking loader])])]) +cflags_save="$CFLAGS" +if test -z "$GCC"; then + case $host in + *-*-irix*) + if test -z "$CC"; then + CC=cc + fi + PLUGIN_LDFLAGS="-export-dynamic -avoid-version" + DEBUG="-g -signed" + CFLAGS="-O2 -w -signed" + PROFILE="-p -g3 -O2 -signed" ;; + sparc-sun-solaris*) + PLUGIN_LDFLAGS="-export-dynamic -avoid-version" + DEBUG="-v -g" + CFLAGS="-xO4 -fast -w -fsimple -native -xcg92" + PROFILE="-v -xpg -g -xO4 -fast -native -fsimple -xcg92 -Dsuncc" ;; + *) + PLUGIN_LDFLAGS="-export-dynamic -avoid-version" + DEBUG="-g -DDEBUG" + CFLAGS="-O" + PROFILE="-g -p" ;; + esac +else + case $host in + *-*-linux*) + PLUGIN_LDFLAGS="-export-dynamic -avoid-version" + DEBUG="-g -Wall -DDEBUG -D_REENTRANT -D__NO_MATH_INLINES -fsigned-char" + CFLAGS="-O20 -ffast-math -D_REENTRANT -fsigned-char" + PROFILE="-pg -g -O20 -ffast-math -D_REENTRANT -fsigned-char";; + sparc-sun-*) + PLUGIN_LDFLAGS="-export-dynamic -avoid-version" + DEBUG="-g -Wall -D__NO_MATH_INLINES -fsigned-char" + CFLAGS="-O20 -ffast-math -D__NO_MATH_INLINES -fsigned-char" + PROFILE="-pg -g -O20 -D__NO_MATH_INLINES -fsigned-char" ;; + *-darwin*) + PLUGIN_LDFLAGS="-module -avoid-version" + DEBUG="-g -Wall -D__NO_MATH_INLINES -fsigned-char -Ddlsym=dlsym_auto_underscore" + CFLAGS="-D__NO_MATH_INLINES -fsigned-char -Ddlsym=dlsym_auto_underscore" + ;; + + *) + PLUGIN_LDFLAGS="-export-dynamic -avoid-version" + DEBUG="-g -DDEBUG -Wall -D__NO_MATH_INLINES -fsigned-char" + CFLAGS="-O20 -D__NO_MATH_INLINES -fsigned-char" + PROFILE="-O20 -g -pg -D__NO_MATH_INLINES -fsigned-char" ;; +esac +fi +CFLAGS="$CFLAGS $cflags_save -Wall -Werror" +DEBUG="$DEBUG " +PROFILE="$PROFILE $cflags_save" +AC_SUBST(DEBUG) +AC_SUBST(PROFILE) + +dnl ========================================= +dnl Need -no-undefined for building win32 dll +dnl ========================================= +dnl Should we do that for cygwin too ??? +dnl I guess so but it needs to be tested. +case $host in + *-mingw*|*-cygwin*) + LIBAIO_LA_LDFLAGS="-no-undefined" + ;; + *) + LIBAIO_LA_LDFLAGS="" + ;; +esac +AC_SUBST(LIBAIO_LA_LDFLAGS) + +#AC_CHECK_LIB(pthread, pthread_kill) + +case $host in + *hpux*) + DLOPEN_FLAGS='(RTLD_LAZY)' + SHARED_LIB_EXTS='.sl' + ;; + *openbsd* | *netbsd* | *solaris2.7) + DLOPEN_FLAGS='(RTLD_LAZY)' + SHARED_LIB_EXTS='.so' + ;; + *) + DLOPEN_FLAGS='(RTLD_NOW | RTLD_GLOBAL)' + SHARED_LIB_EXTS='.so' + ;; +esac +AC_DEFINE_UNQUOTED(DLOPEN_FLAG, [${DLOPEN_FLAGS}],"dlopen flags") +AC_DEFINE_UNQUOTED(SHARED_LIB_EXT, ["$SHARED_LIB_EXTS"], "shared lib ext") + + +# Checks for libraries. + +# Checks for header files. +AC_HEADER_STDC +AC_CHECK_HEADERS([fcntl.h inttypes.h stdint.h limits.h stddef.h stdint.h stdlib.h string.h sys/ioctl.h sys/socket.h sys/time.h unistd.h]) + +# Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST +AC_HEADER_STDBOOL +AC_C_INLINE +AC_TYPE_INT16_T +AC_TYPE_INT32_T +AC_TYPE_INT64_T +AC_TYPE_INT8_T +AC_TYPE_PID_T +AC_TYPE_SIZE_T +AC_HEADER_TIME +AC_TYPE_UINT16_T +AC_TYPE_UINT32_T +AC_TYPE_UINT64_T +AC_TYPE_UINT8_T +AC_C_VOLATILE + +# Checks for library functions. +AC_PROG_GCC_TRADITIONAL +AC_FUNC_MALLOC +AC_FUNC_SELECT_ARGTYPES +AC_CHECK_FUNCS([floor gettimeofday memmove memset pow select setenv strcasecmp strchr strdup strerror strrchr strstr strtol]) + +#enable debug + +AC_ARG_ENABLE(debug,[ --enable-debug enable debug output],[ ENABLE_DEBUG="$enableval" ], [ ENABLE_DEBUG="yes"]) +if test "$ENABLE_DEBUG" = "yes"; then + AC_DEFINE([DEBUG_OUT],[1],["debug output"]) +fi + + +#CHECK FOR OSS + +AC_ARG_ENABLE(oss, [ --enable-oss include oss output plugin],[ BUILD_OSS="$enableval" ], [ BUILD_OSS="yes" ]) + +if test "x$BUILD_OSS" = "xyes"; then + AC_CHECK_HEADERS([sys/soundcard.h machine/soundcard.h]) + + if test "x${ac_cv_header_sys_soundcard_h}" = "xyes" || test "x${ac_cv_header_machine_soundcard_h}" = "xyes" ; then + have_oss=yes + fi +fi +if test "x$have_oss" = xyes; then + AC_DEFINE(HAVE_OSS,[1],[we have oss]) +fi + +AM_CONDITIONAL(HAVE_OSS,test "x$have_oss" = "xyes") + +# CHECK FOR ALSA + +AC_ARG_ENABLE(alsa, [ --enable-alsa include alsa output plugin ],[ BUILD_ALSA="$enableval" ],[ BUILD_ALSA="yes" ]) +AC_ARG_ENABLE(alsa-mmap, [ --enable-alsa-mmap use alsa mmio ],[ BUILD_ALSAMMIO="$enableval" ],[ BUILD_ALSAMMIO="yes" ]) + + +if test "$BUILD_ALSA" = "yes"; then + AC_CHECK_HEADER([alsa/asoundlib.h], ,have_alsa=no) + AC_CHECK_LIB([asound], [snd_pcm_open],have_alsa=yes,have_alsa=no) + if test "$BUILD_ALSAMMIO" = "yes" ; then + AC_CHECK_HEADER(sys/mman.h, have_alsammio=yes, have_alsammio=no) + fi +fi +if test "x$have_alsa" = xyes; then + ALSA_LIBS="-lasound" + AC_DEFINE(HAVE_ALSA,[1],[we have alsa]) + if test "x$have_alsammio" = xyes; then + AC_DEFINE(USE_ALSA_MMIO,[1],[Enable alsa mmap]) + fi +else + ALSA_LIBS="" +fi + + +AM_CONDITIONAL(HAVE_ALSA, test "x$have_alsa" = xyes) + + + + +AC_SUBST(ALSA_LIBS) + +AC_ARG_ENABLE(broken-oss, [ --enable-broken-oss workaround for some OSS drivers (see README for details)],, +if test "x$have_alsa" = "xyes" ; then + enable_broken_oss="yes" +fi) + +if test "x$enable_broken_oss" = "xyes"; then + AC_DEFINE([BROKEN_OSS],[1],["broken oss api workarround"]) + AC_MSG_WARN(["Broken OSS API workaround enabled. See aio_oss.c for details."]) +fi +AC_SUBST(PLUGIN_LDFLAGS) + + + +SC_PATH_TCLCONFIG +SC_LOAD_TCLCONFIG + + + SHLIB_CFLAGS=`echo "$TCL_SHLIB_CFLAGS" |sed -e "s|PIC|pic|" -e "s|+Z|+z|"` + SHLIB_LD=$TCL_SHLIB_LD + SHLIB_SUFFIX=$TCL_SHLIB_SUFFIX + DL_LIBS=$TCL_DL_LIBS + #LD_FLAGS=$TCL_LD_FLAGS + + TCL_BASE=`echo ${TCL_LIB_SPEC} |sed -e "s|^.*-l||"` + TCL_STUB_BASE=`echo ${TCL_STUB_LIB_SPEC} |sed -e "s|^.*-l||"` + + AC_SUBST(TCL_LIB_DIR) + + if test "x${TCL_INC_SPEC}" != "x" ; then + TCL_INC_DIR=$TCL_INC_SPEC + fi + + + if test "x${TCL_INCLUDE_SPEC}" != "x"; then + TCL_INC_DIR=$TCL_INCLUDE_SPEC + fi + + if test "x${TCL_INC_DIR}" == "x"; then + TCL_INC_DIR=$TCL_INCLUDE_DIR + fi + + if test "x${TCL_INC_DIR}" == "x" -a -f ${TCL_PREFIX}/include/tcl.h; then + TCL_INC_DIR=${TCL_PREFIX}/include + fi + + if test "x${TCL_INC_DIR}" == "x"; then + AC_MSG_ERROR(You dot not have a devel package of Tcl) + fi + + case $TCL_INC_DIR in + -I*) ;; + *) TCL_INC_DIR=-I$TCL_INC_DIR;; + esac + + TCL_INC_SPEC=$TCL_INC_DIR + + framework=`echo "${TCL_BASE}" | grep -- "-framework"` + if test "x${framework}" == "x"; then + TCL_LIB_SPEC="-L${TCL_LIB_DIR} -l${TCL_BASE}" + fi + TCL_STUB_LIB_SPEC="-L${TCL_LIB_DIR} -l${TCL_STUB_BASE}" + eval "TCL_UNSHARED_LIB_FILE=lib${TCL_BASE}${TCL_UNSHARED_LIB_SUFFIX}" + eval "TCL_SHARED_LIB_FILE=lib${TCL_BASE}${TCL_SHARED_LIB_SUFFIX}" + +AC_SUBST(TCL_STUB_LIB_SPEC) +AC_SUBST(TCL_INC_SPEC) +AC_SUBST(TCL_VERSION) +#AM_CONFIG_HEADER(config.h) +#AC_CONFIG_FILES([Makefile]) +AC_CONFIG_HEADERS(config.h) +AC_OUTPUT(Makefile src/Makefile src/plugins/Makefile src/plugins/oss/Makefile src/plugins/alsa/Makefile include/Makefile include/aio/Makefile doc/Makefile test/Makefile tcl/Makefile aio.pc) Added: trunk/amsn/utils/libaio/doc/Makefile.am =================================================================== --- trunk/amsn/utils/libaio/doc/Makefile.am (rev 0) +++ trunk/amsn/utils/libaio/doc/Makefile.am 2008-08-23 22:01:18 UTC (rev 10414) @@ -0,0 +1,20 @@ + +EXTRA_DIST= doxygen.cfg + +INCLUDES=-I$(top_srcdir)/include + +doc: + doxygen doxygen.cfg + +doc-pack: doc + -chmod a+r $(top_srcdir)/doc/doxygen/html/* + -chmod a-w $(top_srcdir)/doc/doxygen/html/* + if ! test -z "$(AMTAR)"; then \ + $(AMTAR) --create --directory=$(top_srcdir)/doc/doxygen/html --verbose --file=- . | bzip2 -c -9 > $(top_srcdir)/../alsa-lib-doc.tar.bz2 ; \ + else \ + $(TAR) --create --directory=$(top_srcdir)/doc/doxygen/html --verbose --file=- . | bzip2 -c -9 > $(top_srcdir)/../alsa-lib-doc.tar.bz2 ; \ + fi + rm -f $(top_srcdir)/doc/doxygen/html/* + +doc-clean: + rm -fr $(top_srcdir)/doc/doxygen/ Added: trunk/amsn/utils/libaio/doc/doxygen.cfg =================================================================== --- trunk/amsn/utils/libaio/doc/doxygen.cfg (rev 0) +++ trunk/amsn/utils/libaio/doc/doxygen.cfg 2008-08-23 22:01:18 UTC (rev 10414) @@ -0,0 +1,36 @@ +PROJECT_NAME = "Libaio - the C api ref" +OUTPUT_DIRECTORY = doxygen +GENERATE_LATEX = NO +GENERATE_MAN = NO +GENERATE_RTF = NO + +CASE_SENSE_NAMES = NO +INPUT = index.doxygen \ + ../include/aio/aio.h \ + ../src/aio.c \ + ../include/aio/af_format.h \ + ../src/plugins/alsa/aio_alsa.c \ + ../src/plugins/oss/aio_oss.c \ + ../src/aio_null.c \ + ../include/aio/aio_plugin.h +RECURSIVE = YES +FILE_PATTERNS = *.c *.h +EXAMPLE_PATH = ../test +EXAMPLE_PATTERNS = *.c +QUIET = YES + +EXTRACT_ALL = NO +EXTRACT_STATIC = NO +SHOW_INCLUDE_FILES = NO +JAVADOC_AUTOBRIEF = NO +INHERIT_DOCS = YES +ENABLED_SECTIONS = "" +MACRO_EXPANSION = YES +EXPAND_ONLY_PREDEF = YES +PREDEFINED = DOXYGEN PIC "DOC_HIDDEN" \ + "ATTRIBUTE_UNUSED=" \ + DOXYGEN_SHOULD_SKIP_THIS\ +OPTIMIZE_OUTPUT_FOR_C = YES # doxygen 1.2.6 option + +#INPUT_FILTER = inputfilter +#FILTER_SOURCE_FILES = YES Added: trunk/amsn/utils/libaio/doc/index.doxygen =================================================================== --- trunk/amsn/utils/libaio/doc/index.doxygen (rev 0) +++ trunk/amsn/utils/libaio/doc/index.doxygen 2008-08-23 22:01:18 UTC (rev 10414) @@ -0,0 +1,45 @@ +/*! \page Index Preamble and License + +\author Mohamed Abderaouf Bencheraiet <ke...@ce...> + + +<P>Libaio is designed to make it easy to do simple audio output/input. you just need open an audio device and play/reocord sound.The libaio API abstracts the underlying device dependant complexity. +<P/> +To use libaio in your program, you need to follow these steps: +<UL> + <LI>Include the <aio/aio.h> header into your program. + + <LI>Call #aio_initialize() to initialize the library. This loads the plugins from disk.<br> + + <LI>Call #aio_default_driver_id() with NULL as its argument to get the ID number of the first availabale output driver, +or call it with a char** containing the names (#oss,\ref alsa "alsa" for the moment ) of the drivers to try in order +If you want to specify a particular output driver, you may call aio_driver_id() with a string corresponding +to the short name of the device (i.e. "oss" ...) instead. \n + +If you are using the default device, no extra options are needed. However, if you wish to to pass special +options to the driver, you will need to Create a NULL terminated array of options of type #aio_option_t *). + +Note that the options take the form of key/value pairs where supported keys are listed in the driver documentation. <br> + +<LI>Call #aio_open() and save the returned #aio_device_t pointer. + +<LI>Call #aio_play() to output each block of audio. + +<LI>Call #aio_close() to close the device. Note that this will automatically free the memory that was allocated for the device.<br> +Do not attempt to free the device pointer yourself! + +<LI>Call #aio_shutdown() to close the library.<br> +</UL> +See the example "asd" or the \ref LIBAIO_API "api reference" for more infos. +<H2>Documentation License</H2> + +<P>This documentation is free; you can redistribute it without +any restrictions. Modifications or derived work must retain +the copyright and list all authors.</P> + +<P>This documentation is distributed in the hope that it will be +useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</P> + + +*/ Added: trunk/amsn/utils/libaio/include/Makefile.am =================================================================== --- trunk/amsn/utils/libaio/include/Makefile.am (rev 0) +++ trunk/amsn/utils/libaio/include/Makefile.am 2008-08-23 22:01:18 UTC (rev 10414) @@ -0,0 +1,6 @@ +## Process this file with automake to produce Makefile.in + +AUTOMAKE_OPTIONS = foreign 1.6 + +SUBDIRS = aio + Added: trunk/amsn/utils/libaio/include/aio/Makefile.am =================================================================== --- trunk/amsn/utils/libaio/include/aio/Makefile.am (rev 0) +++ trunk/amsn/utils/libaio/include/aio/Makefile.am 2008-08-23 22:01:18 UTC (rev 10414) @@ -0,0 +1,8 @@ +## Process this file with automake to produce Makefile.in + +AUTOMAKE_OPTIONS = foreign 1.6 + +includedir = $(prefix)/include/aio + +include_HEADERS = aio.h aio_plugin.h af_format.h + Added: trunk/amsn/utils/libaio/include/aio/af_format.h =================================================================== --- trunk/amsn/utils/libaio/include/aio/af_format.h (rev 0) +++ trunk/amsn/utils/libaio/include/aio/af_format.h 2008-08-23 22:01:18 UTC (rev 10414) @@ -0,0 +1,94 @@ +/* The sample format system used lin libaf is based on bitmasks. The + format definition only refers to the storage format not the + resolution. */ + +#ifndef AF_FORMAT_H +#define AF_FORMAT_H + + +// Endianness +#define AF_FORMAT_BE (0<<0) // Big Endian +#define AF_FORMAT_LE (1<<0) // Little Endian +#define AF_FORMAT_END_MASK (1<<0) + +#if WORDS_BIGENDIAN // Native endian of cpu +#define AF_FORMAT_NE AF_FORMAT_BE +#else +#define AF_FORMAT_NE AF_FORMAT_LE +#endif + +// Signed/unsigned +#define AF_FORMAT_SI (0<<1) // Signed +#define AF_FORMAT_US (1<<1) // Unsigned +#define AF_FORMAT_SIGN_MASK (1<<1) + +// Fixed or floating point +#define AF_FORMAT_I (0<<2) // Int +#define AF_FORMAT_F (1<<2) // Foating point +#define AF_FORMAT_POINT_MASK (1<<2) + +// Bits used +#define AF_FORMAT_8BIT (0<<3) +#define AF_FORMAT_16BIT (1<<3) +#define AF_FORMAT_24BIT (2<<3) +#define AF_FORMAT_32BIT (3<<3) +#define AF_FORMAT_40BIT (4<<3) +#define AF_FORMAT_48BIT (5<<3) +#define AF_FORMAT_BITS_MASK (7<<3) + +// Special flags refering to non pcm data +#define AF_FORMAT_MU_LAW (1<<6) +#define AF_FORMAT_A_LAW (2<<6) +#define AF_FORMAT_MPEG2 (3<<6) // MPEG(2) audio +#define AF_FORMAT_AC3 (4<<6) // Dolby Digital AC3 +#define AF_FORMAT_IMA_ADPCM (5<<6) +#define AF_FORMAT_SPECIAL_MASK (7<<6) + +// PREDEFINED formats + +#define AF_FORMAT_U8 (AF_FORMAT_I|AF_FORMAT_US|AF_FORMAT_8BIT|AF_FORMAT_NE) +#define AF_FORMAT_S8 (AF_FORMAT_I|AF_FORMAT_SI|AF_FORMAT_8BIT|AF_FORMAT_NE) +#define AF_FORMAT_U16_LE (AF_FORMAT_I|AF_FORMAT_US|AF_FORMAT_16BIT|AF_FORMAT_LE) +#define AF_FORMAT_U16_BE (AF_FORMAT_I|AF_FORMAT_US|AF_FORMAT_16BIT|AF_FORMAT_BE) +#define AF_FORMAT_S16_LE (AF_FORMAT_I|AF_FORMAT_SI|AF_FORMAT_16BIT|AF_FORMAT_LE) +#define AF_FORMAT_S16_BE (AF_FORMAT_I|AF_FORMAT_SI|AF_FORMAT_16BIT|AF_FORMAT_BE) +#define AF_FORMAT_U24_LE (AF_FORMAT_I|AF_FORMAT_US|AF_FORMAT_24BIT|AF_FORMAT_LE) +#define AF_FORMAT_U24_BE (AF_FORMAT_I|AF_FORMAT_US|AF_FORMAT_24BIT|AF_FORMAT_BE) +#define AF_FORMAT_S24_LE (AF_FORMAT_I|AF_FORMAT_SI|AF_FORMAT_24BIT|AF_FORMAT_LE) +#define AF_FORMAT_S24_BE (AF_FORMAT_I|AF_FORMAT_SI|AF_FORMAT_24BIT|AF_FORMAT_BE) +#define AF_FORMAT_U32_LE (AF_FORMAT_I|AF_FORMAT_US|AF_FORMAT_32BIT|AF_FORMAT_LE) +#define AF_FORMAT_U32_BE (AF_FORMAT_I|AF_FORMAT_US|AF_FORMAT_32BIT|AF_FORMAT_BE) +#define AF_FORMAT_S32_LE (AF_FORMAT_I|AF_FORMAT_SI|AF_FORMAT_32BIT|AF_FORMAT_LE) +#define AF_FORMAT_S32_BE (AF_FORMAT_I|AF_FORMAT_SI|AF_FORMAT_32BIT|AF_FORMAT_BE) + +#define AF_FORMAT_FLOAT_LE (AF_FORMAT_F|AF_FORMAT_32BIT|AF_FORMAT_LE) +#define AF_FORMAT_FLOAT_BE (AF_FORMAT_F|AF_FORMAT_32BIT|AF_FORMAT_BE) + +#ifdef WORDS_BIGENDIAN +#define AF_FORMAT_U16_NE AF_FORMAT_U16_BE +#define AF_FORMAT_S16_NE AF_FORMAT_S16_BE +#define AF_FORMAT_U24_NE AF_FORMAT_U24_BE +#define AF_FORMAT_S24_NE AF_FORMAT_S24_BE +#define AF_FORMAT_U32_NE AF_FORMAT_U32_BE +#define AF_FORMAT_S32_NE AF_FORMAT_S32_BE +#define AF_FORMAT_FLOAT_NE AF_FORMAT_FLOAT_BE +#else +#define AF_FORMAT_U16_NE AF_FORMAT_U16_LE +#define AF_FORMAT_S16_NE AF_FORMAT_S16_LE +#define AF_FORMAT_U24_NE AF_FORMAT_U24_LE +#define AF_FORMAT_S24_NE AF_FORMAT_S24_LE +#define AF_FORMAT_U32_NE AF_FORMAT_U32_LE +#define AF_FORMAT_S32_NE AF_FORMAT_S32_LE +#define AF_FORMAT_FLOAT_NE AF_FORMAT_FLOAT_LE +#endif + +#define AF_FORMAT_UNKNOWN (-1) + +extern int af_str2fmt(const char *str); +extern int af_str2fmt_short(const char *str); +extern int af_fmt2bits(int format); +extern int af_bits2fmt(int bits); +extern char* af_fmt2str(int format, char* str, int size); +extern const char* af_fmt2str_short(int format); + +#endif /* AF_FORMAT_H */ Added: trunk/amsn/utils/libaio/include/aio/aio.h =================================================================== --- trunk/amsn/utils/libaio/include/aio/aio.h (rev 0) +++ trunk/amsn/utils/libaio/include/aio/aio.h 2008-08-23 22:01:18 UTC (rev 10414) @@ -0,0 +1,334 @@ +/** + * \file include/aio/aio.h + * \brief Application interface for libaio + * \author Mohamed Abderaouf Bencheraiet <ke...@ce...> + * \date 2008 + * + * Application interface libaio + */ +/* + * This library is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#ifndef AIO_H +#define AIO_H + +#include <stdio.h> +#include <stdlib.h> +#include <errno.h> +#include <stdint.h> +#include <string.h> +#include <math.h> +#include <ctype.h> +#include <sys/types.h> +#include "af_format.h" + +/** + *\defgroup LIBAIO_API Libaio API + *\{ + *Libaio Api reference + */ +/** + * \defgroup Log Log management + * Log messages to the consol using #aio_msg()\n + * using these levels \n + * AIO_DEBUG for debug messages\n + * AIO_WAN for warning\n + * AIO_ERROR for error\n + *\n + * the behavio of #aio_msg() is dictacted by the global variable #aio_verbosity if set to : + * + * AIO_VERBOSITY_DEBUG all the messages are printed\n + * AIO_VERBOSITY_WARN erro messages and warning are printed \n + * AIO_VERBOSITY_ERROR only error messages are printer \n + * AIO_VERBOSITY_NON no messages\n + * \{*/ + +#define AIO_MSGSIZE_MAX 2048 +/**< Maximum log message size*/ + +#define AIO_DEBUG (1<<0) /*00000001*/ +/**< Debug log facility */ +#define AIO_WARN (1<<1) /*00000010*/ +/**< Warning log facility*/ +#define AIO_ERROR (1<<2) /*00000100*/ +/**< Error log facility*/ +#define AIO_VERBOSITY_DEBUG (AIO_DEBUG|AIO_WARN|AIO_ERROR) /*00000111*/ +/**< debug verbobosity level : all the messages will be displayed*/ +#define AIO_VERBOSITY_WARN (AIO_WARN|AIO_ERROR) /*00000110*/ +/**< warnin verbobosity level : only warning and error messages will be displayed*/ +#define AIO_VERBOSITY_ERROR (AIO_ERROR) /*00000100*/ +/**< error verbobosity level only : error messages will be displayed*/ +#define AIO_VERBOSITY_NONE (0) /*00000000*/ +/**< non verbobosity level only : no messages will be displayed*/ + +/** \} */ + + +#define AIO_SPACE_IN 0 /**<instructs #aio_getspace() to get available input space */ +#define AIO_SPACE_OUT 1 /**<instructs #aio_getspace() to get available output space*/ + + +#define AIO_IMMED_NOW 1/**< instructs #aio_close()/#aio_reset() to close immediatly (drop thhe frames in buffer)*/ +#define AIO_IMMED_LATER 0/**< instructs #aio_close()/#aio_reset() to wait for the playback to finish and the close */ + + +#define AIO_FMT_LITTLE 1 /**< endianness to see the prefered format of the driver the user can check and swap the buffer if necessary*/ +#define AIO_FMT_BIG 2 /**< endianness to see the prefered format of the driver the user can check and swap the buffer if necessary*/ + +#define AIO_FMT_NATIVE 4 /**< endianness to see the prefered format of the driver the user can check and swap the buffer if necessary*/ + + + +/** see #aio_functions_s*/ + +typedef struct aio_functions_s aio_functions_t; + +/** Options information structure */ + +typedef struct aio_option_info_s { + /** Options name */ + char *option; + /** Option description*/ + char *description ; + +} aio_option_info_t; +/**< see#aio_option_info_s*/ + +/** Driver info structure */ +typedef struct aio_info_s +{ + /** driver full name (eg. ALSA output Driver ) */ + const char *name; + /** short name (for config strings) ("alsa") */ + const char *short_name; + /** author ("somebody <so...@so...>") */ + const char *author; + /** any additional comments */ + const char *comment; + /** prefered endienness #AIO_FMT_LITTLE #AIO_FMT_BIG #AIO_FMT_NATIVE*/ + int prefered_byte_format; + /** priority */ + const int priority; + + /** Driver's options information (#aio_option_info_t)*/ + aio_option_info_t *option; + /** Number of options the driver have*/ + int option_count; +} aio_info_t; +/**< see #aio_info_s*/ +/** The device structure that abstracts the hardware/libraries specifics. it is through this strcture that all I/O is done*/ +typedef struct aio_device_s { + /** device driver id*/ + int driver_id; + /** pointer to functions to use the device (play/record ...etc)*/ + aio_functions_t *funcs; + /** a file structure to holde an eventual output/input file (not implemnted yet)*/ + FILE *file; + /** the client byte order #AIO_FMT_LITTLE, #AIO_FMT_BIG, #AIO_FMT_NATIVE */ + int client_byte_format; + /** the host byte order #AIO_FMT_LITTLE, #AIO_FMT_BIG, #AIO_FMT_NATIVE */ + int machine_byte_format; + /** the driver's byte order #AIO_FMT_LITTLE, #AIO_FMT_BIG, #AIO_FMT_NATIVE */ + int driver_byte_format; + /** Bytes allocated to swap_buffer */ + int8_t *swap_buffer; + /** the swap buffer size (for now no swap operations)*/ + int swap_buffer_size; + /** Pointer to driver-specific data */ + void *internal; +} aio_device_t; +/**< see #aio_device_s*/ + +/** Structure holding sample format specific informations and data */ +typedef struct aio_sample_format_s +{ + /** endianess of the samples see #aio_device_s.client_byte_format, #AIO_FMT_LITTLE, #AIO_FMT_BIG, #AIO_FMT_NATIVE **/ + int byte_format; + /** sample format 8 16 S/U .....*/ + int format; + /** number of channels */ + int channels; + /** sample rate */ + int samplerate; + /**bits per sample*/ + int bits; + /**bytes per sec*/ + int bps; + /**sample size */ + int bytes_per_sample; + +} aio_sample_format_t; +/**< see #aio_sample_format_s*/ + +/** Option structure : holds a key value paire */ +typedef struct aio_option_s { + /** name or key unique to the option ("rec_src"*/ + char *key; + /** the value ("Mic") */ + char *value; +} aio_option_t; +/**< see #aio_option_s*/ + + +/** Functions structur : plugins interface with the core of libaio every plugin/driver must implement these*/ +struct aio_functions_s +{ + /** pointer to plugin driver_info function see #aio_getinfo()*/ + aio_info_t *(* driver_info)(void); + /** pointer to plugin the control function see #aio_control() (every plugin offer et set of controls)*/ + int (*control)(aio_device_t *device,int cmd,void *arg); + /** pointer to the plugin init function see #aio_open()*/ + int (*init)(aio_device_t *device, aio_sample_format_t *sample_format,aio_option_t **options,int flags); + /** pointer the plugin uninit function see #aio_close()*/ + int (*uninit)(aio_device_t *device,int immed); + /** pointer to the plugin reset function see #aio_reset()*/ + int (*reset)(aio_device_t *device); + /** pointer to the plugin get_space function see #aio_getspace()*/ + int (*get_space)(aio_device_t *device,int dir); + /** pointer to the plugin play function see aio_play*/ + int (*play)(aio_device_t *device,int8_t* data,size_t len,int flags); + /** pointer to the plugin record function see #aio_record() */ + int (*record)(aio_device_t *device, int8_t *data, size_t len, int flags); + /** pointer to the plugin get_delay function see #aio_getdelay() */ + float (*get_delay)(aio_device_t *device); + /** pointer to the plugin pause function see #aio_pause*/ + int (*pause)(aio_device_t *device); + /** pointer to the plugin resume function see #aio_pause()*/ + int (*resume)(aio_device_t *device); + +}; + +/* API funcs */ +void aio_initialize(void); +int aio_default_driver_id(char **prefered_list); +aio_device_t *aio_open(int driver_id, + aio_sample_format_t *sample_format, + aio_option_t **options, int open_mode); +int aio_play(aio_device_t *device, int8_t * output_samples, + size_t num_bytes, int flags); +int aio_close(aio_device_t *devicei, int immed); +void aio_shutdown(); +int aio_getspace(aio_device_t *device, int dir); +float aio_getdelay(aio_device_t *device); +int aio_pause(aio_device_t *device); +int aio_resume(aio_device_t *device); +int aio_reset(aio_device_t * device, int immed); +/** + * \addtogroup Control + * \{ + */ + +int aio_control(aio_device_t *device, int cmd, void *arg); +/**\}*/ +int aio_record(aio_device_t *device, int8_t * buffer, size_t count, int flags); +aio_info_t * aio_getinfo(aio_device_t *device); +/* miscellaneous */ +int aio_is_big_endian(void); + + + +int aio_driver_id(char *short_name); +/*! \addtogroup Log + * Additional documentation for group `Log' + * \{ + */ +int aio_msg(int level,char *fmt, ...); +/** \} */ + + + + +/** + * \defgroup Control Control interface + * control the device behavior + *\{ + * the volume is set get in a #aio_control_vol_t * structure + * get set device is done with a string + * query format ois done with a format macro defined in include/aio/af_format.h + */ +/** To indicate that a control has succeded*/ +#define CONTROL_OK 1 +/** To indicate that a control is supported and possible*/ +#define CONTROL_TRUE 1 +/** To indicate that a control is supported but impossible*/ +#define CONTROL_FALSE 0 +/** To indicate that an unknown control ahse beed attemped on adevice*/ +#define CONTROL_UNKNOWN -1 +/** To indicate that a control error has occured*/ +#define CONTROL_ERROR -2 +/** To indicate that the control is not availlable*/ +#define CONTROL_NA -3 +/** Request a device change */ +#define AIOCONTROL_SET_DEVICE 1 +/** Request the hardware device/card used */ +#define AIOCONTROL_GET_DEVICE 2 +/** Test for availabilty of a format */ +#define AIOCONTROL_QUERY_FORMAT 3 +/** Resquest the playback volume*/ +#define AIOCONTROL_GET_PLAYBACK_VOLUME 4 +/** Resquest the playback volume*/ +#define AIOCONTROL_SET_PLAYBACK_VOLUME 5 +/** Resquest the capture volume*/ + +#define AIOCONTROL_GET_RECORD_VOLUME 6 +/** Resquest the capture volume set in */ + +#define AIOCONTROL_SET_RECORD_VOLUME 7 +/** Request to change the openeing mode (playback / capture /both)*/ +#define AIOCONTROL_SET_MODE 8 + + +/** Volume struture : hold the volume (range 0-100) used with aio_control*/ +typedef struct aio_control_vol_s { + /** left/mono channel left */ + float left; + /** right channel volume */ + float right; +} aio_control_vol_t; +/**< see aio_control_vol_s*/ + +/*\}*/ +/*instruct the play function that this is th final chunk we're playing + * (for oss mainly)* + */ + +/** instructs the driver that it is the final chuck so no round up ar done (OSS only alsa does not take it into account)*/ +#define AIOPLAY_FINAL_CHUNK 1 + + +/** Open the devie in Playback mode*/ +#define AIO_PLAYONLY (1>>0) /*00000001*/ +/** Open the device in record mode */ +#define AIO_RECONLY (1<<1) /*00000010*/ +/** Open the device for playback and capture simultaniously*/ +#define AIO_RECPLAY (AIO_PLAYONLY|AIO_RECONLY ) /*00000011*/ + + + +/* --------------Internal Structures------------*/ +/** + * --- Driver Table structure --- * + **/ +/** \cond dummy */ +typedef struct driver_list { + aio_functions_t *functions; + void *handle; + struct driver_list *next; +} driver_list; +/** \endcond */ +/*-------------------------------*/ +/**\}*/ +#endif /* AIO_H */ Added: trunk/amsn/utils/libaio/include/aio/aio_plugin.h =================================================================== --- trunk/amsn/utils/libaio/include/aio/aio_plugin.h (rev 0) +++ trunk/amsn/utils/libaio/include/aio/aio_plugin.h 2008-08-23 22:01:18 UTC (rev 10414) @@ -0,0 +1,91 @@ +/** + * \file include/aio/aio_plugin.h + * \brief Plugin Application interface for libaio + * \author Mohamed Abderaouf Bencheraiet <ke...@ce...> + * \date 2008 + * + * Plugin Application interface libaio + */ +/* + * This library is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#ifndef AIO_PLUGIN_H +#define AIO_PLUGIN_H +/** \defgroup plugin_api Plugin API + * \{ + * libaio plugin referece each lugin must implement all of these functions. + * which the code library is juste a wrapes (see \ref LIBAIO_API "api ref" for functions descriptions) : + * <UL> + * <LI>static aio_info_t * driver_info(void); + * <LI>static int control(aio_device_t *device,int cmd, void *arg); + * <LI>static int init(aio_device_t * device,aio_sample_format_t *sample_format, aio_option_t **ptions, int flags); + * <LI>static int uninit(aio_device_t *device, int immed); + * <LI>static int reset(aio_device_t *device); + * <LI>static int get_space(aio_device_t *device,int dir); + * <LI>static int play(aio_device_t *device,int8_t* data,size_t len,int last_chunck); + * <LI>static float get_delay(aio_device_t *device); + * <LI>static int audio_pause(aio_device_t *device); + * <LI>static int audio_resume(aio_device_t *device); + * <LI>static int record(aio_device_t *device, int8_t *buffer,size_t len, int flags); + * </UL> + **/ + +static aio_info_t * driver_info(void); +static int control(aio_device_t *device,int cmd, void *arg); +static int init(aio_device_t * device,aio_sample_format_t *sample_format, aio_option_t **ptions, int flags); +static int uninit(aio_device_t *device, int immed); +static int reset(aio_device_t *device); +static int get_space(aio_device_t *device,int dir); +static int play(aio_device_t *device,int8_t* data,size_t len,int last_chunck); +static float get_delay(aio_device_t *device); +static int audio_pause(aio_device_t *device); +static int audio_resume(aio_device_t *device); +static int record(aio_device_t *device, int8_t *buffer,size_t len, int flags); + + +/** defines a #aio_functions_t structure as \c audio_driver to be exported in a dynamic driver (.so)*/ +#define LIBAIO_EXTERN_DYNAMIC() aio_functions_t audio_driver =\ +{\ + driver_info,\ + control,\ + init,\ + uninit,\ + reset,\ + get_space,\ + play,\ + record,\ + get_delay,\ + audio_pause,\ + audio_resume\ +}; +/**defines an #aio_functions_t structure by the name audio_x (where x is the plugin name) to be exported as a static driver */ +#define LIBAIO_EXTERN_STATIC(x) aio_functions_t audio_##x =\ +{\ + driver_info,\ + control,\ + init,\ + uninit,\ + reset,\ + get_space,\ + play,\ + record,\ + get_delay,\ + audio_pause,\ + audio_resume\ +}; + +/**\}*/ +#endif /* AIO_INTERNAL_H */ Added: trunk/amsn/utils/libaio/m4/aio.m4 =================================================================== --- trunk/amsn/utils/libaio/m4/aio.m4 (rev 0) +++ trunk/amsn/utils/libaio/m4/aio.m4 2008-08-23 22:01:18 UTC (rev 10414) @@ -0,0 +1,110 @@ +# aio.m4 +# Configure paths for libaio + + +dnl AIO_CHECK([ACTION-IF-FOUND [,ACTIO-IF-NOT-FOUND]) +dnl test for libaio, and define AIO_CFLAGS and AIO_LIBS +dnl +AC_DEFUN([AIO_CHECK],[ +dnl +dnl get the c flags and libraies +dnl +AC_ARG_WITH(aio,[ --with-aio=PREFIX Prefix where libaio is installed (optional)],aio_prefix="$withval", aio_preifx="") +AC_ARG_WITH(aio-libs,[ --with-aio-libs=DIR Directory where libaio is installer (optional)],aio_libs="$withval",aio_libs="") +AC_ARG_WITH(aio-includes,[ --with-aio-includes=DIR Directory where liabio includes are installed (optional)],aio_includes="$withval",aio_includes="") +AC_MSG_CHECKING([for aio ]) + +if test "x$aio_prefix" != "xno"; then + + +dnl +dnl set the flags +dnl +if test "x$aio_libraries" != "x" ; then + AIO_LIBS="-L$aio_libraries" +elif test "x$aio_prefix" != "x"; then + AIO_LIBS="-L$aio_prefix/lib" +fi + +if test "x$aio_includes" != "x" ; then + AIO_CFLAGS="-I$aio_includes" +elif test "x$aio_prefix" != "x"; then + AIO_CFLAGS="-I$aio_prefix/include" +fi +AC_CHECK_FUNCS(dlopen, [AO_DL_LIBS=""], [ + AC_CHECK_LIB(dl, dlopen, [AO_DL_LIBS="-ldl"], [ + AC_MSG_WARN([could not find dlopen() needed by libaio sound drivers + your system may not be supported.]) + ]) +]) +AIO_LIBS="$AIO_LIBS -laio $AIO_DL_LIBS" + +dnl user didn't provide try pkg-config +if test "x$AIO_CFLAGS" = "x"; then + unset AIO_LIBS + unset AIO_CFLAGS + PKG_CHECK_MODULES([AIO],[aio]) +fi + + +no_aio="" +ac_save_CFLAGS="$CFLAGS" +ac_save_LIBS="$LIBS" +CFLAGS="$CFLAGS $AIO_CFLAGS" +LIBS="$LIBS $AIO_LIBS" +dnl +dnl Now check if the installed aio is sufficiently new. +dnl +rm -f conf.aiotest +AC_RUN_IFELSE([ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <aio/aio.h> + +int main () +{ + system("touch conf.aiotest"); + return 0; +} + +],, no_aio=yes,[]) +if test "x$no_aio" = "x" ; then + AC_MSG_CHECKING(aio found) + AC_MSG_RESULT(yes) + ifelse([$1], , :, [$1]) +else + if test -f conf.aiotest ; then + : + else + echo "*** Could not run libaio test program, checking why..." + CFLAGS="$CFLAGS $AO_CFLAGS" + LIBS="$LIBS $AO_LIBS" + AC_LINK_IFELSE([AC_LANG_PROGRAM( + [[#include <stdio.h> + #include <stdlib.h> + #include <string.h> + #include <aio/aio.h>]], + [return 0;])],[echo "*** The test program compiled, but did not run. This usually means" + echo "*** that the run-time linker is not finding libaio or finding the wrong version" + echo "*** try adding the path to liabio to your LD_LIBRARY_PATH or ld.config and run ldconfig." ], + [ echo "*** The test program failed to compile or link. See the file config.log for the" + echo "*** exact error that occured."] + ) + fi + AIO_CFLAGS="" + AIO_LIBS="" + AC_MSG_CHECKING(aio found) + AC_MSG_RESULT(no) + ifelse([$2], , :, [$2]) + +fi +AC_SUBST(AIO_CFLAGS) +AC_SUBST(AIO_LIBS) +else + +AC_MSG_RESULT(disabled) +ifelse([$2], , :,[$2]) +fi + +]) Added: trunk/amsn/utils/libaio/m4/tcl.m4 =================================================================== --- trunk/amsn/utils/libaio/m4/tcl.m4 (rev 0) +++ trunk/amsn/utils/libaio/m4/tcl.m4 2008-08-23 22:01:18 UTC (rev 10414) @@ -0,0 +1,3248 @@ +#------------------------------------------------------------------------ +# SC_PATH_TCLCONFIG -- +# +# Locate the tclConfig.sh file and perform a sanity check on +# the Tcl compile flags +# +# Arguments: +# none +# +# Results: +# +# Adds the following arguments to configure: +# --with-tcl=... +# +# Defines the following vars: +# TCL_BIN_DIR Full path to the directory containing +# the tclConfig.sh file +#------------------------------------------------------------------------ + +AC_DEFUN([SC_PATH_TCLCONFIG], [ + # + # Ok, lets find the tcl configuration + # First, look for one uninstalled. + # the alternative search directory is invoked by --with-tcl + # + + if test x"${no_tcl}" = x ; then + # we reset no_tcl in case something fails here + no_tcl=true + AC_ARG_WITH(tcl, + AC_HELP_STRING([--with-tcl], + [directory containing tcl configuration (tclConfig.sh)]), + with_tclconfig=${withval}) + AC_MSG_CHECKING([for Tcl configuration]) + AC_CACHE_VAL(ac_cv_c_tclconfig,[ + + # First check to see if --with-tcl was specified. + if test x"${with_tclconfig}" != x ; then + case ${with_tclconfig} in + */tclConfig.sh ) + if test -f ${with_tclconfig}; then + AC_MSG_WARN([--with-tcl argument should refer to directory containing tclConfig.sh, not to tclConfig.sh itself]) + with_tclconfig=`echo ${with_tclconfig} | sed 's!/tclConfig\.sh$!!'` + fi ;; + esac + if test -f "${with_tclconfig}/tclConfig.sh" ; then + ac_cv_c_tclconfig=`(cd ${with_tclconfig}; pwd)` + else + AC_MSG_ERROR([${with_tclconfig} directory doesn't contain tclConfig.sh]) + fi + fi + + # then check for a private Tcl installation + if test x"${ac_cv_c_tclconfig}" = x ; then + for i in \ + ../tcl \ + `ls -dr ../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ + `ls -dr ../tcl[[8-9]].[[0-9]] 2>/dev/null` \ + `ls -dr ../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ + ../../tcl \ + `ls -dr ../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ + `ls -dr ../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ + `ls -dr ../../tcl[[8-9]].[[0-9]]* 2>/dev/null` \ + ../../../tcl \ + `ls -dr ../../../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ + `ls -dr ../../../tcl[[8-9]].[[0-9]] 2>/dev/null` \ + `ls -dr ../../../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do + if test -f "$i/unix/tclConfig.sh" ; then + ac_cv_c_tclconfig=`(cd $i/unix; pwd)` + break + fi + done + fi + + # on Darwin, check in Framework installation locations + if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tclconfig}" = x ; then + for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ + `ls -d /Library/Frameworks 2>/dev/null` \ + `ls -d /Network/Library/Frameworks 2>/dev/null` \ + `ls -d /System/Library/Frameworks 2>/dev/null` \ + ; do + if test -f "$i/Tcl.framework/tclConfig.sh" ; then + ac_cv_c_tclconfig=`(cd $i/Tcl.framework; pwd)` + break + fi + done + fi + + # check in a few common install locations + if test x"${ac_cv_c_tclconfig}" = x ; then + for i in `ls -d ${libdir} 2>/dev/null` \ + `ls -d ${exec_prefix}/lib 2>/dev/null` \ + `ls -d ${prefix}/lib 2>/dev/null` \ + `ls -d /usr/local/lib 2>/dev/null` \ + `ls -d /usr/contrib/lib 2>/dev/null` \ + `ls -d /usr/lib 2>/dev/null` \ + ; do + if test -f "$i/tclConfig.sh" ; then + ac_cv_c_tclconfig=`(cd $i; pwd)` + break + fi + done + fi + + # check in a few other private locations + if test x"${ac_cv_c_tclconfig}" = x ; then + for i in \ + ${srcdir}/../tcl \ + `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ + `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]] 2>/dev/null` \ + `ls -dr ${srcdir}/../tcl[[8-9]].[[0-9]]* 2>/dev/null` ; do + if test -f "$i/unix/tclConfig.sh" ; then + ac_cv_c_tclconfig=`(cd $i/unix; pwd)` + break + fi + done + fi + ]) + + if test x"${ac_cv_c_tclconfig}" = x ; then + TCL_BIN_DIR="# no Tcl configs found" + AC_MSG_WARN([Can't find Tcl configuration definitions]) + exit 0 + else + no_tcl= + TCL_BIN_DIR=${ac_cv_c_tclconfig} + AC_MSG_RESULT([found ${TCL_BIN_DIR}/tclConfig.sh]) + fi + fi +]) + +#------------------------------------------------------------------------ +# SC_PATH_TKCONFIG -- +# +# Locate the tkConfig.sh file +# +# Arguments: +# none +# +# Results: +# +# Adds the following arguments to configure: +# --with-tk=... +# +# Defines the following vars: +# TK_BIN_DIR Full path to the directory containing +# the tkConfig.sh file +#------------------------------------------------------------------------ + +AC_DEFUN([SC_PATH_TKCONFIG], [ + # + # Ok, lets find the tk configuration + # First, look for one uninstalled. + # the alternative search directory is invoked by --with-tk + # + + if test x"${no_tk}" = x ; then + # we reset no_tk in case something fails here + no_tk=true + AC_ARG_WITH(tk, + AC_HELP_STRING([--with-tk], + [directory containing tk configuration (tkConfig.sh)]), + with_tkconfig=${withval}) + AC_MSG_CHECKING([for Tk configuration]) + AC_CACHE_VAL(ac_cv_c_tkconfig,[ + + # First check to see if --with-tkconfig was specified. + if test x"${with_tkconfig}" != x ; then + case ${with_tkconfig} in + */tkConfig.sh ) + if test -f ${with_tkconfig}; then + AC_MSG_WARN([--with-tk argument should refer to directory containing tkConfig.sh, not to tkConfig.sh itself]) + with_tkconfig=`echo ${with_tkconfig} | sed 's!/tkConfig\.sh$!!'` + fi ;; + esac + if test -f "${with_tkconfig}/tkConfig.sh" ; then + ac_cv_c_tkconfig=`(cd ${with_tkconfig}; pwd)` + else + AC_MSG_ERROR([${with_tkconfig} directory doesn't contain tkConfig.sh]) + fi + fi + + # then check for a private Tk library + if test x"${ac_cv_c_tkconfig}" = x ; then + for i in \ + ../tk \ + `ls -dr ../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ + `ls -dr ../tk[[8-9]].[[0-9]] 2>/dev/null` \ + `ls -dr ../tk[[8-9]].[[0-9]]* 2>/dev/null` \ + ../../tk \ + `ls -dr ../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ + `ls -dr ../../tk[[8-9]].[[0-9]] 2>/dev/null` \ + `ls -dr ../../tk[[8-9]].[[0-9]]* 2>/dev/null` \ + ../../../tk \ + `ls -dr ../../../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ + `ls -dr ../../../tk[[8-9]].[[0-9]] 2>/dev/null` \ + `ls -dr ../../../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do + if test -f "$i/unix/tkConfig.sh" ; then + ac_cv_c_tkconfig=`(cd $i/unix; pwd)` + break + fi + done + fi + + # on Darwin, check in Framework installation locations + if test "`uname -s`" = "Darwin" -a x"${ac_cv_c_tkconfig}" = x ; then + for i in `ls -d ~/Library/Frameworks 2>/dev/null` \ + `ls -d /Library/Frameworks 2>/dev/null` \ + `ls -d /Network/Library/Frameworks 2>/dev/null` \ + `ls -d /System/Library/Frameworks 2>/dev/null` \ + ; do + if test -f "$i/Tk.framework/tkConfig.sh" ; then + ac_cv_c_tkconfig=`(cd $i/Tk.framework; pwd)` + break + fi + done + fi + + # check in a few common install locations + if test x"${ac_cv_c_tkconfig}" = x ; then + for i in `ls -d ${libdir} 2>/dev/null` \ + `ls -d ${exec_prefix}/lib 2>/dev/null` \ + `ls -d ${prefix}/lib 2>/dev/null` \ + `ls -d /usr/local/lib 2>/dev/null` \ + `ls -d /usr/contrib/lib 2>/dev/null` \ + `ls -d /usr/lib 2>/dev/null` \ + ; do + if test -f "$i/tkConfig.sh" ; then + ac_cv_c_tkconfig=`(cd $i; pwd)` + break + fi + done + fi + # check in a few other private locations + if test x"${ac_cv_c_tkconfig}" = x ; then + for i in \ + ${srcdir}/../tk \ + `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]].[[0-9]]* 2>/dev/null` \ + `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]] 2>/dev/null` \ + `ls -dr ${srcdir}/../tk[[8-9]].[[0-9]]* 2>/dev/null` ; do + if test -f "$i/unix/tkConfig.sh" ; then + ac_cv_c_tkconfig=`(cd $i/unix; pwd)` + break + fi + done + fi + ]) + + if test x"${ac_cv_c_tkconfig}" = x ; then + TK_BIN_DIR="# no Tk configs found" + AC_MSG_WARN([Can't find Tk configuration definitions]) + exit 0 + else + no_tk= + TK_BIN_DIR=${ac_cv_c_tkconfig} + AC_MSG_RESULT([found ${TK_BIN_DIR}/tkConfig.sh]) + fi + fi +]) + +#------------------------------------------------------------------------ +# SC_LOAD_TCLCONFIG -- +# +# Load the tclConfig.sh file +# +# Arguments: +# +# Requires the following vars to be set: +# TCL_BIN_DIR +# +# Results: +# +# Subst the following vars: +# TCL_BIN_DIR +# TCL_SRC_DIR +# TCL_LIB_FILE +# +#------------------------------------------------------------------------ + +AC_DEFUN([SC_LOAD_TCLCONFIG], [ + AC_MSG_CHECKING([for existence of ${TCL_BIN_DIR}/tclConfig.sh]) + + if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then + AC_MSG_RESULT([loading]) + . ${TCL_BIN_DIR}/tclConfig.sh + else + AC_MSG_RESULT([could not find ${TCL_BIN_DIR}/tclConfig.sh]) + fi + + # eval is required to do the TCL_DBGX substitution + eval "TCL_LIB_FILE=\"${TCL_LIB_FILE}\"" + eval "TCL_STUB_LIB_FILE=\"${TCL_STUB_LIB_FILE}\"" + + # If the TCL_BIN_DIR is the build directory (not the install directory), + # then set the common variable name to the value of the build variables. + # For example, the variable TCL_LIB_SPEC will be set to the value + # of TCL_BUILD_LIB_SPEC. An extension should make use of TCL_LIB_SPEC + # instead of TCL_BUILD_LIB_SPEC since it will work with both an + # installed and uninstalled version of Tcl. + if test -f ${TCL_BIN_DIR}/Makefile ; then + TCL_LIB_SPEC=${TCL_BUILD_LIB_SPEC} + TCL_STUB_LIB_SPEC=${TCL_BUILD_STUB_LIB_SPEC} + TCL_STUB_LIB_PATH=${TCL_BUILD_STUB_LIB_PATH} + elif test "`uname -s`" = "Darwin"; then + # If Tcl was built as a framework, attempt to use the libraries + # from the framework at the given location so that linking works + # against Tcl.framework installed in an arbitary location. + case ${TCL_DEFS} in + *TCL_FRAMEWORK*) + if test -f ${TCL_BIN_DIR}/${TCL_LIB_FILE}; then + for i in "`cd ${TCL_BIN_DIR}; pwd`" \ + "`cd ${TCL_BIN_DIR}/../..; pwd`"; do + if test "`basename "$i"`" = "${TCL_LIB_FILE}.framework"; then + TCL_LIB_SPEC="-F`dirname "$i"` -framework ${TCL_LIB_FILE}" + break + fi + done + fi + if test -f ${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}; then + TCL_STUB_LIB_SPEC="-L${TCL_BIN_DIR} ${TCL_STUB_LIB_FLAG}" + TCL_STUB_LIB_PATH="${TCL_BIN_DIR}/${TCL_STUB_LIB_FILE}" + fi + ;; + esac + fi + + # eval is required to do the TCL_DBGX substitution + eval "TCL_LIB_FLAG=\"${TCL_LIB_FLAG}\"" + eval "TCL_LIB_SPEC=\"${TCL_LIB_SPEC}\"" + eval "TCL_STUB_LIB_FLAG=\"${TCL_STUB_LIB_FLAG}\"" + eval "TCL_STUB_LIB_SPEC=\"${TCL_STUB_LIB_SPEC}\"" + + AC_SUBST(TCL_VERSION) + AC_SUBST(TCL_PATCH_LEVEL) + AC_SUBST(TCL_BIN_DIR) + AC_SUBST(TCL_SRC_DIR) + + AC_SUBST(TCL_LIB_FILE) + AC_SUBST(TCL_LIB_FLAG) + AC_SUBST(TCL_LIB_SPEC) + + AC_SUBST(TCL_STUB_LIB_FILE) + AC_SUBST(TCL_STUB_LIB_FLAG) + AC_SUBST(TCL_STUB_LIB_SPEC) +]) + +#------------------------------------------------------------------------ +# SC_LOAD_TKCONFIG -- +# +# Load the tkConfig.sh file +# +# Arguments: +# +# Requires the following vars to be set: +# TK_BIN_DIR +# +# Results: +# +# Sets the following vars that should be in tkConfig.sh: +# TK_BIN_DIR +#------------------------------------------------------------------------ + +AC_DEFUN([SC_LOAD_TKCONFIG], [ + AC_MSG_CHECKING([for existence of ${TK_BIN_DIR}/tkConfig.sh]) + + if test -f "${TK_BIN_DIR}/tkConfig.sh" ; then + AC_MSG_RESULT([loading]) + . ${TK_BIN_DIR}/tkConfig.sh + else + AC_MSG_RESULT([could not find ${TK_BIN_DIR}/tkConfig.sh]) + fi + + # eval is required to do the TK_DBGX substitution + eval "TK_LIB_FILE=\"${TK_LIB_FILE}\"" + eval "TK_STUB_LIB_FILE=\"${TK_STUB_LIB_FILE}\"" + + # If the TK_BIN_DIR is the build directory (not the install directory), + # then set the common variable name to the value of the build variables. + # For example, the variable TK_LIB_SPEC will be set to the value + # of TK_BUILD_LIB_SPEC. An extension should make use of TK_LIB_SPEC + # instead of TK_BUILD_LIB_SPEC since it will work with both an + # installed and uninstalled version of Tcl. + if test -f ${TK_BIN_DIR}/Makefile ; then + TK_LIB_SPEC=${TK_BUILD_LIB_SPEC} + TK_STUB_LIB_SPEC=${TK_BUILD_STUB_LIB_SPEC} + TK_STUB_LIB_PATH=${TK_BUILD_STUB_LIB_PATH} + elif test "`uname -s`" = "Darwin"; then + # If Tk was built as a framework, attempt to use the libraries + # from the framework at the given location so that linking works + # against Tk.framework installed in an arbitary location. + case ${TK_DEFS} in + *TK_FRAMEWORK*) + if test -f ${TK_BIN_DIR}/${TK_LIB_FILE}; then + for i in "`cd ${TK_BIN_DIR}; pwd`" \ + "`cd ${TK_BIN_DIR}/../..; pwd`"; do + if test "`basename "$i"`" = "${TK_LIB_FILE}.framework"; then + TK_LIB_SPEC="-F`dirname "$i"` -framework ${TK_LIB_FILE}" + break + fi + done + fi + if test -f ${TK_BIN_DIR}/${TK_STUB_LIB_FILE}; then + TK_STUB_LIB_SPEC="-L${TK_BIN_DIR} ${TK_STUB_LIB_FLAG}" + TK_STUB_LIB_PATH="${TK_BIN_DIR}/${TK_STUB_LIB_FILE}" + fi + ;; + esac + fi + + # eval is required to do the TK_DBGX substitution + eval "TK_LIB_FLAG=\"${TK_LIB_FLAG}\"" + eval "TK_LIB_SPEC=\"${TK_LIB_SPEC}\"" + eval "TK_STUB_LIB_FLAG=\"${TK_STUB_LIB_FLAG}\"" + eval "TK_STUB_LIB_SPEC=\"${TK_STUB_LIB_SPEC}\"" + + AC_SUBST(TK_VERSION) + AC_SUBST(TK_BIN_DIR) + AC_SUBST(TK_SRC_DIR) + + AC_SUBST(TK_LIB_FILE) + AC_SUBST(TK_LIB_FLAG) + AC_SUBST(TK_LIB_SPEC) + + AC_SUBST(TK_STUB_LIB_FILE) + AC_SUBST(TK_STUB_LIB_FLAG) + AC_SUBST(TK_STUB_LIB_SPEC) +]) + +#------------------------------------------------------------------------ +# SC_PROG_TCLSH +# Locate a tclsh shell installed on the system path. This macro +# will only find a Tcl shell that already exists on the system. +# It will not find a Tcl shell in the Tcl build directory or +# a Tcl shell that has been installed from the Tcl build directory. +# If a Tcl shell can't be located on the PATH, then TCLSH_PROG will +# be set to "". Extensions should take care not to create Makefile +# rules that are run by default and depend on TCLSH_PROG. An +# extension can't assume that an executable Tcl shell exists at +# build time. +# +# Arguments +# none +# +# Results +# Subst's the following values: +# TCLSH_PROG +#------------------------------------------------------------------------ + +AC_DEFUN([SC_PROG_TCLSH], [ + AC_MSG_CHECKING([for tclsh]) + AC_CACHE_VAL(ac_cv_path_tclsh, [ + search_path=`echo ${PATH} | sed -e 's/:/ /g'` + for dir in $search_path ; do + for j in `ls -r $dir/tclsh[[8-9]]* 2> /dev/null` \ + `ls -r $dir/tclsh* 2> /dev/null` ; do + if test x"$ac_cv_path_tclsh" = x ; then + if test -f "$j" ; then + ac_cv_path_tclsh=$j + break + fi + fi + done + done + ]) + + if test -f "$ac_cv_path_tclsh" ; then + TCLSH_PROG="$ac_cv_path_tclsh" + AC_MSG_RESULT([$TCLSH_PROG]) + else + # It is not an error if an installed version of Tcl can't be located. + TCLSH_PROG="" + AC_MSG_RESULT([No tclsh found on PATH]) + fi + AC_SUBST(TCLSH_PROG) +]) + +#------------------------------------------------------------------------ +# SC_BUILD_TCLSH +# Determine the fully qualified path name of the tclsh executable +# in the Tcl build directory. This macro will correctly determine +# the name of the tclsh executable even if tclsh has not yet +# been built in the build directory. The build tclsh must be used +# when running tests from an extension build directory. It is not +# correct to use the TCLSH_PROG in cases like this. +# +# Arguments +# none +# +# Results +# Subst's the following values: +# BUILD_TCLSH +#------------------------------------------------------------------------ + +AC_DEFUN([SC_BUILD_TCLSH], [ + AC_MSG_CHECKING([for tclsh in Tcl build directory]) + BUILD_TCLSH=${TCL_BIN_DIR}/tclsh + AC_MSG_RESULT([$BUILD_TCLSH]) + AC_SUBST(BUILD_TCLSH) +]) + +#------------------------------------------------------------------------ +# SC_ENABLE_SHARED -- +# +# Allows the building of shared libraries +# +# Arguments: +# none +# +# Results: +# +# Adds the following arguments to configure: +# --enable-shared=yes|no +# +# Defines the following vars: +# STATIC_BUILD Used for building import/export libraries +# on Windows. +# +# Sets the following vars: +# SHARED_BUILD Value of 1 or 0 +#------------------------------------------------------------------------ + +AC_DEFUN([SC_ENABLE_SHARED], [ + AC_MSG_CHECKING([how to build libraries]) + AC_ARG_ENABLE(shared, + AC_HELP_STRING([--enable-shared], + [build and link with shared libraries (default: on)]), + [tcl_ok=$enableval], [tcl_ok=yes]) + + if test "${enable_shared+set}" = set; then + enableval="$enable_shared" + tcl_ok=$enableval + else + tcl_ok=yes + fi + + if test "$tcl_ok" = "yes" ; then + AC_MSG_RESULT([shared]) + SHARED_BUILD=1 + else + AC_MSG_RESULT([static]) + SHARED_BUILD=0 + AC_DEFINE(STATIC_BUILD, 1, [Is this a static build?]) + fi +]) + +#------------------------------------------------------------------------ +# SC_ENABLE_FRAMEWORK -- +# +# Allows the building of shared libraries into frameworks +# +# Arguments: +# none +# +# Results: +# +# Adds the following arguments to configure: +# --enable-framework=yes|no +# +# Sets the following vars: +# FRAMEWORK_BUILD Value of 1 or 0 +#------------------------------------------------------------------------ + +AC_DEFUN([SC_ENABLE_FRAMEWORK], [ + if test "`uname -s`" = "Darwin" ; then + AC_MSG_CHECKING([how to package libraries]) + AC_ARG_ENABLE(framework, + AC_HELP_STRING([--enable-framework], + [package shared libraries in MacOSX frameworks (default: off)]), + [enable_framework=$enableval], [enable_framework=no]) + if test $enable_framework = yes; then + if test $SHARED_BUILD = 0; then + AC_MSG_WARN([Frameworks can only be built if --enable-shared is yes]) + enable_framework=no + fi + if test $tcl_corefoundation = no; then + AC_MSG_WARN([Frameworks can only be used when CoreFoundation is available]) + enable_framework=no + fi + fi + if test $enable_framework = yes; then + AC_MSG_RESULT([framework]) + FRAMEWORK_BUILD=1 + else + if test $SHARED_BUILD = 1; then + AC_MSG_RESULT([shared library]) + else + AC_MSG_RESULT([static library]) + fi + FRAMEWORK_BUILD=0 + fi + fi +]) + +#------------------------------------------------------------------------ +# SC_ENABLE_THREADS -- +# +# Specify if thread support should be enabled +# +# Arguments: +# none +# +# Results: +# +# Adds the following arguments to configure: +# --enable-threads +# +# Sets the following vars: +# THREADS_LIBS Thread library(s) +# +# Defines the following vars: +# TCL_THREADS +# _REENTRANT +# _THREAD_SAFE +# +#------------------------------------------------------------------------ + +AC_DEFUN([SC_ENABLE_THREADS], [ + AC_ARG_ENABLE(threads, + AC_HELP_STRING([--enable-threads], + [build with threads (default: off)]), + [tcl_ok=$enableval], [tcl_ok=no]) + + if test "${TCL_THREADS}" = 1; then + tcl_threaded_core=1; + fi + + if test "$tcl_ok" = "ye... [truncated message content] |
From: <tom...@us...> - 2008-09-26 23:55:20
|
Revision: 10522 http://amsn.svn.sourceforge.net/amsn/?rev=10522&view=rev Author: tomhennigan Date: 2008-09-26 23:55:14 +0000 (Fri, 26 Sep 2008) Log Message: ----------- In response to this post: http://www.amsn-project.net/forums/viewtopic.php?t=5273 I present a very simplistic amsn-extras package. This provides an API to install skins and plugins. Currently only the mac decompression routines have been added, but the others can easily be added. (see os_base.tcl) On OS X a user can drop a skin or plugin archive or directory onto the aMSN dock icon, and extras will install it. Tests are performed to determine if the directory (contained in an archive perhaps) is a valid skin/plugin. To test: pacakge require amsnextras ::extras::install path_to_folder (on os x this could also be a tar or gz archive) Added Paths: ----------- trunk/amsn/utils/amsn-extras/ trunk/amsn/utils/amsn-extras/extras.tcl trunk/amsn/utils/amsn-extras/os_base.tcl trunk/amsn/utils/amsn-extras/os_mac.tcl trunk/amsn/utils/amsn-extras/pkgIndex.tcl Added: trunk/amsn/utils/amsn-extras/extras.tcl =================================================================== --- trunk/amsn/utils/amsn-extras/extras.tcl (rev 0) +++ trunk/amsn/utils/amsn-extras/extras.tcl 2008-09-26 23:55:14 UTC (rev 10522) @@ -0,0 +1,112 @@ + +# amsn-extras +# Provides an interface to manipulate extras for amsn, such as installing plugins or skins +# ::extras::os +# - Provides a filesystem API to move/copy/delete files and folders. +# - Also provides decompression routines for the file extensions supported on the host system. + +namespace eval ::extras { + proc init { dir } { + source [file join $dir os_base.tcl] + if { [OnMac] } { + source [file join $dir os_mac.tcl] + } + } + + proc install { file_path } { + return [after 0 [list [namespace current]::installAsync $file_path]] + } + + proc installAsync { file_path } { + # Sanity check. + if {![file exists $file_path]} { + return 0 + } + + # Original archive should be deleted. + # Archive, decompress before testing for plugin/skin + set extns $::extras::os::supportedCompressedExtensions + + #set temp_dir "" + #if {[file isfile $file_path]} { + # set temp_dir [::extras::os::tempdir] + # ::extras::os::copyFile $file_path $temp_dir + # set file_path [file join $temp_dir [lindex [file split $file_path] end]] + #} + + while {![file isdirectory $file_path]} { + set file_path [::extras::os::decompress $file_path] + if { $file_path == "" } { + status_log "::extras::install: error decompressing file" red + return 0 + } + } + + if {![file exists $file_path]} { + # The arcive was decompressed, but we can't find the unarchive dir. + # The user should be notified that they can retry by installing the now decompressed folder. + status_log "::extras::install: error finding correctly decompressed archive ($file_path)" red + return 0 + } + + # We have a folder! So now detect skin or plugin, and install it! + set sop [testSkinOrPlugin $file_path] + + if { $sop == "invalid" } { + # Err, what are you doing!? + status_log "::extras::install: invalid pluign or skin file" red + return 0 + } + + # IE. ~/.amsn + set install_base [::extras::os::getaMSNDir] + + if { $sop == "skin" } { + # ~/.amsn/skins + set install_base [file join $install_base skins] + } elseif { $sop == "plugin" } { + # ~/.amsn/plugins + set install_base [file join $install_base plugins] + } else { + status_log "::extras::install: unhandled known type $sop \[shouldn't happen?!\]" + return 0 + } + + # Performs the actual install. + if {[catch { + status_log "::extras::install: installing $sop into $install_base" + [namespace current]::os::moveFolder $file_path $install_base + } err]} { + status_log "::extras::install error: $err" red + return 0 + } + + return 1 + } + + # @return (string){skin|plugin|invalid} + proc testSkinOrPlugin { folder_path } { + # Tests should be a list of tests to validate a particular type. + # Each test should be a subcommand of file (IE. isfile) followed by the file to test + set tests [list \ + skin [list isfile settings.xml isdirectory pixmaps] \ + plugin [list isfile plugininfo.xml] \ + ] + + # Test each type. + foreach {type file_tests} $tests { + set r 1 + foreach {test file} $file_tests { + if {![file $test [file join $folder_path $file]]} { + set r 0 + break + } + } + if { $r == 1 } { + return $type + } + } + + return "invalid" + } +} Added: trunk/amsn/utils/amsn-extras/os_base.tcl =================================================================== --- trunk/amsn/utils/amsn-extras/os_base.tcl (rev 0) +++ trunk/amsn/utils/amsn-extras/os_base.tcl 2008-09-26 23:55:14 UTC (rev 10522) @@ -0,0 +1,79 @@ + +namespace eval ::extras::os { + set ::extras::os::supportedCompressedExtensions [list] + + # Returns the path to the folder in which to install the plugins and skins. IE. ~/.amsn on linux + proc getaMSNDir {} { + return "~/.amsn" + } + + # Should NOT be recursive to work with multiple levels of compression, IE. tar.gz + # This will be handled by ::extras + # Decompression routines should be defined as: + # proc decompress.extension { compressed_file } { return decompressed_file or "" } + # @return: (string)path_to_folder or "" if not successful + proc decompress { file_path } { + set ext [file extension $file_path] + if {![file exists $file_path]} { + return "" + } + + if {[file isdirectory $file_path]} { + return $file_path + } + + if {[lsearch $::extras::os::supportedCompressedExtensions $ext] == -1} { + status_log "::extras::os::decompress: extension ($ext) not supported" + return "" + } + + status_log "::extras::os::decompress: ($ext) $file_path" red + + if {[catch { + set file_path [decompress${ext} $file_path] + } res]} { + status_log "::extras::os::decompress: error decompressing ($ext): $res" red + set file_path "" + } + + return $file_path + } + + # Functions to move files around. + proc copyFile { old_file new_file } { + file copy -force -- $old_file $new_file + } + proc moveFile { old_file new_file } { + copyFile $old_file $new_file + deleteFile $old_file + } + # @return: (bool)success + proc deleteFile { file_path } { + if {[file exists $file_path]} { + file delete -- $file_path + } + } + + # Functions to move folders around. + proc copyFolder { old_folder new_parent } { + copyFile $old_folder $new_parent + deleteFolder $old_folder + } + proc moveFolder { old_folder new_parent } { + deleteFolder [file join $new_parent [lindex [file split $old_folder] end]] + copyFolder $old_folder $new_parent + deleteFolder $old_folder + } + # @return: (bool)success + proc deleteFolder { folder_path } { + if {[file exists $folder_path]} { + file delete -force -- $folder_path + } + } + + # Functions to make temporary writable files and folders. + # @return: (string)path to temp folder + proc tempdir {} { return "" } + # @return: (string)path to temp file + proc tempfile {} { return "" } +} Added: trunk/amsn/utils/amsn-extras/os_mac.tcl =================================================================== --- trunk/amsn/utils/amsn-extras/os_mac.tcl (rev 0) +++ trunk/amsn/utils/amsn-extras/os_mac.tcl 2008-09-26 23:55:14 UTC (rev 10522) @@ -0,0 +1,40 @@ + +# todo: +# - add zip handler +# - fix return name of tar and gz (currently assuming that the return is the same as parent - the extension) + +# This handler lets us install documents dropped onto the application's icon in the dock. +proc ::tk::mac::OpenDocument { file } { + ::extras::install $file +} + +namespace eval ::extras::os { + set ::extras::os::supportedCompressedExtensions [list ".tar" ".gz" ".tgz"] + + proc getaMSNDir {} { + global env + return [file join $env(HOME) Library "Application Support" amsn] + } + + proc decompress.tgz { file_path } { + exec tar -C [file dirname $file_path] -xzf $file_path + deleteFile $file_path + return [file rootname $file_path] + } + proc decompress.tar { file_path } { + exec tar -C [file dirname $file_path] -xf $file_path + deleteFile $file_path + return [file rootname $file_path] + } + proc decompress.gz { file_path } { + exec gzip -d $file_path + return [file rootname $file_path] + } + + proc tempdir {} { + return [exec mktemp -d -t amsn-extras] + } + proc tempfile {} { + return [exec mktemp -t amsn-extras] + } +} Added: trunk/amsn/utils/amsn-extras/pkgIndex.tcl =================================================================== --- trunk/amsn/utils/amsn-extras/pkgIndex.tcl (rev 0) +++ trunk/amsn/utils/amsn-extras/pkgIndex.tcl 2008-09-26 23:55:14 UTC (rev 10522) @@ -0,0 +1,5 @@ + +set name "amsnextras" +set vers 0.1 + +package ifneeded $name $vers "[list source [file join $dir extras.tcl]]; [list ::extras::init $dir]; [list package provide $name $vers]" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tom...@us...> - 2008-10-29 10:32:33
|
Revision: 10660 http://amsn.svn.sourceforge.net/amsn/?rev=10660&view=rev Author: tomhennigan Date: 2008-10-29 10:32:31 +0000 (Wed, 29 Oct 2008) Log Message: ----------- tcl_siren and webcamsn were still trying to use the embedded 8.4 tcl/tk frameworks which we don't ship any more. Used install_name_tool to remap from 8.4 embedded to 8.5. Modified Paths: -------------- trunk/amsn/utils/tcl_siren/tcl_siren.dylib trunk/amsn/utils/webcamsn/webcamsn.dylib Modified: trunk/amsn/utils/tcl_siren/tcl_siren.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/webcamsn/webcamsn.dylib =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kak...@us...> - 2008-11-07 02:00:28
|
Revision: 10693 http://amsn.svn.sourceforge.net/amsn/?rev=10693&view=rev Author: kakaroto Date: 2008-11-07 02:00:23 +0000 (Fri, 07 Nov 2008) Log Message: ----------- Update farsight and libnice to use wspiapi.h to have getaddrinfo/freeaddrinfo/getnameinfo for systems older than winXP. Modified Paths: -------------- trunk/amsn/utils/farsight/tcl_farsight.dll trunk/amsn/utils/windows/gstreamer/libnice.dll Modified: trunk/amsn/utils/farsight/tcl_farsight.dll =================================================================== (Binary files differ) Modified: trunk/amsn/utils/windows/gstreamer/libnice.dll =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bi...@us...> - 2008-11-13 23:30:37
|
Revision: 10723 http://amsn.svn.sourceforge.net/amsn/?rev=10723&view=rev Author: billiob Date: 2008-11-13 23:30:34 +0000 (Thu, 13 Nov 2008) Log Message: ----------- bump http to version 2.7.2 Added Paths: ----------- trunk/amsn/utils/http/ trunk/amsn/utils/http/http.tcl trunk/amsn/utils/http/license.terms trunk/amsn/utils/http/pkgIndex.tcl Removed Paths: ------------- trunk/amsn/utils/http2.4/ Added: trunk/amsn/utils/http/http.tcl =================================================================== --- trunk/amsn/utils/http/http.tcl (rev 0) +++ trunk/amsn/utils/http/http.tcl 2008-11-13 23:30:34 UTC (rev 10723) @@ -0,0 +1,1423 @@ +# http.tcl -- +# +# Client-side HTTP for GET, POST, and HEAD commands. These routines can +# be used in untrusted code that uses the Safesock security policy. These +# procedures use a callback interface to avoid using vwait, which is not +# defined in the safe base. +# +# See the file "license.terms" for information on usage and redistribution of +# this file, and for a DISCLAIMER OF ALL WARRANTIES. +# +# RCS: @(#) $Id: http.tcl,v 1.67.2.5 2008/10/23 23:34:32 patthoyts Exp $ + +package require Tcl 8.4 +# Keep this in sync with pkgIndex.tcl and with the install directories +# in Makefiles +package provide http 2.7.2 + +namespace eval http { + # Allow resourcing to not clobber existing data + + variable http + if {![info exists http]} { + array set http { + -accept */* + -proxyhost {} + -proxyport {} + -proxyfilter http::ProxyRequired + -urlencoding utf-8 + } + set http(-useragent) "Tcl http client package [package provide http]" + } + + proc init {} { + # Set up the map for quoting chars. RFC3986 Section 2.3 say percent + # encode all except: "... percent-encoded octets in the ranges of ALPHA + # (%41-%5A and %61-%7A), DIGIT (%30-%39), hyphen (%2D), period (%2E), + # underscore (%5F), or tilde (%7E) should not be created by URI + # producers ..." + for {set i 0} {$i <= 256} {incr i} { + set c [format %c $i] + if {![string match {[-._~a-zA-Z0-9]} $c]} { + set map($c) %[format %.2x $i] + } + } + # These are handled specially + set map(\n) %0d%0a + variable formMap [array get map] + + # Create a map for HTTP/1.1 open sockets + variable socketmap + if {[info exists socketmap]} { + # Close but don't remove open sockets on re-init + foreach {url sock} [array get socketmap] { + catch {close $sock} + } + } + array set socketmap {} + } + init + + variable urlTypes + if {![info exists urlTypes]} { + set urlTypes(http) [list 80 ::socket] + } + + variable encodings [string tolower [encoding names]] + # This can be changed, but iso8859-1 is the RFC standard. + variable defaultCharset + if {![info exists defaultCharset]} { + set defaultCharset "iso8859-1" + } + + # Force RFC 3986 strictness in geturl url verification? + variable strict + if {![info exists strict]} { + set strict 1 + } + + # Let user control default keepalive for compatibility + variable defaultKeepalive + if {![info exists defaultKeepalive]} { + set defaultKeepalive 0 + } + + namespace export geturl config reset wait formatQuery register unregister + # Useful, but not exported: data size status code +} + +# http::Log -- +# +# Debugging output -- define this to observe HTTP/1.1 socket usage. +# Should echo any args received. +# +# Arguments: +# msg Message to output +# +proc http::Log {args} {} + +# http::register -- +# +# See documentation for details. +# +# Arguments: +# proto URL protocol prefix, e.g. https +# port Default port for protocol +# command Command to use to create socket +# Results: +# list of port and command that was registered. + +proc http::register {proto port command} { + variable urlTypes + set urlTypes($proto) [list $port $command] +} + +# http::unregister -- +# +# Unregisters URL protocol handler +# +# Arguments: +# proto URL protocol prefix, e.g. https +# Results: +# list of port and command that was unregistered. + +proc http::unregister {proto} { + variable urlTypes + if {![info exists urlTypes($proto)]} { + return -code error "unsupported url type \"$proto\"" + } + set old $urlTypes($proto) + unset urlTypes($proto) + return $old +} + +# http::config -- +# +# See documentation for details. +# +# Arguments: +# args Options parsed by the procedure. +# Results: +# TODO + +proc http::config {args} { + variable http + set options [lsort [array names http -*]] + set usage [join $options ", "] + if {[llength $args] == 0} { + set result {} + foreach name $options { + lappend result $name $http($name) + } + return $result + } + set options [string map {- ""} $options] + set pat ^-([join $options |])$ + if {[llength $args] == 1} { + set flag [lindex $args 0] + if {[regexp -- $pat $flag]} { + return $http($flag) + } else { + return -code error "Unknown option $flag, must be: $usage" + } + } else { + foreach {flag value} $args { + if {[regexp -- $pat $flag]} { + set http($flag) $value + } else { + return -code error "Unknown option $flag, must be: $usage" + } + } + } +} + +# http::Finish -- +# +# Clean up the socket and eval close time callbacks +# +# Arguments: +# token Connection token. +# errormsg (optional) If set, forces status to error. +# skipCB (optional) If set, don't call the -command callback. This +# is useful when geturl wants to throw an exception instead +# of calling the callback. That way, the same error isn't +# reported to two places. +# +# Side Effects: +# Closes the socket + +proc http::Finish { token {errormsg ""} {skipCB 0}} { + variable $token + upvar 0 $token state + global errorInfo errorCode + if {$errormsg ne ""} { + set state(error) [list $errormsg $errorInfo $errorCode] + set state(status) "error" + } + if {($state(status) eq "timeout") || ($state(status) eq "error") + || ([info exists state(connection)] && ($state(connection) eq "close")) + } { + CloseSocket $state(sock) $token + } + if {[info exists state(after)]} { after cancel $state(after) } + if {[info exists state(-command)] && !$skipCB} { + if {[catch {eval $state(-command) {$token}} err]} { + if {$errormsg eq ""} { + set state(error) [list $err $errorInfo $errorCode] + set state(status) error + } + } + # Command callback may already have unset our state + unset -nocomplain state(-command) + } +} + +# http::CloseSocket - +# +# Close a socket and remove it from the persistent sockets table. +# If possible an http token is included here but when we are called +# from a fileevent on remote closure we need to find the correct +# entry - hence the second section. + +proc ::http::CloseSocket {s {token {}}} { + variable socketmap + catch {fileevent $s readable {}} + set conn_id {} + if {$token ne ""} { + variable $token + upvar 0 $token state + if {[info exists state(socketinfo)]} { + set conn_id $state(socketinfo) + } + } else { + set map [array get socketmap] + set ndx [lsearch -exact $map $s] + if {$ndx != -1} { + incr ndx -1 + set conn_id [lindex $map $ndx] + } + } + if {$conn_id eq {} || ![info exists socketmap($conn_id)]} { + Log "Closing socket $s (no connection info)" + if {[catch {close $s} err]} { Log "Error: $err" } + } else { + if {[info exists socketmap($conn_id)]} { + Log "Closing connection $conn_id (sock $socketmap($conn_id))" + if {[catch {close $socketmap($conn_id)} err]} { Log "Error: $err" } + unset socketmap($conn_id) + } else { + Log "Cannot close connection $conn_id - no socket in socket map" + } + } +} + +# http::reset -- +# +# See documentation for details. +# +# Arguments: +# token Connection token. +# why Status info. +# +# Side Effects: +# See Finish + +proc http::reset { token {why reset} } { + variable $token + upvar 0 $token state + set state(status) $why + catch {fileevent $state(sock) readable {}} + catch {fileevent $state(sock) writable {}} + Finish $token + if {[info exists state(error)]} { + set errorlist $state(error) + unset state + eval ::error $errorlist + } +} + +# http::geturl -- +# +# Establishes a connection to a remote url via http. +# +# Arguments: +# url The http URL to goget. +# args Option value pairs. Valid options include: +# -blocksize, -validate, -headers, -timeout +# Results: +# Returns a token for this connection. This token is the name of an array +# that the caller should unset to garbage collect the state. + +proc http::geturl { url args } { + variable http + variable urlTypes + variable defaultCharset + variable defaultKeepalive + variable strict + + # Initialize the state variable, an array. We'll return the name of this + # array as the token for the transaction. + + if {![info exists http(uid)]} { + set http(uid) 0 + } + set token [namespace current]::[incr http(uid)] + variable $token + upvar 0 $token state + reset $token + + # Process command options. + + array set state { + -binary false + -blocksize 8192 + -queryblocksize 8192 + -validate 0 + -headers {} + -timeout 0 + -type application/x-www-form-urlencoded + -queryprogress {} + -protocol 1.1 + binary 0 + state connecting + meta {} + coding {} + currentsize 0 + totalsize 0 + querylength 0 + queryoffset 0 + type text/html + body {} + status "" + http "" + connection close + } + set state(-keepalive) $defaultKeepalive + set state(-strict) $strict + # These flags have their types verified [Bug 811170] + array set type { + -binary boolean + -blocksize integer + -queryblocksize integer + -strict boolean + -timeout integer + -validate boolean + } + set state(charset) $defaultCharset + set options { + -binary -blocksize -channel -command -handler -headers -keepalive + -method -myaddr -progress -protocol -query -queryblocksize + -querychannel -queryprogress -strict -timeout -type -validate + } + set usage [join [lsort $options] ", "] + set options [string map {- ""} $options] + set pat ^-([join $options |])$ + foreach {flag value} $args { + if {[regexp -- $pat $flag]} { + # Validate numbers + if {[info exists type($flag)] && + ![string is $type($flag) -strict $value]} { + unset $token + return -code error "Bad value for $flag ($value), must be $type($flag)" + } + set state($flag) $value + } else { + unset $token + return -code error "Unknown option $flag, can be: $usage" + } + } + + # Make sure -query and -querychannel aren't both specified + + set isQueryChannel [info exists state(-querychannel)] + set isQuery [info exists state(-query)] + if {$isQuery && $isQueryChannel} { + unset $token + return -code error "Can't combine -query and -querychannel options!" + } + + # Validate URL, determine the server host and port, and check proxy case + # Recognize user:pass@host URLs also, although we do not do anything with + # that info yet. + + # URLs have basically four parts. + # First, before the colon, is the protocol scheme (e.g. http) + # Second, for HTTP-like protocols, is the authority + # The authority is preceded by // and lasts up to (but not including) + # the following / and it identifies up to four parts, of which only one, + # the host, is required (if an authority is present at all). All other + # parts of the authority (user name, password, port number) are optional. + # Third is the resource name, which is split into two parts at a ? + # The first part (from the single "/" up to "?") is the path, and the + # second part (from that "?" up to "#") is the query. *HOWEVER*, we do + # not need to separate them; we send the whole lot to the server. + # Fourth is the fragment identifier, which is everything after the first + # "#" in the URL. The fragment identifier MUST NOT be sent to the server + # and indeed, we don't bother to validate it (it could be an error to + # pass it in here, but it's cheap to strip). + # + # An example of a URL that has all the parts: + # http://jschmoe:xy...@ww...:8000/foo/bar.tml?q=foo#changes + # The "http" is the protocol, the user is "jschmoe", the password is + # "xyzzy", the host is "www.bogus.net", the port is "8000", the path is + # "/foo/bar.tml", the query is "q=foo", and the fragment is "changes". + # + # Note that the RE actually combines the user and password parts, as + # recommended in RFC 3986. Indeed, that RFC states that putting passwords + # in URLs is a Really Bad Idea, something with which I would agree utterly. + # Also note that we do not currently support IPv6 addresses. + # + # From a validation perspective, we need to ensure that the parts of the + # URL that are going to the server are correctly encoded. + # This is only done if $state(-strict) is true (inherited from + # $::http::strict). + + set URLmatcher {(?x) # this is _expanded_ syntax + ^ + (?: (\w+) : ) ? # <protocol scheme> + (?: // + (?: + ( + [^@/\#?]+ # <userinfo part of authority> + ) @ + )? + ( [^/:\#?]+ ) # <host part of authority> + (?: : (\d+) )? # <port part of authority> + )? + ( / [^\#?]* (?: \? [^\#?]* )?)? # <path> (including query) + (?: \# (.*) )? # <fragment> + $ + } + + # Phase one: parse + if {![regexp -- $URLmatcher $url -> proto user host port srvurl]} { + unset $token + return -code error "Unsupported URL: $url" + } + # Phase two: validate + if {$host eq ""} { + # Caller has to provide a host name; we do not have a "default host" + # that would enable us to handle relative URLs. + unset $token + return -code error "Missing host part: $url" + # Note that we don't check the hostname for validity here; if it's + # invalid, we'll simply fail to resolve it later on. + } + if {$port ne "" && $port > 65535} { + unset $token + return -code error "Invalid port number: $port" + } + # The user identification and resource identification parts of the URL can + # have encoded characters in them; take care! + if {$user ne ""} { + # Check for validity according to RFC 3986, Appendix A + set validityRE {(?xi) + ^ + (?: [-\w.~!$&'()*+,;=:] | %[0-9a-f][0-9a-f] )+ + $ + } + if {$state(-strict) && ![regexp -- $validityRE $user]} { + unset $token + # Provide a better error message in this error case + if {[regexp {(?i)%(?![0-9a-f][0-9a-f]).?.?} $user bad]} { + return -code error \ + "Illegal encoding character usage \"$bad\" in URL user" + } + return -code error "Illegal characters in URL user" + } + } + if {$srvurl ne ""} { + # Check for validity according to RFC 3986, Appendix A + set validityRE {(?xi) + ^ + # Path part (already must start with / character) + (?: [-\w.~!$&'()*+,;=:@/] | %[0-9a-f][0-9a-f] )* + # Query part (optional, permits ? characters) + (?: \? (?: [-\w.~!$&'()*+,;=:@/?] | %[0-9a-f][0-9a-f] )* )? + $ + } + if {$state(-strict) && ![regexp -- $validityRE $srvurl]} { + unset $token + # Provide a better error message in this error case + if {[regexp {(?i)%(?![0-9a-f][0-9a-f])..} $srvurl bad]} { + return -code error \ + "Illegal encoding character usage \"$bad\" in URL path" + } + return -code error "Illegal characters in URL path" + } + } else { + set srvurl / + } + if {$proto eq ""} { + set proto http + } + if {![info exists urlTypes($proto)]} { + unset $token + return -code error "Unsupported URL type \"$proto\"" + } + set defport [lindex $urlTypes($proto) 0] + set defcmd [lindex $urlTypes($proto) 1] + + if {$port eq ""} { + set port $defport + } + if {![catch {$http(-proxyfilter) $host} proxy]} { + set phost [lindex $proxy 0] + set pport [lindex $proxy 1] + } + + # OK, now reassemble into a full URL + set url ${proto}:// + if {$user ne ""} { + append url $user + append url @ + } + append url $host + if {$port != $defport} { + append url : $port + } + append url $srvurl + # Don't append the fragment! + set state(url) $url + + # If a timeout is specified we set up the after event and arrange for an + # asynchronous socket connection. + + set sockopts [list] + if {$state(-timeout) > 0} { + set state(after) [after $state(-timeout) \ + [list http::reset $token timeout]] + lappend sockopts -async + } + + # If we are using the proxy, we must pass in the full URL that includes + # the server name. + + if {[info exists phost] && ($phost ne "")} { + set srvurl $url + set targetAddr [list $phost $pport] + } else { + set targetAddr [list $host $port] + } + # Proxy connections aren't shared among different hosts. + set state(socketinfo) $host:$port + + # See if we are supposed to use a previously opened channel. + if {$state(-keepalive)} { + variable socketmap + if {[info exists socketmap($state(socketinfo))]} { + if {[catch {fconfigure $socketmap($state(socketinfo))}]} { + Log "WARNING: socket for $state(socketinfo) was closed" + unset socketmap($state(socketinfo)) + } else { + set sock $socketmap($state(socketinfo)) + Log "reusing socket $sock for $state(socketinfo)" + catch {fileevent $sock writable {}} + catch {fileevent $sock readable {}} + } + } + # don't automatically close this connection socket + set state(connection) {} + } + if {![info exists sock]} { + # Pass -myaddr directly to the socket command + if {[info exists state(-myaddr)]} { + lappend sockopts -myaddr $state(-myaddr) + } + if {[catch {eval $defcmd $sockopts $targetAddr} sock]} { + # something went wrong while trying to establish the + # connection. Clean up after events and such, but DON'T call the + # command callback (if available) because we're going to throw an + # exception from here instead. + + set state(sock) $sock + Finish $token "" 1 + cleanup $token + return -code error $sock + } + } + set state(sock) $sock + Log "Using $sock for $state(socketinfo)" \ + [expr {$state(-keepalive)?"keepalive":""}] + if {$state(-keepalive)} { + set socketmap($state(socketinfo)) $sock + } + + # Wait for the connection to complete. + + if {$state(-timeout) > 0} { + fileevent $sock writable [list http::Connect $token] + http::wait $token + + if {![info exists state]} { + # If we timed out then Finish has been called and the users + # command callback may have cleaned up the token. If so + # we end up here with nothing left to do. + return $token + } elseif {$state(status) eq "error"} { + # Something went wrong while trying to establish the connection. + # Clean up after events and such, but DON'T call the command + # callback (if available) because we're going to throw an + # exception from here instead. + set err [lindex $state(error) 0] + cleanup $token + return -code error $err + } elseif {$state(status) ne "connect"} { + # Likely to be connection timeout + return $token + } + set state(status) "" + } + + # Send data in cr-lf format, but accept any line terminators + + fconfigure $sock -translation {auto crlf} -buffersize $state(-blocksize) + + # The following is disallowed in safe interpreters, but the socket is + # already in non-blocking mode in that case. + + catch {fconfigure $sock -blocking off} + set how GET + if {$isQuery} { + set state(querylength) [string length $state(-query)] + if {$state(querylength) > 0} { + set how POST + set contDone 0 + } else { + # There's no query data. + unset state(-query) + set isQuery 0 + } + } elseif {$state(-validate)} { + set how HEAD + } elseif {$isQueryChannel} { + set how POST + # The query channel must be blocking for the async Write to + # work properly. + fconfigure $state(-querychannel) -blocking 1 -translation binary + set contDone 0 + } + if {[info exists state(-method)] && $state(-method) ne ""} { + set how $state(-method) + } + + if {[catch { + puts $sock "$how $srvurl HTTP/$state(-protocol)" + puts $sock "Accept: $http(-accept)" + array set hdrs $state(-headers) + if {[info exists hdrs(Host)]} { + # Allow Host spoofing [Bug 928154] + puts $sock "Host: $hdrs(Host)" + } elseif {$port == $defport} { + # Don't add port in this case, to handle broken servers. + # [Bug #504508] + puts $sock "Host: $host" + } else { + puts $sock "Host: $host:$port" + } + unset hdrs + puts $sock "User-Agent: $http(-useragent)" + if {$state(-protocol) == 1.0 && $state(-keepalive)} { + puts $sock "Connection: keep-alive" + } + if {$state(-protocol) > 1.0 && !$state(-keepalive)} { + puts $sock "Connection: close" ;# RFC2616 sec 8.1.2.1 + } + if {[info exists phost] && ($phost ne "") && $state(-keepalive)} { + puts $sock "Proxy-Connection: Keep-Alive" + } + set accept_encoding_seen 0 + foreach {key value} $state(-headers) { + if {[string equal -nocase $key "host"]} { continue } + if {[string equal -nocase $key "accept-encoding"]} { + set accept_encoding_seen 1 + } + set value [string map [list \n "" \r ""] $value] + set key [string trim $key] + if {[string equal -nocase $key "content-length"]} { + set contDone 1 + set state(querylength) $value + } + if {[string length $key]} { + puts $sock "$key: $value" + } + } + # Soft zlib dependency check - no package require + if {!$accept_encoding_seen && [llength [package provide zlib]] + && !([info exists state(-channel)] || [info exists state(-handler)]) + } { + puts $sock "Accept-Encoding: gzip, identity, *;q=0.1" + } + if {$isQueryChannel && $state(querylength) == 0} { + # Try to determine size of data in channel. If we cannot seek, the + # surrounding catch will trap us + + set start [tell $state(-querychannel)] + seek $state(-querychannel) 0 end + set state(querylength) \ + [expr {[tell $state(-querychannel)] - $start}] + seek $state(-querychannel) $start + } + + # Flush the request header and set up the fileevent that will either + # push the POST data or read the response. + # + # fileevent note: + # + # It is possible to have both the read and write fileevents active at + # this point. The only scenario it seems to affect is a server that + # closes the connection without reading the POST data. (e.g., early + # versions TclHttpd in various error cases). Depending on the platform, + # the client may or may not be able to get the response from the server + # because of the error it will get trying to write the post data. + # Having both fileevents active changes the timing and the behavior, + # but no two platforms (among Solaris, Linux, and NT) behave the same, + # and none behave all that well in any case. Servers should always read + # their POST data if they expect the client to read their response. + + if {$isQuery || $isQueryChannel} { + puts $sock "Content-Type: $state(-type)" + if {!$contDone} { + puts $sock "Content-Length: $state(querylength)" + } + puts $sock "" + fconfigure $sock -translation {auto binary} + fileevent $sock writable [list http::Write $token] + } else { + puts $sock "" + flush $sock + fileevent $sock readable [list http::Event $sock $token] + } + + if {! [info exists state(-command)]} { + # geturl does EVERYTHING asynchronously, so if the user calls it + # synchronously, we just do a wait here. + + wait $token + if {$state(status) eq "error"} { + # Something went wrong, so throw the exception, and the + # enclosing catch will do cleanup. + return -code error [lindex $state(error) 0] + } + } + } err]} { + # The socket probably was never connected, or the connection dropped + # later. + + # Clean up after events and such, but DON'T call the command callback + # (if available) because we're going to throw an exception from here + # instead. + + # if state(status) is error, it means someone's already called Finish + # to do the above-described clean up. + if {$state(status) ne "error"} { + Finish $token $err 1 + } + cleanup $token + return -code error $err + } + + return $token +} + +# Data access functions: +# Data - the URL data +# Status - the transaction status: ok, reset, eof, timeout +# Code - the HTTP transaction code, e.g., 200 +# Size - the size of the URL data + +proc http::data {token} { + variable $token + upvar 0 $token state + return $state(body) +} +proc http::status {token} { + if {![info exists $token]} { return "error" } + variable $token + upvar 0 $token state + return $state(status) +} +proc http::code {token} { + variable $token + upvar 0 $token state + return $state(http) +} +proc http::ncode {token} { + variable $token + upvar 0 $token state + if {[regexp {[0-9]{3}} $state(http) numeric_code]} { + return $numeric_code + } else { + return $state(http) + } +} +proc http::size {token} { + variable $token + upvar 0 $token state + return $state(currentsize) +} +proc http::meta {token} { + variable $token + upvar 0 $token state + return $state(meta) +} +proc http::error {token} { + variable $token + upvar 0 $token state + if {[info exists state(error)]} { + return $state(error) + } + return "" +} + +# http::cleanup +# +# Garbage collect the state associated with a transaction +# +# Arguments +# token The token returned from http::geturl +# +# Side Effects +# unsets the state array + +proc http::cleanup {token} { + variable $token + upvar 0 $token state + if {[info exists state]} { + unset state + } +} + +# http::Connect +# +# This callback is made when an asyncronous connection completes. +# +# Arguments +# token The token returned from http::geturl +# +# Side Effects +# Sets the status of the connection, which unblocks +# the waiting geturl call + +proc http::Connect {token} { + variable $token + upvar 0 $token state + global errorInfo errorCode + if {[eof $state(sock)] || + [string length [fconfigure $state(sock) -error]]} { + Finish $token "connect failed [fconfigure $state(sock) -error]" 1 + } else { + set state(status) connect + fileevent $state(sock) writable {} + } + return +} + +# http::Write +# +# Write POST query data to the socket +# +# Arguments +# token The token for the connection +# +# Side Effects +# Write the socket and handle callbacks. + +proc http::Write {token} { + variable $token + upvar 0 $token state + set sock $state(sock) + + # Output a block. Tcl will buffer this if the socket blocks + set done 0 + if {[catch { + # Catch I/O errors on dead sockets + + if {[info exists state(-query)]} { + # Chop up large query strings so queryprogress callback can give + # smooth feedback. + + puts -nonewline $sock \ + [string range $state(-query) $state(queryoffset) \ + [expr {$state(queryoffset) + $state(-queryblocksize) - 1}]] + incr state(queryoffset) $state(-queryblocksize) + if {$state(queryoffset) >= $state(querylength)} { + set state(queryoffset) $state(querylength) + puts $sock "" + set done 1 + } + } else { + # Copy blocks from the query channel + + set outStr [read $state(-querychannel) $state(-queryblocksize)] + puts -nonewline $sock $outStr + incr state(queryoffset) [string length $outStr] + if {[eof $state(-querychannel)]} { + set done 1 + } + } + } err]} { + # Do not call Finish here, but instead let the read half of the socket + # process whatever server reply there is to get. + + set state(posterror) $err + set done 1 + } + if {$done} { + catch {flush $sock} + fileevent $sock writable {} + fileevent $sock readable [list http::Event $sock $token] + } + + # Callback to the client after we've completely handled everything. + + if {[string length $state(-queryprogress)]} { + eval $state(-queryprogress) \ + [list $token $state(querylength) $state(queryoffset)] + } +} + +# http::Event +# +# Handle input on the socket +# +# Arguments +# sock The socket receiving input. +# token The token returned from http::geturl +# +# Side Effects +# Read the socket and handle callbacks. + +proc http::Event {sock token} { + variable $token + upvar 0 $token state + + if {![info exists state]} { + Log "Event $sock with invalid token '$token' - remote close?" + if {! [eof $sock]} { + if {[string length [set d [read $sock]]] != 0} { + Log "WARNING: additional data left on closed socket" + } + } + CloseSocket $sock + return + } + if {$state(state) eq "connecting"} { + set state(state) "header" + if {[catch {gets $sock state(http)} n]} { + return [Finish $token $n] + } + } elseif {$state(state) eq "header"} { + if {[catch {gets $sock line} n]} { + return [Finish $token $n] + } elseif {$n == 0} { + # We have now read all headers + # We ignore HTTP/1.1 100 Continue returns. RFC2616 sec 8.2.3 + if {$state(http) == "" || [lindex $state(http) 1] == 100} { return } + + set state(state) body + + # If doing a HEAD, then we won't get any body + if {$state(-validate)} { + Eof $token + return + } + + # For non-chunked transfer we may have no body -- in this case we + # may get no further file event if the connection doesn't close and + # no more data is sent. We can tell and must finish up now - not + # later. + if {!(([info exists state(connection)] + && ($state(connection) eq "close")) + || [info exists state(transfer)]) + && $state(totalsize) == 0 + } then { + Log "body size is 0 and no events likely - complete." + Eof $token + return + } + + # We have to use binary translation to count bytes properly. + fconfigure $sock -translation binary + + if {$state(-binary) || ![string match -nocase text* $state(type)]} { + # Turn off conversions for non-text data + set state(binary) 1 + } + if {$state(binary) || [string match *gzip* $state(coding)] + || [string match *compress* $state(coding)]} { + if {[info exists state(-channel)]} { + fconfigure $state(-channel) -translation binary + } + } + if {[info exists state(-channel)] && + ![info exists state(-handler)]} { + # Initiate a sequence of background fcopies + fileevent $sock readable {} + CopyStart $sock $token + return + } + } elseif {$n > 0} { + # Process header lines + if {[regexp -nocase {^([^:]+):(.+)$} $line x key value]} { + switch -- [string tolower $key] { + content-type { + set state(type) [string trim [string tolower $value]] + # grab the optional charset information + regexp -nocase {charset\s*=\s*(\S+?);?} \ + $state(type) -> state(charset) + } + content-length { + set state(totalsize) [string trim $value] + } + content-encoding { + set state(coding) [string trim $value] + } + transfer-encoding { + set state(transfer) \ + [string trim [string tolower $value]] + } + proxy-connection - + connection { + set state(connection) \ + [string trim [string tolower $value]] + } + } + lappend state(meta) $key [string trim $value] + } + } + } else { + # Now reading body + if {[catch { + if {[info exists state(-handler)]} { + set n [eval $state(-handler) [list $sock $token]] + } elseif {[info exists state(transfer_final)]} { + set line [getTextLine $sock] + set n [string length $line] + if {$n > 0} { + Log "found $n bytes following final chunk" + append state(transfer_final) $line + } else { + Log "final chunk part" + Eof $token + } + } elseif {[info exists state(transfer)] + && $state(transfer) eq "chunked"} { + set size 0 + set chunk [getTextLine $sock] + set n [string length $chunk] + if {[string trim $chunk] ne ""} { + scan $chunk %x size + if {$size != 0} { + set bl [fconfigure $sock -blocking] + fconfigure $sock -blocking 1 + set chunk [read $sock $size] + fconfigure $sock -blocking $bl + set n [string length $chunk] + if {$n >= 0} { + append state(body) $chunk + } + if {$size != [string length $chunk]} { + Log "WARNING: mis-sized chunk:\ + was [string length $chunk], should be $size" + } + getTextLine $sock + } else { + set state(transfer_final) {} + } + } + } else { + #Log "read non-chunk $state(currentsize) of $state(totalsize)" + set block [read $sock $state(-blocksize)] + set n [string length $block] + if {$n >= 0} { + append state(body) $block + } + } + if {[info exists state]} { + if {$n >= 0} { + incr state(currentsize) $n + } + # If Content-Length - check for end of data. + if {($state(totalsize) > 0) + && ($state(currentsize) >= $state(totalsize))} { + Eof $token + } + } + } err]} { + return [Finish $token $err] + } else { + if {[info exists state(-progress)]} { + eval $state(-progress) \ + [list $token $state(totalsize) $state(currentsize)] + } + } + } + + # catch as an Eof above may have closed the socket already + if {![catch {eof $sock} eof] && $eof} { + if {[info exists $token]} { + set state(connection) close + Eof $token + } else { + # open connection closed on a token that has been cleaned up. + CloseSocket $sock + } + return + } +} + +# http::getTextLine -- +# +# Get one line with the stream in blocking crlf mode +# +# Arguments +# sock The socket receiving input. +# +# Results: +# The line of text, without trailing newline + +proc http::getTextLine {sock} { + set tr [fconfigure $sock -translation] + set bl [fconfigure $sock -blocking] + fconfigure $sock -translation crlf -blocking 1 + set r [gets $sock] + fconfigure $sock -translation $tr -blocking $bl + return $r +} + +# http::CopyStart +# +# Error handling wrapper around fcopy +# +# Arguments +# sock The socket to copy from +# token The token returned from http::geturl +# +# Side Effects +# This closes the connection upon error + +proc http::CopyStart {sock token} { + variable $token + upvar 0 $token state + if {[catch { + fcopy $sock $state(-channel) -size $state(-blocksize) -command \ + [list http::CopyDone $token] + } err]} { + Finish $token $err + } +} + +# http::CopyDone +# +# fcopy completion callback +# +# Arguments +# token The token returned from http::geturl +# count The amount transfered +# +# Side Effects +# Invokes callbacks + +proc http::CopyDone {token count {error {}}} { + variable $token + upvar 0 $token state + set sock $state(sock) + incr state(currentsize) $count + if {[info exists state(-progress)]} { + eval $state(-progress) \ + [list $token $state(totalsize) $state(currentsize)] + } + # At this point the token may have been reset + if {[string length $error]} { + Finish $token $error + } elseif {[catch {eof $sock} iseof] || $iseof} { + Eof $token + } else { + CopyStart $sock $token + } +} + +# http::Eof +# +# Handle eof on the socket +# +# Arguments +# token The token returned from http::geturl +# +# Side Effects +# Clean up the socket + +proc http::Eof {token {force 0}} { + variable $token + upvar 0 $token state + if {$state(state) eq "header"} { + # Premature eof + set state(status) eof + } else { + set state(status) ok + } + + if {($state(coding) eq "gzip") && [string length $state(body)] > 0} { + if {[catch { + set state(body) [Gunzip $state(body)] + } err]} { + return [Finish $token $err] + } + } + + if {!$state(binary)} { + + # If we are getting text, set the incoming channel's + # encoding correctly. iso8859-1 is the RFC default, but + # this could be any IANA charset. However, we only know + # how to convert what we have encodings for. + + set enc [CharsetToEncoding $state(charset)] + if {$enc ne "binary"} { + set state(body) [encoding convertfrom $enc $state(body)] + } + + # Translate text line endings. + set state(body) [string map {\r\n \n \r \n} $state(body)] + } + + Finish $token +} + +# http::wait -- +# +# See documentation for details. +# +# Arguments: +# token Connection token. +# +# Results: +# The status after the wait. + +proc http::wait {token} { + variable $token + upvar 0 $token state + + if {![info exists state(status)] || $state(status) eq ""} { + # We must wait on the original variable name, not the upvar alias + vwait ${token}(status) + } + + return [status $token] +} + +# http::formatQuery -- +# +# See documentation for details. Call http::formatQuery with an even +# number of arguments, where the first is a name, the second is a value, +# the third is another name, and so on. +# +# Arguments: +# args A list of name-value pairs. +# +# Results: +# TODO + +proc http::formatQuery {args} { + set result "" + set sep "" + foreach i $args { + append result $sep [mapReply $i] + if {$sep eq "="} { + set sep & + } else { + set sep = + } + } + return $result +} + +# http::mapReply -- +# +# Do x-www-urlencoded character mapping +# +# Arguments: +# string The string the needs to be encoded +# +# Results: +# The encoded string + +proc http::mapReply {string} { + variable http + variable formMap + + # The spec says: "non-alphanumeric characters are replaced by '%HH'". Use + # a pre-computed map and [string map] to do the conversion (much faster + # than [regsub]/[subst]). [Bug 1020491] + + if {$http(-urlencoding) ne ""} { + set string [encoding convertto $http(-urlencoding) $string] + return [string map $formMap $string] + } + set converted [string map $formMap $string] + if {[string match "*\[\u0100-\uffff\]*" $converted]} { + regexp {[\u0100-\uffff]} $converted badChar + # Return this error message for maximum compatability... :^/ + return -code error \ + "can't read \"formMap($badChar)\": no such element in array" + } + return $converted +} + +# http::ProxyRequired -- +# Default proxy filter. +# +# Arguments: +# host The destination host +# +# Results: +# The current proxy settings + +proc http::ProxyRequired {host} { + variable http + if {[info exists http(-proxyhost)] && [string length $http(-proxyhost)]} { + if {![info exists http(-proxyport)] || \ + ![string length $http(-proxyport)]} { + set http(-proxyport) 8080 + } + return [list $http(-proxyhost) $http(-proxyport)] + } +} + +# http::CharsetToEncoding -- +# +# Tries to map a given IANA charset to a tcl encoding. +# If no encoding can be found, returns binary. +# + +proc http::CharsetToEncoding {charset} { + variable encodings + + set charset [string tolower $charset] + if {[regexp {iso-?8859-([0-9]+)} $charset - num]} { + set encoding "iso8859-$num" + } elseif {[regexp {iso-?2022-(jp|kr)} $charset - ext]} { + set encoding "iso2022-$ext" + } elseif {[regexp {shift[-_]?js} $charset -]} { + set encoding "shiftjis" + } elseif {[regexp {(windows|cp)-?([0-9]+)} $charset - - num]} { + set encoding "cp$num" + } elseif {$charset eq "us-ascii"} { + set encoding "ascii" + } elseif {[regexp {(iso-?)?lat(in)?-?([0-9]+)} $charset - - - num]} { + switch -- $num { + 5 {set encoding "iso8859-9"} + 1 - + 2 - + 3 {set encoding "iso8859-$num"} + } + } else { + # other charset, like euc-xx, utf-8,... may directly maps to encoding + set encoding $charset + } + set idx [lsearch -exact $encodings $encoding] + if {$idx >= 0} { + return $encoding + } else { + return "binary" + } +} + +# http::Gunzip -- +# +# Decompress data transmitted using the gzip transfer coding. +# + +# FIX ME: redo using zlib sinflate +proc http::Gunzip {data} { + binary scan $data Scb5icc magic method flags time xfl os + set pos 10 + if {$magic != 0x1f8b} { + return -code error "invalid data: supplied data is not in gzip format" + } + if {$method != 8} { + return -code error "invalid compression method" + } + + foreach {f_text f_crc f_extra f_name f_comment} [split $flags ""] break + set extra "" + if { $f_extra } { + binary scan $data @${pos}S xlen + incr pos 2 + set extra [string range $data $pos $xlen] + set pos [incr xlen] + } + + set name "" + if { $f_name } { + set ndx [string first \0 $data $pos] + set name [string range $data $pos $ndx] + set pos [incr ndx] + } + + set comment "" + if { $f_comment } { + set ndx [string first \0 $data $pos] + set comment [string range $data $pos $ndx] + set pos [incr ndx] + } + + set fcrc "" + if { $f_crc } { + set fcrc [string range $data $pos [incr pos]] + incr pos + } + + binary scan [string range $data end-7 end] ii crc size + set inflated [zlib inflate [string range $data $pos end-8]] + set chk [zlib crc32 $inflated] + if { ($crc & 0xffffffff) != ($chk & 0xffffffff)} { + return -code error "invalid data: checksum mismatch $crc != $chk" + } + return $inflated +} + +# Local variables: +# indent-tabs-mode: t +# End: Added: trunk/amsn/utils/http/license.terms =================================================================== --- trunk/amsn/utils/http/license.terms (rev 0) +++ trunk/amsn/utils/http/license.terms 2008-11-13 23:30:34 UTC (rev 10723) @@ -0,0 +1,38 @@ +This software is copyrighted by Ajuba Solutions and other parties. +The following terms apply to all files associated with the software unless +explicitly disclaimed in individual files. + +The authors hereby grant permission to use, copy, modify, distribute, +and license this software and its documentation for any purpose, provided +that existing copyright notices are retained in all copies and that this +notice is included verbatim in any distributions. No written agreement, +license, or royalty fee is required for any of the authorized uses. +Modifications to this software may be copyrighted by their authors +and need not follow the licensing terms described here, provided that +the new terms are clearly indicated on the first page of each file where +they apply. + +IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY +FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES +ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY +DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE +IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE +NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR +MODIFICATIONS. + +GOVERNMENT USE: If you are acquiring this software on behalf of the +U.S. government, the Government shall have only "Restricted Rights" +in the software and related documentation as defined in the Federal +Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2). If you +are acquiring the software on behalf of the Department of Defense, the +software shall be classified as "Commercial Computer Software" and the +Government shall have only "Restricted Rights" as defined in Clause +252.227-7013 (c) (1) of DFARs. Notwithstanding the foregoing, the +authors grant the U.S. Government and others acting in its behalf +permission to use and distribute the software in accordance with the +terms specified in this license. Added: trunk/amsn/utils/http/pkgIndex.tcl =================================================================== --- trunk/amsn/utils/http/pkgIndex.tcl (rev 0) +++ trunk/amsn/utils/http/pkgIndex.tcl 2008-11-13 23:30:34 UTC (rev 10723) @@ -0,0 +1,4 @@ +# Tcl package index file, version 1.1 + +if {![package vsatisfies [package provide Tcl] 8.4]} {return} +package ifneeded http 2.7.2 [list tclPkgSetup $dir http 2.7.2 {{http.tcl source {::http::config ::http::formatQuery ::http::geturl ::http::reset ::http::wait ::http::register ::http::unregister ::http::mapReply}}}] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tom...@us...> - 2008-11-18 02:15:23
|
Revision: 10734 http://amsn.svn.sourceforge.net/amsn/?rev=10734&view=rev Author: tomhennigan Date: 2008-11-18 02:15:19 +0000 (Tue, 18 Nov 2008) Log Message: ----------- Farsight+Gstreamer intel dylibs! Finally! Not working "out of the box" just yet, but we'll get there. See: http://amsn-project.net/wiki/Farsight#Mac - DYLD_LIBRARY_PATH issue not resolved, it's 2am so I'll come back to it tomorrow =) Modified Paths: -------------- trunk/amsn/utils/farsight/pkgIndex.tcl Added Paths: ----------- trunk/amsn/utils/farsight/tcl_farsight.dylib trunk/amsn/utils/macosx/gstreamer/ trunk/amsn/utils/macosx/gstreamer/i386/ trunk/amsn/utils/macosx/gstreamer/i386/libORBit-2.0.dylib trunk/amsn/utils/macosx/gstreamer/i386/libdbus-1.3.dylib trunk/amsn/utils/macosx/gstreamer/i386/libdbus-glib-1.2.dylib trunk/amsn/utils/macosx/gstreamer/i386/libglib-2.0.0.dylib trunk/amsn/utils/macosx/gstreamer/i386/libgmodule-2.0.0.dylib trunk/amsn/utils/macosx/gstreamer/i386/libgobject-2.0.0.dylib trunk/amsn/utils/macosx/gstreamer/i386/libgpg-error.0.dylib trunk/amsn/utils/macosx/gstreamer/i386/libgstaudio-0.10.0.dylib trunk/amsn/utils/macosx/gstreamer/i386/libgstbase-0.10.0.dylib trunk/amsn/utils/macosx/gstreamer/i386/libgstfarsight-0.10.0.dylib trunk/amsn/utils/macosx/gstreamer/i386/libgstinterfaces-0.10.0.dylib trunk/amsn/utils/macosx/gstreamer/i386/libgstnetbuffer-0.10.0.dylib trunk/amsn/utils/macosx/gstreamer/i386/libgstreamer-0.10.0.dylib trunk/amsn/utils/macosx/gstreamer/i386/libgstrtp-0.10.0.dylib trunk/amsn/utils/macosx/gstreamer/i386/libgthread-2.0.0.dylib trunk/amsn/utils/macosx/gstreamer/i386/libiconv.2.dylib trunk/amsn/utils/macosx/gstreamer/i386/libintl.8.dylib trunk/amsn/utils/macosx/gstreamer/i386/libnice.0.dylib trunk/amsn/utils/macosx/gstreamer/i386/liboil-0.3.0.dylib trunk/amsn/utils/macosx/gstreamer/i386/libssl.0.9.8.dylib trunk/amsn/utils/macosx/gstreamer/i386/libxml2.2.dylib Modified: trunk/amsn/utils/farsight/pkgIndex.tcl =================================================================== --- trunk/amsn/utils/farsight/pkgIndex.tcl 2008-11-17 20:51:01 UTC (rev 10733) +++ trunk/amsn/utils/farsight/pkgIndex.tcl 2008-11-18 02:15:19 UTC (rev 10734) @@ -2,4 +2,11 @@ if {[package vcompare [info tclversion] 8.4] < 0} return -package ifneeded Farsight 0.1 "[list load [file join $dir tcl_farsight[info shared]] Farsight];package provide Farsight 0.1" +# TEMP! fix for ppc macs while they aren't supported will be removed soon. +if { [OnMac] } { + if { $::tcl_platform(byteOrder) == "bigEndian" } { + set dir [file join $dir "disabled_on_ppc"] + } +} + +package ifneeded Farsight 0.1 "[list load [file join $dir tcl_farsight[info shared]] Farsight]; package provide Farsight 0.1" Added: trunk/amsn/utils/farsight/tcl_farsight.dylib =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/farsight/tcl_farsight.dylib ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Added: trunk/amsn/utils/macosx/gstreamer/i386/libORBit-2.0.dylib =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libORBit-2.0.dylib ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Added: trunk/amsn/utils/macosx/gstreamer/i386/libdbus-1.3.dylib =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libdbus-1.3.dylib ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Added: trunk/amsn/utils/macosx/gstreamer/i386/libdbus-glib-1.2.dylib =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libdbus-glib-1.2.dylib ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Added: trunk/amsn/utils/macosx/gstreamer/i386/libglib-2.0.0.dylib =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libglib-2.0.0.dylib ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Added: trunk/amsn/utils/macosx/gstreamer/i386/libgmodule-2.0.0.dylib =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libgmodule-2.0.0.dylib ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Added: trunk/amsn/utils/macosx/gstreamer/i386/libgobject-2.0.0.dylib =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libgobject-2.0.0.dylib ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Added: trunk/amsn/utils/macosx/gstreamer/i386/libgpg-error.0.dylib =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libgpg-error.0.dylib ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Added: trunk/amsn/utils/macosx/gstreamer/i386/libgstaudio-0.10.0.dylib =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libgstaudio-0.10.0.dylib ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Added: trunk/amsn/utils/macosx/gstreamer/i386/libgstbase-0.10.0.dylib =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libgstbase-0.10.0.dylib ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Added: trunk/amsn/utils/macosx/gstreamer/i386/libgstfarsight-0.10.0.dylib =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libgstfarsight-0.10.0.dylib ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Added: trunk/amsn/utils/macosx/gstreamer/i386/libgstinterfaces-0.10.0.dylib =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libgstinterfaces-0.10.0.dylib ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Added: trunk/amsn/utils/macosx/gstreamer/i386/libgstnetbuffer-0.10.0.dylib =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libgstnetbuffer-0.10.0.dylib ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Added: trunk/amsn/utils/macosx/gstreamer/i386/libgstreamer-0.10.0.dylib =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libgstreamer-0.10.0.dylib ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Added: trunk/amsn/utils/macosx/gstreamer/i386/libgstrtp-0.10.0.dylib =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libgstrtp-0.10.0.dylib ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Added: trunk/amsn/utils/macosx/gstreamer/i386/libgthread-2.0.0.dylib =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libgthread-2.0.0.dylib ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Added: trunk/amsn/utils/macosx/gstreamer/i386/libiconv.2.dylib =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libiconv.2.dylib ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/amsn/utils/macosx/gstreamer/i386/libintl.8.dylib =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libintl.8.dylib ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Added: trunk/amsn/utils/macosx/gstreamer/i386/libnice.0.dylib =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libnice.0.dylib ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Added: trunk/amsn/utils/macosx/gstreamer/i386/liboil-0.3.0.dylib =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/liboil-0.3.0.dylib ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Added: trunk/amsn/utils/macosx/gstreamer/i386/libssl.0.9.8.dylib =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libssl.0.9.8.dylib ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Added: trunk/amsn/utils/macosx/gstreamer/i386/libxml2.2.dylib =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libxml2.2.dylib ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tom...@us...> - 2008-11-19 17:52:52
|
Revision: 10738 http://amsn.svn.sourceforge.net/amsn/?rev=10738&view=rev Author: tomhennigan Date: 2008-11-19 17:52:46 +0000 (Wed, 19 Nov 2008) Log Message: ----------- Okay now farsight2 and gstreamer will work "out of the box". Setting DYLD_LIBRARY_PATH isn't taken up unless we set it before launch?! So I remapped all the dylibs we used to link to internal dylibs that we ship with aMSN. Modified Paths: -------------- trunk/amsn/utils/farsight/tcl_farsight.dylib trunk/amsn/utils/macosx/gstreamer/i386/libORBit-2.0.dylib trunk/amsn/utils/macosx/gstreamer/i386/libdbus-glib-1.2.dylib trunk/amsn/utils/macosx/gstreamer/i386/libglib-2.0.0.dylib trunk/amsn/utils/macosx/gstreamer/i386/libgmodule-2.0.0.dylib trunk/amsn/utils/macosx/gstreamer/i386/libgobject-2.0.0.dylib trunk/amsn/utils/macosx/gstreamer/i386/libgpg-error.0.dylib trunk/amsn/utils/macosx/gstreamer/i386/libgstaudio-0.10.0.dylib trunk/amsn/utils/macosx/gstreamer/i386/libgstbase-0.10.0.dylib trunk/amsn/utils/macosx/gstreamer/i386/libgstfarsight-0.10.0.dylib trunk/amsn/utils/macosx/gstreamer/i386/libgstinterfaces-0.10.0.dylib trunk/amsn/utils/macosx/gstreamer/i386/libgstnetbuffer-0.10.0.dylib trunk/amsn/utils/macosx/gstreamer/i386/libgstreamer-0.10.0.dylib trunk/amsn/utils/macosx/gstreamer/i386/libgstrtp-0.10.0.dylib trunk/amsn/utils/macosx/gstreamer/i386/libgthread-2.0.0.dylib trunk/amsn/utils/macosx/gstreamer/i386/libintl.8.dylib trunk/amsn/utils/macosx/gstreamer/i386/libnice.0.dylib trunk/amsn/utils/macosx/gstreamer/i386/libssl.0.9.8.dylib trunk/amsn/utils/macosx/gstreamer/i386/libxml2.2.dylib Added Paths: ----------- trunk/amsn/utils/macosx/gstreamer/i386/libcrypto.0.9.8.dylib trunk/amsn/utils/macosx/gstreamer/i386/libfsfunnel.so trunk/amsn/utils/macosx/gstreamer/i386/libfsrtpconference.so trunk/amsn/utils/macosx/gstreamer/i386/libfsvalve.so trunk/amsn/utils/macosx/gstreamer/i386/libgconf-2.4.dylib trunk/amsn/utils/macosx/gstreamer/i386/libgstaudioconvert.so trunk/amsn/utils/macosx/gstreamer/i386/libgstaudioresample.so trunk/amsn/utils/macosx/gstreamer/i386/libgstautodetect.so trunk/amsn/utils/macosx/gstreamer/i386/libgstcoreelements.so trunk/amsn/utils/macosx/gstreamer/i386/libgstnice.so trunk/amsn/utils/macosx/gstreamer/i386/libgstosxaudio.so trunk/amsn/utils/macosx/gstreamer/i386/libgstrtpmanager.so trunk/amsn/utils/macosx/gstreamer/i386/libgstrtpmuxer.so trunk/amsn/utils/macosx/gstreamer/i386/libgstsiren.so trunk/amsn/utils/macosx/gstreamer/i386/libnice-transmitter.so trunk/amsn/utils/macosx/gstreamer/i386/libz.1.dylib Modified: trunk/amsn/utils/farsight/tcl_farsight.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/macosx/gstreamer/i386/libORBit-2.0.dylib =================================================================== (Binary files differ) Added: trunk/amsn/utils/macosx/gstreamer/i386/libcrypto.0.9.8.dylib =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libcrypto.0.9.8.dylib ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Modified: trunk/amsn/utils/macosx/gstreamer/i386/libdbus-glib-1.2.dylib =================================================================== (Binary files differ) Added: trunk/amsn/utils/macosx/gstreamer/i386/libfsfunnel.so =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libfsfunnel.so ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Added: trunk/amsn/utils/macosx/gstreamer/i386/libfsrtpconference.so =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libfsrtpconference.so ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Added: trunk/amsn/utils/macosx/gstreamer/i386/libfsvalve.so =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libfsvalve.so ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Added: trunk/amsn/utils/macosx/gstreamer/i386/libgconf-2.4.dylib =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libgconf-2.4.dylib ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Modified: trunk/amsn/utils/macosx/gstreamer/i386/libglib-2.0.0.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/macosx/gstreamer/i386/libgmodule-2.0.0.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/macosx/gstreamer/i386/libgobject-2.0.0.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/macosx/gstreamer/i386/libgpg-error.0.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/macosx/gstreamer/i386/libgstaudio-0.10.0.dylib =================================================================== (Binary files differ) Added: trunk/amsn/utils/macosx/gstreamer/i386/libgstaudioconvert.so =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libgstaudioconvert.so ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Added: trunk/amsn/utils/macosx/gstreamer/i386/libgstaudioresample.so =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libgstaudioresample.so ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Added: trunk/amsn/utils/macosx/gstreamer/i386/libgstautodetect.so =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libgstautodetect.so ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Modified: trunk/amsn/utils/macosx/gstreamer/i386/libgstbase-0.10.0.dylib =================================================================== (Binary files differ) Added: trunk/amsn/utils/macosx/gstreamer/i386/libgstcoreelements.so =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libgstcoreelements.so ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Modified: trunk/amsn/utils/macosx/gstreamer/i386/libgstfarsight-0.10.0.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/macosx/gstreamer/i386/libgstinterfaces-0.10.0.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/macosx/gstreamer/i386/libgstnetbuffer-0.10.0.dylib =================================================================== (Binary files differ) Added: trunk/amsn/utils/macosx/gstreamer/i386/libgstnice.so =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libgstnice.so ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Added: trunk/amsn/utils/macosx/gstreamer/i386/libgstosxaudio.so =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libgstosxaudio.so ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Modified: trunk/amsn/utils/macosx/gstreamer/i386/libgstreamer-0.10.0.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/macosx/gstreamer/i386/libgstrtp-0.10.0.dylib =================================================================== (Binary files differ) Added: trunk/amsn/utils/macosx/gstreamer/i386/libgstrtpmanager.so =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libgstrtpmanager.so ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Added: trunk/amsn/utils/macosx/gstreamer/i386/libgstrtpmuxer.so =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libgstrtpmuxer.so ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Added: trunk/amsn/utils/macosx/gstreamer/i386/libgstsiren.so =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libgstsiren.so ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Modified: trunk/amsn/utils/macosx/gstreamer/i386/libgthread-2.0.0.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/macosx/gstreamer/i386/libintl.8.dylib =================================================================== (Binary files differ) Added: trunk/amsn/utils/macosx/gstreamer/i386/libnice-transmitter.so =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libnice-transmitter.so ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Modified: trunk/amsn/utils/macosx/gstreamer/i386/libnice.0.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/macosx/gstreamer/i386/libssl.0.9.8.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/macosx/gstreamer/i386/libxml2.2.dylib =================================================================== (Binary files differ) Added: trunk/amsn/utils/macosx/gstreamer/i386/libz.1.dylib =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libz.1.dylib ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <tom...@us...> - 2008-11-20 22:11:06
|
Revision: 10748 http://amsn.svn.sourceforge.net/amsn/?rev=10748&view=rev Author: tomhennigan Date: 2008-11-20 22:11:04 +0000 (Thu, 20 Nov 2008) Log Message: ----------- Update tcl_farsight to reflect new changes in code. Modified Paths: -------------- trunk/amsn/utils/farsight/tcl_farsight.dylib Added Paths: ----------- trunk/amsn/utils/macosx/gstreamer/i386/libgstcontroller-0.10.0.dylib Modified: trunk/amsn/utils/farsight/tcl_farsight.dylib =================================================================== (Binary files differ) Added: trunk/amsn/utils/macosx/gstreamer/i386/libgstcontroller-0.10.0.dylib =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/macosx/gstreamer/i386/libgstcontroller-0.10.0.dylib ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kak...@us...> - 2008-11-22 03:40:59
|
Revision: 10750 http://amsn.svn.sourceforge.net/amsn/?rev=10750&view=rev Author: kakaroto Date: 2008-11-22 03:40:51 +0000 (Sat, 22 Nov 2008) Log Message: ----------- Updating windows binaries with the newer libnice and farsight. Also recompiled tcl_farsight for the latest features. Modified Paths: -------------- trunk/amsn/utils/farsight/tcl_farsight.dll trunk/amsn/utils/windows/gstreamer/libfsfunnel.dll trunk/amsn/utils/windows/gstreamer/libfsrtpconference.dll trunk/amsn/utils/windows/gstreamer/libgstfarsight-0.10.dll trunk/amsn/utils/windows/gstreamer/libgstnice.dll trunk/amsn/utils/windows/gstreamer/libnice-transmitter.dll trunk/amsn/utils/windows/gstreamer/libnice.dll Modified: trunk/amsn/utils/farsight/tcl_farsight.dll =================================================================== (Binary files differ) Modified: trunk/amsn/utils/windows/gstreamer/libfsfunnel.dll =================================================================== (Binary files differ) Modified: trunk/amsn/utils/windows/gstreamer/libfsrtpconference.dll =================================================================== (Binary files differ) Modified: trunk/amsn/utils/windows/gstreamer/libgstfarsight-0.10.dll =================================================================== (Binary files differ) Modified: trunk/amsn/utils/windows/gstreamer/libgstnice.dll =================================================================== (Binary files differ) Modified: trunk/amsn/utils/windows/gstreamer/libnice-transmitter.dll =================================================================== (Binary files differ) Modified: trunk/amsn/utils/windows/gstreamer/libnice.dll =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kak...@us...> - 2008-11-30 10:19:49
|
Revision: 10777 http://amsn.svn.sourceforge.net/amsn/?rev=10777&view=rev Author: kakaroto Date: 2008-11-30 10:19:39 +0000 (Sun, 30 Nov 2008) Log Message: ----------- Updating windows binaries to work with the volume and the level for farsight. Modified Paths: -------------- trunk/amsn/utils/farsight/tcl_farsight.dll trunk/amsn/utils/windows/gstreamer/libgstbase-0.10.dll trunk/amsn/utils/windows/gstreamer/libgstfarsight-0.10.dll trunk/amsn/utils/windows/gstreamer/libgstnice.dll trunk/amsn/utils/windows/gstreamer/libgstreamer-0.10.dll trunk/amsn/utils/windows/gstreamer/libnice-transmitter.dll trunk/amsn/utils/windows/gstreamer/libnice.dll trunk/amsn/utils/windows/gstreamer/liboil-0.3-0.dll Added Paths: ----------- trunk/amsn/utils/windows/gstreamer/libgstlevel.dll trunk/amsn/utils/windows/gstreamer/libgstvolume.dll Modified: trunk/amsn/utils/farsight/tcl_farsight.dll =================================================================== (Binary files differ) Modified: trunk/amsn/utils/windows/gstreamer/libgstbase-0.10.dll =================================================================== (Binary files differ) Modified: trunk/amsn/utils/windows/gstreamer/libgstfarsight-0.10.dll =================================================================== (Binary files differ) Added: trunk/amsn/utils/windows/gstreamer/libgstlevel.dll =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/windows/gstreamer/libgstlevel.dll ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Modified: trunk/amsn/utils/windows/gstreamer/libgstnice.dll =================================================================== (Binary files differ) Modified: trunk/amsn/utils/windows/gstreamer/libgstreamer-0.10.dll =================================================================== (Binary files differ) Added: trunk/amsn/utils/windows/gstreamer/libgstvolume.dll =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/windows/gstreamer/libgstvolume.dll ___________________________________________________________________ Added: svn:mime-type + application/octet-stream Modified: trunk/amsn/utils/windows/gstreamer/libnice-transmitter.dll =================================================================== (Binary files differ) Modified: trunk/amsn/utils/windows/gstreamer/libnice.dll =================================================================== (Binary files differ) Modified: trunk/amsn/utils/windows/gstreamer/liboil-0.3-0.dll =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <bi...@us...> - 2009-01-18 20:31:49
|
Revision: 10852 http://amsn.svn.sourceforge.net/amsn/?rev=10852&view=rev Author: billiob Date: 2009-01-18 20:31:45 +0000 (Sun, 18 Jan 2009) Log Message: ----------- add a custom widget to show and set sound level Added Paths: ----------- trunk/amsn/utils/tksoundmixer/ trunk/amsn/utils/tksoundmixer/pkgIndex.tcl trunk/amsn/utils/tksoundmixer/test.tcl trunk/amsn/utils/tksoundmixer/tksoundmixer.tcl Added: trunk/amsn/utils/tksoundmixer/pkgIndex.tcl =================================================================== --- trunk/amsn/utils/tksoundmixer/pkgIndex.tcl (rev 0) +++ trunk/amsn/utils/tksoundmixer/pkgIndex.tcl 2009-01-18 20:31:45 UTC (rev 10852) @@ -0,0 +1,6 @@ +package ifneeded tksoundmixer 0.1 [ format { + set olddir [pwd] + cd "%s" + source [file join tksoundmixer.tcl] + cd $olddir +} [list $dir]] Added: trunk/amsn/utils/tksoundmixer/test.tcl =================================================================== --- trunk/amsn/utils/tksoundmixer/test.tcl (rev 0) +++ trunk/amsn/utils/tksoundmixer/test.tcl 2009-01-18 20:31:45 UTC (rev 10852) @@ -0,0 +1,31 @@ +#!/usr/bin/env wish + +lappend auto_path "../" +package require tksoundmixer + + +#wm attributes +wm title . "tksoundmixer test" +wm geometry . 200x200 +update + +variable var + +set var 0.75 + +tksoundmixer .sm -variable var -width 10 -height 100 + +pack .sm -expand 1 -fill both + + +proc timer {sm limit delay {value 0}} { + variable var + puts $var + $sm SetProgress $value $limit + incr value + if {$value >= $limit} {set value 0} + after $delay [list timer $sm $limit $delay $value] +} + +timer .sm 62 200 + Added: trunk/amsn/utils/tksoundmixer/tksoundmixer.tcl =================================================================== --- trunk/amsn/utils/tksoundmixer/tksoundmixer.tcl (rev 0) +++ trunk/amsn/utils/tksoundmixer/tksoundmixer.tcl 2009-01-18 20:31:45 UTC (rev 10852) @@ -0,0 +1,123 @@ + + +package require snit +package provide tksoundmixer 0.1 + + +snit::widget tksoundmixer { + + variable frame + variable progressPercent + variable progressRange + variable deltaY + variable varname + + option -from -default 0 + option -to -default 100 + option -orient -default "vertical" + + option -width -default 15 -configuremethod SetWidth + option -levelheight -default 5 -configuremethod SetLevelHeight + option -height -default 150 -configuremethod SetHeight + option -variable -default {} + + constructor {args} { + set frame [frame ${win}.mainframe] + pack $frame + + $self configurelist $args + + #add abbreviations + if { ($options(-orient) == "v") || ($options(-orient) == "vert") } { + set options(-orient) "vertical" + } + + if { $options(-orient) == "vertical" } { + set orientation "vertical" + } else { + set orientation "horizontal" + } + + frame ${frame}.fill + place ${frame}.fill -x 0 -y 0 -relheight 1 -relwidth 1 + + frame ${frame}.level -background black + if {[info exists ::$options(-variable)] && [set ::$options(-variable)]<1 && [set ::$options(-variable)] >0} { + place ${frame}.level -relx 0 -rely [expr {1-[set ::$options(-variable)]}] -relwidth 1 -height $options(-levelheight) + } else { + place ${frame}.level -relx 0 -rely 0.5 -relwidth 1 -height $options(-levelheight) + } + + bind ${frame}.level <B1-Motion> "$self Motion" + } + + destructor { + } + + method Motion {} { + set height [winfo height ${frame}] + set max [expr {1-double($options(-levelheight))/double(${height})}] + set rely [expr {double([winfo pointery ${frame}] - [winfo rooty ${frame}])/double(${height})}] + if {$rely > $max} { + set rely $max + } else { + if {$rely < 0} { + set rely 0 + } + } + place configure ${frame}.level -rely $rely + if {[info exists ::$options(-variable)]} { + set ::$options(-variable) [expr {1-$rely/$max}] + } + } + + method SetLevelHeight {options value} { + set options($option) $value + ${frame}.level configure -height $value + } + + method SetWidth {option value} { + set options($option) $value + ${frame} configure -width $value + #update + if {[winfo exists ${frame}.level]} { + $self Motion + $self SetProgress $progressPercent $progressRange + } + } + + method SetHeight {option value} { + set options($option) $value + ${frame} configure -height $value + #update + if {[winfo exists ${frame}.level]} { + $self Motion + $self SetProgress $progressPercent $progressRange + } + } + + method SetProgress {value {range 100}} { + set relsize [expr {double($value)/double($range)}] + set progressPercent $value + set progressRange $range + if { $options(-orient) == "vertical" } { + place conf $frame.fill -relheight $relsize + place conf $frame.fill -rely [expr {1-$relsize}] + } else { + #TODO: check + place conf $frame.fill -relwidth $relsize + } + + if {[expr $relsize > 0.5]} { + set R e1 + binary scan [binary format i [expr {int(2*(1.0-$relsize)*225)}]] H2 G + } else { + set G e1 + binary scan [binary format i [expr {int(2*$relsize*225)}]] H2 R + } + set B 00 + ${frame}.fill configure -background \#${R}${G}${B} + } +} + + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kak...@us...> - 2009-07-22 01:43:07
|
Revision: 11353 http://amsn.svn.sourceforge.net/amsn/?rev=11353&view=rev Author: kakaroto Date: 2009-07-22 01:42:56 +0000 (Wed, 22 Jul 2009) Log Message: ----------- no need to have that include.. completely useless and causes compilation issues on mac Modified Paths: -------------- trunk/amsn/utils/TkCximage/src/TkCximage.h trunk/amsn/utils/webcamsn/src/webcamsn.h Modified: trunk/amsn/utils/TkCximage/src/TkCximage.h =================================================================== --- trunk/amsn/utils/TkCximage/src/TkCximage.h 2009-07-20 15:05:29 UTC (rev 11352) +++ trunk/amsn/utils/TkCximage/src/TkCximage.h 2009-07-22 01:42:56 UTC (rev 11353) @@ -32,9 +32,7 @@ #include <tcl.h> #include <tk.h> -#include <tkPlatDecls.h> - // Defined as described in tcl.tk compiling extension help #ifndef STATIC_BUILD Modified: trunk/amsn/utils/webcamsn/src/webcamsn.h =================================================================== --- trunk/amsn/utils/webcamsn/src/webcamsn.h 2009-07-20 15:05:29 UTC (rev 11352) +++ trunk/amsn/utils/webcamsn/src/webcamsn.h 2009-07-22 01:42:56 UTC (rev 11353) @@ -25,9 +25,7 @@ #include <tcl.h> #include <tk.h> -#include <tkPlatDecls.h> - // Defined as described in tcl.tk compiling extension help #ifndef STATIC_BUILD This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kak...@us...> - 2009-07-22 01:51:14
|
Revision: 11356 http://amsn.svn.sourceforge.net/amsn/?rev=11356&view=rev Author: kakaroto Date: 2009-07-22 01:51:08 +0000 (Wed, 22 Jul 2009) Log Message: ----------- Updating binaries for mac... :):):) Modified Paths: -------------- trunk/amsn/utils/TkCximage/TkCximage.dylib trunk/amsn/utils/macosx/sndplay trunk/amsn/utils/tclISF/tclISF.dylib trunk/amsn/utils/tcl_siren/tcl_siren.dylib trunk/amsn/utils/webcamsn/webcamsn.dylib Added Paths: ----------- trunk/amsn/utils/asyncresolver/libasyncresolver.dylib Modified: trunk/amsn/utils/TkCximage/TkCximage.dylib =================================================================== (Binary files differ) Added: trunk/amsn/utils/asyncresolver/libasyncresolver.dylib =================================================================== (Binary files differ) Property changes on: trunk/amsn/utils/asyncresolver/libasyncresolver.dylib ___________________________________________________________________ Added: svn:executable + * Added: svn:mime-type + application/octet-stream Modified: trunk/amsn/utils/macosx/sndplay =================================================================== (Binary files differ) Modified: trunk/amsn/utils/tclISF/tclISF.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/tcl_siren/tcl_siren.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/webcamsn/webcamsn.dylib =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kak...@us...> - 2009-07-22 02:44:47
|
Revision: 11359 http://amsn.svn.sourceforge.net/amsn/?rev=11359&view=rev Author: kakaroto Date: 2009-07-22 02:44:35 +0000 (Wed, 22 Jul 2009) Log Message: ----------- Updating mac binaries.. this time with linking to /usr/lib/libz.dylib instead of /opt/local/lib/libz.dylib. Also remove the linking dependency to libpng and libjpeg. Modified Paths: -------------- trunk/amsn/utils/TkCximage/TkCximage.dylib trunk/amsn/utils/asyncresolver/libasyncresolver.dylib trunk/amsn/utils/macosx/growl1.0/libgrowl.dylib trunk/amsn/utils/macosx/sndplay trunk/amsn/utils/tclISF/tclISF.dylib trunk/amsn/utils/tcl_siren/tcl_siren.dylib trunk/amsn/utils/webcamsn/webcamsn.dylib Modified: trunk/amsn/utils/TkCximage/TkCximage.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/asyncresolver/libasyncresolver.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/macosx/growl1.0/libgrowl.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/macosx/sndplay =================================================================== (Binary files differ) Modified: trunk/amsn/utils/tclISF/tclISF.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/tcl_siren/tcl_siren.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/webcamsn/webcamsn.dylib =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kak...@us...> - 2009-07-22 20:30:32
|
Revision: 11370 http://amsn.svn.sourceforge.net/amsn/?rev=11370&view=rev Author: kakaroto Date: 2009-07-22 20:30:25 +0000 (Wed, 22 Jul 2009) Log Message: ----------- Updating mac binaries again.. now adding macDock and removing libgcc dependency for TkCximage and tclISF Modified Paths: -------------- trunk/amsn/utils/TkCximage/TkCximage.dylib trunk/amsn/utils/macosx/macDock/macDock.dylib trunk/amsn/utils/tclISF/tclISF.dylib Modified: trunk/amsn/utils/TkCximage/TkCximage.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/macosx/macDock/macDock.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/tclISF/tclISF.dylib =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kak...@us...> - 2009-07-22 23:15:33
|
Revision: 11375 http://amsn.svn.sourceforge.net/amsn/?rev=11375&view=rev Author: kakaroto Date: 2009-07-22 23:15:28 +0000 (Wed, 22 Jul 2009) Log Message: ----------- Updating all binaries with versions using stubs... we shouldn't have any more problems now anywhere! :D tclCarbon.dylib is still missing though.. I can't get it to compile yet... Modified Paths: -------------- trunk/amsn/utils/TkCximage/TkCximage.dylib trunk/amsn/utils/asyncresolver/libasyncresolver.dylib trunk/amsn/utils/macosx/QuickTimeTcl3.1/QuickTimeTcl3.1.dylib trunk/amsn/utils/macosx/QuickTimeTcl3.1/movie.tcl trunk/amsn/utils/macosx/growl1.0/libgrowl.dylib trunk/amsn/utils/macosx/macDock/macDock.dylib trunk/amsn/utils/macosx/snack2.2/libsnack.dylib trunk/amsn/utils/macosx/snack2.2/libsound.dylib trunk/amsn/utils/macosx/snack2.2/pkgIndex.tcl trunk/amsn/utils/macosx/sndplay trunk/amsn/utils/tclISF/tclISF.dylib trunk/amsn/utils/tcl_siren/tcl_siren.dylib trunk/amsn/utils/webcamsn/webcamsn.dylib Removed Paths: ------------- trunk/amsn/utils/TkCximage/8.5/TkCximage.dylib trunk/amsn/utils/macosx/snack2.2/8.5/ Deleted: trunk/amsn/utils/TkCximage/8.5/TkCximage.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/TkCximage/TkCximage.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/asyncresolver/libasyncresolver.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/macosx/QuickTimeTcl3.1/QuickTimeTcl3.1.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/macosx/QuickTimeTcl3.1/movie.tcl =================================================================== --- trunk/amsn/utils/macosx/QuickTimeTcl3.1/movie.tcl 2009-07-22 23:13:03 UTC (rev 11374) +++ trunk/amsn/utils/macosx/QuickTimeTcl3.1/movie.tcl 2009-07-22 23:15:28 UTC (rev 11375) @@ -66,6 +66,7 @@ } } } +bind Movie <Button-1> { + focus %W +} - - Modified: trunk/amsn/utils/macosx/growl1.0/libgrowl.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/macosx/macDock/macDock.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/macosx/snack2.2/libsnack.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/macosx/snack2.2/libsound.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/macosx/snack2.2/pkgIndex.tcl =================================================================== --- trunk/amsn/utils/macosx/snack2.2/pkgIndex.tcl 2009-07-22 23:13:03 UTC (rev 11374) +++ trunk/amsn/utils/macosx/snack2.2/pkgIndex.tcl 2009-07-22 23:15:28 UTC (rev 11375) @@ -4,14 +4,10 @@ # http://www.wjduquette.com/tcl/namespaces.html # -if {[file exists [file join $dir [info tclversion] libsnack.dylib]]} { - package ifneeded snack 2.2.10 "[list load [file join $dir [info tclversion] libsnack.dylib]];[list source [file join $dir snack.tcl]]" -} else { - package ifneeded snack 2.2.10 "[list load [file join $dir libsnack.dylib]];[list source [file join $dir snack.tcl]]" -} +package ifneeded snack 2.2 "[list load [file join $dir libsnack.dylib]];[list source [file join $dir snack.tcl]]" -if {[file exists [file join $dir [info tclversion] libsound.dylib]]} { - package ifneeded sound 2.2.10 [list load [file join $dir [info tclversion] libsound.dylib]] -} else { - package ifneeded sound 2.2.10 [list load [file join $dir libsound.dylib]] -} \ No newline at end of file +package ifneeded sound 2.2 [list load [file join $dir libsound.dylib]] + +package ifneeded snacksphere 1.2 [list load [file join $dir libsnacksphere.dylib]] + +package ifneeded snackogg 1.3 [list load [file join $dir libsnackogg.dylib]] Modified: trunk/amsn/utils/macosx/sndplay =================================================================== (Binary files differ) Modified: trunk/amsn/utils/tclISF/tclISF.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/tcl_siren/tcl_siren.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/webcamsn/webcamsn.dylib =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kak...@us...> - 2009-07-22 23:31:25
|
Revision: 11376 http://amsn.svn.sourceforge.net/amsn/?rev=11376&view=rev Author: kakaroto Date: 2009-07-22 23:31:09 +0000 (Wed, 22 Jul 2009) Log Message: ----------- Add separate 8.6 version of TkCximage and revert to a 8.5 version for everyone Modified Paths: -------------- trunk/amsn/utils/macosx/macDock/macDock.dylib Added Paths: ----------- trunk/amsn/utils/TkCximage/8.6/ trunk/amsn/utils/TkCximage/8.6/TkCximage.dylib trunk/amsn/utils/TkCximage/TkCximage.dylib Removed Paths: ------------- trunk/amsn/utils/TkCximage/TkCximage.dylib Copied: trunk/amsn/utils/TkCximage/8.6/TkCximage.dylib (from rev 11375, trunk/amsn/utils/TkCximage/TkCximage.dylib) =================================================================== (Binary files differ) Deleted: trunk/amsn/utils/TkCximage/TkCximage.dylib =================================================================== (Binary files differ) Added: trunk/amsn/utils/TkCximage/TkCximage.dylib =================================================================== --- trunk/amsn/utils/TkCximage/TkCximage.dylib (rev 0) +++ trunk/amsn/utils/TkCximage/TkCximage.dylib 2009-07-22 23:31:09 UTC (rev 11376) @@ -0,0 +1,1041 @@ +\xCE\xFA\xED\xFE |
From: <kak...@us...> - 2009-07-23 16:42:55
|
Revision: 11378 http://amsn.svn.sourceforge.net/amsn/?rev=11378&view=rev Author: kakaroto Date: 2009-07-23 16:42:42 +0000 (Thu, 23 Jul 2009) Log Message: ----------- Update binaries.. compiled with tcl/k 8.5 this time Modified Paths: -------------- trunk/amsn/utils/TkCximage/TkCximage.dylib trunk/amsn/utils/asyncresolver/libasyncresolver.dylib trunk/amsn/utils/farsight/tcl_farsight.dylib trunk/amsn/utils/macosx/growl1.0/libgrowl.dylib trunk/amsn/utils/macosx/macDock/macDock.dylib trunk/amsn/utils/macosx/sndplay trunk/amsn/utils/tclISF/tclISF.dylib trunk/amsn/utils/tcl_siren/tcl_siren.dylib trunk/amsn/utils/webcamsn/webcamsn.dylib Modified: trunk/amsn/utils/TkCximage/TkCximage.dylib =================================================================== --- trunk/amsn/utils/TkCximage/TkCximage.dylib 2009-07-23 02:02:52 UTC (rev 11377) +++ trunk/amsn/utils/TkCximage/TkCximage.dylib 2009-07-23 16:42:42 UTC (rev 11378) @@ -1,69 +1,71 @@ -\xCE\xFA\xED\xFE |
From: <kak...@us...> - 2009-07-25 01:17:11
|
Revision: 11397 http://amsn.svn.sourceforge.net/amsn/?rev=11397&view=rev Author: kakaroto Date: 2009-07-25 01:17:04 +0000 (Sat, 25 Jul 2009) Log Message: ----------- Oups, I committed i386 binaries only last time.. here are the mac binaries again for ppc Modified Paths: -------------- trunk/amsn/utils/TkCximage/TkCximage.dylib trunk/amsn/utils/asyncresolver/libasyncresolver.dylib trunk/amsn/utils/farsight/tcl_farsight.dylib trunk/amsn/utils/macosx/growl1.0/libgrowl.dylib trunk/amsn/utils/macosx/macDock/macDock.dylib trunk/amsn/utils/macosx/sndplay trunk/amsn/utils/macosx/tclCarbon/tclCarbon.dylib trunk/amsn/utils/tclISF/tclISF.dylib trunk/amsn/utils/tcl_siren/tcl_siren.dylib trunk/amsn/utils/webcamsn/webcamsn.dylib Modified: trunk/amsn/utils/TkCximage/TkCximage.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/asyncresolver/libasyncresolver.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/farsight/tcl_farsight.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/macosx/growl1.0/libgrowl.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/macosx/macDock/macDock.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/macosx/sndplay =================================================================== (Binary files differ) Modified: trunk/amsn/utils/macosx/tclCarbon/tclCarbon.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/tclISF/tclISF.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/tcl_siren/tcl_siren.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/webcamsn/webcamsn.dylib =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kak...@us...> - 2009-07-26 04:47:40
|
Revision: 11400 http://amsn.svn.sourceforge.net/amsn/?rev=11400&view=rev Author: kakaroto Date: 2009-07-26 04:47:33 +0000 (Sun, 26 Jul 2009) Log Message: ----------- Updating mac binaries compiled without the macdock/libcarbon dependencies Modified Paths: -------------- trunk/amsn/utils/TkCximage/TkCximage.dylib trunk/amsn/utils/asyncresolver/libasyncresolver.dylib trunk/amsn/utils/macosx/finishbuild.sh trunk/amsn/utils/macosx/growl1.0/libgrowl.dylib trunk/amsn/utils/macosx/sndplay trunk/amsn/utils/tclISF/tclISF.dylib trunk/amsn/utils/tcl_siren/tcl_siren.dylib trunk/amsn/utils/webcamsn/webcamsn.dylib Modified: trunk/amsn/utils/TkCximage/TkCximage.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/asyncresolver/libasyncresolver.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/macosx/finishbuild.sh =================================================================== --- trunk/amsn/utils/macosx/finishbuild.sh 2009-07-25 04:22:34 UTC (rev 11399) +++ trunk/amsn/utils/macosx/finishbuild.sh 2009-07-26 04:47:33 UTC (rev 11400) @@ -32,6 +32,48 @@ ${UTILS_PATH}/tclISF/tclISF.dylib fi +remaplib() { + + if [ -z "$1" -o -z "$2" -o -z "$3" ]; then + echo "usage: remaplib lib old_path new_path"; + return; + fi + + lib="$1" + old="$2" + new="$3" + + for file in `otool -L "$lib" | tail -n+3 | awk '{print$1}' | grep $old`; do + base=`basename $file` + install_name_tool -change "$file" "${new}${base}" "$lib" + done +} + +for file in `find ${UTILS_PATH}/macosx/gstreamer/ -name *.dylib`; do + remaplib $file "/opt/local/lib/gstreamer-0.10" "@executable_path/../gstreamer/" + remaplib $file "/opt/local/lib/farsight2-0.0" "@executable_path/../gstreamer/" + remaplib $file "/opt/local/lib/" "@executable_path/../gstreamer/" +done + +for file in `find ${UTILS_PATH}/macosx/gstreamer/ -name *.so`; do + remaplib $file "/opt/local/lib/gstreamer-0.10" "@executable_path/../gstreamer/" + remaplib $file "/opt/local/lib/farsight2-0.0" "@executable_path/../gstreamer/" + remaplib $file "/opt/local/lib/" "@executable_path/../gstreamer/" +done + +find_missing_libs() { + lib="$1" + missing="" + + for file in `otool -L "$lib" | tail -n+3 | awk '{print$1}' `; do + base=`basename $file` + if [ ! -f $file ]; then + missing="$missing\n$file" + fi + done + +} + # Fix bindings to aMSN internal Tcl/Tk versions. echo "Fixing bindings to use embedded tcltk." for file in `find ${UTILS_PATH} -name *.dylib` utils/macosx/sndplay Modified: trunk/amsn/utils/macosx/growl1.0/libgrowl.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/macosx/sndplay =================================================================== (Binary files differ) Modified: trunk/amsn/utils/tclISF/tclISF.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/tcl_siren/tcl_siren.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/webcamsn/webcamsn.dylib =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kak...@us...> - 2009-07-26 22:13:54
|
Revision: 11402 http://amsn.svn.sourceforge.net/amsn/?rev=11402&view=rev Author: kakaroto Date: 2009-07-26 22:13:46 +0000 (Sun, 26 Jul 2009) Log Message: ----------- libpng and libjpeg are now dependent on $prefix for mac compilation Modified Paths: -------------- trunk/amsn/utils/TkCximage/src/Rules.mk trunk/amsn/utils/tclISF/src/Rules.mk Modified: trunk/amsn/utils/TkCximage/src/Rules.mk =================================================================== --- trunk/amsn/utils/TkCximage/src/Rules.mk 2009-07-26 04:49:57 UTC (rev 11401) +++ trunk/amsn/utils/TkCximage/src/Rules.mk 2009-07-26 22:13:46 UTC (rev 11402) @@ -6,7 +6,7 @@ endif ifeq ($(FOUND_OS),mac) - EXTRAOBJS-TkCximage := /opt/local/lib/libpng.a /opt/local/lib/libjpeg.a + EXTRAOBJS-TkCximage := $(prefix)/lib/libpng.a $(prefix)/lib/libjpeg.a endif TARGETS-TkCximage := $(tkcximage_dir)/src/TkCximage.cpp.$(SHLIB_EXTENSION) Modified: trunk/amsn/utils/tclISF/src/Rules.mk =================================================================== --- trunk/amsn/utils/tclISF/src/Rules.mk 2009-07-26 04:49:57 UTC (rev 11401) +++ trunk/amsn/utils/tclISF/src/Rules.mk 2009-07-26 22:13:46 UTC (rev 11402) @@ -1,7 +1,7 @@ OBJS-tclISF := $(tclISF_dir)/src/tclISF.cpp.o $(tclISF_dir)/src/libISF/libISF.a $(tkcximage_dir)/src/CxImage/libCxImage.a ifeq ($(FOUND_OS),mac) - EXTRAOBJS-tclISF := /opt/local/lib/libpng.a /opt/local/lib/libjpeg.a + EXTRAOBJS-tclISF := $(prefix)/lib/libpng.a $(prefix)/lib/libjpeg.a endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kak...@us...> - 2009-07-29 20:27:08
|
Revision: 11416 http://amsn.svn.sourceforge.net/amsn/?rev=11416&view=rev Author: kakaroto Date: 2009-07-29 20:26:47 +0000 (Wed, 29 Jul 2009) Log Message: ----------- Fix the init version for Tcl/Tk_InitStubs.. we need 8.4 compat for every lib, but we need the exact version for webcamsn and TkCximage Modified Paths: -------------- trunk/amsn/utils/asyncresolver/src/asyncresolver.c trunk/amsn/utils/macosx/tclCarbon/src/tclCarbon.c trunk/amsn/utils/tclISF/src/tclISF.cpp trunk/amsn/utils/tcl_siren/src/tcl_siren.c trunk/amsn/utils/webcamsn/src/webcamsn.c Modified: trunk/amsn/utils/asyncresolver/src/asyncresolver.c =================================================================== --- trunk/amsn/utils/asyncresolver/src/asyncresolver.c 2009-07-29 19:05:42 UTC (rev 11415) +++ trunk/amsn/utils/asyncresolver/src/asyncresolver.c 2009-07-29 20:26:47 UTC (rev 11416) @@ -198,7 +198,7 @@ int DLLEXPORT Asyncresolver_Init(Tcl_Interp *interp) { - if (Tcl_InitStubs(interp, TCL_VERSION, 0) == NULL) { + if (Tcl_InitStubs(interp, "8.4", 0) == NULL) { return TCL_ERROR; } /* changed this to check for an error - GPS */ Modified: trunk/amsn/utils/macosx/tclCarbon/src/tclCarbon.c =================================================================== --- trunk/amsn/utils/macosx/tclCarbon/src/tclCarbon.c 2009-07-29 19:05:42 UTC (rev 11415) +++ trunk/amsn/utils/macosx/tclCarbon/src/tclCarbon.c 2009-07-29 20:26:47 UTC (rev 11416) @@ -65,10 +65,10 @@ int Tclcarbon_Init(Tcl_Interp *interp) { - if (Tcl_InitStubs(interp, TCL_VERSION, 0) == NULL) { + if (Tcl_InitStubs(interp, "8.4", 0) == NULL) { return TCL_ERROR; } - if (Tk_InitStubs(interp, TK_VERSION, 0) == NULL) { + if (Tk_InitStubs(interp, "8.4", 0) == NULL) { return TCL_ERROR; } Modified: trunk/amsn/utils/tclISF/src/tclISF.cpp =================================================================== --- trunk/amsn/utils/tclISF/src/tclISF.cpp 2009-07-29 19:05:42 UTC (rev 11415) +++ trunk/amsn/utils/tclISF/src/tclISF.cpp 2009-07-29 20:26:47 UTC (rev 11416) @@ -22,7 +22,7 @@ /* * Initialize the stub table interface */ - if (Tcl_InitStubs(interp, TCL_VERSION, 1) == NULL) { + if (Tcl_InitStubs(interp, "8.4", 0) == NULL) { return TCL_ERROR; } Modified: trunk/amsn/utils/tcl_siren/src/tcl_siren.c =================================================================== --- trunk/amsn/utils/tcl_siren/src/tcl_siren.c 2009-07-29 19:05:42 UTC (rev 11415) +++ trunk/amsn/utils/tcl_siren/src/tcl_siren.c 2009-07-29 20:26:47 UTC (rev 11416) @@ -345,7 +345,7 @@ //Check Tcl version is 8.3 or higher - if (Tcl_InitStubs(interp, TCL_VERSION, 0) == NULL) { + if (Tcl_InitStubs(interp, "8.4", 0) == NULL) { return TCL_ERROR; } Modified: trunk/amsn/utils/webcamsn/src/webcamsn.c =================================================================== --- trunk/amsn/utils/webcamsn/src/webcamsn.c 2009-07-29 19:05:42 UTC (rev 11415) +++ trunk/amsn/utils/webcamsn/src/webcamsn.c 2009-07-29 20:26:47 UTC (rev 11416) @@ -696,12 +696,12 @@ //Check Tcl version is 8.3 or higher - if (Tcl_InitStubs(interp, TCL_VERSION, 0) == NULL) { + if (Tcl_InitStubs(interp, TCL_VERSION, 1) == NULL) { return TCL_ERROR; } //Check TK version is 8.3 or higher - if (Tk_InitStubs(interp, TK_VERSION, 0) == NULL) { + if (Tk_InitStubs(interp, TK_VERSION, 1) == NULL) { return TCL_ERROR; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kak...@us...> - 2009-07-29 20:30:46
|
Revision: 11417 http://amsn.svn.sourceforge.net/amsn/?rev=11417&view=rev Author: kakaroto Date: 2009-07-29 20:30:33 +0000 (Wed, 29 Jul 2009) Log Message: ----------- Upgrade all the binaries to use the ppc architecture instead of ppc7400 by using the -isysroot of the 10.4u SDK instead of the 10.5 SDK.. this should hopefully fix all the problems for ppc users Modified Paths: -------------- trunk/amsn/utils/TkCximage/TkCximage.dylib trunk/amsn/utils/asyncresolver/libasyncresolver.dylib trunk/amsn/utils/macosx/growl1.0/libgrowl.dylib trunk/amsn/utils/macosx/macDock/macDock.dylib trunk/amsn/utils/macosx/sndplay trunk/amsn/utils/macosx/tclCarbon/tclCarbon.dylib trunk/amsn/utils/tclISF/tclISF.dylib trunk/amsn/utils/tcl_siren/tcl_siren.dylib trunk/amsn/utils/webcamsn/webcamsn.dylib Modified: trunk/amsn/utils/TkCximage/TkCximage.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/asyncresolver/libasyncresolver.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/macosx/growl1.0/libgrowl.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/macosx/macDock/macDock.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/macosx/sndplay =================================================================== (Binary files differ) Modified: trunk/amsn/utils/macosx/tclCarbon/tclCarbon.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/tclISF/tclISF.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/tcl_siren/tcl_siren.dylib =================================================================== (Binary files differ) Modified: trunk/amsn/utils/webcamsn/webcamsn.dylib =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <kak...@us...> - 2009-07-30 19:11:31
|
Revision: 11424 http://amsn.svn.sourceforge.net/amsn/?rev=11424&view=rev Author: kakaroto Date: 2009-07-30 19:11:23 +0000 (Thu, 30 Jul 2009) Log Message: ----------- Updating to bwidget 1.9 Modified Paths: -------------- trunk/amsn/utils/BWidget-1.9.0/arrow.tcl trunk/amsn/utils/BWidget-1.9.0/buttonbox.tcl trunk/amsn/utils/BWidget-1.9.0/combobox.tcl trunk/amsn/utils/BWidget-1.9.0/dropsite.tcl trunk/amsn/utils/BWidget-1.9.0/dynhelp.tcl trunk/amsn/utils/BWidget-1.9.0/entry.tcl trunk/amsn/utils/BWidget-1.9.0/listbox.tcl trunk/amsn/utils/BWidget-1.9.0/mainframe.tcl trunk/amsn/utils/BWidget-1.9.0/notebook.tcl trunk/amsn/utils/BWidget-1.9.0/panedw.tcl trunk/amsn/utils/BWidget-1.9.0/passwddlg.tcl trunk/amsn/utils/BWidget-1.9.0/pkgIndex.tcl trunk/amsn/utils/BWidget-1.9.0/scrollframe.tcl trunk/amsn/utils/BWidget-1.9.0/scrollw.tcl trunk/amsn/utils/BWidget-1.9.0/tree.tcl trunk/amsn/utils/BWidget-1.9.0/utils.tcl trunk/amsn/utils/BWidget-1.9.0/widget.tcl Added Paths: ----------- trunk/amsn/utils/BWidget-1.9.0/ Removed Paths: ------------- trunk/amsn/utils/bwidget1.8.0/ Modified: trunk/amsn/utils/BWidget-1.9.0/arrow.tcl =================================================================== --- trunk/amsn/utils/bwidget1.8.0/arrow.tcl 2009-07-29 20:30:33 UTC (rev 11417) +++ trunk/amsn/utils/BWidget-1.9.0/arrow.tcl 2009-07-30 19:11:23 UTC (rev 11424) @@ -70,7 +70,7 @@ variable _grab variable _moved - array set _grab {current "" pressed "" oldstate "" oldrelief ""} + array set _grab {current "" pressed "" oldstate "normal" oldrelief ""} } Modified: trunk/amsn/utils/BWidget-1.9.0/buttonbox.tcl =================================================================== --- trunk/amsn/utils/bwidget1.8.0/buttonbox.tcl 2009-07-29 20:30:33 UTC (rev 11417) +++ trunk/amsn/utils/BWidget-1.9.0/buttonbox.tcl 2009-07-30 19:11:23 UTC (rev 11424) @@ -335,6 +335,11 @@ upvar 0 $path data Widget::getVariable $path buttons + # For tk >= 8.4, -uniform gridding option is used. + # Otherwise, there is the constraint, that button size may not change after + # creation. + set uniformAvailable [expr {0 <= [package vcompare [info patchlevel] 8.4.0]}] + ## We re-grid the buttons from left-to-right. As we go through ## each button, we check its spacing and which direction the ## spacing applies to. Once spacing has been applied to an index, @@ -350,12 +355,16 @@ if {[string equal [Widget::getoption $path -orient] "horizontal"]} { grid $but -column $idx -row 0 -sticky nsew if { [Widget::getoption $path -homogeneous] } { - set req [winfo reqwidth $but] - if { $req > $data(max) } { - grid columnconfigure $path [expr {2*$i}] -minsize $req - set data(max) $req + if {$uniformAvailable} { + grid columnconfigure $path $idx -uniform koen -weight 1 + } else { + set req [winfo reqwidth $but] + if { $req > $data(max) } { + grid columnconfigure $path [expr {2*$i}] -minsize $req + set data(max) $req + } + grid columnconfigure $path $idx -weight 1 } - grid columnconfigure $path $idx -weight 1 } else { grid columnconfigure $path $idx -weight 0 } @@ -380,13 +389,15 @@ incr idx 2 } - # Now that the maximum size has been calculated, go back through - # and correctly set the size for homogeneous horizontal buttons. - if { [string equal [Widget::getoption $path -orient] "horizontal"] && [Widget::getoption $path -homogeneous] } { - set idx 0 - foreach i $data(buttons) { - grid columnconfigure $path $idx -minsize $data(max) - incr idx 2 + if {!$uniformAvailable} { + # Now that the maximum size has been calculated, go back through + # and correctly set the size for homogeneous horizontal buttons. + if { [string equal [Widget::getoption $path -orient] "horizontal"] && [Widget::getoption $path -homogeneous] } { + set idx 0 + foreach i $data(buttons) { + grid columnconfigure $path $idx -minsize $data(max) + incr idx 2 + } } } } Modified: trunk/amsn/utils/BWidget-1.9.0/combobox.tcl =================================================================== --- trunk/amsn/utils/bwidget1.8.0/combobox.tcl 2009-07-29 20:30:33 UTC (rev 11417) +++ trunk/amsn/utils/BWidget-1.9.0/combobox.tcl 2009-07-30 19:11:23 UTC (rev 11424) @@ -1,7 +1,7 @@ # ---------------------------------------------------------------------------- # combobox.tcl # This file is part of Unifix BWidget Toolkit -# $Id: combobox.tcl,v 1.34 2006/09/28 15:46:06 dev_null42a Exp $ +# $Id: combobox.tcl,v 1.42 2009/07/07 17:28:14 oehhar Exp $ # ---------------------------------------------------------------------------- # Index of commands: # - ComboBox::create @@ -25,7 +25,7 @@ Widget::tkinclude ComboBox frame :cmd \ include {-relief -borderwidth -bd -background} \ - initialize {-relief sunken -borderwidth 2} \ + initialize {-relief sunken -borderwidth 2} Widget::bwinclude ComboBox Entry .e \ remove {-relief -bd -borderwidth -bg} \ @@ -53,13 +53,15 @@ Widget::syncoptions ComboBox Entry .e {-text {}} ::bind BwComboBox <FocusIn> [list after idle {BWidget::refocus %W %W.e}] - ::bind BwComboBox <Destroy> [list Widget::destroy %W] + ::bind BwComboBox <Destroy> [list ComboBox::_destroy %W] ::bind ListBoxHotTrack <Motion> { %W selection clear 0 end %W activate @%x,%y %W selection set @%x,%y } + + variable _index } @@ -101,7 +103,7 @@ ::bind $entry <Key-Down> [list ComboBox::_mapliste $path] } - if {[string equal $::tcl_platform(platform) "unix"]} { + if {[string equal [tk windowingsystem] "x11"]} { set ipadx 0 set width 11 } else { @@ -155,6 +157,8 @@ Widget::configure $path [list -bwlistbox $bw] } + set ComboBox::_index($path) -1 + return [Widget::create ComboBox $path] } @@ -181,8 +185,8 @@ set entry $path.e - set list [list -images -values -bwlistbox -hottrack] - foreach {ci cv cb ch} [eval [linsert $list 0 Widget::hasChangedX $path]] { break } + set list [list -images -values -bwlistbox -hottrack -autocomplete -autopost] + foreach {ci cv cb ch cac cap} [eval [linsert $list 0 Widget::hasChangedX $path]] { break } if { $ci } { set images [Widget::cget $path -images] @@ -193,6 +197,40 @@ } } + ## If autocomplete toggled, turn bindings on/off + if { $cac } { + if {[Widget::cget $path -autocomplete]} { + ::bind $entry <KeyRelease> +[list $path _auto_complete %K] + } else { + set bindings [split [::bind $entry <KeyRelease>] \n] + if {[set idx [lsearch $bindings [list $path _auto_complete %K]]] != -1} { + ::bind $entry <KeyRelease> [join [lreplace $bindings $idx $idx] \n] + } + } + } + + ## If autopost toggled, turn bindings on/off + if { $cap } { + if {[Widget::cget $path -autopost]} { + ::bind $entry <KeyRelease> +[list $path _auto_post %K] + set bindings [split [::bind $entry <Key-Up>] \n] + if {[set idx [lsearch $bindings [list ComboBox::_unmapliste $path]]] != -1} { + ::bind $entry <Key-Up> [join [lreplace $bindings $idx $idx] \n] + } + set bindings [split [::bind $entry <Key-Down>] \n] + if {[set idx [lsearch $bindings [list ComboBox::_mapliste $path]]] != -1} { + ::bind $entry <Key-Down> [join [lreplace $bindings $idx $idx] \n] + } + } else { + set bindings [split [::bind $entry <KeyRelease>] \n] + if {[set idx [lsearch $bindings [list $path _auto_post %K]]] != -1} { + ::bind $entry <KeyRelease> [join [lreplace $bindings $idx $idx] \n] + } + ::bind $entry <Key-Up> +[list ComboBox::_unmapliste $path] + ::bind $entry <Key-Down> +[list ComboBox::_mapliste $path] + } + } + set bw [Widget::cget $path -bwlistbox] ## If the images, bwlistbox, hottrack or values have changed, @@ -234,6 +272,13 @@ } } + # if state changed to normal and -editable false, the edit must take focus + if { [Widget::hasChangedX $path -state] \ + && ![string equal [Widget::cget $path -state] "disabled"] \ + && ![Widget::cget $path -editable] } { + Entry::configure $entry -takefocus 1 + } + # if the dropdown listbox is shown, simply force the actual entry # colors into it. If it is not shown, the next time the dropdown # is shown it'll get the actual colors anyway @@ -261,6 +306,8 @@ # Command ComboBox::setvalue # ---------------------------------------------------------------------------- proc ComboBox::setvalue { path index } { + variable _index + set values [Widget::getMegawidgetOption $path -values] set value [Entry::cget $path.e -text] switch -- $index { @@ -297,6 +344,7 @@ } if { $idx >= 0 && $idx < [llength $values] } { set newval [lindex $values $idx] + set _index($path) $idx Entry::configure $path.e -text $newval return 1 } @@ -318,8 +366,17 @@ # Command ComboBox::getvalue # ---------------------------------------------------------------------------- proc ComboBox::getvalue { path } { + variable _index set values [Widget::getMegawidgetOption $path -values] set value [Entry::cget $path.e -text] + # Check if an index was saved by the last setvalue operation + # If this index still matches it is returned + # This is necessary for the case when values is not unique + if { $_index($path) >= 0 \ + && $_index($path) < [llength $values] \ + && $value eq [lindex $values $_index($path)]} { + return $_index($path) + } return [lsearch -exact $values $value] } @@ -401,7 +458,7 @@ } } - if { $::tcl_platform(platform) == "unix" } { + if {[string equal [tk windowingsystem] "x11"]} { set sbwidth 11 } else { set sbwidth 15 @@ -409,12 +466,15 @@ toplevel $shell -relief solid -bd 1 wm withdraw $shell - update idle wm overrideredirect $shell 1 - wm transient $shell [winfo toplevel $path] - catch { wm attributes $shell -topmost 1 } + # these commands cause the combobox to behave strangely on OS X + if {![string equal [tk windowingsystem] "aqua"]} { + update idle + wm transient $shell [winfo toplevel $path] + catch { wm attributes $shell -topmost 1 } + } - set sw [ScrolledWindow $shell.sw -managed 0 -size $sbwidth -ipad 0] + set sw [ScrolledWindow $shell.sw -managed 1 -size $sbwidth -ipad 0] if {$bw} { set listb [ListBox $shell.listb \ @@ -457,7 +517,7 @@ pack $sw -fill both -expand yes $sw setwidget $listb - ::bind $listb <Return> "ComboBox::_select [list $path] \[%W curselection\]" + ::bind $listb <Return> "ComboBox::_select [list $path] \[$listb curselection\]" ::bind $listb <Escape> [list ComboBox::_unmapliste $path] ::bind $listb <FocusOut> [list ComboBox::_focus_out $path] } @@ -483,7 +543,7 @@ } } - if { $::tcl_platform(platform) == "unix" } { + if { [string equal [tk windowingsystem] "x11"] } { set sbwidth 11 } else { set sbwidth 15 @@ -502,7 +562,7 @@ set listb $shell.listb destroy $shell.sw - set sw [ScrolledWindow $shell.sw -managed 0 -size $sbwidth -ipad 0] + set sw [ScrolledWindow $shell.sw -managed 1 -size $sbwidth -ipad 0] $listb configure \ -height $h \ -font [Widget::cget $path -font] \ @@ -573,7 +633,9 @@ wm deiconify $path.shell raise $path.shell BWidget::focus set $listb - BWidget::grab global $path + if { ! [string equal [tk windowingsystem] "aqua"] } { + BWidget::grab global $path + } } @@ -581,15 +643,19 @@ # Command ComboBox::_unmapliste # ---------------------------------------------------------------------------- proc ComboBox::_unmapliste { path {refocus 1} } { + # On aqua, state is zoomed, otherwise normal if {[winfo exists $path.shell] && \ - [string equal [wm state $path.shell] "normal"]} { - BWidget::grab release $path - BWidget::focus release $path.shell.listb $refocus - # Update now because otherwise [focus -force...] makes the app hang! - if {$refocus} { - update - focus -force $path.e - } + ( [string equal [wm state $path.shell] "normal"] || + [string equal [wm state $path.shell] "zoomed"] ) } { + if {![string equal [tk windowingsystem] "aqua"]} { + BWidget::grab release $path + BWidget::focus release $path.shell.listb $refocus + # Update now because otherwise [focus -force...] makes the app hang! + if {$refocus} { + update + focus -force $path.e + } + } wm withdraw $path.shell ArrowButton::configure $path.a -relief raised } @@ -611,7 +677,9 @@ } } $path.e selection clear - $path.e selection range 0 end + if {[$path.e cget -exportselection]} { + $path.e selection range 0 end + } } @@ -758,7 +826,7 @@ set x -1 } if {([string length $key] > 1 && [string tolower $key] != $key) && \ - [string equal $key "Backspace"] != 0 && \ + [string equal $key "BackSpace"] != 0 && \ [string equal $key "Up"] != 0 && \ [string equal $key "Down"] != 0} { return @@ -807,3 +875,11 @@ $path.shell.listb see $x } } +# ------------------------------------------------------------------------------ +# Command ComboBox::_destroy +# ------------------------------------------------------------------------------ +proc ComboBox::_destroy { path } { + variable _index + Widget::destroy $path + unset _index($path) +} Modified: trunk/amsn/utils/BWidget-1.9.0/dropsite.tcl =================================================================== --- trunk/amsn/utils/bwidget1.8.0/dropsite.tcl 2009-07-29 20:30:33 UTC (rev 11417) +++ trunk/amsn/utils/BWidget-1.9.0/dropsite.tcl 2009-07-30 19:11:23 UTC (rev 11424) @@ -1,7 +1,7 @@ # ------------------------------------------------------------------------------ # dropsite.tcl # This file is part of Unifix BWidget Toolkit -# $Id: dropsite.tcl,v 1.7 2003/10/20 21:23:52 damonc Exp $ +# $Id: dropsite.tcl,v 1.8 2009/06/30 16:17:37 oehhar Exp $ # ------------------------------------------------------------------------------ # Index of commands: # - DropSite::include @@ -150,6 +150,7 @@ set drop(overcmd) $overcmd foreach {type ops} $types { set drop($type,ops) {} + set masklist {} foreach {descop lmod} $ops { if { ![llength $descop] || [llength $descop] > 3 } { return -code error "invalid operation description \"$descop\"" Modified: trunk/amsn/utils/BWidget-1.9.0/dynhelp.tcl =================================================================== --- trunk/amsn/utils/bwidget1.8.0/dynhelp.tcl 2009-07-29 20:30:33 UTC (rev 11417) +++ trunk/amsn/utils/BWidget-1.9.0/dynhelp.tcl 2009-07-30 19:11:23 UTC (rev 11424) @@ -1,7 +1,7 @@ # ---------------------------------------------------------------------------- # dynhelp.tcl # This file is part of Unifix BWidget Toolkit -# $Id: dynhelp.tcl,v 1.15 2006/03/23 23:32:12 dev_null42a Exp $ +# $Id: dynhelp.tcl,v 1.20 2009/07/15 16:50:16 oehhar Exp $ # ---------------------------------------------------------------------------- # Index of commands: # - DynamicHelp::configure @@ -16,8 +16,6 @@ # - DynamicHelp::_init # ---------------------------------------------------------------------------- -# JDC: allow variable and ballon help at the same timees - namespace eval DynamicHelp { Widget::define DynamicHelp dynhelp -classonly @@ -42,6 +40,7 @@ variable _registered variable _canvases + variable _texts variable _top ".help_shell" variable _id "" @@ -59,7 +58,6 @@ bind BwHelpBalloon <Destroy> {DynamicHelp::_unset_help %W} bind BwHelpVariable <Enter> {DynamicHelp::_motion_info %W} - bind BwHelpVariable <Motion> {DynamicHelp::_motion_info %W} bind BwHelpVariable <Leave> {DynamicHelp::_leave_info %W} bind BwHelpVariable <Destroy> {DynamicHelp::_unset_help %W} @@ -92,6 +90,7 @@ set helpoptions [list \ [list -helptext String "" 0] \ [list -helpvar String "" 0] \ + [list -helpcmd String "" 0] \ [list -helptype Enum $type 0 [list balloon variable]] \ ] Widget::declare $class $helpoptions @@ -133,8 +132,20 @@ variable _registered set len [llength $args] - if {$type == "balloon" && $len > 1} { set type canvasBalloon } - if {$type == "variable" && $len > 2} { set type canvasVariable } + if {$type == "balloon" && $len > 1} { + switch -exact -- [winfo class $path] { + "Canvas" { set type canvasBalloon } + "Text" - + "Ctext" { set type textBalloon } + } + } + if {$type == "variable" && $len > 2} { + switch -exact -- [winfo class $path] { + "Canvas" { set type canvasVariable } + "Text" - + "Ctext" { set type textVariable } + } + } if { ![winfo exists $path] } { _unset_help $path @@ -167,6 +178,19 @@ _add_canvas_balloon $path $text $tagOrItem } + textBalloon { + set tagOrItem [lindex $args 0] + set text [lindex $args 1] + if {$text == ""} { + if {[info exists _registered($path,$tagOrItem,balloon)]} { + unset _registered($path,$tagOrItem,balloon) + } + return 0 + } + + _add_text_balloon $path $text $tagOrItem + } + variable { set var [lindex $args 0] set text [lindex $args 1] @@ -194,6 +218,20 @@ _add_canvas_variable $path $text $var $tagOrItem } + textVariable { + set tagOrItem [lindex $args 0] + set var [lindex $args 1] + set text [lindex $args 2] + if {$text == "" || $var == ""} { + if {[info exists _registered($path,$tagOrItem,variable)]} { + unset _registered($path,$tagOrItem,variable) + } + return 0 + } + + _add_text_variable $path $text $var $tagOrItem + } + menu { set var [lindex $args 0] if {$var == ""} { @@ -216,7 +254,7 @@ set text [lindex $args 1] set index [lindex $args 0] if {$text == "" || $index == ""} { - set idx [lsearch $_registed($path) [list $index *]] + set idx [lsearch $_registered($path) [list $index *]] set _registered($path) [lreplace $_registered($path) $idx $idx] return 0 } @@ -255,8 +293,20 @@ switch -- $data(-type) { "balloon" { if {$data(-item) != ""} { - _add_canvas_balloon $path $data(-text) $data(-item) - set item $path,$data(-item) + switch -exact -- [winfo class $path] { + "Canvas" { + _add_canvas_balloon $path $data(-text) $data(-item) + set item $path,$data(-item) + } + "Text" - + "Ctext" { + _add_text_balloon $path $data(-text) $data(-item) + set item $path,$data(-item) + } + default { + _add_balloon $path $data(-text) + } + } } else { _add_balloon $path $data(-text) } @@ -269,8 +319,20 @@ "variable" { set var $data(-variable) if {$data(-item) != ""} { - _add_canvas_variable $path $data(-text) $var $data(-item) - set item $path,$data(-item) + switch -exact -- [winfo class $path] { + "Canvas" { + _add_canvas_variable $path $data(-text) $var $data(-item) + set item $path,$data(-item) + } + "Text" - + "Ctext" { + _add_text_variable $path $data(-text) $var $data(-item) + set item $path,$data(-item) + } + default { + _add_variable $path $data(-text) $var + } + } } else { _add_variable $path $data(-text) $var } @@ -346,6 +408,28 @@ $path addtag BwHelpBalloon withtag $tagOrItem } + +proc DynamicHelp::_add_text_balloon { path text tagOrItem } { + variable _texts + variable _registered + + set _registered($path,$tagOrItem,balloon) $text + + if { ![info exists _texts($path,$tagOrItem,balloon)] } { + $path tag bind $tagOrItem <Enter> \ + [list DynamicHelp::_motion_balloon enter $path %X %Y 0 1] + $path tag bind $tagOrItem <Motion> \ + [list DynamicHelp::_motion_balloon motion $path %X %Y 0 1] + $path tag bind $tagOrItem <Leave> \ + [list DynamicHelp::_motion_balloon leave $path %X %Y 0 1] + $path tag bind $tagOrItem <Button> \ + [list DynamicHelp::_motion_balloon button $path %X %Y 0 1] + + set _texts($path,$tagOrItem,balloon) 1 + } +} + + proc DynamicHelp::_add_variable { path text varName } { variable _registered set _registered($path,variable) [list $varName $text] @@ -378,6 +462,26 @@ } +proc DynamicHelp::_add_text_variable { path text varName tagOrItem } { + variable _texts + variable _registered + + set _registered($path,$tagOrItem,variable) [list $varName $text] + + if {![info exists _texts($path,$tagOrItem,variable)]} { + + $path tag bind $tagOrItem <Enter> \ + [list DynamicHelp::_motion_info $path 0 1] + $path tag bind $tagOrItem <Motion> \ + [list DynamicHelp::_motion_info $path 0 1] + $path tag bind $tagOrItem <Leave> \ + [list DynamicHelp::_leave_info $path 0 1] + + set _texts($path,$tagOrItem,variable) 1 + } +} + + proc DynamicHelp::_add_menu { path varName } { variable _registered @@ -406,14 +510,18 @@ # ---------------------------------------------------------------------------- # Command DynamicHelp::_motion_balloon # ---------------------------------------------------------------------------- -proc DynamicHelp::_motion_balloon { type path x y {isCanvasItem 0} } { +proc DynamicHelp::_motion_balloon { type path x y {isCanvasItem 0} {isTextItem 0} } { variable _top variable _id variable _delay variable _current_balloon set w $path - if {$isCanvasItem} { set path [_get_canvas_path $path balloon] } + if {$isCanvasItem} { + set path [_get_canvas_path $path balloon] + } elseif {$isTextItem} { + set path [_get_text_path $path balloon] + } if { $_current_balloon != $path && $type == "enter" } { set _current_balloon $path @@ -430,6 +538,8 @@ set cmd [list DynamicHelp::_show_help $path $w $x $y] set _id [after $_delay $cmd] } + # Bug 923942 proposes to destroy on motion to remove dynhelp on motion. + # this might be an optional behaviour in future versions } else { destroy $_top set _current_balloon "" @@ -441,12 +551,16 @@ # ---------------------------------------------------------------------------- # Command DynamicHelp::_motion_info # ---------------------------------------------------------------------------- -proc DynamicHelp::_motion_info { path {isCanvasItem 0} } { +proc DynamicHelp::_motion_info { path {isCanvasItem 0} {isTextItem 0} } { variable _saved variable _registered variable _current_variable - if {$isCanvasItem} { set path [_get_canvas_path $path variable] } + if {$isCanvasItem} { + set path [_get_canvas_path $path variable] + } elseif {$isTextItem} { + set path [_get_text_path $path variable] + } if { $_current_variable != $path && [info exists _registered($path,variable)] } { @@ -455,7 +569,7 @@ if {![info exists _saved]} { set _saved [GlobalVar::getvar $varName] } set string [lindex $_registered($path,variable) 1] if {[info exists _registered($path,command)]} { - set string [eval $_registered($path,command)] + set string [uplevel #0 $_registered($path,command)] } GlobalVar::setvar $varName $string set _current_variable $path @@ -465,39 +579,47 @@ # ---------------------------------------------------------------------------- # Command DynamicHelp::_leave_info +# Leave event may be called twice (in case of pointer grab) # ---------------------------------------------------------------------------- -proc DynamicHelp::_leave_info { path {isCanvasItem 0} } { +proc DynamicHelp::_leave_info { path {isCanvasItem 0} {isTextItem 0} } { variable _saved variable _registered variable _current_variable - if {$isCanvasItem} { set path [_get_canvas_path $path variable] } + if {$isCanvasItem} { + set path [_get_canvas_path $path variable] + } elseif {$isTextItem} { + set path [_get_text_path $path variable] + } - if { [info exists _registered($path,variable)] } { + if { [string equal $_current_variable $path] \ + && [info exists _registered($path,variable)] } { set varName [lindex $_registered($path,variable) 0] GlobalVar::setvar $varName $_saved + unset _saved + set _current_variable "" } - unset _saved - set _current_variable "" } # ---------------------------------------------------------------------------- # Command DynamicHelp::_menu_info -# Version of R1v1 restored, due to lack of [winfo ismapped] and <Unmap> -# under windows for menu. # ---------------------------------------------------------------------------- +# We have to check for unmap event on Unix. On Windows, unmap +# is not delivered, but <<MenuSelect>> is triggered appropriately when menu +# is unmapped. proc DynamicHelp::_menu_info { event path } { variable _registered if { [info exists _registered($path)] } { set index [$path index active] set varName [lindex $_registered($path) 0] - if { ![string equal $index "none"] && + if { ![string equal $event "unmap"] && + ![string equal $index "none"] && [set idx [lsearch $_registered($path) [list $index *]]] != -1 } { set string [lindex [lindex $_registered($path) $idx] 1] if {[info exists _registered($path,$index,command)]} { - set string [eval $_registered($path,$index,command)] + set string [uplevel #0 $_registered($path,$index,command)] } GlobalVar::setvar $varName $string } else { @@ -529,7 +651,7 @@ } if {[info exists _registered($path,command)]} { - set string [eval $_registered($path,command)] + set string [uplevel #0 $_registered($path,command)] } if {$string == ""} { return } @@ -568,14 +690,27 @@ set scrheight [winfo vrootheight .] set width [winfo reqwidth $_top] set height [winfo reqheight $_top] - incr y 12 - incr x 8 - if { $x+$width > $scrwidth } { - set x [expr {$scrwidth - $width}] + # On windows multi screen configurations, coordinates may get outside + # the main screen. We suppose that all screens have the same size + # because it is not possible to query the size of the other screens. + + set screenx [expr {$x % $scrwidth} ] + set screeny [expr {$y % $scrheight} ] + + # Increment the required size by the deplacement from the passed point + incr width 8 + incr height 12 + + if { $screenx+$width > $scrwidth } { + set x [expr {$x + ($scrwidth - $screenx) - ($width - 8)}] + } else { + incr x 8 } - if { $y+$height > $scrheight } { - set y [expr {$y - 12 - $height}] + if { $screeny+$height > $scrheight } { + set y [expr {$y - $height}] + } else { + incr y 12 } wm geometry $_top "+$x+$y" @@ -592,8 +727,10 @@ # ---------------------------------------------------------------------------- proc DynamicHelp::_unset_help { path } { variable _canvases + variable _texts variable _registered variable _top + variable _current_balloon if {[info exists _registered($path)]} { unset _registered($path) } if {[winfo exists $path]} { @@ -601,8 +738,9 @@ if {[info exists _registered($cpath)]} { unset _registered($cpath) } } array unset _canvases $path,* + array unset _texts $path,* array unset _registered $path,* - destroy $_top + if {[string equal $path $_current_balloon]} {destroy $_top} } # ---------------------------------------------------------------------------- @@ -622,4 +760,27 @@ if {![info exists _registered($check,$type)]} { continue } return $check } + + return $path } + +# ---------------------------------------------------------------------------- +# Command DynamicHelp::_get_text_path +# ---------------------------------------------------------------------------- +proc DynamicHelp::_get_text_path { path type {item ""} } { + variable _registered + + if {$item == ""} { set item [$path tag names current] } + + ## Check the tags related to this item for the one that + ## represents our text. If we have text specific to this + ## item or for 'all' items, they override any other tags. + eval [list lappend tags $item all] $item + foreach tag $tags { + set check $path,$tag + if {![info exists _registered($check,$type)]} { continue } + return $check + } + + return $path +} Modified: trunk/amsn/utils/BWidget-1.9.0/entry.tcl =================================================================== --- trunk/amsn/utils/bwidget1.8.0/entry.tcl 2009-07-29 20:30:33 UTC (rev 11417) +++ trunk/amsn/utils/BWidget-1.9.0/entry.tcl 2009-07-30 19:11:23 UTC (rev 11424) @@ -1,7 +1,7 @@ # ------------------------------------------------------------------------------ # entry.tcl # This file is part of Unifix BWidget Toolkit -# $Id: entry.tcl,v 1.21 2004/04/21 22:26:30 hobbs Exp $ +# $Id: entry.tcl,v 1.22 2009/06/10 08:48:06 oehhar Exp $ # ------------------------------------------------------------------------------ # Index of commands: # - Entry::create @@ -262,10 +262,13 @@ # Command Entry::_path_command # ------------------------------------------------------------------------------ proc Entry::_path_command { path cmd larg } { - if {[string equal $cmd "configure"] || [string equal $cmd "cget"]} { - return [eval [linsert $larg 0 Entry::$cmd $path]] - } else { - return [eval [linsert $larg 0 $path:cmd $cmd]] + switch -exact -- $cmd { + configure - cget - invoke { + return [eval [linsert $larg 0 Entry::$cmd $path]] + } + default { + return [eval [linsert $larg 0 $path:cmd $cmd]] + } } } Modified: trunk/amsn/utils/BWidget-1.9.0/listbox.tcl =================================================================== --- trunk/amsn/utils/bwidget1.8.0/listbox.tcl 2009-07-29 20:30:33 UTC (rev 11417) +++ trunk/amsn/utils/BWidget-1.9.0/listbox.tcl 2009-07-30 19:11:23 UTC (rev 11424) @@ -1,7 +1,7 @@ # ---------------------------------------------------------------------------- # listbox.tcl # This file is part of Unifix BWidget Toolkit -# $Id: listbox.tcl,v 1.23 2006/03/23 23:32:12 dev_null42a Exp $ +# $Id: listbox.tcl,v 1.29 2009/06/30 16:17:37 oehhar Exp $ # ---------------------------------------------------------------------------- # Index of commands: # - ListBox::create @@ -91,7 +91,7 @@ {-redraw Boolean 1 0} {-multicolumn Boolean 0 0} {-dropovermode Flag "wpi" 0 "wpi"} - {-selectmode Enum none 1 {none single multiple}} + {-selectmode Enum none 0 {none single multiple}} {-fg Synonym -foreground} {-bg Synonym -background} {-dropcmd String "ListBox::_drag_and_drop" 0} @@ -176,33 +176,70 @@ bind $path.c <Key-Up> {ListBox::_keyboard_navigation [winfo parent %W] -1} bind $path.c <Key-Down> {ListBox::_keyboard_navigation [winfo parent %W] 1} - switch -exact -- [Widget::getoption $path -selectmode] { - single { - $path bindText <Button-1> [list ListBox::_mouse_select $path set] - $path bindImage <Button-1> [list ListBox::_mouse_select $path set] - } - multiple { - set cmd ListBox::_multiple_select - $path bindText <Button-1> [list $cmd $path n %x %y] - $path bindText <Shift-Button-1> [list $cmd $path s %x %y] - $path bindText <Control-Button-1> [list $cmd $path c %x %y] + _configureSelectmode $path [Widget::getoption $path -selectmode] - $path bindImage <Button-1> [list $cmd $path n %x %y] - $path bindImage <Shift-Button-1> [list $cmd $path s %x %y] - $path bindImage <Control-Button-1> [list $cmd $path c %x %y] - } - } - return $path } # ---------------------------------------------------------------------------- +# Command ListBox::_configureSelectmode +# ---------------------------------------------------------------------------- +# Configure the selectmode +proc ListBox::_configureSelectmode { path selectmode {previous none} } { + # clear current binding + switch -exact -- $previous { + single { + $path bindText <Button-1> "" + $path bindImage <Button-1> "" + } + multiple { + $path bindText <Button-1> "" + $path bindText <Shift-Button-1> "" + $path bindText <Control-Button-1> "" + + $path bindImage <Button-1> "" + $path bindImage <Shift-Button-1> "" + $path bindImage <Control-Button-1> "" + } + } + # set new bindings + switch -exact -- $selectmode { + single { + $path bindText <Button-1> [list ListBox::_mouse_select $path set] + $path bindImage <Button-1> [list ListBox::_mouse_select $path set] + if {1 < [llength [ListBox::selection $path get]]} { + ListBox::selection $path clear + } + } + multiple { + set cmd ListBox::_multiple_select + $path bindText <Button-1> [list $cmd $path n %x %y] + $path bindText <Shift-Button-1> [list $cmd $path s %x %y] + $path bindText <Control-Button-1> [list $cmd $path c %x %y] + + $path bindImage <Button-1> [list $cmd $path n %x %y] + $path bindImage <Shift-Button-1> [list $cmd $path s %x %y] + $path bindImage <Control-Button-1> [list $cmd $path c %x %y] + } + default { + if {0 < [llength [ListBox::selection $path get]]} { + ListBox::selection $path clear + } + } + } +} +# ---------------------------------------------------------------------------- # Command ListBox::configure # ---------------------------------------------------------------------------- proc ListBox::configure { path args } { + set selectmodePrevious [Widget::getoption $path -selectmode] set res [Widget::configure $path $args] + if { [Widget::hasChanged $path -selectmode selectmode] } { + _configureSelectmode $path $selectmode $selectmodePrevious + } + set ch1 [expr {[Widget::hasChanged $path -deltay dy] | [Widget::hasChanged $path -padx val] | [Widget::hasChanged $path -multicolumn val]}] @@ -264,13 +301,14 @@ set item [Widget::nextIndex $path $item] - if { [lsearch -exact $data(items) $item] != -1 } { + if {[info exists data(exists,$item)]} { return -code error "item \"$item\" already exists" } Widget::init ListBox::Item $path.$item $args set data(items) [linsert $data(items) $index $item] + set data(exists,$item) 1 set data(upd,create,$item) $item _redraw_idle $path 2 @@ -306,10 +344,10 @@ set count 0 foreach {item iargs} $args { - if { [lsearch -exact $data(items) $item] != -1 } { + if {[info exists data(exists,$item)]} { return -code error "item \"$item\" already exists" } - + if {$count==0} { Widget::init ListBox::Item $path.$item $iargs set firstpath $path.$item @@ -318,6 +356,7 @@ } set data(items) [linsert $data(items) $index $item] + set data(exists,$item) 1 set data(upd,create,$item) $item incr count @@ -462,6 +501,9 @@ set data(items) [lreplace $data(items) $idx $idx] array unset help $item Widget::destroy $path.$item + if { [info exists data(exists,$item)] } { + unset data(exists,$item) + } if { [info exists data(upd,create,$item)] } { unset data(upd,create,$item) } else { @@ -996,6 +1038,7 @@ set x0 4 set x1 [expr {$x0+$padx}] set nitem 0 + set width 0 set drawn {} set data(xlist) {} if { [Widget::cget $path -multicolumn] } { @@ -1021,22 +1064,26 @@ $path.c coords n:$item [expr {$x1+$indent}] $y0 $path.c coords i:$item [expr {$x0+$indent}] $y0 } + set font [_getoption $path $item -font] + set text [Widget::getoption $path.$item -text] + set tw [font measure $font $text] + if {$tw > $width} { set width $tw } incr y0 $dy incr nitem lappend drawn n:$item if { $nitem == $nrows } { + set x2 [expr {$x1 + $width}] set y0 [expr {$dy/2}] - set bbox [eval [linsert $drawn 0 $path.c bbox]] set drawn {} - set x0 [expr {[lindex $bbox 2]+$dx}] + set x0 [expr {$x2+$dx}] set x1 [expr {$x0+$padx}] set nitem 0 - lappend data(xlist) [lindex $bbox 2] + lappend data(xlist) $x2 + set width 0 } } if { $nitem && $nitem < $nrows } { - set bbox [eval [linsert $drawn 0 $path.c bbox]] - lappend data(xlist) [lindex $bbox 2] + lappend data(xlist) [expr {$x1 + $width}] } set data(upd,delete) {} $path.c configure -cursor $cursor @@ -1056,8 +1103,10 @@ set multi [Widget::getoption $path -multicolumn] foreach id [$path.c find withtag sel] { set item [string range [lindex [$path.c gettags $id] 1] 2 end] - $path.c itemconfigure "n:$item" \ - -fill [_getoption $path $item -foreground] + if {-1 == [lsearch -exact $data(upd,delete) $item]} { + $path.c itemconfigure "n:$item" \ + -fill [_getoption $path $item -foreground] + } } $path.c delete sel if {$selfill && !$multi} { @@ -1074,7 +1123,10 @@ set tags [list sel s:$item click] set id [$path.c create rectangle $bbox \ -fill $selbg -outline $selbg -tags $tags] - $path.c itemconfigure "n:$item" -fill $selfg + if {$selfg != ""} { + # Don't allow an empty fill - that would be transparent + $path.c itemconfigure "n:$item" -fill $selfg + } $path.c lower $id $path.c lower b:$item } @@ -1454,7 +1506,7 @@ set data(sel_anchor) {} } c { - set l [_mouse_select $path get] + set l [$path selection get] if { [lsearch -exact $l $idx] >= 0 } { _mouse_select $path remove $idx } else { @@ -1493,15 +1545,16 @@ # ---------------------------------------------------------------------------- # Command ListBox::_scroll # ---------------------------------------------------------------------------- -proc ListBox::_scroll { path cmd dir } { +proc ListBox::_scroll { path scroll} { variable $path upvar 0 $path data - + set cmd [lindex $scroll 0] + set dir [lindex $scroll 1] if { ($dir == -1 && [lindex [$path.c $cmd] 0] > 0) || ($dir == 1 && [lindex [$path.c $cmd] 1] < 1) } { $path $cmd scroll $dir units set data(dnd,afterid) \ - [after 100 [list ListBox::_scroll $path $cmd $dir]] + [after 50 [list ListBox::_scroll $path $scroll]] } else { set data(dnd,afterid) "" DropSite::setcursor dot @@ -1603,10 +1656,12 @@ "position" { set idx $i } - "item" { set idx [$path index $i] } + "widget" { + set idx [llength $items] + } } if {$idx > [$path index $startItem]} { incr idx -1 } Modified: trunk/amsn/utils/BWidget-1.9.0/mainframe.tcl =================================================================== --- trunk/amsn/utils/bwidget1.8.0/mainframe.tcl 2009-07-29 20:30:33 UTC (rev 11417) +++ trunk/amsn/utils/BWidget-1.9.0/mainframe.tcl 2009-07-30 19:11:23 UTC (rev 11424) @@ -1,7 +1,7 @@ # ---------------------------------------------------------------------------- # mainframe.tcl # This file is part of Unifix BWidget Toolkit -# $Id: mainframe.tcl,v 1.23 2006/03/24 22:19:57 dev_null42a Exp $ +# $Id: mainframe.tcl,v 1.24 2009/07/01 14:41:30 oehhar Exp $ # ------------------------------------------------------------------------------ # Index of commands: # - MainFrame::create @@ -395,19 +395,8 @@ proc MainFrame::setmenustate { path tag state } { variable _widget - # if { [info exists _widget($path,tags,$tag)] } { - # foreach {menu entry} $_widget($path,tags,$tag) { - # $menu entryconfigure $entry -state $state - # } - # } + # Set menustate to enabled when ALL of its tags are enabled. - # We need a more sophisticated state system. - # The original model was this: each menu item has a list of tags; - # whenever any one of those tags changed state, the menu item did too. - # This makes it hard to have items that are enabled only when both tagA and - # tagB are. The new model therefore only sets the menustate to enabled - # when ALL of its tags are enabled. - # First see if this is a real tag if { [info exists _widget($path,tagstate,$tag)] } { if { ![string equal $state "disabled"] } { @@ -431,7 +420,19 @@ return } +# ----------------------------------------------------------------------------- +# Command MainFrame::getmenustate +# ----------------------------------------------------------------------------- +proc MainFrame::getmenustate { path tag } { + variable _widget + if {$_widget($path,tagstate,$tag)} { + return normal + } else { + return disabled + } +} + # ----------------------------------------------------------------------------- # Command MainFrame::menuonly # ----------------------d------------------------------------------------------ Modified: trunk/amsn/utils/BWidget-1.9.0/notebook.tcl =================================================================== --- trunk/amsn/utils/bwidget1.8.0/notebook.tcl 2009-07-29 20:30:33 UTC (rev 11417) +++ trunk/amsn/utils/BWidget-1.9.0/notebook.tcl 2009-07-30 19:11:23 UTC (rev 11424) @@ -1,7 +1,7 @@ # --------------------------------------------------------------------------- # notebook.tcl # This file is part of Unifix BWidget Toolkit -# $Id: notebook.tcl,v 1.23 2005/01/26 01:01:26 hobbs Exp $ +# $Id: notebook.tcl,v 1.25 2009/07/01 14:41:30 oehhar Exp $ # --------------------------------------------------------------------------- # Index of commands: # - NoteBook::create @@ -304,6 +304,7 @@ destroy $path.f$page } _redraw $path + unset data($page,width) data($page,realized) } @@ -503,6 +504,7 @@ $state == "disabled" && $data(select) == $page } { set data(select) "" } + _set_help $path $page return $res } Modified: trunk/amsn/utils/BWidget-1.9.0/panedw.tcl =================================================================== --- trunk/amsn/utils/bwidget1.8.0/panedw.tcl 2009-07-29 20:30:33 UTC (rev 11417) +++ trunk/amsn/utils/BWidget-1.9.0/panedw.tcl 2009-07-30 19:11:23 UTC (rev 11424) @@ -58,6 +58,18 @@ set _panedw($path,weights) "" set _panedw($path,configuredone) 0 + set activator [Widget::getoption $path -activator] + if {[string equal $activator ""]} { + if { $::tcl_platform(platform) != "windows" } { + Widget::setMegawidgetOption $path -activator button + } else { + Widget::setMegawidgetOption $path -activator line + } + } + if {[string equal [Widget::getoption $path -activator] "line"]} { + Widget::setMegawidgetOption $path -width 3 + } + bind $path <Configure> [list PanedWindow::_realize $path %w %h] bind $path <Destroy> [list PanedWindow::_destroy $path] @@ -116,28 +128,20 @@ if { $num > 0 } { set frame [frame $path.sash$num -relief flat -bd 0 \ - -highlightthickness 0 -width $width -height $width -bg $bg] - set sep [frame $frame.sep -bd 5 -relief raised \ - -highlightthickness 0 -bg $bg] - set but [frame $frame.but -bd 1 -relief raised \ - -highlightthickness 0 -bg $bg -width $wbut -height $wbut] - set placeButton 1 - set sepsize 2 + -highlightthickness 0 -width $width -height $width -bg $bg] + set sep [frame $frame.sep -bd 5 -relief raised \ + -highlightthickness 0 -bg $bg] + set but [frame $frame.but -bd 1 -relief raised \ + -highlightthickness 0 -bg $bg -width $wbut -height $wbut] + set sepsize 2 - set activator [Widget::getoption $path -activator] - if {$activator == ""} { - if { $::tcl_platform(platform) != "windows" } { - set activator button - } else { - set activator line - } - } + set activator [Widget::getoption $path -activator] if {$activator == "button"} { set activator $but + set placeButton 1 } else { set activator $sep - set sepsize 4 - $sep configure -bd 3 + $sep configure -bd 1 set placeButton 0 } if {[string equal $side "top"] || [string equal $side "bottom"]} { Modified: trunk/amsn/utils/BWidget-1.9.0/passwddlg.tcl =================================================================== --- trunk/amsn/utils/bwidget1.8.0/passwddlg.tcl 2009-07-29 20:30:33 UTC (rev 11417) +++ trunk/amsn/utils/BWidget-1.9.0/passwddlg.tcl 2009-07-30 19:11:23 UTC (rev 11424) @@ -2,7 +2,7 @@ # passwddlg.tcl # This file is part of Unifix BWidget Toolkit # by Stephane Lavirotte (Ste...@so...) -# $Id: passwddlg.tcl,v 1.11 2006/09/28 22:31:28 dev_null42a Exp $ +# $Id: passwddlg.tcl,v 1.12 2009/06/11 15:42:51 oehhar Exp $ # ----------------------------------------------------------------------------- # Index of commands: # - PasswdDlg::create @@ -166,8 +166,12 @@ # ----------------------------------------------------------------------------- # Command PasswdDlg::_verifonpasswd # ----------------------------------------------------------------------------- -proc PasswdDlg::_verifonpasswd { path lablog } { - focus $lablog +proc PasswdDlg::_verifonpasswd { path labpass } { + if {[string equal [$labpass cget -state] "disabled"]} { + Dialog::enddialog $path 0 + } else { + focus $labpass + } } # ----------------------------------------------------------------------------- Modified: trunk/amsn/utils/BWidget-1.9.0/pkgIndex.tcl =================================================================== --- trunk/amsn/utils/bwidget1.8.0/pkgIndex.tcl 2009-07-29 20:30:33 UTC (rev 11417) +++ trunk/amsn/utils/BWidget-1.9.0/pkgIndex.tcl 2009-07-30 19:11:23 UTC (rev 11424) @@ -1,7 +1,7 @@ if {[catch {package require Tcl}]} return -package ifneeded BWidget 1.8 "\ +package ifneeded BWidget 1.9 "\ package require Tk 8.1.1;\ - [list tclPkgSetup $dir BWidget 1.8 { + [list tclPkgSetup $dir BWidget 1.9 { {arrow.tcl source {ArrowButton ArrowButton::create ArrowButton::use}} {labelframe.tcl source {LabelFrame LabelFrame::create LabelFrame::use}} {labelentry.tcl source {LabelEntry LabelEntry::create LabelEntry::use}} Modified: trunk/amsn/utils/BWidget-1.9.0/scrollframe.tcl =================================================================== --- trunk/amsn/utils/bwidget1.8.0/scrollframe.tcl 2009-07-29 20:30:33 UTC (rev 11417) +++ trunk/amsn/utils/BWidget-1.9.0/scrollframe.tcl 2009-07-30 19:11:23 UTC (rev 11424) @@ -1,7 +1,7 @@ # ---------------------------------------------------------------------------- # scrollframe.tcl # This file is part of Unifix BWidget Toolkit -# $Id: scrollframe.tcl,v 1.7 2005/07/28 00:40:42 hobbs Exp $ +# $Id: scrollframe.tcl,v 1.11 2009/07/17 15:29:51 oehhar Exp $ # ---------------------------------------------------------------------------- # Index of commands: # - ScrollableFrame::create @@ -17,27 +17,45 @@ namespace eval ScrollableFrame { Widget::define ScrollableFrame scrollframe - Widget::declare ScrollableFrame { - {-background TkResource "" 0 frame} - {-width Int 0 0 {}} - {-height Int 0 0 {}} - {-areawidth Int 0 0 {}} - {-areaheight Int 0 0 {}} - {-constrainedwidth Boolean 0 0} - {-constrainedheight Boolean 0 0} - {-xscrollcommand TkResource "" 0 canvas} - {-yscrollcommand TkResource "" 0 canvas} - {-xscrollincrement TkResource "" 0 canvas} - {-yscrollincrement TkResource "" 0 canvas} - {-bg Synonym -background} + # If themed, there is no background and -bg option + if {[Widget::theme]} { + Widget::declare ScrollableFrame { + {-width Int 0 0 {}} + {-height Int 0 0 {}} + {-areawidth Int 0 0 {}} + {-areaheight Int 0 0 {}} + {-constrainedwidth Boolean 0 0} + {-constrainedheight Boolean 0 0} + {-xscrollcommand TkResource "" 0 canvas} + {-yscrollcommand TkResource "" 0 canvas} + {-xscrollincrement TkResource "" 0 canvas} + {-yscrollincrement TkResource "" 0 canvas} + } + } else { + Widget::declare ScrollableFrame { + {-background TkResource "" 0 frame} + {-width Int 0 0 {}} + {-height Int 0 0 {}} + {-areawidth Int 0 0 {}} + {-areaheight Int 0 0 {}} + {-constrainedwidth Boolean 0 0} + {-constrainedheight Boolean 0 0} + {-xscrollcommand TkResource "" 0 canvas} + {-yscrollcommand TkResource "" 0 canvas} + {-xscrollincrement TkResource "" 0 canvas} + {-yscrollincrement TkResource "" 0 canvas} + {-bg Synonym -background} + } } Widget::addmap ScrollableFrame "" :cmd { - -background {} -width {} -height {} + -width {} -height {} -xscrollcommand {} -yscrollcommand {} -xscrollincrement {} -yscrollincrement {} } - Widget::addmap ScrollableFrame "" .frame {-background {}} + if { ! [Widget::theme]} { + Widget::addmap ScrollableFrame "" .frame {-background {}} + } variable _widget @@ -58,18 +76,30 @@ if {[Widget::theme]} { set frame [eval [list ttk::frame $path.frame] \ [Widget::subcget $path .frame]] + set bg [ttk::style lookup TFrame -background] } else { set frame [eval [list frame $path.frame] \ [Widget::subcget $path .frame] \ -highlightthickness 0 -borderwidth 0 -relief flat] + set bg [$frame cget -background] } + # Give canvas frame (or theme) background + $canvas configure -background $bg $canvas create window 0 0 -anchor nw -window $frame -tags win \ -width [Widget::cget $path -areawidth] \ -height [Widget::cget $path -areaheight] bind $frame <Configure> \ - [list ScrollableFrame::_frameConfigure $canvas $frame %w %h] + [list ScrollableFrame::_frameConfigure $canvas] + # add <unmap> binding: <configure> is not called when frame + # becomes so small that it suddenly falls outside of currently visible area. + # but now we need to add a <map> binding too + bind $frame <Map> \ + [list ScrollableFrame::_frameConfigure $canvas] + bind $frame <Unmap> \ + [list ScrollableFrame::_frameConfigure $canvas 1] + bindtags $path [list $path BwScrollableFrame [winfo toplevel $path] all] return [Widget::create ScrollableFrame $path] @@ -207,20 +237,26 @@ if { [Widget::getoption $path -constrainedheight] } { $path:cmd itemconfigure win -height [winfo height $path] } + # scollregion must also be reset when canvas size changes + _frameConfigure $path } # ---------------------------------------------------------------------------- # Command ScrollableFrame::_frameConfigure # ---------------------------------------------------------------------------- -proc ScrollableFrame::_frameConfigure {canvas frame width height} { +proc ScrollableFrame::_max {a b} {return [expr {$a <= $b ? $b : $a}]} +proc ScrollableFrame::_frameConfigure {canvas {unmap 0}} { # This ensures that we don't get funny scrollability in the frame # when it is smaller than the canvas space - if {[winfo height $frame] < [winfo height $canvas]} { - set height [winfo height $canvas] - } - if {[winfo width $frame] < [winfo width $canvas]} { - set width [winfo width $canvas] - } + # use [winfo] to get height & width of frame + + # [winfo] doesn't work for unmapped frame + set frameh [expr {$unmap ? 0 : [winfo height $canvas.frame]}] + set framew [expr {$unmap ? 0 : [winfo width $canvas.frame]}] + + set height [_max $frameh [winfo height $canvas]] + set width [_max $framew [winfo width $canvas]] + $canvas:cmd configure -scrollregion [list 0 0 $width $height] } Modified: trunk/amsn/utils/BWidget-1.9.0/scrollw.tcl =================================================================== --- trunk/amsn/utils/bwidget1.8.0/scrollw.tcl 2009-07-29 20:30:33 UTC (rev 11417) +++ trunk/amsn/utils/BWidget-1.9.0/scrollw.tcl 2009-07-30 19:11:23 UTC (rev 11424) @@ -1,7 +1,7 @@ # ----------------------------------------------------------------------------- # scrollw.tcl # This file is part of Unifix BWidget Toolkit -# $Id: scrollw.tcl,v 1.12 2006/08/21 20:54:14 dev_null42a Exp $ +# $Id: scrollw.tcl,v 1.13 2009/06/29 13:28:24 oehhar Exp $ # ----------------------------------------------------------------------------- # Index of commands: # - ScrolledWindow::create @@ -198,12 +198,13 @@ Widget::getVariable $path data if {$data(realized) && $data(hsb,present)} { - if {$data(hsb,auto)} { + if {$data(hsb,auto) && ![info exists data(hlock)]} { if {$data(hsb,packed) && $vmin == 0 && $vmax == 1} { - if {![info exists data(hlock)]} { - set data(hsb,packed) 0 - grid remove $path.hscroll - } + set data(hsb,packed) 0 + grid remove $path.hscroll + set data(hlock) 1 + update idletasks + unset data(hlock) } elseif {!$data(hsb,packed) && ($vmin != 0 || $vmax != 1)} { set data(hsb,packed) 1 grid $path.hscroll -column 1 -row $data(hsb,row) \ @@ -225,12 +226,13 @@ Widget::getVariable $path data if {$data(realized) && $data(vsb,present)} { - if {$data(vsb,auto)} { + if {$data(vsb,auto) && ![info exists data(vlock)]} { if {$data(vsb,packed) && $vmin == 0 && $vmax == 1} { - if {![info exists data(vlock)]} { - set data(vsb,packed) 0 - grid remove $path.vscroll - } + set data(vsb,packed) 0 + grid remove $path.vscroll + set data(vlock) 1 + update idletasks + unset data(vlock) } elseif {!$data(vsb,packed) && ($vmin != 0 || $vmax != 1) } { set data(vsb,packed) 1 grid $path.vscroll -column $data(vsb,column) -row 1 \ Modified: trunk/amsn/utils/BWidget-1.9.0/tree.tcl =================================================================== --- trunk/amsn/utils/bwidget1.8.0/tree.tcl 2009-07-29 20:30:33 UTC (rev 11417) +++ trunk/amsn/utils/BWidget-1.9.0/tree.tcl 2009-07-30 19:11:23 UTC (rev 11424) @@ -1,7 +1,7 @@ # ---------------------------------------------------------------------------- # tree.tcl # This file is part of Unifix BWidget Toolkit -# $Id: tree.tcl,v 1.54 2006/09/28 15:46:06 dev_null42a Exp $ +# $Id: tree.tcl,v 1.60 2009/07/24 16:01:55 oehhar Exp $ # ---------------------------------------------------------------------------- # Index of commands: # - Tree::create @@ -327,6 +327,7 @@ if { [info exists data($node)] } { return -code error "node \"$node\" already exists" } + set parent [_node_name $path $parent] if { ![info exists data($parent)] } { return -code error "node \"$parent\" does not exist" } @@ -440,7 +441,7 @@ # ---------------------------------------------------------------------------- proc Tree::bindText { path event script } { if {[string length $script]} { - append script " \[Tree::_get_node_name [list $path] current 2\]" + append script " \[Tree::_get_node_name [list $path] current 2 1\]" } $path.c bind "node" $event $script if {[Widget::getoption $path -selectfill]} { @@ -456,7 +457,7 @@ # ---------------------------------------------------------------------------- proc Tree::bindImage { path event script } { if {[string length $script]} { - append script " \[Tree::_get_node_name [list $path] current 2\]" + append script " \[Tree::_get_node_name [list $path] current 2 1\]" } $path.c bind "img" $event $script if {[Widget::getoption $path -selectfill]} { @@ -704,7 +705,11 @@ return -code error \ "wrong#args: Expected $path selection get" } - return $data(selnodes) + set nodes [list] + foreach node $data(selnodes) { + lappend nodes [_node_name_rev $path $node] + } + return $nodes } includes { if {[llength $args] != 1} { @@ -838,10 +843,10 @@ set xi [expr {[lindex [$path.c coords n:$node] 0] - $padx}] set xs [lindex [$path.c bbox n:$node] 2] if {$x >= $xi && $x <= $xs} { - return $node + return [_node_name_rev $path $node] } } else { - return $node + return [_node_name_rev $path $node] } } return "" @@ -1364,12 +1369,10 @@ set yp $y1 set y1 [_draw_node $path $node $x0 [expr {$y1+$deltay}] $deltax $deltay $padx $showlines] } - if { $showlines && [llength $nodes] } { - if {$y0 < 0} { - # Adjust the drawing of the line to the first root node - # to start at the vertical point (not go up). - incr y0 $deltay - } + # Only draw a line to the invisible root node above the tree widget when + # there are multiple top nodes. + set len [llength $nodes] + if { $showlines && $len && !($y0 < 0 && $len < 2) } { set id [$path.c create line $x0 $y0 $x0 [expr {$yp+$deltay}] \ -fill [Widget::getoption $path -linesfill] \ -stipple [Widget::getoption $path -linestipple] \ @@ -1528,7 +1531,10 @@ } set id [$path.c create rectangle $bbox -tags [list sel s:$node] \ -fill $selbg -outline $selbg] - $path.c itemconfigure "n:$node" -fill $selfg + if {$selfg != ""} { + # Don't allow an empty fill - that would be transparent + $path.c itemconfigure "n:$node" -fill $selfg + } $path.c lower $id } } @@ -1592,8 +1598,7 @@ set data(dnd,afterid) "" } set data(dnd,scroll) "" - if {[llength $data(dnd,node)] - && [llength [set cmd [Widget::getoption $path -dropcmd]]]} { + if {[llength [set cmd [Widget::getoption $path -dropcmd]]]} { return [uplevel \#0 ... [truncated message content] |