Compare commits
1 Commits
v2.10.0
...
python-ite
Author | SHA1 | Date | |
---|---|---|---|
cd72f2a55b |
25
.gitignore
vendored
25
.gitignore
vendored
@ -13,12 +13,10 @@ conftest.c
|
|||||||
conftest.err
|
conftest.err
|
||||||
config.guess
|
config.guess
|
||||||
config.h.in
|
config.h.in
|
||||||
config.h.in~
|
|
||||||
config.h
|
config.h
|
||||||
config.log
|
config.log
|
||||||
config.status
|
config.status
|
||||||
config.sub
|
config.sub
|
||||||
config-win32.h
|
|
||||||
configure
|
configure
|
||||||
configure.tmp
|
configure.tmp
|
||||||
depcomp
|
depcomp
|
||||||
@ -32,26 +30,19 @@ m4/
|
|||||||
missing
|
missing
|
||||||
plugins/perl/irc.pm.h
|
plugins/perl/irc.pm.h
|
||||||
plugins/perl/xchat.pm.h
|
plugins/perl/xchat.pm.h
|
||||||
plugins/perl/hexchat.pm.h
|
|
||||||
po/Makefile.in.in
|
po/Makefile.in.in
|
||||||
po/POTFILES
|
po/POTFILES
|
||||||
po/remove-potcdate.sed
|
po/remove-potcdate.sed
|
||||||
po/stamp-*
|
po/stamp-po
|
||||||
osx/Info.plist
|
share/pkgconfig/hexchat-plugin.pc
|
||||||
data/man/hexchat.1
|
|
||||||
data/pkgconfig/hexchat-plugin.pc
|
|
||||||
data/misc/hexchat.appdata.xml
|
|
||||||
data/misc/hexchat.desktop
|
|
||||||
data/misc/htm.desktop
|
|
||||||
src/common/dbus/example
|
src/common/dbus/example
|
||||||
|
src/common/dbus/marshallers.h
|
||||||
src/common/dbus/org.hexchat.service.service
|
src/common/dbus/org.hexchat.service.service
|
||||||
src/common/dbus/remote-object-glue.h
|
src/common/dbus/remote-object-glue.h
|
||||||
src/common/make-te
|
src/common/make-te
|
||||||
src/common/marshal.*
|
|
||||||
src/common/textenums.h
|
src/common/textenums.h
|
||||||
src/common/textevents.h
|
src/common/textevents.h
|
||||||
src/fe-gtk/hexchat
|
src/fe-gtk/hexchat
|
||||||
src/fe-gtk/hexchat.rc
|
|
||||||
src/fe-text/hexchat-text
|
src/fe-text/hexchat-text
|
||||||
src/htm/Main.resources
|
src/htm/Main.resources
|
||||||
src/htm/thememan.exe
|
src/htm/thememan.exe
|
||||||
@ -66,27 +57,19 @@ stamp-h1
|
|||||||
*.gmo
|
*.gmo
|
||||||
*.mo
|
*.mo
|
||||||
*.po~
|
*.po~
|
||||||
*.pot
|
|
||||||
*.patch
|
*.patch
|
||||||
# Win32 generated files
|
# Win32 generated files
|
||||||
plugins/wmpa/wmpa_h.h
|
plugins/wmpa/wmpa_h.h
|
||||||
plugins/wmpa/wmpa_i.c
|
plugins/wmpa/wmpa_i.c
|
||||||
src/fe-gtk/resources.c
|
src/pixmaps/inline_pngs.h
|
||||||
src/htm/obj/*
|
src/htm/obj/*
|
||||||
win32/ipch/*
|
win32/ipch/*
|
||||||
win32/ext/perl/perl-x86-cache
|
win32/ext/perl/perl-x86-cache
|
||||||
win32/ext/perl/perl-x86-SetupFiles
|
win32/ext/perl/perl-x86-SetupFiles
|
||||||
win32/ext/perl/perl-x64-cache
|
win32/ext/perl/perl-x64-cache
|
||||||
win32/ext/perl/perl-x64-SetupFiles
|
win32/ext/perl/perl-x64-SetupFiles
|
||||||
win32/installer/hexchat.iss
|
|
||||||
resource.h
|
resource.h
|
||||||
*.opensdf
|
*.opensdf
|
||||||
*.sdf
|
*.sdf
|
||||||
*.suo
|
*.suo
|
||||||
*.user
|
*.user
|
||||||
#OSX
|
|
||||||
osx/HexChat.app
|
|
||||||
osx/.HexChat.app
|
|
||||||
po/.intltool-merge-cache
|
|
||||||
*.zip
|
|
||||||
*.dmg
|
|
||||||
|
@ -2,11 +2,11 @@ language: c
|
|||||||
compiler: gcc
|
compiler: gcc
|
||||||
before_script:
|
before_script:
|
||||||
- sudo apt-get build-dep -qq xchat
|
- sudo apt-get build-dep -qq xchat
|
||||||
- sudo apt-get install -qq libnotify-dev libproxy-dev libpci-dev libcanberra-dev monodevelop gnome-common
|
- sudo apt-get install -qq libnotify-dev libproxy-dev libpci-dev libcanberra-dev monodevelop
|
||||||
script:
|
script:
|
||||||
- ./autogen.sh
|
- ./autogen.sh
|
||||||
- ./configure --enable-textfe --with-theme-manager
|
- ./configure --enable-textfe --with-theme-manager
|
||||||
- make V=1
|
- make
|
||||||
notifications:
|
notifications:
|
||||||
irc:
|
irc:
|
||||||
channels: "chat.freenode.net#hexchat-devel"
|
channels: "chat.freenode.net#hexchat-devel"
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
ACLOCAL_AMFLAGS = -I m4
|
ACLOCAL_AMFLAGS = -I m4
|
||||||
|
|
||||||
SUBDIRS = po src plugins data
|
SUBDIRS = po intl src plugins man share
|
||||||
|
|
||||||
EXTRA_DIST = autogen.sh data
|
EXTRA_DIST = autogen.sh
|
||||||
|
|
||||||
|
123
autogen.sh
123
autogen.sh
@ -1,22 +1,113 @@
|
|||||||
#!/bin/sh
|
#!/bin/bash
|
||||||
# Run this to generate all the initial makefiles, etc.
|
have_automake=false
|
||||||
|
|
||||||
srcdir=`dirname $0`
|
if automake --version < /dev/null > /dev/null 2>&1 ; then
|
||||||
test -z "$srcdir" && srcdir=.
|
automake_version=`automake --version | grep 'automake (GNU automake)' | sed 's/^[^0-9]*\(.*\)/\1/'`
|
||||||
|
case $automake_version in
|
||||||
|
1.2*|1.3*|1.4|1.4*|1.5*|1.6*|1.7*|1.8*)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
have_automake=true
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
if $have_automake ; then
|
||||||
|
AUTOMAKE="automake"
|
||||||
|
ACLOCAL="aclocal"
|
||||||
|
else
|
||||||
|
if automake-1.9 --version < /dev/null > /dev/null 2>&1 ; then
|
||||||
|
AUTOMAKE="automake-1.9"
|
||||||
|
ACLOCAL="aclocal-1.9"
|
||||||
|
else
|
||||||
|
echo "automake missing or too old. This requires at least automake 1.9"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
NOCONFIGURE=1
|
# ------ START GETTEXT ------
|
||||||
PKG_NAME="hexchat"
|
|
||||||
|
|
||||||
(test -f $srcdir/src/common/hexchat.c) || {
|
echo searching for GNU gettext intl directory...
|
||||||
echo -n "**Error**: Directory "\`$srcdir\'" does not look like the"
|
|
||||||
echo " top-level $PKG_NAME directory"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
which gnome-autogen.sh || {
|
dirs="/usr/share /usr/local/share /opt/share /usr /usr/local /opt /usr/gnu/share /opt/local /opt/local/share"
|
||||||
echo "You need to install gnome-common"
|
found=0
|
||||||
exit 1
|
for try in $dirs; do
|
||||||
}
|
echo -n " -> $try/gettext/intl... "
|
||||||
|
if test -d $try/gettext/intl; then
|
||||||
|
echo found it
|
||||||
|
found=1
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
echo no
|
||||||
|
done
|
||||||
|
if test "$found" != 1; then
|
||||||
|
echo ERROR: Cannot find gettext/intl directory.
|
||||||
|
echo ERROR: Install GNU gettext in /usr or /usr/local prefix.
|
||||||
|
exit 7
|
||||||
|
fi;
|
||||||
|
|
||||||
. gnome-autogen.sh
|
echo copying gettext intl files...
|
||||||
|
if test -f $try/gettext/mkinstalldirs; then
|
||||||
|
ln -s $try/gettext/mkinstalldirs mkinstalldirs
|
||||||
|
fi
|
||||||
|
intldir="$try/gettext/intl"
|
||||||
|
if test ! -d intl; then
|
||||||
|
mkdir intl
|
||||||
|
fi
|
||||||
|
olddir=`pwd`
|
||||||
|
cd $intldir
|
||||||
|
for file in *; do
|
||||||
|
if test $file != COPYING.LIB-2.0 && test $file != COPYING.LIB-2.1; then
|
||||||
|
rm -f $olddir/intl/$file
|
||||||
|
cp $intldir/$file $olddir/intl/
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
cp -f $try/gettext/po/Makefile.in.in $olddir/po/
|
||||||
|
cd $olddir
|
||||||
|
if test -f intl/plural.c; then
|
||||||
|
sleep 2
|
||||||
|
touch intl/plural.c
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ------ END GETTEXT ------
|
||||||
|
|
||||||
|
|
||||||
|
echo running $ACLOCAL...
|
||||||
|
$ACLOCAL $ACLOCAL_FLAGS
|
||||||
|
if test "$?" != "0"; then
|
||||||
|
echo aclocal failed, stopping.
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
echo running libtoolize...
|
||||||
|
libtoolize --copy --force --install
|
||||||
|
if test "$?" != "0"; then
|
||||||
|
echo libtoolize failed, stopping.
|
||||||
|
exit 3
|
||||||
|
fi
|
||||||
|
echo running autoheader...
|
||||||
|
autoheader
|
||||||
|
if test "$?" != "0"; then
|
||||||
|
echo autoheader failed, stopping.
|
||||||
|
exit 4
|
||||||
|
fi
|
||||||
|
echo running $AUTOMAKE...
|
||||||
|
$AUTOMAKE -a -c
|
||||||
|
if test "$?" != "0"; then
|
||||||
|
echo automake failed, stopping.
|
||||||
|
exit 5
|
||||||
|
fi
|
||||||
|
echo running autoconf...
|
||||||
|
autoconf
|
||||||
|
if test "$?" != "0"; then
|
||||||
|
echo autoconf failed, stopping.
|
||||||
|
exit 6
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo if no errors occured, run ./configure
|
||||||
|
exit 0
|
||||||
|
|
||||||
|
#autogen.sh generates:
|
||||||
|
# aclocal.m4 Makefile.in config.guess config.sub ltmain.sh
|
||||||
|
# configure install-sh missing mkinstalldirs depcomp
|
||||||
|
#
|
||||||
|
#configure generates:
|
||||||
|
# config.status libtool Makefile.in
|
||||||
|
@ -3,17 +3,16 @@
|
|||||||
#define USE_GMODULE
|
#define USE_GMODULE
|
||||||
#define USE_PLUGIN
|
#define USE_PLUGIN
|
||||||
#define USE_OPENSSL
|
#define USE_OPENSSL
|
||||||
|
#define USE_LIBSEXY
|
||||||
#define USE_IPV6
|
#define USE_IPV6
|
||||||
#define HAVE_ISO_CODES
|
#define HAVE_ISO_CODES
|
||||||
#define ISO_CODES_PREFIX ".\\"
|
|
||||||
#define ISO_CODES_LOCALEDIR LOCALEDIR
|
|
||||||
#define PACKAGE_NAME "hexchat"
|
#define PACKAGE_NAME "hexchat"
|
||||||
#define PACKAGE_VERSION "<#= [string]::Join('.', $versionParts) #>"
|
#define PACKAGE_VERSION "2.9.6"
|
||||||
#define HEXCHATLIBDIR ".\\plugins"
|
#define HEXCHATLIBDIR ".\\plugins"
|
||||||
#define HEXCHATSHAREDIR "."
|
#define HEXCHATSHAREDIR "."
|
||||||
#define OLD_PERL
|
#define OLD_PERL
|
||||||
#define GETTEXT_PACKAGE "hexchat"
|
#define GETTEXT_PACKAGE "hexchat"
|
||||||
#define PACKAGE_TARNAME "hexchat-<#= [string]::Join('.', $versionParts) #>"
|
#define PACKAGE_TARNAME "hexchat-2.9.6"
|
||||||
#ifndef USE_IPV6
|
#ifndef USE_IPV6
|
||||||
#define socklen_t int
|
#define socklen_t int
|
||||||
#endif
|
#endif
|
672
config.rpath
Normal file
672
config.rpath
Normal file
@ -0,0 +1,672 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
# Output a system dependent set of variables, describing how to set the
|
||||||
|
# run time search path of shared libraries in an executable.
|
||||||
|
#
|
||||||
|
# Copyright 1996-2010 Free Software Foundation, Inc.
|
||||||
|
# Taken from GNU libtool, 2001
|
||||||
|
# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
|
||||||
|
#
|
||||||
|
# This file is free software; the Free Software Foundation gives
|
||||||
|
# unlimited permission to copy and/or distribute it, with or without
|
||||||
|
# modifications, as long as this notice is preserved.
|
||||||
|
#
|
||||||
|
# The first argument passed to this file is the canonical host specification,
|
||||||
|
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
|
||||||
|
# or
|
||||||
|
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
|
||||||
|
# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
|
||||||
|
# should be set by the caller.
|
||||||
|
#
|
||||||
|
# The set of defined variables is at the end of this script.
|
||||||
|
|
||||||
|
# Known limitations:
|
||||||
|
# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
|
||||||
|
# than 256 bytes, otherwise the compiler driver will dump core. The only
|
||||||
|
# known workaround is to choose shorter directory names for the build
|
||||||
|
# directory and/or the installation directory.
|
||||||
|
|
||||||
|
# All known linkers require a `.a' archive for static linking (except MSVC,
|
||||||
|
# which needs '.lib').
|
||||||
|
libext=a
|
||||||
|
shrext=.so
|
||||||
|
|
||||||
|
host="$1"
|
||||||
|
host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
|
||||||
|
host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
|
||||||
|
host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
|
||||||
|
|
||||||
|
# Code taken from libtool.m4's _LT_CC_BASENAME.
|
||||||
|
|
||||||
|
for cc_temp in $CC""; do
|
||||||
|
case $cc_temp in
|
||||||
|
compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
|
||||||
|
distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
|
||||||
|
\-*) ;;
|
||||||
|
*) break;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
|
||||||
|
|
||||||
|
# Code taken from libtool.m4's _LT_COMPILER_PIC.
|
||||||
|
|
||||||
|
wl=
|
||||||
|
if test "$GCC" = yes; then
|
||||||
|
wl='-Wl,'
|
||||||
|
else
|
||||||
|
case "$host_os" in
|
||||||
|
aix*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
darwin*)
|
||||||
|
case $cc_basename in
|
||||||
|
xlc*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
mingw* | cygwin* | pw32* | os2* | cegcc*)
|
||||||
|
;;
|
||||||
|
hpux9* | hpux10* | hpux11*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
irix5* | irix6* | nonstopux*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
newsos6)
|
||||||
|
;;
|
||||||
|
linux* | k*bsd*-gnu)
|
||||||
|
case $cc_basename in
|
||||||
|
ecc*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
icc* | ifort*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
lf95*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
pgcc | pgf77 | pgf90)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
ccc*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
como)
|
||||||
|
wl='-lopt='
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
case `$CC -V 2>&1 | sed 5q` in
|
||||||
|
*Sun\ C*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
osf3* | osf4* | osf5*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
rdos*)
|
||||||
|
;;
|
||||||
|
solaris*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
sunos4*)
|
||||||
|
wl='-Qoption ld '
|
||||||
|
;;
|
||||||
|
sysv4 | sysv4.2uw2* | sysv4.3*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
sysv4*MP*)
|
||||||
|
;;
|
||||||
|
sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
unicos*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
uts4*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Code taken from libtool.m4's _LT_LINKER_SHLIBS.
|
||||||
|
|
||||||
|
hardcode_libdir_flag_spec=
|
||||||
|
hardcode_libdir_separator=
|
||||||
|
hardcode_direct=no
|
||||||
|
hardcode_minus_L=no
|
||||||
|
|
||||||
|
case "$host_os" in
|
||||||
|
cygwin* | mingw* | pw32* | cegcc*)
|
||||||
|
# FIXME: the MSVC++ port hasn't been tested in a loooong time
|
||||||
|
# When not using gcc, we currently assume that we are using
|
||||||
|
# Microsoft Visual C++.
|
||||||
|
if test "$GCC" != yes; then
|
||||||
|
with_gnu_ld=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
interix*)
|
||||||
|
# we just hope/assume this is gcc and not c89 (= MSVC++)
|
||||||
|
with_gnu_ld=yes
|
||||||
|
;;
|
||||||
|
openbsd*)
|
||||||
|
with_gnu_ld=no
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
ld_shlibs=yes
|
||||||
|
if test "$with_gnu_ld" = yes; then
|
||||||
|
# Set some defaults for GNU ld with shared library support. These
|
||||||
|
# are reset later if shared libraries are not supported. Putting them
|
||||||
|
# here allows them to be overridden if necessary.
|
||||||
|
# Unlike libtool, we use -rpath here, not --rpath, since the documented
|
||||||
|
# option of GNU ld is called -rpath, not --rpath.
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||||
|
case "$host_os" in
|
||||||
|
aix[3-9]*)
|
||||||
|
# On AIX/PPC, the GNU linker is very broken
|
||||||
|
if test "$host_cpu" != ia64; then
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
amigaos*)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
# Samuel A. Falvo II <kc5tja@dolphin.openprojects.net> reports
|
||||||
|
# that the semantics of dynamic libraries on AmigaOS, at least up
|
||||||
|
# to version 4, is to share data among multiple programs linked
|
||||||
|
# with the same dynamic library. Since this doesn't match the
|
||||||
|
# behavior of shared libraries on other platforms, we cannot use
|
||||||
|
# them.
|
||||||
|
ld_shlibs=no
|
||||||
|
;;
|
||||||
|
beos*)
|
||||||
|
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
cygwin* | mingw* | pw32* | cegcc*)
|
||||||
|
# hardcode_libdir_flag_spec is actually meaningless, as there is
|
||||||
|
# no search path for DLLs.
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
interix[3-9]*)
|
||||||
|
hardcode_direct=no
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
|
||||||
|
;;
|
||||||
|
gnu* | linux* | k*bsd*-gnu)
|
||||||
|
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
netbsd*)
|
||||||
|
;;
|
||||||
|
solaris*)
|
||||||
|
if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
|
||||||
|
ld_shlibs=no
|
||||||
|
elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
|
||||||
|
case `$LD -v 2>&1` in
|
||||||
|
*\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
|
||||||
|
ld_shlibs=no
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
||||||
|
hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
|
||||||
|
else
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
sunos4*)
|
||||||
|
hardcode_direct=yes
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
if test "$ld_shlibs" = no; then
|
||||||
|
hardcode_libdir_flag_spec=
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
case "$host_os" in
|
||||||
|
aix3*)
|
||||||
|
# Note: this linker hardcodes the directories in LIBPATH if there
|
||||||
|
# are no directories specified by -L.
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
if test "$GCC" = yes; then
|
||||||
|
# Neither direct hardcoding nor static linking is supported with a
|
||||||
|
# broken collect2.
|
||||||
|
hardcode_direct=unsupported
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
aix[4-9]*)
|
||||||
|
if test "$host_cpu" = ia64; then
|
||||||
|
# On IA64, the linker does run time linking by default, so we don't
|
||||||
|
# have to do anything special.
|
||||||
|
aix_use_runtimelinking=no
|
||||||
|
else
|
||||||
|
aix_use_runtimelinking=no
|
||||||
|
# Test if we are trying to use run time linking or normal
|
||||||
|
# AIX style linking. If -brtl is somewhere in LDFLAGS, we
|
||||||
|
# need to do runtime linking.
|
||||||
|
case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
|
||||||
|
for ld_flag in $LDFLAGS; do
|
||||||
|
if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
|
||||||
|
aix_use_runtimelinking=yes
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
hardcode_direct=yes
|
||||||
|
hardcode_libdir_separator=':'
|
||||||
|
if test "$GCC" = yes; then
|
||||||
|
case $host_os in aix4.[012]|aix4.[012].*)
|
||||||
|
collect2name=`${CC} -print-prog-name=collect2`
|
||||||
|
if test -f "$collect2name" && \
|
||||||
|
strings "$collect2name" | grep resolve_lib_name >/dev/null
|
||||||
|
then
|
||||||
|
# We have reworked collect2
|
||||||
|
:
|
||||||
|
else
|
||||||
|
# We have old collect2
|
||||||
|
hardcode_direct=unsupported
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
hardcode_libdir_separator=
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
# Begin _LT_AC_SYS_LIBPATH_AIX.
|
||||||
|
echo 'int main () { return 0; }' > conftest.c
|
||||||
|
${CC} ${LDFLAGS} conftest.c -o conftest
|
||||||
|
aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
|
||||||
|
}'`
|
||||||
|
if test -z "$aix_libpath"; then
|
||||||
|
aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
|
||||||
|
}'`
|
||||||
|
fi
|
||||||
|
if test -z "$aix_libpath"; then
|
||||||
|
aix_libpath="/usr/lib:/lib"
|
||||||
|
fi
|
||||||
|
rm -f conftest.c conftest
|
||||||
|
# End _LT_AC_SYS_LIBPATH_AIX.
|
||||||
|
if test "$aix_use_runtimelinking" = yes; then
|
||||||
|
hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
|
||||||
|
else
|
||||||
|
if test "$host_cpu" = ia64; then
|
||||||
|
hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
|
||||||
|
else
|
||||||
|
hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
amigaos*)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
# see comment about different semantics on the GNU ld section
|
||||||
|
ld_shlibs=no
|
||||||
|
;;
|
||||||
|
bsdi[45]*)
|
||||||
|
;;
|
||||||
|
cygwin* | mingw* | pw32* | cegcc*)
|
||||||
|
# When not using gcc, we currently assume that we are using
|
||||||
|
# Microsoft Visual C++.
|
||||||
|
# hardcode_libdir_flag_spec is actually meaningless, as there is
|
||||||
|
# no search path for DLLs.
|
||||||
|
hardcode_libdir_flag_spec=' '
|
||||||
|
libext=lib
|
||||||
|
;;
|
||||||
|
darwin* | rhapsody*)
|
||||||
|
hardcode_direct=no
|
||||||
|
if test "$GCC" = yes ; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
case $cc_basename in
|
||||||
|
xlc*)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
ld_shlibs=no
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
dgux*)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
;;
|
||||||
|
freebsd1*)
|
||||||
|
ld_shlibs=no
|
||||||
|
;;
|
||||||
|
freebsd2.2*)
|
||||||
|
hardcode_libdir_flag_spec='-R$libdir'
|
||||||
|
hardcode_direct=yes
|
||||||
|
;;
|
||||||
|
freebsd2*)
|
||||||
|
hardcode_direct=yes
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
;;
|
||||||
|
freebsd* | dragonfly*)
|
||||||
|
hardcode_libdir_flag_spec='-R$libdir'
|
||||||
|
hardcode_direct=yes
|
||||||
|
;;
|
||||||
|
hpux9*)
|
||||||
|
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
hardcode_direct=yes
|
||||||
|
# hardcode_minus_L: Not really in the search PATH,
|
||||||
|
# but as the default location of the library.
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
;;
|
||||||
|
hpux10*)
|
||||||
|
if test "$with_gnu_ld" = no; then
|
||||||
|
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
hardcode_direct=yes
|
||||||
|
# hardcode_minus_L: Not really in the search PATH,
|
||||||
|
# but as the default location of the library.
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
hpux11*)
|
||||||
|
if test "$with_gnu_ld" = no; then
|
||||||
|
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
case $host_cpu in
|
||||||
|
hppa*64*|ia64*)
|
||||||
|
hardcode_direct=no
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
hardcode_direct=yes
|
||||||
|
# hardcode_minus_L: Not really in the search PATH,
|
||||||
|
# but as the default location of the library.
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
irix5* | irix6* | nonstopux*)
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
;;
|
||||||
|
netbsd*)
|
||||||
|
hardcode_libdir_flag_spec='-R$libdir'
|
||||||
|
hardcode_direct=yes
|
||||||
|
;;
|
||||||
|
newsos6)
|
||||||
|
hardcode_direct=yes
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
;;
|
||||||
|
openbsd*)
|
||||||
|
if test -f /usr/libexec/ld.so; then
|
||||||
|
hardcode_direct=yes
|
||||||
|
if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
|
||||||
|
else
|
||||||
|
case "$host_os" in
|
||||||
|
openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
|
||||||
|
hardcode_libdir_flag_spec='-R$libdir'
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
os2*)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
;;
|
||||||
|
osf3*)
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
;;
|
||||||
|
osf4* | osf5*)
|
||||||
|
if test "$GCC" = yes; then
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||||
|
else
|
||||||
|
# Both cc and cxx compiler support -rpath directly
|
||||||
|
hardcode_libdir_flag_spec='-rpath $libdir'
|
||||||
|
fi
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
;;
|
||||||
|
solaris*)
|
||||||
|
hardcode_libdir_flag_spec='-R$libdir'
|
||||||
|
;;
|
||||||
|
sunos4*)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
hardcode_direct=yes
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
;;
|
||||||
|
sysv4)
|
||||||
|
case $host_vendor in
|
||||||
|
sni)
|
||||||
|
hardcode_direct=yes # is this really true???
|
||||||
|
;;
|
||||||
|
siemens)
|
||||||
|
hardcode_direct=no
|
||||||
|
;;
|
||||||
|
motorola)
|
||||||
|
hardcode_direct=no #Motorola manual says yes, but my tests say they lie
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
sysv4.3*)
|
||||||
|
;;
|
||||||
|
sysv4*MP*)
|
||||||
|
if test -d /usr/nec; then
|
||||||
|
ld_shlibs=yes
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
|
||||||
|
;;
|
||||||
|
sysv5* | sco3.2v5* | sco5v6*)
|
||||||
|
hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
|
||||||
|
hardcode_libdir_separator=':'
|
||||||
|
;;
|
||||||
|
uts4*)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
ld_shlibs=no
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check dynamic linker characteristics
|
||||||
|
# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER.
|
||||||
|
# Unlike libtool.m4, here we don't care about _all_ names of the library, but
|
||||||
|
# only about the one the linker finds when passed -lNAME. This is the last
|
||||||
|
# element of library_names_spec in libtool.m4, or possibly two of them if the
|
||||||
|
# linker has special search rules.
|
||||||
|
library_names_spec= # the last element of library_names_spec in libtool.m4
|
||||||
|
libname_spec='lib$name'
|
||||||
|
case "$host_os" in
|
||||||
|
aix3*)
|
||||||
|
library_names_spec='$libname.a'
|
||||||
|
;;
|
||||||
|
aix[4-9]*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
amigaos*)
|
||||||
|
library_names_spec='$libname.a'
|
||||||
|
;;
|
||||||
|
beos*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
bsdi[45]*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
cygwin* | mingw* | pw32* | cegcc*)
|
||||||
|
shrext=.dll
|
||||||
|
library_names_spec='$libname.dll.a $libname.lib'
|
||||||
|
;;
|
||||||
|
darwin* | rhapsody*)
|
||||||
|
shrext=.dylib
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
dgux*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
freebsd1*)
|
||||||
|
;;
|
||||||
|
freebsd* | dragonfly*)
|
||||||
|
case "$host_os" in
|
||||||
|
freebsd[123]*)
|
||||||
|
library_names_spec='$libname$shrext$versuffix' ;;
|
||||||
|
*)
|
||||||
|
library_names_spec='$libname$shrext' ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
gnu*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
hpux9* | hpux10* | hpux11*)
|
||||||
|
case $host_cpu in
|
||||||
|
ia64*)
|
||||||
|
shrext=.so
|
||||||
|
;;
|
||||||
|
hppa*64*)
|
||||||
|
shrext=.sl
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
shrext=.sl
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
interix[3-9]*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
irix5* | irix6* | nonstopux*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
case "$host_os" in
|
||||||
|
irix5* | nonstopux*)
|
||||||
|
libsuff= shlibsuff=
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
case $LD in
|
||||||
|
*-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
|
||||||
|
*-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
|
||||||
|
*-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
|
||||||
|
*) libsuff= shlibsuff= ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
linux*oldld* | linux*aout* | linux*coff*)
|
||||||
|
;;
|
||||||
|
linux* | k*bsd*-gnu)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
knetbsd*-gnu)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
netbsd*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
newsos6)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
nto-qnx*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
openbsd*)
|
||||||
|
library_names_spec='$libname$shrext$versuffix'
|
||||||
|
;;
|
||||||
|
os2*)
|
||||||
|
libname_spec='$name'
|
||||||
|
shrext=.dll
|
||||||
|
library_names_spec='$libname.a'
|
||||||
|
;;
|
||||||
|
osf3* | osf4* | osf5*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
rdos*)
|
||||||
|
;;
|
||||||
|
solaris*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
sunos4*)
|
||||||
|
library_names_spec='$libname$shrext$versuffix'
|
||||||
|
;;
|
||||||
|
sysv4 | sysv4.3*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
sysv4*MP*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
uts4*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
|
||||||
|
escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
|
||||||
|
shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
|
||||||
|
escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
|
||||||
|
escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
|
||||||
|
escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
|
||||||
|
|
||||||
|
LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
|
||||||
|
|
||||||
|
# How to pass a linker flag through the compiler.
|
||||||
|
wl="$escaped_wl"
|
||||||
|
|
||||||
|
# Static library suffix (normally "a").
|
||||||
|
libext="$libext"
|
||||||
|
|
||||||
|
# Shared library suffix (normally "so").
|
||||||
|
shlibext="$shlibext"
|
||||||
|
|
||||||
|
# Format of library name prefix.
|
||||||
|
libname_spec="$escaped_libname_spec"
|
||||||
|
|
||||||
|
# Library names that the linker finds when passed -lNAME.
|
||||||
|
library_names_spec="$escaped_library_names_spec"
|
||||||
|
|
||||||
|
# Flag to hardcode \$libdir into a binary during linking.
|
||||||
|
# This must work even if \$libdir does not exist.
|
||||||
|
hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
|
||||||
|
|
||||||
|
# Whether we need a single -rpath flag with a separated argument.
|
||||||
|
hardcode_libdir_separator="$hardcode_libdir_separator"
|
||||||
|
|
||||||
|
# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
|
||||||
|
# resulting binary.
|
||||||
|
hardcode_direct="$hardcode_direct"
|
||||||
|
|
||||||
|
# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
|
||||||
|
# resulting binary.
|
||||||
|
hardcode_minus_L="$hardcode_minus_L"
|
||||||
|
|
||||||
|
EOF
|
416
configure.ac
416
configure.ac
@ -1,6 +1,6 @@
|
|||||||
dnl Process this file with autoconf to produce a configure script.
|
dnl Process this file with autoconf to produce a configure script.
|
||||||
|
|
||||||
AC_INIT([HexChat],[2.10.0])
|
AC_INIT([HexChat],[2.9.6])
|
||||||
|
|
||||||
AC_PREREQ([2.60])
|
AC_PREREQ([2.60])
|
||||||
AC_COPYRIGHT([Copyright (C) 1998-2010 Peter Zelezny])
|
AC_COPYRIGHT([Copyright (C) 1998-2010 Peter Zelezny])
|
||||||
@ -29,8 +29,9 @@ dnl -----------------------------------------------------------
|
|||||||
GETTEXT_PACKAGE=hexchat
|
GETTEXT_PACKAGE=hexchat
|
||||||
AC_SUBST(GETTEXT_PACKAGE)
|
AC_SUBST(GETTEXT_PACKAGE)
|
||||||
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE",[Gettext package name])
|
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE",[Gettext package name])
|
||||||
IT_PROG_INTLTOOL([0.40.0])
|
|
||||||
AM_GLIB_GNU_GETTEXT
|
ALL_LINGUAS="af am ast az be bg ca cs da de el en_GB es et eu fi fr gl gu hi hu id it ja kn ko lt lv mk ml ms nb nl no pa pl pt pt_BR ru rw sk sl sq sr sv th uk vi wa zh_CN zh_TW"
|
||||||
|
AM_GNU_GETTEXT
|
||||||
|
|
||||||
dnl displaced from acconfig.h
|
dnl displaced from acconfig.h
|
||||||
AH_VERBATIM([OLD_PERL],[#undef OLD_PERL])
|
AH_VERBATIM([OLD_PERL],[#undef OLD_PERL])
|
||||||
@ -40,13 +41,19 @@ AH_VERBATIM([HEXCHATSHAREDIR],[#undef HEXCHATSHAREDIR])
|
|||||||
AH_VERBATIM([SOCKS],[#undef SOCKS])
|
AH_VERBATIM([SOCKS],[#undef SOCKS])
|
||||||
AH_VERBATIM([USE_MSPROXY],[#undef USE_MSPROXY])
|
AH_VERBATIM([USE_MSPROXY],[#undef USE_MSPROXY])
|
||||||
AH_VERBATIM([USE_LIBPROXY],[#undef USE_LIBPROXY])
|
AH_VERBATIM([USE_LIBPROXY],[#undef USE_LIBPROXY])
|
||||||
|
dnl AH_VERBATIM([USE_GNOME],[#undef USE_GNOME])
|
||||||
|
AH_VERBATIM([USE_SHM],[#undef USE_SHM])
|
||||||
|
AH_VERBATIM([USE_GTKSPELL],[#undef USE_GTKSPELL])
|
||||||
|
AH_VERBATIM([USE_LIBSEXY],[#undef USE_LIBSEXY])
|
||||||
AH_VERBATIM([HAVE_ISO_CODES],[#undef HAVE_ISO_CODES])
|
AH_VERBATIM([HAVE_ISO_CODES],[#undef HAVE_ISO_CODES])
|
||||||
AH_VERBATIM([HAVE_GTK_MAC],[#undef HAVE_GTK_MAC])
|
|
||||||
AH_VERBATIM([USE_LIBNOTIFY],[#undef USE_LIBNOTIFY])
|
AH_VERBATIM([USE_LIBNOTIFY],[#undef USE_LIBNOTIFY])
|
||||||
AH_VERBATIM([USE_LIBCANBERRA],[#undef USE_LIBCANBERRA])
|
AH_VERBATIM([USE_LIBCANBERRA],[#undef USE_LIBCANBERRA])
|
||||||
AH_VERBATIM([USE_IPV6],[#undef USE_IPV6])
|
AH_VERBATIM([USE_IPV6],[#undef USE_IPV6])
|
||||||
|
AH_VERBATIM([USE_MMX],[#undef USE_MMX])
|
||||||
AH_VERBATIM([USE_OPENSSL],[#undef USE_OPENSSL])
|
AH_VERBATIM([USE_OPENSSL],[#undef USE_OPENSSL])
|
||||||
AH_VERBATIM([USE_PLUGIN],[#undef USE_PLUGIN])
|
AH_VERBATIM([USE_PLUGIN],[#undef USE_PLUGIN])
|
||||||
|
AH_VERBATIM([USE_XFT],[#undef USE_XFT])
|
||||||
|
AH_VERBATIM([USE_XLIB],[#undef USE_XLIB])
|
||||||
AH_VERBATIM([USE_SIGACTION],[#undef USE_SIGACTION])
|
AH_VERBATIM([USE_SIGACTION],[#undef USE_SIGACTION])
|
||||||
AH_VERBATIM([USING_FREEBSD],[#undef USING_FREEBSD])
|
AH_VERBATIM([USING_FREEBSD],[#undef USING_FREEBSD])
|
||||||
AH_VERBATIM([USING_LINUX],[#undef USING_LINUX])
|
AH_VERBATIM([USING_LINUX],[#undef USING_LINUX])
|
||||||
@ -85,6 +92,10 @@ AC_ARG_ENABLE(ipv6,
|
|||||||
[AS_HELP_STRING([--disable-ipv6],[disable IPv6])],
|
[AS_HELP_STRING([--disable-ipv6],[disable IPv6])],
|
||||||
ipv6=$enableval, ipv6=yes)
|
ipv6=$enableval, ipv6=yes)
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(xft,
|
||||||
|
[AS_HELP_STRING([--enable-xft],[enable use of Xft directly (default: no)])],
|
||||||
|
xft=$enableval, xft=no)
|
||||||
|
|
||||||
AC_ARG_ENABLE(openssl,
|
AC_ARG_ENABLE(openssl,
|
||||||
[AS_HELP_STRING([--enable-openssl[=PATH]],[enable use of openSSL])],
|
[AS_HELP_STRING([--enable-openssl[=PATH]],[enable use of openSSL])],
|
||||||
openssl=$enableval, openssl=yes)
|
openssl=$enableval, openssl=yes)
|
||||||
@ -97,6 +108,14 @@ AC_ARG_ENABLE(textfe,
|
|||||||
[AS_HELP_STRING([--enable-textfe],[build the text frontend (default: no)])],
|
[AS_HELP_STRING([--enable-textfe],[build the text frontend (default: no)])],
|
||||||
textfe=$enableval, textfe=no)
|
textfe=$enableval, textfe=no)
|
||||||
|
|
||||||
|
dnl AC_ARG_ENABLE(gnome,
|
||||||
|
dnl [AS_HELP_STRING([--disable-gnome],[disable use of gnome])],
|
||||||
|
dnl gnome=$enableval, gnome=yes)
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(xlib,
|
||||||
|
[AS_HELP_STRING([--disable-xlib],[disable use of xlib (for non X11 systems)])],
|
||||||
|
xlib=$enableval, xlib=yes)
|
||||||
|
|
||||||
AC_ARG_ENABLE(python,
|
AC_ARG_ENABLE(python,
|
||||||
[AS_HELP_STRING([--enable-python=pythonversion],[build the python plugin; possible values: "python2", "python3" or specific such as "python3.3" (default on, python2)])],
|
[AS_HELP_STRING([--enable-python=pythonversion],[build the python plugin; possible values: "python2", "python3" or specific such as "python3.3" (default on, python2)])],
|
||||||
python=$enableval, python=python2)
|
python=$enableval, python=python2)
|
||||||
@ -142,6 +161,19 @@ AC_ARG_ENABLE(libcanberra,
|
|||||||
[AS_HELP_STRING([--disable-libcanberra],[disable libcanberra support])],
|
[AS_HELP_STRING([--disable-libcanberra],[disable libcanberra support])],
|
||||||
libcanberra=$enableval, libcanberra=yes)
|
libcanberra=$enableval, libcanberra=yes)
|
||||||
|
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(mmx,
|
||||||
|
[AS_HELP_STRING([--disable-mmx],[disable MMX assembly routines])],
|
||||||
|
mmx=$enableval, mmx=yes)
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(shm,
|
||||||
|
[AS_HELP_STRING([--enable-shm],[enable use of XShm for fast tinting (default: no)])],
|
||||||
|
shm=$enableval, shm=no)
|
||||||
|
|
||||||
|
AC_ARG_ENABLE(spell,
|
||||||
|
[AS_HELP_STRING([--enable-spell=type],[enable spelling type: none static libsexy gtkspell])],
|
||||||
|
spell=$enableval, spell=libsexy)
|
||||||
|
|
||||||
AC_ARG_ENABLE(ntlm,
|
AC_ARG_ENABLE(ntlm,
|
||||||
[AS_HELP_STRING([--enable-ntlm],[enable Microsoft\'s NTLM auth (libntlm) library support (default: no)])],
|
[AS_HELP_STRING([--enable-ntlm],[enable Microsoft\'s NTLM auth (libntlm) library support (default: no)])],
|
||||||
ntlm=$enableval, ntlm=no)
|
ntlm=$enableval, ntlm=no)
|
||||||
@ -150,10 +182,6 @@ AC_ARG_ENABLE(libproxy,
|
|||||||
[AS_HELP_STRING([--disable-libproxy],[disable libproxy support (default: auto)])],
|
[AS_HELP_STRING([--disable-libproxy],[disable libproxy support (default: auto)])],
|
||||||
libproxy=$enableval, libproxy=auto)
|
libproxy=$enableval, libproxy=auto)
|
||||||
|
|
||||||
AC_ARG_ENABLE(isocodes,
|
|
||||||
[AS_HELP_STRING([--disable-isocodes],[disable iso-codes with spell-check])],
|
|
||||||
isocodes=$enableval, isocodes=yes)
|
|
||||||
|
|
||||||
AC_ARG_ENABLE(minimal-flags,
|
AC_ARG_ENABLE(minimal-flags,
|
||||||
[AS_HELP_STRING([--enable-minimal-flags],[only add those CFLAGS that are really needed or not intrusive (default: no)])],
|
[AS_HELP_STRING([--enable-minimal-flags],[only add those CFLAGS that are really needed or not intrusive (default: no)])],
|
||||||
minimalflags=$enableval, minimalflags=no)
|
minimalflags=$enableval, minimalflags=no)
|
||||||
@ -184,10 +212,9 @@ if test "$glib" = no; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
PKG_CHECK_MODULES([GOBJECT], [gobject-2.0], [], [AC_MSG_ERROR(Cannot find gobject-2.0!)])
|
PKG_CHECK_MODULES([GOBJECT], [gobject-2.0], [], [AC_MSG_ERROR(Cannot find gobject-2.0!)])
|
||||||
PKG_CHECK_MODULES([GIO], [gio-2.0], [], [AC_MSG_ERROR(Cannot find gio-2.0!)])
|
|
||||||
|
|
||||||
COMMON_CFLAGS="$GLIB_CFLAGS $GIO_CFLAGS $GOBJECT_CFLAGS -DG_DISABLE_SINGLE_INCLUDES"
|
COMMON_CFLAGS="$GLIB_CFLAGS $GOBJECT_CFLAGS -DG_DISABLE_SINGLE_INCLUDES"
|
||||||
COMMON_LIBS="$GLIB_LIBS $GIO_LIBS $GOBJECT_LIBS -lgmodule-2.0"
|
COMMON_LIBS="$GLIB_LIBS $GOBJECT_LIBS -lgmodule-2.0"
|
||||||
|
|
||||||
dnl *********************************************************************
|
dnl *********************************************************************
|
||||||
dnl ** GTK **************************************************************
|
dnl ** GTK **************************************************************
|
||||||
@ -205,20 +232,72 @@ if test "$gtkfe" = yes ; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test "$gtkfe" != yes; then
|
||||||
|
gnome=no
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl *********************************************************************
|
||||||
|
dnl ** GNOME ************************************************************
|
||||||
|
dnl *********************************************************************
|
||||||
|
|
||||||
GUI_LIBS="$GUI_LIBS $GTK_LIBS"
|
GUI_LIBS="$GUI_LIBS $GTK_LIBS"
|
||||||
GUI_CFLAGS="$GUI_CFLAGS $GTK_CFLAGS -DG_DISABLE_SINGLE_INCLUDES -DGDK_PIXBUF_DISABLE_SINGLE_INCLUDES -DGTK_DISABLE_SINGLE_INCLUDES -DGTK_DISABLE_DEPRECATED"
|
GUI_CFLAGS="$GUI_CFLAGS $GTK_CFLAGS -DG_DISABLE_SINGLE_INCLUDES -DGDK_PIXBUF_DISABLE_SINGLE_INCLUDES -DGTK_DISABLE_SINGLE_INCLUDES"
|
||||||
|
|
||||||
|
#if test "$gnome" = yes; then
|
||||||
|
# AC_MSG_CHECKING(Gnome2 compile flags)
|
||||||
|
# GNOME_CFLAGS="`$PKG_CONFIG libgnome-2.0 --cflags 2>/dev/null`"
|
||||||
|
# if test "_$GNOME_CFLAGS" = _ ; then
|
||||||
|
# gnome=no
|
||||||
|
# AC_MSG_RESULT([Gnome not found, building without it.])
|
||||||
|
# else
|
||||||
|
# GNOME_VER="`$PKG_CONFIG libgnome-2.0 --modversion`"
|
||||||
|
# GUI_LIBS="$GUI_LIBS `$PKG_CONFIG libgnome-2.0 --libs`"
|
||||||
|
# GUI_CFLAGS="$GUI_CFLAGS $GNOME_CFLAGS"
|
||||||
|
# AC_DEFINE(USE_GNOME)
|
||||||
|
# AC_MSG_RESULT(ok)
|
||||||
|
# fi
|
||||||
|
#fi
|
||||||
|
|
||||||
|
# GConf
|
||||||
|
#if test "$gnome" != no ; then
|
||||||
|
# AC_PATH_PROG(GCONFTOOL, gconftool-2, no)
|
||||||
|
#else
|
||||||
|
# GCONFTOOL=no
|
||||||
|
#fi
|
||||||
|
|
||||||
dnl *********************************************************************
|
dnl *********************************************************************
|
||||||
dnl ** MAC_INTEGRATION **************************************************
|
dnl ** XFT **************************************************************
|
||||||
dnl *********************************************************************
|
dnl *********************************************************************
|
||||||
|
|
||||||
_gdk_tgt=`$PKG_CONFIG --variable=target gdk-2.0`
|
if test "$xft" = yes; then
|
||||||
if test "x$_gdk_tgt" = xquartz; then
|
if $PKG_CONFIG xft --exists; then
|
||||||
PKG_CHECK_MODULES(GTK_MAC, gtk-mac-integration, [
|
GUI_CFLAGS="$GUI_CFLAGS `$PKG_CONFIG xft --cflags`"
|
||||||
GUI_LIBS="$GUI_LIBS $GTK_MAC_LIBS"
|
GUI_LIBS="$GUI_LIBS `$PKG_CONFIG xft --libs`"
|
||||||
GUI_CFLAGS="$GUI_CFLAGS $GTK_MAC_CFLAGS"
|
else
|
||||||
AC_DEFINE(HAVE_GTK_MAC)
|
xft=no
|
||||||
])
|
oldCPPFLAGS=$CPPFLAGS
|
||||||
|
CPPFLAGS="$CPPFLAGS $GTK_CFLAGS"
|
||||||
|
AC_CHECK_HEADERS(X11/Xft/Xft.h, xft=yes)
|
||||||
|
CPPFLAGS=$oldCPPFLAGS
|
||||||
|
fi
|
||||||
|
if test "$xft" = yes; then
|
||||||
|
AC_DEFINE(USE_XFT)
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl *********************************************************************
|
||||||
|
dnl ** XLIB *************************************************************
|
||||||
|
dnl *********************************************************************
|
||||||
|
|
||||||
|
if test "$xlib" = yes; then
|
||||||
|
AC_DEFINE(USE_XLIB)
|
||||||
|
if test "$system" = "SunOS"; then
|
||||||
|
LIBS="$LIBS -L/usr/openwin/lib -lX11"
|
||||||
|
else
|
||||||
|
AC_CHECK_LIB(X11, XSetWMHints)
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
shm=no
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl *********************************************************************
|
dnl *********************************************************************
|
||||||
@ -226,59 +305,45 @@ dnl ** PERL *************************************************************
|
|||||||
dnl *********************************************************************
|
dnl *********************************************************************
|
||||||
|
|
||||||
if test "$perl" = yes; then
|
if test "$perl" = yes; then
|
||||||
AC_MSG_CHECKING(for plugin interface used by Perl)
|
AC_PATH_PROG(perlpath, perl)
|
||||||
if test "$plugin" = yes; then
|
AC_MSG_CHECKING(for Perl compile flags)
|
||||||
AC_MSG_RESULT([yes])
|
PERL_CFLAGS=`$perlpath -MExtUtils::Embed -e ccopts 2>/dev/null`
|
||||||
AC_PATH_PROG(perlpath, perl)
|
if test "_$PERL_CFLAGS" = _ ; then
|
||||||
AC_MSG_CHECKING(for Perl compile flags)
|
AC_MSG_RESULT([not found, building without perl.])
|
||||||
PERL_CFLAGS=`$perlpath -MExtUtils::Embed -e ccopts 2>/dev/null`
|
|
||||||
if test "_$PERL_CFLAGS" = _ ; then
|
|
||||||
AC_MSG_RESULT([not found, building without perl.])
|
|
||||||
perl=no
|
|
||||||
else
|
|
||||||
PERL_LDFLAGS=`$perlpath -MExtUtils::Embed -e ldopts |$sedpath 's/-lgdbm //'`
|
|
||||||
PERL_LDFLAGS=`echo $PERL_LDFLAGS |$sedpath 's/-ldb //'`
|
|
||||||
PERL_LDFLAGS=`echo $PERL_LDFLAGS |$sedpath 's/-lndbm //'`
|
|
||||||
if test "$system" = "Linux"; then
|
|
||||||
PERL_LDFLAGS=`echo $PERL_LDFLAGS |$sedpath 's/-lnsl //'`
|
|
||||||
PERL_LDFLAGS=`echo $PERL_LDFLAGS |$sedpath 's/-lposix //'`
|
|
||||||
fi
|
|
||||||
PERL_LDFLAGS=`echo $PERL_LDFLAGS |$sedpath 's/-lc //'`
|
|
||||||
AC_MSG_RESULT(ok)
|
|
||||||
|
|
||||||
AC_MSG_CHECKING(for perl >= 5.8.0)
|
|
||||||
PERL_VER=`$perlpath -e 'print $]>= 5.008?"yes":"no"'`
|
|
||||||
if test "$PERL_VER" = "yes"; then
|
|
||||||
original_cflags="$CFLAGS"
|
|
||||||
original_ldflags="$LDFLAGS"
|
|
||||||
CFLAGS="$PERL_CFLAGS"
|
|
||||||
LDFLAGS="$PERL_LDFLAGS"
|
|
||||||
AC_TRY_LINK([#include <EXTERN.h>
|
|
||||||
#include <perl.h>], [], perl_is_usable=yes, perl_is_usable=no)
|
|
||||||
CFLAGS="$original_cflags"
|
|
||||||
LDFLAGS="$original_ldflags"
|
|
||||||
if test x$perl_is_usable = xno ; then
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
perl=no
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
AC_MSG_CHECKING(if perl plugin will be backward compatible)
|
|
||||||
if test "$perl_old" = "yes"; then
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
AC_DEFINE(OLD_PERL)
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
echo "perl version too old, building without perl."
|
|
||||||
perl=no
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT([plugins are disabled, use the --enable-plugin option for Perl])
|
|
||||||
perl=no
|
perl=no
|
||||||
|
else
|
||||||
|
PERL_LDFLAGS=`$perlpath -MExtUtils::Embed -e ldopts |$sedpath 's/-lgdbm //'`
|
||||||
|
PERL_LDFLAGS=`echo $PERL_LDFLAGS |$sedpath 's/-ldb //'`
|
||||||
|
PERL_LDFLAGS=`echo $PERL_LDFLAGS |$sedpath 's/-lndbm //'`
|
||||||
|
if test "$system" = "Linux"; then
|
||||||
|
PERL_LDFLAGS=`echo $PERL_LDFLAGS |$sedpath 's/-lnsl //'`
|
||||||
|
PERL_LDFLAGS=`echo $PERL_LDFLAGS |$sedpath 's/-lposix //'`
|
||||||
|
fi
|
||||||
|
PERL_LDFLAGS=`echo $PERL_LDFLAGS |$sedpath 's/-lc //'`
|
||||||
|
AC_MSG_RESULT(ok)
|
||||||
|
|
||||||
|
# oldLIBS=$LIBS
|
||||||
|
# LIBS="$LIBS $PERL_LDFLAGS"
|
||||||
|
# AC_CHECK_FUNC(eval_pv)
|
||||||
|
# AC_CHECK_FUNC(call_pv)
|
||||||
|
# LIBS=$oldLIBS
|
||||||
|
|
||||||
|
AC_MSG_CHECKING(for perl >= 5.8.0)
|
||||||
|
PERL_VER=`$perlpath -e 'print $]>= 5.008?"yes":"no"'`
|
||||||
|
if test "$PERL_VER" = "yes"; then
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_MSG_CHECKING(if perl plugin will be backward compatible)
|
||||||
|
if test "$perl_old" = "yes"; then
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(OLD_PERL)
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
echo "perl version too old, building without perl."
|
||||||
|
perl=no
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -287,41 +352,27 @@ dnl ** PYTHON ***********************************************************
|
|||||||
dnl *********************************************************************
|
dnl *********************************************************************
|
||||||
|
|
||||||
if test "x$python" != xno ; then
|
if test "x$python" != xno ; then
|
||||||
AC_MSG_CHECKING(for plugin interface used by Python)
|
case $python in
|
||||||
if test "$plugin" = yes; then
|
dnl set python2 default here
|
||||||
AC_MSG_RESULT([yes])
|
python2)
|
||||||
case $python in
|
PKG_CHECK_MODULES([PY], [python-2.7], [], [AC_MSG_ERROR(Cannot find python-2.7!)])
|
||||||
dnl set python2 default here
|
PY_VER="`$PKG_CONFIG --modversion python-2.7`";;
|
||||||
python2)
|
dnl set python3 default here
|
||||||
PKG_CHECK_MODULES([PY], [python-2.7], [], [AC_MSG_WARN(Cannot find python-2.7!)])
|
python3)
|
||||||
PY_VER="`$PKG_CONFIG --modversion python-2.7`";;
|
PKG_CHECK_MODULES([PY], [python-3.3], [], [AC_MSG_ERROR(Cannot find python-3.3!)])
|
||||||
dnl set python3 default here
|
PY_VER="`$PKG_CONFIG --modversion python-3.3`";;
|
||||||
python3)
|
dnl add broken versions here
|
||||||
PKG_CHECK_MODULES([PY], [python-3.3], [], [AC_MSG_WARN(Cannot find python-3.3!)])
|
python2.5|python2.6|python3.1|python3.2)
|
||||||
PY_VER="`$PKG_CONFIG --modversion python-3.3`";;
|
AC_MSG_ERROR(Unsupported Python version ${python}!);;
|
||||||
dnl add broken versions here
|
python*)
|
||||||
python2.5|python2.6|python3.1|python3.2)
|
python="python-${python#python}" # stay posix compliant
|
||||||
AC_MSG_ERROR(Unsupported Python version ${python}!);;
|
PKG_CHECK_MODULES([PY], [${python}], [], [AC_MSG_ERROR(Cannot find "${python}.pc"!)])
|
||||||
python*)
|
PY_VER="`$PKG_CONFIG --modversion ${python}`";;
|
||||||
python="python-${python#python}" # stay posix compliant
|
*)
|
||||||
PKG_CHECK_MODULES([PY], [${python}], [], [AC_MSG_WARN(Cannot find "${python}.pc"!)])
|
AC_MSG_ERROR(Unsupported Python ${python}!)
|
||||||
PY_VER="`$PKG_CONFIG --modversion ${python}`";;
|
esac
|
||||||
*)
|
AC_MSG_CHECKING(Python version)
|
||||||
AC_MSG_WARN(Unsupported Python ${python}!)
|
AC_MSG_RESULT($PY_VER)
|
||||||
esac
|
|
||||||
AC_MSG_CHECKING(Python version)
|
|
||||||
|
|
||||||
if test "$PY_VER"; then
|
|
||||||
AC_MSG_RESULT($PY_VER)
|
|
||||||
python="python-${PY_VER}"
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT(Not found)
|
|
||||||
python=no
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT([plugins are disabled, use the --enable-plugin option for Python])
|
|
||||||
python=no
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl *********************************************************************
|
dnl *********************************************************************
|
||||||
@ -580,17 +631,38 @@ dnl *********************************************************************
|
|||||||
dnl ** SPELL ************************************************************
|
dnl ** SPELL ************************************************************
|
||||||
dnl *********************************************************************
|
dnl *********************************************************************
|
||||||
|
|
||||||
if test "x$isocodes" = "xyes" ; then
|
if test "$spell" = "gtkspell" ; then
|
||||||
PKG_CHECK_MODULES(ISOCODES, "iso-codes", [
|
PKG_CHECK_MODULES(GTKSPELL, gtkspell-2.0 >= 2.0.2, [], [
|
||||||
iso_codes_prefix=`$PKG_CONFIG --variable=prefix iso-codes 2>/dev/null || echo /usr`
|
spell=no
|
||||||
AC_MSG_NOTICE([iso-codes prefix: $iso_codes_prefix])
|
])
|
||||||
AC_DEFINE_UNQUOTED([ISO_CODES_PREFIX], ["$iso_codes_prefix"], [ISO codes prefix])
|
if test "$spell" != "no" ; then
|
||||||
AC_DEFINE_UNQUOTED([ISO_CODES_LOCALEDIR], ["$iso_codes_prefix/share/locale"], [ISO codes locale dir])
|
GUI_LIBS="$GUI_LIBS $GTKSPELL_LIBS"
|
||||||
AC_DEFINE([HAVE_ISO_CODES], [1], [iso-codes available])
|
GUI_CFLAGS="$GUI_CFLAGS $GTKSPELL_CFLAGS"
|
||||||
], [
|
AC_DEFINE(USE_GTKSPELL)
|
||||||
isocodes=no
|
fi
|
||||||
AC_MSG_WARN(iso-codes not found!)
|
fi
|
||||||
])
|
|
||||||
|
if test "$spell" = "libsexy" ; then
|
||||||
|
PKG_CHECK_MODULES([LIBSEXY], [libsexy >= 0.1.8], [
|
||||||
|
libsexy=yes
|
||||||
|
GUI_LIBS="$GUI_LIBS $LIBSEXY_LIBS"
|
||||||
|
GUI_CFLAGS="$GUI_CFLAGS $LIBSEXY_CFLAGS"
|
||||||
|
AC_DEFINE(USE_LIBSEXY)
|
||||||
|
], [
|
||||||
|
dnl use builtin static one
|
||||||
|
spell="static"
|
||||||
|
])
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "$spell" = "static" ; then
|
||||||
|
PKG_CHECK_MODULES(LIBXML2, libxml-2.0 >= 2.0.0, [
|
||||||
|
AC_DEFINE(HAVE_ISO_CODES)
|
||||||
|
AC_DEFINE(USE_LIBSEXY)
|
||||||
|
GUI_CFLAGS="$GUI_CFLAGS $LIBXML2_CFLAGS"
|
||||||
|
LIBS="$LIBS -lxml2"
|
||||||
|
], [
|
||||||
|
AC_MSG_ERROR(Cannot find libxml2!)
|
||||||
|
])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl *********************************************************************
|
dnl *********************************************************************
|
||||||
@ -598,9 +670,9 @@ dnl ** CONDITIONALS *****************************************************
|
|||||||
dnl *********************************************************************
|
dnl *********************************************************************
|
||||||
|
|
||||||
AM_CONDITIONAL(USE_OPENSSL, test "x$openssl" = "xyes")
|
AM_CONDITIONAL(USE_OPENSSL, test "x$openssl" = "xyes")
|
||||||
|
AM_CONDITIONAL(USE_LIBSEXY, test "x$spell" = "xstatic")
|
||||||
AM_CONDITIONAL(USE_LIBNOTIFY, test "x$libnotify" = "xyes")
|
AM_CONDITIONAL(USE_LIBNOTIFY, test "x$libnotify" = "xyes")
|
||||||
AM_CONDITIONAL(USE_LIBCANBERRA, test "x$libcanberra" = "xyes")
|
AM_CONDITIONAL(USE_LIBCANBERRA, test "x$libcanberra" = "xyes")
|
||||||
AM_CONDITIONAL(USE_MSPROXY, test "x$ntlm" = "xyes")
|
|
||||||
AM_CONDITIONAL(DO_TEXT, test "x$textfe" = "xyes")
|
AM_CONDITIONAL(DO_TEXT, test "x$textfe" = "xyes")
|
||||||
AM_CONDITIONAL(DO_GTK, test "x$gtkfe" = "xyes")
|
AM_CONDITIONAL(DO_GTK, test "x$gtkfe" = "xyes")
|
||||||
AM_CONDITIONAL(DO_PERL, test "x$perl" = "xyes")
|
AM_CONDITIONAL(DO_PERL, test "x$perl" = "xyes")
|
||||||
@ -611,7 +683,7 @@ AM_CONDITIONAL(DO_DOAT, test "x$doat" = "xyes")
|
|||||||
AM_CONDITIONAL(DO_FISHLIM, test "x$fishlim" = "xyes")
|
AM_CONDITIONAL(DO_FISHLIM, test "x$fishlim" = "xyes")
|
||||||
AM_CONDITIONAL(DO_SYSINFO, test "x$sysinfo" = "xyes")
|
AM_CONDITIONAL(DO_SYSINFO, test "x$sysinfo" = "xyes")
|
||||||
AM_CONDITIONAL(USE_DBUS, test "x$dbus" = "xyes")
|
AM_CONDITIONAL(USE_DBUS, test "x$dbus" = "xyes")
|
||||||
AM_CONDITIONAL(HAVE_ISO_CODES, test "x$isocodes" = "xyes")
|
#AM_CONDITIONAL(DO_GCONF, test "x$GCONFTOOL" != "xno")
|
||||||
AM_CONDITIONAL(WITH_TM, test "x$theme_manager" != "xno")
|
AM_CONDITIONAL(WITH_TM, test "x$theme_manager" != "xno")
|
||||||
|
|
||||||
dnl *********************************************************************
|
dnl *********************************************************************
|
||||||
@ -645,6 +717,61 @@ if test "x$ntlm" = "xyes" ; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
dnl *********************************************************************
|
||||||
|
dnl ** XShm *************************************************************
|
||||||
|
dnl *********************************************************************
|
||||||
|
|
||||||
|
if test "$shm" = yes; then
|
||||||
|
oldl=$LIBS
|
||||||
|
oldc=$CPPFLAGS
|
||||||
|
LIBS="$LIBS `$PKG_CONFIG --libs-only-L xft`"
|
||||||
|
CPPFLAGS="$CPPFLAGS `$PKG_CONFIG --cflags-only-I xft`"
|
||||||
|
shm=no
|
||||||
|
AC_CHECK_LIB(Xext, XShmAttach, shm=yes)
|
||||||
|
if test "$shm" = yes; then
|
||||||
|
shm=no
|
||||||
|
AC_CHECK_HEADERS(sys/ipc.h, shm=yes)
|
||||||
|
if test "$shm" = yes; then
|
||||||
|
shm=no
|
||||||
|
AC_CHECK_HEADERS(sys/shm.h, shm=yes)
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
LIBS=$oldl
|
||||||
|
if test "$shm" = yes; then
|
||||||
|
GUI_LIBS="$GUI_LIBS `$PKG_CONFIG --libs-only-L xft` -lX11 -lXext"
|
||||||
|
AC_DEFINE(USE_SHM)
|
||||||
|
else
|
||||||
|
CPPFLAGS=$oldc
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
dnl *********************************************************************
|
||||||
|
dnl ** MMX **************************************************************
|
||||||
|
dnl *********************************************************************
|
||||||
|
|
||||||
|
dnl we don't need mmx on *this* machine, just i386, because
|
||||||
|
dnl it's checked at runtime.
|
||||||
|
if test "$mmx" = "yes"; then
|
||||||
|
case $host_cpu in
|
||||||
|
i386|i486|i586|i686|i786|k6|k7)
|
||||||
|
mmx=yes
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
mmx=no
|
||||||
|
esac
|
||||||
|
if test "$system" = "OpenBSD"; then
|
||||||
|
dnl openbsd fails because mmx_cmod doesn't prefix its symbols with underscore.
|
||||||
|
dnl xtext.o: Undefined symbol `_shade_ximage_15_mmx' referenced from text segment
|
||||||
|
mmx=no
|
||||||
|
fi
|
||||||
|
if test "$mmx" = "yes"; then
|
||||||
|
AC_DEFINE(USE_MMX)
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
AM_CONDITIONAL(USE_MMX, test "$mmx" = "yes")
|
||||||
|
|
||||||
dnl *********************************************************************
|
dnl *********************************************************************
|
||||||
dnl ** GCC FLAGS ********************************************************
|
dnl ** GCC FLAGS ********************************************************
|
||||||
dnl *********************************************************************
|
dnl *********************************************************************
|
||||||
@ -668,13 +795,13 @@ if test "x$GCC" = "xyes"; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
dnl does this compiler support -Wno-pointer-sign ?
|
dnl does this compiler support -Wno-pointer-sign ?
|
||||||
AC_MSG_CHECKING([if $CC accepts -Wno-pointer-sign ])
|
AC_MSG_CHECKING([if gcc accepts -Wno-pointer-sign ])
|
||||||
|
|
||||||
safe_CFLAGS=$CFLAGS
|
safe_CFLAGS=$CFLAGS
|
||||||
CFLAGS="-Wno-pointer-sign"
|
CFLAGS="-Wno-pointer-sign"
|
||||||
|
|
||||||
AC_TRY_COMPILE(, [
|
AC_TRY_COMPILE(, [
|
||||||
return 0;
|
int main () { return 0 ; }
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
no_pointer_sign=yes
|
no_pointer_sign=yes
|
||||||
@ -690,13 +817,13 @@ if test x$no_pointer_sign = xyes; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
dnl does this compiler support -funsigned-char ?
|
dnl does this compiler support -funsigned-char ?
|
||||||
AC_MSG_CHECKING([if $CC accepts -funsigned-char ])
|
AC_MSG_CHECKING([if gcc accepts -funsigned-char ])
|
||||||
|
|
||||||
safe_CFLAGS=$CFLAGS
|
safe_CFLAGS=$CFLAGS
|
||||||
CFLAGS="-funsigned-char"
|
CFLAGS="-funsigned-char"
|
||||||
|
|
||||||
AC_TRY_COMPILE(, [
|
AC_TRY_COMPILE(, [
|
||||||
return 0;
|
int main () { return 0 ; }
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
unsigned_char=yes
|
unsigned_char=yes
|
||||||
@ -712,13 +839,13 @@ if test x$unsigned_char = xyes; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
dnl does this compiler support -Wno-unused-result ?
|
dnl does this compiler support -Wno-unused-result ?
|
||||||
AC_MSG_CHECKING([if $CC accepts -Wno-unused-result ])
|
AC_MSG_CHECKING([if gcc accepts -Wno-unused-result ])
|
||||||
|
|
||||||
safe_CFLAGS=$CFLAGS
|
safe_CFLAGS=$CFLAGS
|
||||||
CFLAGS="-Wno-unused-result"
|
CFLAGS="-Wno-unused-result"
|
||||||
|
|
||||||
AC_TRY_COMPILE(, [
|
AC_TRY_COMPILE(, [
|
||||||
return 0;
|
int main () { return 0 ; }
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
no_unused_result=yes
|
no_unused_result=yes
|
||||||
@ -751,6 +878,12 @@ AC_TRY_COMPILE(
|
|||||||
],
|
],
|
||||||
AC_MSG_RESULT(no))
|
AC_MSG_RESULT(no))
|
||||||
|
|
||||||
|
AC_PATH_PROG(gdkpixbufcsourcepath, gdk-pixbuf-csource)
|
||||||
|
AC_SUBST(gdkpixbufcsourcepath)
|
||||||
|
if test "$gtkfe" != no -a "_$gdkpixbufcsourcepath" = _; then
|
||||||
|
AC_MSG_ERROR(Cannot find gdk-pixbuf-csource: Install GTK+ 2.0!)
|
||||||
|
fi
|
||||||
|
|
||||||
dnl if we don\'t have this, use g_snprintf instead
|
dnl if we don\'t have this, use g_snprintf instead
|
||||||
AC_CHECK_FUNCS(snprintf vsnprintf memrchr strtoull)
|
AC_CHECK_FUNCS(snprintf vsnprintf memrchr strtoull)
|
||||||
|
|
||||||
@ -825,13 +958,11 @@ AC_SUBST(hexchatlibdir)
|
|||||||
|
|
||||||
AC_CONFIG_FILES([
|
AC_CONFIG_FILES([
|
||||||
Makefile
|
Makefile
|
||||||
data/Makefile
|
share/Makefile
|
||||||
data/icons/Makefile
|
share/icons/Makefile
|
||||||
data/misc/Makefile
|
share/misc/Makefile
|
||||||
data/man/Makefile
|
share/pkgconfig/Makefile
|
||||||
data/man/hexchat.1
|
share/pkgconfig/hexchat-plugin.pc
|
||||||
data/pkgconfig/Makefile
|
|
||||||
data/pkgconfig/hexchat-plugin.pc
|
|
||||||
src/Makefile
|
src/Makefile
|
||||||
src/common/Makefile
|
src/common/Makefile
|
||||||
src/common/dbus/Makefile
|
src/common/dbus/Makefile
|
||||||
@ -839,7 +970,7 @@ src/fe-text/Makefile
|
|||||||
src/fe-gtk/Makefile
|
src/fe-gtk/Makefile
|
||||||
src/htm/Makefile
|
src/htm/Makefile
|
||||||
src/htm/thememan
|
src/htm/thememan
|
||||||
osx/Info.plist
|
src/pixmaps/Makefile
|
||||||
plugins/Makefile
|
plugins/Makefile
|
||||||
plugins/python/Makefile
|
plugins/python/Makefile
|
||||||
plugins/perl/Makefile
|
plugins/perl/Makefile
|
||||||
@ -847,7 +978,9 @@ plugins/checksum/Makefile
|
|||||||
plugins/doat/Makefile
|
plugins/doat/Makefile
|
||||||
plugins/fishlim/Makefile
|
plugins/fishlim/Makefile
|
||||||
plugins/sysinfo/Makefile
|
plugins/sysinfo/Makefile
|
||||||
|
intl/Makefile
|
||||||
po/Makefile.in
|
po/Makefile.in
|
||||||
|
man/Makefile
|
||||||
])
|
])
|
||||||
|
|
||||||
AC_OUTPUT
|
AC_OUTPUT
|
||||||
@ -859,10 +992,18 @@ echo GTK+ interface ........ : $gtkfe
|
|||||||
echo Text interface ........ : $textfe
|
echo Text interface ........ : $textfe
|
||||||
echo Theme manager ......... : $theme_manager
|
echo Theme manager ......... : $theme_manager
|
||||||
echo
|
echo
|
||||||
|
echo MMX tinting ........... : $mmx
|
||||||
|
echo XShm tinting .......... : $shm
|
||||||
|
if test "$xft" = no; then
|
||||||
|
echo Text backend .......... : Pango
|
||||||
|
else
|
||||||
|
echo Text backend .......... : Xft
|
||||||
|
fi
|
||||||
echo OpenSSL support ....... : $openssl
|
echo OpenSSL support ....... : $openssl
|
||||||
echo D-Bus support ......... : $dbus
|
echo D-Bus support ......... : $dbus
|
||||||
echo libnotify support ..... : $libnotify
|
echo libnotify support ..... : $libnotify
|
||||||
echo libcanberra support ... : $libcanberra
|
echo libcanberra support ... : $libcanberra
|
||||||
|
echo Spelling .............. : $spell
|
||||||
echo Plugin interface ...... : $plugin
|
echo Plugin interface ...... : $plugin
|
||||||
echo NLS/gettext ........... : $USE_NLS
|
echo NLS/gettext ........... : $USE_NLS
|
||||||
echo IPv6 support .......... : $ipv6
|
echo IPv6 support .......... : $ipv6
|
||||||
@ -870,7 +1011,7 @@ echo MS Proxy NTLM \(ISA\) ... : $have_ntlm
|
|||||||
echo libproxy support ...... : $libproxy
|
echo libproxy support ...... : $libproxy
|
||||||
echo
|
echo
|
||||||
echo Perl .................. : $perl
|
echo Perl .................. : $perl
|
||||||
echo Python ................ : $python
|
echo Python ................ : python-$PY_VER
|
||||||
echo
|
echo
|
||||||
echo Checksum .............. : $checksum
|
echo Checksum .............. : $checksum
|
||||||
echo Do At ................. : $doat
|
echo Do At ................. : $doat
|
||||||
@ -885,5 +1026,10 @@ if test "$gtkfe" = no; then
|
|||||||
echo
|
echo
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if test "$spell" = "gtkspell"; then
|
||||||
|
echo Warning: GTK SPELL is not the recommended spelling library.
|
||||||
|
echo
|
||||||
|
fi
|
||||||
|
|
||||||
echo configure complete, now type \'make\' and pray.
|
echo configure complete, now type \'make\' and pray.
|
||||||
echo
|
echo
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<gresources>
|
|
||||||
<gresource prefix="/icons">
|
|
||||||
<file alias="hexchat.png" preprocess="to-pixdata" compressed="true">icons/hexchat.png</file>
|
|
||||||
<file alias="book.png" preprocess="to-pixdata" compressed="true">icons/book.png</file>
|
|
||||||
|
|
||||||
<file alias="ulist_voice.png" preprocess="to-pixdata" compressed="true">icons/ulist_voice.png</file>
|
|
||||||
<file alias="ulist_halfop.png" preprocess="to-pixdata" compressed="true">icons/ulist_halfop.png</file>
|
|
||||||
<file alias="ulist_op.png" preprocess="to-pixdata" compressed="true">icons/ulist_op.png</file>
|
|
||||||
<file alias="ulist_owner.png" preprocess="to-pixdata" compressed="true">icons/ulist_owner.png</file>
|
|
||||||
<file alias="ulist_founder.png" preprocess="to-pixdata" compressed="true">icons/ulist_founder.png</file>
|
|
||||||
<file alias="ulist_netop.png" preprocess="to-pixdata" compressed="true">icons/ulist_netop.png</file>
|
|
||||||
|
|
||||||
<file alias="tray_fileoffer.png" preprocess="to-pixdata" compressed="true">icons/tray_fileoffer.png</file>
|
|
||||||
<file alias="tray_highlight.png" preprocess="to-pixdata" compressed="true">icons/tray_highlight.png</file>
|
|
||||||
<file alias="tray_message.png" preprocess="to-pixdata" compressed="true">icons/tray_message.png</file>
|
|
||||||
|
|
||||||
<file alias="tree_channel.png" preprocess="to-pixdata">icons/tree_channel.png</file>
|
|
||||||
<file alias="tree_dialog.png" preprocess="to-pixdata" compressed="true">icons/tree_dialog.png</file>
|
|
||||||
<file alias="tree_server.png" preprocess="to-pixdata" compressed="true">icons/tree_server.png</file>
|
|
||||||
<file alias="tree_util.png" preprocess="to-pixdata" compressed="true">icons/tree_util.png</file>
|
|
||||||
</gresource>
|
|
||||||
</gresources>
|
|
@ -1,746 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
||||||
|
|
||||||
<svg
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
sodipodi:docname="hexchat.svg"
|
|
||||||
version="1.0"
|
|
||||||
inkscape:version="0.48.4 r9939"
|
|
||||||
sodipodi:version="0.32"
|
|
||||||
id="svg2"
|
|
||||||
height="64"
|
|
||||||
width="64">
|
|
||||||
<defs
|
|
||||||
id="defs4">
|
|
||||||
<linearGradient
|
|
||||||
id="linearGradient2289">
|
|
||||||
<stop
|
|
||||||
style="stop-color:#ff2600;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop2291" />
|
|
||||||
<stop
|
|
||||||
style="stop-color:#ffd600;stop-opacity:1;"
|
|
||||||
offset="1"
|
|
||||||
id="stop2293" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient2289"
|
|
||||||
id="linearGradient1335"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.545166,0,0,0.544959,0.186963,35.29511)"
|
|
||||||
x1="16.88862"
|
|
||||||
y1="77.796608"
|
|
||||||
x2="72.348671"
|
|
||||||
y2="20.59322" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient2289"
|
|
||||||
id="linearGradient1337"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.545166,0,0,0.544959,0.186963,35.29511)"
|
|
||||||
x1="16.88862"
|
|
||||||
y1="77.796608"
|
|
||||||
x2="16.88862"
|
|
||||||
y2="19.001091" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient2289"
|
|
||||||
id="linearGradient1317"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.735969,0,0,0.735801,-2.052758,-16.66733)"
|
|
||||||
x1="16.88862"
|
|
||||||
y1="77.796608"
|
|
||||||
x2="72.348671"
|
|
||||||
y2="20.59322" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient2289"
|
|
||||||
id="linearGradient1319"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.735969,0,0,0.735801,-2.052758,-16.66733)"
|
|
||||||
x1="16.88862"
|
|
||||||
y1="77.796608"
|
|
||||||
x2="16.88862"
|
|
||||||
y2="19.001091" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient2289"
|
|
||||||
id="linearGradient1320"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.735969,0,0,0.735801,-2.172329,-1.111016)"
|
|
||||||
x1="16.88862"
|
|
||||||
y1="77.796608"
|
|
||||||
x2="72.348671"
|
|
||||||
y2="20.59322" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient2289"
|
|
||||||
id="linearGradient1322"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.735969,0,0,0.735801,-2.172329,-1.111016)"
|
|
||||||
x1="16.88862"
|
|
||||||
y1="77.796608"
|
|
||||||
x2="16.88862"
|
|
||||||
y2="19.001091" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient2289"
|
|
||||||
id="linearGradient2997"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.735969,0,0,0.735801,-160.10656,-7.1914058)"
|
|
||||||
x1="130.2673"
|
|
||||||
y1="78.743134"
|
|
||||||
x2="129.2081"
|
|
||||||
y2="25.771122" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient2289"
|
|
||||||
id="linearGradient3011"
|
|
||||||
x1="34.62241"
|
|
||||||
y1="53.508884"
|
|
||||||
x2="34.466503"
|
|
||||||
y2="5.4893961"
|
|
||||||
gradientUnits="userSpaceOnUse" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient2289"
|
|
||||||
id="linearGradient3030"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="34.62241"
|
|
||||||
y1="53.508884"
|
|
||||||
x2="34.466503"
|
|
||||||
y2="5.4893961" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient2289"
|
|
||||||
id="linearGradient3070"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="34.62241"
|
|
||||||
y1="53.508884"
|
|
||||||
x2="34.466503"
|
|
||||||
y2="5.4893961"
|
|
||||||
gradientTransform="matrix(0.99894925,0,0,0.97549134,-3.1829063,4.465557)" />
|
|
||||||
<filter
|
|
||||||
id="filter3281"
|
|
||||||
style="color-interpolation-filters:sRGB;"
|
|
||||||
inkscape:label="Drop Shadow">
|
|
||||||
<feFlood
|
|
||||||
id="feFlood3283"
|
|
||||||
flood-opacity="0.33"
|
|
||||||
flood-color="rgb(0,0,0)"
|
|
||||||
result="flood" />
|
|
||||||
<feComposite
|
|
||||||
id="feComposite3285"
|
|
||||||
in2="SourceGraphic"
|
|
||||||
in="flood"
|
|
||||||
operator="in"
|
|
||||||
result="composite1" />
|
|
||||||
<feGaussianBlur
|
|
||||||
id="feGaussianBlur3287"
|
|
||||||
in="composite"
|
|
||||||
stdDeviation="2"
|
|
||||||
result="blur" />
|
|
||||||
<feOffset
|
|
||||||
id="feOffset3289"
|
|
||||||
dx="4"
|
|
||||||
dy="1"
|
|
||||||
result="offset" />
|
|
||||||
<feComposite
|
|
||||||
id="feComposite3291"
|
|
||||||
in2="offset"
|
|
||||||
in="SourceGraphic"
|
|
||||||
operator="over"
|
|
||||||
result="composite2" />
|
|
||||||
</filter>
|
|
||||||
<filter
|
|
||||||
id="filter3293"
|
|
||||||
style="color-interpolation-filters:sRGB;"
|
|
||||||
inkscape:label="Drop Shadow">
|
|
||||||
<feFlood
|
|
||||||
id="feFlood3295"
|
|
||||||
flood-opacity="0.33"
|
|
||||||
flood-color="rgb(0,0,0)"
|
|
||||||
result="flood" />
|
|
||||||
<feComposite
|
|
||||||
id="feComposite3297"
|
|
||||||
in2="SourceGraphic"
|
|
||||||
in="flood"
|
|
||||||
operator="in"
|
|
||||||
result="composite1" />
|
|
||||||
<feGaussianBlur
|
|
||||||
id="feGaussianBlur3299"
|
|
||||||
in="composite"
|
|
||||||
stdDeviation="2"
|
|
||||||
result="blur" />
|
|
||||||
<feOffset
|
|
||||||
id="feOffset3301"
|
|
||||||
dx="4"
|
|
||||||
dy="1"
|
|
||||||
result="offset" />
|
|
||||||
<feComposite
|
|
||||||
id="feComposite3303"
|
|
||||||
in2="offset"
|
|
||||||
in="SourceGraphic"
|
|
||||||
operator="over"
|
|
||||||
result="composite2" />
|
|
||||||
</filter>
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient2289"
|
|
||||||
id="linearGradient4089"
|
|
||||||
x1="99.348503"
|
|
||||||
y1="59.934135"
|
|
||||||
x2="100.40916"
|
|
||||||
y2="10.613438"
|
|
||||||
gradientUnits="userSpaceOnUse" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient2289"
|
|
||||||
id="linearGradient4093"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="99.348503"
|
|
||||||
y1="59.934135"
|
|
||||||
x2="100.40916"
|
|
||||||
y2="10.613438" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient2289"
|
|
||||||
id="linearGradient4096"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="99.348503"
|
|
||||||
y1="59.934135"
|
|
||||||
x2="100.40916"
|
|
||||||
y2="10.613438" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient2289"
|
|
||||||
id="linearGradient4098"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
x1="99.348503"
|
|
||||||
y1="59.934135"
|
|
||||||
x2="100.40916"
|
|
||||||
y2="10.613438"
|
|
||||||
gradientTransform="translate(-70.003571,-2.298097)" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient2289-4"
|
|
||||||
id="linearGradient4101"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.94969205,0,0,0.89326813,1.6716955,2.7025635)"
|
|
||||||
x1="31.372862"
|
|
||||||
y1="60.111893"
|
|
||||||
x2="31.559002"
|
|
||||||
y2="5.6897221" />
|
|
||||||
<filter
|
|
||||||
id="filter4111"
|
|
||||||
style="color-interpolation-filters:sRGB;"
|
|
||||||
inkscape:label="Drop Shadow">
|
|
||||||
<feFlood
|
|
||||||
id="feFlood4113"
|
|
||||||
flood-opacity="0.33"
|
|
||||||
flood-color="rgb(0,0,0)"
|
|
||||||
result="flood" />
|
|
||||||
<feComposite
|
|
||||||
id="feComposite4115"
|
|
||||||
in2="SourceGraphic"
|
|
||||||
in="flood"
|
|
||||||
operator="in"
|
|
||||||
result="composite1" />
|
|
||||||
<feGaussianBlur
|
|
||||||
id="feGaussianBlur4117"
|
|
||||||
in="composite"
|
|
||||||
stdDeviation="2"
|
|
||||||
result="blur" />
|
|
||||||
<feOffset
|
|
||||||
id="feOffset4119"
|
|
||||||
dx="4"
|
|
||||||
dy="1"
|
|
||||||
result="offset" />
|
|
||||||
<feComposite
|
|
||||||
id="feComposite4121"
|
|
||||||
in2="offset"
|
|
||||||
in="SourceGraphic"
|
|
||||||
operator="over"
|
|
||||||
result="composite2" />
|
|
||||||
</filter>
|
|
||||||
<filter
|
|
||||||
id="filter4123"
|
|
||||||
style="color-interpolation-filters:sRGB;"
|
|
||||||
inkscape:label="Drop Shadow">
|
|
||||||
<feFlood
|
|
||||||
id="feFlood4125"
|
|
||||||
flood-opacity="0.33"
|
|
||||||
flood-color="rgb(0,0,0)"
|
|
||||||
result="flood" />
|
|
||||||
<feComposite
|
|
||||||
id="feComposite4127"
|
|
||||||
in2="SourceGraphic"
|
|
||||||
in="flood"
|
|
||||||
operator="in"
|
|
||||||
result="composite1" />
|
|
||||||
<feGaussianBlur
|
|
||||||
id="feGaussianBlur4129"
|
|
||||||
in="composite"
|
|
||||||
stdDeviation="2"
|
|
||||||
result="blur" />
|
|
||||||
<feOffset
|
|
||||||
id="feOffset4131"
|
|
||||||
dx="4"
|
|
||||||
dy="1"
|
|
||||||
result="offset" />
|
|
||||||
<feComposite
|
|
||||||
id="feComposite4133"
|
|
||||||
in2="offset"
|
|
||||||
in="SourceGraphic"
|
|
||||||
operator="over"
|
|
||||||
result="composite2" />
|
|
||||||
</filter>
|
|
||||||
<linearGradient
|
|
||||||
y2="19.001091"
|
|
||||||
x2="16.88862"
|
|
||||||
y1="77.796608"
|
|
||||||
x1="16.88862"
|
|
||||||
gradientTransform="matrix(0.735969,0,0,0.735801,-2.172329,-1.111016)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient1330"
|
|
||||||
xlink:href="#linearGradient2289-4"
|
|
||||||
inkscape:collect="always" />
|
|
||||||
<linearGradient
|
|
||||||
y2="20.59322"
|
|
||||||
x2="72.348671"
|
|
||||||
y1="77.796608"
|
|
||||||
x1="16.88862"
|
|
||||||
gradientTransform="matrix(0.735969,0,0,0.735801,-2.172329,-1.111016)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient1328"
|
|
||||||
xlink:href="#linearGradient2289-4"
|
|
||||||
inkscape:collect="always" />
|
|
||||||
<linearGradient
|
|
||||||
y2="19.001091"
|
|
||||||
x2="16.88862"
|
|
||||||
y1="77.796608"
|
|
||||||
x1="16.88862"
|
|
||||||
gradientTransform="matrix(0.735969,0,0,0.735801,-2.172329,-1.111016)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient1322-5"
|
|
||||||
xlink:href="#linearGradient2289-4"
|
|
||||||
inkscape:collect="always" />
|
|
||||||
<linearGradient
|
|
||||||
y2="20.59322"
|
|
||||||
x2="72.348671"
|
|
||||||
y1="77.796608"
|
|
||||||
x1="16.88862"
|
|
||||||
gradientTransform="matrix(0.735969,0,0,0.735801,-2.172329,-1.111016)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient1320-4"
|
|
||||||
xlink:href="#linearGradient2289-4"
|
|
||||||
inkscape:collect="always" />
|
|
||||||
<linearGradient
|
|
||||||
y2="19.001091"
|
|
||||||
x2="16.88862"
|
|
||||||
y1="77.796608"
|
|
||||||
x1="16.88862"
|
|
||||||
gradientTransform="matrix(0.735969,0,0,0.735801,-2.052758,-16.66733)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient1319-2"
|
|
||||||
xlink:href="#linearGradient2289-4"
|
|
||||||
inkscape:collect="always" />
|
|
||||||
<linearGradient
|
|
||||||
y2="20.59322"
|
|
||||||
x2="72.348671"
|
|
||||||
y1="77.796608"
|
|
||||||
x1="16.88862"
|
|
||||||
gradientTransform="matrix(0.735969,0,0,0.735801,-2.052758,-16.66733)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient1317-8"
|
|
||||||
xlink:href="#linearGradient2289-4"
|
|
||||||
inkscape:collect="always" />
|
|
||||||
<linearGradient
|
|
||||||
y2="19.001091"
|
|
||||||
x2="16.88862"
|
|
||||||
y1="77.796608"
|
|
||||||
x1="16.88862"
|
|
||||||
gradientTransform="matrix(0.545166,0,0,0.544959,0.186963,35.29511)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient1337-8"
|
|
||||||
xlink:href="#linearGradient2289-4"
|
|
||||||
inkscape:collect="always" />
|
|
||||||
<linearGradient
|
|
||||||
y2="20.59322"
|
|
||||||
x2="72.348671"
|
|
||||||
y1="77.796608"
|
|
||||||
x1="16.88862"
|
|
||||||
gradientTransform="matrix(0.545166,0,0,0.544959,0.186963,35.29511)"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
id="linearGradient1335-4"
|
|
||||||
xlink:href="#linearGradient2289-4"
|
|
||||||
inkscape:collect="always" />
|
|
||||||
<linearGradient
|
|
||||||
id="linearGradient2289-4">
|
|
||||||
<stop
|
|
||||||
id="stop2291-0"
|
|
||||||
offset="0"
|
|
||||||
style="stop-color:#ff2600;stop-opacity:1;" />
|
|
||||||
<stop
|
|
||||||
id="stop2293-9"
|
|
||||||
offset="1"
|
|
||||||
style="stop-color:#ffd600;stop-opacity:1;" />
|
|
||||||
</linearGradient>
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient2289-4"
|
|
||||||
id="linearGradient3133"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.51445624,0,0,0.53856587,7.3477348,6.9450134)"
|
|
||||||
x1="46.881573"
|
|
||||||
y1="91.824585"
|
|
||||||
x2="47.225189"
|
|
||||||
y2="1.5596932" />
|
|
||||||
<linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient2289-4"
|
|
||||||
id="linearGradient3136"
|
|
||||||
gradientUnits="userSpaceOnUse"
|
|
||||||
gradientTransform="matrix(0.51445624,0,0,0.53856587,-120.3871,-29.360443)"
|
|
||||||
x1="16.88862"
|
|
||||||
y1="77.796608"
|
|
||||||
x2="72.348671"
|
|
||||||
y2="20.59322" />
|
|
||||||
<filter
|
|
||||||
id="filter3138"
|
|
||||||
style="color-interpolation-filters:sRGB;"
|
|
||||||
inkscape:label="Drop Shadow">
|
|
||||||
<feFlood
|
|
||||||
id="feFlood3140"
|
|
||||||
flood-opacity="0.33"
|
|
||||||
flood-color="rgb(0,0,0)"
|
|
||||||
result="flood" />
|
|
||||||
<feComposite
|
|
||||||
id="feComposite3142"
|
|
||||||
in2="SourceGraphic"
|
|
||||||
in="flood"
|
|
||||||
operator="in"
|
|
||||||
result="composite1" />
|
|
||||||
<feGaussianBlur
|
|
||||||
id="feGaussianBlur3144"
|
|
||||||
in="composite"
|
|
||||||
stdDeviation="2"
|
|
||||||
result="blur" />
|
|
||||||
<feOffset
|
|
||||||
id="feOffset3146"
|
|
||||||
dx="4"
|
|
||||||
dy="1"
|
|
||||||
result="offset" />
|
|
||||||
<feComposite
|
|
||||||
id="feComposite3148"
|
|
||||||
in2="offset"
|
|
||||||
in="SourceGraphic"
|
|
||||||
operator="over"
|
|
||||||
result="composite2" />
|
|
||||||
</filter>
|
|
||||||
<filter
|
|
||||||
id="filter3670"
|
|
||||||
style="color-interpolation-filters:sRGB;"
|
|
||||||
inkscape:label="Drop Shadow">
|
|
||||||
<feFlood
|
|
||||||
id="feFlood3672"
|
|
||||||
flood-opacity="0.2"
|
|
||||||
flood-color="rgb(0,0,0)"
|
|
||||||
result="flood" />
|
|
||||||
<feComposite
|
|
||||||
id="feComposite3674"
|
|
||||||
in2="SourceGraphic"
|
|
||||||
in="flood"
|
|
||||||
operator="in"
|
|
||||||
result="composite1" />
|
|
||||||
<feGaussianBlur
|
|
||||||
id="feGaussianBlur3676"
|
|
||||||
in="composite"
|
|
||||||
stdDeviation="1.5"
|
|
||||||
result="blur" />
|
|
||||||
<feOffset
|
|
||||||
id="feOffset3678"
|
|
||||||
dx="0"
|
|
||||||
dy="4"
|
|
||||||
result="offset" />
|
|
||||||
<feComposite
|
|
||||||
id="feComposite3680"
|
|
||||||
in2="offset"
|
|
||||||
in="SourceGraphic"
|
|
||||||
operator="over"
|
|
||||||
result="fbSourceGraphic" />
|
|
||||||
<feColorMatrix
|
|
||||||
result="fbSourceGraphicAlpha"
|
|
||||||
in="fbSourceGraphic"
|
|
||||||
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
|
||||||
id="feColorMatrix3682" />
|
|
||||||
<feFlood
|
|
||||||
id="feFlood3684"
|
|
||||||
flood-opacity="0.2"
|
|
||||||
flood-color="rgb(0,0,0)"
|
|
||||||
result="flood"
|
|
||||||
in="fbSourceGraphic" />
|
|
||||||
<feComposite
|
|
||||||
id="feComposite3686"
|
|
||||||
in2="fbSourceGraphic"
|
|
||||||
in="flood"
|
|
||||||
operator="in"
|
|
||||||
result="composite1" />
|
|
||||||
<feGaussianBlur
|
|
||||||
id="feGaussianBlur3688"
|
|
||||||
in="composite"
|
|
||||||
stdDeviation="1.5"
|
|
||||||
result="blur" />
|
|
||||||
<feOffset
|
|
||||||
id="feOffset3690"
|
|
||||||
dx="0"
|
|
||||||
dy="2"
|
|
||||||
result="offset" />
|
|
||||||
<feComposite
|
|
||||||
id="feComposite3692"
|
|
||||||
in2="offset"
|
|
||||||
in="fbSourceGraphic"
|
|
||||||
operator="over"
|
|
||||||
result="fbSourceGraphic" />
|
|
||||||
<feColorMatrix
|
|
||||||
result="fbSourceGraphicAlpha"
|
|
||||||
in="fbSourceGraphic"
|
|
||||||
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
|
||||||
id="feColorMatrix3706" />
|
|
||||||
<feFlood
|
|
||||||
id="feFlood3708"
|
|
||||||
flood-opacity="0.2"
|
|
||||||
flood-color="rgb(255,255,255)"
|
|
||||||
result="flood"
|
|
||||||
in="fbSourceGraphic" />
|
|
||||||
<feComposite
|
|
||||||
id="feComposite3710"
|
|
||||||
in2="fbSourceGraphic"
|
|
||||||
in="flood"
|
|
||||||
operator="in"
|
|
||||||
result="composite1" />
|
|
||||||
<feGaussianBlur
|
|
||||||
id="feGaussianBlur3712"
|
|
||||||
in="composite"
|
|
||||||
stdDeviation="1"
|
|
||||||
result="blur" />
|
|
||||||
<feOffset
|
|
||||||
id="feOffset3714"
|
|
||||||
dx="0"
|
|
||||||
dy="1"
|
|
||||||
result="offset" />
|
|
||||||
<feComposite
|
|
||||||
id="feComposite3716"
|
|
||||||
in2="offset"
|
|
||||||
in="fbSourceGraphic"
|
|
||||||
operator="over"
|
|
||||||
result="fbSourceGraphic" />
|
|
||||||
<feColorMatrix
|
|
||||||
result="fbSourceGraphicAlpha"
|
|
||||||
in="fbSourceGraphic"
|
|
||||||
values="0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 1 0"
|
|
||||||
id="feColorMatrix3123" />
|
|
||||||
<feFlood
|
|
||||||
id="feFlood3125"
|
|
||||||
flood-opacity="0.2"
|
|
||||||
flood-color="rgb(0,0,0)"
|
|
||||||
result="flood"
|
|
||||||
in="fbSourceGraphic" />
|
|
||||||
<feComposite
|
|
||||||
id="feComposite3127"
|
|
||||||
in2="fbSourceGraphic"
|
|
||||||
in="flood"
|
|
||||||
operator="in"
|
|
||||||
result="composite1" />
|
|
||||||
<feGaussianBlur
|
|
||||||
id="feGaussianBlur3129"
|
|
||||||
in="composite"
|
|
||||||
stdDeviation="1"
|
|
||||||
result="blur" />
|
|
||||||
<feOffset
|
|
||||||
id="feOffset3131"
|
|
||||||
dx="0"
|
|
||||||
dy="2"
|
|
||||||
result="offset" />
|
|
||||||
<feComposite
|
|
||||||
id="feComposite3133"
|
|
||||||
in2="offset"
|
|
||||||
in="fbSourceGraphic"
|
|
||||||
operator="over"
|
|
||||||
result="composite2" />
|
|
||||||
</filter>
|
|
||||||
<filter
|
|
||||||
id="filter3135"
|
|
||||||
style="color-interpolation-filters:sRGB;"
|
|
||||||
inkscape:label="Drop Shadow">
|
|
||||||
<feFlood
|
|
||||||
id="feFlood3137"
|
|
||||||
flood-opacity="0.2"
|
|
||||||
flood-color="rgb(0,0,0)"
|
|
||||||
result="flood" />
|
|
||||||
<feComposite
|
|
||||||
id="feComposite3139"
|
|
||||||
in2="SourceGraphic"
|
|
||||||
in="flood"
|
|
||||||
operator="in"
|
|
||||||
result="composite1" />
|
|
||||||
<feGaussianBlur
|
|
||||||
id="feGaussianBlur3141"
|
|
||||||
in="composite"
|
|
||||||
stdDeviation="1"
|
|
||||||
result="blur" />
|
|
||||||
<feOffset
|
|
||||||
id="feOffset3143"
|
|
||||||
dx="0"
|
|
||||||
dy="1"
|
|
||||||
result="offset" />
|
|
||||||
<feComposite
|
|
||||||
id="feComposite3145"
|
|
||||||
in2="offset"
|
|
||||||
in="SourceGraphic"
|
|
||||||
operator="over"
|
|
||||||
result="composite2" />
|
|
||||||
</filter>
|
|
||||||
<filter
|
|
||||||
id="filter3183"
|
|
||||||
style="color-interpolation-filters:sRGB;"
|
|
||||||
inkscape:label="Drop Shadow">
|
|
||||||
<feFlood
|
|
||||||
id="feFlood3185"
|
|
||||||
flood-opacity="0.3"
|
|
||||||
flood-color="rgb(0,0,0)"
|
|
||||||
result="flood" />
|
|
||||||
<feComposite
|
|
||||||
id="feComposite3187"
|
|
||||||
in2="SourceGraphic"
|
|
||||||
in="flood"
|
|
||||||
operator="in"
|
|
||||||
result="composite1" />
|
|
||||||
<feGaussianBlur
|
|
||||||
id="feGaussianBlur3189"
|
|
||||||
in="composite"
|
|
||||||
stdDeviation="2"
|
|
||||||
result="blur" />
|
|
||||||
<feOffset
|
|
||||||
id="feOffset3191"
|
|
||||||
dx="0"
|
|
||||||
dy="2"
|
|
||||||
result="offset" />
|
|
||||||
<feComposite
|
|
||||||
id="feComposite3193"
|
|
||||||
in2="offset"
|
|
||||||
in="SourceGraphic"
|
|
||||||
operator="over"
|
|
||||||
result="composite2" />
|
|
||||||
</filter>
|
|
||||||
</defs>
|
|
||||||
<sodipodi:namedview
|
|
||||||
id="base"
|
|
||||||
pagecolor="#ffffff"
|
|
||||||
bordercolor="#666666"
|
|
||||||
borderopacity="1.0"
|
|
||||||
inkscape:pageopacity="0.0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:zoom="7.9999999"
|
|
||||||
inkscape:cx="60.761203"
|
|
||||||
inkscape:cy="36.086679"
|
|
||||||
inkscape:document-units="px"
|
|
||||||
inkscape:current-layer="layer1"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:window-width="1270"
|
|
||||||
inkscape:window-height="837"
|
|
||||||
inkscape:window-x="287"
|
|
||||||
inkscape:window-y="27"
|
|
||||||
showguides="true"
|
|
||||||
inkscape:guide-bbox="true"
|
|
||||||
inkscape:window-maximized="0">
|
|
||||||
<inkscape:grid
|
|
||||||
type="xygrid"
|
|
||||||
id="grid3001" />
|
|
||||||
</sodipodi:namedview>
|
|
||||||
<metadata
|
|
||||||
id="metadata7">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
<dc:title />
|
|
||||||
<dc:creator>
|
|
||||||
<cc:Agent>
|
|
||||||
<dc:title>Guglielmi David</dc:title>
|
|
||||||
</cc:Agent>
|
|
||||||
</dc:creator>
|
|
||||||
<cc:license
|
|
||||||
rdf:resource="http://creativecommons.org/licenses/GPL/2.0/" />
|
|
||||||
<dc:rights>
|
|
||||||
<cc:Agent>
|
|
||||||
<dc:title>Peter Zelezny</dc:title>
|
|
||||||
</cc:Agent>
|
|
||||||
</dc:rights>
|
|
||||||
</cc:Work>
|
|
||||||
<cc:License
|
|
||||||
rdf:about="http://creativecommons.org/licenses/GPL/2.0/">
|
|
||||||
<cc:permits
|
|
||||||
rdf:resource="http://web.resource.org/cc/Reproduction" />
|
|
||||||
<cc:permits
|
|
||||||
rdf:resource="http://web.resource.org/cc/Distribution" />
|
|
||||||
<cc:requires
|
|
||||||
rdf:resource="http://web.resource.org/cc/Notice" />
|
|
||||||
<cc:permits
|
|
||||||
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
|
|
||||||
<cc:requires
|
|
||||||
rdf:resource="http://web.resource.org/cc/ShareAlike" />
|
|
||||||
<cc:requires
|
|
||||||
rdf:resource="http://web.resource.org/cc/SourceCode" />
|
|
||||||
</cc:License>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<g
|
|
||||||
inkscape:label="Calque 1"
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer1">
|
|
||||||
<g
|
|
||||||
id="g3663"
|
|
||||||
style="filter:url(#filter3183)">
|
|
||||||
<path
|
|
||||||
style="fill:#000000;fill-opacity:1;"
|
|
||||||
d="m 31.404792,8.7464684 c -6.271873,0.05843 -12.553,0.431777 -13.735377,1.075609 C 15.304661,11.109737 4.1505773,29.32852 4.1783444,31.859522 c 0.02777,2.531005 11.5871596,20.543967 13.9796816,21.787309 2.392519,1.243342 25.106,1.037521 27.470753,-0.250141 C 47.993531,52.109028 59.147618,33.890246 59.119851,31.359242 59.092081,28.828238 47.532689,10.790262 45.140167,9.5469214 43.943907,8.9252504 37.676665,8.6880384 31.404792,8.7464684 z m 0.05429,4.5275596 c 4.90437,-0.047 9.786849,0.175368 10.722281,0.67538 1.870861,1.000021 10.917726,15.499216 10.939439,17.534904 C 53.142512,33.52 44.410541,48.158649 42.561393,49.194315 40.712245,50.229983 22.960549,50.419464 21.089689,49.419444 19.218826,48.419423 10.199106,33.920226 10.177392,31.884537 10.155682,29.84885 18.860508,15.185189 20.709656,14.14952 c 0.924575,-0.517833 5.845056,-0.828498 10.749425,-0.875492 z"
|
|
||||||
id="path4107"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
<path
|
|
||||||
transform="matrix(0.97890109,0,0,0.98965389,0.52623659,-1.3159842)"
|
|
||||||
style="fill:#000000;fill-opacity:1;"
|
|
||||||
d="M 31.801142,5.3887159 C 24.358829,5.4607629 16.905535,5.9211193 15.502506,6.7149966 12.696449,8.3027513 -0.53918189,30.767467 -0.50623228,33.888328 -0.47328049,37.00919 13.243292,59.220118 16.0823,60.753225 18.921305,62.286332 45.873514,62.032541 48.67957,60.444787 51.485627,58.857032 64.721258,36.392315 64.688309,33.271454 64.655357,30.150593 50.938784,7.9088218 48.099776,6.3757155 46.680274,5.6091623 39.243454,5.3166688 31.801142,5.3887159 z m 0.06442,5.5827171 c 5.81961,-0.05795 11.613244,0.216241 12.723243,0.83278 2.219996,1.233079 12.955163,19.111349 12.980929,21.621461 0.02577,2.51011 -10.335747,20.560333 -12.529979,21.837366 -2.19423,1.277031 -23.2587,1.510671 -25.478697,0.277592 C 17.341063,54.307554 6.638107,36.429283 6.6123418,33.919173 6.5865755,31.409062 16.915878,13.327995 19.110109,12.050964 20.207224,11.412447 26.045952,11.02938 31.865563,10.971433 z"
|
|
||||||
id="path4103"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
<path
|
|
||||||
inkscape:transform-center-y="2.25"
|
|
||||||
inkscape:transform-center-x="2.25"
|
|
||||||
style="fill:url(#linearGradient3133);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.31593215000000008;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;"
|
|
||||||
d="m 10.723737,18.285684 7.623916,-7.935243 13.238019,13.886676 12.492701,-13.886676 8.576909,7.935243 -14.294847,14.878584 13.341856,11.902864 -6.670928,6.94334 L 31.585672,39.351071 18.573785,52.010472 11.676724,45.086347 24.065591,33.164268 10.723737,18.285684 z"
|
|
||||||
id="path2297"
|
|
||||||
sodipodi:nodetypes="ccccccccccccc"
|
|
||||||
inkscape:connector-curvature="0" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path3305"
|
|
||||||
d="M 31.293607,6.0952825 C 24.436514,6.1604875 17.569304,6.5771256 16.276601,7.2956116 13.691196,8.7325834 1.4963386,29.063913 1.5266972,31.888398 1.5570579,34.712884 14.195039,54.814527 16.810803,56.20204 19.426566,57.589553 44.25941,57.359866 46.844814,55.922894 49.430219,54.485922 61.625078,34.154591 61.594719,31.330106 61.564358,28.505621 48.926376,8.3760634 46.310612,6.9885506 45.002731,6.294794 38.150699,6.0300774 31.293607,6.0952825 z m 0.05936,5.0525485 c 5.36199,-0.05245 10.700046,0.195704 11.722761,0.753694 2.045429,1.115978 11.936445,17.296419 11.960184,19.568154 0.02374,2.271736 -9.523004,18.6078 -11.544693,19.763557 -2.02169,1.155758 -21.429773,1.36721 -23.475201,0.251232 C 17.970585,50.368491 8.1092472,34.188049 8.085508,31.916313 8.061768,29.644577 17.578834,13.2806 19.600523,12.124842 c 1.010846,-0.577879 6.39045,-0.924567 11.75244,-0.977011 z"
|
|
||||||
style="fill:url(#linearGradient4101);fill-opacity:1;" />
|
|
||||||
<path
|
|
||||||
inkscape:connector-curvature="0"
|
|
||||||
id="path3077"
|
|
||||||
d="M 14.640198,55.682743 C 9.6971439,47.360612 2.8950957,35.733851 2.9419881,35.686959 c 0.031272,-0.03127 0.5023581,0.289334 1.0468575,0.712459 0.5444994,0.423125 1.0414462,0.769317 1.1043264,0.769317 0.06288,0 2.6329414,4.276521 5.711247,9.50338 l 5.59692,9.503379 2.159128,0.007 2.159126,0.007 -0.34365,-0.584653 C 20.186937,55.28323 17.303514,50.518786 13.968339,45.017137 10.633164,39.515488 7.9043842,34.929294 7.9043842,34.825595 c 0,-0.103699 0.2455542,-0.59277 0.545676,-1.086823 0.3001218,-0.494053 0.545676,-0.941721 0.545676,-0.994816 0,-0.05309 -0.2788317,-0.09654 -0.619626,-0.09654 -0.8505388,0 -1.0953557,-0.488405 -1.0953557,-2.185211 0,-1.90734 -0.048411,-1.868066 2.30512,-1.870072 l 1.9823345,-0.0017 1.052375,-1.721616 c 0.578806,-0.94689 1.052375,-1.785869 1.052375,-1.8644 0,-0.07853 -0.829918,-0.162484 -1.844262,-0.186561 l -1.8442631,-0.04378 4.4809551,-7.327649 4.480953,-7.32765 12.466741,-0.0399 12.466738,-0.0399 0.517892,0.854518 0.517892,0.854518 2.335995,0.04287 2.335994,0.04287 2.742626,4.521316 c 1.508447,2.486723 4.136212,6.819001 5.839482,9.627283 1.703268,2.808283 3.157599,5.105969 3.231846,5.105969 0.256907,0 0.13186,-0.393635 -0.411085,-1.294044 -0.299901,-0.497351 -0.545275,-0.935841 -0.545275,-0.974422 0,-0.03858 0.310833,-0.07015 0.69074,-0.07015 0.575204,0 0.699074,-0.05324 0.740561,-0.318272 0.03599,-0.229934 0.273254,0.06215 0.854835,1.052375 0.702767,1.196557 0.780303,1.410253 0.610448,1.682462 -0.107012,0.171499 -0.377881,0.627528 -0.601929,1.013399 l -0.407361,0.701583 0.533953,0.857491 c 0.293674,0.47162 0.535536,0.950306 0.537472,1.063747 0.0019,0.113441 -3.098537,5.322698 -6.889942,11.576127 l -6.893462,11.36987 -16.876654,0 -16.876655,0 -1.226996,-2.065773 z"
|
|
||||||
style="fill:none;" />
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 26 KiB |
@ -1,3 +0,0 @@
|
|||||||
man_MANS = hexchat.1
|
|
||||||
|
|
||||||
EXTRA_DIST = hexchat.1.in
|
|
@ -1,18 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
_Name=HexChat
|
|
||||||
_GenericName=IRC Client
|
|
||||||
_Comment=Chat with other people online
|
|
||||||
_Keywords=IM;Chat;
|
|
||||||
Exec=hexchat %U
|
|
||||||
Icon=hexchat
|
|
||||||
Terminal=false
|
|
||||||
Type=Application
|
|
||||||
Categories=GTK;Network;IRCClient;
|
|
||||||
StartupNotify=true
|
|
||||||
X-GNOME-UsesNotifications=true
|
|
||||||
MimeType=x-scheme-handler/irc;x-scheme-handler/ircs;
|
|
||||||
Actions=SafeMode;
|
|
||||||
|
|
||||||
[Desktop Action SafeMode]
|
|
||||||
_Name=Open Safe Mode
|
|
||||||
Exec=hexchat --no-auto --no-plugins
|
|
1
man/Makefile.am
Normal file
1
man/Makefile.am
Normal file
@ -0,0 +1 @@
|
|||||||
|
man_MANS = hexchat.1
|
@ -1,4 +1,4 @@
|
|||||||
.TH HEXCHAT "1" "April 2013" "HexChat @VERSION@" "User Commands"
|
.TH HEXCHAT "1" "April 2013" "HexChat 2.9.6" "User Commands"
|
||||||
.SH NAME
|
.SH NAME
|
||||||
HexChat \- IRC Client
|
HexChat \- IRC Client
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
@ -1,30 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
||||||
<plist version="1.0">
|
|
||||||
<dict>
|
|
||||||
<key>CFBundleDevelopmentRegion</key>
|
|
||||||
<string>English</string>
|
|
||||||
<key>CFBundleExecutable</key>
|
|
||||||
<string>HexChat</string>
|
|
||||||
<key>CFBundleGetInfoString</key>
|
|
||||||
<string>@VERSION@</string>
|
|
||||||
<key>CFBundleIconFile</key>
|
|
||||||
<string>hexchat.icns</string>
|
|
||||||
<key>CFBundleIdentifier</key>
|
|
||||||
<string>org.hexchat</string>
|
|
||||||
<key>CFBundleInfoDictionaryVersion</key>
|
|
||||||
<string>6.0</string>
|
|
||||||
<key>CFBundlePackageType</key>
|
|
||||||
<string>APPL</string>
|
|
||||||
<key>CFBundleShortVersionString</key>
|
|
||||||
<string>@VERSION@</string>
|
|
||||||
<key>CFBundleSignature</key>
|
|
||||||
<string>????</string>
|
|
||||||
<key>CFBundleVersion</key>
|
|
||||||
<string>@VERSION@</string>
|
|
||||||
<key>NSHumanReadableCopyright</key>
|
|
||||||
<string></string>
|
|
||||||
<key>LSMinimumSystemVersion</key>
|
|
||||||
<string>10.4</string>
|
|
||||||
</dict>
|
|
||||||
</plist>
|
|
435
osx/gtkrc
435
osx/gtkrc
@ -1,435 +0,0 @@
|
|||||||
# Mac Theme for Xamarin composed by Lanedo GmbH
|
|
||||||
# Copyright 2012 Xamarin Inc.
|
|
||||||
# Authors:
|
|
||||||
# Christian Kellner <christian.kellner@lanedo.com>
|
|
||||||
# Carlos Garnacho <carlos.garnacho@lanedo.com>
|
|
||||||
#
|
|
||||||
# Modified by HexChat
|
|
||||||
#
|
|
||||||
|
|
||||||
gtk-color-scheme =
|
|
||||||
"bg_color: #f5f5f5
|
|
||||||
fg_color: #000
|
|
||||||
base_color: #fff
|
|
||||||
text_color: #000
|
|
||||||
selected_bg_color: #0066FF
|
|
||||||
selected_fg_color: #fff
|
|
||||||
tooltip_bg_color: #fafaba
|
|
||||||
tooltip_fg_color: #000"
|
|
||||||
|
|
||||||
gtk-button-images = 0
|
|
||||||
gtk-menu-images = 0
|
|
||||||
gtk-toolbar-style = 0
|
|
||||||
gtk-enable-mnemonics = 0
|
|
||||||
gtk-icon-sizes = "gtk-small-toolbar=16,16:gtk-large-toolbar=22,22"
|
|
||||||
gtk-toolbar-icon-size = large-toolbar
|
|
||||||
gtk-auto-mnemonics = 1
|
|
||||||
gtk-error-bell = 0
|
|
||||||
gtk-show-input-method-menu = 0
|
|
||||||
gtk-key-theme-name="Mac"
|
|
||||||
|
|
||||||
style "default" {
|
|
||||||
xthickness = 1
|
|
||||||
ythickness = 1
|
|
||||||
|
|
||||||
### colours
|
|
||||||
bg[NORMAL] = @bg_color
|
|
||||||
bg[PRELIGHT] = @bg_color
|
|
||||||
bg[SELECTED] = @selected_bg_color
|
|
||||||
bg[INSENSITIVE] = @bg_color
|
|
||||||
bg[ACTIVE] = @bg_color
|
|
||||||
|
|
||||||
fg[NORMAL] = @fg_color
|
|
||||||
fg[PRELIGHT] = @fg_color
|
|
||||||
fg[SELECTED] = @selected_fg_color
|
|
||||||
fg[INSENSITIVE] = darker (@bg_color)
|
|
||||||
fg[ACTIVE] = @fg_color
|
|
||||||
|
|
||||||
text[NORMAL] = @text_color
|
|
||||||
text[PRELIGHT] = @text_color
|
|
||||||
text[SELECTED] = @selected_fg_color
|
|
||||||
text[INSENSITIVE] = darker (@bg_color)
|
|
||||||
text[ACTIVE] = @text_color
|
|
||||||
|
|
||||||
base[NORMAL] = @base_color
|
|
||||||
base[PRELIGHT] = @selected_bg_color
|
|
||||||
base[SELECTED] = @selected_bg_color
|
|
||||||
base[INSENSITIVE] = @bg_color
|
|
||||||
base[ACTIVE] = shade (1.3, @selected_bg_color)
|
|
||||||
|
|
||||||
### style properties
|
|
||||||
GtkWidget::new-tooltip-style = 1
|
|
||||||
|
|
||||||
GtkEntry::honors-transparent-bg-hint = 1
|
|
||||||
GtkEntry::inner-border = { 2, 2, 2, 2 }
|
|
||||||
|
|
||||||
GtkButton::child-displacement-x = 0
|
|
||||||
GtkButton::child-displacement-y = 0
|
|
||||||
GtkButton::default-border = { 0, 0, 0, 0 }
|
|
||||||
GtkButton::inner-border = { 2, 2, 4, 4 }
|
|
||||||
|
|
||||||
GtkButtonBox::child-min-width = 70
|
|
||||||
GtkButtonBox::child-min-height = 22
|
|
||||||
|
|
||||||
GtkTreeView::odd-row-color = "#f0f4f9"
|
|
||||||
|
|
||||||
GtkScrolledWindow::scrollbar-spacing = 0
|
|
||||||
GtkScrolledWindow::scrollbars-within-bevel = 1
|
|
||||||
GtkScale::slider-length = 14
|
|
||||||
GtkRange::trough-side-details = 1
|
|
||||||
|
|
||||||
GtkTreeView::expander-size = 8
|
|
||||||
GtkExpander::expander-size = 8
|
|
||||||
GtkComboBox::arrow-size = 12
|
|
||||||
|
|
||||||
GtkMenu::vertical-padding = 4
|
|
||||||
GtkMenuItem::horizontal-padding = 9
|
|
||||||
GtkMenuItem::toggle-spacing = 0
|
|
||||||
GtkSeparatorMenuItem::horizontal-padding = 2
|
|
||||||
|
|
||||||
engine "xamarin" {
|
|
||||||
|
|
||||||
arrowstyle = 2
|
|
||||||
rgba = TRUE
|
|
||||||
roundness = 3
|
|
||||||
glazestyle = 0
|
|
||||||
|
|
||||||
menustyle = 0
|
|
||||||
menuitemstyle = 0
|
|
||||||
menubaritemstyle = 0
|
|
||||||
comboboxstyle = 1
|
|
||||||
spinbuttonstyle = 1
|
|
||||||
colorize_scrollbar = FALSE
|
|
||||||
progressbarstyle = 0
|
|
||||||
trough_shades = { 0.842, 0.886 }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
style "wide" = "default" {
|
|
||||||
xthickness = 2
|
|
||||||
ythickness = 2
|
|
||||||
}
|
|
||||||
|
|
||||||
style "wider" = "default" {
|
|
||||||
xthickness = 3
|
|
||||||
ythickness = 3
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
style "button" {
|
|
||||||
xthickness = 2
|
|
||||||
ythickness = 2
|
|
||||||
|
|
||||||
bg[NORMAL] = @bg_color
|
|
||||||
bg[PRELIGHT] = shade(1.1, @bg_color)
|
|
||||||
bg[ACTIVE] = @bg_color
|
|
||||||
bg[INSENSITIVE] = @bg_color
|
|
||||||
GtkWidget::focus-padding = 0
|
|
||||||
|
|
||||||
engine "quartz" {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
style "combo-box-button" {
|
|
||||||
xthickness = 2
|
|
||||||
ythickness = 4
|
|
||||||
|
|
||||||
bg[NORMAL] = @base_color
|
|
||||||
bg[PRELIGHT] = shade(1.1, @base_color)
|
|
||||||
bg[ACTIVE] = @base_color
|
|
||||||
bg[INSENSITIVE] = @base_color
|
|
||||||
GtkWidget::focus-padding = 0
|
|
||||||
|
|
||||||
engine "xamarin" {
|
|
||||||
contrast = 1.0
|
|
||||||
gradient_shades = {0.99, 0.98, 0.97, 0.96}
|
|
||||||
focus_color = shade(0.6, @base_color)
|
|
||||||
textstyle = 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
style "dialog-button" = "default" {
|
|
||||||
xthickness = 3
|
|
||||||
ythickness = 2
|
|
||||||
font_name = "Lucida Grande 13"
|
|
||||||
|
|
||||||
GtkWidget::draw-border = { 2, 2, 2, 2 }
|
|
||||||
GtkWidget::focus-line-width = 1
|
|
||||||
GtkButton::inner-border = { 8, 8, 0, 3 }
|
|
||||||
|
|
||||||
engine "quartz" {
|
|
||||||
buttontype = "aqua"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
style "toggle-button" = "button" {
|
|
||||||
bg[NORMAL] = @base_color
|
|
||||||
bg[PRELIGHT] = shade(0.98, @base_color)
|
|
||||||
}
|
|
||||||
|
|
||||||
style "menu" {
|
|
||||||
xthickness = 0
|
|
||||||
ythickness = 0
|
|
||||||
font_name = "Lucida Grande 14"
|
|
||||||
|
|
||||||
bg[PRELIGHT] = @selected_fg_color
|
|
||||||
fg[PRELIGHT] = @selected_fg_color
|
|
||||||
text[PRELIGHT] = @selected_fg_color
|
|
||||||
|
|
||||||
engine "quartz" {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
style "menu-item" = "menu" {
|
|
||||||
ythickness = 2
|
|
||||||
GtkWidget::draw-border = { 0, 0, 0, 2 }
|
|
||||||
}
|
|
||||||
|
|
||||||
style "menu-separator" = "menu-item" {
|
|
||||||
ythickness = 3
|
|
||||||
}
|
|
||||||
|
|
||||||
style "toolbar" = "default"
|
|
||||||
{
|
|
||||||
bg[NORMAL] = "#ddd"
|
|
||||||
engine "xamarin" {
|
|
||||||
toolbarstyle = 2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
style "toolbar-button"
|
|
||||||
{
|
|
||||||
engine "xamarin" {
|
|
||||||
contrast = 1.0
|
|
||||||
focus_color = @bg_color
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
style "tooltip"
|
|
||||||
{
|
|
||||||
xthickness = 5
|
|
||||||
ythickness = 5
|
|
||||||
|
|
||||||
fg[NORMAL] = @tooltip_fg_color
|
|
||||||
bg[NORMAL] = @tooltip_bg_color
|
|
||||||
|
|
||||||
engine "xamarin" {
|
|
||||||
roundness = 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
style "treeview" = "default"
|
|
||||||
{
|
|
||||||
GtkTreeView::odd-row-color = "#f5f5f5"
|
|
||||||
|
|
||||||
base[SELECTED] = "#2b5dcd"
|
|
||||||
base[ACTIVE] = "#cacaca"
|
|
||||||
text[SELECTED] = "#FFF"
|
|
||||||
text[ACTIVE] = "#000"
|
|
||||||
|
|
||||||
font_name = "Lucida Grande 12"
|
|
||||||
|
|
||||||
engine "quartz" {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
style "tree-header"
|
|
||||||
{
|
|
||||||
ythickness = 0
|
|
||||||
bg[NORMAL] = "#f2f2f2"
|
|
||||||
font_name = "Lucida Grande 11"
|
|
||||||
|
|
||||||
GtkWidget::focus-line-width = 0
|
|
||||||
GtkWidget::draw-border = { 1, 1, 1, 1 }
|
|
||||||
GtkButton::inner-border = { 3, 3, 1, 3 }
|
|
||||||
|
|
||||||
engine "quartz" {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
style "icon-view" = "default"
|
|
||||||
{
|
|
||||||
bg[SELECTED] = "#f5f7fa"
|
|
||||||
base[SELECTED] = "#f5f7fa"
|
|
||||||
fg[SELECTED] = "#000"
|
|
||||||
text[SELECTED] = "#000"
|
|
||||||
}
|
|
||||||
|
|
||||||
style "toolbar-combo-box" = "default"
|
|
||||||
{
|
|
||||||
fg[NORMAL] = "#616161"
|
|
||||||
text[NORMAL] = @fg_color
|
|
||||||
bg[NORMAL] = "#fff"
|
|
||||||
base[NORMAL] = "#fff"
|
|
||||||
ythickness = 4
|
|
||||||
xthickness = 2
|
|
||||||
|
|
||||||
engine "xamarin" {
|
|
||||||
comboboxstyle = 0
|
|
||||||
arrowstyle = 2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
style "combo-box" = "default"
|
|
||||||
{
|
|
||||||
fg[NORMAL] = "#616161"
|
|
||||||
xthickness = 2
|
|
||||||
ythickness = 4
|
|
||||||
|
|
||||||
engine "xamarin" {
|
|
||||||
arrowstyle = 4
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
style "combo-box-entry" = "combo-box"
|
|
||||||
{
|
|
||||||
engine "xamarin" {
|
|
||||||
arrowstyle = 3
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
style "combo-box-label" = "combo-box"
|
|
||||||
{
|
|
||||||
fg[NORMAL] = "#595959"
|
|
||||||
}
|
|
||||||
|
|
||||||
style "combo-box-menu" = "menu" {
|
|
||||||
font_name = "Lucida Grande 12"
|
|
||||||
}
|
|
||||||
|
|
||||||
style "notebook" = "default"
|
|
||||||
{
|
|
||||||
GtkNotebook::tab-overlap = 1
|
|
||||||
#bg[ACTIVE] = @base_color
|
|
||||||
bg[NORMAL] = @base_color
|
|
||||||
|
|
||||||
engine "xamarin" {
|
|
||||||
gradient_shades = { 0.945, 0.945, 0.945, 0.685 }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
style "radio-or-check-box"
|
|
||||||
{
|
|
||||||
ythickness = 6
|
|
||||||
#GtkCheckButton::indicator-size = 14
|
|
||||||
GtkCheckButton::indicator-spacing = 4
|
|
||||||
|
|
||||||
engine "quartz" {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
style "entry" = "default"
|
|
||||||
{
|
|
||||||
xthickness = 2
|
|
||||||
ythickness = 2
|
|
||||||
GtkEntry::inner-border = { 2, 2, 2, 2 }
|
|
||||||
base[INSENSITIVE] = shade(1.02, @bg_color)
|
|
||||||
|
|
||||||
engine "quartz" {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
style "search-entry" = "wider"
|
|
||||||
{
|
|
||||||
xthickness = 6
|
|
||||||
ythickness = 4
|
|
||||||
bg[NORMAL] = @base_color
|
|
||||||
}
|
|
||||||
|
|
||||||
style "scrollbar" = "default"
|
|
||||||
{
|
|
||||||
GtkScrollbar::has-forward-stepper = 0
|
|
||||||
GtkScrollbar::has-backward-stepper = 0
|
|
||||||
GtkRange::slider-width = 15
|
|
||||||
GtkRange::trough-border = 0
|
|
||||||
GtkRange::trough-side-details = 0
|
|
||||||
|
|
||||||
engine "quartz" {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
style "progressbar" = "default"
|
|
||||||
{
|
|
||||||
engine "quartz" {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
style "scrolled-window" = "default"
|
|
||||||
{
|
|
||||||
xthickness = 1
|
|
||||||
ythickness = 1
|
|
||||||
}
|
|
||||||
|
|
||||||
style "scale" = "default"
|
|
||||||
{
|
|
||||||
bg[SELECTED] = @selected_bg_color
|
|
||||||
|
|
||||||
engine "xamarin" {
|
|
||||||
roundness = 7
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
style "spin-button" = "wider"
|
|
||||||
{
|
|
||||||
fg[NORMAL] = "#616161"
|
|
||||||
ythickness = 4
|
|
||||||
GtkEntry::inner-border = { 2, 2, 1, 1 }
|
|
||||||
engine "xamarin" {
|
|
||||||
arrowstyle = 3
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
### Apply the styles
|
|
||||||
class "GtkWidget" style "default"
|
|
||||||
|
|
||||||
class "GtkEntry" style "entry"
|
|
||||||
class "GtkSpinButton" style "spin-button"
|
|
||||||
class "GtkFrame" style "wider"
|
|
||||||
class "GtkRange" style "wide"
|
|
||||||
class "GtkSeparator" style "wide"
|
|
||||||
class "GtkScrollbar" style "scrollbar"
|
|
||||||
class "GtkProgressBar" style "progressbar"
|
|
||||||
class "GtkScrolledWindow" style "scrolled-window"
|
|
||||||
class "GtkNotebook" style "notebook"
|
|
||||||
class "GtkButton" style "button"
|
|
||||||
class "GtkToggleButton" style "toggle-button"
|
|
||||||
class "GtkScale" style "scale"
|
|
||||||
|
|
||||||
#widget "*GtkEntry" style "entry"
|
|
||||||
widget "*search-entry*" style "search-entry"
|
|
||||||
widget "*GtkTextView" style "entry"
|
|
||||||
|
|
||||||
widget_class "<GtkDialog>*<GtkCheckButton>" style "radio-or-check-box"
|
|
||||||
widget_class "<GtkDialog>.<GtkVBox>.<GtkButtonBox>.<GtkButton>*" style "dialog-button"
|
|
||||||
widget_class "<GtkDialog>.<GtkVBox>.<GtkHBox>.<GtkButtonBox>.<GtkButton>*" style "dialog-button"
|
|
||||||
widget "*.toggleFindInFiles" style "toggle-button"
|
|
||||||
widget "*.toggleReplaceInFiles" style "toggle-button"
|
|
||||||
|
|
||||||
widget_class "*<GtkMenu>*" style "menu"
|
|
||||||
widget_class "*<GtkMenuItem>*" style "menu-item"
|
|
||||||
widget_class "*<GtkSeparatorMenuItem>" style "menu-separator"
|
|
||||||
widget "*.gtk-combobox-popup-menu*" style "combo-box-menu"
|
|
||||||
|
|
||||||
widget_class "*<GtkToolbar>*" style "toolbar"
|
|
||||||
widget_class "*ToolButton*" style "toolbar-button"
|
|
||||||
|
|
||||||
widget_class "*.<GtkTreeView>*" style "treeview"
|
|
||||||
widget_class "*.GtkTreeView.GtkButton" style "tree-header"
|
|
||||||
widget_class "*.GtkList.GtkButton" style "tree-header"
|
|
||||||
|
|
||||||
widget_class "*<GtkIconView>" style "icon-view"
|
|
||||||
|
|
||||||
widget_class "*.<GtkComboBox>.*" style "combo-box"
|
|
||||||
widget_class "*.<GtkComboBoxText>.*" style "combo-box-entry"
|
|
||||||
widget_class "*.<GtkComboBoxEntry>.*" style "combo-box-entry"
|
|
||||||
widget_class "*.<GtkComboBoxText>.<GtkEntry>" style "combo-box-entry"
|
|
||||||
widget_class "*.<GtkComboBoxEntry>.<GtkEntry>" style "combo-box-entry"
|
|
||||||
widget_class "*.<GtkComboBoxText>.<GtkToggleButton>" style "combo-box-button"
|
|
||||||
widget_class "*.<GtkComboBoxEntry>.<GtkToggleButton>" style "combo-box-button"
|
|
||||||
widget_class "*.<GtkComboBox>.*.GtkLabel" style "combo-box-label"
|
|
||||||
|
|
||||||
# Comboboxes within toolbars
|
|
||||||
widget_class "*.<GtkToolbar>.*.<GtkComboBox>.*" style "toolbar-combo-box"
|
|
||||||
widget "*MainToolbar*.GtkComboBox.*" style "toolbar-combo-box"
|
|
||||||
|
|
||||||
widget "gtk-tooltip*" style "tooltip"
|
|
@ -1,83 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<app-bundle>
|
|
||||||
|
|
||||||
<meta>
|
|
||||||
<prefix name="default">${env:JHBUILD_PREFIX}</prefix>
|
|
||||||
<destination overwrite="yes">${project}</destination>
|
|
||||||
|
|
||||||
<run-install-name-tool/>
|
|
||||||
<launcher-script>${project}/launcher.sh</launcher-script >
|
|
||||||
<gtk>gtk+-2.0</gtk>
|
|
||||||
</meta>
|
|
||||||
|
|
||||||
<plist>${project}/Info.plist</plist>
|
|
||||||
|
|
||||||
<main-binary>
|
|
||||||
${prefix}/bin/hexchat
|
|
||||||
</main-binary>
|
|
||||||
|
|
||||||
<binary>
|
|
||||||
${prefix}/lib/hexchat/plugins/*.so
|
|
||||||
</binary>
|
|
||||||
|
|
||||||
<binary>
|
|
||||||
${prefix}/lib/libenchant.dylib
|
|
||||||
</binary>
|
|
||||||
<binary>
|
|
||||||
${prefix}/lib/enchant/libenchant_applespell.so
|
|
||||||
</binary>
|
|
||||||
|
|
||||||
<binary dest="${bundle}/Contents/MacOS">
|
|
||||||
${prefix}/bin/python
|
|
||||||
</binary>
|
|
||||||
<binary>
|
|
||||||
${prefix}/lib/libpython2.7.dylib
|
|
||||||
</binary>
|
|
||||||
<data>
|
|
||||||
${prefix}/lib/python2.7/
|
|
||||||
</data>
|
|
||||||
<data>
|
|
||||||
${prefix}/include/python2.7/pyconfig.h
|
|
||||||
</data>
|
|
||||||
|
|
||||||
<binary>
|
|
||||||
${prefix}/lib/${gtkdir}/modules/*.so
|
|
||||||
</binary>
|
|
||||||
<binary>
|
|
||||||
${prefix}/lib/${gtkdir}/${pkg:${gtk}:gtk_binary_version}/engines/libquartz.so
|
|
||||||
</binary>
|
|
||||||
<binary>
|
|
||||||
${prefix}/lib/${gtkdir}/${pkg:${gtk}:gtk_binary_version}/engines/libxamarin.so
|
|
||||||
</binary>
|
|
||||||
<binary>
|
|
||||||
${prefix}/lib/${gtkdir}/${pkg:${gtk}:gtk_binary_version}/printbackends/*.so
|
|
||||||
</binary>
|
|
||||||
<binary>
|
|
||||||
${prefix}/lib/gdk-pixbuf-2.0/${pkg:${gtk}:gtk_binary_version}/loaders/*.so
|
|
||||||
</binary>
|
|
||||||
<binary>
|
|
||||||
${prefix}/lib/pango/${pkg:pango:pango_module_version}/modules/
|
|
||||||
</binary>
|
|
||||||
<data>
|
|
||||||
${prefix}/share/themes/Mac/
|
|
||||||
</data>
|
|
||||||
|
|
||||||
<translations name="gtk20">
|
|
||||||
${prefix}/share/locale
|
|
||||||
</translations>
|
|
||||||
<translations name="hexchat">
|
|
||||||
${prefix}/share/locale
|
|
||||||
</translations>
|
|
||||||
|
|
||||||
<data dest="${bundle}/Contents/Resources/etc/${gtkdir}/gtkrc">
|
|
||||||
${project}/gtkrc
|
|
||||||
</data>
|
|
||||||
|
|
||||||
<data dest="${bundle}/Contents/Resources">
|
|
||||||
${project}/hexchat.icns
|
|
||||||
</data>
|
|
||||||
|
|
||||||
<!-- icon-theme icons="none">
|
|
||||||
</icon-theme -->
|
|
||||||
|
|
||||||
</app-bundle>
|
|
BIN
osx/hexchat.icns
BIN
osx/hexchat.icns
Binary file not shown.
178
osx/launcher.sh
178
osx/launcher.sh
@ -1,178 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
if test "x$GTK_DEBUG_LAUNCHER" != x; then
|
|
||||||
set -x
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x$GTK_DEBUG_GDB" != x; then
|
|
||||||
EXEC="gdb --args"
|
|
||||||
else
|
|
||||||
EXEC=exec
|
|
||||||
fi
|
|
||||||
|
|
||||||
name=`basename "$0"`
|
|
||||||
tmp="$0"
|
|
||||||
tmp=`dirname "$tmp"`
|
|
||||||
tmp=`dirname "$tmp"`
|
|
||||||
bundle=`dirname "$tmp"`
|
|
||||||
bundle_contents="$bundle"/Contents
|
|
||||||
bundle_res="$bundle_contents"/Resources
|
|
||||||
bundle_lib="$bundle_res"/lib
|
|
||||||
bundle_bin="$bundle_res"/bin
|
|
||||||
bundle_data="$bundle_res"/share
|
|
||||||
bundle_etc="$bundle_res"/etc
|
|
||||||
|
|
||||||
export PREFIX="$bundle_res"
|
|
||||||
export DYLD_LIBRARY_PATH="$bundle_lib"
|
|
||||||
export XDG_CONFIG_DIRS="$bundle_etc"/xdg
|
|
||||||
export XDG_DATA_DIRS="$bundle_data"
|
|
||||||
export GTK_DATA_PREFIX="$bundle_res"
|
|
||||||
export GTK_EXE_PREFIX="$bundle_res"
|
|
||||||
export GTK_PATH="$bundle_res"
|
|
||||||
|
|
||||||
export GTK2_RC_FILES="$bundle_etc/gtk-2.0/gtkrc"
|
|
||||||
export GTK_IM_MODULE_FILE="$bundle_etc/gtk-2.0/gtk.immodules"
|
|
||||||
export GDK_PIXBUF_MODULE_FILE="$bundle_etc/gtk-2.0/gdk-pixbuf.loaders"
|
|
||||||
export PANGO_LIBDIR="$bundle_lib"
|
|
||||||
export PANGO_SYSCONFDIR="$bundle_etc"
|
|
||||||
|
|
||||||
export PYTHON="$bundle_contents/MacOS/python"
|
|
||||||
export PYTHONHOME="$bundle_res"
|
|
||||||
export PYTHONPATH="$bundle_lib/python2.7:$bundle_lib/python2.7/site-packages"
|
|
||||||
|
|
||||||
export OPENSSL_CONF="/System/Library/OpenSSL/openssl.cnf"
|
|
||||||
|
|
||||||
export HEXCHAT_LIBDIR="$bundle_lib/hexchat/plugins"
|
|
||||||
|
|
||||||
APP=name
|
|
||||||
I18NDIR="$bundle_data/locale"
|
|
||||||
# Set the locale-related variables appropriately:
|
|
||||||
unset LANG LC_MESSAGES LC_MONETARY LC_COLLATE
|
|
||||||
|
|
||||||
# Has a language ordering been set?
|
|
||||||
# If so, set LC_MESSAGES and LANG accordingly; otherwise skip it.
|
|
||||||
# First step uses sed to clean off the quotes and commas, to change - to _, and change the names for the chinese scripts from "Hans" to CN and "Hant" to TW.
|
|
||||||
APPLELANGUAGES=`defaults read .GlobalPreferences AppleLanguages | sed -En -e 's/\-/_/' -e 's/Hant/TW/' -e 's/Hans/CN/' -e 's/[[:space:]]*\"?([[:alnum:]_]+)\"?,?/\1/p' `
|
|
||||||
if test "$APPLELANGUAGES"; then
|
|
||||||
# A language ordering exists.
|
|
||||||
# Test, item per item, to see whether there is an corresponding locale.
|
|
||||||
for L in $APPLELANGUAGES; do
|
|
||||||
#test for exact matches:
|
|
||||||
if test -f "$I18NDIR/${L}/LC_MESSAGES/$APP.mo"; then
|
|
||||||
export LANG=$L
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
#This is a special case, because often the original strings are in US
|
|
||||||
#English and there is no translation file.
|
|
||||||
if test "x$L" == "xen_US"; then
|
|
||||||
export LANG=$L
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
#OK, now test for just the first two letters:
|
|
||||||
if test -f "$I18NDIR/${L:0:2}/LC_MESSAGES/$APP.mo"; then
|
|
||||||
export LANG=${L:0:2}
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
#Same thing, but checking for any english variant.
|
|
||||||
if test "x${L:0:2}" == "xen"; then
|
|
||||||
export LANG=$L
|
|
||||||
break
|
|
||||||
fi;
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
unset APPLELANGUAGES L
|
|
||||||
|
|
||||||
# If we didn't get a language from the language list, try the Collation preference, in case it's the only setting that exists.
|
|
||||||
APPLECOLLATION=`defaults read .GlobalPreferences AppleCollationOrder`
|
|
||||||
if test -z ${LANG} -a -n $APPLECOLLATION; then
|
|
||||||
if test -f "$I18NDIR/${APPLECOLLATION:0:2}/LC_MESSAGES/$APP.mo"; then
|
|
||||||
export LANG=${APPLECOLLATION:0:2}
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if test ! -z $APPLECOLLATION; then
|
|
||||||
export LC_COLLATE=$APPLECOLLATION
|
|
||||||
fi
|
|
||||||
unset APPLECOLLATION
|
|
||||||
|
|
||||||
# Continue by attempting to find the Locale preference.
|
|
||||||
APPLELOCALE=`defaults read .GlobalPreferences AppleLocale`
|
|
||||||
|
|
||||||
if test -f "$I18NDIR/${APPLELOCALE:0:5}/LC_MESSAGES/$APP.mo"; then
|
|
||||||
if test -z $LANG; then
|
|
||||||
export LANG="${APPLELOCALE:0:5}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
elif test -z $LANG -a -f "$I18NDIR/${APPLELOCALE:0:2}/LC_MESSAGES/$APP.mo"; then
|
|
||||||
export LANG="${APPLELOCALE:0:2}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
#Next we need to set LC_MESSAGES. If at all possilbe, we want a full
|
|
||||||
#5-character locale to avoid the "Locale not supported by C library"
|
|
||||||
#warning from Gtk -- even though Gtk will translate with a
|
|
||||||
#two-character code.
|
|
||||||
if test -n $LANG; then
|
|
||||||
#If the language code matches the applelocale, then that's the message
|
|
||||||
#locale; otherwise, if it's longer than two characters, then it's
|
|
||||||
#probably a good message locale and we'll go with it.
|
|
||||||
if test $LANG == ${APPLELOCALE:0:5} -o $LANG != ${LANG:0:2}; then
|
|
||||||
export LC_MESSAGES=$LANG
|
|
||||||
#Next try if the Applelocale is longer than 2 chars and the language
|
|
||||||
#bit matches $LANG
|
|
||||||
elif test $LANG == ${APPLELOCALE:0:2} -a $APPLELOCALE > ${APPLELOCALE:0:2}; then
|
|
||||||
export LC_MESSAGES=${APPLELOCALE:0:5}
|
|
||||||
#Fail. Get a list of the locales in $PREFIX/share/locale that match
|
|
||||||
#our two letter language code and pick the first one, special casing
|
|
||||||
#english to set en_US
|
|
||||||
elif test $LANG == "en"; then
|
|
||||||
export LC_MESSAGES="en_US"
|
|
||||||
else
|
|
||||||
LOC=`find $PREFIX/share/locale -name $LANG???`
|
|
||||||
for L in $LOC; do
|
|
||||||
export LC_MESSAGES=$L
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
#All efforts have failed, so default to US english
|
|
||||||
export LANG="en_US"
|
|
||||||
export LC_MESSAGES="en_US"
|
|
||||||
fi
|
|
||||||
CURRENCY=`echo $APPLELOCALE | sed -En 's/.*currency=([[:alpha:]]+).*/\1/p'`
|
|
||||||
if test "x$CURRENCY" != "x"; then
|
|
||||||
#The user has set a special currency. Gtk doesn't install LC_MONETARY files, but Apple does in /usr/share/locale, so we're going to look there for a locale to set LC_CURRENCY to.
|
|
||||||
if test -f /usr/local/share/$LC_MESSAGES/LC_MONETARY; then
|
|
||||||
if test -a `cat /usr/local/share/$LC_MESSAGES/LC_MONETARY` == $CURRENCY; then
|
|
||||||
export LC_MONETARY=$LC_MESSAGES
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if test -z "$LC_MONETARY"; then
|
|
||||||
FILES=`find /usr/share/locale -name LC_MONETARY -exec grep -H $CURRENCY {} \;`
|
|
||||||
if test -n "$FILES"; then
|
|
||||||
export LC_MONETARY=`echo $FILES | sed -En 's%/usr/share/locale/([[:alpha:]_]+)/LC_MONETARY.*%\1%p'`
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
#No currency value means that the AppleLocale governs:
|
|
||||||
if test -z "$LC_MONETARY"; then
|
|
||||||
LC_MONETARY=${APPLELOCALE:0:5}
|
|
||||||
fi
|
|
||||||
#For Gtk, which only looks at LC_ALL:
|
|
||||||
export LC_ALL=$LC_MESSAGES
|
|
||||||
|
|
||||||
unset APPLELOCALE FILES LOC
|
|
||||||
|
|
||||||
if test -f "$bundle_lib/charset.alias"; then
|
|
||||||
export CHARSETALIASDIR="$bundle_lib"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Extra arguments can be added in environment.sh.
|
|
||||||
EXTRA_ARGS=
|
|
||||||
if test -f "$bundle_res/environment.sh"; then
|
|
||||||
source "$bundle_res/environment.sh"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Strip out the argument added by the OS.
|
|
||||||
if /bin/expr "x$1" : '^x-psn_' > /dev/null; then
|
|
||||||
shift 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
$EXEC "$bundle_contents/MacOS/$name-bin" "$@" $EXTRA_ARGS
|
|
@ -1,26 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
if [ -z "$JHBUILD_PREFIX" ]; then
|
|
||||||
echo "You must run this within a jhbuild shell."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f $JHBUILD_PREFIX/bin/python ]; then
|
|
||||||
echo "You must install python with jhbuild."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
rm -rf HexChat.app
|
|
||||||
rm -f *.app.zip
|
|
||||||
|
|
||||||
$JHBUILD_PREFIX/bin/python $HOME/.local/bin/gtk-mac-bundler hexchat.bundle
|
|
||||||
|
|
||||||
# These take up a lot of space in the bundle
|
|
||||||
echo "Cleaning up python files"
|
|
||||||
find ./HexChat.app/Contents/Resources/lib/python2.7 -name "*.pyc" -delete
|
|
||||||
find ./HexChat.app/Contents/Resources/lib/python2.7 -name "*.pyo" -delete
|
|
||||||
|
|
||||||
echo "Compressing bundle"
|
|
||||||
#hdiutil create -format UDBZ -srcdir HexChat.app -quiet HexChat-2.9.6.1-$(git rev-parse --short master).dmg
|
|
||||||
zip -9rXq ./HexChat-$(git describe --tags).app.zip ./HexChat.app
|
|
||||||
|
|
@ -1,3 +1,8 @@
|
|||||||
|
# temp. solution while mailcheck & xdcc arn't in SUBDIRS
|
||||||
|
EXTRA_DIST = Make.plugin plugin-conf.in xdcc/xdcc.c xdcc/Makefile.am
|
||||||
|
|
||||||
|
# noinst_HEADERS = hexchat-plugin.h
|
||||||
|
|
||||||
if DO_PYTHON
|
if DO_PYTHON
|
||||||
pythondir = python
|
pythondir = python
|
||||||
endif
|
endif
|
||||||
@ -22,4 +27,5 @@ if DO_SYSINFO
|
|||||||
sysinfodir = sysinfo
|
sysinfodir = sysinfo
|
||||||
endif
|
endif
|
||||||
|
|
||||||
SUBDIRS = $(pythondir) $(perldir) $(checksumdir) $(doatdir) $(fishlimdir) $(sysinfodir)
|
#SUBDIRS = . $(pythondir) $(perldir) mailcheck xdcc
|
||||||
|
SUBDIRS = . $(pythondir) $(perldir) $(checksumdir) $(doatdir) $(fishlimdir) $(sysinfodir)
|
||||||
|
@ -20,11 +20,6 @@
|
|||||||
* THE SOFTWARE.
|
* THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef __APPLE__
|
|
||||||
#define __AVAILABILITYMACROS__
|
|
||||||
#define DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
332
plugins/dns/dns.c
Normal file
332
plugins/dns/dns.c
Normal file
@ -0,0 +1,332 @@
|
|||||||
|
/* HexChat Win32 DNS Plugin
|
||||||
|
* Copyright (C) 2003-2004 Peter Zelezny.
|
||||||
|
* Copyright (C) 2012 Berke Viktor.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 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 General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
* Requires MS Visual Studio and IPV6 headers to compile (run nmake).
|
||||||
|
* Compiling with gcc (mingw) will fail due to missing gai_strerror.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define DNS_VERSION "2.4"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
|
||||||
|
#define USE_IPV6
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#ifdef USE_IPV6
|
||||||
|
#include <winsock2.h>
|
||||||
|
#include <ws2tcpip.h>
|
||||||
|
#else
|
||||||
|
#include <winsock2.h>
|
||||||
|
#endif
|
||||||
|
#include <io.h>
|
||||||
|
#else
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "hexchat-plugin.h"
|
||||||
|
#include "thread.h"
|
||||||
|
|
||||||
|
#define HELP "Usage: DNS <nickname|hostname|numerical address>\n"
|
||||||
|
#define HEAD "\0034[DNS]\017\t"
|
||||||
|
|
||||||
|
#define PIPE_READ 0
|
||||||
|
#define PIPE_WRITE 1
|
||||||
|
#define MAX_HOSTNAME 128
|
||||||
|
|
||||||
|
static hexchat_plugin *ph;
|
||||||
|
static thread *active_thread = NULL;
|
||||||
|
|
||||||
|
|
||||||
|
static int
|
||||||
|
waitline (void *source, char *buf, int bufsize)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
int len;
|
||||||
|
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
len = 1;
|
||||||
|
/* we can't read() here, due to glib's giowin32 */
|
||||||
|
if (ph->hexchat_read_fd (ph, source, buf + i, &len) != 0)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if (buf[i] == '\n' || bufsize == i + 1)
|
||||||
|
{
|
||||||
|
buf[i] = 0;
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void *
|
||||||
|
thread_function (void *ud)
|
||||||
|
{
|
||||||
|
#ifdef USE_IPV6
|
||||||
|
struct addrinfo *ent;
|
||||||
|
struct addrinfo *cur;
|
||||||
|
struct addrinfo hints;
|
||||||
|
#else
|
||||||
|
struct hostent *ent;
|
||||||
|
#endif
|
||||||
|
thread *th = ud;
|
||||||
|
int fd = th->pipe_fd[PIPE_WRITE];
|
||||||
|
int ret;
|
||||||
|
char ipstring[MAX_HOSTNAME];
|
||||||
|
char reverse[MAX_HOSTNAME];
|
||||||
|
// int i;
|
||||||
|
|
||||||
|
active_thread = th;
|
||||||
|
|
||||||
|
#ifdef USE_IPV6
|
||||||
|
memset (&hints, 0, sizeof (hints));
|
||||||
|
hints.ai_family = PF_UNSPEC; /* support ipv6 and ipv4 */
|
||||||
|
hints.ai_flags = AI_CANONNAME;
|
||||||
|
// hints.ai_socktype = SOCK_STREAM;
|
||||||
|
|
||||||
|
ret = getaddrinfo (th->userdata, NULL, &hints, &ent);
|
||||||
|
if (ret != 0)
|
||||||
|
{
|
||||||
|
sprintf (ipstring, "1%d\n", ret); /* failed */
|
||||||
|
write (fd, ipstring, strlen (ipstring));
|
||||||
|
// Sleep (3000);
|
||||||
|
active_thread = NULL;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// i = 0;
|
||||||
|
cur = ent;
|
||||||
|
while (cur)
|
||||||
|
{
|
||||||
|
/* find the numeric IP number */
|
||||||
|
ipstring[0] = 0;
|
||||||
|
getnameinfo (cur->ai_addr, cur->ai_addrlen,
|
||||||
|
ipstring, sizeof (ipstring), NULL, 0, NI_NUMERICHOST);
|
||||||
|
|
||||||
|
if (cur->ai_canonname)
|
||||||
|
{
|
||||||
|
/* force reverse lookup if canonname & ipstring are the same */
|
||||||
|
if (/*i == 0 &&*/ strcmp (cur->ai_canonname, ipstring) == 0)
|
||||||
|
goto lamecode;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cur->ai_canonname)
|
||||||
|
{
|
||||||
|
write (fd, "0", 1);
|
||||||
|
write (fd, ipstring, strlen (ipstring));
|
||||||
|
write (fd, "\n", 1);
|
||||||
|
write (fd, cur->ai_canonname, strlen (cur->ai_canonname));
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
lamecode:
|
||||||
|
// ret = 1;
|
||||||
|
// if (i == 0)
|
||||||
|
{
|
||||||
|
/* reverse lookup */
|
||||||
|
reverse[0] = 0;
|
||||||
|
ret = getnameinfo (cur->ai_addr, cur->ai_addrlen,
|
||||||
|
reverse, sizeof (reverse), NULL, 0, NI_NAMEREQD);
|
||||||
|
}
|
||||||
|
|
||||||
|
write (fd, "0", 1);
|
||||||
|
write (fd, ipstring, strlen (ipstring));
|
||||||
|
|
||||||
|
write (fd, "\n", 1);
|
||||||
|
if (ret == 0)
|
||||||
|
write (fd, reverse, strlen (reverse));
|
||||||
|
}
|
||||||
|
write (fd, "\n", 1);
|
||||||
|
|
||||||
|
// i++;
|
||||||
|
cur = cur->ai_next;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* tell the parent we're done */
|
||||||
|
write (fd, "2\n", 2);
|
||||||
|
freeaddrinfo (ent);
|
||||||
|
|
||||||
|
#else
|
||||||
|
ent = gethostbyname (th->userdata);
|
||||||
|
if (ent)
|
||||||
|
{
|
||||||
|
write (fd, "0", 1);
|
||||||
|
write (fd, ent->h_name, strlen (ent->h_name));
|
||||||
|
write (fd, "\n", 1);
|
||||||
|
write (fd, ent->h_name, strlen (ent->h_name));
|
||||||
|
write (fd, "\n", 1);
|
||||||
|
write (fd, "2\n", 2);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
write (fd, "10\n", 1);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Sleep (3000);
|
||||||
|
active_thread = NULL; /* race condition, better than nothing */
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
dns_close_pipe (int fd)
|
||||||
|
{
|
||||||
|
close (fd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* read messages comming from the child (through the pipe) */
|
||||||
|
|
||||||
|
static int
|
||||||
|
dns_read_cb (int fd, int flags, thread *th, void *source)
|
||||||
|
{
|
||||||
|
char buf[512];
|
||||||
|
char buf2[512];
|
||||||
|
|
||||||
|
while (waitline (source, buf, sizeof (buf)))
|
||||||
|
{
|
||||||
|
switch (buf[0])
|
||||||
|
{
|
||||||
|
case '0': /* got data to show */
|
||||||
|
waitline (source, buf2, sizeof (buf2));
|
||||||
|
if (buf2[0] == 0)
|
||||||
|
hexchat_printf(ph, HEAD"\002Numerical\002: %s\n", buf + 1);
|
||||||
|
else
|
||||||
|
hexchat_printf(ph, HEAD"\002Canonical\002: %s \002Numerical\002: %s\n", buf2, buf + 1);
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
case '1': /* failed */
|
||||||
|
hexchat_printf(ph, HEAD"Lookup failed. %s\n", gai_strerrorA (atoi (buf + 1)));
|
||||||
|
|
||||||
|
case '2': /* done */
|
||||||
|
// close (th->pipe_fd[PIPE_WRITE]);
|
||||||
|
// close (th->pipe_fd[PIPE_READ]);
|
||||||
|
hexchat_hook_timer(ph, 3000, dns_close_pipe, (void *)th->pipe_fd[PIPE_WRITE]);
|
||||||
|
hexchat_hook_timer(ph, 4000, dns_close_pipe, (void *)th->pipe_fd[PIPE_READ]);
|
||||||
|
free (th->userdata); /* hostname strdup'ed */
|
||||||
|
free (th);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* find hostname from nickname (search the userlist, current chan only) */
|
||||||
|
|
||||||
|
static char *
|
||||||
|
find_nick_host (char *nick)
|
||||||
|
{
|
||||||
|
hexchat_list *list;
|
||||||
|
char *at;
|
||||||
|
const char *host;
|
||||||
|
|
||||||
|
list = hexchat_list_get (ph, "users");
|
||||||
|
if (!list)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
while (hexchat_list_next (ph, list))
|
||||||
|
{
|
||||||
|
if (stricmp (nick, hexchat_list_str (ph, list, "nick")) == 0)
|
||||||
|
{
|
||||||
|
host = hexchat_list_str (ph, list, "host");
|
||||||
|
if (host)
|
||||||
|
{
|
||||||
|
at = strrchr (host, '@');
|
||||||
|
if (at)
|
||||||
|
return at + 1;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
dns_cmd_cb (char *word[], char *word_eol[], void *ud)
|
||||||
|
{
|
||||||
|
thread *th;
|
||||||
|
char *nickhost;
|
||||||
|
|
||||||
|
if (!word[2][0])
|
||||||
|
{
|
||||||
|
hexchat_print (ph, HELP);
|
||||||
|
return HEXCHAT_EAT_ALL;
|
||||||
|
}
|
||||||
|
|
||||||
|
th = thread_new ();
|
||||||
|
if (th)
|
||||||
|
{
|
||||||
|
nickhost = find_nick_host (word[2]);
|
||||||
|
if (nickhost)
|
||||||
|
{
|
||||||
|
hexchat_printf (ph, HEAD"Looking up %s (%s)...\n", nickhost, word[2]);
|
||||||
|
th->userdata = strdup (nickhost);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
hexchat_printf (ph, HEAD"Looking up %s...\n", word[2]);
|
||||||
|
th->userdata = strdup (word[2]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (thread_start (th, thread_function, th))
|
||||||
|
{
|
||||||
|
hexchat_hook_fd(ph, th->pipe_fd[PIPE_READ],
|
||||||
|
HEXCHAT_FD_READ | HEXCHAT_FD_EXCEPTION | HEXCHAT_FD_NOTSOCKET,
|
||||||
|
(void *)dns_read_cb, th);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return HEXCHAT_EAT_ALL;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
hexchat_plugin_deinit (hexchat_plugin *plugin_handle)
|
||||||
|
{
|
||||||
|
while (active_thread) /* children will set this var to NULL soon... */
|
||||||
|
{
|
||||||
|
Sleep (1000);
|
||||||
|
}
|
||||||
|
hexchat_printf (ph, "DNS plugin unloaded\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
hexchat_plugin_init
|
||||||
|
(hexchat_plugin *plugin_handle, char **plugin_name,
|
||||||
|
char **plugin_desc, char **plugin_version, char *arg)
|
||||||
|
{
|
||||||
|
/* we need to save this for use with any hexchat_* functions */
|
||||||
|
ph = plugin_handle;
|
||||||
|
|
||||||
|
*plugin_name = "DNS";
|
||||||
|
*plugin_desc = "Threaded IPv4/6 DNS Command";
|
||||||
|
*plugin_version = DNS_VERSION;
|
||||||
|
|
||||||
|
hexchat_hook_command(ph, "DNS", HEXCHAT_PRI_LOW, dns_cmd_cb, HELP, 0);
|
||||||
|
hexchat_printf (ph, "DNS plugin loaded\n");
|
||||||
|
|
||||||
|
return 1; /* return 1 for success */
|
||||||
|
}
|
3
plugins/dns/dns.def
Normal file
3
plugins/dns/dns.def
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
EXPORTS
|
||||||
|
hexchat_plugin_init
|
||||||
|
hexchat_plugin_deinit
|
111
plugins/dns/dns.vcxproj
Normal file
111
plugins/dns/dns.vcxproj
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<PropertyGroup Label="Configuration">
|
||||||
|
<PlatformToolset>v120</PlatformToolset>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|x64">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>x64</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{3786FA8C-3E76-45E3-984E-FCCFF44729C9}</ProjectGuid>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
<RootNamespace>dns</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||||
|
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>MultiByte</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="..\..\win32\hexchat.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
<Import Project="..\..\win32\hexchat.props" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
<TargetName>hcdns</TargetName>
|
||||||
|
<OutDir>$(HexChatBin)</OutDir>
|
||||||
|
<IntDir>$(HexChatObj)$(ProjectName)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
<TargetName>hcdns</TargetName>
|
||||||
|
<OutDir>$(HexChatBin)</OutDir>
|
||||||
|
<IntDir>$(HexChatObj)$(ProjectName)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;DNS_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>..\..\src\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<AdditionalLibraryDirectories>$(DepsRoot)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<AdditionalDependencies>$(DepLibs);%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<ModuleDefinitionFile>dns.def</ModuleDefinitionFile>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>
|
||||||
|
</PrecompiledHeader>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<PreprocessorDefinitions>WIN32;_WIN64;_AMD64_;NDEBUG;_WINDOWS;_USRDLL;DNS_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<AdditionalIncludeDirectories>..\..\src\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<AdditionalLibraryDirectories>$(DepsRoot)\lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
|
||||||
|
<AdditionalDependencies>$(DepLibs);%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
<ModuleDefinitionFile>dns.def</ModuleDefinitionFile>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="dns.def" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="dns.c" />
|
||||||
|
<ClCompile Include="thread.c" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="thread.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
35
plugins/dns/dns.vcxproj.filters
Normal file
35
plugins/dns/dns.vcxproj.filters
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="Source Files">
|
||||||
|
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||||
|
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Header Files">
|
||||||
|
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||||
|
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="Resource Files">
|
||||||
|
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||||
|
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="dns.def">
|
||||||
|
<Filter>Resource Files</Filter>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="dns.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="thread.c">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="thread.h">
|
||||||
|
<Filter>Header Files</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
34
plugins/dns/thread.c
Normal file
34
plugins/dns/thread.c
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
#include <io.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include "thread.h"
|
||||||
|
|
||||||
|
thread *
|
||||||
|
thread_new (void)
|
||||||
|
{
|
||||||
|
thread *th;
|
||||||
|
|
||||||
|
th = calloc (1, sizeof (*th));
|
||||||
|
if (!th)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_pipe (th->pipe_fd, 4096, _O_BINARY) == -1)
|
||||||
|
{
|
||||||
|
free (th);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return th;
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
thread_start (thread *th, void *(*start_routine)(void *), void *arg)
|
||||||
|
{
|
||||||
|
DWORD id;
|
||||||
|
|
||||||
|
CloseHandle (CreateThread (NULL, 0, (LPTHREAD_START_ROUTINE)start_routine, arg, 0, (DWORD *)&id));
|
||||||
|
th->threadid = id;
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
11
plugins/dns/thread.h
Normal file
11
plugins/dns/thread.h
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
DWORD threadid;
|
||||||
|
int pipe_fd[2];
|
||||||
|
void *userdata;
|
||||||
|
} thread;
|
||||||
|
|
||||||
|
thread *thread_new (void);
|
||||||
|
int thread_start (thread *th, void *(*start_routine)(void *), void *arg);
|
502
plugins/ewc/COPYING
Normal file
502
plugins/ewc/COPYING
Normal file
@ -0,0 +1,502 @@
|
|||||||
|
GNU LESSER GENERAL PUBLIC LICENSE
|
||||||
|
Version 2.1, February 1999
|
||||||
|
|
||||||
|
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
[This is the first released version of the Lesser GPL. It also counts
|
||||||
|
as the successor of the GNU Library Public License, version 2, hence
|
||||||
|
the version number 2.1.]
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The licenses for most software are designed to take away your
|
||||||
|
freedom to share and change it. By contrast, the GNU General Public
|
||||||
|
Licenses are intended to guarantee your freedom to share and change
|
||||||
|
free software--to make sure the software is free for all its users.
|
||||||
|
|
||||||
|
This license, the Lesser General Public License, applies to some
|
||||||
|
specially designated software packages--typically libraries--of the
|
||||||
|
Free Software Foundation and other authors who decide to use it. You
|
||||||
|
can use it too, but we suggest you first think carefully about whether
|
||||||
|
this license or the ordinary General Public License is the better
|
||||||
|
strategy to use in any particular case, based on the explanations below.
|
||||||
|
|
||||||
|
When we speak of free software, we are referring to freedom of use,
|
||||||
|
not price. Our General Public Licenses are designed to make sure that
|
||||||
|
you have the freedom to distribute copies of free software (and charge
|
||||||
|
for this service if you wish); that you receive source code or can get
|
||||||
|
it if you want it; that you can change the software and use pieces of
|
||||||
|
it in new free programs; and that you are informed that you can do
|
||||||
|
these things.
|
||||||
|
|
||||||
|
To protect your rights, we need to make restrictions that forbid
|
||||||
|
distributors to deny you these rights or to ask you to surrender these
|
||||||
|
rights. These restrictions translate to certain responsibilities for
|
||||||
|
you if you distribute copies of the library or if you modify it.
|
||||||
|
|
||||||
|
For example, if you distribute copies of the library, whether gratis
|
||||||
|
or for a fee, you must give the recipients all the rights that we gave
|
||||||
|
you. You must make sure that they, too, receive or can get the source
|
||||||
|
code. If you link other code with the library, you must provide
|
||||||
|
complete object files to the recipients, so that they can relink them
|
||||||
|
with the library after making changes to the library and recompiling
|
||||||
|
it. And you must show them these terms so they know their rights.
|
||||||
|
|
||||||
|
We protect your rights with a two-step method: (1) we copyright the
|
||||||
|
library, and (2) we offer you this license, which gives you legal
|
||||||
|
permission to copy, distribute and/or modify the library.
|
||||||
|
|
||||||
|
To protect each distributor, we want to make it very clear that
|
||||||
|
there is no warranty for the free library. Also, if the library is
|
||||||
|
modified by someone else and passed on, the recipients should know
|
||||||
|
that what they have is not the original version, so that the original
|
||||||
|
author's reputation will not be affected by problems that might be
|
||||||
|
introduced by others.
|
||||||
|
|
||||||
|
Finally, software patents pose a constant threat to the existence of
|
||||||
|
any free program. We wish to make sure that a company cannot
|
||||||
|
effectively restrict the users of a free program by obtaining a
|
||||||
|
restrictive license from a patent holder. Therefore, we insist that
|
||||||
|
any patent license obtained for a version of the library must be
|
||||||
|
consistent with the full freedom of use specified in this license.
|
||||||
|
|
||||||
|
Most GNU software, including some libraries, is covered by the
|
||||||
|
ordinary GNU General Public License. This license, the GNU Lesser
|
||||||
|
General Public License, applies to certain designated libraries, and
|
||||||
|
is quite different from the ordinary General Public License. We use
|
||||||
|
this license for certain libraries in order to permit linking those
|
||||||
|
libraries into non-free programs.
|
||||||
|
|
||||||
|
When a program is linked with a library, whether statically or using
|
||||||
|
a shared library, the combination of the two is legally speaking a
|
||||||
|
combined work, a derivative of the original library. The ordinary
|
||||||
|
General Public License therefore permits such linking only if the
|
||||||
|
entire combination fits its criteria of freedom. The Lesser General
|
||||||
|
Public License permits more lax criteria for linking other code with
|
||||||
|
the library.
|
||||||
|
|
||||||
|
We call this license the "Lesser" General Public License because it
|
||||||
|
does Less to protect the user's freedom than the ordinary General
|
||||||
|
Public License. It also provides other free software developers Less
|
||||||
|
of an advantage over competing non-free programs. These disadvantages
|
||||||
|
are the reason we use the ordinary General Public License for many
|
||||||
|
libraries. However, the Lesser license provides advantages in certain
|
||||||
|
special circumstances.
|
||||||
|
|
||||||
|
For example, on rare occasions, there may be a special need to
|
||||||
|
encourage the widest possible use of a certain library, so that it becomes
|
||||||
|
a de-facto standard. To achieve this, non-free programs must be
|
||||||
|
allowed to use the library. A more frequent case is that a free
|
||||||
|
library does the same job as widely used non-free libraries. In this
|
||||||
|
case, there is little to gain by limiting the free library to free
|
||||||
|
software only, so we use the Lesser General Public License.
|
||||||
|
|
||||||
|
In other cases, permission to use a particular library in non-free
|
||||||
|
programs enables a greater number of people to use a large body of
|
||||||
|
free software. For example, permission to use the GNU C Library in
|
||||||
|
non-free programs enables many more people to use the whole GNU
|
||||||
|
operating system, as well as its variant, the GNU/Linux operating
|
||||||
|
system.
|
||||||
|
|
||||||
|
Although the Lesser General Public License is Less protective of the
|
||||||
|
users' freedom, it does ensure that the user of a program that is
|
||||||
|
linked with the Library has the freedom and the wherewithal to run
|
||||||
|
that program using a modified version of the Library.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow. Pay close attention to the difference between a
|
||||||
|
"work based on the library" and a "work that uses the library". The
|
||||||
|
former contains code derived from the library, whereas the latter must
|
||||||
|
be combined with the library in order to run.
|
||||||
|
|
||||||
|
GNU LESSER GENERAL PUBLIC LICENSE
|
||||||
|
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||||
|
|
||||||
|
0. This License Agreement applies to any software library or other
|
||||||
|
program which contains a notice placed by the copyright holder or
|
||||||
|
other authorized party saying it may be distributed under the terms of
|
||||||
|
this Lesser General Public License (also called "this License").
|
||||||
|
Each licensee is addressed as "you".
|
||||||
|
|
||||||
|
A "library" means a collection of software functions and/or data
|
||||||
|
prepared so as to be conveniently linked with application programs
|
||||||
|
(which use some of those functions and data) to form executables.
|
||||||
|
|
||||||
|
The "Library", below, refers to any such software library or work
|
||||||
|
which has been distributed under these terms. A "work based on the
|
||||||
|
Library" means either the Library or any derivative work under
|
||||||
|
copyright law: that is to say, a work containing the Library or a
|
||||||
|
portion of it, either verbatim or with modifications and/or translated
|
||||||
|
straightforwardly into another language. (Hereinafter, translation is
|
||||||
|
included without limitation in the term "modification".)
|
||||||
|
|
||||||
|
"Source code" for a work means the preferred form of the work for
|
||||||
|
making modifications to it. For a library, complete source code means
|
||||||
|
all the source code for all modules it contains, plus any associated
|
||||||
|
interface definition files, plus the scripts used to control compilation
|
||||||
|
and installation of the library.
|
||||||
|
|
||||||
|
Activities other than copying, distribution and modification are not
|
||||||
|
covered by this License; they are outside its scope. The act of
|
||||||
|
running a program using the Library is not restricted, and output from
|
||||||
|
such a program is covered only if its contents constitute a work based
|
||||||
|
on the Library (independent of the use of the Library in a tool for
|
||||||
|
writing it). Whether that is true depends on what the Library does
|
||||||
|
and what the program that uses the Library does.
|
||||||
|
|
||||||
|
1. You may copy and distribute verbatim copies of the Library's
|
||||||
|
complete source code as you receive it, in any medium, provided that
|
||||||
|
you conspicuously and appropriately publish on each copy an
|
||||||
|
appropriate copyright notice and disclaimer of warranty; keep intact
|
||||||
|
all the notices that refer to this License and to the absence of any
|
||||||
|
warranty; and distribute a copy of this License along with the
|
||||||
|
Library.
|
||||||
|
|
||||||
|
You may charge a fee for the physical act of transferring a copy,
|
||||||
|
and you may at your option offer warranty protection in exchange for a
|
||||||
|
fee.
|
||||||
|
|
||||||
|
2. You may modify your copy or copies of the Library or any portion
|
||||||
|
of it, thus forming a work based on the Library, and copy and
|
||||||
|
distribute such modifications or work under the terms of Section 1
|
||||||
|
above, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) The modified work must itself be a software library.
|
||||||
|
|
||||||
|
b) You must cause the files modified to carry prominent notices
|
||||||
|
stating that you changed the files and the date of any change.
|
||||||
|
|
||||||
|
c) You must cause the whole of the work to be licensed at no
|
||||||
|
charge to all third parties under the terms of this License.
|
||||||
|
|
||||||
|
d) If a facility in the modified Library refers to a function or a
|
||||||
|
table of data to be supplied by an application program that uses
|
||||||
|
the facility, other than as an argument passed when the facility
|
||||||
|
is invoked, then you must make a good faith effort to ensure that,
|
||||||
|
in the event an application does not supply such function or
|
||||||
|
table, the facility still operates, and performs whatever part of
|
||||||
|
its purpose remains meaningful.
|
||||||
|
|
||||||
|
(For example, a function in a library to compute square roots has
|
||||||
|
a purpose that is entirely well-defined independent of the
|
||||||
|
application. Therefore, Subsection 2d requires that any
|
||||||
|
application-supplied function or table used by this function must
|
||||||
|
be optional: if the application does not supply it, the square
|
||||||
|
root function must still compute square roots.)
|
||||||
|
|
||||||
|
These requirements apply to the modified work as a whole. If
|
||||||
|
identifiable sections of that work are not derived from the Library,
|
||||||
|
and can be reasonably considered independent and separate works in
|
||||||
|
themselves, then this License, and its terms, do not apply to those
|
||||||
|
sections when you distribute them as separate works. But when you
|
||||||
|
distribute the same sections as part of a whole which is a work based
|
||||||
|
on the Library, the distribution of the whole must be on the terms of
|
||||||
|
this License, whose permissions for other licensees extend to the
|
||||||
|
entire whole, and thus to each and every part regardless of who wrote
|
||||||
|
it.
|
||||||
|
|
||||||
|
Thus, it is not the intent of this section to claim rights or contest
|
||||||
|
your rights to work written entirely by you; rather, the intent is to
|
||||||
|
exercise the right to control the distribution of derivative or
|
||||||
|
collective works based on the Library.
|
||||||
|
|
||||||
|
In addition, mere aggregation of another work not based on the Library
|
||||||
|
with the Library (or with a work based on the Library) on a volume of
|
||||||
|
a storage or distribution medium does not bring the other work under
|
||||||
|
the scope of this License.
|
||||||
|
|
||||||
|
3. You may opt to apply the terms of the ordinary GNU General Public
|
||||||
|
License instead of this License to a given copy of the Library. To do
|
||||||
|
this, you must alter all the notices that refer to this License, so
|
||||||
|
that they refer to the ordinary GNU General Public License, version 2,
|
||||||
|
instead of to this License. (If a newer version than version 2 of the
|
||||||
|
ordinary GNU General Public License has appeared, then you can specify
|
||||||
|
that version instead if you wish.) Do not make any other change in
|
||||||
|
these notices.
|
||||||
|
|
||||||
|
Once this change is made in a given copy, it is irreversible for
|
||||||
|
that copy, so the ordinary GNU General Public License applies to all
|
||||||
|
subsequent copies and derivative works made from that copy.
|
||||||
|
|
||||||
|
This option is useful when you wish to copy part of the code of
|
||||||
|
the Library into a program that is not a library.
|
||||||
|
|
||||||
|
4. You may copy and distribute the Library (or a portion or
|
||||||
|
derivative of it, under Section 2) in object code or executable form
|
||||||
|
under the terms of Sections 1 and 2 above provided that you accompany
|
||||||
|
it with the complete corresponding machine-readable source code, which
|
||||||
|
must be distributed under the terms of Sections 1 and 2 above on a
|
||||||
|
medium customarily used for software interchange.
|
||||||
|
|
||||||
|
If distribution of object code is made by offering access to copy
|
||||||
|
from a designated place, then offering equivalent access to copy the
|
||||||
|
source code from the same place satisfies the requirement to
|
||||||
|
distribute the source code, even though third parties are not
|
||||||
|
compelled to copy the source along with the object code.
|
||||||
|
|
||||||
|
5. A program that contains no derivative of any portion of the
|
||||||
|
Library, but is designed to work with the Library by being compiled or
|
||||||
|
linked with it, is called a "work that uses the Library". Such a
|
||||||
|
work, in isolation, is not a derivative work of the Library, and
|
||||||
|
therefore falls outside the scope of this License.
|
||||||
|
|
||||||
|
However, linking a "work that uses the Library" with the Library
|
||||||
|
creates an executable that is a derivative of the Library (because it
|
||||||
|
contains portions of the Library), rather than a "work that uses the
|
||||||
|
library". The executable is therefore covered by this License.
|
||||||
|
Section 6 states terms for distribution of such executables.
|
||||||
|
|
||||||
|
When a "work that uses the Library" uses material from a header file
|
||||||
|
that is part of the Library, the object code for the work may be a
|
||||||
|
derivative work of the Library even though the source code is not.
|
||||||
|
Whether this is true is especially significant if the work can be
|
||||||
|
linked without the Library, or if the work is itself a library. The
|
||||||
|
threshold for this to be true is not precisely defined by law.
|
||||||
|
|
||||||
|
If such an object file uses only numerical parameters, data
|
||||||
|
structure layouts and accessors, and small macros and small inline
|
||||||
|
functions (ten lines or less in length), then the use of the object
|
||||||
|
file is unrestricted, regardless of whether it is legally a derivative
|
||||||
|
work. (Executables containing this object code plus portions of the
|
||||||
|
Library will still fall under Section 6.)
|
||||||
|
|
||||||
|
Otherwise, if the work is a derivative of the Library, you may
|
||||||
|
distribute the object code for the work under the terms of Section 6.
|
||||||
|
Any executables containing that work also fall under Section 6,
|
||||||
|
whether or not they are linked directly with the Library itself.
|
||||||
|
|
||||||
|
6. As an exception to the Sections above, you may also combine or
|
||||||
|
link a "work that uses the Library" with the Library to produce a
|
||||||
|
work containing portions of the Library, and distribute that work
|
||||||
|
under terms of your choice, provided that the terms permit
|
||||||
|
modification of the work for the customer's own use and reverse
|
||||||
|
engineering for debugging such modifications.
|
||||||
|
|
||||||
|
You must give prominent notice with each copy of the work that the
|
||||||
|
Library is used in it and that the Library and its use are covered by
|
||||||
|
this License. You must supply a copy of this License. If the work
|
||||||
|
during execution displays copyright notices, you must include the
|
||||||
|
copyright notice for the Library among them, as well as a reference
|
||||||
|
directing the user to the copy of this License. Also, you must do one
|
||||||
|
of these things:
|
||||||
|
|
||||||
|
a) Accompany the work with the complete corresponding
|
||||||
|
machine-readable source code for the Library including whatever
|
||||||
|
changes were used in the work (which must be distributed under
|
||||||
|
Sections 1 and 2 above); and, if the work is an executable linked
|
||||||
|
with the Library, with the complete machine-readable "work that
|
||||||
|
uses the Library", as object code and/or source code, so that the
|
||||||
|
user can modify the Library and then relink to produce a modified
|
||||||
|
executable containing the modified Library. (It is understood
|
||||||
|
that the user who changes the contents of definitions files in the
|
||||||
|
Library will not necessarily be able to recompile the application
|
||||||
|
to use the modified definitions.)
|
||||||
|
|
||||||
|
b) Use a suitable shared library mechanism for linking with the
|
||||||
|
Library. A suitable mechanism is one that (1) uses at run time a
|
||||||
|
copy of the library already present on the user's computer system,
|
||||||
|
rather than copying library functions into the executable, and (2)
|
||||||
|
will operate properly with a modified version of the library, if
|
||||||
|
the user installs one, as long as the modified version is
|
||||||
|
interface-compatible with the version that the work was made with.
|
||||||
|
|
||||||
|
c) Accompany the work with a written offer, valid for at
|
||||||
|
least three years, to give the same user the materials
|
||||||
|
specified in Subsection 6a, above, for a charge no more
|
||||||
|
than the cost of performing this distribution.
|
||||||
|
|
||||||
|
d) If distribution of the work is made by offering access to copy
|
||||||
|
from a designated place, offer equivalent access to copy the above
|
||||||
|
specified materials from the same place.
|
||||||
|
|
||||||
|
e) Verify that the user has already received a copy of these
|
||||||
|
materials or that you have already sent this user a copy.
|
||||||
|
|
||||||
|
For an executable, the required form of the "work that uses the
|
||||||
|
Library" must include any data and utility programs needed for
|
||||||
|
reproducing the executable from it. However, as a special exception,
|
||||||
|
the materials to be distributed need not include anything that is
|
||||||
|
normally distributed (in either source or binary form) with the major
|
||||||
|
components (compiler, kernel, and so on) of the operating system on
|
||||||
|
which the executable runs, unless that component itself accompanies
|
||||||
|
the executable.
|
||||||
|
|
||||||
|
It may happen that this requirement contradicts the license
|
||||||
|
restrictions of other proprietary libraries that do not normally
|
||||||
|
accompany the operating system. Such a contradiction means you cannot
|
||||||
|
use both them and the Library together in an executable that you
|
||||||
|
distribute.
|
||||||
|
|
||||||
|
7. You may place library facilities that are a work based on the
|
||||||
|
Library side-by-side in a single library together with other library
|
||||||
|
facilities not covered by this License, and distribute such a combined
|
||||||
|
library, provided that the separate distribution of the work based on
|
||||||
|
the Library and of the other library facilities is otherwise
|
||||||
|
permitted, and provided that you do these two things:
|
||||||
|
|
||||||
|
a) Accompany the combined library with a copy of the same work
|
||||||
|
based on the Library, uncombined with any other library
|
||||||
|
facilities. This must be distributed under the terms of the
|
||||||
|
Sections above.
|
||||||
|
|
||||||
|
b) Give prominent notice with the combined library of the fact
|
||||||
|
that part of it is a work based on the Library, and explaining
|
||||||
|
where to find the accompanying uncombined form of the same work.
|
||||||
|
|
||||||
|
8. You may not copy, modify, sublicense, link with, or distribute
|
||||||
|
the Library except as expressly provided under this License. Any
|
||||||
|
attempt otherwise to copy, modify, sublicense, link with, or
|
||||||
|
distribute the Library is void, and will automatically terminate your
|
||||||
|
rights under this License. However, parties who have received copies,
|
||||||
|
or rights, from you under this License will not have their licenses
|
||||||
|
terminated so long as such parties remain in full compliance.
|
||||||
|
|
||||||
|
9. You are not required to accept this License, since you have not
|
||||||
|
signed it. However, nothing else grants you permission to modify or
|
||||||
|
distribute the Library or its derivative works. These actions are
|
||||||
|
prohibited by law if you do not accept this License. Therefore, by
|
||||||
|
modifying or distributing the Library (or any work based on the
|
||||||
|
Library), you indicate your acceptance of this License to do so, and
|
||||||
|
all its terms and conditions for copying, distributing or modifying
|
||||||
|
the Library or works based on it.
|
||||||
|
|
||||||
|
10. Each time you redistribute the Library (or any work based on the
|
||||||
|
Library), the recipient automatically receives a license from the
|
||||||
|
original licensor to copy, distribute, link with or modify the Library
|
||||||
|
subject to these terms and conditions. You may not impose any further
|
||||||
|
restrictions on the recipients' exercise of the rights granted herein.
|
||||||
|
You are not responsible for enforcing compliance by third parties with
|
||||||
|
this License.
|
||||||
|
|
||||||
|
11. If, as a consequence of a court judgment or allegation of patent
|
||||||
|
infringement or for any other reason (not limited to patent issues),
|
||||||
|
conditions are imposed on you (whether by court order, agreement or
|
||||||
|
otherwise) that contradict the conditions of this License, they do not
|
||||||
|
excuse you from the conditions of this License. If you cannot
|
||||||
|
distribute so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you
|
||||||
|
may not distribute the Library at all. For example, if a patent
|
||||||
|
license would not permit royalty-free redistribution of the Library by
|
||||||
|
all those who receive copies directly or indirectly through you, then
|
||||||
|
the only way you could satisfy both it and this License would be to
|
||||||
|
refrain entirely from distribution of the Library.
|
||||||
|
|
||||||
|
If any portion of this section is held invalid or unenforceable under any
|
||||||
|
particular circumstance, the balance of the section is intended to apply,
|
||||||
|
and the section as a whole is intended to apply in other circumstances.
|
||||||
|
|
||||||
|
It is not the purpose of this section to induce you to infringe any
|
||||||
|
patents or other property right claims or to contest validity of any
|
||||||
|
such claims; this section has the sole purpose of protecting the
|
||||||
|
integrity of the free software distribution system which is
|
||||||
|
implemented by public license practices. Many people have made
|
||||||
|
generous contributions to the wide range of software distributed
|
||||||
|
through that system in reliance on consistent application of that
|
||||||
|
system; it is up to the author/donor to decide if he or she is willing
|
||||||
|
to distribute software through any other system and a licensee cannot
|
||||||
|
impose that choice.
|
||||||
|
|
||||||
|
This section is intended to make thoroughly clear what is believed to
|
||||||
|
be a consequence of the rest of this License.
|
||||||
|
|
||||||
|
12. If the distribution and/or use of the Library is restricted in
|
||||||
|
certain countries either by patents or by copyrighted interfaces, the
|
||||||
|
original copyright holder who places the Library under this License may add
|
||||||
|
an explicit geographical distribution limitation excluding those countries,
|
||||||
|
so that distribution is permitted only in or among countries not thus
|
||||||
|
excluded. In such case, this License incorporates the limitation as if
|
||||||
|
written in the body of this License.
|
||||||
|
|
||||||
|
13. The Free Software Foundation may publish revised and/or new
|
||||||
|
versions of the Lesser General Public License from time to time.
|
||||||
|
Such new versions will be similar in spirit to the present version,
|
||||||
|
but may differ in detail to address new problems or concerns.
|
||||||
|
|
||||||
|
Each version is given a distinguishing version number. If the Library
|
||||||
|
specifies a version number of this License which applies to it and
|
||||||
|
"any later version", you have the option of following the terms and
|
||||||
|
conditions either of that version or of any later version published by
|
||||||
|
the Free Software Foundation. If the Library does not specify a
|
||||||
|
license version number, you may choose any version ever published by
|
||||||
|
the Free Software Foundation.
|
||||||
|
|
||||||
|
14. If you wish to incorporate parts of the Library into other free
|
||||||
|
programs whose distribution conditions are incompatible with these,
|
||||||
|
write to the author to ask for permission. For software which is
|
||||||
|
copyrighted by the Free Software Foundation, write to the Free
|
||||||
|
Software Foundation; we sometimes make exceptions for this. Our
|
||||||
|
decision will be guided by the two goals of preserving the free status
|
||||||
|
of all derivatives of our free software and of promoting the sharing
|
||||||
|
and reuse of software generally.
|
||||||
|
|
||||||
|
NO WARRANTY
|
||||||
|
|
||||||
|
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
||||||
|
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
||||||
|
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
||||||
|
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
|
||||||
|
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
||||||
|
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
||||||
|
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
||||||
|
|
||||||
|
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
||||||
|
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
||||||
|
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
|
||||||
|
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
|
||||||
|
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
||||||
|
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
|
||||||
|
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
||||||
|
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
||||||
|
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
||||||
|
DAMAGES.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
How to Apply These Terms to Your New Libraries
|
||||||
|
|
||||||
|
If you develop a new library, and you want it to be of the greatest
|
||||||
|
possible use to the public, we recommend making it free software that
|
||||||
|
everyone can redistribute and change. You can do so by permitting
|
||||||
|
redistribution under these terms (or, alternatively, under the terms of the
|
||||||
|
ordinary General Public License).
|
||||||
|
|
||||||
|
To apply these terms, attach the following notices to the library. It is
|
||||||
|
safest to attach them to the start of each source file to most effectively
|
||||||
|
convey the exclusion of warranty; and each file should have at least the
|
||||||
|
"copyright" line and a pointer to where the full notice is found.
|
||||||
|
|
||||||
|
<one line to give the library's name and a brief idea of what it does.>
|
||||||
|
Copyright (C) <year> <name of author>
|
||||||
|
|
||||||
|
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 library 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or your
|
||||||
|
school, if any, to sign a "copyright disclaimer" for the library, if
|
||||||
|
necessary. Here is a sample; alter the names:
|
||||||
|
|
||||||
|
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
||||||
|
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
|
||||||
|
|
||||||
|
<signature of Ty Coon>, 1 April 1990
|
||||||
|
Ty Coon, President of Vice
|
||||||
|
|
||||||
|
That's all there is to it!
|
231
plugins/ewc/ewc.c
Normal file
231
plugins/ewc/ewc.c
Normal file
@ -0,0 +1,231 @@
|
|||||||
|
/*
|
||||||
|
EasyWinampControl - A Winamp "What's playing" plugin for HexChat
|
||||||
|
Copyright (C) Yann HAMON & contributors
|
||||||
|
|
||||||
|
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 library 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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
#include "hexchat-plugin.h"
|
||||||
|
|
||||||
|
static hexchat_plugin *ph; /* plugin handle */
|
||||||
|
static int enable = 1;
|
||||||
|
|
||||||
|
// For example, circularstrstr("winamp", "pwi", 3) would return 5 (the index of p)
|
||||||
|
int circularstrstr(char* a, char* b, int nb)
|
||||||
|
{
|
||||||
|
int equal = 1;
|
||||||
|
int length;
|
||||||
|
int pos=-1;
|
||||||
|
int i, j;
|
||||||
|
|
||||||
|
length = strlen(a);
|
||||||
|
|
||||||
|
for (i=0; i<length && pos == -1; ++i) {
|
||||||
|
equal = 1;
|
||||||
|
for (j=0; j<nb;j++) {
|
||||||
|
if (a[(i+j)%length] != b[j])
|
||||||
|
equal = 0;
|
||||||
|
}
|
||||||
|
if (equal == 1)
|
||||||
|
pos = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GetCurrentSongsName(HWND hwndWinamp, char* title, int titlesize)
|
||||||
|
{
|
||||||
|
int pos;
|
||||||
|
char *title2;
|
||||||
|
int i, j=0;
|
||||||
|
int length;
|
||||||
|
char *p;
|
||||||
|
|
||||||
|
GetWindowText(hwndWinamp, title, titlesize);
|
||||||
|
length = strlen(title);
|
||||||
|
|
||||||
|
if ((pos = circularstrstr(title, "- Winamp ***", 12)) != -1) {
|
||||||
|
// The option "scroll song title in taskbar" is on
|
||||||
|
title2 = (char*) malloc (titlesize*sizeof(char));
|
||||||
|
|
||||||
|
for (i=(pos+12)%length; i!=pos; i=(i+1)%length)
|
||||||
|
title2[j++] = title[i];
|
||||||
|
|
||||||
|
title2[j] = '\0';
|
||||||
|
|
||||||
|
p = title2;
|
||||||
|
while (p<title2+titlesize && *p != '.')
|
||||||
|
p++;
|
||||||
|
p+=2; // Delete the . and the following white space
|
||||||
|
|
||||||
|
strcpy(title, p);
|
||||||
|
free(title2);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
p = title;
|
||||||
|
while (p<title+titlesize && *p != '.')
|
||||||
|
p++;
|
||||||
|
p+=2; // Delete the . and the following white space
|
||||||
|
if (p<title+titlesize)
|
||||||
|
strncpy(title, p, titlesize-(p-title));
|
||||||
|
|
||||||
|
// Delete the trailing "- winamp"
|
||||||
|
p = title + titlesize - 1;
|
||||||
|
while (p>title && *p != '-') p--;
|
||||||
|
*p = '\0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Controlling winamp
|
||||||
|
static int wcmd_cb(char *word[], char *word_eol[], void *userdata)
|
||||||
|
{
|
||||||
|
// Everything's here : http://winamp.com/nsdn/winamp2x/dev/sdk/api.php
|
||||||
|
// The previous url seems dead, see http://forums.winamp.com/showthread.php?threadid=180297
|
||||||
|
HWND hwndWinamp = NULL;
|
||||||
|
|
||||||
|
if ((hwndWinamp = FindWindow("Winamp v1.x",NULL)) == NULL) {
|
||||||
|
hexchat_print(ph, "Winamp's window not found - Is winamp really running?\n");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (strcmp(word[1], "") == 0)
|
||||||
|
hexchat_print(ph, "Usage: wcmd [command]\n");
|
||||||
|
else if (strcmp(word[2], "next") == 0) {
|
||||||
|
hexchat_print(ph, "Loading next song...\n");
|
||||||
|
SendMessage (hwndWinamp, WM_COMMAND, 40048, 0);
|
||||||
|
}
|
||||||
|
else if (strcmp(word[2], "prev") == 0) {
|
||||||
|
hexchat_print(ph, "Loading previous song...\n");
|
||||||
|
SendMessage (hwndWinamp, WM_COMMAND, 40044, 0);
|
||||||
|
}
|
||||||
|
else if (strcmp(word[2], "play") == 0) {
|
||||||
|
hexchat_print(ph, "Playin'...\n");
|
||||||
|
SendMessage (hwndWinamp, WM_COMMAND, 40045, 0);
|
||||||
|
}
|
||||||
|
else if (strcmp(word[2], "stop") == 0) {
|
||||||
|
hexchat_print(ph, "Winamp stopped!...\n");
|
||||||
|
SendMessage (hwndWinamp, WM_COMMAND, 40047, 0);
|
||||||
|
}
|
||||||
|
else if (strcmp(word[2], "pause") == 0) {
|
||||||
|
SendMessage (hwndWinamp, WM_COMMAND, 40046, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return HEXCHAT_EAT_ALL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Display current song
|
||||||
|
static int wp_cb(char *word[], char *word_eol[], void *userdata)
|
||||||
|
{
|
||||||
|
HWND hwndWinamp = NULL;
|
||||||
|
int bitrate, length, elapsed, minutes, seconds, eminutes, eseconds, samplerate, nbchannels;
|
||||||
|
char elapsedtime[7];
|
||||||
|
char totaltime[7];
|
||||||
|
char this_title[1024];
|
||||||
|
|
||||||
|
if ((hwndWinamp = FindWindow("Winamp v1.x",NULL)) == NULL)
|
||||||
|
hexchat_print(ph, "Winamp's window not found - Is winamp really running?\n");
|
||||||
|
else {
|
||||||
|
//Winamp's running
|
||||||
|
// Seems buggy when winamp2's agent is running, and winamp not (or winamp3) -> crashes HexChat.
|
||||||
|
SendMessage(hwndWinamp, WM_USER, (WPARAM)0, (LPARAM)125);
|
||||||
|
|
||||||
|
if ((samplerate = SendMessage(hwndWinamp, WM_USER, (WPARAM)0, (LPARAM)126)) == 0) {
|
||||||
|
hexchat_print(ph, "Could not get current song's samplerate... !?\n");
|
||||||
|
return HEXCHAT_EAT_ALL;
|
||||||
|
}
|
||||||
|
if ((bitrate = SendMessage(hwndWinamp, WM_USER, (WPARAM)1, (LPARAM)126)) == 0) {
|
||||||
|
hexchat_print(ph, "Could not get current song's bitrate... !?\n");
|
||||||
|
return HEXCHAT_EAT_ALL;
|
||||||
|
}
|
||||||
|
if ((nbchannels = SendMessage(hwndWinamp, WM_USER, (WPARAM)2, (LPARAM)126)) == 0) {
|
||||||
|
hexchat_print(ph, "Could not get the number of channels... !?\n");
|
||||||
|
return HEXCHAT_EAT_ALL;
|
||||||
|
}
|
||||||
|
if ((length = SendMessage(hwndWinamp, WM_USER, (WPARAM)1, (LPARAM)105)) == 0) {
|
||||||
|
// Could be buggy when streaming audio or video, returned length is unexpected;
|
||||||
|
// How to detect is Winamp is streaming, and display ??:?? in that case?
|
||||||
|
hexchat_print(ph, "Could not get current song's length... !?\n");
|
||||||
|
return HEXCHAT_EAT_ALL;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
minutes = length/60;
|
||||||
|
seconds = length%60;
|
||||||
|
|
||||||
|
if (seconds>9)
|
||||||
|
wsprintf(totaltime, "%d:%d", minutes, seconds);
|
||||||
|
else
|
||||||
|
wsprintf(totaltime, "%d:0%d", minutes, seconds);
|
||||||
|
}
|
||||||
|
if ((elapsed = SendMessage(hwndWinamp, WM_USER, (WPARAM)0, (LPARAM)105)) == 0) {
|
||||||
|
hexchat_print(ph, "Could not get current song's elapsed time... !?\n");
|
||||||
|
return HEXCHAT_EAT_ALL;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
eminutes = (elapsed/1000)/60; /* kinda stupid sounding, but e is for elapsed */
|
||||||
|
eseconds = (elapsed/1000)%60;
|
||||||
|
|
||||||
|
if (eseconds>9)
|
||||||
|
wsprintf(elapsedtime, "%d:%d", eminutes, eseconds);
|
||||||
|
else
|
||||||
|
wsprintf(elapsedtime, "%d:0%d", eminutes, eseconds);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((bitrate = SendMessage(hwndWinamp, WM_USER, (WPARAM)1, (LPARAM)126)) == 0) {
|
||||||
|
hexchat_print(ph, "Could not get current song's bitrate... !?\n");
|
||||||
|
return HEXCHAT_EAT_ALL;
|
||||||
|
}
|
||||||
|
|
||||||
|
GetCurrentSongsName(hwndWinamp, this_title, 1024);
|
||||||
|
|
||||||
|
hexchat_commandf(ph, "dispcurrsong %d %d %d %s %s %s", samplerate, bitrate, nbchannels, elapsedtime, totaltime, this_title);
|
||||||
|
}
|
||||||
|
|
||||||
|
return HEXCHAT_EAT_ALL; /* eat this command so HexChat and other plugins can't process it */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int hexchat_plugin_init(hexchat_plugin *plugin_handle,
|
||||||
|
char **plugin_name,
|
||||||
|
char **plugin_desc,
|
||||||
|
char **plugin_version,
|
||||||
|
char *arg)
|
||||||
|
{
|
||||||
|
/* we need to save this for use with any hexchat_* functions */
|
||||||
|
ph = plugin_handle;
|
||||||
|
|
||||||
|
*plugin_name = "EasyWinampControl";
|
||||||
|
*plugin_desc = "Some commands to remotely control winamp";
|
||||||
|
*plugin_version = "1.2";
|
||||||
|
|
||||||
|
hexchat_hook_command(ph, "wp", HEXCHAT_PRI_NORM, wp_cb,
|
||||||
|
"Usage: wp", 0);
|
||||||
|
|
||||||
|
hexchat_hook_command(ph, "wcmd", HEXCHAT_PRI_NORM, wcmd_cb,
|
||||||
|
"Usage: wcmd [play|pause|stop|prev|next]", 0);
|
||||||
|
|
||||||
|
hexchat_print(ph, "EasyWinampControl plugin loaded\n");
|
||||||
|
|
||||||
|
return 1; /* return 1 for success */
|
||||||
|
}
|
||||||
|
|
||||||
|
int hexchat_plugin_deinit(void)
|
||||||
|
{
|
||||||
|
hexchat_print(ph, "EasyWinampControl plugin unloaded\n");
|
||||||
|
return 1;
|
||||||
|
}
|
18
plugins/ewc/makefile.mak
Normal file
18
plugins/ewc/makefile.mak
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
include "..\..\src\makeinc.mak"
|
||||||
|
|
||||||
|
all: ewc.obj ewc.def
|
||||||
|
link $(LDFLAGS) $(LIBS) /dll /out:xcewc.dll /def:ewc.def ewc.obj
|
||||||
|
|
||||||
|
ewc.def:
|
||||||
|
echo EXPORTS > ewc.def
|
||||||
|
echo hexchat_plugin_init >> ewc.def
|
||||||
|
echo hexchat_plugin_deinit >> ewc.def
|
||||||
|
|
||||||
|
ewc.obj: ewc.c makefile.mak
|
||||||
|
cl $(CFLAGS) ewc.c
|
||||||
|
|
||||||
|
clean:
|
||||||
|
del *.obj
|
||||||
|
del *.dll
|
||||||
|
del *.exp
|
||||||
|
del *.lib
|
@ -1,4 +1,4 @@
|
|||||||
EXTRA_DIST = INSTALL LICENSE
|
EXTRA_DIST = INSTALL LICENSE README
|
||||||
|
|
||||||
libdir = $(hexchatlibdir)
|
libdir = $(hexchatlibdir)
|
||||||
|
|
||||||
|
@ -22,11 +22,6 @@
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef __APPLE__
|
|
||||||
#define __AVAILABILITYMACROS__
|
|
||||||
#define DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <openssl/blowfish.h>
|
#include <openssl/blowfish.h>
|
||||||
|
69
plugins/gtkpref/gtkpref.c
Normal file
69
plugins/gtkpref/gtkpref.c
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
/* HexChat
|
||||||
|
* Copyright (c) 2011-2012 Berke Viktor.
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in
|
||||||
|
* all copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
* THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
|
#include "hexchat-plugin.h"
|
||||||
|
|
||||||
|
static hexchat_plugin *ph; /* plugin handle */
|
||||||
|
|
||||||
|
static void
|
||||||
|
launch_tool ()
|
||||||
|
{
|
||||||
|
STARTUPINFO si;
|
||||||
|
PROCESS_INFORMATION pi;
|
||||||
|
|
||||||
|
ZeroMemory (&si, sizeof (si));
|
||||||
|
si.cb = sizeof (si);
|
||||||
|
ZeroMemory (&pi, sizeof (pi));
|
||||||
|
|
||||||
|
if (!CreateProcess ( NULL, "gtk2-prefs.exe", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
|
||||||
|
{
|
||||||
|
hexchat_print (ph, "Error launching the GTK+ Preference Tool! Maybe the executable is missing?");
|
||||||
|
}
|
||||||
|
|
||||||
|
CloseHandle (pi.hProcess);
|
||||||
|
CloseHandle (pi.hThread);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
hexchat_plugin_init (hexchat_plugin *plugin_handle, char **plugin_name, char **plugin_desc, char **plugin_version, char *arg)
|
||||||
|
{
|
||||||
|
ph = plugin_handle;
|
||||||
|
|
||||||
|
*plugin_name = "GTKPref";
|
||||||
|
*plugin_desc = "GTK+ Preference Tool Launcher";
|
||||||
|
*plugin_version = "1.0";
|
||||||
|
|
||||||
|
hexchat_hook_command (ph, "GTKPREF", HEXCHAT_PRI_NORM, launch_tool, 0, 0);
|
||||||
|
hexchat_command (ph, "MENU -ietc\\gtkpref.png ADD \"Settings/GTK+ Preferences\" \"GTKPREF\"");
|
||||||
|
|
||||||
|
return 1; /* return 1 for success */
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
hexchat_plugin_deinit (void)
|
||||||
|
{
|
||||||
|
hexchat_command (ph, "MENU DEL \"Settings/GTK+ Preferences\"");
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
18
plugins/gtkpref/makefile.mak
Normal file
18
plugins/gtkpref/makefile.mak
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
include "..\..\src\makeinc.mak"
|
||||||
|
|
||||||
|
all: gtkpref.obj gtkpref.def
|
||||||
|
link $(LDFLAGS) $(LIBS) /dll /out:xcgtkpref.dll /def:gtkpref.def gtkpref.obj
|
||||||
|
|
||||||
|
gtkpref.def:
|
||||||
|
echo EXPORTS > gtkpref.def
|
||||||
|
echo hexchat_plugin_init >> gtkpref.def
|
||||||
|
echo hexchat_plugin_deinit >> gtkpref.def
|
||||||
|
|
||||||
|
gtkpref.obj: gtkpref.c makefile.mak
|
||||||
|
cl $(CFLAGS) $(GLIB) /I.. gtkpref.c
|
||||||
|
|
||||||
|
clean:
|
||||||
|
del *.obj
|
||||||
|
del *.dll
|
||||||
|
del *.exp
|
||||||
|
del *.lib
|
25
plugins/mailcheck/Makefile.am
Normal file
25
plugins/mailcheck/Makefile.am
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
## Process with automake to produce Makefile.in
|
||||||
|
|
||||||
|
# To create a standalone tarball of your plugin run the plugin_dist
|
||||||
|
# target. Note: you must configure the main source tree with
|
||||||
|
# --enable-maintainer-mode
|
||||||
|
|
||||||
|
# These two must be defined.
|
||||||
|
PLUGIN=mailcheck
|
||||||
|
PLUGIN_VERSION=0.1
|
||||||
|
|
||||||
|
# This file must be in the form PLUGIN-config.h.in, it can be empty but
|
||||||
|
# must exist
|
||||||
|
EXTRA_DIST = mailcheck-config.h.in
|
||||||
|
|
||||||
|
# Remember to include this line in your Makefile.am
|
||||||
|
include @top_srcdir@/plugins/Make.plugin
|
||||||
|
|
||||||
|
libdir = $(hexchatdir)/plugins
|
||||||
|
|
||||||
|
lib_LTLIBRARIES = mailcheck.la
|
||||||
|
mailcheck_la_SOURCES = mailcheck.c
|
||||||
|
mailcheck_la_LDFLAGS = -avoid-version -module
|
||||||
|
INCLUDES = $(COMMON_CFLAGS) $(PLUGIN_INCLUDES)
|
||||||
|
|
||||||
|
DISTCLEANFILES = pg_dir/*
|
94
plugins/mailcheck/mailcheck.c
Normal file
94
plugins/mailcheck/mailcheck.c
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
/* HexChat 2.0 plugin: Mail checker */
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include "hexchat-plugin.h"
|
||||||
|
|
||||||
|
|
||||||
|
static hexchat_plugin *ph; /* plugin handle */
|
||||||
|
|
||||||
|
static int
|
||||||
|
mail_items(char *file)
|
||||||
|
{
|
||||||
|
FILE *fp;
|
||||||
|
int items;
|
||||||
|
char buf[512];
|
||||||
|
|
||||||
|
fp = fopen(file, "r");
|
||||||
|
if(!fp)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
items = 0;
|
||||||
|
while(fgets(buf, sizeof buf, fp))
|
||||||
|
{
|
||||||
|
if(!strncmp(buf, "From ", 5))
|
||||||
|
items++;
|
||||||
|
}
|
||||||
|
fclose(fp);
|
||||||
|
|
||||||
|
return items;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
xchat_mail_check (void)
|
||||||
|
{
|
||||||
|
static int last_size = -1;
|
||||||
|
int size;
|
||||||
|
struct stat st;
|
||||||
|
char buf[512];
|
||||||
|
char *maildir;
|
||||||
|
|
||||||
|
maildir = getenv("MAIL");
|
||||||
|
if(!maildir)
|
||||||
|
{
|
||||||
|
snprintf (buf, sizeof(buf), "/var/spool/mail/%s", getenv("USER"));
|
||||||
|
maildir = buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(stat(maildir, &st) < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
size = st.st_size;
|
||||||
|
|
||||||
|
if(last_size == -1)
|
||||||
|
{
|
||||||
|
last_size = size;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(size > last_size)
|
||||||
|
{
|
||||||
|
hexchat_printf(ph,
|
||||||
|
"-\0033-\0039-\017\tYou have new mail (%d messages, %d bytes total).",
|
||||||
|
mail_items(maildir), size);
|
||||||
|
}
|
||||||
|
|
||||||
|
last_size = size;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int timeout_cb(void *userdata)
|
||||||
|
{
|
||||||
|
xchat_mail_check();
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int hexchat_plugin_init(hexchat_plugin *plugin_handle,
|
||||||
|
char **plugin_name, char **plugin_desc, char **plugin_version,
|
||||||
|
char *arg)
|
||||||
|
{
|
||||||
|
ph = plugin_handle;
|
||||||
|
|
||||||
|
*plugin_name = "MailCheck";
|
||||||
|
*plugin_desc = "Checks your mailbox every 30 seconds";
|
||||||
|
*plugin_version = "0.1";
|
||||||
|
|
||||||
|
hexchat_hook_timer(ph, 30000, timeout_cb, 0);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
@ -244,7 +244,6 @@ struct tagInfo readID3V2(char *file){
|
|||||||
for (i=0;i<10;i++){
|
for (i=0;i<10;i++){
|
||||||
c=fgetc(f);
|
c=fgetc(f);
|
||||||
if (c==EOF){
|
if (c==EOF){
|
||||||
fclose(f);
|
|
||||||
//putlog("found eof while reading id3v2");
|
//putlog("found eof while reading id3v2");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -77,7 +77,7 @@ struct tagInfo getOggHeader(char *file){
|
|||||||
info.bitrate=nomBr;
|
info.bitrate=nomBr;
|
||||||
if (((maxBr==nomBr)&&(nomBr=minBr))||((minBr==0)&&(maxBr==0))||((minBr=-1)&&(maxBr=-1)) )info.cbr=1;else info.cbr=0;
|
if (((maxBr==nomBr)&&(nomBr=minBr))||((minBr==0)&&(maxBr==0))||((minBr=-1)&&(maxBr=-1)) )info.cbr=1;else info.cbr=0;
|
||||||
printf("bitrates: %i|%i|%i\n",maxBr,nomBr,minBr);
|
printf("bitrates: %i|%i|%i\n",maxBr,nomBr,minBr);
|
||||||
printf("freq: %u\n",info.freq);
|
printf("freq: %i\n",info.freq);
|
||||||
pos=h3pos+7;
|
pos=h3pos+7;
|
||||||
pos+=getOggInt(header,pos,4)+4;
|
pos+=getOggInt(header,pos,4)+4;
|
||||||
count=getOggInt(header,pos,4);
|
count=getOggInt(header,pos,4);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
EXTRA_DIST=generate_header lib/HexChat.pm lib/Xchat.pm lib/HexChat/Embed.pm lib/HexChat/List/Network.pm \
|
EXTRA_DIST=alt_completion.pl generate_header lib/Xchat.pm lib/Xchat/Embed.pm lib/Xchat/List/Network.pm \
|
||||||
lib/HexChat/List/Network/Entry.pm lib/HexChat/List/Network/AutoJoin.pm lib/IRC.pm
|
lib/Xchat/List/Network/Entry.pm lib/Xchat/List/Network/AutoJoin.pm lib/IRC.pm
|
||||||
|
|
||||||
libdir = $(hexchatlibdir)
|
libdir = $(hexchatlibdir)
|
||||||
|
|
||||||
@ -8,11 +8,11 @@ lib_LTLIBRARIES = perl.la
|
|||||||
perl_la_SOURCES = perl.c
|
perl_la_SOURCES = perl.c
|
||||||
perl_la_LDFLAGS = -avoid-version -module
|
perl_la_LDFLAGS = -avoid-version -module
|
||||||
perl_la_LIBADD = $(PERL_LDFLAGS)
|
perl_la_LIBADD = $(PERL_LDFLAGS)
|
||||||
BUILT_SOURCES = hexchat.pm.h irc.pm.h
|
BUILT_SOURCES = xchat.pm.h irc.pm.h
|
||||||
#CFLAGS = @CFLAGS@ -Wno-unused
|
#CFLAGS = @CFLAGS@ -Wno-unused
|
||||||
AM_CPPFLAGS = $(PERL_CFLAGS) $(COMMON_CFLAGS) -I$(srcdir)/../../src/common
|
AM_CPPFLAGS = $(PERL_CFLAGS) $(COMMON_CFLAGS) -I$(srcdir)/../../src/common
|
||||||
CLEANFILES = hexchat.pm.h irc.pm.h
|
CLEANFILES = xchat.pm.h irc.pm.h
|
||||||
hexchat.pm.h irc.pm.h: lib/HexChat.pm lib/Xchat.pm lib/HexChat/Embed.pm \
|
xchat.pm.h irc.pm.h: lib/Xchat.pm lib/Xchat/Embed.pm \
|
||||||
lib/HexChat/List/Network.pm lib/HexChat/List/Network/Entry.pm \
|
lib/Xchat/List/Network.pm lib/Xchat/List/Network/Entry.pm \
|
||||||
lib/HexChat/List/Network/AutoJoin.pm lib/IRC.pm
|
lib/Xchat/List/Network/AutoJoin.pm lib/IRC.pm
|
||||||
perl generate_header
|
perl generate_header
|
||||||
|
511
plugins/perl/alt_completion.pl
Normal file
511
plugins/perl/alt_completion.pl
Normal file
@ -0,0 +1,511 @@
|
|||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Xchat ();
|
||||||
|
use File::Spec ();
|
||||||
|
use File::Basename qw(fileparse);
|
||||||
|
|
||||||
|
# if the last time you addressed someone was greater than this many minutes
|
||||||
|
# ago, ignore it
|
||||||
|
# this avoids having people you have talked to a long time ago coming up too
|
||||||
|
# early in the completion list
|
||||||
|
# Setting this to 0 will disable the check which is effectively the same as
|
||||||
|
# setting it to infinity
|
||||||
|
my $last_use_threshold = 10; # 10 minutes
|
||||||
|
|
||||||
|
# added to the front of a completion the same way as a suffix, only if
|
||||||
|
# the word is at the beginning of the line
|
||||||
|
my $prefix = '';
|
||||||
|
|
||||||
|
# ignore leading non-alphanumeric characters: -[\]^_`{|}
|
||||||
|
# Assuming you have the following nicks in a channel:
|
||||||
|
# [SomeNick] _SomeNick_ `SomeNick SomeNick SomeOtherNick
|
||||||
|
# when $ignore_leading_non_alnum is set to 0
|
||||||
|
# s<tab> will cycle through SomeNick and SomeOtherNick
|
||||||
|
# when $ignore_leading_non_alnum is set to 1
|
||||||
|
# s<tab> will cycle through [SomeNick] _SomeNick_ `SomeNick SomeNick
|
||||||
|
# SomeOtherNick
|
||||||
|
my $ignore_leading_non_alnum = 0;
|
||||||
|
|
||||||
|
# enable path completion
|
||||||
|
my $path_completion = 1;
|
||||||
|
my $base_path = '';
|
||||||
|
|
||||||
|
# ignore the completion_amount setting and always cycle through nicks with tab
|
||||||
|
my $always_cycle = 0;
|
||||||
|
|
||||||
|
Xchat::register(
|
||||||
|
"Tab Completion", "1.0500", "Alternative tab completion behavior"
|
||||||
|
);
|
||||||
|
Xchat::hook_print( "Key Press", \&complete );
|
||||||
|
Xchat::hook_print( "Close Context", \&close_context );
|
||||||
|
Xchat::hook_print( "Focus Tab", \&focus_tab );
|
||||||
|
Xchat::hook_print( "Part", \&clean_selected );
|
||||||
|
Xchat::hook_print( "Part with Reason", \&clean_selected );
|
||||||
|
Xchat::hook_command( "", \&track_selected );
|
||||||
|
|
||||||
|
sub SHIFT() { 1 }
|
||||||
|
sub CTRL() { 4 }
|
||||||
|
sub ALT() { 8 }
|
||||||
|
|
||||||
|
sub TAB() { 0xFF09 }
|
||||||
|
sub LEFT_TAB() { 0xFE20 }
|
||||||
|
|
||||||
|
my %completions;
|
||||||
|
my %last_visit;
|
||||||
|
my %selected;
|
||||||
|
my %escape_map = (
|
||||||
|
'[' => qr![\[{]!,
|
||||||
|
'{' => qr![\[{]!,
|
||||||
|
'}' => qr![\]}]!,
|
||||||
|
']' => qr![\]}]!,
|
||||||
|
'\\' => qr![\\\|]!,
|
||||||
|
'|' => qr![\\\|]!,
|
||||||
|
'.' => qr!\.!,
|
||||||
|
'^' => qr!\^!,
|
||||||
|
'$' => qr!\$!,
|
||||||
|
'*' => qr!\*!,
|
||||||
|
'+' => qr!\+!,
|
||||||
|
'?' => qr!\?!,
|
||||||
|
'(' => qr!\(!,
|
||||||
|
')' => qr!\)!,
|
||||||
|
'-' => qr!\-!,
|
||||||
|
);
|
||||||
|
|
||||||
|
my $escapes = join "", keys %escape_map;
|
||||||
|
$escapes = qr/[\Q$escapes\E]/;
|
||||||
|
|
||||||
|
# used to determine if a word is the start of a path
|
||||||
|
my $path_pattern = qr{^(?:~|/|[[:alpha:]]:\\)};
|
||||||
|
|
||||||
|
sub complete {
|
||||||
|
my ($key, $modifiers) = @{$_[0]};
|
||||||
|
# if $_[0][0] contains the value of the key pressed
|
||||||
|
# $_[0][1] contains modifiers
|
||||||
|
# the value for tab is 0xFF09
|
||||||
|
# the value for shift-tab(Left Tab) is 0xFE20
|
||||||
|
# we don't care about other keys
|
||||||
|
|
||||||
|
# the key must be a tab and left tab
|
||||||
|
return Xchat::EAT_NONE unless $key == TAB || $key == LEFT_TAB;
|
||||||
|
|
||||||
|
# if it is a tab then it must not have any modifiers
|
||||||
|
return Xchat::EAT_NONE if $key == TAB && $modifiers & (CTRL|ALT|SHIFT);
|
||||||
|
|
||||||
|
# loop backwards for shift+tab/left tab
|
||||||
|
my $delta = $modifiers & SHIFT ? -1 : 1;
|
||||||
|
my $context = Xchat::get_context;
|
||||||
|
$completions{$context} ||= {};
|
||||||
|
|
||||||
|
my $completions = $completions{$context};
|
||||||
|
$completions->{pos} ||= -1;
|
||||||
|
|
||||||
|
my $suffix = Xchat::get_prefs( "completion_suffix" );
|
||||||
|
$suffix =~ s/^\s+//;
|
||||||
|
|
||||||
|
my $input = Xchat::get_info( "inputbox" );
|
||||||
|
my $cursor_pos = Xchat::get_info( "state_cursor" );
|
||||||
|
my $left = substr( $input, 0, $cursor_pos );
|
||||||
|
my $right = substr( $input, $cursor_pos );
|
||||||
|
my $length = length $left;
|
||||||
|
|
||||||
|
# trim spaces from the end of $left to avoid grabbing the wrong word
|
||||||
|
# this is mainly needed for completion at the very beginning where a space
|
||||||
|
# is added after the completion
|
||||||
|
$left =~ s/\s+$//;
|
||||||
|
|
||||||
|
# always add one to the index because
|
||||||
|
# 1) if a space is found we want the position after it
|
||||||
|
# 2) if a space isn't found then we get back -1
|
||||||
|
my $word_start = rindex( $left, " " ) + 1;
|
||||||
|
my $word = substr( $left, $word_start );
|
||||||
|
$left = substr( $left, 0, -length $word );
|
||||||
|
|
||||||
|
if( $cursor_pos == $completions->{pos} ) {
|
||||||
|
my $previous_word = $completions->{completed};
|
||||||
|
my $new_left = $input;
|
||||||
|
substr( $new_left, $cursor_pos ) = "";
|
||||||
|
|
||||||
|
if( $previous_word and $new_left =~ s/(\Q$previous_word\E)$// ) {
|
||||||
|
$word = $1;
|
||||||
|
$word_start = length( $new_left );
|
||||||
|
$left = $new_left;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
my $command_char = Xchat::get_prefs( "input_command_char" );
|
||||||
|
# ignore commands
|
||||||
|
if( ($word !~ m{^[${command_char}]})
|
||||||
|
or ( $word =~ m{^[${command_char}]} and $word_start != 0 ) ) {
|
||||||
|
|
||||||
|
if( $cursor_pos == length $input # end of input box
|
||||||
|
# not a valid nick char
|
||||||
|
&& $input =~ /(?<![\x41-\x5A\x61-\x7A\x30-\x39\x5B-\x60\x7B-\x7D-])$/
|
||||||
|
&& $cursor_pos != $completions->{pos} # not continuing a completion
|
||||||
|
&& $word !~ m{^(?:[&#/~]|[[:alpha:]]:\\)} # not a channel or path
|
||||||
|
) {
|
||||||
|
# check for path completion
|
||||||
|
unless( $path_completion and $word =~ $path_pattern ) {
|
||||||
|
$word_start = $cursor_pos;
|
||||||
|
$left = $input;
|
||||||
|
$length = length $length;
|
||||||
|
$right = "";
|
||||||
|
$word = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( $word_start == 0 && $prefix && $word =~ /^\Q$prefix/ ) {
|
||||||
|
$word =~ s/^\Q$prefix//;
|
||||||
|
}
|
||||||
|
|
||||||
|
my $completed; # this is going to be the "completed" word
|
||||||
|
|
||||||
|
# for parital completions and channel names so a : isn't added
|
||||||
|
#$completions->{skip_suffix} = ($word =~ /^[&#]/) ? 1 : 0;
|
||||||
|
|
||||||
|
# continuing from a previous completion
|
||||||
|
if(
|
||||||
|
exists $completions->{matches} && @{$completions->{matches}}
|
||||||
|
&& $cursor_pos == $completions->{pos}
|
||||||
|
&& $word =~ /^\Q$completions->{matches}[$completions->{index}]/
|
||||||
|
) {
|
||||||
|
$completions->{index} += $delta;
|
||||||
|
|
||||||
|
if( $completions->{index} < 0 ) {
|
||||||
|
$completions->{index} += @{$completions->{matches}};
|
||||||
|
} else {
|
||||||
|
$completions->{index} %= @{$completions->{matches}};
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if( $word =~ /^[&#]/ ) {
|
||||||
|
# channel name completion
|
||||||
|
$completions->{matches} = [ matching_channels( $word ) ];
|
||||||
|
$completions->{skip_suffix} = 0;
|
||||||
|
} elsif( $path_completion and $word =~ $path_pattern ) {
|
||||||
|
# file name completion
|
||||||
|
$completions->{matches} = [ matching_files( $word ) ];
|
||||||
|
$completions->{skip_suffix} = 1;
|
||||||
|
} else {
|
||||||
|
# nick completion
|
||||||
|
# fix $word so { equals [, ] equals }, \ equals |
|
||||||
|
# and escape regex metacharacters
|
||||||
|
$word =~ s/($escapes)/$escape_map{$1}/g;
|
||||||
|
|
||||||
|
$completions->{matches} = [ matching_nicks( $word ) ];
|
||||||
|
$completions->{skip_suffix} = 0;
|
||||||
|
}
|
||||||
|
$completions->{index} = 0;
|
||||||
|
|
||||||
|
}
|
||||||
|
$completed = $completions->{matches}[ $completions->{index} ];
|
||||||
|
$completions->{completed} = $completed;
|
||||||
|
|
||||||
|
my $completion_amount = Xchat::get_prefs( "completion_amount" );
|
||||||
|
|
||||||
|
# don't cycle if the number of possible completions is greater than
|
||||||
|
# completion_amount
|
||||||
|
if(
|
||||||
|
!$always_cycle && (
|
||||||
|
@{$completions->{matches}} > $completion_amount
|
||||||
|
&& @{$completions->{matches}} != 1 )
|
||||||
|
) {
|
||||||
|
# don't print if we tabbed in the beginning and the list of possible
|
||||||
|
# completions includes all nicks in the channel
|
||||||
|
my $context_type = Xchat::context_info->{type};
|
||||||
|
if( $context_type != 2 # not a channel
|
||||||
|
or @{$completions->{matches}} < Xchat::get_list("users")
|
||||||
|
) {
|
||||||
|
Xchat::print( join " ", @{$completions->{matches}}, "\n" );
|
||||||
|
}
|
||||||
|
|
||||||
|
$completed = lcs( $completions->{matches} );
|
||||||
|
$completions->{skip_suffix} = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( $completed ) {
|
||||||
|
|
||||||
|
if( $word_start == 0 && !$completions->{skip_suffix} ) {
|
||||||
|
# at the start of the line append completion suffix
|
||||||
|
Xchat::command( "settext $prefix$completed$suffix$right");
|
||||||
|
$completions->{pos} = length( "$prefix$completed$suffix" );
|
||||||
|
} else {
|
||||||
|
Xchat::command( "settext $left$completed$right" );
|
||||||
|
$completions->{pos} = length( "$left$completed" );
|
||||||
|
}
|
||||||
|
|
||||||
|
Xchat::command( "setcursor $completions->{pos}" );
|
||||||
|
}
|
||||||
|
|
||||||
|
=begin
|
||||||
|
# debugging stuff
|
||||||
|
local $, = " ";
|
||||||
|
my $input_length = length $input;
|
||||||
|
Xchat::print [
|
||||||
|
qq{input[$input]},
|
||||||
|
qq{input_length[$input_length]},
|
||||||
|
qq{cursor[$cursor_pos]},
|
||||||
|
qq{start[$word_start]},
|
||||||
|
qq{length[$length]},
|
||||||
|
qq{left[$left]},
|
||||||
|
qq{word[$word]}, qq{right[$right]},
|
||||||
|
qq{completed[}. ($completed||""). qq{]},
|
||||||
|
qq{pos[$completions->{pos}]},
|
||||||
|
];
|
||||||
|
use Data::Dumper;
|
||||||
|
local $Data::Dumper::Indent = 0;
|
||||||
|
Xchat::print Dumper $completions->{matches};
|
||||||
|
=cut
|
||||||
|
|
||||||
|
return Xchat::EAT_ALL;
|
||||||
|
} else {
|
||||||
|
return Xchat::EAT_NONE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# all channels starting with $word
|
||||||
|
sub matching_channels {
|
||||||
|
my $word = shift;
|
||||||
|
|
||||||
|
# for use in compare_channels();
|
||||||
|
our $current_chan;
|
||||||
|
local $current_chan = Xchat::get_info( "channel" );
|
||||||
|
|
||||||
|
my $conn_id = Xchat::get_info( "id" );
|
||||||
|
$word =~ s/^[&#]+//;
|
||||||
|
|
||||||
|
return
|
||||||
|
map { $_->[1]->{channel} }
|
||||||
|
sort compare_channels map {
|
||||||
|
my $chan = $_->{channel};
|
||||||
|
$chan =~ s/^[#&]+//;
|
||||||
|
|
||||||
|
# comparisons will be done based only on the name
|
||||||
|
# matching name, same connection, only channels
|
||||||
|
$chan =~ /^$word/i && $_->{id} == $conn_id ?
|
||||||
|
[ $chan, $_ ] :
|
||||||
|
()
|
||||||
|
} channels();
|
||||||
|
}
|
||||||
|
|
||||||
|
sub channels {
|
||||||
|
return grep { $_->{type} == 2 } Xchat::get_list( "channels" );
|
||||||
|
}
|
||||||
|
|
||||||
|
sub compare_channels {
|
||||||
|
# package variable, value set in matching_channels()
|
||||||
|
our $current_chan;
|
||||||
|
|
||||||
|
# turn off warnings generated from channels that have not yet been visited
|
||||||
|
# since the script was loaded
|
||||||
|
no warnings "uninitialized";
|
||||||
|
|
||||||
|
# the current channel is always first, then ordered by most recently visited
|
||||||
|
return
|
||||||
|
$a->[1]{channel} eq $current_chan ? -1 :
|
||||||
|
$b->[1]{channel} eq $current_chan ? 1 :
|
||||||
|
$last_visit{ $b->[1]{context} } <=> $last_visit{ $a->[1]{context} }
|
||||||
|
|| $a->[1]{channel} cmp $b->[1]{channel};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
sub matching_nicks {
|
||||||
|
my $word_re = shift;
|
||||||
|
|
||||||
|
# for use in compare_nicks()
|
||||||
|
our ($my_nick, $selections, $now);
|
||||||
|
local $my_nick = Xchat::get_info( "nick" );
|
||||||
|
local $selections = $selected{ Xchat::get_context() };
|
||||||
|
local $now = time;
|
||||||
|
|
||||||
|
my $pattern = $ignore_leading_non_alnum ?
|
||||||
|
qr/^[\-\[\]^_`{|}\\]*$word_re/i : qr/^$word_re/i;
|
||||||
|
return
|
||||||
|
map { $_->{nick} }
|
||||||
|
sort compare_nicks grep {
|
||||||
|
$_->{nick} =~ $pattern;
|
||||||
|
} Xchat::get_list( "users" )
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
sub max {
|
||||||
|
return unless @_;
|
||||||
|
my $max = shift;
|
||||||
|
for(@_) {
|
||||||
|
$max = $_ if $_ > $max;
|
||||||
|
}
|
||||||
|
return $max;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub compare_times {
|
||||||
|
# package variables set in matching_nicks()
|
||||||
|
our $selections;
|
||||||
|
our $now;
|
||||||
|
|
||||||
|
for my $nick ( $a->{nick}, $b->{nick} ) {
|
||||||
|
# turn off the warnings that get generated from users who have yet
|
||||||
|
# to speak since the script was loaded
|
||||||
|
no warnings "uninitialized";
|
||||||
|
|
||||||
|
if( $last_use_threshold
|
||||||
|
&& (( $now - $selections->{$nick}) > ($last_use_threshold * 60)) ) {
|
||||||
|
delete $selections->{ $nick }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
my $a_time = $selections->{ $a->{nick} } || 0 ;
|
||||||
|
my $b_time = $selections->{ $b->{nick} } || 0 ;
|
||||||
|
|
||||||
|
if( $a_time || $b_time ) {
|
||||||
|
return $b_time <=> $a_time;
|
||||||
|
} elsif( !$a_time && !$b_time ) {
|
||||||
|
return $b->{lasttalk} <=> $a->{lasttalk};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
sub compare_nicks {
|
||||||
|
# more package variables, value set in matching_nicks()
|
||||||
|
our $my_nick;
|
||||||
|
|
||||||
|
# our own nick is always last, then ordered by the people we spoke to most
|
||||||
|
# recently and the people who were speaking most recently
|
||||||
|
return
|
||||||
|
$a->{nick} eq $my_nick ? 1 :
|
||||||
|
$b->{nick} eq $my_nick ? -1 :
|
||||||
|
compare_times()
|
||||||
|
|| Xchat::nickcmp( $a->{nick}, $b->{nick} );
|
||||||
|
|
||||||
|
# $selections->{ $b->{nick} } <=> $selections->{ $a->{nick} }
|
||||||
|
# || $b->{lasttalk} <=> $a->{lasttalk}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
sub matching_files {
|
||||||
|
my $word = shift;
|
||||||
|
|
||||||
|
my ($file, $input_dir) = fileparse( $word );
|
||||||
|
|
||||||
|
my $dir = expand_tilde( $input_dir );
|
||||||
|
|
||||||
|
if( opendir my $dir_handle, $dir ) {
|
||||||
|
my @files;
|
||||||
|
|
||||||
|
if( $file ) {
|
||||||
|
@files = grep {
|
||||||
|
#Xchat::print( $_ );
|
||||||
|
/^\Q$file/ } readdir $dir_handle;
|
||||||
|
} else {
|
||||||
|
@files = readdir $dir_handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
return map {
|
||||||
|
File::Spec->catfile( $input_dir, $_ );
|
||||||
|
} sort
|
||||||
|
grep { !/^[.]{1,2}$/ } @files;
|
||||||
|
} else {
|
||||||
|
return ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Remove completion related data for tabs that are closed
|
||||||
|
sub close_context {
|
||||||
|
my $context = Xchat::get_context;
|
||||||
|
delete $completions{$context};
|
||||||
|
delete $last_visit{$context};
|
||||||
|
return Xchat::EAT_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
# track visit times
|
||||||
|
sub focus_tab {
|
||||||
|
$last_visit{Xchat::get_context()} = time();
|
||||||
|
return Xchat::EAT_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
# keep track of the last time a message was addressed to someone
|
||||||
|
# a message is considered addressed to someone if their nick is used followed
|
||||||
|
# by the completion suffix
|
||||||
|
sub track_selected {
|
||||||
|
my $input = $_[1][0];
|
||||||
|
return Xchat::EAT_NONE unless defined $input;
|
||||||
|
|
||||||
|
my $suffix = Xchat::get_prefs( "completion_suffix" );
|
||||||
|
for( grep defined, $input =~ /^(.+)\Q$suffix/, $_[0][0] ) {
|
||||||
|
if( in_channel( $_ ) ) {
|
||||||
|
$selected{Xchat::get_context()}{$_} = time();
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Xchat::EAT_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
# if a user is in the current channel
|
||||||
|
# user_info() can also be used instead of the loop
|
||||||
|
sub in_channel {
|
||||||
|
my $target = shift;
|
||||||
|
for my $nick ( nicks() ) {
|
||||||
|
if( $nick eq $target ) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
# list of nicks in the current channel
|
||||||
|
sub nicks {
|
||||||
|
return map { $_->{nick} } Xchat::get_list( "users" );
|
||||||
|
}
|
||||||
|
|
||||||
|
# remove people from the selected list when they leave the channel
|
||||||
|
sub clean_selected {
|
||||||
|
delete $selected{ Xchat::get_context() }{$_[0][0]};
|
||||||
|
return Xchat::EAT_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Longest common substring
|
||||||
|
# Used for partial completion when using non-cycling completion
|
||||||
|
sub lcs {
|
||||||
|
my @nicks = @{+shift};
|
||||||
|
return "" if @nicks == 0;
|
||||||
|
return $nicks[0] if @nicks == 1;
|
||||||
|
|
||||||
|
my $substring = shift @nicks;
|
||||||
|
|
||||||
|
while(@nicks) {
|
||||||
|
$substring = common_string( $substring, shift @nicks );
|
||||||
|
}
|
||||||
|
|
||||||
|
return $substring;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub common_string {
|
||||||
|
my ($nick1, $nick2) = @_;
|
||||||
|
my $index = 0;
|
||||||
|
|
||||||
|
$index++ while(
|
||||||
|
($index < length $nick1) && ($index < length $nick2) &&
|
||||||
|
lc(substr( $nick1, $index, 1 )) eq lc(substr( $nick2, $index, 1 ))
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
return substr( $nick1, 0, $index );
|
||||||
|
}
|
||||||
|
|
||||||
|
sub expand_tilde {
|
||||||
|
my $file = shift;
|
||||||
|
|
||||||
|
$file =~ s/^~/home_dir()/e;
|
||||||
|
return $file;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub home_dir {
|
||||||
|
return $base_path if $base_path;
|
||||||
|
|
||||||
|
if ( $^O eq "MSWin32" ) {
|
||||||
|
return $ENV{USERPROFILE};
|
||||||
|
} else {
|
||||||
|
return ((getpwuid($>))[7] || $ENV{HOME} || $ENV{LOGDIR});
|
||||||
|
}
|
||||||
|
}
|
101
plugins/perl/char_count.pl
Normal file
101
plugins/perl/char_count.pl
Normal file
@ -0,0 +1,101 @@
|
|||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Xchat qw(:all);
|
||||||
|
use Glib qw(TRUE FALSE);
|
||||||
|
use Gtk2 -init;
|
||||||
|
|
||||||
|
sub get_inputbox {
|
||||||
|
my $widget = Glib::Object->new_from_pointer( get_info( "win_ptr" ), 0 );
|
||||||
|
my $input_box;
|
||||||
|
|
||||||
|
my @containers = ($widget);
|
||||||
|
|
||||||
|
while( @containers ) {
|
||||||
|
my $container = shift @containers;
|
||||||
|
|
||||||
|
for my $child ( $container->get_children ) {
|
||||||
|
if( $child->get( "name" ) eq 'xchat-inputbox' ) {
|
||||||
|
$input_box = $child;
|
||||||
|
last;
|
||||||
|
} elsif( $child->isa( "Gtk2::Container" ) ) {
|
||||||
|
push @containers, $child;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $input_box;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub get_hbox {
|
||||||
|
my $widget = shift;
|
||||||
|
my $hbox;
|
||||||
|
|
||||||
|
while( $widget->parent ) {
|
||||||
|
if( $widget->parent->isa( "Gtk2::HBox" ) ) {
|
||||||
|
return $widget->parent;
|
||||||
|
}
|
||||||
|
$widget = $widget->parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
my $input_box = get_inputbox();
|
||||||
|
|
||||||
|
if( $input_box ) {
|
||||||
|
my $hbox = get_hbox( $input_box );
|
||||||
|
if( $hbox ) {
|
||||||
|
my $label = Gtk2::Label->new();
|
||||||
|
$label->set_alignment( 0.5, ($label->get_alignment)[1] );
|
||||||
|
$hbox->pack_end( $label, 0, 0, 5 );
|
||||||
|
$label->show();
|
||||||
|
|
||||||
|
my $update_label = sub {
|
||||||
|
my $ctx_type = context_info->{"type"};
|
||||||
|
hook_timer( 0, sub {
|
||||||
|
if( $ctx_type == 2 || $ctx_type == 3 ) {
|
||||||
|
my $count = length get_info "inputbox";
|
||||||
|
$label->set_text( $count ? $count : "" );
|
||||||
|
} else {
|
||||||
|
$label->set_text( "" );
|
||||||
|
}
|
||||||
|
return REMOVE;
|
||||||
|
});
|
||||||
|
return EAT_NONE;
|
||||||
|
};
|
||||||
|
|
||||||
|
hook_print( "Key Press", $update_label );
|
||||||
|
hook_print( "Focus Tab", $update_label );
|
||||||
|
hook_print( "Focus Window", $update_label );
|
||||||
|
hook_command( "",
|
||||||
|
sub {
|
||||||
|
$label->set_text( "" );
|
||||||
|
return EAT_NONE;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
my @handlers;
|
||||||
|
my $buffer = $input_box->get_buffer;
|
||||||
|
my $handler = sub { $update_label->(); return TRUE };
|
||||||
|
|
||||||
|
if( $buffer->isa( "Gtk2::TextBuffer" ) ) {
|
||||||
|
push @handlers, $buffer->signal_connect( "changed", $handler );
|
||||||
|
} elsif( $buffer->isa( "Gtk2::EntryBuffer" ) ) {
|
||||||
|
push @handlers,
|
||||||
|
$buffer->signal_connect( "deleted-text", $handler );
|
||||||
|
$buffer->signal_connect( "inserted-text", $handler );
|
||||||
|
}
|
||||||
|
|
||||||
|
register( "Character Counter", "1.0.0",
|
||||||
|
"Display the number of characters in the inputbox",
|
||||||
|
sub {
|
||||||
|
$hbox->remove( $label );
|
||||||
|
$buffer->signal_handler_disconnect( $_ ) for @handlers;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
prnt "Counldn't find hbox";
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
prnt "Couldn't fint input box";
|
||||||
|
}
|
@ -25,13 +25,12 @@ sub toc {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for my $files (
|
for my $files (
|
||||||
[ "hexchat.pm.h", # output file
|
[ "xchat.pm.h", # output file
|
||||||
"lib/HexChat.pm", # input files
|
"lib/Xchat.pm", # input files
|
||||||
"lib/Xchat.pm",
|
"lib/Xchat/Embed.pm",
|
||||||
"lib/HexChat/Embed.pm",
|
"lib/Xchat/List/Network.pm",
|
||||||
"lib/HexChat/List/Network.pm",
|
"lib/Xchat/List/Network/Entry.pm",
|
||||||
"lib/HexChat/List/Network/Entry.pm",
|
"lib/Xchat/List/Network/AutoJoin.pm",
|
||||||
"lib/HexChat/List/Network/AutoJoin.pm",
|
|
||||||
],
|
],
|
||||||
[ "irc.pm.h", # output file
|
[ "irc.pm.h", # output file
|
||||||
"lib/IRC.pm" # input file
|
"lib/IRC.pm" # input file
|
||||||
|
27
plugins/perl/generate_html
Normal file
27
plugins/perl/generate_html
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
#!/usr/bin/env perl
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use File::Basename qw(dirname);
|
||||||
|
|
||||||
|
sub __DIR__ {
|
||||||
|
return dirname +(caller 0)[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
# this must go before use Pod::Html to use our private copy
|
||||||
|
use lib __DIR__ . '/lib';
|
||||||
|
use Pod::Html;
|
||||||
|
|
||||||
|
chdir( __DIR__ ) or die $!;
|
||||||
|
pod2html(
|
||||||
|
# "pod2html",
|
||||||
|
"--header",
|
||||||
|
"--infile=lib/Xchat.pod",
|
||||||
|
"--outfile=xchat2-perl.html",
|
||||||
|
);
|
||||||
|
|
||||||
|
#system( qw(tidy -m -i -xml -utf8 -quiet xchat2-perl.html) );
|
||||||
|
unlink( "pod2htmd.tmp" );
|
||||||
|
unlink( "pod2htmi.tmp" );
|
||||||
|
|
||||||
|
exec( "./syntax_highlight", "xchat2-perl.html" )
|
||||||
|
or die $!;
|
@ -1,556 +0,0 @@
|
|||||||
$SIG{__WARN__} = sub {
|
|
||||||
my $message = shift @_;
|
|
||||||
my ($package) = caller;
|
|
||||||
|
|
||||||
# redirect Gtk/Glib errors and warnings back to STDERR
|
|
||||||
my $message_levels = qr/ERROR|CRITICAL|WARNING|MESSAGE|INFO|DEBUG/i;
|
|
||||||
if( $message =~ /^(?:Gtk|GLib|Gdk)(?:-\w+)?-$message_levels/i ) {
|
|
||||||
print STDERR $message;
|
|
||||||
} else {
|
|
||||||
|
|
||||||
if( defined &HexChat::Internal::print ) {
|
|
||||||
HexChat::print( $message );
|
|
||||||
} else {
|
|
||||||
warn $message;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
use File::Spec ();
|
|
||||||
use File::Basename ();
|
|
||||||
use File::Glob ();
|
|
||||||
use List::Util ();
|
|
||||||
use Symbol();
|
|
||||||
use Time::HiRes ();
|
|
||||||
use Carp ();
|
|
||||||
|
|
||||||
package HexChat;
|
|
||||||
use base qw(Exporter);
|
|
||||||
use strict;
|
|
||||||
use warnings;
|
|
||||||
|
|
||||||
sub PRI_HIGHEST ();
|
|
||||||
sub PRI_HIGH ();
|
|
||||||
sub PRI_NORM ();
|
|
||||||
sub PRI_LOW ();
|
|
||||||
sub PRI_LOWEST ();
|
|
||||||
|
|
||||||
sub EAT_NONE ();
|
|
||||||
sub EAT_HEXCHAT ();
|
|
||||||
sub EAT_PLUGIN ();
|
|
||||||
sub EAT_ALL ();
|
|
||||||
|
|
||||||
sub KEEP ();
|
|
||||||
sub REMOVE ();
|
|
||||||
sub FD_READ ();
|
|
||||||
sub FD_WRITE ();
|
|
||||||
sub FD_EXCEPTION ();
|
|
||||||
sub FD_NOTSOCKET ();
|
|
||||||
|
|
||||||
sub get_context;
|
|
||||||
sub HexChat::Internal::context_info;
|
|
||||||
sub HexChat::Internal::print;
|
|
||||||
|
|
||||||
#keep compability with Xchat scripts
|
|
||||||
sub EAT_XCHAT ();
|
|
||||||
BEGIN {
|
|
||||||
*Xchat:: = *HexChat::;
|
|
||||||
}
|
|
||||||
|
|
||||||
our %EXPORT_TAGS = (
|
|
||||||
constants => [
|
|
||||||
qw(PRI_HIGHEST PRI_HIGH PRI_NORM PRI_LOW PRI_LOWEST), # priorities
|
|
||||||
qw(EAT_NONE EAT_HEXCHAT EAT_XCHAT EAT_PLUGIN EAT_ALL), # callback return values
|
|
||||||
qw(FD_READ FD_WRITE FD_EXCEPTION FD_NOTSOCKET), # fd flags
|
|
||||||
qw(KEEP REMOVE), # timers
|
|
||||||
],
|
|
||||||
hooks => [
|
|
||||||
qw(hook_server hook_command hook_print hook_timer hook_fd unhook),
|
|
||||||
],
|
|
||||||
util => [
|
|
||||||
qw(register nickcmp strip_code send_modes), # misc
|
|
||||||
qw(print prnt printf prntf command commandf emit_print), # output
|
|
||||||
qw(find_context get_context set_context), # context
|
|
||||||
qw(get_info get_prefs get_list context_info user_info), # input
|
|
||||||
qw(plugin_pref_set plugin_pref_get plugin_pref_delete plugin_pref_list), #settings
|
|
||||||
],
|
|
||||||
);
|
|
||||||
|
|
||||||
$EXPORT_TAGS{all} = [ map { @{$_} } @EXPORT_TAGS{qw(constants hooks util)}];
|
|
||||||
our @EXPORT = @{$EXPORT_TAGS{constants}};
|
|
||||||
our @EXPORT_OK = @{$EXPORT_TAGS{all}};
|
|
||||||
|
|
||||||
sub register {
|
|
||||||
my ($package, $calling_package) = HexChat::Embed::find_pkg();
|
|
||||||
my $pkg_info = HexChat::Embed::pkg_info( $package );
|
|
||||||
my $filename = $pkg_info->{filename};
|
|
||||||
my ($name, $version, $description, $callback) = @_;
|
|
||||||
|
|
||||||
if( defined $pkg_info->{gui_entry} ) {
|
|
||||||
HexChat::print( "HexChat::register called more than once in "
|
|
||||||
. $pkg_info->{filename} );
|
|
||||||
return ();
|
|
||||||
}
|
|
||||||
|
|
||||||
$description = "" unless defined $description;
|
|
||||||
if( $callback ) {
|
|
||||||
$callback = HexChat::Embed::fix_callback(
|
|
||||||
$package, $calling_package, $callback
|
|
||||||
);
|
|
||||||
}
|
|
||||||
$pkg_info->{shutdown} = $callback;
|
|
||||||
unless( $name && $name =~ /[[:print:]\w]/ ) {
|
|
||||||
$name = "Not supplied";
|
|
||||||
}
|
|
||||||
unless( $version && $version =~ /\d+(?:\.\d+)?/ ) {
|
|
||||||
$version = "NaN";
|
|
||||||
}
|
|
||||||
$pkg_info->{gui_entry} =
|
|
||||||
HexChat::Internal::register( $name, $version, $description, $filename );
|
|
||||||
# keep with old behavior
|
|
||||||
return ();
|
|
||||||
}
|
|
||||||
|
|
||||||
sub _process_hook_options {
|
|
||||||
my ($options, $keys, $store) = @_;
|
|
||||||
|
|
||||||
unless( @$keys == @$store ) {
|
|
||||||
die 'Number of keys must match the size of the store';
|
|
||||||
}
|
|
||||||
|
|
||||||
my @results;
|
|
||||||
|
|
||||||
if( ref( $options ) eq 'HASH' ) {
|
|
||||||
for my $index ( 0 .. @$keys - 1 ) {
|
|
||||||
my $key = $keys->[$index];
|
|
||||||
if( exists( $options->{ $key } ) && defined( $options->{ $key } ) ) {
|
|
||||||
${$store->[$index]} = $options->{ $key };
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
sub hook_server {
|
|
||||||
return undef unless @_ >= 2;
|
|
||||||
my $message = shift;
|
|
||||||
my $callback = shift;
|
|
||||||
my $options = shift;
|
|
||||||
my ($package, $calling_package) = HexChat::Embed::find_pkg();
|
|
||||||
|
|
||||||
$callback = HexChat::Embed::fix_callback(
|
|
||||||
$package, $calling_package, $callback
|
|
||||||
);
|
|
||||||
|
|
||||||
my ($priority, $data) = ( HexChat::PRI_NORM, undef );
|
|
||||||
_process_hook_options(
|
|
||||||
$options,
|
|
||||||
[qw(priority data)],
|
|
||||||
[\($priority, $data)],
|
|
||||||
);
|
|
||||||
|
|
||||||
my $pkg_info = HexChat::Embed::pkg_info( $package );
|
|
||||||
my $hook = HexChat::Internal::hook_server(
|
|
||||||
$message, $priority, $callback, $data, $package
|
|
||||||
);
|
|
||||||
push @{$pkg_info->{hooks}}, $hook if defined $hook;
|
|
||||||
return $hook;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub hook_command {
|
|
||||||
return undef unless @_ >= 2;
|
|
||||||
my $command = shift;
|
|
||||||
my $callback = shift;
|
|
||||||
my $options = shift;
|
|
||||||
my ($package, $calling_package) = HexChat::Embed::find_pkg();
|
|
||||||
|
|
||||||
$callback = HexChat::Embed::fix_callback(
|
|
||||||
$package, $calling_package, $callback
|
|
||||||
);
|
|
||||||
|
|
||||||
my ($priority, $help_text, $data) = ( HexChat::PRI_NORM, undef, undef );
|
|
||||||
_process_hook_options(
|
|
||||||
$options,
|
|
||||||
[qw(priority help_text data)],
|
|
||||||
[\($priority, $help_text, $data)],
|
|
||||||
);
|
|
||||||
|
|
||||||
my $pkg_info = HexChat::Embed::pkg_info( $package );
|
|
||||||
my $hook = HexChat::Internal::hook_command(
|
|
||||||
$command, $priority, $callback, $help_text, $data, $package
|
|
||||||
);
|
|
||||||
push @{$pkg_info->{hooks}}, $hook if defined $hook;
|
|
||||||
return $hook;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub hook_print {
|
|
||||||
return undef unless @_ >= 2;
|
|
||||||
my $event = shift;
|
|
||||||
my $callback = shift;
|
|
||||||
my $options = shift;
|
|
||||||
my ($package, $calling_package) = HexChat::Embed::find_pkg();
|
|
||||||
|
|
||||||
$callback = HexChat::Embed::fix_callback(
|
|
||||||
$package, $calling_package, $callback
|
|
||||||
);
|
|
||||||
|
|
||||||
my ($priority, $run_after, $filter, $data) = ( HexChat::PRI_NORM, 0, 0, undef );
|
|
||||||
_process_hook_options(
|
|
||||||
$options,
|
|
||||||
[qw(priority run_after_event filter data)],
|
|
||||||
[\($priority, $run_after, $filter, $data)],
|
|
||||||
);
|
|
||||||
|
|
||||||
if( $run_after and $filter ) {
|
|
||||||
Carp::carp( "HexChat::hook_print's run_after_event and filter options are mutually exclusive, you can only use of them at a time per hook" );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if( $run_after ) {
|
|
||||||
my $cb = $callback;
|
|
||||||
$callback = sub {
|
|
||||||
my @args = @_;
|
|
||||||
hook_timer( 0, sub {
|
|
||||||
$cb->( @args );
|
|
||||||
|
|
||||||
if( ref $run_after eq 'CODE' ) {
|
|
||||||
$run_after->( @args );
|
|
||||||
}
|
|
||||||
return REMOVE;
|
|
||||||
});
|
|
||||||
return EAT_NONE;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
if( $filter ) {
|
|
||||||
my $cb = $callback;
|
|
||||||
$callback = sub {
|
|
||||||
my @args = @{$_[0]};
|
|
||||||
my $event_data = $_[1];
|
|
||||||
my $event_name = $event;
|
|
||||||
my $last_arg = @args - 1;
|
|
||||||
|
|
||||||
my @new = $cb->( \@args, $event_data, $event_name );
|
|
||||||
|
|
||||||
# allow changing event by returning the new value
|
|
||||||
if( @new > @args ) {
|
|
||||||
$event_name = pop @new;
|
|
||||||
}
|
|
||||||
|
|
||||||
# a filter can either return the new results or it can modify
|
|
||||||
# @_ in place.
|
|
||||||
if( @new == @args ) {
|
|
||||||
emit_print( $event_name, @new[ 0 .. $last_arg ] );
|
|
||||||
return EAT_ALL;
|
|
||||||
} elsif(
|
|
||||||
join( "\0", @{$_[0]} ) ne join( "\0", @args[ 0 .. $last_arg ] )
|
|
||||||
) {
|
|
||||||
emit_print( $event_name, @args[ 0 .. $last_arg ] );
|
|
||||||
return EAT_ALL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return EAT_NONE;
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
my $pkg_info = HexChat::Embed::pkg_info( $package );
|
|
||||||
my $hook = HexChat::Internal::hook_print(
|
|
||||||
$event, $priority, $callback, $data, $package
|
|
||||||
);
|
|
||||||
push @{$pkg_info->{hooks}}, $hook if defined $hook;
|
|
||||||
return $hook;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub hook_timer {
|
|
||||||
return undef unless @_ >= 2;
|
|
||||||
my ($timeout, $callback, $data) = @_;
|
|
||||||
my ($package, $calling_package) = HexChat::Embed::find_pkg();
|
|
||||||
|
|
||||||
$callback = HexChat::Embed::fix_callback(
|
|
||||||
$package, $calling_package, $callback
|
|
||||||
);
|
|
||||||
|
|
||||||
if(
|
|
||||||
ref( $data ) eq 'HASH' && exists( $data->{data} )
|
|
||||||
&& defined( $data->{data} )
|
|
||||||
) {
|
|
||||||
$data = $data->{data};
|
|
||||||
}
|
|
||||||
|
|
||||||
my $pkg_info = HexChat::Embed::pkg_info( $package );
|
|
||||||
my $hook = HexChat::Internal::hook_timer( $timeout, $callback, $data, $package );
|
|
||||||
push @{$pkg_info->{hooks}}, $hook if defined $hook;
|
|
||||||
return $hook;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub hook_fd {
|
|
||||||
return undef unless @_ >= 2;
|
|
||||||
my ($fd, $callback, $options) = @_;
|
|
||||||
return undef unless defined $fd && defined $callback;
|
|
||||||
|
|
||||||
my $fileno = fileno $fd;
|
|
||||||
return undef unless defined $fileno; # no underlying fd for this handle
|
|
||||||
|
|
||||||
my ($package, $calling_package) = HexChat::Embed::find_pkg();
|
|
||||||
$callback = HexChat::Embed::fix_callback(
|
|
||||||
$package, $calling_package, $callback
|
|
||||||
);
|
|
||||||
|
|
||||||
my ($flags, $data) = (HexChat::FD_READ, undef);
|
|
||||||
_process_hook_options(
|
|
||||||
$options,
|
|
||||||
[qw(flags data)],
|
|
||||||
[\($flags, $data)],
|
|
||||||
);
|
|
||||||
|
|
||||||
my $cb = sub {
|
|
||||||
my $userdata = shift;
|
|
||||||
return $userdata->{CB}->(
|
|
||||||
$userdata->{FD}, $userdata->{FLAGS}, $userdata->{DATA},
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
my $pkg_info = HexChat::Embed::pkg_info( $package );
|
|
||||||
my $hook = HexChat::Internal::hook_fd(
|
|
||||||
$fileno, $cb, $flags, {
|
|
||||||
DATA => $data, FD => $fd, CB => $callback, FLAGS => $flags,
|
|
||||||
},
|
|
||||||
$package
|
|
||||||
);
|
|
||||||
push @{$pkg_info->{hooks}}, $hook if defined $hook;
|
|
||||||
return $hook;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub unhook {
|
|
||||||
my $hook = shift @_;
|
|
||||||
my $package = shift @_;
|
|
||||||
($package) = caller unless $package;
|
|
||||||
my $pkg_info = HexChat::Embed::pkg_info( $package );
|
|
||||||
|
|
||||||
if( defined( $hook )
|
|
||||||
&& $hook =~ /^\d+$/
|
|
||||||
&& grep { $_ == $hook } @{$pkg_info->{hooks}} ) {
|
|
||||||
$pkg_info->{hooks} = [grep { $_ != $hook } @{$pkg_info->{hooks}}];
|
|
||||||
return HexChat::Internal::unhook( $hook );
|
|
||||||
}
|
|
||||||
return ();
|
|
||||||
}
|
|
||||||
|
|
||||||
sub _do_for_each {
|
|
||||||
my ($cb, $channels, $servers) = @_;
|
|
||||||
|
|
||||||
# not specifying any channels or servers is not the same as specifying
|
|
||||||
# undef for both
|
|
||||||
# - not specifying either results in calling the callback inthe current ctx
|
|
||||||
# - specifying undef for for both results in calling the callback in the
|
|
||||||
# front/currently selected tab
|
|
||||||
if( @_ == 3 && !($channels || $servers) ) {
|
|
||||||
$channels = [ undef ];
|
|
||||||
$servers = [ undef ];
|
|
||||||
} elsif( !($channels || $servers) ) {
|
|
||||||
$cb->();
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
$channels = [ $channels ] unless ref( $channels ) eq 'ARRAY';
|
|
||||||
|
|
||||||
if( $servers ) {
|
|
||||||
$servers = [ $servers ] unless ref( $servers ) eq 'ARRAY';
|
|
||||||
} else {
|
|
||||||
$servers = [ undef ];
|
|
||||||
}
|
|
||||||
|
|
||||||
my $num_done = 0;
|
|
||||||
my $old_ctx = HexChat::get_context();
|
|
||||||
for my $server ( @$servers ) {
|
|
||||||
for my $channel ( @$channels ) {
|
|
||||||
if( HexChat::set_context( $channel, $server ) ) {
|
|
||||||
$cb->();
|
|
||||||
$num_done++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
HexChat::set_context( $old_ctx );
|
|
||||||
return $num_done;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub print {
|
|
||||||
my $text = shift @_;
|
|
||||||
return "" unless defined $text;
|
|
||||||
if( ref( $text ) eq 'ARRAY' ) {
|
|
||||||
if( $, ) {
|
|
||||||
$text = join $, , @$text;
|
|
||||||
} else {
|
|
||||||
$text = join "", @$text;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return _do_for_each(
|
|
||||||
sub { HexChat::Internal::print( $text ); },
|
|
||||||
@_
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub printf {
|
|
||||||
my $format = shift;
|
|
||||||
HexChat::print( sprintf( $format, @_ ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
# make HexChat::prnt() and HexChat::prntf() as aliases for HexChat::print() and
|
|
||||||
# HexChat::printf(), mainly useful when these functions are exported
|
|
||||||
sub prnt {
|
|
||||||
goto &HexChat::print;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub prntf {
|
|
||||||
goto &HexChat::printf;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub command {
|
|
||||||
my $command = shift;
|
|
||||||
return "" unless defined $command;
|
|
||||||
my @commands;
|
|
||||||
|
|
||||||
if( ref( $command ) eq 'ARRAY' ) {
|
|
||||||
@commands = @$command;
|
|
||||||
} else {
|
|
||||||
@commands = ($command);
|
|
||||||
}
|
|
||||||
|
|
||||||
return _do_for_each(
|
|
||||||
sub { HexChat::Internal::command( $_ ) foreach @commands },
|
|
||||||
@_
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub commandf {
|
|
||||||
my $format = shift;
|
|
||||||
HexChat::command( sprintf( $format, @_ ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
sub plugin_pref_set {
|
|
||||||
my $setting = shift // return 0;
|
|
||||||
my $value = shift // return 0;
|
|
||||||
|
|
||||||
return HexChat::Internal::plugin_pref_set($setting, $value);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub plugin_pref_get {
|
|
||||||
my $setting = shift // return 0;
|
|
||||||
|
|
||||||
return HexChat::Internal::plugin_pref_get($setting);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub plugin_pref_delete {
|
|
||||||
my $setting = shift // return 0;
|
|
||||||
|
|
||||||
return HexChat::Internal::plugin_pref_delete($setting);
|
|
||||||
}
|
|
||||||
|
|
||||||
sub plugin_pref_list {
|
|
||||||
my %list = HexChat::Internal::plugin_pref_list();
|
|
||||||
|
|
||||||
return \%list;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub set_context {
|
|
||||||
my $context;
|
|
||||||
if( @_ == 2 ) {
|
|
||||||
my ($channel, $server) = @_;
|
|
||||||
$context = HexChat::find_context( $channel, $server );
|
|
||||||
} elsif( @_ == 1 ) {
|
|
||||||
if( defined $_[0] && $_[0] =~ /^\d+$/ ) {
|
|
||||||
$context = $_[0];
|
|
||||||
} else {
|
|
||||||
$context = HexChat::find_context( $_[0] );
|
|
||||||
}
|
|
||||||
} elsif( @_ == 0 ) {
|
|
||||||
$context = HexChat::find_context();
|
|
||||||
}
|
|
||||||
return $context ? HexChat::Internal::set_context( $context ) : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub get_info {
|
|
||||||
my $id = shift;
|
|
||||||
my $info;
|
|
||||||
|
|
||||||
if( defined( $id ) ) {
|
|
||||||
if( grep { $id eq $_ } qw(state_cursor id) ) {
|
|
||||||
$info = HexChat::get_prefs( $id );
|
|
||||||
} else {
|
|
||||||
$info = HexChat::Internal::get_info( $id );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $info;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub user_info {
|
|
||||||
my $nick = HexChat::strip_code(shift @_ || HexChat::get_info( "nick" ));
|
|
||||||
my $user;
|
|
||||||
for (HexChat::get_list( "users" ) ) {
|
|
||||||
if ( HexChat::nickcmp( $_->{nick}, $nick ) == 0 ) {
|
|
||||||
$user = $_;
|
|
||||||
last;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $user;
|
|
||||||
}
|
|
||||||
|
|
||||||
sub context_info {
|
|
||||||
my $ctx = shift @_ || HexChat::get_context;
|
|
||||||
my $old_ctx = HexChat::get_context;
|
|
||||||
my @fields = (
|
|
||||||
qw(away channel charset host id inputbox libdirfs modes network),
|
|
||||||
qw(nick nickserv server topic version win_ptr win_status),
|
|
||||||
qw(configdir xchatdir xchatdirfs state_cursor),
|
|
||||||
);
|
|
||||||
|
|
||||||
if( HexChat::set_context( $ctx ) ) {
|
|
||||||
my %info;
|
|
||||||
for my $field ( @fields ) {
|
|
||||||
$info{$field} = HexChat::get_info( $field );
|
|
||||||
}
|
|
||||||
|
|
||||||
my $ctx_info = HexChat::Internal::context_info;
|
|
||||||
@info{keys %$ctx_info} = values %$ctx_info;
|
|
||||||
|
|
||||||
HexChat::set_context( $old_ctx );
|
|
||||||
return \%info;
|
|
||||||
} else {
|
|
||||||
return undef;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sub get_list {
|
|
||||||
unless( grep { $_[0] eq $_ } qw(channels dcc ignore notify users networks) ) {
|
|
||||||
Carp::carp( "'$_[0]' does not appear to be a valid list name" );
|
|
||||||
}
|
|
||||||
if( $_[0] eq 'networks' ) {
|
|
||||||
return HexChat::List::Network->get();
|
|
||||||
} else {
|
|
||||||
return HexChat::Internal::get_list( $_[0] );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sub strip_code {
|
|
||||||
my $pattern = qr<
|
|
||||||
\cB| #Bold
|
|
||||||
\cC\d{0,2}(?:,\d{1,2})?| #Color
|
|
||||||
\e\[(?:\d{1,2}(?:;\d{1,2})*)?m| # ANSI color code
|
|
||||||
\cG| #Beep
|
|
||||||
\cO| #Reset
|
|
||||||
\cV| #Reverse
|
|
||||||
\c_ #Underline
|
|
||||||
>x;
|
|
||||||
|
|
||||||
if( defined wantarray ) {
|
|
||||||
my $msg = shift;
|
|
||||||
$msg =~ s/$pattern//g;
|
|
||||||
return $msg;
|
|
||||||
} else {
|
|
||||||
$_[0] =~ s/$pattern//g if defined $_[0];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
1
|
|
2399
plugins/perl/lib/Pod/Html.pm
Normal file
2399
plugins/perl/lib/Pod/Html.pm
Normal file
File diff suppressed because it is too large
Load Diff
@ -1 +1,525 @@
|
|||||||
require HexChat;
|
$SIG{__WARN__} = sub {
|
||||||
|
my $message = shift @_;
|
||||||
|
my ($package) = caller;
|
||||||
|
|
||||||
|
# redirect Gtk/Glib errors and warnings back to STDERR
|
||||||
|
my $message_levels = qr/ERROR|CRITICAL|WARNING|MESSAGE|INFO|DEBUG/i;
|
||||||
|
if( $message =~ /^(?:Gtk|GLib|Gdk)(?:-\w+)?-$message_levels/i ) {
|
||||||
|
print STDERR $message;
|
||||||
|
} else {
|
||||||
|
|
||||||
|
if( defined &Xchat::Internal::print ) {
|
||||||
|
Xchat::print( $message );
|
||||||
|
} else {
|
||||||
|
warn $message;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
use File::Spec ();
|
||||||
|
use File::Basename ();
|
||||||
|
use File::Glob ();
|
||||||
|
use List::Util ();
|
||||||
|
use Symbol();
|
||||||
|
use Time::HiRes ();
|
||||||
|
use Carp ();
|
||||||
|
|
||||||
|
package Xchat;
|
||||||
|
use base qw(Exporter);
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
sub PRI_HIGHEST ();
|
||||||
|
sub PRI_HIGH ();
|
||||||
|
sub PRI_NORM ();
|
||||||
|
sub PRI_LOW ();
|
||||||
|
sub PRI_LOWEST ();
|
||||||
|
|
||||||
|
sub EAT_NONE ();
|
||||||
|
sub EAT_XCHAT ();
|
||||||
|
sub EAT_PLUIN ();
|
||||||
|
sub EAT_ALL ();
|
||||||
|
|
||||||
|
sub KEEP ();
|
||||||
|
sub REMOVE ();
|
||||||
|
sub FD_READ ();
|
||||||
|
sub FD_WRITE ();
|
||||||
|
sub FD_EXCEPTION ();
|
||||||
|
sub FD_NOTSOCKET ();
|
||||||
|
|
||||||
|
sub get_context;
|
||||||
|
sub Xchat::Internal::context_info;
|
||||||
|
sub Xchat::Internal::print;
|
||||||
|
|
||||||
|
our %EXPORT_TAGS = (
|
||||||
|
constants => [
|
||||||
|
qw(PRI_HIGHEST PRI_HIGH PRI_NORM PRI_LOW PRI_LOWEST), # priorities
|
||||||
|
qw(EAT_NONE EAT_XCHAT EAT_PLUGIN EAT_ALL), # callback return values
|
||||||
|
qw(FD_READ FD_WRITE FD_EXCEPTION FD_NOTSOCKET), # fd flags
|
||||||
|
qw(KEEP REMOVE), # timers
|
||||||
|
],
|
||||||
|
hooks => [
|
||||||
|
qw(hook_server hook_command hook_print hook_timer hook_fd unhook),
|
||||||
|
],
|
||||||
|
util => [
|
||||||
|
qw(register nickcmp strip_code send_modes), # misc
|
||||||
|
qw(print prnt printf prntf command commandf emit_print), # output
|
||||||
|
qw(find_context get_context set_context), # context
|
||||||
|
qw(get_info get_prefs get_list context_info user_info), # input
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
|
$EXPORT_TAGS{all} = [ map { @{$_} } @EXPORT_TAGS{qw(constants hooks util)}];
|
||||||
|
our @EXPORT = @{$EXPORT_TAGS{constants}};
|
||||||
|
our @EXPORT_OK = @{$EXPORT_TAGS{all}};
|
||||||
|
|
||||||
|
sub register {
|
||||||
|
my ($package, $calling_package) = Xchat::Embed::find_pkg();
|
||||||
|
my $pkg_info = Xchat::Embed::pkg_info( $package );
|
||||||
|
my $filename = $pkg_info->{filename};
|
||||||
|
my ($name, $version, $description, $callback) = @_;
|
||||||
|
|
||||||
|
if( defined $pkg_info->{gui_entry} ) {
|
||||||
|
Xchat::print( "Xchat::register called more than once in "
|
||||||
|
. $pkg_info->{filename} );
|
||||||
|
return ();
|
||||||
|
}
|
||||||
|
|
||||||
|
$description = "" unless defined $description;
|
||||||
|
if( $callback ) {
|
||||||
|
$callback = Xchat::Embed::fix_callback(
|
||||||
|
$package, $calling_package, $callback
|
||||||
|
);
|
||||||
|
}
|
||||||
|
$pkg_info->{shutdown} = $callback;
|
||||||
|
unless( $name && $name =~ /[[:print:]\w]/ ) {
|
||||||
|
$name = "Not supplied";
|
||||||
|
}
|
||||||
|
unless( $version && $version =~ /\d+(?:\.\d+)?/ ) {
|
||||||
|
$version = "NaN";
|
||||||
|
}
|
||||||
|
$pkg_info->{gui_entry} =
|
||||||
|
Xchat::Internal::register( $name, $version, $description, $filename );
|
||||||
|
# keep with old behavior
|
||||||
|
return ();
|
||||||
|
}
|
||||||
|
|
||||||
|
sub _process_hook_options {
|
||||||
|
my ($options, $keys, $store) = @_;
|
||||||
|
|
||||||
|
unless( @$keys == @$store ) {
|
||||||
|
die 'Number of keys must match the size of the store';
|
||||||
|
}
|
||||||
|
|
||||||
|
my @results;
|
||||||
|
|
||||||
|
if( ref( $options ) eq 'HASH' ) {
|
||||||
|
for my $index ( 0 .. @$keys - 1 ) {
|
||||||
|
my $key = $keys->[$index];
|
||||||
|
if( exists( $options->{ $key } ) && defined( $options->{ $key } ) ) {
|
||||||
|
${$store->[$index]} = $options->{ $key };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
sub hook_server {
|
||||||
|
return undef unless @_ >= 2;
|
||||||
|
my $message = shift;
|
||||||
|
my $callback = shift;
|
||||||
|
my $options = shift;
|
||||||
|
my ($package, $calling_package) = Xchat::Embed::find_pkg();
|
||||||
|
|
||||||
|
$callback = Xchat::Embed::fix_callback(
|
||||||
|
$package, $calling_package, $callback
|
||||||
|
);
|
||||||
|
|
||||||
|
my ($priority, $data) = ( Xchat::PRI_NORM, undef );
|
||||||
|
_process_hook_options(
|
||||||
|
$options,
|
||||||
|
[qw(priority data)],
|
||||||
|
[\($priority, $data)],
|
||||||
|
);
|
||||||
|
|
||||||
|
my $pkg_info = Xchat::Embed::pkg_info( $package );
|
||||||
|
my $hook = Xchat::Internal::hook_server(
|
||||||
|
$message, $priority, $callback, $data, $package
|
||||||
|
);
|
||||||
|
push @{$pkg_info->{hooks}}, $hook if defined $hook;
|
||||||
|
return $hook;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub hook_command {
|
||||||
|
return undef unless @_ >= 2;
|
||||||
|
my $command = shift;
|
||||||
|
my $callback = shift;
|
||||||
|
my $options = shift;
|
||||||
|
my ($package, $calling_package) = Xchat::Embed::find_pkg();
|
||||||
|
|
||||||
|
$callback = Xchat::Embed::fix_callback(
|
||||||
|
$package, $calling_package, $callback
|
||||||
|
);
|
||||||
|
|
||||||
|
my ($priority, $help_text, $data) = ( Xchat::PRI_NORM, undef, undef );
|
||||||
|
_process_hook_options(
|
||||||
|
$options,
|
||||||
|
[qw(priority help_text data)],
|
||||||
|
[\($priority, $help_text, $data)],
|
||||||
|
);
|
||||||
|
|
||||||
|
my $pkg_info = Xchat::Embed::pkg_info( $package );
|
||||||
|
my $hook = Xchat::Internal::hook_command(
|
||||||
|
$command, $priority, $callback, $help_text, $data, $package
|
||||||
|
);
|
||||||
|
push @{$pkg_info->{hooks}}, $hook if defined $hook;
|
||||||
|
return $hook;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub hook_print {
|
||||||
|
return undef unless @_ >= 2;
|
||||||
|
my $event = shift;
|
||||||
|
my $callback = shift;
|
||||||
|
my $options = shift;
|
||||||
|
my ($package, $calling_package) = Xchat::Embed::find_pkg();
|
||||||
|
|
||||||
|
$callback = Xchat::Embed::fix_callback(
|
||||||
|
$package, $calling_package, $callback
|
||||||
|
);
|
||||||
|
|
||||||
|
my ($priority, $run_after, $filter, $data) = ( Xchat::PRI_NORM, 0, 0, undef );
|
||||||
|
_process_hook_options(
|
||||||
|
$options,
|
||||||
|
[qw(priority run_after_event filter data)],
|
||||||
|
[\($priority, $run_after, $filter, $data)],
|
||||||
|
);
|
||||||
|
|
||||||
|
if( $run_after and $filter ) {
|
||||||
|
Carp::carp( "Xchat::hook_print's run_after_event and filter options are mutually exclusive, you can only use of them at a time per hook" );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( $run_after ) {
|
||||||
|
my $cb = $callback;
|
||||||
|
$callback = sub {
|
||||||
|
my @args = @_;
|
||||||
|
hook_timer( 0, sub {
|
||||||
|
$cb->( @args );
|
||||||
|
|
||||||
|
if( ref $run_after eq 'CODE' ) {
|
||||||
|
$run_after->( @args );
|
||||||
|
}
|
||||||
|
return REMOVE;
|
||||||
|
});
|
||||||
|
return EAT_NONE;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if( $filter ) {
|
||||||
|
my $cb = $callback;
|
||||||
|
$callback = sub {
|
||||||
|
my @args = @{$_[0]};
|
||||||
|
my $event_data = $_[1];
|
||||||
|
my $event_name = $event;
|
||||||
|
my $last_arg = @args - 1;
|
||||||
|
|
||||||
|
my @new = $cb->( \@args, $event_data, $event_name );
|
||||||
|
|
||||||
|
# allow changing event by returning the new value
|
||||||
|
if( @new > @args ) {
|
||||||
|
$event_name = pop @new;
|
||||||
|
}
|
||||||
|
|
||||||
|
# a filter can either return the new results or it can modify
|
||||||
|
# @_ in place.
|
||||||
|
if( @new == @args ) {
|
||||||
|
emit_print( $event_name, @new[ 0 .. $last_arg ] );
|
||||||
|
return EAT_ALL;
|
||||||
|
} elsif(
|
||||||
|
join( "\0", @{$_[0]} ) ne join( "\0", @args[ 0 .. $last_arg ] )
|
||||||
|
) {
|
||||||
|
emit_print( $event_name, @args[ 0 .. $last_arg ] );
|
||||||
|
return EAT_ALL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return EAT_NONE;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
my $pkg_info = Xchat::Embed::pkg_info( $package );
|
||||||
|
my $hook = Xchat::Internal::hook_print(
|
||||||
|
$event, $priority, $callback, $data, $package
|
||||||
|
);
|
||||||
|
push @{$pkg_info->{hooks}}, $hook if defined $hook;
|
||||||
|
return $hook;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub hook_timer {
|
||||||
|
return undef unless @_ >= 2;
|
||||||
|
my ($timeout, $callback, $data) = @_;
|
||||||
|
my ($package, $calling_package) = Xchat::Embed::find_pkg();
|
||||||
|
|
||||||
|
$callback = Xchat::Embed::fix_callback(
|
||||||
|
$package, $calling_package, $callback
|
||||||
|
);
|
||||||
|
|
||||||
|
if(
|
||||||
|
ref( $data ) eq 'HASH' && exists( $data->{data} )
|
||||||
|
&& defined( $data->{data} )
|
||||||
|
) {
|
||||||
|
$data = $data->{data};
|
||||||
|
}
|
||||||
|
|
||||||
|
my $pkg_info = Xchat::Embed::pkg_info( $package );
|
||||||
|
my $hook = Xchat::Internal::hook_timer( $timeout, $callback, $data, $package );
|
||||||
|
push @{$pkg_info->{hooks}}, $hook if defined $hook;
|
||||||
|
return $hook;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub hook_fd {
|
||||||
|
return undef unless @_ >= 2;
|
||||||
|
my ($fd, $callback, $options) = @_;
|
||||||
|
return undef unless defined $fd && defined $callback;
|
||||||
|
|
||||||
|
my $fileno = fileno $fd;
|
||||||
|
return undef unless defined $fileno; # no underlying fd for this handle
|
||||||
|
|
||||||
|
my ($package, $calling_package) = Xchat::Embed::find_pkg();
|
||||||
|
$callback = Xchat::Embed::fix_callback(
|
||||||
|
$package, $calling_package, $callback
|
||||||
|
);
|
||||||
|
|
||||||
|
my ($flags, $data) = (Xchat::FD_READ, undef);
|
||||||
|
_process_hook_options(
|
||||||
|
$options,
|
||||||
|
[qw(flags data)],
|
||||||
|
[\($flags, $data)],
|
||||||
|
);
|
||||||
|
|
||||||
|
my $cb = sub {
|
||||||
|
my $userdata = shift;
|
||||||
|
return $userdata->{CB}->(
|
||||||
|
$userdata->{FD}, $userdata->{FLAGS}, $userdata->{DATA},
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
my $pkg_info = Xchat::Embed::pkg_info( $package );
|
||||||
|
my $hook = Xchat::Internal::hook_fd(
|
||||||
|
$fileno, $cb, $flags, {
|
||||||
|
DATA => $data, FD => $fd, CB => $callback, FLAGS => $flags,
|
||||||
|
},
|
||||||
|
$package
|
||||||
|
);
|
||||||
|
push @{$pkg_info->{hooks}}, $hook if defined $hook;
|
||||||
|
return $hook;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub unhook {
|
||||||
|
my $hook = shift @_;
|
||||||
|
my $package = shift @_;
|
||||||
|
($package) = caller unless $package;
|
||||||
|
my $pkg_info = Xchat::Embed::pkg_info( $package );
|
||||||
|
|
||||||
|
if( defined( $hook )
|
||||||
|
&& $hook =~ /^\d+$/
|
||||||
|
&& grep { $_ == $hook } @{$pkg_info->{hooks}} ) {
|
||||||
|
$pkg_info->{hooks} = [grep { $_ != $hook } @{$pkg_info->{hooks}}];
|
||||||
|
return Xchat::Internal::unhook( $hook );
|
||||||
|
}
|
||||||
|
return ();
|
||||||
|
}
|
||||||
|
|
||||||
|
sub _do_for_each {
|
||||||
|
my ($cb, $channels, $servers) = @_;
|
||||||
|
|
||||||
|
# not specifying any channels or servers is not the same as specifying
|
||||||
|
# undef for both
|
||||||
|
# - not specifying either results in calling the callback inthe current ctx
|
||||||
|
# - specifying undef for for both results in calling the callback in the
|
||||||
|
# front/currently selected tab
|
||||||
|
if( @_ == 3 && !($channels || $servers) ) {
|
||||||
|
$channels = [ undef ];
|
||||||
|
$servers = [ undef ];
|
||||||
|
} elsif( !($channels || $servers) ) {
|
||||||
|
$cb->();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
$channels = [ $channels ] unless ref( $channels ) eq 'ARRAY';
|
||||||
|
|
||||||
|
if( $servers ) {
|
||||||
|
$servers = [ $servers ] unless ref( $servers ) eq 'ARRAY';
|
||||||
|
} else {
|
||||||
|
$servers = [ undef ];
|
||||||
|
}
|
||||||
|
|
||||||
|
my $num_done = 0;
|
||||||
|
my $old_ctx = Xchat::get_context();
|
||||||
|
for my $server ( @$servers ) {
|
||||||
|
for my $channel ( @$channels ) {
|
||||||
|
if( Xchat::set_context( $channel, $server ) ) {
|
||||||
|
$cb->();
|
||||||
|
$num_done++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Xchat::set_context( $old_ctx );
|
||||||
|
return $num_done;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub print {
|
||||||
|
my $text = shift @_;
|
||||||
|
return "" unless defined $text;
|
||||||
|
if( ref( $text ) eq 'ARRAY' ) {
|
||||||
|
if( $, ) {
|
||||||
|
$text = join $, , @$text;
|
||||||
|
} else {
|
||||||
|
$text = join "", @$text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return _do_for_each(
|
||||||
|
sub { Xchat::Internal::print( $text ); },
|
||||||
|
@_
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub printf {
|
||||||
|
my $format = shift;
|
||||||
|
Xchat::print( sprintf( $format, @_ ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
# make Xchat::prnt() and Xchat::prntf() as aliases for Xchat::print() and
|
||||||
|
# Xchat::printf(), mainly useful when these functions are exported
|
||||||
|
sub prnt {
|
||||||
|
goto &Xchat::print;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub prntf {
|
||||||
|
goto &Xchat::printf;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub command {
|
||||||
|
my $command = shift;
|
||||||
|
return "" unless defined $command;
|
||||||
|
my @commands;
|
||||||
|
|
||||||
|
if( ref( $command ) eq 'ARRAY' ) {
|
||||||
|
@commands = @$command;
|
||||||
|
} else {
|
||||||
|
@commands = ($command);
|
||||||
|
}
|
||||||
|
|
||||||
|
return _do_for_each(
|
||||||
|
sub { Xchat::Internal::command( $_ ) foreach @commands },
|
||||||
|
@_
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub commandf {
|
||||||
|
my $format = shift;
|
||||||
|
Xchat::command( sprintf( $format, @_ ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
sub set_context {
|
||||||
|
my $context;
|
||||||
|
if( @_ == 2 ) {
|
||||||
|
my ($channel, $server) = @_;
|
||||||
|
$context = Xchat::find_context( $channel, $server );
|
||||||
|
} elsif( @_ == 1 ) {
|
||||||
|
if( defined $_[0] && $_[0] =~ /^\d+$/ ) {
|
||||||
|
$context = $_[0];
|
||||||
|
} else {
|
||||||
|
$context = Xchat::find_context( $_[0] );
|
||||||
|
}
|
||||||
|
} elsif( @_ == 0 ) {
|
||||||
|
$context = Xchat::find_context();
|
||||||
|
}
|
||||||
|
return $context ? Xchat::Internal::set_context( $context ) : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub get_info {
|
||||||
|
my $id = shift;
|
||||||
|
my $info;
|
||||||
|
|
||||||
|
if( defined( $id ) ) {
|
||||||
|
if( grep { $id eq $_ } qw(state_cursor id) ) {
|
||||||
|
$info = Xchat::get_prefs( $id );
|
||||||
|
} else {
|
||||||
|
$info = Xchat::Internal::get_info( $id );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $info;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub user_info {
|
||||||
|
my $nick = Xchat::strip_code(shift @_ || Xchat::get_info( "nick" ));
|
||||||
|
my $user;
|
||||||
|
for (Xchat::get_list( "users" ) ) {
|
||||||
|
if ( Xchat::nickcmp( $_->{nick}, $nick ) == 0 ) {
|
||||||
|
$user = $_;
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $user;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub context_info {
|
||||||
|
my $ctx = shift @_ || Xchat::get_context;
|
||||||
|
my $old_ctx = Xchat::get_context;
|
||||||
|
my @fields = (
|
||||||
|
qw(away channel charset host id inputbox libdirfs modes network),
|
||||||
|
qw(nick nickserv server topic version win_ptr win_status),
|
||||||
|
qw(configdir xchatdir xchatdirfs state_cursor),
|
||||||
|
);
|
||||||
|
|
||||||
|
if( Xchat::set_context( $ctx ) ) {
|
||||||
|
my %info;
|
||||||
|
for my $field ( @fields ) {
|
||||||
|
$info{$field} = Xchat::get_info( $field );
|
||||||
|
}
|
||||||
|
|
||||||
|
my $ctx_info = Xchat::Internal::context_info;
|
||||||
|
@info{keys %$ctx_info} = values %$ctx_info;
|
||||||
|
|
||||||
|
Xchat::set_context( $old_ctx );
|
||||||
|
return %info if wantarray;
|
||||||
|
return \%info;
|
||||||
|
} else {
|
||||||
|
return undef;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub get_list {
|
||||||
|
unless( grep { $_[0] eq $_ } qw(channels dcc ignore notify users networks) ) {
|
||||||
|
Carp::carp( "'$_[0]' does not appear to be a valid list name" );
|
||||||
|
}
|
||||||
|
if( $_[0] eq 'networks' ) {
|
||||||
|
return Xchat::List::Network->get();
|
||||||
|
} else {
|
||||||
|
return Xchat::Internal::get_list( $_[0] );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub strip_code {
|
||||||
|
my $pattern = qr<
|
||||||
|
\cB| #Bold
|
||||||
|
\cC\d{0,2}(?:,\d{1,2})?| #Color
|
||||||
|
\e\[(?:\d{1,2}(?:;\d{1,2})*)?m| # ANSI color code
|
||||||
|
\cG| #Beep
|
||||||
|
\cO| #Reset
|
||||||
|
\cV| #Reverse
|
||||||
|
\c_ #Underline
|
||||||
|
>x;
|
||||||
|
|
||||||
|
if( defined wantarray ) {
|
||||||
|
my $msg = shift;
|
||||||
|
$msg =~ s/$pattern//g;
|
||||||
|
return $msg;
|
||||||
|
} else {
|
||||||
|
$_[0] =~ s/$pattern//g if defined $_[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
1
|
||||||
|
1362
plugins/perl/lib/Xchat.pod
Normal file
1362
plugins/perl/lib/Xchat.pod
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,6 @@
|
|||||||
package HexChat::Embed;
|
package Xchat::Embed;
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use Data::Dumper;
|
|
||||||
# list of loaded scripts keyed by their package names
|
# list of loaded scripts keyed by their package names
|
||||||
# The package names are generated from the filename of the script using
|
# The package names are generated from the filename of the script using
|
||||||
# the file2pkg() function.
|
# the file2pkg() function.
|
||||||
@ -43,11 +42,11 @@ sub load {
|
|||||||
if( exists $scripts{$package} ) {
|
if( exists $scripts{$package} ) {
|
||||||
my $pkg_info = pkg_info( $package );
|
my $pkg_info = pkg_info( $package );
|
||||||
my $filename = File::Basename::basename( $pkg_info->{filename} );
|
my $filename = File::Basename::basename( $pkg_info->{filename} );
|
||||||
HexChat::printf(
|
Xchat::printf(
|
||||||
qq{'%s' already loaded from '%s'.\n},
|
qq{'%s' already loaded from '%s'.\n},
|
||||||
$filename, $pkg_info->{filename}
|
$filename, $pkg_info->{filename}
|
||||||
);
|
);
|
||||||
HexChat::print(
|
Xchat::print(
|
||||||
'If this is a different script then it rename and try '.
|
'If this is a different script then it rename and try '.
|
||||||
'loading it again.'
|
'loading it again.'
|
||||||
);
|
);
|
||||||
@ -61,7 +60,7 @@ sub load {
|
|||||||
$source =~ s/^__END__.*//ms;
|
$source =~ s/^__END__.*//ms;
|
||||||
|
|
||||||
# this must come before the eval or the filename will not be found in
|
# this must come before the eval or the filename will not be found in
|
||||||
# HexChat::register
|
# Xchat::register
|
||||||
$scripts{$package}{filename} = $file;
|
$scripts{$package}{filename} = $file;
|
||||||
$scripts{$package}{loaded_at} = Time::HiRes::time();
|
$scripts{$package}{loaded_at} = Time::HiRes::time();
|
||||||
|
|
||||||
@ -94,7 +93,7 @@ sub load {
|
|||||||
$error_message .= " $conflict_package already defined in " .
|
$error_message .= " $conflict_package already defined in " .
|
||||||
pkg_info($owner_package{ $conflict_package })->{filename}."\n";
|
pkg_info($owner_package{ $conflict_package })->{filename}."\n";
|
||||||
}
|
}
|
||||||
HexChat::print( $error_message );
|
Xchat::print( $error_message );
|
||||||
|
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
@ -115,7 +114,7 @@ sub load {
|
|||||||
|
|
||||||
unless( exists $scripts{$package}{gui_entry} ) {
|
unless( exists $scripts{$package}{gui_entry} ) {
|
||||||
$scripts{$package}{gui_entry} =
|
$scripts{$package}{gui_entry} =
|
||||||
HexChat::Internal::register(
|
Xchat::Internal::register(
|
||||||
"", "unknown", "", $file
|
"", "unknown", "", $file
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -123,13 +122,13 @@ sub load {
|
|||||||
if( $@ ) {
|
if( $@ ) {
|
||||||
# something went wrong
|
# something went wrong
|
||||||
$@ =~ s/\(eval \d+\)/$file/g;
|
$@ =~ s/\(eval \d+\)/$file/g;
|
||||||
HexChat::print( "Error loading '$file':\n$@\n" );
|
Xchat::print( "Error loading '$file':\n$@\n" );
|
||||||
# make sure the script list doesn't contain false information
|
# make sure the script list doesn't contain false information
|
||||||
unload( $scripts{$package}{filename} );
|
unload( $scripts{$package}{filename} );
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
HexChat::print( "Error opening '$file': $!\n" );
|
Xchat::print( "Error opening '$file': $!\n" );
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -163,7 +162,7 @@ sub unload {
|
|||||||
|
|
||||||
if( exists $pkg_info->{hooks} ) {
|
if( exists $pkg_info->{hooks} ) {
|
||||||
for my $hook ( @{$pkg_info->{hooks}} ) {
|
for my $hook ( @{$pkg_info->{hooks}} ) {
|
||||||
HexChat::unhook( $hook, $package );
|
Xchat::unhook( $hook, $package );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -177,10 +176,10 @@ sub unload {
|
|||||||
}
|
}
|
||||||
Symbol::delete_package( $package );
|
Symbol::delete_package( $package );
|
||||||
delete $scripts{$package};
|
delete $scripts{$package};
|
||||||
return HexChat::EAT_ALL;
|
return Xchat::EAT_ALL;
|
||||||
} else {
|
} else {
|
||||||
HexChat::print( qq{"$file" is not loaded.\n} );
|
Xchat::print( qq{"$file" is not loaded.\n} );
|
||||||
return HexChat::EAT_NONE;
|
return Xchat::EAT_NONE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -189,7 +188,7 @@ sub unload_all {
|
|||||||
unload( $scripts{$package}->{filename} );
|
unload( $scripts{$package}->{filename} );
|
||||||
}
|
}
|
||||||
|
|
||||||
return HexChat::EAT_ALL;
|
return Xchat::EAT_ALL;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub reload {
|
sub reload {
|
||||||
@ -204,11 +203,11 @@ sub reload {
|
|||||||
}
|
}
|
||||||
|
|
||||||
load( $fullpath );
|
load( $fullpath );
|
||||||
return HexChat::EAT_ALL;
|
return Xchat::EAT_ALL;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub reload_all {
|
sub reload_all {
|
||||||
my @dirs = HexChat::get_info( "configdir" );
|
my @dirs = Xchat::get_info( "configdir" );
|
||||||
push @dirs, File::Spec->catdir( $dirs[0], "plugins" );
|
push @dirs, File::Spec->catdir( $dirs[0], "plugins" );
|
||||||
for my $dir ( @dirs ) {
|
for my $dir ( @dirs ) {
|
||||||
my $auto_load_glob = File::Spec->catfile( $dir, "*.pl" );
|
my $auto_load_glob = File::Spec->catfile( $dir, "*.pl" );
|
||||||
@ -228,28 +227,6 @@ sub reload_all {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sub evaluate {
|
|
||||||
my ($code) = @_;
|
|
||||||
|
|
||||||
my @results = eval $code;
|
|
||||||
HexChat::print $@ if $@; #print warnings
|
|
||||||
|
|
||||||
local $Data::Dumper::Sortkeys = 1;
|
|
||||||
local $Data::Dumper::Terse = 1;
|
|
||||||
|
|
||||||
if (@results > 1) {
|
|
||||||
HexChat::print Dumper \@results;
|
|
||||||
}
|
|
||||||
elsif (ref $results[0] || !$results[0]) {
|
|
||||||
HexChat::print Dumper $results[0];
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
HexChat::print $results[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
return HexChat::EAT_HEXCHAT;
|
|
||||||
};
|
|
||||||
|
|
||||||
sub expand_homedir {
|
sub expand_homedir {
|
||||||
my $file = shift @_;
|
my $file = shift @_;
|
||||||
|
|
||||||
@ -267,7 +244,7 @@ sub file2pkg {
|
|||||||
my $string = File::Basename::basename( shift @_ );
|
my $string = File::Basename::basename( shift @_ );
|
||||||
$string =~ s/\.pl$//i;
|
$string =~ s/\.pl$//i;
|
||||||
$string =~ s|([^A-Za-z0-9/])|'_'.unpack("H*",$1)|eg;
|
$string =~ s|([^A-Za-z0-9/])|'_'.unpack("H*",$1)|eg;
|
||||||
return "HexChat::Script::" . $string;
|
return "Xchat::Script::" . $string;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub pkg_info {
|
sub pkg_info {
|
||||||
@ -279,7 +256,7 @@ sub find_external_pkg {
|
|||||||
my $level = 1;
|
my $level = 1;
|
||||||
|
|
||||||
while( my @frame = caller( $level ) ) {
|
while( my @frame = caller( $level ) ) {
|
||||||
return @frame if $frame[0] !~ /(?:^IRC$|^HexChat)/;
|
return @frame if $frame[0] !~ /(?:^IRC$|^Xchat)/;
|
||||||
$level++;
|
$level++;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -289,7 +266,7 @@ sub find_pkg {
|
|||||||
my $level = 1;
|
my $level = 1;
|
||||||
|
|
||||||
while( my ($package, $file, $line) = caller( $level ) ) {
|
while( my ($package, $file, $line) = caller( $level ) ) {
|
||||||
return $package if $package =~ /^HexChat::Script::/;
|
return $package if $package =~ /^Xchat::Script::/;
|
||||||
$level++;
|
$level++;
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
package HexChat::List::Network;
|
package Xchat::List::Network;
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
use Storable qw(dclone);
|
use Storable qw(dclone);
|
||||||
@ -6,7 +6,7 @@ my $last_modified;
|
|||||||
my @servers;
|
my @servers;
|
||||||
|
|
||||||
sub get {
|
sub get {
|
||||||
my $server_file = HexChat::get_info( "configdir" ) . "/servlist.conf";
|
my $server_file = Xchat::get_info( "configdir" ) . "/servlist.conf";
|
||||||
|
|
||||||
# recreate the list only if the server list file has changed
|
# recreate the list only if the server list file has changed
|
||||||
if( -f $server_file &&
|
if( -f $server_file &&
|
||||||
@ -19,7 +19,7 @@ sub get {
|
|||||||
while( my $record = <$fh> ) {
|
while( my $record = <$fh> ) {
|
||||||
chomp $record;
|
chomp $record;
|
||||||
next if $record =~ /^v=/; # skip the version line
|
next if $record =~ /^v=/; # skip the version line
|
||||||
push @servers, HexChat::List::Network::Entry::parse( $record );
|
push @servers, Xchat::List::Network::Entry::parse( $record );
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
warn "Unable to open '$server_file': $!";
|
warn "Unable to open '$server_file': $!";
|
@ -1,4 +1,4 @@
|
|||||||
package HexChat::List::Network::AutoJoin;
|
package Xchat::List::Network::AutoJoin;
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
package HexChat::List::Network::Entry;
|
package Xchat::List::Network::Entry;
|
||||||
use strict;
|
use strict;
|
||||||
use warnings;
|
use warnings;
|
||||||
|
|
||||||
@ -26,7 +26,7 @@ sub parse {
|
|||||||
|
|
||||||
# the order of the channels need to be maintained
|
# the order of the channels need to be maintained
|
||||||
# list of { channel => .., key => ... }
|
# list of { channel => .., key => ... }
|
||||||
autojoins => HexChat::List::Network::AutoJoin->new( '' ),
|
autojoins => Xchat::List::Network::AutoJoin->new( '' ),
|
||||||
connect_commands => [],
|
connect_commands => [],
|
||||||
flags => {},
|
flags => {},
|
||||||
selected => undef,
|
selected => undef,
|
||||||
@ -39,7 +39,7 @@ sub parse {
|
|||||||
my @fields = split /\n/, $data;
|
my @fields = split /\n/, $data;
|
||||||
chomp @fields;
|
chomp @fields;
|
||||||
|
|
||||||
$entry->{ autojoins } = HexChat::List::Network::AutoJoin->new();
|
$entry->{ autojoins } = Xchat::List::Network::AutoJoin->new();
|
||||||
|
|
||||||
for my $field ( @fields ) {
|
for my $field ( @fields ) {
|
||||||
SWITCH: for ( $field ) {
|
SWITCH: for ( $field ) {
|
@ -323,11 +323,11 @@ array2av (char *array[])
|
|||||||
return av;
|
return av;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* sets $HexChat::Embed::current_package */
|
/* sets $Xchat::Embed::current_package */
|
||||||
static void
|
static void
|
||||||
set_current_package (SV *package)
|
set_current_package (SV *package)
|
||||||
{
|
{
|
||||||
SV *current_package = get_sv ("HexChat::Embed::current_package", 1);
|
SV *current_package = get_sv ("Xchat::Embed::current_package", 1);
|
||||||
SvSetSV_nosteal (current_package, package);
|
SvSetSV_nosteal (current_package, package);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -367,7 +367,7 @@ fd_cb (int fd, int flags, void *userdata)
|
|||||||
XPUSHs (sv_2mortal (newSViv (PTR2IV (data->hook))));
|
XPUSHs (sv_2mortal (newSViv (PTR2IV (data->hook))));
|
||||||
PUTBACK;
|
PUTBACK;
|
||||||
|
|
||||||
call_pv ("HexChat::unhook", G_EVAL);
|
call_pv ("Xchat::unhook", G_EVAL);
|
||||||
SPAGAIN;
|
SPAGAIN;
|
||||||
|
|
||||||
SvREFCNT_dec (data->callback);
|
SvREFCNT_dec (data->callback);
|
||||||
@ -408,7 +408,7 @@ timer_cb (void *userdata)
|
|||||||
}
|
}
|
||||||
|
|
||||||
set_current_package (data->package);
|
set_current_package (data->package);
|
||||||
count = call_sv (data->callback, G_EVAL | G_KEEPERR);
|
count = call_sv (data->callback, G_EVAL);
|
||||||
set_current_package (&PL_sv_undef);
|
set_current_package (&PL_sv_undef);
|
||||||
SPAGAIN;
|
SPAGAIN;
|
||||||
|
|
||||||
@ -429,7 +429,7 @@ timer_cb (void *userdata)
|
|||||||
XPUSHs (sv_mortalcopy (data->package));
|
XPUSHs (sv_mortalcopy (data->package));
|
||||||
PUTBACK;
|
PUTBACK;
|
||||||
|
|
||||||
call_pv ("HexChat::unhook", G_EVAL);
|
call_pv ("Xchat::unhook", G_EVAL);
|
||||||
SPAGAIN;
|
SPAGAIN;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -458,7 +458,7 @@ server_cb (char *word[], char *word_eol[], void *userdata)
|
|||||||
return HEXCHAT_EAT_NONE;
|
return HEXCHAT_EAT_NONE;
|
||||||
|
|
||||||
/* hexchat_printf (ph, */
|
/* hexchat_printf (ph, */
|
||||||
/* "Received %d words in server callback", av_len (wd)); */
|
/* "Recieved %d words in server callback", av_len (wd)); */
|
||||||
PUSHMARK (SP);
|
PUSHMARK (SP);
|
||||||
XPUSHs (newRV_noinc ((SV *) array2av (word)));
|
XPUSHs (newRV_noinc ((SV *) array2av (word)));
|
||||||
XPUSHs (newRV_noinc ((SV *) array2av (word_eol)));
|
XPUSHs (newRV_noinc ((SV *) array2av (word_eol)));
|
||||||
@ -467,7 +467,7 @@ server_cb (char *word[], char *word_eol[], void *userdata)
|
|||||||
|
|
||||||
data->depth++;
|
data->depth++;
|
||||||
set_current_package (data->package);
|
set_current_package (data->package);
|
||||||
count = call_sv (data->callback, G_EVAL | G_KEEPERR);
|
count = call_sv (data->callback, G_EVAL);
|
||||||
set_current_package (&PL_sv_undef);
|
set_current_package (&PL_sv_undef);
|
||||||
data->depth--;
|
data->depth--;
|
||||||
SPAGAIN;
|
SPAGAIN;
|
||||||
@ -506,7 +506,7 @@ command_cb (char *word[], char *word_eol[], void *userdata)
|
|||||||
if (data->depth)
|
if (data->depth)
|
||||||
return HEXCHAT_EAT_NONE;
|
return HEXCHAT_EAT_NONE;
|
||||||
|
|
||||||
/* hexchat_printf (ph, "Received %d words in command callback", */
|
/* hexchat_printf (ph, "Recieved %d words in command callback", */
|
||||||
/* av_len (wd)); */
|
/* av_len (wd)); */
|
||||||
PUSHMARK (SP);
|
PUSHMARK (SP);
|
||||||
XPUSHs (newRV_noinc ((SV *) array2av (word)));
|
XPUSHs (newRV_noinc ((SV *) array2av (word)));
|
||||||
@ -516,7 +516,7 @@ command_cb (char *word[], char *word_eol[], void *userdata)
|
|||||||
|
|
||||||
data->depth++;
|
data->depth++;
|
||||||
set_current_package (data->package);
|
set_current_package (data->package);
|
||||||
count = call_sv (data->callback, G_EVAL | G_KEEPERR);
|
count = call_sv (data->callback, G_EVAL);
|
||||||
set_current_package (&PL_sv_undef);
|
set_current_package (&PL_sv_undef);
|
||||||
data->depth--;
|
data->depth--;
|
||||||
SPAGAIN;
|
SPAGAIN;
|
||||||
@ -584,7 +584,7 @@ print_cb (char *word[], void *userdata)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*hexchat_printf (ph, "Received %d words in print callback", av_len (wd)+1); */
|
/*hexchat_printf (ph, "Recieved %d words in print callback", av_len (wd)+1); */
|
||||||
PUSHMARK (SP);
|
PUSHMARK (SP);
|
||||||
XPUSHs (newRV_noinc ((SV *) wd));
|
XPUSHs (newRV_noinc ((SV *) wd));
|
||||||
XPUSHs (data->userdata);
|
XPUSHs (data->userdata);
|
||||||
@ -592,7 +592,7 @@ print_cb (char *word[], void *userdata)
|
|||||||
|
|
||||||
data->depth++;
|
data->depth++;
|
||||||
set_current_package (data->package);
|
set_current_package (data->package);
|
||||||
count = call_sv (data->callback, G_EVAL | G_KEEPERR);
|
count = call_sv (data->callback, G_EVAL);
|
||||||
set_current_package (&PL_sv_undef);
|
set_current_package (&PL_sv_undef);
|
||||||
data->depth--;
|
data->depth--;
|
||||||
SPAGAIN;
|
SPAGAIN;
|
||||||
@ -619,19 +619,19 @@ print_cb (char *word[], void *userdata)
|
|||||||
|
|
||||||
/* custom IRC perl functions for scripting */
|
/* custom IRC perl functions for scripting */
|
||||||
|
|
||||||
/* HexChat::Internal::register (scriptname, version, desc, shutdowncallback, filename)
|
/* Xchat::Internal::register (scriptname, version, desc, shutdowncallback, filename)
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static
|
static
|
||||||
XS (XS_HexChat_register)
|
XS (XS_Xchat_register)
|
||||||
{
|
{
|
||||||
char *name, *version, *desc, *filename;
|
char *name, *version, *desc, *filename;
|
||||||
void *gui_entry;
|
void *gui_entry;
|
||||||
dXSARGS;
|
dXSARGS;
|
||||||
if (items != 4) {
|
if (items != 4) {
|
||||||
hexchat_printf (ph,
|
hexchat_printf (ph,
|
||||||
"Usage: HexChat::Internal::register(scriptname, version, desc, filename)");
|
"Usage: Xchat::Internal::register(scriptname, version, desc, filename)");
|
||||||
} else {
|
} else {
|
||||||
name = SvPV_nolen (ST (0));
|
name = SvPV_nolen (ST (0));
|
||||||
version = SvPV_nolen (ST (1));
|
version = SvPV_nolen (ST (1));
|
||||||
@ -647,16 +647,16 @@ XS (XS_HexChat_register)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* HexChat::print(output) */
|
/* Xchat::print(output) */
|
||||||
static
|
static
|
||||||
XS (XS_HexChat_print)
|
XS (XS_Xchat_print)
|
||||||
{
|
{
|
||||||
|
|
||||||
char *text = NULL;
|
char *text = NULL;
|
||||||
|
|
||||||
dXSARGS;
|
dXSARGS;
|
||||||
if (items != 1) {
|
if (items != 1) {
|
||||||
hexchat_print (ph, "Usage: HexChat::Internal::print(text)");
|
hexchat_print (ph, "Usage: Xchat::Internal::print(text)");
|
||||||
} else {
|
} else {
|
||||||
text = SvPV_nolen (ST (0));
|
text = SvPV_nolen (ST (0));
|
||||||
hexchat_print (ph, text);
|
hexchat_print (ph, text);
|
||||||
@ -665,7 +665,7 @@ XS (XS_HexChat_print)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
XS (XS_HexChat_emit_print)
|
XS (XS_Xchat_emit_print)
|
||||||
{
|
{
|
||||||
char *event_name;
|
char *event_name;
|
||||||
int RETVAL;
|
int RETVAL;
|
||||||
@ -673,7 +673,7 @@ XS (XS_HexChat_emit_print)
|
|||||||
|
|
||||||
dXSARGS;
|
dXSARGS;
|
||||||
if (items < 1) {
|
if (items < 1) {
|
||||||
hexchat_print (ph, "Usage: HexChat::emit_print(event_name, ...)");
|
hexchat_print (ph, "Usage: Xchat::emit_print(event_name, ...)");
|
||||||
} else {
|
} else {
|
||||||
event_name = (char *) SvPV_nolen (ST (0));
|
event_name = (char *) SvPV_nolen (ST (0));
|
||||||
RETVAL = 0;
|
RETVAL = 0;
|
||||||
@ -719,7 +719,7 @@ XS (XS_HexChat_emit_print)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
XS (XS_HexChat_send_modes)
|
XS (XS_Xchat_send_modes)
|
||||||
{
|
{
|
||||||
AV *p_targets = NULL;
|
AV *p_targets = NULL;
|
||||||
int modes_per_line = 0;
|
int modes_per_line = 0;
|
||||||
@ -733,7 +733,7 @@ XS (XS_HexChat_send_modes)
|
|||||||
dXSARGS;
|
dXSARGS;
|
||||||
if (items < 3 || items > 4) {
|
if (items < 3 || items > 4) {
|
||||||
hexchat_print (ph,
|
hexchat_print (ph,
|
||||||
"Usage: HexChat::send_modes( targets, sign, mode, modes_per_line)"
|
"Usage: Xchat::send_modes( targets, sign, mode, modes_per_line)"
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
if (SvROK (ST (0))) {
|
if (SvROK (ST (0))) {
|
||||||
@ -756,7 +756,6 @@ XS (XS_HexChat_send_modes)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (target_count == 0) {
|
if (target_count == 0) {
|
||||||
free (targets);
|
|
||||||
XSRETURN_EMPTY;
|
XSRETURN_EMPTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -772,12 +771,12 @@ XS (XS_HexChat_send_modes)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
static
|
static
|
||||||
XS (XS_HexChat_get_info)
|
XS (XS_Xchat_get_info)
|
||||||
{
|
{
|
||||||
SV *temp = NULL;
|
SV *temp = NULL;
|
||||||
dXSARGS;
|
dXSARGS;
|
||||||
if (items != 1) {
|
if (items != 1) {
|
||||||
hexchat_print (ph, "Usage: HexChat::get_info(id)");
|
hexchat_print (ph, "Usage: Xchat::get_info(id)");
|
||||||
} else {
|
} else {
|
||||||
SV *id = ST (0);
|
SV *id = ST (0);
|
||||||
const char *RETVAL;
|
const char *RETVAL;
|
||||||
@ -811,13 +810,13 @@ XS (XS_HexChat_get_info)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
XS (XS_HexChat_context_info)
|
XS (XS_Xchat_context_info)
|
||||||
{
|
{
|
||||||
const char *const *fields;
|
const char *const *fields;
|
||||||
dXSARGS;
|
dXSARGS;
|
||||||
|
|
||||||
if (items > 0 ) {
|
if (items > 0 ) {
|
||||||
hexchat_print (ph, "Usage: HexChat::Internal::context_info()");
|
hexchat_print (ph, "Usage: Xchat::Internal::context_info()");
|
||||||
}
|
}
|
||||||
fields = hexchat_list_fields (ph, "channels" );
|
fields = hexchat_list_fields (ph, "channels" );
|
||||||
XPUSHs (list_item_to_sv (NULL, fields));
|
XPUSHs (list_item_to_sv (NULL, fields));
|
||||||
@ -825,14 +824,14 @@ XS (XS_HexChat_context_info)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
XS (XS_HexChat_get_prefs)
|
XS (XS_Xchat_get_prefs)
|
||||||
{
|
{
|
||||||
const char *str;
|
const char *str;
|
||||||
int integer;
|
int integer;
|
||||||
SV *temp = NULL;
|
SV *temp = NULL;
|
||||||
dXSARGS;
|
dXSARGS;
|
||||||
if (items != 1) {
|
if (items != 1) {
|
||||||
hexchat_print (ph, "Usage: HexChat::get_prefs(name)");
|
hexchat_print (ph, "Usage: Xchat::get_prefs(name)");
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
|
||||||
@ -861,9 +860,9 @@ XS (XS_HexChat_get_prefs)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* HexChat::Internal::hook_server(name, priority, callback, userdata) */
|
/* Xchat::Internal::hook_server(name, priority, callback, userdata) */
|
||||||
static
|
static
|
||||||
XS (XS_HexChat_hook_server)
|
XS (XS_Xchat_hook_server)
|
||||||
{
|
{
|
||||||
|
|
||||||
char *name;
|
char *name;
|
||||||
@ -878,7 +877,7 @@ XS (XS_HexChat_hook_server)
|
|||||||
|
|
||||||
if (items != 5) {
|
if (items != 5) {
|
||||||
hexchat_print (ph,
|
hexchat_print (ph,
|
||||||
"Usage: HexChat::Internal::hook_server(name, priority, callback, userdata, package)");
|
"Usage: Xchat::Internal::hook_server(name, priority, callback, userdata, package)");
|
||||||
} else {
|
} else {
|
||||||
name = SvPV_nolen (ST (0));
|
name = SvPV_nolen (ST (0));
|
||||||
pri = (int) SvIV (ST (1));
|
pri = (int) SvIV (ST (1));
|
||||||
@ -902,9 +901,9 @@ XS (XS_HexChat_hook_server)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* HexChat::Internal::hook_command(name, priority, callback, help_text, userdata) */
|
/* Xchat::Internal::hook_command(name, priority, callback, help_text, userdata) */
|
||||||
static
|
static
|
||||||
XS (XS_HexChat_hook_command)
|
XS (XS_Xchat_hook_command)
|
||||||
{
|
{
|
||||||
char *name;
|
char *name;
|
||||||
int pri;
|
int pri;
|
||||||
@ -919,7 +918,7 @@ XS (XS_HexChat_hook_command)
|
|||||||
|
|
||||||
if (items != 6) {
|
if (items != 6) {
|
||||||
hexchat_print (ph,
|
hexchat_print (ph,
|
||||||
"Usage: HexChat::Internal::hook_command(name, priority, callback, help_text, userdata, package)");
|
"Usage: Xchat::Internal::hook_command(name, priority, callback, help_text, userdata, package)");
|
||||||
} else {
|
} else {
|
||||||
name = SvPV_nolen (ST (0));
|
name = SvPV_nolen (ST (0));
|
||||||
pri = (int) SvIV (ST (1));
|
pri = (int) SvIV (ST (1));
|
||||||
@ -951,9 +950,9 @@ XS (XS_HexChat_hook_command)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* HexChat::Internal::hook_print(name, priority, callback, [userdata]) */
|
/* Xchat::Internal::hook_print(name, priority, callback, [userdata]) */
|
||||||
static
|
static
|
||||||
XS (XS_HexChat_hook_print)
|
XS (XS_Xchat_hook_print)
|
||||||
{
|
{
|
||||||
|
|
||||||
char *name;
|
char *name;
|
||||||
@ -966,7 +965,7 @@ XS (XS_HexChat_hook_print)
|
|||||||
dXSARGS;
|
dXSARGS;
|
||||||
if (items != 5) {
|
if (items != 5) {
|
||||||
hexchat_print (ph,
|
hexchat_print (ph,
|
||||||
"Usage: HexChat::Internal::hook_print(name, priority, callback, userdata, package)");
|
"Usage: Xchat::Internal::hook_print(name, priority, callback, userdata, package)");
|
||||||
} else {
|
} else {
|
||||||
name = SvPV_nolen (ST (0));
|
name = SvPV_nolen (ST (0));
|
||||||
pri = (int) SvIV (ST (1));
|
pri = (int) SvIV (ST (1));
|
||||||
@ -990,9 +989,9 @@ XS (XS_HexChat_hook_print)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* HexChat::Internal::hook_timer(timeout, callback, userdata) */
|
/* Xchat::Internal::hook_timer(timeout, callback, userdata) */
|
||||||
static
|
static
|
||||||
XS (XS_HexChat_hook_timer)
|
XS (XS_Xchat_hook_timer)
|
||||||
{
|
{
|
||||||
int timeout;
|
int timeout;
|
||||||
SV *callback;
|
SV *callback;
|
||||||
@ -1005,7 +1004,7 @@ XS (XS_HexChat_hook_timer)
|
|||||||
|
|
||||||
if (items != 4) {
|
if (items != 4) {
|
||||||
hexchat_print (ph,
|
hexchat_print (ph,
|
||||||
"Usage: HexChat::Internal::hook_timer(timeout, callback, userdata, package)");
|
"Usage: Xchat::Internal::hook_timer(timeout, callback, userdata, package)");
|
||||||
} else {
|
} else {
|
||||||
timeout = (int) SvIV (ST (0));
|
timeout = (int) SvIV (ST (0));
|
||||||
callback = ST (1);
|
callback = ST (1);
|
||||||
@ -1029,9 +1028,9 @@ XS (XS_HexChat_hook_timer)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* HexChat::Internal::hook_fd(fd, callback, flags, userdata) */
|
/* Xchat::Internal::hook_fd(fd, callback, flags, userdata) */
|
||||||
static
|
static
|
||||||
XS (XS_HexChat_hook_fd)
|
XS (XS_Xchat_hook_fd)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
SV *callback;
|
SV *callback;
|
||||||
@ -1045,7 +1044,7 @@ XS (XS_HexChat_hook_fd)
|
|||||||
|
|
||||||
if (items != 5) {
|
if (items != 5) {
|
||||||
hexchat_print (ph,
|
hexchat_print (ph,
|
||||||
"Usage: HexChat::Internal::hook_fd(fd, callback, flags, userdata)");
|
"Usage: Xchat::Internal::hook_fd(fd, callback, flags, userdata)");
|
||||||
} else {
|
} else {
|
||||||
fd = (int) SvIV (ST (0));
|
fd = (int) SvIV (ST (0));
|
||||||
callback = ST (1);
|
callback = ST (1);
|
||||||
@ -1084,14 +1083,14 @@ XS (XS_HexChat_hook_fd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
XS (XS_HexChat_unhook)
|
XS (XS_Xchat_unhook)
|
||||||
{
|
{
|
||||||
hexchat_hook *hook;
|
hexchat_hook *hook;
|
||||||
HookData *userdata;
|
HookData *userdata;
|
||||||
int retCount = 0;
|
int retCount = 0;
|
||||||
dXSARGS;
|
dXSARGS;
|
||||||
if (items != 1) {
|
if (items != 1) {
|
||||||
hexchat_print (ph, "Usage: HexChat::unhook(hook)");
|
hexchat_print (ph, "Usage: Xchat::unhook(hook)");
|
||||||
} else {
|
} else {
|
||||||
hook = INT2PTR (hexchat_hook *, SvUV (ST (0)));
|
hook = INT2PTR (hexchat_hook *, SvUV (ST (0)));
|
||||||
userdata = (HookData *) hexchat_unhook (ph, hook);
|
userdata = (HookData *) hexchat_unhook (ph, hook);
|
||||||
@ -1118,15 +1117,15 @@ XS (XS_HexChat_unhook)
|
|||||||
XSRETURN_EMPTY;
|
XSRETURN_EMPTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* HexChat::Internal::command(command) */
|
/* Xchat::Internal::command(command) */
|
||||||
static
|
static
|
||||||
XS (XS_HexChat_command)
|
XS (XS_Xchat_command)
|
||||||
{
|
{
|
||||||
char *cmd = NULL;
|
char *cmd = NULL;
|
||||||
|
|
||||||
dXSARGS;
|
dXSARGS;
|
||||||
if (items != 1) {
|
if (items != 1) {
|
||||||
hexchat_print (ph, "Usage: HexChat::Internal::command(command)");
|
hexchat_print (ph, "Usage: Xchat::Internal::command(command)");
|
||||||
} else {
|
} else {
|
||||||
cmd = SvPV_nolen (ST (0));
|
cmd = SvPV_nolen (ST (0));
|
||||||
hexchat_command (ph, cmd);
|
hexchat_command (ph, cmd);
|
||||||
@ -1136,7 +1135,7 @@ XS (XS_HexChat_command)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
XS (XS_HexChat_find_context)
|
XS (XS_Xchat_find_context)
|
||||||
{
|
{
|
||||||
char *server = NULL;
|
char *server = NULL;
|
||||||
char *chan = NULL;
|
char *chan = NULL;
|
||||||
@ -1144,7 +1143,7 @@ XS (XS_HexChat_find_context)
|
|||||||
|
|
||||||
dXSARGS;
|
dXSARGS;
|
||||||
if (items > 2)
|
if (items > 2)
|
||||||
hexchat_print (ph, "Usage: HexChat::find_context ([channel, [server]])");
|
hexchat_print (ph, "Usage: Xchat::find_context ([channel, [server]])");
|
||||||
{
|
{
|
||||||
|
|
||||||
switch (items) {
|
switch (items) {
|
||||||
@ -1192,23 +1191,23 @@ XS (XS_HexChat_find_context)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
XS (XS_HexChat_get_context)
|
XS (XS_Xchat_get_context)
|
||||||
{
|
{
|
||||||
dXSARGS;
|
dXSARGS;
|
||||||
if (items != 0) {
|
if (items != 0) {
|
||||||
hexchat_print (ph, "Usage: HexChat::get_context()");
|
hexchat_print (ph, "Usage: Xchat::get_context()");
|
||||||
} else {
|
} else {
|
||||||
XSRETURN_IV (PTR2IV (hexchat_get_context (ph)));
|
XSRETURN_IV (PTR2IV (hexchat_get_context (ph)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
XS (XS_HexChat_set_context)
|
XS (XS_Xchat_set_context)
|
||||||
{
|
{
|
||||||
hexchat_context *ctx;
|
hexchat_context *ctx;
|
||||||
dXSARGS;
|
dXSARGS;
|
||||||
if (items != 1) {
|
if (items != 1) {
|
||||||
hexchat_print (ph, "Usage: HexChat::set_context(ctx)");
|
hexchat_print (ph, "Usage: Xchat::set_context(ctx)");
|
||||||
} else {
|
} else {
|
||||||
ctx = INT2PTR (hexchat_context *, SvUV (ST (0)));
|
ctx = INT2PTR (hexchat_context *, SvUV (ST (0)));
|
||||||
XSRETURN_IV ((IV) hexchat_set_context (ph, ctx));
|
XSRETURN_IV ((IV) hexchat_set_context (ph, ctx));
|
||||||
@ -1216,11 +1215,11 @@ XS (XS_HexChat_set_context)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
XS (XS_HexChat_nickcmp)
|
XS (XS_Xchat_nickcmp)
|
||||||
{
|
{
|
||||||
dXSARGS;
|
dXSARGS;
|
||||||
if (items != 2) {
|
if (items != 2) {
|
||||||
hexchat_print (ph, "Usage: HexChat::nickcmp(s1, s2)");
|
hexchat_print (ph, "Usage: Xchat::nickcmp(s1, s2)");
|
||||||
} else {
|
} else {
|
||||||
XSRETURN_IV ((IV) hexchat_nickcmp (ph, SvPV_nolen (ST (0)),
|
XSRETURN_IV ((IV) hexchat_nickcmp (ph, SvPV_nolen (ST (0)),
|
||||||
SvPV_nolen (ST (1))));
|
SvPV_nolen (ST (1))));
|
||||||
@ -1228,7 +1227,7 @@ XS (XS_HexChat_nickcmp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
XS (XS_HexChat_get_list)
|
XS (XS_Xchat_get_list)
|
||||||
{
|
{
|
||||||
SV *name;
|
SV *name;
|
||||||
hexchat_list *list;
|
hexchat_list *list;
|
||||||
@ -1237,7 +1236,7 @@ XS (XS_HexChat_get_list)
|
|||||||
dXSARGS;
|
dXSARGS;
|
||||||
|
|
||||||
if (items != 1) {
|
if (items != 1) {
|
||||||
hexchat_print (ph, "Usage: HexChat::get_list(name)");
|
hexchat_print (ph, "Usage: Xchat::get_list(name)");
|
||||||
} else {
|
} else {
|
||||||
SP -= items; /*remove the argument list from the stack */
|
SP -= items; /*remove the argument list from the stack */
|
||||||
|
|
||||||
@ -1269,12 +1268,12 @@ XS (XS_HexChat_get_list)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static
|
static
|
||||||
XS (XS_HexChat_Embed_plugingui_remove)
|
XS (XS_Xchat_Embed_plugingui_remove)
|
||||||
{
|
{
|
||||||
void *gui_entry;
|
void *gui_entry;
|
||||||
dXSARGS;
|
dXSARGS;
|
||||||
if (items != 1) {
|
if (items != 1) {
|
||||||
hexchat_print (ph, "Usage: HexChat::Embed::plugingui_remove(handle)");
|
hexchat_print (ph, "Usage: Xchat::Embed::plugingui_remove(handle)");
|
||||||
} else {
|
} else {
|
||||||
gui_entry = INT2PTR (void *, SvUV (ST (0)));
|
gui_entry = INT2PTR (void *, SvUV (ST (0)));
|
||||||
hexchat_plugingui_remove (ph, gui_entry);
|
hexchat_plugingui_remove (ph, gui_entry);
|
||||||
@ -1282,72 +1281,6 @@ XS (XS_HexChat_Embed_plugingui_remove)
|
|||||||
XSRETURN_EMPTY;
|
XSRETURN_EMPTY;
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
|
||||||
XS (XS_HexChat_plugin_pref_set)
|
|
||||||
{
|
|
||||||
dMARK;
|
|
||||||
dAX;
|
|
||||||
|
|
||||||
XSRETURN_IV ((IV) hexchat_pluginpref_set_str (ph, SvPV_nolen (ST (0)),
|
|
||||||
SvPV_nolen (ST (1))));
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
XS (XS_HexChat_plugin_pref_get)
|
|
||||||
{
|
|
||||||
int result;
|
|
||||||
char value[512];
|
|
||||||
|
|
||||||
dMARK;
|
|
||||||
dAX;
|
|
||||||
|
|
||||||
result = hexchat_pluginpref_get_str (ph, SvPV_nolen (ST (0)), value);
|
|
||||||
|
|
||||||
if (result)
|
|
||||||
XSRETURN_PV (value);
|
|
||||||
|
|
||||||
XSRETURN_UNDEF;
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
XS (XS_HexChat_plugin_pref_delete)
|
|
||||||
{
|
|
||||||
dMARK;
|
|
||||||
dAX;
|
|
||||||
|
|
||||||
XSRETURN_IV ((IV) hexchat_pluginpref_delete (ph, SvPV_nolen (ST (0))));
|
|
||||||
}
|
|
||||||
|
|
||||||
static
|
|
||||||
XS (XS_HexChat_plugin_pref_list)
|
|
||||||
{
|
|
||||||
char list[4096];
|
|
||||||
char value[512];
|
|
||||||
char *token;
|
|
||||||
|
|
||||||
dSP;
|
|
||||||
dMARK;
|
|
||||||
dAX;
|
|
||||||
|
|
||||||
if (!hexchat_pluginpref_list (ph, list))
|
|
||||||
XSRETURN_EMPTY;
|
|
||||||
|
|
||||||
PUSHMARK (SP);
|
|
||||||
|
|
||||||
token = strtok (list, ",");
|
|
||||||
while (token != NULL)
|
|
||||||
{
|
|
||||||
hexchat_pluginpref_get_str (ph, token, value);
|
|
||||||
|
|
||||||
XPUSHs (sv_2mortal (newSVpv (token, 0)));
|
|
||||||
XPUSHs (sv_2mortal (newSVpv (value, 0)));
|
|
||||||
|
|
||||||
token = strtok (NULL, ",");
|
|
||||||
}
|
|
||||||
|
|
||||||
PUTBACK;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* xs_init is the second argument perl_parse. As the name hints, it
|
/* xs_init is the second argument perl_parse. As the name hints, it
|
||||||
initializes XS subroutines (see the perlembed manpage) */
|
initializes XS subroutines (see the perlembed manpage) */
|
||||||
static void
|
static void
|
||||||
@ -1359,36 +1292,31 @@ xs_init (pTHX)
|
|||||||
scripts by the 'use perlmod;' construction */
|
scripts by the 'use perlmod;' construction */
|
||||||
newXS ("DynaLoader::boot_DynaLoader", boot_DynaLoader, __FILE__);
|
newXS ("DynaLoader::boot_DynaLoader", boot_DynaLoader, __FILE__);
|
||||||
/* load up all the custom IRC perl functions */
|
/* load up all the custom IRC perl functions */
|
||||||
newXS ("HexChat::Internal::register", XS_HexChat_register, __FILE__);
|
newXS ("Xchat::Internal::register", XS_Xchat_register, __FILE__);
|
||||||
newXS ("HexChat::Internal::hook_server", XS_HexChat_hook_server, __FILE__);
|
newXS ("Xchat::Internal::hook_server", XS_Xchat_hook_server, __FILE__);
|
||||||
newXS ("HexChat::Internal::hook_command", XS_HexChat_hook_command, __FILE__);
|
newXS ("Xchat::Internal::hook_command", XS_Xchat_hook_command, __FILE__);
|
||||||
newXS ("HexChat::Internal::hook_print", XS_HexChat_hook_print, __FILE__);
|
newXS ("Xchat::Internal::hook_print", XS_Xchat_hook_print, __FILE__);
|
||||||
newXS ("HexChat::Internal::hook_timer", XS_HexChat_hook_timer, __FILE__);
|
newXS ("Xchat::Internal::hook_timer", XS_Xchat_hook_timer, __FILE__);
|
||||||
newXS ("HexChat::Internal::hook_fd", XS_HexChat_hook_fd, __FILE__);
|
newXS ("Xchat::Internal::hook_fd", XS_Xchat_hook_fd, __FILE__);
|
||||||
newXS ("HexChat::Internal::unhook", XS_HexChat_unhook, __FILE__);
|
newXS ("Xchat::Internal::unhook", XS_Xchat_unhook, __FILE__);
|
||||||
newXS ("HexChat::Internal::print", XS_HexChat_print, __FILE__);
|
newXS ("Xchat::Internal::print", XS_Xchat_print, __FILE__);
|
||||||
newXS ("HexChat::Internal::command", XS_HexChat_command, __FILE__);
|
newXS ("Xchat::Internal::command", XS_Xchat_command, __FILE__);
|
||||||
newXS ("HexChat::Internal::set_context", XS_HexChat_set_context, __FILE__);
|
newXS ("Xchat::Internal::set_context", XS_Xchat_set_context, __FILE__);
|
||||||
newXS ("HexChat::Internal::get_info", XS_HexChat_get_info, __FILE__);
|
newXS ("Xchat::Internal::get_info", XS_Xchat_get_info, __FILE__);
|
||||||
newXS ("HexChat::Internal::context_info", XS_HexChat_context_info, __FILE__);
|
newXS ("Xchat::Internal::context_info", XS_Xchat_context_info, __FILE__);
|
||||||
newXS ("HexChat::Internal::get_list", XS_HexChat_get_list, __FILE__);
|
newXS ("Xchat::Internal::get_list", XS_Xchat_get_list, __FILE__);
|
||||||
|
|
||||||
newXS ("HexChat::Internal::plugin_pref_set", XS_HexChat_plugin_pref_set, __FILE__);
|
|
||||||
newXS ("HexChat::Internal::plugin_pref_get", XS_HexChat_plugin_pref_get, __FILE__);
|
|
||||||
newXS ("HexChat::Internal::plugin_pref_delete", XS_HexChat_plugin_pref_delete, __FILE__);
|
|
||||||
newXS ("HexChat::Internal::plugin_pref_list", XS_HexChat_plugin_pref_list, __FILE__);
|
|
||||||
|
|
||||||
newXS ("HexChat::find_context", XS_HexChat_find_context, __FILE__);
|
newXS ("Xchat::find_context", XS_Xchat_find_context, __FILE__);
|
||||||
newXS ("HexChat::get_context", XS_HexChat_get_context, __FILE__);
|
newXS ("Xchat::get_context", XS_Xchat_get_context, __FILE__);
|
||||||
newXS ("HexChat::get_prefs", XS_HexChat_get_prefs, __FILE__);
|
newXS ("Xchat::get_prefs", XS_Xchat_get_prefs, __FILE__);
|
||||||
newXS ("HexChat::emit_print", XS_HexChat_emit_print, __FILE__);
|
newXS ("Xchat::emit_print", XS_Xchat_emit_print, __FILE__);
|
||||||
newXS ("HexChat::send_modes", XS_HexChat_send_modes, __FILE__);
|
newXS ("Xchat::send_modes", XS_Xchat_send_modes, __FILE__);
|
||||||
newXS ("HexChat::nickcmp", XS_HexChat_nickcmp, __FILE__);
|
newXS ("Xchat::nickcmp", XS_Xchat_nickcmp, __FILE__);
|
||||||
|
|
||||||
newXS ("HexChat::Embed::plugingui_remove", XS_HexChat_Embed_plugingui_remove,
|
newXS ("Xchat::Embed::plugingui_remove", XS_Xchat_Embed_plugingui_remove,
|
||||||
__FILE__);
|
__FILE__);
|
||||||
|
|
||||||
stash = get_hv ("HexChat::", TRUE);
|
stash = get_hv ("Xchat::", TRUE);
|
||||||
if (stash == NULL) {
|
if (stash == NULL) {
|
||||||
exit (1);
|
exit (1);
|
||||||
}
|
}
|
||||||
@ -1400,8 +1328,7 @@ xs_init (pTHX)
|
|||||||
newCONSTSUB (stash, "PRI_LOWEST", newSViv (HEXCHAT_PRI_LOWEST));
|
newCONSTSUB (stash, "PRI_LOWEST", newSViv (HEXCHAT_PRI_LOWEST));
|
||||||
|
|
||||||
newCONSTSUB (stash, "EAT_NONE", newSViv (HEXCHAT_EAT_NONE));
|
newCONSTSUB (stash, "EAT_NONE", newSViv (HEXCHAT_EAT_NONE));
|
||||||
newCONSTSUB (stash, "EAT_HEXCHAT", newSViv (HEXCHAT_EAT_HEXCHAT));
|
newCONSTSUB (stash, "EAT_XCHAT", newSViv (HEXCHAT_EAT_HEXCHAT));
|
||||||
newCONSTSUB (stash, "EAT_XCHAT", newSViv (HEXCHAT_EAT_HEXCHAT)); /* for compatibility */
|
|
||||||
newCONSTSUB (stash, "EAT_PLUGIN", newSViv (HEXCHAT_EAT_PLUGIN));
|
newCONSTSUB (stash, "EAT_PLUGIN", newSViv (HEXCHAT_EAT_PLUGIN));
|
||||||
newCONSTSUB (stash, "EAT_ALL", newSViv (HEXCHAT_EAT_ALL));
|
newCONSTSUB (stash, "EAT_ALL", newSViv (HEXCHAT_EAT_ALL));
|
||||||
newCONSTSUB (stash, "FD_READ", newSViv (HEXCHAT_FD_READ));
|
newCONSTSUB (stash, "FD_READ", newSViv (HEXCHAT_FD_READ));
|
||||||
@ -1411,7 +1338,7 @@ xs_init (pTHX)
|
|||||||
newCONSTSUB (stash, "KEEP", newSViv (1));
|
newCONSTSUB (stash, "KEEP", newSViv (1));
|
||||||
newCONSTSUB (stash, "REMOVE", newSViv (0));
|
newCONSTSUB (stash, "REMOVE", newSViv (0));
|
||||||
|
|
||||||
version = get_sv( "HexChat::VERSION", 1 );
|
version = get_sv( "Xchat::VERSION", 1 );
|
||||||
sv_setpv( version, PACKAGE_VERSION );
|
sv_setpv( version, PACKAGE_VERSION );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1425,7 +1352,7 @@ perl_init (void)
|
|||||||
static const char xchat_definitions[] = {
|
static const char xchat_definitions[] = {
|
||||||
/* Redefine the $SIG{__WARN__} handler to have HexChat
|
/* Redefine the $SIG{__WARN__} handler to have HexChat
|
||||||
printing warnings in the main window. (TheHobbit) */
|
printing warnings in the main window. (TheHobbit) */
|
||||||
#include "hexchat.pm.h"
|
#include "xchat.pm.h"
|
||||||
};
|
};
|
||||||
#ifdef OLD_PERL
|
#ifdef OLD_PERL
|
||||||
static const char irc_definitions[] = {
|
static const char irc_definitions[] = {
|
||||||
@ -1483,9 +1410,9 @@ perl_load_file (char *filename)
|
|||||||
/* http://forum.xchat.org/viewtopic.php?t=3277 */
|
/* http://forum.xchat.org/viewtopic.php?t=3277 */
|
||||||
thread_mbox ("Cannot use this " PERL_DLL "\n\n"
|
thread_mbox ("Cannot use this " PERL_DLL "\n\n"
|
||||||
#ifdef _WIN64
|
#ifdef _WIN64
|
||||||
"64-bit HexChat Perl is required.");
|
"64-bit Strawberry Perl is required.");
|
||||||
#else
|
#else
|
||||||
"32-bit HexChat Perl is required.");
|
"32-bit Strawberry Perl is required.");
|
||||||
#endif
|
#endif
|
||||||
else {
|
else {
|
||||||
/* a lot of people install this old version */
|
/* a lot of people install this old version */
|
||||||
@ -1497,14 +1424,14 @@ perl_load_file (char *filename)
|
|||||||
"You must have a Visual C++ build of Perl "
|
"You must have a Visual C++ build of Perl "
|
||||||
PERL_REQUIRED_VERSION " installed in order to\n"
|
PERL_REQUIRED_VERSION " installed in order to\n"
|
||||||
"run Perl scripts. A reboot may be required.\n\n"
|
"run Perl scripts. A reboot may be required.\n\n"
|
||||||
"http://hexchat.github.io/downloads.html\n\n"
|
"http://hexchat.org/downloads.html\n\n"
|
||||||
"I have found Perl 5.6, but that is too old.");
|
"I have found Perl 5.6, but that is too old.");
|
||||||
} else {
|
} else {
|
||||||
thread_mbox ("Cannot open " PERL_DLL "!\n\n"
|
thread_mbox ("Cannot open " PERL_DLL "!\n\n"
|
||||||
"You must have a Visual C++ build of Perl "
|
"You must have a Visual C++ build of Perl "
|
||||||
PERL_REQUIRED_VERSION " installed in order to\n"
|
PERL_REQUIRED_VERSION " installed in order to\n"
|
||||||
"run Perl scripts. A reboot may be required.\n\n"
|
"run Perl scripts. A reboot may be required.\n\n"
|
||||||
"http://hexchat.github.io/downloads.html\n\n"
|
"http://hexchat.org/downloads.html\n\n"
|
||||||
"Make sure Perl's bin directory is in your PATH.");
|
"Make sure Perl's bin directory is in your PATH.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1521,7 +1448,7 @@ perl_load_file (char *filename)
|
|||||||
perl_init ();
|
perl_init ();
|
||||||
}
|
}
|
||||||
|
|
||||||
return execute_perl (sv_2mortal (newSVpv ("HexChat::Embed::load", 0)),
|
return execute_perl (sv_2mortal (newSVpv ("Xchat::Embed::load", 0)),
|
||||||
filename);
|
filename);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -1531,7 +1458,7 @@ perl_end (void)
|
|||||||
{
|
{
|
||||||
|
|
||||||
if (my_perl != NULL) {
|
if (my_perl != NULL) {
|
||||||
execute_perl (sv_2mortal (newSVpv ("HexChat::Embed::unload_all", 0)), "");
|
execute_perl (sv_2mortal (newSVpv ("Xchat::Embed::unload_all", 0)), "");
|
||||||
PL_perl_destruct_level = 1;
|
PL_perl_destruct_level = 1;
|
||||||
perl_destruct (my_perl);
|
perl_destruct (my_perl);
|
||||||
perl_free (my_perl);
|
perl_free (my_perl);
|
||||||
@ -1545,7 +1472,7 @@ static int
|
|||||||
perl_command_unloadall (char *word[], char *word_eol[], void *userdata)
|
perl_command_unloadall (char *word[], char *word_eol[], void *userdata)
|
||||||
{
|
{
|
||||||
if (my_perl != NULL) {
|
if (my_perl != NULL) {
|
||||||
execute_perl (sv_2mortal (newSVpv ("HexChat::Embed::unload_all", 0)), "");
|
execute_perl (sv_2mortal (newSVpv ("Xchat::Embed::unload_all", 0)), "");
|
||||||
return HEXCHAT_EAT_HEXCHAT;
|
return HEXCHAT_EAT_HEXCHAT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1556,7 +1483,7 @@ static int
|
|||||||
perl_command_reloadall (char *word[], char *word_eol[], void *userdata)
|
perl_command_reloadall (char *word[], char *word_eol[], void *userdata)
|
||||||
{
|
{
|
||||||
if (my_perl != NULL) {
|
if (my_perl != NULL) {
|
||||||
execute_perl (sv_2mortal (newSVpv ("HexChat::Embed::reload_all", 0)), "");
|
execute_perl (sv_2mortal (newSVpv ("Xchat::Embed::reload_all", 0)), "");
|
||||||
|
|
||||||
return HEXCHAT_EAT_HEXCHAT;
|
return HEXCHAT_EAT_HEXCHAT;
|
||||||
} else {
|
} else {
|
||||||
@ -1585,7 +1512,7 @@ perl_command_unload (char *word[], char *word_eol[], void *userdata)
|
|||||||
char *file = get_filename (word, word_eol);
|
char *file = get_filename (word, word_eol);
|
||||||
|
|
||||||
if (my_perl != NULL && file != NULL) {
|
if (my_perl != NULL && file != NULL) {
|
||||||
execute_perl (sv_2mortal (newSVpv ("HexChat::Embed::unload", 0)), file);
|
execute_perl (sv_2mortal (newSVpv ("Xchat::Embed::unload", 0)), file);
|
||||||
return HEXCHAT_EAT_HEXCHAT;
|
return HEXCHAT_EAT_HEXCHAT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1598,7 +1525,7 @@ perl_command_reload (char *word[], char *word_eol[], void *eat)
|
|||||||
char *file = get_filename (word, word_eol);
|
char *file = get_filename (word, word_eol);
|
||||||
|
|
||||||
if (my_perl != NULL && file != NULL) {
|
if (my_perl != NULL && file != NULL) {
|
||||||
execute_perl (sv_2mortal (newSVpv ("HexChat::Embed::reload", 0)), file);
|
execute_perl (sv_2mortal (newSVpv ("Xchat::Embed::reload", 0)), file);
|
||||||
return HEXCHAT_EAT_HEXCHAT;
|
return HEXCHAT_EAT_HEXCHAT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1608,15 +1535,6 @@ perl_command_reload (char *word[], char *word_eol[], void *eat)
|
|||||||
return HEXCHAT_EAT_NONE;
|
return HEXCHAT_EAT_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
|
||||||
perl_command_eval (char *word[], char *word_eol[], void *userdata)
|
|
||||||
{
|
|
||||||
if (my_perl != NULL)
|
|
||||||
execute_perl (sv_2mortal (newSVpv ("HexChat::Embed::evaluate", 0)), word_eol[2]);
|
|
||||||
|
|
||||||
return HEXCHAT_EAT_HEXCHAT;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
hexchat_plugin_get_info (char **name, char **desc, char **version,
|
hexchat_plugin_get_info (char **name, char **desc, char **version,
|
||||||
void **reserved)
|
void **reserved)
|
||||||
@ -1654,15 +1572,12 @@ hexchat_plugin_init (hexchat_plugin * plugin_handle, char **plugin_name,
|
|||||||
0);
|
0);
|
||||||
hexchat_hook_command (ph, "reload", HEXCHAT_PRI_NORM, perl_command_reload, 0,
|
hexchat_hook_command (ph, "reload", HEXCHAT_PRI_NORM, perl_command_reload, 0,
|
||||||
0);
|
0);
|
||||||
hexchat_hook_command (ph, "pl_reload", HEXCHAT_PRI_NORM, perl_command_reload,
|
hexchat_hook_command (ph, "pl_reload", HEXCHAT_PRI_NORM, perl_command_reload, 0,
|
||||||
"Reloads a Perl script. Syntax: /pl_reload <filename.pl>", (int*)1);
|
(int*)1);
|
||||||
hexchat_hook_command (ph, "unloadall", HEXCHAT_PRI_NORM,
|
hexchat_hook_command (ph, "unloadall", HEXCHAT_PRI_NORM,
|
||||||
perl_command_unloadall, "Unloads all loaded Perl scripts.", 0);
|
perl_command_unloadall, 0, 0);
|
||||||
hexchat_hook_command (ph, "reloadall", HEXCHAT_PRI_NORM,
|
hexchat_hook_command (ph, "reloadall", HEXCHAT_PRI_NORM,
|
||||||
perl_command_reloadall, "Realoads all loaded Perl scripts.", 0);
|
perl_command_reloadall, 0, 0);
|
||||||
|
|
||||||
hexchat_hook_command (ph, "pl", HEXCHAT_PRI_NORM,
|
|
||||||
perl_command_eval, "Evaluates Perl code. Syntax: /pl <perl code>", 0);
|
|
||||||
|
|
||||||
/*perl_init (); */
|
/*perl_init (); */
|
||||||
hexchat_hook_timer (ph, 0, perl_auto_load, NULL );
|
hexchat_hook_timer (ph, 0, perl_auto_load, NULL );
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
<PropertyGroup Label="Globals">
|
<PropertyGroup Label="Globals">
|
||||||
<ProjectGuid>{D90BC3E3-1341-4849-9354-5F40489D39D1}</ProjectGuid>
|
<ProjectGuid>{D90BC3E3-1341-4849-9354-5F40489D39D1}</ProjectGuid>
|
||||||
<Keyword>Win32Proj</Keyword>
|
<Keyword>Win32Proj</Keyword>
|
||||||
<RootNamespace>perl520</RootNamespace>
|
<RootNamespace>perl518</RootNamespace>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
@ -61,7 +61,7 @@
|
|||||||
</PrecompiledHeader>
|
</PrecompiledHeader>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;PERL520_EXPORTS;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;PERL518_EXPORTS;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(PerlPath)\lib\CORE;$(IntDir);..\..\src\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(PerlPath)\lib\CORE;$(IntDir);..\..\src\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
@ -81,7 +81,7 @@ move $(PerlLib).def "$(IntDir)"
|
|||||||
lib /nologo /machine:x86 "/def:$(IntDir)$(PerlLib).def" "/out:$(OutDir)\$(PerlLib).lib"
|
lib /nologo /machine:x86 "/def:$(IntDir)$(PerlLib).def" "/out:$(OutDir)\$(PerlLib).lib"
|
||||||
"$(PerlPath)\bin\perl.exe" generate_header
|
"$(PerlPath)\bin\perl.exe" generate_header
|
||||||
move irc.pm.h "$(IntDir)"
|
move irc.pm.h "$(IntDir)"
|
||||||
move hexchat.pm.h "$(IntDir)"</Command>
|
move xchat.pm.h "$(IntDir)"</Command>
|
||||||
</PreBuildEvent>
|
</PreBuildEvent>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||||
@ -90,7 +90,7 @@ move hexchat.pm.h "$(IntDir)"</Command>
|
|||||||
</PrecompiledHeader>
|
</PrecompiledHeader>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;_WIN64;_AMD64_;NDEBUG;_WINDOWS;_USRDLL;PERL520_EXPORTS;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;_WIN64;_AMD64_;NDEBUG;_WINDOWS;_USRDLL;PERL518_EXPORTS;$(OwnFlags);%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<AdditionalIncludeDirectories>$(PerlPath)\lib\CORE;$(IntDir);..\..\src\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>$(PerlPath)\lib\CORE;$(IntDir);..\..\src\common;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
@ -110,7 +110,7 @@ move $(PerlLib).def "$(IntDir)"
|
|||||||
lib /nologo /machine:x64 "/def:$(IntDir)$(PerlLib).def" "/out:$(OutDir)\$(PerlLib).lib"
|
lib /nologo /machine:x64 "/def:$(IntDir)$(PerlLib).def" "/out:$(OutDir)\$(PerlLib).lib"
|
||||||
"$(PerlPath)\bin\perl.exe" generate_header
|
"$(PerlPath)\bin\perl.exe" generate_header
|
||||||
move irc.pm.h "$(IntDir)"
|
move irc.pm.h "$(IntDir)"
|
||||||
move hexchat.pm.h "$(IntDir)"</Command>
|
move xchat.pm.h "$(IntDir)"</Command>
|
||||||
</PreBuildEvent>
|
</PreBuildEvent>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
69
plugins/perl/syntax_highlight
Normal file
69
plugins/perl/syntax_highlight
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
#!/usr/bin/env perl
|
||||||
|
use 5.010;
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Text::VimColor;
|
||||||
|
use HTML::TokeParser::Simple;
|
||||||
|
use HTML::Entities qw(decode_entities);
|
||||||
|
use Path::Class;
|
||||||
|
|
||||||
|
my $html_file = shift;
|
||||||
|
my $reader = file( $html_file )->openr;
|
||||||
|
unlink $html_file;
|
||||||
|
my $writer = file( $html_file )->openw;
|
||||||
|
|
||||||
|
my $parser = HTML::TokeParser::Simple->new( $reader );
|
||||||
|
|
||||||
|
while( my $token = $parser->get_token ) {
|
||||||
|
|
||||||
|
my $class_name = $token->get_attr( "class" );
|
||||||
|
|
||||||
|
if( $token->is_start_tag( "div" )
|
||||||
|
&& ( $class_name && $class_name =~ qr/\bexample\b/ )
|
||||||
|
) {
|
||||||
|
my $start_tag = $token;
|
||||||
|
$start_tag->set_attr( class => $class_name . " synNormal" );
|
||||||
|
my @content;
|
||||||
|
my $end_tag;
|
||||||
|
|
||||||
|
EXAMPLE:
|
||||||
|
while( $token = $parser->get_token ) {
|
||||||
|
if( $token->is_end_tag( "div" ) ) {
|
||||||
|
$end_tag = $token;
|
||||||
|
last EXAMPLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( $token->is_text ) {
|
||||||
|
push @content, decode_entities( $token->as_is );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
my $code = join "", @content;
|
||||||
|
# say $code;
|
||||||
|
my $vim = Text::VimColor->new(
|
||||||
|
string => $code,
|
||||||
|
filetype => "perl",
|
||||||
|
vim_options => [qw( -RXZ -i NONE -u NONE -N -n)],
|
||||||
|
);
|
||||||
|
my $html = $vim->html;
|
||||||
|
$html =~ s/^\s+//;
|
||||||
|
$html =~ s/\s+$//;
|
||||||
|
|
||||||
|
print $writer $start_tag->as_is;
|
||||||
|
|
||||||
|
my $lines = $html =~ tr/\n/\n/;
|
||||||
|
|
||||||
|
say $writer "<div class='line_number'>";
|
||||||
|
for my $line ( 0 .. $lines ) {
|
||||||
|
say $writer "<div>",1 + $line,"</div>";
|
||||||
|
}
|
||||||
|
say $writer "</div>";
|
||||||
|
|
||||||
|
print $writer "<div class='content'><pre>";
|
||||||
|
say $writer $html;
|
||||||
|
say $writer "</pre></div>";
|
||||||
|
print $writer $end_tag->as_is;
|
||||||
|
} else {
|
||||||
|
print $writer $token->as_is;
|
||||||
|
}
|
||||||
|
}
|
43
plugins/perl/xcperl_build.bat
Normal file
43
plugins/perl/xcperl_build.bat
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
perl generate_header
|
||||||
|
|
||||||
|
gcc -W -Os -DWIN32 -I "C:\MinGW\include" -I .. -I "C:\ActivePerl-5.8.9\perl\lib\CORE" -L "C:\ActivePerl-5.8.9\perl\bin" -c perl.c -o perl5.8.9.o
|
||||||
|
|
||||||
|
dllwrap --def perl.def --dllname xcperl5.8.9.dll "C:\ActivePerl-5.8.9\perl\bin\perl58.dll" perl5.8.9.o
|
||||||
|
|
||||||
|
strip xcperl5.8.9.dll
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
gcc -W -Os -DWIN32 -I "C:\MinGW\include" -I .. -I "C:\Perl\lib\CORE" -L "C:\Perl\bin" -c perl.c -o perl5.10.0.o
|
||||||
|
|
||||||
|
dllwrap --def perl.def --dllname xcperl5.10.0.dll "C:\Perl\bin\perl510.dll" perl5.10.0.o
|
||||||
|
|
||||||
|
strip xcperl5.10.0.dll
|
||||||
|
|
||||||
|
|
||||||
|
gcc -W -Os -DWIN32 -I "C:\MinGW\include" -I .. -I "C:\ActivePerl-5.10.1\perl\lib\CORE" -L "C:\ActivePerl-5.10.1\perl\bin" -c perl.c -o perl5.10.1.o
|
||||||
|
|
||||||
|
dllwrap --def perl.def --dllname xcperl5.10.1.dll "C:\ActivePerl-5.10.1\perl\bin\perl510.dll" perl5.10.1.o
|
||||||
|
|
||||||
|
strip xcperl5.10.1.dll
|
||||||
|
|
||||||
|
|
||||||
|
gcc -W -Os -DWIN32 -I "C:\MinGW\include" -I .. -I "C:\ActivePerl-5.12.1\perl\lib\CORE" -L "C:\ActivePerl-5.12.1\perl\bin" -c perl.c -o perl5.12.1.o
|
||||||
|
|
||||||
|
dllwrap --def perl.def --dllname xcperl5.12.1.dll "C:\ActivePerl-5.12.1\perl\bin\perl512.dll" perl5.12.1.o
|
||||||
|
|
||||||
|
strip xcperl5.12.1.dll
|
||||||
|
|
||||||
|
gcc -W -Os -DWIN32 -I "C:\MinGW\include" -I .. -I "C:\strawberry-perl-5.10.1.3\perl\lib\CORE" -L "C:\strawberry-perl-5.10.1.3\perl\bin" -c perl.c -o perl-strawberry5.10.1.o
|
||||||
|
|
||||||
|
dllwrap --def perl.def --dllname xcperl-strawberry5.10.1.dll "C:\strawberry-perl-5.10.1.3\perl\bin\perl510.dll" perl5.10.1.o
|
||||||
|
|
||||||
|
strip xcperl-strawberry5.10.1.dll
|
||||||
|
|
||||||
|
|
||||||
|
gcc -W -Os -DWIN32 -I "C:\MinGW\include" -I .. -I "C:\strawberry-perl-5.12.1.0-portable\perl\lib\CORE" -L "C:\strawberry-perl-5.12.1.0-portable\perl\bin" -c perl.c -o perl-strawberry5.12.1.o
|
||||||
|
|
||||||
|
dllwrap --def perl.def --dllname xcperl-strawberry5.12.1.dll "C:\strawberry-perl-5.12.1.0-portable\perl\bin\perl512.dll" perl5.12.1.o
|
||||||
|
|
||||||
|
strip xcperl-strawberry5.12.1.dll
|
||||||
|
|
@ -245,6 +245,13 @@ typedef struct {
|
|||||||
PyObject *dict;
|
PyObject *dict;
|
||||||
} ListItemObject;
|
} ListItemObject;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
PyObject_HEAD
|
||||||
|
hexchat_list *list;
|
||||||
|
char *name;
|
||||||
|
} ListObject;
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
PyObject_HEAD
|
PyObject_HEAD
|
||||||
char *name;
|
char *name;
|
||||||
@ -271,7 +278,6 @@ typedef struct {
|
|||||||
/* Function declarations */
|
/* Function declarations */
|
||||||
|
|
||||||
static PyObject *Util_BuildList(char *word[]);
|
static PyObject *Util_BuildList(char *word[]);
|
||||||
static PyObject *Util_BuildEOLList(char *word[]);
|
|
||||||
static void Util_Autoload();
|
static void Util_Autoload();
|
||||||
static char *Util_Expand(char *filename);
|
static char *Util_Expand(char *filename);
|
||||||
|
|
||||||
@ -350,6 +356,7 @@ static PyTypeObject XChatOut_Type;
|
|||||||
static PyTypeObject Context_Type;
|
static PyTypeObject Context_Type;
|
||||||
static PyTypeObject ListItem_Type;
|
static PyTypeObject ListItem_Type;
|
||||||
static PyTypeObject Attribute_Type;
|
static PyTypeObject Attribute_Type;
|
||||||
|
static PyTypeObject List_Type;
|
||||||
|
|
||||||
static PyThreadState *main_tstate = NULL;
|
static PyThreadState *main_tstate = NULL;
|
||||||
static void *thread_timer = NULL;
|
static void *thread_timer = NULL;
|
||||||
@ -383,79 +390,27 @@ static PyObject *
|
|||||||
Util_BuildList(char *word[])
|
Util_BuildList(char *word[])
|
||||||
{
|
{
|
||||||
PyObject *list;
|
PyObject *list;
|
||||||
int listsize = 31;
|
int listsize = 0;
|
||||||
int i;
|
int i;
|
||||||
/* Find the last valid array member; there may be intermediate NULLs that
|
while (word[listsize] && word[listsize][0])
|
||||||
* would otherwise cause us to drop some members. */
|
listsize++;
|
||||||
while (listsize > 0 &&
|
|
||||||
(word[listsize] == NULL || word[listsize][0] == 0))
|
|
||||||
listsize--;
|
|
||||||
list = PyList_New(listsize);
|
list = PyList_New(listsize);
|
||||||
if (list == NULL) {
|
if (list == NULL) {
|
||||||
PyErr_Print();
|
PyErr_Print();
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
for (i = 1; i <= listsize; i++) {
|
for (i = 0; i != listsize; i++) {
|
||||||
PyObject *o;
|
PyObject *o = PyUnicode_FromString(word[i]);
|
||||||
if (word[i] == NULL) {
|
if (o == NULL) {
|
||||||
Py_INCREF(Py_None);
|
Py_DECREF(list);
|
||||||
o = Py_None;
|
PyErr_Print();
|
||||||
} else {
|
return NULL;
|
||||||
/* This handles word[i][0] == 0 automatically. */
|
|
||||||
o = PyUnicode_FromString(word[i]);
|
|
||||||
}
|
}
|
||||||
PyList_SetItem(list, i - 1, o);
|
PyList_SetItem(list, i, o);
|
||||||
}
|
}
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
|
||||||
Util_BuildEOLList(char *word[])
|
|
||||||
{
|
|
||||||
PyObject *list;
|
|
||||||
int listsize = 31;
|
|
||||||
int i;
|
|
||||||
/* Find the last valid array member; there may be intermediate NULLs that
|
|
||||||
* would otherwise cause us to drop some members. */
|
|
||||||
while (listsize > 0 &&
|
|
||||||
(word[listsize] == NULL || word[listsize][0] == 0))
|
|
||||||
listsize--;
|
|
||||||
list = PyList_New(listsize);
|
|
||||||
if (list == NULL) {
|
|
||||||
PyErr_Print();
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
char *accum = NULL;
|
|
||||||
char *last = NULL;
|
|
||||||
for (i = listsize; i > 0; i--) {
|
|
||||||
char *part = word[i];
|
|
||||||
if (accum == NULL) {
|
|
||||||
accum = g_strdup (part);
|
|
||||||
} else if (part != NULL && part[0] != 0) {
|
|
||||||
last = accum;
|
|
||||||
accum = g_strjoin(" ", part, last, NULL);
|
|
||||||
g_free (last);
|
|
||||||
last = NULL;
|
|
||||||
|
|
||||||
if (accum == NULL) {
|
|
||||||
Py_DECREF(list);
|
|
||||||
hexchat_print(ph, "Not enough memory to alloc accum"
|
|
||||||
"for python plugin callback");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
PyObject *uni_part = PyUnicode_FromString(accum);
|
|
||||||
PyList_SetItem(list, i - 1, uni_part);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (last)
|
|
||||||
g_free (last);
|
|
||||||
if (accum)
|
|
||||||
g_free (accum);
|
|
||||||
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
Util_Autoload_from (const char *dir_name)
|
Util_Autoload_from (const char *dir_name)
|
||||||
{
|
{
|
||||||
@ -568,12 +523,12 @@ Callback_Server(char *word[], char *word_eol[], hexchat_event_attrs *attrs, void
|
|||||||
plugin = hook->plugin;
|
plugin = hook->plugin;
|
||||||
BEGIN_PLUGIN(plugin);
|
BEGIN_PLUGIN(plugin);
|
||||||
|
|
||||||
word_list = Util_BuildList(word);
|
word_list = Util_BuildList(word+1);
|
||||||
if (word_list == NULL) {
|
if (word_list == NULL) {
|
||||||
END_PLUGIN(plugin);
|
END_PLUGIN(plugin);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
word_eol_list = Util_BuildList(word_eol);
|
word_eol_list = Util_BuildList(word_eol+1);
|
||||||
if (word_eol_list == NULL) {
|
if (word_eol_list == NULL) {
|
||||||
Py_DECREF(word_list);
|
Py_DECREF(word_list);
|
||||||
END_PLUGIN(plugin);
|
END_PLUGIN(plugin);
|
||||||
@ -619,12 +574,12 @@ Callback_Command(char *word[], char *word_eol[], void *userdata)
|
|||||||
plugin = hook->plugin;
|
plugin = hook->plugin;
|
||||||
BEGIN_PLUGIN(plugin);
|
BEGIN_PLUGIN(plugin);
|
||||||
|
|
||||||
word_list = Util_BuildList(word);
|
word_list = Util_BuildList(word+1);
|
||||||
if (word_list == NULL) {
|
if (word_list == NULL) {
|
||||||
END_PLUGIN(plugin);
|
END_PLUGIN(plugin);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
word_eol_list = Util_BuildList(word_eol);
|
word_eol_list = Util_BuildList(word_eol+1);
|
||||||
if (word_eol_list == NULL) {
|
if (word_eol_list == NULL) {
|
||||||
Py_DECREF(word_list);
|
Py_DECREF(word_list);
|
||||||
END_PLUGIN(plugin);
|
END_PLUGIN(plugin);
|
||||||
@ -659,19 +614,58 @@ Callback_Print_Attrs(char *word[], hexchat_event_attrs *attrs, void *userdata)
|
|||||||
PyObject *word_list;
|
PyObject *word_list;
|
||||||
PyObject *word_eol_list;
|
PyObject *word_eol_list;
|
||||||
PyObject *attributes;
|
PyObject *attributes;
|
||||||
|
char **word_eol;
|
||||||
|
char *word_eol_raw;
|
||||||
|
int listsize = 0;
|
||||||
|
int next = 0;
|
||||||
|
int i;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
PyObject *plugin;
|
PyObject *plugin;
|
||||||
|
|
||||||
|
/* Cut off the message identifier. */
|
||||||
|
word += 1;
|
||||||
|
|
||||||
|
/* HexChat doesn't provide a word_eol for print events, so we
|
||||||
|
* build our own here. */
|
||||||
|
while (word[listsize] && word[listsize][0])
|
||||||
|
listsize++;
|
||||||
|
word_eol = (char **) g_malloc(sizeof(char*)*(listsize+1));
|
||||||
|
if (word_eol == NULL) {
|
||||||
|
hexchat_print(ph, "Not enough memory to alloc word_eol "
|
||||||
|
"for python plugin callback.");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/* First build a word clone, but NULL terminated. */
|
||||||
|
memcpy(word_eol, word, listsize*sizeof(char*));
|
||||||
|
word_eol[listsize] = NULL;
|
||||||
|
/* Then join it. */
|
||||||
|
word_eol_raw = g_strjoinv(" ", word_eol);
|
||||||
|
if (word_eol_raw == NULL) {
|
||||||
|
hexchat_print(ph, "Not enough memory to alloc word_eol_raw "
|
||||||
|
"for python plugin callback.");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/* And rebuild the real word_eol. */
|
||||||
|
for (i = 0; i != listsize; i++) {
|
||||||
|
word_eol[i] = word_eol_raw+next;
|
||||||
|
next += strlen(word[i])+1;
|
||||||
|
}
|
||||||
|
word_eol[i] = "";
|
||||||
|
|
||||||
plugin = hook->plugin;
|
plugin = hook->plugin;
|
||||||
BEGIN_PLUGIN(plugin);
|
BEGIN_PLUGIN(plugin);
|
||||||
|
|
||||||
word_list = Util_BuildList(word);
|
word_list = Util_BuildList(word);
|
||||||
if (word_list == NULL) {
|
if (word_list == NULL) {
|
||||||
|
g_free(word_eol_raw);
|
||||||
|
g_free(word_eol);
|
||||||
END_PLUGIN(plugin);
|
END_PLUGIN(plugin);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
word_eol_list = Util_BuildEOLList(word);
|
word_eol_list = Util_BuildList(word_eol);
|
||||||
if (word_eol_list == NULL) {
|
if (word_eol_list == NULL) {
|
||||||
|
g_free(word_eol_raw);
|
||||||
|
g_free(word_eol);
|
||||||
Py_DECREF(word_list);
|
Py_DECREF(word_list);
|
||||||
END_PLUGIN(plugin);
|
END_PLUGIN(plugin);
|
||||||
return 0;
|
return 0;
|
||||||
@ -686,6 +680,8 @@ Callback_Print_Attrs(char *word[], hexchat_event_attrs *attrs, void *userdata)
|
|||||||
Py_DECREF(word_eol_list);
|
Py_DECREF(word_eol_list);
|
||||||
Py_DECREF(attributes);
|
Py_DECREF(attributes);
|
||||||
|
|
||||||
|
g_free(word_eol_raw);
|
||||||
|
g_free(word_eol);
|
||||||
if (retobj == Py_None) {
|
if (retobj == Py_None) {
|
||||||
ret = HEXCHAT_EAT_NONE;
|
ret = HEXCHAT_EAT_NONE;
|
||||||
Py_DECREF(retobj);
|
Py_DECREF(retobj);
|
||||||
@ -708,30 +704,72 @@ Callback_Print(char *word[], void *userdata)
|
|||||||
PyObject *retobj;
|
PyObject *retobj;
|
||||||
PyObject *word_list;
|
PyObject *word_list;
|
||||||
PyObject *word_eol_list;
|
PyObject *word_eol_list;
|
||||||
|
char **word_eol;
|
||||||
|
char *word_eol_raw;
|
||||||
|
int listsize = 0;
|
||||||
|
int next = 0;
|
||||||
|
int i;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
PyObject *plugin;
|
PyObject *plugin;
|
||||||
|
|
||||||
|
/* Cut off the message identifier. */
|
||||||
|
word += 1;
|
||||||
|
|
||||||
|
/* HexChat doesn't provide a word_eol for print events, so we
|
||||||
|
* build our own here. */
|
||||||
|
while (word[listsize] && word[listsize][0])
|
||||||
|
listsize++;
|
||||||
|
word_eol = (char **) g_malloc(sizeof(char*)*(listsize+1));
|
||||||
|
if (word_eol == NULL) {
|
||||||
|
hexchat_print(ph, "Not enough memory to alloc word_eol "
|
||||||
|
"for python plugin callback.");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/* First build a word clone, but NULL terminated. */
|
||||||
|
memcpy(word_eol, word, listsize*sizeof(char*));
|
||||||
|
word_eol[listsize] = NULL;
|
||||||
|
/* Then join it. */
|
||||||
|
word_eol_raw = g_strjoinv(" ", word_eol);
|
||||||
|
if (word_eol_raw == NULL) {
|
||||||
|
hexchat_print(ph, "Not enough memory to alloc word_eol_raw "
|
||||||
|
"for python plugin callback.");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
/* And rebuild the real word_eol. */
|
||||||
|
for (i = 0; i != listsize; i++) {
|
||||||
|
word_eol[i] = word_eol_raw+next;
|
||||||
|
next += strlen(word[i])+1;
|
||||||
|
}
|
||||||
|
word_eol[i] = "";
|
||||||
|
|
||||||
plugin = hook->plugin;
|
plugin = hook->plugin;
|
||||||
BEGIN_PLUGIN(plugin);
|
BEGIN_PLUGIN(plugin);
|
||||||
|
|
||||||
word_list = Util_BuildList(word);
|
word_list = Util_BuildList(word);
|
||||||
if (word_list == NULL) {
|
if (word_list == NULL) {
|
||||||
|
g_free(word_eol_raw);
|
||||||
|
g_free(word_eol);
|
||||||
END_PLUGIN(plugin);
|
END_PLUGIN(plugin);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
word_eol_list = Util_BuildEOLList(word);
|
word_eol_list = Util_BuildList(word_eol);
|
||||||
if (word_eol_list == NULL) {
|
if (word_eol_list == NULL) {
|
||||||
|
g_free(word_eol_raw);
|
||||||
|
g_free(word_eol);
|
||||||
Py_DECREF(word_list);
|
Py_DECREF(word_list);
|
||||||
END_PLUGIN(plugin);
|
END_PLUGIN(plugin);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
retobj = PyObject_CallFunction(hook->callback, "(OOO)", word_list,
|
retobj = PyObject_CallFunction(hook->callback, "(OOO)", word_list,
|
||||||
word_eol_list, hook->userdata);
|
word_eol_list, hook->userdata);
|
||||||
|
|
||||||
Py_DECREF(word_list);
|
Py_DECREF(word_list);
|
||||||
Py_DECREF(word_eol_list);
|
Py_DECREF(word_eol_list);
|
||||||
|
|
||||||
|
g_free(word_eol_raw);
|
||||||
|
g_free(word_eol);
|
||||||
if (retobj == Py_None) {
|
if (retobj == Py_None) {
|
||||||
ret = HEXCHAT_EAT_NONE;
|
ret = HEXCHAT_EAT_NONE;
|
||||||
Py_DECREF(retobj);
|
Py_DECREF(retobj);
|
||||||
@ -1320,7 +1358,167 @@ ListItem_New(const char *listname)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return (PyObject *) item;
|
return (PyObject *) item;
|
||||||
}
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* ===================================================================== */
|
||||||
|
/* List object */
|
||||||
|
|
||||||
|
#undef OFF
|
||||||
|
#define OFF(x) offsetof(ListObject, x)
|
||||||
|
|
||||||
|
static void
|
||||||
|
List_dealloc(PyObject *self)
|
||||||
|
{
|
||||||
|
BEGIN_XCHAT_CALLS(RESTORE_CONTEXT);
|
||||||
|
hexchat_list_free(ph, ((ListObject*)self)->list);
|
||||||
|
END_XCHAT_CALLS();
|
||||||
|
Py_TYPE(self)->tp_free((PyObject *)self);
|
||||||
|
};
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
List_repr(PyObject *self)
|
||||||
|
{
|
||||||
|
return PyUnicode_FromFormat("<%s list at %p>", ((ListObject*)self)->name, self);
|
||||||
|
};
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
List_iter(PyObject *self)
|
||||||
|
{
|
||||||
|
Py_INCREF(self);
|
||||||
|
return self;
|
||||||
|
};
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
List_iternext(PyObject *self)
|
||||||
|
{
|
||||||
|
hexchat_list *list = ((ListObject *)self)->list;
|
||||||
|
char *name = ((ListObject *)self)->name;
|
||||||
|
PyObject *o = NULL;
|
||||||
|
const char * const *fields;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
BEGIN_XCHAT_CALLS(RESTORE_CONTEXT);
|
||||||
|
fields = hexchat_list_fields(ph, name);
|
||||||
|
if (hexchat_list_next(ph, list))
|
||||||
|
{
|
||||||
|
o = ListItem_New(name);
|
||||||
|
if (o == NULL)
|
||||||
|
goto error;
|
||||||
|
for (i = 0; fields[i]; i++)
|
||||||
|
{
|
||||||
|
const char *fld = fields[i]+1;
|
||||||
|
PyObject *attr = NULL;
|
||||||
|
const char *sattr;
|
||||||
|
int iattr;
|
||||||
|
time_t tattr;
|
||||||
|
|
||||||
|
switch(fields[i][0])
|
||||||
|
{
|
||||||
|
case 's':
|
||||||
|
sattr = hexchat_list_str(ph, list, (char*)fld);
|
||||||
|
attr = PyUnicode_FromString(sattr?sattr:"");
|
||||||
|
break;
|
||||||
|
case 'i':
|
||||||
|
iattr = hexchat_list_int(ph, list, (char*)fld);
|
||||||
|
attr = PyLong_FromLong((long)iattr);
|
||||||
|
break;
|
||||||
|
case 't':
|
||||||
|
tattr = hexchat_list_time(ph, list, (char*)fld);
|
||||||
|
attr = PyLong_FromLong((long)tattr);
|
||||||
|
break;
|
||||||
|
case 'p':
|
||||||
|
sattr = hexchat_list_str(ph, list, (char*)fld);
|
||||||
|
if (strcmp(fld, "context") == 0)
|
||||||
|
{
|
||||||
|
attr = Context_FromContext((hexchat_context*)sattr);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: /* ignore unknown (newly added?) types */
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (attr == NULL)
|
||||||
|
goto error;
|
||||||
|
PyObject_SetAttrString(o, (char*)fld, attr); /* add reference on attr in o */
|
||||||
|
Py_DECREF(attr); /* make o own attr */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Raising of standard StopIteration exception with empty value. */
|
||||||
|
PyErr_SetNone(PyExc_StopIteration);
|
||||||
|
}
|
||||||
|
|
||||||
|
goto exit;
|
||||||
|
|
||||||
|
error:
|
||||||
|
if (list)
|
||||||
|
hexchat_list_free(ph, list);
|
||||||
|
Py_DECREF(o);
|
||||||
|
o = NULL;
|
||||||
|
|
||||||
|
exit:
|
||||||
|
END_XCHAT_CALLS();
|
||||||
|
if (o)
|
||||||
|
return o;
|
||||||
|
return NULL;
|
||||||
|
};
|
||||||
|
|
||||||
|
static PyTypeObject List_Type = {
|
||||||
|
PyVarObject_HEAD_INIT(NULL, 0)
|
||||||
|
"hexchat.List", /*tp_name*/
|
||||||
|
sizeof(ListObject), /*tp_basicsize*/
|
||||||
|
0, /*tp_itemsize*/
|
||||||
|
List_dealloc, /*tp_dealloc*/
|
||||||
|
0, /*tp_print*/
|
||||||
|
0, /*tp_getattr*/
|
||||||
|
0, /*tp_setattr*/
|
||||||
|
0, /*tp_compare*/
|
||||||
|
List_repr, /*tp_repr*/
|
||||||
|
0, /*tp_as_number*/
|
||||||
|
0, /*tp_as_sequence*/
|
||||||
|
0, /*tp_as_mapping*/
|
||||||
|
0, /*tp_hash*/
|
||||||
|
0, /*tp_call*/
|
||||||
|
0, /*tp_str*/
|
||||||
|
PyObject_GenericGetAttr,/*tp_getattro*/
|
||||||
|
PyObject_GenericSetAttr,/*tp_setattro*/
|
||||||
|
0, /*tp_as_buffer*/
|
||||||
|
Py_TPFLAGS_DEFAULT, /*tp_flags*/
|
||||||
|
0, /*tp_doc*/
|
||||||
|
0, /*tp_traverse*/
|
||||||
|
0, /*tp_clear*/
|
||||||
|
0, /*tp_richcompare*/
|
||||||
|
0, /*tp_weaklistoffset*/
|
||||||
|
List_iter, /*tp_iter*/
|
||||||
|
List_iternext, /*tp_iternext*/
|
||||||
|
0, /*tp_methods*/
|
||||||
|
0, /*tp_members*/
|
||||||
|
0, /*tp_getset*/
|
||||||
|
0, /*tp_base*/
|
||||||
|
0, /*tp_dict*/
|
||||||
|
0, /*tp_descr_get*/
|
||||||
|
0, /*tp_descr_set*/
|
||||||
|
0, /*tp_dictoffset*/
|
||||||
|
0, /*tp_init*/
|
||||||
|
PyType_GenericAlloc, /*tp_alloc*/
|
||||||
|
PyType_GenericNew, /*tp_new*/
|
||||||
|
PyObject_Del, /*tp_free*/
|
||||||
|
0, /*tp_is_gc*/
|
||||||
|
};
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
List_New(hexchat_list *list, char *name)
|
||||||
|
{
|
||||||
|
ListObject *listobj = PyObject_New(ListObject, &List_Type);
|
||||||
|
if (listobj != NULL) {
|
||||||
|
/* name parameter must be statically allocated. */
|
||||||
|
listobj->name = name;
|
||||||
|
//listobj->ph = ph;
|
||||||
|
listobj->list = list;
|
||||||
|
}
|
||||||
|
return (PyObject *)listobj;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/* ===================================================================== */
|
/* ===================================================================== */
|
||||||
@ -1929,7 +2127,7 @@ Module_hexchat_pluginpref_list(PyObject *self, PyObject *args)
|
|||||||
{
|
{
|
||||||
PluginObject *plugin = (PluginObject*)Plugin_GetCurrent();
|
PluginObject *plugin = (PluginObject*)Plugin_GetCurrent();
|
||||||
hexchat_plugin *prefph = Plugin_GetHandle(plugin);
|
hexchat_plugin *prefph = Plugin_GetHandle(plugin);
|
||||||
char list[4096];
|
char list[512];
|
||||||
char* token;
|
char* token;
|
||||||
int result;
|
int result;
|
||||||
PyObject *pylist;
|
PyObject *pylist;
|
||||||
@ -2236,6 +2434,7 @@ Module_xchat_get_list(PyObject *self, PyObject *args)
|
|||||||
return NULL;
|
return NULL;
|
||||||
/* This function is thread safe, and returns statically
|
/* This function is thread safe, and returns statically
|
||||||
* allocated data. */
|
* allocated data. */
|
||||||
|
BEGIN_XCHAT_CALLS(RESTORE_CONTEXT);
|
||||||
fields = hexchat_list_fields(ph, "lists");
|
fields = hexchat_list_fields(ph, "lists");
|
||||||
for (i = 0; fields[i]; i++) {
|
for (i = 0; fields[i]; i++) {
|
||||||
if (strcmp(fields[i], name) == 0) {
|
if (strcmp(fields[i], name) == 0) {
|
||||||
@ -2248,57 +2447,14 @@ Module_xchat_get_list(PyObject *self, PyObject *args)
|
|||||||
PyErr_SetString(PyExc_KeyError, "list not available");
|
PyErr_SetString(PyExc_KeyError, "list not available");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
l = PyList_New(0);
|
|
||||||
if (l == NULL)
|
|
||||||
return NULL;
|
|
||||||
BEGIN_XCHAT_CALLS(RESTORE_CONTEXT);
|
|
||||||
list = hexchat_list_get(ph, (char*)name);
|
list = hexchat_list_get(ph, (char*)name);
|
||||||
if (list == NULL)
|
if (list == NULL)
|
||||||
goto error;
|
goto error;
|
||||||
fields = hexchat_list_fields(ph, (char*)name);
|
|
||||||
while (hexchat_list_next(ph, list)) {
|
l = List_New(list, (char*)name);
|
||||||
PyObject *o = ListItem_New(name);
|
if (l == NULL)
|
||||||
if (o == NULL || PyList_Append(l, o) == -1) {
|
goto error;
|
||||||
Py_XDECREF(o);
|
|
||||||
goto error;
|
|
||||||
}
|
|
||||||
Py_DECREF(o); /* l is holding a reference */
|
|
||||||
for (i = 0; fields[i]; i++) {
|
|
||||||
const char *fld = fields[i]+1;
|
|
||||||
PyObject *attr = NULL;
|
|
||||||
const char *sattr;
|
|
||||||
int iattr;
|
|
||||||
time_t tattr;
|
|
||||||
switch(fields[i][0]) {
|
|
||||||
case 's':
|
|
||||||
sattr = hexchat_list_str(ph, list, (char*)fld);
|
|
||||||
attr = PyUnicode_FromString(sattr?sattr:"");
|
|
||||||
break;
|
|
||||||
case 'i':
|
|
||||||
iattr = hexchat_list_int(ph, list, (char*)fld);
|
|
||||||
attr = PyLong_FromLong((long)iattr);
|
|
||||||
break;
|
|
||||||
case 't':
|
|
||||||
tattr = hexchat_list_time(ph, list, (char*)fld);
|
|
||||||
attr = PyLong_FromLong((long)tattr);
|
|
||||||
break;
|
|
||||||
case 'p':
|
|
||||||
sattr = hexchat_list_str(ph, list, (char*)fld);
|
|
||||||
if (strcmp(fld, "context") == 0) {
|
|
||||||
attr = Context_FromContext(
|
|
||||||
(hexchat_context*)sattr);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default: /* ignore unknown (newly added?) types */
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (attr == NULL)
|
|
||||||
goto error;
|
|
||||||
PyObject_SetAttrString(o, (char*)fld, attr); /* add reference on attr in o */
|
|
||||||
Py_DECREF(attr); /* make o own attr */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
hexchat_list_free(ph, list);
|
|
||||||
goto exit;
|
goto exit;
|
||||||
error:
|
error:
|
||||||
if (list)
|
if (list)
|
||||||
|
@ -32,31 +32,36 @@ float percentage(unsigned long long *free, unsigned long long *total)
|
|||||||
|
|
||||||
char *pretty_freespace(const char *desc, unsigned long long *free_k, unsigned long long *total_k)
|
char *pretty_freespace(const char *desc, unsigned long long *free_k, unsigned long long *total_k)
|
||||||
{
|
{
|
||||||
char *result, **quantity;
|
char *result, *bytesize;
|
||||||
double free_space, total_space;
|
double free_space, total_space;
|
||||||
free_space = *free_k;
|
free_space = *free_k;
|
||||||
total_space = *total_k;
|
total_space = *total_k;
|
||||||
result = malloc(bsize * sizeof(char));
|
result = malloc(bsize * sizeof(char));
|
||||||
char *quantities[] = { "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB", 0 };
|
const char *quantities = "KB\0MB\0GB\0TB\0PB\0EB\0ZB\0YB\0";
|
||||||
|
int i=0;
|
||||||
if (total_space == 0)
|
if (total_space == 0)
|
||||||
{
|
{
|
||||||
snprintf(result, bsize, "%s: none", desc);
|
snprintf(result, bsize, "%s: none", desc);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
quantity = quantities;
|
bytesize = malloc(3 * sizeof(char));
|
||||||
while (total_space > 1023 && *(quantity + 1))
|
while (total_space > 1023 && i <= 14)
|
||||||
{
|
{
|
||||||
quantity++;
|
i=i+3;
|
||||||
|
*bytesize=*(quantities+i);
|
||||||
|
*(bytesize+1)=*(quantities+i+1);
|
||||||
|
*(bytesize+2)=*(quantities+i+2);
|
||||||
free_space = free_space / 1024;
|
free_space = free_space / 1024;
|
||||||
total_space = total_space / 1024;
|
total_space = total_space / 1024;
|
||||||
}
|
}
|
||||||
if (sysinfo_get_percent () != 0)
|
if (sysinfo_get_percent () != 0)
|
||||||
snprintf(result, bsize, "%s: %.1f%s, %.1f%% free",
|
snprintf(result, bsize, "%s: %.1f%s, %.1f%% free",
|
||||||
desc, total_space, *quantity,
|
desc, total_space, bytesize,
|
||||||
percentage(free_k, total_k));
|
percentage(free_k, total_k));
|
||||||
else
|
else
|
||||||
snprintf(result, bsize, "%s: %.1f%s/%.1f%s free",
|
snprintf(result, bsize, "%s: %.1f%s/%.1f%s free",
|
||||||
desc, free_space, *quantity, total_space, *quantity);
|
desc, free_space, bytesize, total_space, bytesize);
|
||||||
|
free (bytesize);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -399,6 +399,12 @@ int xs_parse_distro(char *name)
|
|||||||
fgets(buffer, bsize, fp);
|
fgets(buffer, bsize, fp);
|
||||||
else if((fp = fopen("/etc/mandrake-release", "r")) != NULL)
|
else if((fp = fopen("/etc/mandrake-release", "r")) != NULL)
|
||||||
fgets(buffer, bsize, fp);
|
fgets(buffer, bsize, fp);
|
||||||
|
else if((fp = fopen("/etc/debian_version", "r")) != NULL)
|
||||||
|
{
|
||||||
|
char release[bsize];
|
||||||
|
fgets(release, bsize, fp);
|
||||||
|
snprintf(buffer, bsize, "Debian %s", release);
|
||||||
|
}
|
||||||
else if((fp = fopen("/etc/SuSE-release", "r")) != NULL)
|
else if((fp = fopen("/etc/SuSE-release", "r")) != NULL)
|
||||||
fgets(buffer, bsize, fp);
|
fgets(buffer, bsize, fp);
|
||||||
else if((fp = fopen("/etc/turbolinux-release", "r")) != NULL)
|
else if((fp = fopen("/etc/turbolinux-release", "r")) != NULL)
|
||||||
@ -419,12 +425,6 @@ int xs_parse_distro(char *name)
|
|||||||
}
|
}
|
||||||
snprintf(buffer, bsize, "%s \"%s\" %s", id, codename, release);
|
snprintf(buffer, bsize, "%s \"%s\" %s", id, codename, release);
|
||||||
}
|
}
|
||||||
else if((fp = fopen("/etc/debian_version", "r")) != NULL)
|
|
||||||
{
|
|
||||||
char release[bsize];
|
|
||||||
fgets(release, bsize, fp);
|
|
||||||
snprintf(buffer, bsize, "Debian %s", release);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
snprintf(buffer, bsize, "Unknown Distro");
|
snprintf(buffer, bsize, "Unknown Distro");
|
||||||
if(fp != NULL) fclose(fp);
|
if(fp != NULL) fclose(fp);
|
||||||
|
@ -140,11 +140,11 @@ print_summary (int announce, char* format)
|
|||||||
|
|
||||||
if (giga)
|
if (giga)
|
||||||
{
|
{
|
||||||
snprintf (buffer, bsize, "%u x %s (%s) @ %.2fGHz", count, cpu_model, cpu_vendor, cpu_freq);
|
snprintf (buffer, bsize, "%d x %s (%s) @ %.2fGHz", count, cpu_model, cpu_vendor, cpu_freq);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
snprintf (buffer, bsize, "%u x %s (%s) @ %.0fMHz", count, cpu_model, cpu_vendor, cpu_freq);
|
snprintf (buffer, bsize, "%d x %s (%s) @ %.0fMHz", count, cpu_model, cpu_vendor, cpu_freq);
|
||||||
}
|
}
|
||||||
|
|
||||||
format_output ("CPU", buffer, format);
|
format_output ("CPU", buffer, format);
|
||||||
@ -332,11 +332,11 @@ print_cpu (int announce, char* format)
|
|||||||
|
|
||||||
if (giga)
|
if (giga)
|
||||||
{
|
{
|
||||||
snprintf (buffer, bsize, "%u x %s (%s) @ %.2fGHz w/ %s L2 Cache", count, model, vendor, freq, cache);
|
snprintf (buffer, bsize, "%d x %s (%s) @ %.2fGHz w/ %s L2 Cache", count, model, vendor, freq, cache);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
snprintf (buffer, bsize, "%u x %s (%s) @ %.0fMHz w/ %s L2 Cache", count, model, vendor, freq, cache);
|
snprintf (buffer, bsize, "%d x %s (%s) @ %.0fMHz w/ %s L2 Cache", count, model, vendor, freq, cache);
|
||||||
}
|
}
|
||||||
|
|
||||||
format_output ("CPU", buffer, format);
|
format_output ("CPU", buffer, format);
|
||||||
@ -598,7 +598,7 @@ netdata_cb (char *word[], char *word_eol[], void *userdata)
|
|||||||
bytes_recv /= 1024;
|
bytes_recv /= 1024;
|
||||||
bytes_sent /= 1024;
|
bytes_sent /= 1024;
|
||||||
|
|
||||||
snprintf (netdata, bsize, "%s: %.1f MB Received, %.1f MB Sent", word[2], (double)bytes_recv/1024.0, (double)bytes_sent/1024.0);
|
snprintf (netdata, bsize, "%s: %.1f MB Recieved, %.1f MB Sent", word[2], (double)bytes_recv/1024.0, (double)bytes_sent/1024.0);
|
||||||
hexchat_pluginpref_get_str (ph, "format", format);
|
hexchat_pluginpref_get_str (ph, "format", format);
|
||||||
format_output ("Netdata", netdata, format);
|
format_output ("Netdata", netdata, format);
|
||||||
|
|
||||||
|
7
plugins/xdcc/Makefile.am
Normal file
7
plugins/xdcc/Makefile.am
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
libdir = $(hexchatdir)
|
||||||
|
|
||||||
|
lib_LTLIBRARIES = xdcc.la
|
||||||
|
xdcc_la_SOURCES = xdcc.c
|
||||||
|
xdcc_la_LDFLAGS = -avoid-version -module
|
||||||
|
INCLUDES = $(COMMON_CFLAGS) -I$(srcdir)/..
|
||||||
|
|
18
plugins/xdcc/makefile.mak
Normal file
18
plugins/xdcc/makefile.mak
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
include "..\..\src\makeinc.mak"
|
||||||
|
|
||||||
|
all: xdcc.obj xdcc.def
|
||||||
|
link $(LDFLAGS) $(LIBS) /dll /out:xcxdcc.dll /def:xdcc.def xdcc.obj
|
||||||
|
|
||||||
|
xdcc.def:
|
||||||
|
echo EXPORTS > xdcc.def
|
||||||
|
echo hexchat_plugin_init >> xdcc.def
|
||||||
|
echo hexchat_plugin_deinit >> xdcc.def
|
||||||
|
|
||||||
|
xdcc.obj: xdcc.c makefile.mak
|
||||||
|
cl $(CFLAGS) $(GLIB) /I.. xdcc.c
|
||||||
|
|
||||||
|
clean:
|
||||||
|
del *.obj
|
||||||
|
del *.dll
|
||||||
|
del *.exp
|
||||||
|
del *.lib
|
331
plugins/xdcc/xdcc.c
Normal file
331
plugins/xdcc/xdcc.c
Normal file
@ -0,0 +1,331 @@
|
|||||||
|
/* HexChat 2.0 plugin: simple XDCC server example */
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#ifndef WIN32
|
||||||
|
#include <unistd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "hexchat-plugin.h"
|
||||||
|
#include "../../src/common/hexchat.h"
|
||||||
|
|
||||||
|
static hexchat_plugin *ph; /* plugin handle */
|
||||||
|
|
||||||
|
static int xdcc_on = 1;
|
||||||
|
static int xdcc_slots = 3;
|
||||||
|
static GSList *file_list = 0;
|
||||||
|
|
||||||
|
typedef struct fileoffer
|
||||||
|
{
|
||||||
|
char *file;
|
||||||
|
char *fullpath;
|
||||||
|
char *desc;
|
||||||
|
int downloads;
|
||||||
|
} fileoffer;
|
||||||
|
|
||||||
|
|
||||||
|
/* find the number of open dccs */
|
||||||
|
|
||||||
|
static int num_open_dccs(void)
|
||||||
|
{
|
||||||
|
hexchat_list *list;
|
||||||
|
int num = 0;
|
||||||
|
|
||||||
|
list = hexchat_list_get(ph, "dcc");
|
||||||
|
if(!list)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
while(hexchat_list_next(ph, list))
|
||||||
|
{
|
||||||
|
/* check only ACTIVE dccs */
|
||||||
|
if(hexchat_list_int(ph, list, "status") == 1)
|
||||||
|
{
|
||||||
|
/* check only SEND dccs */
|
||||||
|
if(hexchat_list_int(ph, list, "type") == 0)
|
||||||
|
num++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
hexchat_list_free(ph, list);
|
||||||
|
|
||||||
|
return num;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void xdcc_get(char *nick, char *host, char *arg)
|
||||||
|
{
|
||||||
|
int num;
|
||||||
|
GSList *list;
|
||||||
|
fileoffer *offer;
|
||||||
|
|
||||||
|
if(arg[0] == '#')
|
||||||
|
arg++;
|
||||||
|
|
||||||
|
num = atoi(arg);
|
||||||
|
list = g_slist_nth(file_list, num - 1);
|
||||||
|
if(!list)
|
||||||
|
{
|
||||||
|
hexchat_commandf(ph, "quote NOTICE %s :No such file number #%d!", nick, num);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(num_open_dccs() >= xdcc_slots)
|
||||||
|
{
|
||||||
|
hexchat_commandf(ph, "quote NOTICE %s :All slots full. Try again later.", nick);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
offer = (fileoffer *) list->data;
|
||||||
|
offer->downloads++;
|
||||||
|
hexchat_commandf(ph, "quote NOTICE %s :Sending offer #%d %s", nick, num, offer->file);
|
||||||
|
hexchat_commandf(ph, "dcc send %s %s", nick, offer->fullpath);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void xdcc_del(char *name)
|
||||||
|
{
|
||||||
|
GSList *list;
|
||||||
|
fileoffer *offer;
|
||||||
|
|
||||||
|
list = file_list;
|
||||||
|
while(list)
|
||||||
|
{
|
||||||
|
offer = (fileoffer *) list->data;
|
||||||
|
if(strcasecmp(name, offer->file) == 0)
|
||||||
|
{
|
||||||
|
file_list = g_slist_remove(file_list, offer);
|
||||||
|
hexchat_printf(ph, "%s [%s] removed.\n", offer->file, offer->fullpath);
|
||||||
|
free(offer->file);
|
||||||
|
free(offer->desc);
|
||||||
|
free(offer->fullpath);
|
||||||
|
free(offer);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
list = list->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void xdcc_add(char *name, char *fullpath, char *desc, int dl)
|
||||||
|
{
|
||||||
|
fileoffer *offer;
|
||||||
|
|
||||||
|
offer = (fileoffer *) malloc(sizeof(fileoffer));
|
||||||
|
offer->file = strdup(name);
|
||||||
|
offer->desc = strdup(desc);
|
||||||
|
offer->fullpath = strdup(fullpath);
|
||||||
|
offer->downloads = dl;
|
||||||
|
|
||||||
|
file_list = g_slist_append(file_list, offer);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void xdcc_list(char *nick, char *host, char *arg, char *cmd)
|
||||||
|
{
|
||||||
|
GSList *list;
|
||||||
|
int i = 0;
|
||||||
|
fileoffer *offer;
|
||||||
|
|
||||||
|
hexchat_commandf(ph, "%s %s :XDCC List:", cmd, nick);
|
||||||
|
list = file_list;
|
||||||
|
while(list)
|
||||||
|
{
|
||||||
|
i++;
|
||||||
|
offer = (fileoffer *) list->data;
|
||||||
|
hexchat_commandf(ph, "%s %s :[#%d] %s - %s [%d dl]", cmd,
|
||||||
|
nick, i, offer->file, offer->desc, offer->downloads);
|
||||||
|
list = list->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(i == 0)
|
||||||
|
hexchat_commandf(ph, "%s %s :- list empty.", cmd, nick);
|
||||||
|
else
|
||||||
|
hexchat_commandf(ph, "%s %s :%d files listed.", cmd, nick, i);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int xdcc_command(char *word[], char *word_eol[], void *userdata)
|
||||||
|
{
|
||||||
|
if(strcasecmp(word[2], "ADD") == 0)
|
||||||
|
{
|
||||||
|
if(!word_eol[5][0])
|
||||||
|
hexchat_print(ph, "Syntax: /XDCC ADD <name> <path> <description>\n");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(access(word[4], R_OK) == 0)
|
||||||
|
{
|
||||||
|
xdcc_add(word[3], word[4], word_eol[5], 0);
|
||||||
|
hexchat_printf(ph, "%s [%s] added.\n", word[3], word[4]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
hexchat_printf(ph, "Cannot read %s\n", word[4]);
|
||||||
|
}
|
||||||
|
return HEXCHAT_EAT_HEXCHAT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(strcasecmp(word[2], "DEL") == 0)
|
||||||
|
{
|
||||||
|
xdcc_del(word[3]);
|
||||||
|
return HEXCHAT_EAT_HEXCHAT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(strcasecmp(word[2], "SLOTS") == 0)
|
||||||
|
{
|
||||||
|
if(word[3][0])
|
||||||
|
{
|
||||||
|
xdcc_slots = atoi(word[3]);
|
||||||
|
hexchat_printf(ph, "XDCC slots set to %d\n", xdcc_slots);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
hexchat_printf(ph, "XDCC slots: %d\n", xdcc_slots);
|
||||||
|
}
|
||||||
|
return HEXCHAT_EAT_HEXCHAT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(strcasecmp(word[2], "ON") == 0)
|
||||||
|
{
|
||||||
|
xdcc_on = TRUE;
|
||||||
|
hexchat_print(ph, "XDCC now ON\n");
|
||||||
|
return HEXCHAT_EAT_HEXCHAT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(strcasecmp(word[2], "LIST") == 0)
|
||||||
|
{
|
||||||
|
xdcc_list("", "", "", "echo");
|
||||||
|
return HEXCHAT_EAT_HEXCHAT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(strcasecmp(word[2], "OFF") == 0)
|
||||||
|
{
|
||||||
|
xdcc_on = FALSE;
|
||||||
|
hexchat_print(ph, "XDCC now OFF\n");
|
||||||
|
return HEXCHAT_EAT_HEXCHAT;
|
||||||
|
}
|
||||||
|
|
||||||
|
hexchat_print(ph, "Syntax: XDCC ADD <name> <fullpath> <description>\n"
|
||||||
|
" XDCC DEL <name>\n"
|
||||||
|
" XDCC SLOTS <number>\n"
|
||||||
|
" XDCC LIST\n"
|
||||||
|
" XDCC ON\n"
|
||||||
|
" XDCC OFF\n\n");
|
||||||
|
|
||||||
|
return HEXCHAT_EAT_HEXCHAT;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void xdcc_remote(char *from, char *msg)
|
||||||
|
{
|
||||||
|
char *ex, *nick, *host;
|
||||||
|
|
||||||
|
ex = strchr(from, '!');
|
||||||
|
if(!ex)
|
||||||
|
return;
|
||||||
|
ex[0] = 0;
|
||||||
|
nick = from;
|
||||||
|
host = ex + 1;
|
||||||
|
|
||||||
|
if(xdcc_on == 0)
|
||||||
|
{
|
||||||
|
hexchat_commandf(ph, "notice %s XDCC is turned OFF!", from);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(strncasecmp(msg, "LIST", 4) == 0)
|
||||||
|
xdcc_list(nick, host, msg + 4, "quote notice");
|
||||||
|
else if(strncasecmp(msg, "GET ", 4) == 0)
|
||||||
|
xdcc_get(nick, host, msg + 4);
|
||||||
|
else
|
||||||
|
hexchat_commandf(ph, "notice %s Unknown XDCC command!", from);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ctcp_cb(char *word[], void *userdata)
|
||||||
|
{
|
||||||
|
char *msg = word[1];
|
||||||
|
char *from = word[2];
|
||||||
|
|
||||||
|
if(strncasecmp(msg, "XDCC ", 5) == 0)
|
||||||
|
xdcc_remote(from, msg + 5);
|
||||||
|
|
||||||
|
return HEXCHAT_EAT_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void xdcc_save(void)
|
||||||
|
{
|
||||||
|
char buf[512];
|
||||||
|
FILE *fp;
|
||||||
|
GSList *list;
|
||||||
|
fileoffer *offer;
|
||||||
|
|
||||||
|
snprintf(buf, sizeof(buf), "%s/xdcclist.conf", hexchat_get_info(ph, "configdir"));
|
||||||
|
|
||||||
|
fp = fopen(buf, "w");
|
||||||
|
if(!fp)
|
||||||
|
return;
|
||||||
|
|
||||||
|
list = file_list;
|
||||||
|
while(list)
|
||||||
|
{
|
||||||
|
offer = (fileoffer *) list->data;
|
||||||
|
fprintf(fp, "%s\n%s\n%s\n%d\n\n\n", offer->file, offer->fullpath,
|
||||||
|
offer->desc, offer->downloads);
|
||||||
|
list = list->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void xdcc_load(void)
|
||||||
|
{
|
||||||
|
char buf[512];
|
||||||
|
char file[128];
|
||||||
|
char path[128];
|
||||||
|
char desc[128];
|
||||||
|
char dl[128];
|
||||||
|
FILE *fp;
|
||||||
|
|
||||||
|
snprintf(buf, sizeof(buf), "%s/xdcclist.conf", hexchat_get_info(ph, "configdir"));
|
||||||
|
|
||||||
|
fp = fopen(buf, "r");
|
||||||
|
if(!fp)
|
||||||
|
return;
|
||||||
|
|
||||||
|
while(fgets(file, sizeof(file), fp))
|
||||||
|
{
|
||||||
|
file[strlen(file)-1] = 0;
|
||||||
|
fgets(path, sizeof(path), fp);
|
||||||
|
path[strlen(path)-1] = 0;
|
||||||
|
fgets(desc, sizeof(desc), fp);
|
||||||
|
desc[strlen(desc)-1] = 0;
|
||||||
|
fgets(dl, sizeof(dl), fp);
|
||||||
|
dl[strlen(dl)-1] = 0;
|
||||||
|
fgets(buf, sizeof(buf), fp);
|
||||||
|
fgets(buf, sizeof(buf), fp);
|
||||||
|
xdcc_add(file, path, desc, atoi(dl));
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
int hexchat_plugin_deinit(void)
|
||||||
|
{
|
||||||
|
xdcc_save();
|
||||||
|
hexchat_print(ph, "XDCC List saved\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int hexchat_plugin_init(hexchat_plugin *plugin_handle,
|
||||||
|
char **plugin_name, char **plugin_desc, char **plugin_version,
|
||||||
|
char *arg)
|
||||||
|
{
|
||||||
|
ph = plugin_handle;
|
||||||
|
|
||||||
|
*plugin_name = "XDCC";
|
||||||
|
*plugin_desc = "Very simple XDCC server";
|
||||||
|
*plugin_version = "0.1";
|
||||||
|
|
||||||
|
hexchat_hook_command(ph, "XDCC", HEXCHAT_PRI_NORM, xdcc_command, 0, 0);
|
||||||
|
hexchat_hook_print(ph, "CTCP Generic", HEXCHAT_PRI_NORM, ctcp_cb, 0);
|
||||||
|
hexchat_hook_print(ph, "CTCP Generic to Channel", HEXCHAT_PRI_NORM, ctcp_cb, 0);
|
||||||
|
|
||||||
|
xdcc_load();
|
||||||
|
hexchat_print(ph, "XDCC loaded. Type /XDCC for help.\n");
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
53
po/LINGUAS
53
po/LINGUAS
@ -1,53 +0,0 @@
|
|||||||
af
|
|
||||||
am
|
|
||||||
ast
|
|
||||||
az
|
|
||||||
be
|
|
||||||
bg
|
|
||||||
ca
|
|
||||||
cs
|
|
||||||
da
|
|
||||||
de
|
|
||||||
el
|
|
||||||
en_GB
|
|
||||||
es
|
|
||||||
et
|
|
||||||
eu
|
|
||||||
fi
|
|
||||||
fr
|
|
||||||
gl
|
|
||||||
gu
|
|
||||||
hi
|
|
||||||
hu
|
|
||||||
id
|
|
||||||
it
|
|
||||||
ja_JP
|
|
||||||
kn
|
|
||||||
ko
|
|
||||||
lt
|
|
||||||
lv
|
|
||||||
mk
|
|
||||||
ml
|
|
||||||
ms
|
|
||||||
nb
|
|
||||||
nl
|
|
||||||
no
|
|
||||||
pa
|
|
||||||
pl
|
|
||||||
pt
|
|
||||||
pt_BR
|
|
||||||
ru
|
|
||||||
rw
|
|
||||||
sk
|
|
||||||
sl
|
|
||||||
sq
|
|
||||||
sr
|
|
||||||
sr@latin
|
|
||||||
sv
|
|
||||||
th
|
|
||||||
tr
|
|
||||||
uk
|
|
||||||
vi
|
|
||||||
wa
|
|
||||||
zh_CN
|
|
||||||
zh_TW
|
|
@ -1,6 +1,3 @@
|
|||||||
data/misc/hexchat.appdata.xml.in
|
|
||||||
data/misc/hexchat.desktop.in
|
|
||||||
data/misc/htm.desktop.in
|
|
||||||
src/common/cfgfiles.c
|
src/common/cfgfiles.c
|
||||||
src/common/dcc.c
|
src/common/dcc.c
|
||||||
src/common/hexchat.c
|
src/common/hexchat.c
|
||||||
|
2
po/de.po
2
po/de.po
@ -21,7 +21,7 @@ msgstr ""
|
|||||||
"Project-Id-Version: HexChat\n"
|
"Project-Id-Version: HexChat\n"
|
||||||
"Report-Msgid-Bugs-To: www.hexchat.org\n"
|
"Report-Msgid-Bugs-To: www.hexchat.org\n"
|
||||||
"POT-Creation-Date: 2013-09-08 01:16-0400\n"
|
"POT-Creation-Date: 2013-09-08 01:16-0400\n"
|
||||||
"PO-Revision-Date: 2013-11-20 09:21+0000\n"
|
"PO-Revision-Date: 2013-09-08 05:21+0000\n"
|
||||||
"Last-Translator: TingPing <tingping@tingping.se>\n"
|
"Last-Translator: TingPing <tingping@tingping.se>\n"
|
||||||
"Language-Team: German (http://www.transifex.com/projects/p/hexchat/language/de/)\n"
|
"Language-Team: German (http://www.transifex.com/projects/p/hexchat/language/de/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
73
po/en_GB.po
73
po/en_GB.po
@ -3,7 +3,6 @@
|
|||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# sacarasc <sacarasc@gmail.com>, 2013
|
# sacarasc <sacarasc@gmail.com>, 2013
|
||||||
# Sir_Burpalot <doctor.z01db3rg@gmail.com>, 2014
|
|
||||||
# Gareth Owen <gowen72@yahoo.com>, 2004
|
# Gareth Owen <gowen72@yahoo.com>, 2004
|
||||||
# tea <Srbulov.Ivan@gmail.com>, 2013
|
# tea <Srbulov.Ivan@gmail.com>, 2013
|
||||||
# rbh00 <rbh00@netcom.com>, 2013
|
# rbh00 <rbh00@netcom.com>, 2013
|
||||||
@ -14,8 +13,8 @@ msgstr ""
|
|||||||
"Project-Id-Version: HexChat\n"
|
"Project-Id-Version: HexChat\n"
|
||||||
"Report-Msgid-Bugs-To: www.hexchat.org\n"
|
"Report-Msgid-Bugs-To: www.hexchat.org\n"
|
||||||
"POT-Creation-Date: 2013-09-08 01:16-0400\n"
|
"POT-Creation-Date: 2013-09-08 01:16-0400\n"
|
||||||
"PO-Revision-Date: 2014-01-05 04:00+0000\n"
|
"PO-Revision-Date: 2013-09-15 08:06+0000\n"
|
||||||
"Last-Translator: Sir_Burpalot <doctor.z01db3rg@gmail.com>\n"
|
"Last-Translator: rbh00 <rbh00@netcom.com>\n"
|
||||||
"Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/hexchat/language/en_GB/)\n"
|
"Language-Team: English (United Kingdom) (http://www.transifex.com/projects/p/hexchat/language/en_GB/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
@ -357,11 +356,11 @@ msgstr "CHARSET [<encoding>], get or set the encoding used for the current conne
|
|||||||
msgid ""
|
msgid ""
|
||||||
"CLEAR [ALL|HISTORY|[-]<amount>], Clears the current text window or command "
|
"CLEAR [ALL|HISTORY|[-]<amount>], Clears the current text window or command "
|
||||||
"history"
|
"history"
|
||||||
msgstr "CLEAR [ALL|HISTORY|[-]<amount>], Clears the current text window or command history"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/outbound.c:3819
|
#: src/common/outbound.c:3819
|
||||||
msgid "CLOSE [-m], Closes the current window/tab or all queries"
|
msgid "CLOSE [-m], Closes the current window/tab or all queries"
|
||||||
msgstr "CLOSE [-m], Closes the current window/tab or all queries"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/outbound.c:3822
|
#: src/common/outbound.c:3822
|
||||||
msgid "COUNTRY [-s] <code|wildcard>, finds a country code, eg: au = australia"
|
msgid "COUNTRY [-s] <code|wildcard>, finds a country code, eg: au = australia"
|
||||||
@ -548,7 +547,7 @@ msgstr "MOP, Mass op's all users in the current channel (needs chanop)"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"MSG <nick> <message>, sends a private message, message \".\" to send to last"
|
"MSG <nick> <message>, sends a private message, message \".\" to send to last"
|
||||||
" nick or prefix with \"=\" for dcc chat"
|
" nick or prefix with \"=\" for dcc chat"
|
||||||
msgstr "MSG <nick> <message>, sends a private message, message \".\" to send to last nick or prefix with \"=\" for dcc chat"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/outbound.c:3922
|
#: src/common/outbound.c:3922
|
||||||
msgid "NAMES, Lists the nicks on the current channel"
|
msgid "NAMES, Lists the nicks on the current channel"
|
||||||
@ -629,7 +628,7 @@ msgstr "RECV <text>, send raw data to HexChat, as if it was received from the IR
|
|||||||
|
|
||||||
#: src/common/outbound.c:3954
|
#: src/common/outbound.c:3954
|
||||||
msgid "RELOAD <name>, reloads a plugin or script"
|
msgid "RELOAD <name>, reloads a plugin or script"
|
||||||
msgstr "RELOAD <name>, reloads a plugin or script"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/outbound.c:3956
|
#: src/common/outbound.c:3956
|
||||||
msgid "SAY <text>, sends the text to the object in the current window"
|
msgid "SAY <text>, sends the text to the object in the current window"
|
||||||
@ -904,7 +903,7 @@ msgstr "%C22*%O$t%C26$1%O removes quiet on %C18$2%O"
|
|||||||
|
|
||||||
#: src/common/textevents.h:108
|
#: src/common/textevents.h:108
|
||||||
msgid "%C22*%O$tChannel %C22$1%O url: %C24$2"
|
msgid "%C22*%O$tChannel %C22$1%O url: %C24$2"
|
||||||
msgstr "%C22*%O$tChannel %C22$1%O url: %C24$2"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/textevents.h:111
|
#: src/common/textevents.h:111
|
||||||
msgid "%C22*%O$t%C26$1%O gives voice to %C18$2%O"
|
msgid "%C22*%O$t%C26$1%O gives voice to %C18$2%O"
|
||||||
@ -1101,7 +1100,7 @@ msgstr "%C24*%O$tYou have been invited to %C22$1%O by %C18$2%O (%C29$3%O)"
|
|||||||
#: src/common/textevents.h:252
|
#: src/common/textevents.h:252
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%C23*$t$1 ($3%C23) has joined"
|
msgid "%C23*$t$1 ($3%C23) has joined"
|
||||||
msgstr "%C23*$t$1 ($3%C23) has joined"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/textevents.h:255
|
#: src/common/textevents.h:255
|
||||||
msgid "%C20*%O$tCannot join %C22$1%C (%C20Requires keyword%O)"
|
msgid "%C20*%O$tCannot join %C22$1%C (%C20Requires keyword%O)"
|
||||||
@ -1172,12 +1171,12 @@ msgstr "%C23*%O$tNotify: %C18$1%C is online (%C29$3%O)"
|
|||||||
#: src/common/textevents.h:318
|
#: src/common/textevents.h:318
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%C24*$t$1 ($2%C24) has left"
|
msgid "%C24*$t$1 ($2%C24) has left"
|
||||||
msgstr "%C24*$t$1 ($2%C24) has left"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/textevents.h:321
|
#: src/common/textevents.h:321
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%C24*$t$1 ($2%C24) has left ($4)"
|
msgid "%C24*$t$1 ($2%C24) has left ($4)"
|
||||||
msgstr "%C24*$t$1 ($2%C24) has left ($4)"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/textevents.h:324
|
#: src/common/textevents.h:324
|
||||||
msgid "%C24*%O$tPing reply from %C18$1%C: %C24$2%O second(s)"
|
msgid "%C24*%O$tPing reply from %C18$1%C: %C24$2%O second(s)"
|
||||||
@ -1210,7 +1209,7 @@ msgstr "%C24*%O$tLooking up IP number for %C18$1%O..."
|
|||||||
|
|
||||||
#: src/common/textevents.h:357
|
#: src/common/textevents.h:357
|
||||||
msgid "%C23*%O$tAuthenticating via SASL as %C18$1%O (%C24$2%O)"
|
msgid "%C23*%O$tAuthenticating via SASL as %C18$1%O (%C24$2%O)"
|
||||||
msgstr "%C23*%O$tAuthenticating via SASL as %C18$1%O (%C24$2%O)"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/textevents.h:363
|
#: src/common/textevents.h:363
|
||||||
msgid "%C29*%O$tConnected."
|
msgid "%C29*%O$tConnected."
|
||||||
@ -1238,7 +1237,7 @@ msgstr "%C22*%O$tTopic for %C22$1%C set by %C26$2%C (%C24$3%O)"
|
|||||||
|
|
||||||
#: src/common/textevents.h:393
|
#: src/common/textevents.h:393
|
||||||
msgid "%C20*%O$tUnknown host. Maybe you misspelled it?"
|
msgid "%C20*%O$tUnknown host. Maybe you misspelled it?"
|
||||||
msgstr "%C20*%O$tUnknown host. Maybe you misspelt it?"
|
msgstr "%C20*%O$tUnknown host. Maybe you misspelled it?"
|
||||||
|
|
||||||
#: src/common/textevents.h:396
|
#: src/common/textevents.h:396
|
||||||
msgid "%C20*%O$tCannot join %C22$1%C (%C20User limit reached%O)"
|
msgid "%C20*%O$tCannot join %C22$1%C (%C20User limit reached%O)"
|
||||||
@ -1670,7 +1669,7 @@ msgstr "Channel Name"
|
|||||||
|
|
||||||
#: src/common/text.c:1301
|
#: src/common/text.c:1301
|
||||||
msgid "Mechanism"
|
msgid "Mechanism"
|
||||||
msgstr "Mechanism"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/text.c:1306 src/common/text.c:1314
|
#: src/common/text.c:1306 src/common/text.c:1314
|
||||||
msgid "Raw Numeric or Identifier"
|
msgid "Raw Numeric or Identifier"
|
||||||
@ -3407,7 +3406,7 @@ msgstr "The Insert in Buffer command will insert the contents of Data 1 into t
|
|||||||
msgid ""
|
msgid ""
|
||||||
"The Scroll Page command scrolls the text widget up or down one page or one"
|
"The Scroll Page command scrolls the text widget up or down one page or one"
|
||||||
" line. Set Data 1 to either Top, Bottom, Up, Down, +1 or -1."
|
" line. Set Data 1 to either Top, Bottom, Up, Down, +1 or -1."
|
||||||
msgstr "The Scroll Page command scrolls the text widget up or down one page or one line. Set Data 1 to either Top, Bottom, Up, Down, +1 or -1."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/fkeys.c:153
|
#: src/fe-gtk/fkeys.c:153
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -3915,7 +3914,7 @@ msgstr "_Autojoin"
|
|||||||
|
|
||||||
#: src/fe-gtk/menu.c:1054
|
#: src/fe-gtk/menu.c:1054
|
||||||
msgid "Autojoin Channel"
|
msgid "Autojoin Channel"
|
||||||
msgstr "Autojoin Channel"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/menu.c:1088 src/fe-gtk/menu.c:1092
|
#: src/fe-gtk/menu.c:1088 src/fe-gtk/menu.c:1092
|
||||||
msgid "_Auto-Connect"
|
msgid "_Auto-Connect"
|
||||||
@ -4145,15 +4144,15 @@ msgstr "_Reconnect"
|
|||||||
|
|
||||||
#: src/fe-gtk/menu.c:1751
|
#: src/fe-gtk/menu.c:1751
|
||||||
msgid "_Join a Channel..."
|
msgid "_Join a Channel..."
|
||||||
msgstr "_Join a Channel..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/menu.c:1752
|
#: src/fe-gtk/menu.c:1752
|
||||||
msgid "_List of Channels..."
|
msgid "_List of Channels..."
|
||||||
msgstr "_List of Channels..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/menu.c:1755
|
#: src/fe-gtk/menu.c:1755
|
||||||
msgid "Marked _Away"
|
msgid "Marked _Away"
|
||||||
msgstr "Marked _Away"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/menu.c:1757
|
#: src/fe-gtk/menu.c:1757
|
||||||
msgid "_Usermenu"
|
msgid "_Usermenu"
|
||||||
@ -4209,7 +4208,7 @@ msgstr "_Window"
|
|||||||
|
|
||||||
#: src/fe-gtk/menu.c:1773
|
#: src/fe-gtk/menu.c:1773
|
||||||
msgid "_Ban List..."
|
msgid "_Ban List..."
|
||||||
msgstr "_Ban List..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/menu.c:1774
|
#: src/fe-gtk/menu.c:1774
|
||||||
msgid "Character Chart..."
|
msgid "Character Chart..."
|
||||||
@ -4221,7 +4220,7 @@ msgstr "Direct Chat..."
|
|||||||
|
|
||||||
#: src/fe-gtk/menu.c:1776
|
#: src/fe-gtk/menu.c:1776
|
||||||
msgid "File _Transfers..."
|
msgid "File _Transfers..."
|
||||||
msgstr "File _Transfers..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/menu.c:1777
|
#: src/fe-gtk/menu.c:1777
|
||||||
msgid "Friends List..."
|
msgid "Friends List..."
|
||||||
@ -4233,11 +4232,11 @@ msgstr "Ignore List..."
|
|||||||
|
|
||||||
#: src/fe-gtk/menu.c:1779
|
#: src/fe-gtk/menu.c:1779
|
||||||
msgid "_Plugins and Scripts..."
|
msgid "_Plugins and Scripts..."
|
||||||
msgstr "_Plugins and Scripts..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/menu.c:1780
|
#: src/fe-gtk/menu.c:1780
|
||||||
msgid "_Raw Log..."
|
msgid "_Raw Log..."
|
||||||
msgstr "_Raw Log..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/menu.c:1781
|
#: src/fe-gtk/menu.c:1781
|
||||||
msgid "URL Grabber..."
|
msgid "URL Grabber..."
|
||||||
@ -4473,11 +4472,11 @@ msgstr "_Load..."
|
|||||||
|
|
||||||
#: src/fe-gtk/plugingui.c:270
|
#: src/fe-gtk/plugingui.c:270
|
||||||
msgid "_Unload"
|
msgid "_Unload"
|
||||||
msgstr "_Unload"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/plugingui.c:273
|
#: src/fe-gtk/plugingui.c:273
|
||||||
msgid "_Reload"
|
msgid "_Reload"
|
||||||
msgstr "_Reload"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/rawlog.c:80 src/fe-gtk/rawlog.c:146 src/fe-gtk/textgui.c:428
|
#: src/fe-gtk/rawlog.c:80 src/fe-gtk/rawlog.c:146 src/fe-gtk/textgui.c:428
|
||||||
#: src/fe-gtk/urlgrab.c:216
|
#: src/fe-gtk/urlgrab.c:216
|
||||||
@ -5077,15 +5076,15 @@ msgstr "Nick completion sorted:"
|
|||||||
|
|
||||||
#: src/fe-gtk/setup.c:222
|
#: src/fe-gtk/setup.c:222
|
||||||
msgid "Nick completion amount:"
|
msgid "Nick completion amount:"
|
||||||
msgstr "Nick completion amount:"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:222
|
#: src/fe-gtk/setup.c:222
|
||||||
msgid "Threshold of nicks to start listing instead of completing"
|
msgid "Threshold of nicks to start listing instead of completing"
|
||||||
msgstr "Threshold of nicks to start listing instead of completing"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:222
|
#: src/fe-gtk/setup.c:222
|
||||||
msgid "nicks."
|
msgid "nicks."
|
||||||
msgstr "nicks."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:225
|
#: src/fe-gtk/setup.c:225
|
||||||
msgid "Input Box Codes"
|
msgid "Input Box Codes"
|
||||||
@ -5553,19 +5552,19 @@ msgstr "Hide channel join/part messages by default."
|
|||||||
|
|
||||||
#: src/fe-gtk/setup.c:503
|
#: src/fe-gtk/setup.c:503
|
||||||
msgid "*!*@*.host"
|
msgid "*!*@*.host"
|
||||||
msgstr "*!*@*.host"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:504
|
#: src/fe-gtk/setup.c:504
|
||||||
msgid "*!*@domain"
|
msgid "*!*@domain"
|
||||||
msgstr "*!*@domain"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:505
|
#: src/fe-gtk/setup.c:505
|
||||||
msgid "*!*user@*.host"
|
msgid "*!*user@*.host"
|
||||||
msgstr "*!*user@*.host"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:506
|
#: src/fe-gtk/setup.c:506
|
||||||
msgid "*!*user@domain"
|
msgid "*!*user@domain"
|
||||||
msgstr "*!*user@domain"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:512
|
#: src/fe-gtk/setup.c:512
|
||||||
msgid "Auto Copy Behavior"
|
msgid "Auto Copy Behavior"
|
||||||
@ -5611,7 +5610,7 @@ msgstr "Alternative fonts:"
|
|||||||
|
|
||||||
#: src/fe-gtk/setup.c:528
|
#: src/fe-gtk/setup.c:528
|
||||||
msgid "Separate multiple entries with commas without spaces before or after."
|
msgid "Separate multiple entries with commas without spaces before or after."
|
||||||
msgstr "Separate multiple entries with commas without spaces before or after."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:530
|
#: src/fe-gtk/setup.c:530
|
||||||
msgid "Display lists in compact mode"
|
msgid "Display lists in compact mode"
|
||||||
@ -5623,13 +5622,13 @@ msgstr "Use less spacing between user list/channel tree rows."
|
|||||||
|
|
||||||
#: src/fe-gtk/setup.c:531
|
#: src/fe-gtk/setup.c:531
|
||||||
msgid "Use server time if supported"
|
msgid "Use server time if supported"
|
||||||
msgstr "Use server time if supported"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:531
|
#: src/fe-gtk/setup.c:531
|
||||||
msgid ""
|
msgid ""
|
||||||
"Display timestamps obtained from server if it supports the time-server "
|
"Display timestamps obtained from server if it supports the time-server "
|
||||||
"extension."
|
"extension."
|
||||||
msgstr "Display timestamps obtained from server if it supports the time-server extension."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:532
|
#: src/fe-gtk/setup.c:532
|
||||||
msgid "Automatically reconnect to servers on disconnect"
|
msgid "Automatically reconnect to servers on disconnect"
|
||||||
@ -5645,13 +5644,13 @@ msgstr "Auto join delay:"
|
|||||||
|
|
||||||
#: src/fe-gtk/setup.c:535
|
#: src/fe-gtk/setup.c:535
|
||||||
msgid "Ban Type:"
|
msgid "Ban Type:"
|
||||||
msgstr "Ban Type:"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:535
|
#: src/fe-gtk/setup.c:535
|
||||||
msgid ""
|
msgid ""
|
||||||
"Attempt to use this banmask when banning or quieting. (requires "
|
"Attempt to use this banmask when banning or quieting. (requires "
|
||||||
"irc_who_join)"
|
"irc_who_join)"
|
||||||
msgstr "Attempt to use this banmask when banning or quieting. (requires irc_who_join)"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:542 src/fe-gtk/setup.c:1853
|
#: src/fe-gtk/setup.c:542 src/fe-gtk/setup.c:1853
|
||||||
msgid "Logging"
|
msgid "Logging"
|
||||||
|
2
po/es.po
2
po/es.po
@ -10,7 +10,7 @@ msgstr ""
|
|||||||
"Project-Id-Version: HexChat\n"
|
"Project-Id-Version: HexChat\n"
|
||||||
"Report-Msgid-Bugs-To: www.hexchat.org\n"
|
"Report-Msgid-Bugs-To: www.hexchat.org\n"
|
||||||
"POT-Creation-Date: 2013-09-08 01:16-0400\n"
|
"POT-Creation-Date: 2013-09-08 01:16-0400\n"
|
||||||
"PO-Revision-Date: 2013-11-20 09:21+0000\n"
|
"PO-Revision-Date: 2013-09-08 18:10+0000\n"
|
||||||
"Last-Translator: VegaDark <vegadark89@gmail.com>\n"
|
"Last-Translator: VegaDark <vegadark89@gmail.com>\n"
|
||||||
"Language-Team: Spanish (http://www.transifex.com/projects/p/hexchat/language/es/)\n"
|
"Language-Team: Spanish (http://www.transifex.com/projects/p/hexchat/language/es/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
179
po/fr.po
179
po/fr.po
@ -6,14 +6,13 @@
|
|||||||
# Benjamin Sonntag <benjamin@sonntag.fr>, 2007,2012
|
# Benjamin Sonntag <benjamin@sonntag.fr>, 2007,2012
|
||||||
# Misdre <misdre@hexchat.misdre.info>, 2013
|
# Misdre <misdre@hexchat.misdre.info>, 2013
|
||||||
# Misdre <misdre@hexchat.misdre.info>, 2013
|
# Misdre <misdre@hexchat.misdre.info>, 2013
|
||||||
# Calinou, 2013
|
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: HexChat\n"
|
"Project-Id-Version: HexChat\n"
|
||||||
"Report-Msgid-Bugs-To: www.hexchat.org\n"
|
"Report-Msgid-Bugs-To: www.hexchat.org\n"
|
||||||
"POT-Creation-Date: 2013-09-08 01:16-0400\n"
|
"POT-Creation-Date: 2013-09-08 01:16-0400\n"
|
||||||
"PO-Revision-Date: 2013-11-24 18:50+0000\n"
|
"PO-Revision-Date: 2013-09-08 05:21+0000\n"
|
||||||
"Last-Translator: Calinou\n"
|
"Last-Translator: TingPing <tingping@tingping.se>\n"
|
||||||
"Language-Team: French (http://www.transifex.com/projects/p/hexchat/language/fr/)\n"
|
"Language-Team: French (http://www.transifex.com/projects/p/hexchat/language/fr/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
@ -294,7 +293,7 @@ msgstr "Paramètre inconnu « %s », ignoré."
|
|||||||
|
|
||||||
#: src/common/outbound.c:3007 src/common/outbound.c:3037
|
#: src/common/outbound.c:3007 src/common/outbound.c:3037
|
||||||
msgid "Quiet is not supported by this server."
|
msgid "Quiet is not supported by this server."
|
||||||
msgstr "Rendre muet n'est pas pris en charge sur ce serveur."
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/outbound.c:3488 src/common/outbound.c:3522
|
#: src/common/outbound.c:3488 src/common/outbound.c:3522
|
||||||
msgid "No such plugin found.\n"
|
msgid "No such plugin found.\n"
|
||||||
@ -355,11 +354,11 @@ msgstr "CHARSET [<encodage>], retourne ou modifie le jeu de caractère utilisé
|
|||||||
msgid ""
|
msgid ""
|
||||||
"CLEAR [ALL|HISTORY|[-]<amount>], Clears the current text window or command "
|
"CLEAR [ALL|HISTORY|[-]<amount>], Clears the current text window or command "
|
||||||
"history"
|
"history"
|
||||||
msgstr "CLEAR [ALL|HISTORY|[-]<nombre>], vider la fenêtre de texte actuelle ou l'historique de commandes"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/outbound.c:3819
|
#: src/common/outbound.c:3819
|
||||||
msgid "CLOSE [-m], Closes the current window/tab or all queries"
|
msgid "CLOSE [-m], Closes the current window/tab or all queries"
|
||||||
msgstr "CLOSE [-m], ferme la fenêtre ou l'onglet actuel ou toutes les fenêtres de requête"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/outbound.c:3822
|
#: src/common/outbound.c:3822
|
||||||
msgid "COUNTRY [-s] <code|wildcard>, finds a country code, eg: au = australia"
|
msgid "COUNTRY [-s] <code|wildcard>, finds a country code, eg: au = australia"
|
||||||
@ -546,7 +545,7 @@ msgstr "MOP, donner globalement les droits d'opérateur à tous les utilisateurs
|
|||||||
msgid ""
|
msgid ""
|
||||||
"MSG <nick> <message>, sends a private message, message \".\" to send to last"
|
"MSG <nick> <message>, sends a private message, message \".\" to send to last"
|
||||||
" nick or prefix with \"=\" for dcc chat"
|
" nick or prefix with \"=\" for dcc chat"
|
||||||
msgstr "MSG <pseudo> <message>, envoie un message privé, envoyez un message à « . » pour envoyer au dernier pseudo utilisé ou préfixez avec « = » pour un chat DCC"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/outbound.c:3922
|
#: src/common/outbound.c:3922
|
||||||
msgid "NAMES, Lists the nicks on the current channel"
|
msgid "NAMES, Lists the nicks on the current channel"
|
||||||
@ -566,7 +565,7 @@ msgstr "NICK <pseudo>, définir votre pseudonyme"
|
|||||||
|
|
||||||
#: src/common/outbound.c:3929
|
#: src/common/outbound.c:3929
|
||||||
msgid "NOTICE <nick/channel> <message>, sends a notice"
|
msgid "NOTICE <nick/channel> <message>, sends a notice"
|
||||||
msgstr "NOTICE <pseudo/canal> <message>, envoie une notification"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/outbound.c:3931
|
#: src/common/outbound.c:3931
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -595,7 +594,7 @@ msgstr "QUERY [-nofocus] <pseudo>, ouvre une fenêtre de chat privé avec quelqu
|
|||||||
msgid ""
|
msgid ""
|
||||||
"QUIET <mask> [<quiettype>], quiet everyone matching the mask in the current "
|
"QUIET <mask> [<quiettype>], quiet everyone matching the mask in the current "
|
||||||
"channel if supported by the server."
|
"channel if supported by the server."
|
||||||
msgstr "QUIET <masque> [<quiettype>], rendre muet toutes les personnes qui correspondent au masque dans le canal courant si pris en charge par le serveur."
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/outbound.c:3943
|
#: src/common/outbound.c:3943
|
||||||
msgid "QUIT [<reason>], disconnects from the current server"
|
msgid "QUIT [<reason>], disconnects from the current server"
|
||||||
@ -627,7 +626,7 @@ msgstr "RECV <texte>, envoie des données brutes à HexChat, comme si elles éta
|
|||||||
|
|
||||||
#: src/common/outbound.c:3954
|
#: src/common/outbound.c:3954
|
||||||
msgid "RELOAD <name>, reloads a plugin or script"
|
msgid "RELOAD <name>, reloads a plugin or script"
|
||||||
msgstr "RELOAD <nom>, recharge un plugin ou script"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/outbound.c:3956
|
#: src/common/outbound.c:3956
|
||||||
msgid "SAY <text>, sends the text to the object in the current window"
|
msgid "SAY <text>, sends the text to the object in the current window"
|
||||||
@ -705,7 +704,7 @@ msgstr "UNLOAD <nom>, décharger un greffon ou un script"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"UNQUIET <mask> [<mask>...], unquiets the specified masks if supported by the"
|
"UNQUIET <mask> [<mask>...], unquiets the specified masks if supported by the"
|
||||||
" server."
|
" server."
|
||||||
msgstr "UNQUIET <masque> [<masque>...], ne plus rendre muet les masques spécifiés si pris en charge par le serveur."
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/outbound.c:3992
|
#: src/common/outbound.c:3992
|
||||||
msgid "URL <url>, opens a URL in your browser"
|
msgid "URL <url>, opens a URL in your browser"
|
||||||
@ -794,7 +793,7 @@ msgstr "%C18*%O$t%C18$1%O ajouté à la liste de notifications."
|
|||||||
|
|
||||||
#: src/common/textevents.h:9
|
#: src/common/textevents.h:9
|
||||||
msgid "%C22*%O$t%C22$1%O: %C18$2%O on %C24$4%O by %C26$3%O"
|
msgid "%C22*%O$t%C22$1%O: %C18$2%O on %C24$4%O by %C26$3%O"
|
||||||
msgstr "%C22*%O$t%C22$1%O: %C18$2%O sur %C24$4%O par %C26$3%O"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/textevents.h:12
|
#: src/common/textevents.h:12
|
||||||
msgid "%C22*%O$tCannot join %C22$1 %O(%C20You are banned%O)."
|
msgid "%C22*%O$tCannot join %C22$1 %O(%C20You are banned%O)."
|
||||||
@ -846,7 +845,7 @@ msgstr "%C22*%O$t%C26$1%O a donné le statut de semi-opérateur de canal à %C18
|
|||||||
|
|
||||||
#: src/common/textevents.h:57
|
#: src/common/textevents.h:57
|
||||||
msgid "%C22*%O$t%C26$1%C sets invite exempt on %C18$2%O"
|
msgid "%C22*%O$t%C26$1%C sets invite exempt on %C18$2%O"
|
||||||
msgstr "%C22*%O$t%C26$1%C définit l'exemption d'invitation sur %C18$2%O"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/textevents.h:60
|
#: src/common/textevents.h:60
|
||||||
msgid "%UChannel Users Topic"
|
msgid "%UChannel Users Topic"
|
||||||
@ -866,7 +865,7 @@ msgstr "%C22*%O$t%C26$1%O a donné le statut d'opérateur de canal à %C18$2%O"
|
|||||||
|
|
||||||
#: src/common/textevents.h:81
|
#: src/common/textevents.h:81
|
||||||
msgid "%C22*%O$t%C26$1%O sets quiet on %C18$2%O"
|
msgid "%C22*%O$t%C26$1%O sets quiet on %C18$2%O"
|
||||||
msgstr "%C22*%O$t%C26$1%O rend %C18$2%O muet"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/textevents.h:84
|
#: src/common/textevents.h:84
|
||||||
msgid "%C22*%O$t%C26$1%O removes exempt on %C18$2%O"
|
msgid "%C22*%O$t%C26$1%O removes exempt on %C18$2%O"
|
||||||
@ -874,7 +873,7 @@ msgstr "%C22*%O$t%C26$1%O a enlevé l'exception sur %C18$2%O"
|
|||||||
|
|
||||||
#: src/common/textevents.h:87
|
#: src/common/textevents.h:87
|
||||||
msgid "%C22*%O$t%C26$1%O removes invite exempt on %C18$2%O"
|
msgid "%C22*%O$t%C26$1%O removes invite exempt on %C18$2%O"
|
||||||
msgstr "%C22*%O$t%C26$1%O supprime l'exemption d'invitation sur %C18$2%O"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/textevents.h:90
|
#: src/common/textevents.h:90
|
||||||
msgid "%C22*%O$t%C26$1%O removes channel keyword"
|
msgid "%C22*%O$t%C26$1%O removes channel keyword"
|
||||||
@ -886,7 +885,7 @@ msgstr "%C22*%O$t%C26$1%O a enlevé la limite du nombre d'utilisateurs"
|
|||||||
|
|
||||||
#: src/common/textevents.h:96
|
#: src/common/textevents.h:96
|
||||||
msgid "%C22*%O$t%C26$1%O sets channel keyword to %C24$2%O"
|
msgid "%C22*%O$t%C26$1%O sets channel keyword to %C24$2%O"
|
||||||
msgstr "%C22*%O$t%C26$1%O définit le mot-clé du canal à %C24$2%O"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/textevents.h:99
|
#: src/common/textevents.h:99
|
||||||
msgid "%C22*%O$t%C26$1%O sets channel limit to %C24$2%O"
|
msgid "%C22*%O$t%C26$1%O sets channel limit to %C24$2%O"
|
||||||
@ -898,11 +897,11 @@ msgstr "%C22*%O$t%C26$1%O supprime l'état de bannissement de %C18$2%O"
|
|||||||
|
|
||||||
#: src/common/textevents.h:105
|
#: src/common/textevents.h:105
|
||||||
msgid "%C22*%O$t%C26$1%O removes quiet on %C18$2%O"
|
msgid "%C22*%O$t%C26$1%O removes quiet on %C18$2%O"
|
||||||
msgstr "%C22*%O$t%C26$1%O ne rend plus %C18$2%O muet"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/textevents.h:108
|
#: src/common/textevents.h:108
|
||||||
msgid "%C22*%O$tChannel %C22$1%O url: %C24$2"
|
msgid "%C22*%O$tChannel %C22$1%O url: %C24$2"
|
||||||
msgstr "%C22*%O$tCanal %C22$1%O URL : %C24$2"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/textevents.h:111
|
#: src/common/textevents.h:111
|
||||||
msgid "%C22*%O$t%C26$1%O gives voice to %C18$2%O"
|
msgid "%C22*%O$t%C26$1%O gives voice to %C18$2%O"
|
||||||
@ -1099,7 +1098,7 @@ msgstr "%C24*%O$tVous avez été invité sur %C22$1%O par %C18$2%O (%C29$3%O)"
|
|||||||
#: src/common/textevents.h:252
|
#: src/common/textevents.h:252
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%C23*$t$1 ($3%C23) has joined"
|
msgid "%C23*$t$1 ($3%C23) has joined"
|
||||||
msgstr "%C23*$t$1 ($3%C23) vient de rentrer"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/textevents.h:255
|
#: src/common/textevents.h:255
|
||||||
msgid "%C20*%O$tCannot join %C22$1%C (%C20Requires keyword%O)"
|
msgid "%C20*%O$tCannot join %C22$1%C (%C20Requires keyword%O)"
|
||||||
@ -1119,16 +1118,16 @@ msgstr "%C29*%O$t%C29MOTD passé%O"
|
|||||||
|
|
||||||
#: src/common/textevents.h:273
|
#: src/common/textevents.h:273
|
||||||
msgid "%C23*%O$t%C28$1%C is already in use. Retrying with %C18$2%O..."
|
msgid "%C23*%O$t%C28$1%C is already in use. Retrying with %C18$2%O..."
|
||||||
msgstr "%C23*%O$t%C28$1%C est déjà utilisé. Tentative avec %C18$2%O..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/textevents.h:276
|
#: src/common/textevents.h:276
|
||||||
msgid "%C23*%O$t%C28$1%C is erroneous. Retrying with %C18$2%O..."
|
msgid "%C23*%O$t%C28$1%C is erroneous. Retrying with %C18$2%O..."
|
||||||
msgstr "%C23*%O$t%C28$1%C est erroné. Tentative avec %C18$2%O..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/textevents.h:279
|
#: src/common/textevents.h:279
|
||||||
msgid ""
|
msgid ""
|
||||||
"%C20*%O$tNickname is erroneous or already in use. Use /NICK to try another."
|
"%C20*%O$tNickname is erroneous or already in use. Use /NICK to try another."
|
||||||
msgstr "%C20*%O$tPseudonyme erroné ou déjà utilisé. Utilisez /NICK pour en essayer un autre."
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/textevents.h:282
|
#: src/common/textevents.h:282
|
||||||
msgid "%C20*%O$tNo such DCC."
|
msgid "%C20*%O$tNo such DCC."
|
||||||
@ -1140,11 +1139,11 @@ msgstr "%C23*%O$tAucun processus ne tourne pour l'instant"
|
|||||||
|
|
||||||
#: src/common/textevents.h:294
|
#: src/common/textevents.h:294
|
||||||
msgid "%C23*%O$tNotify: %C18$1%C is away (%C24$2%O)"
|
msgid "%C23*%O$tNotify: %C18$1%C is away (%C24$2%O)"
|
||||||
msgstr "%C23*%O$tNotification : %C18$1%C est absent (%C24$2%O)"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/textevents.h:297
|
#: src/common/textevents.h:297
|
||||||
msgid "%C23*%O$tNotify: %C18$1%C is back"
|
msgid "%C23*%O$tNotify: %C18$1%C is back"
|
||||||
msgstr "%C23*%O$tNotification : %C18$1%C est de retour"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/textevents.h:300
|
#: src/common/textevents.h:300
|
||||||
msgid "$tNotify list is empty."
|
msgid "$tNotify list is empty."
|
||||||
@ -1170,12 +1169,12 @@ msgstr "%C23*%O$tInformation : %C18$1%C est connecté (%C29$3%O)"
|
|||||||
#: src/common/textevents.h:318
|
#: src/common/textevents.h:318
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%C24*$t$1 ($2%C24) has left"
|
msgid "%C24*$t$1 ($2%C24) has left"
|
||||||
msgstr "%C24*$t$1 ($2%C24) est parti"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/textevents.h:321
|
#: src/common/textevents.h:321
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%C24*$t$1 ($2%C24) has left ($4)"
|
msgid "%C24*$t$1 ($2%C24) has left ($4)"
|
||||||
msgstr "%C24*$t$1 ($2%C24) est parti ($4)"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/textevents.h:324
|
#: src/common/textevents.h:324
|
||||||
msgid "%C24*%O$tPing reply from %C18$1%C: %C24$2%O second(s)"
|
msgid "%C24*%O$tPing reply from %C18$1%C: %C24$2%O second(s)"
|
||||||
@ -1208,7 +1207,7 @@ msgstr "%C24*%O$tRecherche de l'adresse IP de %C18$1%O..."
|
|||||||
|
|
||||||
#: src/common/textevents.h:357
|
#: src/common/textevents.h:357
|
||||||
msgid "%C23*%O$tAuthenticating via SASL as %C18$1%O (%C24$2%O)"
|
msgid "%C23*%O$tAuthenticating via SASL as %C18$1%O (%C24$2%O)"
|
||||||
msgstr "%C23*%O$tAuthentification par SASL en tant que %C18$1%O (%C24$2%O)"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/textevents.h:363
|
#: src/common/textevents.h:363
|
||||||
msgid "%C29*%O$tConnected."
|
msgid "%C29*%O$tConnected."
|
||||||
@ -1534,11 +1533,11 @@ msgstr "Masque de bannissement"
|
|||||||
|
|
||||||
#: src/common/text.c:1176
|
#: src/common/text.c:1176
|
||||||
msgid "The nick of the person who did the quieting"
|
msgid "The nick of the person who did the quieting"
|
||||||
msgstr "Pseudonyme de la personne qui a rendu muet"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/text.c:1177 src/common/text.c:1209
|
#: src/common/text.c:1177 src/common/text.c:1209
|
||||||
msgid "The quiet mask"
|
msgid "The quiet mask"
|
||||||
msgstr "Le masque « quiet »"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/text.c:1181
|
#: src/common/text.c:1181
|
||||||
msgid "The nick who removed the key"
|
msgid "The nick who removed the key"
|
||||||
@ -1578,7 +1577,7 @@ msgstr "Pseudonyme de la personne qui a supprimé l'état de bannissement"
|
|||||||
|
|
||||||
#: src/common/text.c:1208
|
#: src/common/text.c:1208
|
||||||
msgid "The nick of the person of did the unquiet'ing"
|
msgid "The nick of the person of did the unquiet'ing"
|
||||||
msgstr "Pseudonyme de la personne qui n'a plus rendu muet"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/text.c:1213
|
#: src/common/text.c:1213
|
||||||
msgid "The nick of the person who did the exempt"
|
msgid "The nick of the person who did the exempt"
|
||||||
@ -1668,7 +1667,7 @@ msgstr "Nom du canal"
|
|||||||
|
|
||||||
#: src/common/text.c:1301
|
#: src/common/text.c:1301
|
||||||
msgid "Mechanism"
|
msgid "Mechanism"
|
||||||
msgstr "Mécanisme"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/text.c:1306 src/common/text.c:1314
|
#: src/common/text.c:1306 src/common/text.c:1314
|
||||||
msgid "Raw Numeric or Identifier"
|
msgid "Raw Numeric or Identifier"
|
||||||
@ -3013,16 +3012,16 @@ msgstr "Silencieux"
|
|||||||
|
|
||||||
#: src/fe-gtk/banlist.c:346 src/fe-gtk/banlist.c:380
|
#: src/fe-gtk/banlist.c:346 src/fe-gtk/banlist.c:380
|
||||||
msgid "Copy mask"
|
msgid "Copy mask"
|
||||||
msgstr "Copier le masque"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/banlist.c:349
|
#: src/fe-gtk/banlist.c:349
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%s on %s by %s"
|
msgid "%s on %s by %s"
|
||||||
msgstr "%s sur %s par %s"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/banlist.c:381
|
#: src/fe-gtk/banlist.c:381
|
||||||
msgid "Copy entry"
|
msgid "Copy entry"
|
||||||
msgstr "Copier l'entrée"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/banlist.c:454 src/fe-gtk/chanlist.c:294
|
#: src/fe-gtk/banlist.c:454 src/fe-gtk/chanlist.c:294
|
||||||
#: src/fe-gtk/plugin-tray.c:267
|
#: src/fe-gtk/plugin-tray.c:267
|
||||||
@ -3331,7 +3330,7 @@ msgstr "Afficher le répertoire de configuration de l'utilisateur"
|
|||||||
|
|
||||||
#: src/fe-gtk/fe-gtk.c:127 src/fe-gtk/fe-gtk.c:134
|
#: src/fe-gtk/fe-gtk.c:127 src/fe-gtk/fe-gtk.c:134
|
||||||
msgid "Open an irc://server:port/channel?key URL"
|
msgid "Open an irc://server:port/channel?key URL"
|
||||||
msgstr "Ouvrir une URL irc://server:port/channel?key"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/fe-gtk.c:129 src/fe-gtk/setup.c:290
|
#: src/fe-gtk/fe-gtk.c:129 src/fe-gtk/setup.c:290
|
||||||
msgid "Execute command:"
|
msgid "Execute command:"
|
||||||
@ -3747,7 +3746,7 @@ msgstr "_Recharger le tampon"
|
|||||||
|
|
||||||
#: src/fe-gtk/maingui.c:1569
|
#: src/fe-gtk/maingui.c:1569
|
||||||
msgid "Strip _Colors"
|
msgid "Strip _Colors"
|
||||||
msgstr "Enlever les couleurs"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/maingui.c:1570
|
#: src/fe-gtk/maingui.c:1570
|
||||||
msgid "_Hide Join/Part Messages"
|
msgid "_Hide Join/Part Messages"
|
||||||
@ -3885,7 +3884,7 @@ msgstr "%d pseudonymes sélectionnés."
|
|||||||
msgid ""
|
msgid ""
|
||||||
"The Menubar is now hidden. You can show it again by pressing Control+F9 or "
|
"The Menubar is now hidden. You can show it again by pressing Control+F9 or "
|
||||||
"right-clicking in a blank part of the main text area."
|
"right-clicking in a blank part of the main text area."
|
||||||
msgstr "La barre de menu est maintenant cachée. Vous pouvez l'afficher en appuyant sur Contrôle+F9 ou en faisant un clic droit sur la fenêtre principale."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/menu.c:945
|
#: src/fe-gtk/menu.c:945
|
||||||
msgid "Open Link in Browser"
|
msgid "Open Link in Browser"
|
||||||
@ -3909,15 +3908,15 @@ msgstr "Cycler canal"
|
|||||||
|
|
||||||
#: src/fe-gtk/menu.c:1052
|
#: src/fe-gtk/menu.c:1052
|
||||||
msgid "_Autojoin"
|
msgid "_Autojoin"
|
||||||
msgstr "Rejoindre automatiquement si expulsé"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/menu.c:1054
|
#: src/fe-gtk/menu.c:1054
|
||||||
msgid "Autojoin Channel"
|
msgid "Autojoin Channel"
|
||||||
msgstr "Joindre le canal automatiquement"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/menu.c:1088 src/fe-gtk/menu.c:1092
|
#: src/fe-gtk/menu.c:1088 src/fe-gtk/menu.c:1092
|
||||||
msgid "_Auto-Connect"
|
msgid "_Auto-Connect"
|
||||||
msgstr "Connexion automatique"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/menu.c:1112
|
#: src/fe-gtk/menu.c:1112
|
||||||
msgid ": User menu"
|
msgid ": User menu"
|
||||||
@ -4143,15 +4142,15 @@ msgstr "Se _reconnecter"
|
|||||||
|
|
||||||
#: src/fe-gtk/menu.c:1751
|
#: src/fe-gtk/menu.c:1751
|
||||||
msgid "_Join a Channel..."
|
msgid "_Join a Channel..."
|
||||||
msgstr "Re_joindre un canal..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/menu.c:1752
|
#: src/fe-gtk/menu.c:1752
|
||||||
msgid "_List of Channels..."
|
msgid "_List of Channels..."
|
||||||
msgstr "_Liste de canaux..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/menu.c:1755
|
#: src/fe-gtk/menu.c:1755
|
||||||
msgid "Marked _Away"
|
msgid "Marked _Away"
|
||||||
msgstr "Marqué _absent"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/menu.c:1757
|
#: src/fe-gtk/menu.c:1757
|
||||||
msgid "_Usermenu"
|
msgid "_Usermenu"
|
||||||
@ -4207,7 +4206,7 @@ msgstr "_Fenêtre"
|
|||||||
|
|
||||||
#: src/fe-gtk/menu.c:1773
|
#: src/fe-gtk/menu.c:1773
|
||||||
msgid "_Ban List..."
|
msgid "_Ban List..."
|
||||||
msgstr "Liste de _bannissement..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/menu.c:1774
|
#: src/fe-gtk/menu.c:1774
|
||||||
msgid "Character Chart..."
|
msgid "Character Chart..."
|
||||||
@ -4219,7 +4218,7 @@ msgstr "Chat direct..."
|
|||||||
|
|
||||||
#: src/fe-gtk/menu.c:1776
|
#: src/fe-gtk/menu.c:1776
|
||||||
msgid "File _Transfers..."
|
msgid "File _Transfers..."
|
||||||
msgstr "_Transferts de fichiers..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/menu.c:1777
|
#: src/fe-gtk/menu.c:1777
|
||||||
msgid "Friends List..."
|
msgid "Friends List..."
|
||||||
@ -4231,11 +4230,11 @@ msgstr "Liste d'ignorance..."
|
|||||||
|
|
||||||
#: src/fe-gtk/menu.c:1779
|
#: src/fe-gtk/menu.c:1779
|
||||||
msgid "_Plugins and Scripts..."
|
msgid "_Plugins and Scripts..."
|
||||||
msgstr "_Plugins et scripts..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/menu.c:1780
|
#: src/fe-gtk/menu.c:1780
|
||||||
msgid "_Raw Log..."
|
msgid "_Raw Log..."
|
||||||
msgstr "Journal b_rut..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/menu.c:1781
|
#: src/fe-gtk/menu.c:1781
|
||||||
msgid "URL Grabber..."
|
msgid "URL Grabber..."
|
||||||
@ -4402,22 +4401,22 @@ msgstr "XChat : %u messages en surbrillance. Le dernier est de %s (%s)"
|
|||||||
#: src/fe-gtk/plugin-tray.c:718
|
#: src/fe-gtk/plugin-tray.c:718
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Highlighted message from: %s (%s)"
|
msgid "Highlighted message from: %s (%s)"
|
||||||
msgstr "Message en surbrillance de : %s (%s)"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/plugin-tray.c:736
|
#: src/fe-gtk/plugin-tray.c:736
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ": Channel message from: %s (%s)"
|
msgid ": Channel message from: %s (%s)"
|
||||||
msgstr ": Message de canal de : %s (%s)"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/plugin-tray.c:739
|
#: src/fe-gtk/plugin-tray.c:739
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid ": %u channel messages."
|
msgid ": %u channel messages."
|
||||||
msgstr ": %u messages de canal."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/plugin-tray.c:743
|
#: src/fe-gtk/plugin-tray.c:743
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Channel message from: %s (%s)"
|
msgid "Channel message from: %s (%s)"
|
||||||
msgstr "Message de canal de : %s (%s)"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/plugin-tray.c:765
|
#: src/fe-gtk/plugin-tray.c:765
|
||||||
#, c-format
|
#, c-format
|
||||||
@ -4432,7 +4431,7 @@ msgstr "XChat : %u messages privés. Le dernier est de %s (%s)"
|
|||||||
#: src/fe-gtk/plugin-tray.c:772
|
#: src/fe-gtk/plugin-tray.c:772
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "Private message from: %s (%s)"
|
msgid "Private message from: %s (%s)"
|
||||||
msgstr "Message privé de : %s (%s)"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/plugin-tray.c:818
|
#: src/fe-gtk/plugin-tray.c:818
|
||||||
#, c-format
|
#, c-format
|
||||||
@ -4471,11 +4470,11 @@ msgstr "_Charger..."
|
|||||||
|
|
||||||
#: src/fe-gtk/plugingui.c:270
|
#: src/fe-gtk/plugingui.c:270
|
||||||
msgid "_Unload"
|
msgid "_Unload"
|
||||||
msgstr "_Décharger"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/plugingui.c:273
|
#: src/fe-gtk/plugingui.c:273
|
||||||
msgid "_Reload"
|
msgid "_Reload"
|
||||||
msgstr "_Recharger"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/rawlog.c:80 src/fe-gtk/rawlog.c:146 src/fe-gtk/textgui.c:428
|
#: src/fe-gtk/rawlog.c:80 src/fe-gtk/rawlog.c:146 src/fe-gtk/textgui.c:428
|
||||||
#: src/fe-gtk/urlgrab.c:216
|
#: src/fe-gtk/urlgrab.c:216
|
||||||
@ -4501,7 +4500,7 @@ msgstr "XChat : chercher"
|
|||||||
|
|
||||||
#: src/fe-gtk/search.c:175
|
#: src/fe-gtk/search.c:175
|
||||||
msgid "Search hit end or not found."
|
msgid "Search hit end or not found."
|
||||||
msgstr "Fin atteinte lors de la recherche ou non trouvé."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/search.c:193
|
#: src/fe-gtk/search.c:193
|
||||||
msgid "_Find"
|
msgid "_Find"
|
||||||
@ -4513,7 +4512,7 @@ msgstr "_Sensible à la casse"
|
|||||||
|
|
||||||
#: src/fe-gtk/search.c:201
|
#: src/fe-gtk/search.c:201
|
||||||
msgid "Perform a case-sensitive search."
|
msgid "Perform a case-sensitive search."
|
||||||
msgstr "Réaliser une recherche sensible à la casse."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/search.c:205
|
#: src/fe-gtk/search.c:205
|
||||||
msgid "Search _backwards"
|
msgid "Search _backwards"
|
||||||
@ -4521,7 +4520,7 @@ msgstr "Rechercher vers l'a_rrière"
|
|||||||
|
|
||||||
#: src/fe-gtk/search.c:209
|
#: src/fe-gtk/search.c:209
|
||||||
msgid "Search from the newest text line to the oldest."
|
msgid "Search from the newest text line to the oldest."
|
||||||
msgstr "Chercher de la ligne la plus récente à la plus ancienne."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/search.c:213
|
#: src/fe-gtk/search.c:213
|
||||||
msgid "_Highlight all"
|
msgid "_Highlight all"
|
||||||
@ -4529,7 +4528,7 @@ msgstr "Mettre tout en _Surbrillance"
|
|||||||
|
|
||||||
#: src/fe-gtk/search.c:217
|
#: src/fe-gtk/search.c:217
|
||||||
msgid "Highlight all occurrences, and underline the current occurrence."
|
msgid "Highlight all occurrences, and underline the current occurrence."
|
||||||
msgstr "Mettre en surbrillance toutes les occurrences et souligner l'occurrence actuelle."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/search.c:221
|
#: src/fe-gtk/search.c:221
|
||||||
msgid "R_egular expression"
|
msgid "R_egular expression"
|
||||||
@ -4537,11 +4536,11 @@ msgstr "_Expression rationnelle"
|
|||||||
|
|
||||||
#: src/fe-gtk/search.c:225
|
#: src/fe-gtk/search.c:225
|
||||||
msgid "Regard search string as a regular expression."
|
msgid "Regard search string as a regular expression."
|
||||||
msgstr "Voir la chaîne de recherche comme une expression régulière."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/search.c:235
|
#: src/fe-gtk/search.c:235
|
||||||
msgid "Close this box, but continue searching new lines."
|
msgid "Close this box, but continue searching new lines."
|
||||||
msgstr "Fermer cette fenêtre, mais continuer à chercher des nouvelles lignes."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/search.c:237
|
#: src/fe-gtk/search.c:237
|
||||||
msgid "Close and _Reset"
|
msgid "Close and _Reset"
|
||||||
@ -4551,7 +4550,7 @@ msgstr "Fermer et _réinitialiser"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"Close this box, reset highlighted search items, and stop searching new "
|
"Close this box, reset highlighted search items, and stop searching new "
|
||||||
"lines."
|
"lines."
|
||||||
msgstr "Fermer cette fenêtre, remettre à zéro les mots mis en surbrillance et arrêter de rechercher de nouvelles lignes."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/servlistgui.c:301 src/fe-gtk/servlistgui.c:499
|
#: src/fe-gtk/servlistgui.c:301 src/fe-gtk/servlistgui.c:499
|
||||||
msgid "New Network"
|
msgid "New Network"
|
||||||
@ -4570,7 +4569,7 @@ msgstr "Le nom d'utilisateur et le nom réel ne peuvent être laissés blancs."
|
|||||||
msgid ""
|
msgid ""
|
||||||
"The way you identify yourself to the server. For custom login methods use "
|
"The way you identify yourself to the server. For custom login methods use "
|
||||||
"connect commands."
|
"connect commands."
|
||||||
msgstr "La façon qui permet de vous identifier sur le serveur. Pour des méthodes d'identification personnalisées, utilisez des commandes de connexion."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/servlistgui.c:1650
|
#: src/fe-gtk/servlistgui.c:1650
|
||||||
#, c-format
|
#, c-format
|
||||||
@ -4583,11 +4582,11 @@ msgstr "Serveurs"
|
|||||||
|
|
||||||
#: src/fe-gtk/servlistgui.c:1673
|
#: src/fe-gtk/servlistgui.c:1673
|
||||||
msgid "Autojoin channels"
|
msgid "Autojoin channels"
|
||||||
msgstr "Joindre automatiquement ces canaux"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/servlistgui.c:1674
|
#: src/fe-gtk/servlistgui.c:1674
|
||||||
msgid "Connect commands"
|
msgid "Connect commands"
|
||||||
msgstr "Commandes de connexion"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/servlistgui.c:1686
|
#: src/fe-gtk/servlistgui.c:1686
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -4595,7 +4594,7 @@ msgid ""
|
|||||||
"%p=Password\n"
|
"%p=Password\n"
|
||||||
"%r=Real name\n"
|
"%r=Real name\n"
|
||||||
"%u=User name"
|
"%u=User name"
|
||||||
msgstr "%n=Pseudonyme\n%p=Mot de passe\n%r=Nom réel\n%u=Nom d'utilisateur"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/servlistgui.c:1743
|
#: src/fe-gtk/servlistgui.c:1743
|
||||||
msgid "Key (Password)"
|
msgid "Key (Password)"
|
||||||
@ -4615,7 +4614,7 @@ msgstr "Ne pas passer au serveur suivant lorsque la connexion échoue."
|
|||||||
|
|
||||||
#: src/fe-gtk/servlistgui.c:1810
|
#: src/fe-gtk/servlistgui.c:1810
|
||||||
msgid "Connect to this network automatically"
|
msgid "Connect to this network automatically"
|
||||||
msgstr "Se connecter à ce réseau automatiquement"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/servlistgui.c:1811
|
#: src/fe-gtk/servlistgui.c:1811
|
||||||
msgid "Bypass proxy server"
|
msgid "Bypass proxy server"
|
||||||
@ -4627,7 +4626,7 @@ msgstr "Utiliser SSL pour tous les serveurs de ce réseau"
|
|||||||
|
|
||||||
#: src/fe-gtk/servlistgui.c:1816
|
#: src/fe-gtk/servlistgui.c:1816
|
||||||
msgid "Accept invalid SSL certificates"
|
msgid "Accept invalid SSL certificates"
|
||||||
msgstr "Accepter les certificats SSL non valides"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/servlistgui.c:1820
|
#: src/fe-gtk/servlistgui.c:1820
|
||||||
msgid "Use global user information"
|
msgid "Use global user information"
|
||||||
@ -4651,7 +4650,7 @@ msgstr "Nom d'_utilisateur :"
|
|||||||
|
|
||||||
#: src/fe-gtk/servlistgui.c:1827
|
#: src/fe-gtk/servlistgui.c:1827
|
||||||
msgid "Login method:"
|
msgid "Login method:"
|
||||||
msgstr "Méthode d'identification :"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/servlistgui.c:1833 src/fe-gtk/setup.c:618
|
#: src/fe-gtk/servlistgui.c:1833 src/fe-gtk/setup.c:618
|
||||||
msgid "Password:"
|
msgid "Password:"
|
||||||
@ -4659,7 +4658,7 @@ msgstr "Mot de passe :"
|
|||||||
|
|
||||||
#: src/fe-gtk/servlistgui.c:1833
|
#: src/fe-gtk/servlistgui.c:1833
|
||||||
msgid "Password used for login. If in doubt, leave blank."
|
msgid "Password used for login. If in doubt, leave blank."
|
||||||
msgstr "Le mot de passe utilisé pour se connecter. En cas de doute, le laisser blanc."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/servlistgui.c:1838
|
#: src/fe-gtk/servlistgui.c:1838
|
||||||
msgid "Character set:"
|
msgid "Character set:"
|
||||||
@ -5075,15 +5074,15 @@ msgstr "Tri de la complétion des pseudo :"
|
|||||||
|
|
||||||
#: src/fe-gtk/setup.c:222
|
#: src/fe-gtk/setup.c:222
|
||||||
msgid "Nick completion amount:"
|
msgid "Nick completion amount:"
|
||||||
msgstr "Maximum pour la complétion de pseudonymes :"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:222
|
#: src/fe-gtk/setup.c:222
|
||||||
msgid "Threshold of nicks to start listing instead of completing"
|
msgid "Threshold of nicks to start listing instead of completing"
|
||||||
msgstr "Seuil du nombre de pseudonymes à lister au lieu de compléter"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:222
|
#: src/fe-gtk/setup.c:222
|
||||||
msgid "nicks."
|
msgid "nicks."
|
||||||
msgstr "pseudonymes."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:225
|
#: src/fe-gtk/setup.c:225
|
||||||
msgid "Input Box Codes"
|
msgid "Input Box Codes"
|
||||||
@ -5418,13 +5417,13 @@ msgstr "Quand émettre un bip : "
|
|||||||
msgid ""
|
msgid ""
|
||||||
"Play the \"Instant Message Notification\" system sound upon the selected "
|
"Play the \"Instant Message Notification\" system sound upon the selected "
|
||||||
"events"
|
"events"
|
||||||
msgstr "Jouer le son système « Notification de messagerie instantanée » quand les événements sélectionnés surviennent"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:429
|
#: src/fe-gtk/setup.c:429
|
||||||
msgid ""
|
msgid ""
|
||||||
"Play \"message-new-instant\" from the freedesktop.org sound theme upon the "
|
"Play \"message-new-instant\" from the freedesktop.org sound theme upon the "
|
||||||
"selected events"
|
"selected events"
|
||||||
msgstr "Jouer « message-new-instant » depuis le thème de sons freedesktop.org quand les événements sélectionnés surviennent"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:432 src/fe-gtk/setup.c:468
|
#: src/fe-gtk/setup.c:432 src/fe-gtk/setup.c:468
|
||||||
msgid "Omit alerts when marked as being away"
|
msgid "Omit alerts when marked as being away"
|
||||||
@ -5432,7 +5431,7 @@ msgstr "Passer les alertes quand vous êtes absent"
|
|||||||
|
|
||||||
#: src/fe-gtk/setup.c:433 src/fe-gtk/setup.c:469
|
#: src/fe-gtk/setup.c:433 src/fe-gtk/setup.c:469
|
||||||
msgid "Omit alerts while the window is focused"
|
msgid "Omit alerts while the window is focused"
|
||||||
msgstr "Omettre les alertes quand la fenêtre est focalisée"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:435
|
#: src/fe-gtk/setup.c:435
|
||||||
msgid "Tray Behavior"
|
msgid "Tray Behavior"
|
||||||
@ -5456,7 +5455,7 @@ msgstr "Gérer le statut absent/présent automatiquement"
|
|||||||
|
|
||||||
#: src/fe-gtk/setup.c:443
|
#: src/fe-gtk/setup.c:443
|
||||||
msgid "Automatically change status when hiding to tray."
|
msgid "Automatically change status when hiding to tray."
|
||||||
msgstr "Automatiquement changer de statut en cachant l'application dans la barre de tâches."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:445
|
#: src/fe-gtk/setup.c:445
|
||||||
msgid "Only show tray balloons when hidden or iconified"
|
msgid "Only show tray balloons when hidden or iconified"
|
||||||
@ -5527,7 +5526,7 @@ msgstr "Vous sortir du mode absent avant d'envoyer des messages."
|
|||||||
|
|
||||||
#: src/fe-gtk/setup.c:493 src/fe-gtk/setup.c:525
|
#: src/fe-gtk/setup.c:493 src/fe-gtk/setup.c:525
|
||||||
msgid "Miscellaneous"
|
msgid "Miscellaneous"
|
||||||
msgstr "Autres"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:494
|
#: src/fe-gtk/setup.c:494
|
||||||
msgid "Display MODEs in raw form"
|
msgid "Display MODEs in raw form"
|
||||||
@ -5535,7 +5534,7 @@ msgstr "Afficher les MODEs sous forme brute"
|
|||||||
|
|
||||||
#: src/fe-gtk/setup.c:495
|
#: src/fe-gtk/setup.c:495
|
||||||
msgid "WHOIS on notify"
|
msgid "WHOIS on notify"
|
||||||
msgstr "WHOIS sur les notifications"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:495
|
#: src/fe-gtk/setup.c:495
|
||||||
msgid "Sends a /WHOIS when a user comes online in your notify list."
|
msgid "Sends a /WHOIS when a user comes online in your notify list."
|
||||||
@ -5551,19 +5550,19 @@ msgstr "Cacher les messages d'entrée/sortie par défaut."
|
|||||||
|
|
||||||
#: src/fe-gtk/setup.c:503
|
#: src/fe-gtk/setup.c:503
|
||||||
msgid "*!*@*.host"
|
msgid "*!*@*.host"
|
||||||
msgstr "*!*@*.hôte"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:504
|
#: src/fe-gtk/setup.c:504
|
||||||
msgid "*!*@domain"
|
msgid "*!*@domain"
|
||||||
msgstr "*!*@domaine"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:505
|
#: src/fe-gtk/setup.c:505
|
||||||
msgid "*!*user@*.host"
|
msgid "*!*user@*.host"
|
||||||
msgstr "*!*utilisateur@*.hôte"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:506
|
#: src/fe-gtk/setup.c:506
|
||||||
msgid "*!*user@domain"
|
msgid "*!*user@domain"
|
||||||
msgstr "*!*utilisateur@domaine"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:512
|
#: src/fe-gtk/setup.c:512
|
||||||
msgid "Auto Copy Behavior"
|
msgid "Auto Copy Behavior"
|
||||||
@ -5609,7 +5608,7 @@ msgstr "Police alternative :"
|
|||||||
|
|
||||||
#: src/fe-gtk/setup.c:528
|
#: src/fe-gtk/setup.c:528
|
||||||
msgid "Separate multiple entries with commas without spaces before or after."
|
msgid "Separate multiple entries with commas without spaces before or after."
|
||||||
msgstr "Séparez plusieurs entrées avec des virgules sans espaces avant ou après la virgule."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:530
|
#: src/fe-gtk/setup.c:530
|
||||||
msgid "Display lists in compact mode"
|
msgid "Display lists in compact mode"
|
||||||
@ -5621,17 +5620,17 @@ msgstr "Utiliser moins d'espace entre la liste des utilisateurs et l'arbre des c
|
|||||||
|
|
||||||
#: src/fe-gtk/setup.c:531
|
#: src/fe-gtk/setup.c:531
|
||||||
msgid "Use server time if supported"
|
msgid "Use server time if supported"
|
||||||
msgstr "Utiliser le temps serveur si pris en charg"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:531
|
#: src/fe-gtk/setup.c:531
|
||||||
msgid ""
|
msgid ""
|
||||||
"Display timestamps obtained from server if it supports the time-server "
|
"Display timestamps obtained from server if it supports the time-server "
|
||||||
"extension."
|
"extension."
|
||||||
msgstr "Afficher les horodatages obtenus depuis le serveur s'il supporte l'extension du temps côté serveur."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:532
|
#: src/fe-gtk/setup.c:532
|
||||||
msgid "Automatically reconnect to servers on disconnect"
|
msgid "Automatically reconnect to servers on disconnect"
|
||||||
msgstr "Automatiquement se reconnecter aux serveurs en cas de déconnexion"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:533
|
#: src/fe-gtk/setup.c:533
|
||||||
msgid "Auto reconnect delay:"
|
msgid "Auto reconnect delay:"
|
||||||
@ -5643,13 +5642,13 @@ msgstr "Délai pour rejoindre les canaux :"
|
|||||||
|
|
||||||
#: src/fe-gtk/setup.c:535
|
#: src/fe-gtk/setup.c:535
|
||||||
msgid "Ban Type:"
|
msgid "Ban Type:"
|
||||||
msgstr "Type de bannissement :"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:535
|
#: src/fe-gtk/setup.c:535
|
||||||
msgid ""
|
msgid ""
|
||||||
"Attempt to use this banmask when banning or quieting. (requires "
|
"Attempt to use this banmask when banning or quieting. (requires "
|
||||||
"irc_who_join)"
|
"irc_who_join)"
|
||||||
msgstr "Essayer d'utiliser ce masque de bannissement en banissant ou en rendant muet (requiert irc_who_join)."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:542 src/fe-gtk/setup.c:1853
|
#: src/fe-gtk/setup.c:542 src/fe-gtk/setup.c:1853
|
||||||
msgid "Logging"
|
msgid "Logging"
|
||||||
@ -5964,7 +5963,7 @@ msgstr "Bavardage"
|
|||||||
|
|
||||||
#: src/fe-gtk/setup.c:1852
|
#: src/fe-gtk/setup.c:1852
|
||||||
msgid "Sounds"
|
msgid "Sounds"
|
||||||
msgstr "Sons"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:1854
|
#: src/fe-gtk/setup.c:1854
|
||||||
msgid "Advanced"
|
msgid "Advanced"
|
||||||
@ -5994,7 +5993,7 @@ msgstr "Format d'heure invalide ! Lisez l'article MSDN sur strftime pour les dé
|
|||||||
|
|
||||||
#: src/fe-gtk/setup.c:2224
|
#: src/fe-gtk/setup.c:2224
|
||||||
msgid "The Real name option cannot be left blank. Falling back to \"realname\"."
|
msgid "The Real name option cannot be left blank. Falling back to \"realname\"."
|
||||||
msgstr "L'option Nom réel ne peut être laissée blanche. Le nom réel \"realname\" sera utilisé."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:2231
|
#: src/fe-gtk/setup.c:2231
|
||||||
msgid "Some settings were changed that require a restart to take full effect."
|
msgid "Some settings were changed that require a restart to take full effect."
|
||||||
|
6080
po/hexchat.pot
Normal file
6080
po/hexchat.pot
Normal file
File diff suppressed because it is too large
Load Diff
75
po/it.po
75
po/it.po
@ -4,14 +4,13 @@
|
|||||||
# Translators:
|
# Translators:
|
||||||
# Claudio Arseni <claudio.arseni@gmail.com>, 2013
|
# Claudio Arseni <claudio.arseni@gmail.com>, 2013
|
||||||
# Eros Palberti - Fabio Viola : How-Tux Team <admin@how-tux.com>, 2006
|
# Eros Palberti - Fabio Viola : How-Tux Team <admin@how-tux.com>, 2006
|
||||||
# Random_R, 2013
|
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: HexChat\n"
|
"Project-Id-Version: HexChat\n"
|
||||||
"Report-Msgid-Bugs-To: www.hexchat.org\n"
|
"Report-Msgid-Bugs-To: www.hexchat.org\n"
|
||||||
"POT-Creation-Date: 2013-09-08 01:16-0400\n"
|
"POT-Creation-Date: 2013-09-08 01:16-0400\n"
|
||||||
"PO-Revision-Date: 2013-11-20 09:21+0000\n"
|
"PO-Revision-Date: 2013-09-09 07:00+0000\n"
|
||||||
"Last-Translator: Random_R\n"
|
"Last-Translator: Claudio Arseni <claudio.arseni@gmail.com>\n"
|
||||||
"Language-Team: Italian (http://www.transifex.com/projects/p/hexchat/language/it/)\n"
|
"Language-Team: Italian (http://www.transifex.com/projects/p/hexchat/language/it/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
@ -240,7 +239,7 @@ msgstr " %-20s non in linea\n"
|
|||||||
|
|
||||||
#: src/common/outbound.c:72
|
#: src/common/outbound.c:72
|
||||||
msgid "No channel joined. Try /join #<channel>\n"
|
msgid "No channel joined. Try /join #<channel>\n"
|
||||||
msgstr "Nessun canale aperto. Provare /join #<canale>\n"
|
msgstr "Alcun canale aperto. Provare /join #<canale>\n"
|
||||||
|
|
||||||
#: src/common/outbound.c:78
|
#: src/common/outbound.c:78
|
||||||
msgid "Not connected. Try /server <host> [<port>]\n"
|
msgid "Not connected. Try /server <host> [<port>]\n"
|
||||||
@ -353,11 +352,11 @@ msgstr "CHARSET [<codifica>], rileva o imposta la codifica usata per la connessi
|
|||||||
msgid ""
|
msgid ""
|
||||||
"CLEAR [ALL|HISTORY|[-]<amount>], Clears the current text window or command "
|
"CLEAR [ALL|HISTORY|[-]<amount>], Clears the current text window or command "
|
||||||
"history"
|
"history"
|
||||||
msgstr "CLEAR [ALL|HISTORY|[-]<quantità>], pulisce la finestra di testo corrente o la cronologia dei comandi"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/outbound.c:3819
|
#: src/common/outbound.c:3819
|
||||||
msgid "CLOSE [-m], Closes the current window/tab or all queries"
|
msgid "CLOSE [-m], Closes the current window/tab or all queries"
|
||||||
msgstr "CLOSE [-m], chiude l'attuale finestra/scheda o tutte quelle private"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/outbound.c:3822
|
#: src/common/outbound.c:3822
|
||||||
msgid "COUNTRY [-s] <code|wildcard>, finds a country code, eg: au = australia"
|
msgid "COUNTRY [-s] <code|wildcard>, finds a country code, eg: au = australia"
|
||||||
@ -544,7 +543,7 @@ msgstr "MOP, rende operatori tutti gli utenti nel canale attuale (bisogna essere
|
|||||||
msgid ""
|
msgid ""
|
||||||
"MSG <nick> <message>, sends a private message, message \".\" to send to last"
|
"MSG <nick> <message>, sends a private message, message \".\" to send to last"
|
||||||
" nick or prefix with \"=\" for dcc chat"
|
" nick or prefix with \"=\" for dcc chat"
|
||||||
msgstr "MSG <soprannome> <messaggio>, invia un messaggio privato, messaggio \".\" per inviarlo all'ultimo soprannome contattato o con il prefisso \"=\" per avviare una chat DCC"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/outbound.c:3922
|
#: src/common/outbound.c:3922
|
||||||
msgid "NAMES, Lists the nicks on the current channel"
|
msgid "NAMES, Lists the nicks on the current channel"
|
||||||
@ -625,7 +624,7 @@ msgstr "RECV <testo>, invia dati in forma grezza a HexChat, come se venissero ri
|
|||||||
|
|
||||||
#: src/common/outbound.c:3954
|
#: src/common/outbound.c:3954
|
||||||
msgid "RELOAD <name>, reloads a plugin or script"
|
msgid "RELOAD <name>, reloads a plugin or script"
|
||||||
msgstr "RELOAD <nome>, ricarica un plugin o uno script"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/outbound.c:3956
|
#: src/common/outbound.c:3956
|
||||||
msgid "SAY <text>, sends the text to the object in the current window"
|
msgid "SAY <text>, sends the text to the object in the current window"
|
||||||
@ -900,7 +899,7 @@ msgstr "%C22*%O$t%C26$1%O ha rimosso il quiet su %C18$2%O"
|
|||||||
|
|
||||||
#: src/common/textevents.h:108
|
#: src/common/textevents.h:108
|
||||||
msgid "%C22*%O$tChannel %C22$1%O url: %C24$2"
|
msgid "%C22*%O$tChannel %C22$1%O url: %C24$2"
|
||||||
msgstr "%C22*%O$tCanale %C22$1%O url: %C24$2"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/textevents.h:111
|
#: src/common/textevents.h:111
|
||||||
msgid "%C22*%O$t%C26$1%O gives voice to %C18$2%O"
|
msgid "%C22*%O$t%C26$1%O gives voice to %C18$2%O"
|
||||||
@ -1097,7 +1096,7 @@ msgstr "%C24*%O$tHai ricevuto un invito per %C22$1%O da %C18$2%O (%C29$3%O)"
|
|||||||
#: src/common/textevents.h:252
|
#: src/common/textevents.h:252
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%C23*$t$1 ($3%C23) has joined"
|
msgid "%C23*$t$1 ($3%C23) has joined"
|
||||||
msgstr "%C23*$t$1 ($3%C23) è entrato"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/textevents.h:255
|
#: src/common/textevents.h:255
|
||||||
msgid "%C20*%O$tCannot join %C22$1%C (%C20Requires keyword%O)"
|
msgid "%C20*%O$tCannot join %C22$1%C (%C20Requires keyword%O)"
|
||||||
@ -1168,12 +1167,12 @@ msgstr "%C23*%O$tNotifica: %C18$1%C è in linea (%C29$3%O)"
|
|||||||
#: src/common/textevents.h:318
|
#: src/common/textevents.h:318
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%C24*$t$1 ($2%C24) has left"
|
msgid "%C24*$t$1 ($2%C24) has left"
|
||||||
msgstr "%C24*$t$1 ($2%C24) abbandona"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/textevents.h:321
|
#: src/common/textevents.h:321
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "%C24*$t$1 ($2%C24) has left ($4)"
|
msgid "%C24*$t$1 ($2%C24) has left ($4)"
|
||||||
msgstr "%C24*$t$1 ($2%C24) ha abbandonato ($4)"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/textevents.h:324
|
#: src/common/textevents.h:324
|
||||||
msgid "%C24*%O$tPing reply from %C18$1%C: %C24$2%O second(s)"
|
msgid "%C24*%O$tPing reply from %C18$1%C: %C24$2%O second(s)"
|
||||||
@ -1206,7 +1205,7 @@ msgstr "%C24*%O$tRicerca dell'indirizzo IP per %C18$1%O..."
|
|||||||
|
|
||||||
#: src/common/textevents.h:357
|
#: src/common/textevents.h:357
|
||||||
msgid "%C23*%O$tAuthenticating via SASL as %C18$1%O (%C24$2%O)"
|
msgid "%C23*%O$tAuthenticating via SASL as %C18$1%O (%C24$2%O)"
|
||||||
msgstr "%C23*%O$tAutenticazione SASL come %C18$1%O (%C24$2%O)"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/textevents.h:363
|
#: src/common/textevents.h:363
|
||||||
msgid "%C29*%O$tConnected."
|
msgid "%C29*%O$tConnected."
|
||||||
@ -1666,7 +1665,7 @@ msgstr "Nome del canale"
|
|||||||
|
|
||||||
#: src/common/text.c:1301
|
#: src/common/text.c:1301
|
||||||
msgid "Mechanism"
|
msgid "Mechanism"
|
||||||
msgstr "Meccanismo"
|
msgstr ""
|
||||||
|
|
||||||
#: src/common/text.c:1306 src/common/text.c:1314
|
#: src/common/text.c:1306 src/common/text.c:1314
|
||||||
msgid "Raw Numeric or Identifier"
|
msgid "Raw Numeric or Identifier"
|
||||||
@ -3121,7 +3120,7 @@ msgstr "Mostra solo:"
|
|||||||
|
|
||||||
#: src/fe-gtk/chanlist.c:828
|
#: src/fe-gtk/chanlist.c:828
|
||||||
msgid "channels with"
|
msgid "channels with"
|
||||||
msgstr "canali con, da"
|
msgstr "canali con"
|
||||||
|
|
||||||
#: src/fe-gtk/chanlist.c:841
|
#: src/fe-gtk/chanlist.c:841
|
||||||
msgid "to"
|
msgid "to"
|
||||||
@ -3403,7 +3402,7 @@ msgstr "La funzione Insert in Buffer inserirà il contenuto di «Dati 1» nella
|
|||||||
msgid ""
|
msgid ""
|
||||||
"The Scroll Page command scrolls the text widget up or down one page or one"
|
"The Scroll Page command scrolls the text widget up or down one page or one"
|
||||||
" line. Set Data 1 to either Top, Bottom, Up, Down, +1 or -1."
|
" line. Set Data 1 to either Top, Bottom, Up, Down, +1 or -1."
|
||||||
msgstr "Il comando Scroll Page scorre l'oggetto testo su o giù di una pagina o di una riga. Impostare Data 1 a Top, Bottom, Up, Down, +1 o -1."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/fkeys.c:153
|
#: src/fe-gtk/fkeys.c:153
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -3644,7 +3643,7 @@ msgstr "_Niente, verrà selezionato successivamente un canale."
|
|||||||
|
|
||||||
#: src/fe-gtk/joind.c:187
|
#: src/fe-gtk/joind.c:187
|
||||||
msgid "_Join this channel:"
|
msgid "_Join this channel:"
|
||||||
msgstr "_Entrare in questo canale:"
|
msgstr "_Entra in questo canale:"
|
||||||
|
|
||||||
#: src/fe-gtk/joind.c:199
|
#: src/fe-gtk/joind.c:199
|
||||||
msgid "If you know the name of the channel you want to join, enter it here."
|
msgid "If you know the name of the channel you want to join, enter it here."
|
||||||
@ -3652,7 +3651,7 @@ msgstr "Se si conosce il nome del canale nel quale si vuole entrare, digitarlo q
|
|||||||
|
|
||||||
#: src/fe-gtk/joind.c:206
|
#: src/fe-gtk/joind.c:206
|
||||||
msgid "O_pen the Channel-List window."
|
msgid "O_pen the Channel-List window."
|
||||||
msgstr "A_prire la finestra elenco canali"
|
msgstr "A_pri la finestra elenco canali"
|
||||||
|
|
||||||
#: src/fe-gtk/joind.c:213
|
#: src/fe-gtk/joind.c:213
|
||||||
msgid "Retrieving the Channel-List may take a minute or two."
|
msgid "Retrieving the Channel-List may take a minute or two."
|
||||||
@ -3660,7 +3659,7 @@ msgstr "Il recupero dell'elenco dei canali potrebbe richiedere un minuto o due."
|
|||||||
|
|
||||||
#: src/fe-gtk/joind.c:220
|
#: src/fe-gtk/joind.c:220
|
||||||
msgid "_Always show this dialog after connecting."
|
msgid "_Always show this dialog after connecting."
|
||||||
msgstr "Mostr_are sempre questo dialogo dopo la connessione"
|
msgstr "_Mostr_a sempre questo dialogo dopo la connessione"
|
||||||
|
|
||||||
#: src/fe-gtk/maingui.c:437
|
#: src/fe-gtk/maingui.c:437
|
||||||
msgid "Dialog with"
|
msgid "Dialog with"
|
||||||
@ -3693,7 +3692,7 @@ msgstr "Non chiedere la prossima volta."
|
|||||||
#: src/fe-gtk/maingui.c:1258
|
#: src/fe-gtk/maingui.c:1258
|
||||||
#, c-format
|
#, c-format
|
||||||
msgid "You are connected to %i IRC networks."
|
msgid "You are connected to %i IRC networks."
|
||||||
msgstr "Reti IRC connesse %i."
|
msgstr "Connesso a %i reti IRC."
|
||||||
|
|
||||||
#: src/fe-gtk/maingui.c:1260
|
#: src/fe-gtk/maingui.c:1260
|
||||||
msgid "Are you sure you want to quit?"
|
msgid "Are you sure you want to quit?"
|
||||||
@ -3911,7 +3910,7 @@ msgstr "_Accesso automatico"
|
|||||||
|
|
||||||
#: src/fe-gtk/menu.c:1054
|
#: src/fe-gtk/menu.c:1054
|
||||||
msgid "Autojoin Channel"
|
msgid "Autojoin Channel"
|
||||||
msgstr "Accesso automatico al canale"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/menu.c:1088 src/fe-gtk/menu.c:1092
|
#: src/fe-gtk/menu.c:1088 src/fe-gtk/menu.c:1092
|
||||||
msgid "_Auto-Connect"
|
msgid "_Auto-Connect"
|
||||||
@ -4141,15 +4140,15 @@ msgstr "_Riconnetti"
|
|||||||
|
|
||||||
#: src/fe-gtk/menu.c:1751
|
#: src/fe-gtk/menu.c:1751
|
||||||
msgid "_Join a Channel..."
|
msgid "_Join a Channel..."
|
||||||
msgstr "E_tra in un canale..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/menu.c:1752
|
#: src/fe-gtk/menu.c:1752
|
||||||
msgid "_List of Channels..."
|
msgid "_List of Channels..."
|
||||||
msgstr "E_lenco dei canali..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/menu.c:1755
|
#: src/fe-gtk/menu.c:1755
|
||||||
msgid "Marked _Away"
|
msgid "Marked _Away"
|
||||||
msgstr "Contrassegna come _Assente"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/menu.c:1757
|
#: src/fe-gtk/menu.c:1757
|
||||||
msgid "_Usermenu"
|
msgid "_Usermenu"
|
||||||
@ -4205,7 +4204,7 @@ msgstr "_Finestra"
|
|||||||
|
|
||||||
#: src/fe-gtk/menu.c:1773
|
#: src/fe-gtk/menu.c:1773
|
||||||
msgid "_Ban List..."
|
msgid "_Ban List..."
|
||||||
msgstr "Elenco dei _ban..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/menu.c:1774
|
#: src/fe-gtk/menu.c:1774
|
||||||
msgid "Character Chart..."
|
msgid "Character Chart..."
|
||||||
@ -4217,7 +4216,7 @@ msgstr "Chat diretta..."
|
|||||||
|
|
||||||
#: src/fe-gtk/menu.c:1776
|
#: src/fe-gtk/menu.c:1776
|
||||||
msgid "File _Transfers..."
|
msgid "File _Transfers..."
|
||||||
msgstr "_Trasferimenti di file..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/menu.c:1777
|
#: src/fe-gtk/menu.c:1777
|
||||||
msgid "Friends List..."
|
msgid "Friends List..."
|
||||||
@ -4229,11 +4228,11 @@ msgstr "Elenco utenti ignorati..."
|
|||||||
|
|
||||||
#: src/fe-gtk/menu.c:1779
|
#: src/fe-gtk/menu.c:1779
|
||||||
msgid "_Plugins and Scripts..."
|
msgid "_Plugins and Scripts..."
|
||||||
msgstr "_Plugin e script..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/menu.c:1780
|
#: src/fe-gtk/menu.c:1780
|
||||||
msgid "_Raw Log..."
|
msgid "_Raw Log..."
|
||||||
msgstr "Regist_ro grezzo..."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/menu.c:1781
|
#: src/fe-gtk/menu.c:1781
|
||||||
msgid "URL Grabber..."
|
msgid "URL Grabber..."
|
||||||
@ -4241,7 +4240,7 @@ msgstr "URL collezionati..."
|
|||||||
|
|
||||||
#: src/fe-gtk/menu.c:1783
|
#: src/fe-gtk/menu.c:1783
|
||||||
msgid "Reset Marker Line"
|
msgid "Reset Marker Line"
|
||||||
msgstr "Azzera linea di demarcazione"
|
msgstr "Azzera linea di demrcazione"
|
||||||
|
|
||||||
#: src/fe-gtk/menu.c:1784
|
#: src/fe-gtk/menu.c:1784
|
||||||
msgid "_Copy Selection"
|
msgid "_Copy Selection"
|
||||||
@ -4469,11 +4468,11 @@ msgstr "_Carica..."
|
|||||||
|
|
||||||
#: src/fe-gtk/plugingui.c:270
|
#: src/fe-gtk/plugingui.c:270
|
||||||
msgid "_Unload"
|
msgid "_Unload"
|
||||||
msgstr "_Disattiva"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/plugingui.c:273
|
#: src/fe-gtk/plugingui.c:273
|
||||||
msgid "_Reload"
|
msgid "_Reload"
|
||||||
msgstr "_Ricarica"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/rawlog.c:80 src/fe-gtk/rawlog.c:146 src/fe-gtk/textgui.c:428
|
#: src/fe-gtk/rawlog.c:80 src/fe-gtk/rawlog.c:146 src/fe-gtk/textgui.c:428
|
||||||
#: src/fe-gtk/urlgrab.c:216
|
#: src/fe-gtk/urlgrab.c:216
|
||||||
@ -4543,7 +4542,7 @@ msgstr "Chiude questa finestra, ma continua a cercare nuove righe."
|
|||||||
|
|
||||||
#: src/fe-gtk/search.c:237
|
#: src/fe-gtk/search.c:237
|
||||||
msgid "Close and _Reset"
|
msgid "Close and _Reset"
|
||||||
msgstr "Chiudi e azze_ra"
|
msgstr "Chiudi e azzera"
|
||||||
|
|
||||||
#: src/fe-gtk/search.c:238
|
#: src/fe-gtk/search.c:238
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -5073,11 +5072,11 @@ msgstr "Ordinare i soprannomi completati:"
|
|||||||
|
|
||||||
#: src/fe-gtk/setup.c:222
|
#: src/fe-gtk/setup.c:222
|
||||||
msgid "Nick completion amount:"
|
msgid "Nick completion amount:"
|
||||||
msgstr "Numero di soprannomi completati:"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:222
|
#: src/fe-gtk/setup.c:222
|
||||||
msgid "Threshold of nicks to start listing instead of completing"
|
msgid "Threshold of nicks to start listing instead of completing"
|
||||||
msgstr "Soglia di soprannomi da iniziare a elencare invece di completarli"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:222
|
#: src/fe-gtk/setup.c:222
|
||||||
msgid "nicks."
|
msgid "nicks."
|
||||||
@ -5607,7 +5606,7 @@ msgstr "Caratteri alternativi:"
|
|||||||
|
|
||||||
#: src/fe-gtk/setup.c:528
|
#: src/fe-gtk/setup.c:528
|
||||||
msgid "Separate multiple entries with commas without spaces before or after."
|
msgid "Separate multiple entries with commas without spaces before or after."
|
||||||
msgstr "Separare le voci con virgole, senza spazi né prima né dopo."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:530
|
#: src/fe-gtk/setup.c:530
|
||||||
msgid "Display lists in compact mode"
|
msgid "Display lists in compact mode"
|
||||||
@ -5619,13 +5618,13 @@ msgstr "Usa una spaziatura inferiore tra l'elenco utenti e l'albero dei canali"
|
|||||||
|
|
||||||
#: src/fe-gtk/setup.c:531
|
#: src/fe-gtk/setup.c:531
|
||||||
msgid "Use server time if supported"
|
msgid "Use server time if supported"
|
||||||
msgstr "Usare l'ora del server se supportata"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:531
|
#: src/fe-gtk/setup.c:531
|
||||||
msgid ""
|
msgid ""
|
||||||
"Display timestamps obtained from server if it supports the time-server "
|
"Display timestamps obtained from server if it supports the time-server "
|
||||||
"extension."
|
"extension."
|
||||||
msgstr "Mostra l'orario ottenuto dal server se è supportata l'estensione \"time-server\"."
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:532
|
#: src/fe-gtk/setup.c:532
|
||||||
msgid "Automatically reconnect to servers on disconnect"
|
msgid "Automatically reconnect to servers on disconnect"
|
||||||
@ -5647,7 +5646,7 @@ msgstr "Tipo di ban:"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"Attempt to use this banmask when banning or quieting. (requires "
|
"Attempt to use this banmask when banning or quieting. (requires "
|
||||||
"irc_who_join)"
|
"irc_who_join)"
|
||||||
msgstr "Tenta di usare questa maschera per i ban e i quite. (È richiesto irc_who_join)"
|
msgstr ""
|
||||||
|
|
||||||
#: src/fe-gtk/setup.c:542 src/fe-gtk/setup.c:1853
|
#: src/fe-gtk/setup.c:542 src/fe-gtk/setup.c:1853
|
||||||
msgid "Logging"
|
msgid "Logging"
|
||||||
|
File diff suppressed because it is too large
Load Diff
2
po/ko.po
2
po/ko.po
@ -7,7 +7,7 @@ msgstr ""
|
|||||||
"Project-Id-Version: HexChat\n"
|
"Project-Id-Version: HexChat\n"
|
||||||
"Report-Msgid-Bugs-To: www.hexchat.org\n"
|
"Report-Msgid-Bugs-To: www.hexchat.org\n"
|
||||||
"POT-Creation-Date: 2013-09-08 01:16-0400\n"
|
"POT-Creation-Date: 2013-09-08 01:16-0400\n"
|
||||||
"PO-Revision-Date: 2013-11-20 09:21+0000\n"
|
"PO-Revision-Date: 2013-09-08 05:21+0000\n"
|
||||||
"Last-Translator: TingPing <tingping@tingping.se>\n"
|
"Last-Translator: TingPing <tingping@tingping.se>\n"
|
||||||
"Language-Team: Korean (http://www.transifex.com/projects/p/hexchat/language/ko/)\n"
|
"Language-Team: Korean (http://www.transifex.com/projects/p/hexchat/language/ko/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
2
po/no.po
2
po/no.po
@ -8,7 +8,7 @@ msgstr ""
|
|||||||
"Project-Id-Version: HexChat\n"
|
"Project-Id-Version: HexChat\n"
|
||||||
"Report-Msgid-Bugs-To: www.hexchat.org\n"
|
"Report-Msgid-Bugs-To: www.hexchat.org\n"
|
||||||
"POT-Creation-Date: 2013-09-08 01:16-0400\n"
|
"POT-Creation-Date: 2013-09-08 01:16-0400\n"
|
||||||
"PO-Revision-Date: 2013-11-20 09:21+0000\n"
|
"PO-Revision-Date: 2013-09-08 05:21+0000\n"
|
||||||
"Last-Translator: TingPing <tingping@tingping.se>\n"
|
"Last-Translator: TingPing <tingping@tingping.se>\n"
|
||||||
"Language-Team: Norwegian (http://www.transifex.com/projects/p/hexchat/language/no/)\n"
|
"Language-Team: Norwegian (http://www.transifex.com/projects/p/hexchat/language/no/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user