add xchat r1489

This commit is contained in:
berkeviktor@aol.com
2011-02-24 04:14:30 +01:00
parent f16af8be94
commit 4a6ceffb98
245 changed files with 324678 additions and 0 deletions

10
plugins/tcl/Makefile.am Normal file
View File

@@ -0,0 +1,10 @@
EXTRA_DIST=printevents.h tclplugin.h README
libdir = $(xchatlibdir)/plugins
lib_LTLIBRARIES = tcl.la
tcl_la_SOURCES = tclplugin.c
tcl_la_LDFLAGS = -avoid-version -module
tcl_la_LIBADD = $(TCL_LIBS)
INCLUDES = $(TCL_CFLAGS) $(COMMON_CFLAGS) -I$(srcdir)/..

55
plugins/tcl/README Normal file
View File

@@ -0,0 +1,55 @@
Please read this document before asking questions.
(1) WHAT IS THE TCL PLUGIN?
The XChat Tcl Plugin adds the complete Tcl scripting language to the
XChat 1.9.x and 2.x IRC client. The design philosophy behind the tcl
plugin was to give all the power of the C API. yet completely shield
the user from all the complexities of it. It is lightly modeled after
after Xircon; an old windows TCL enabled client with a little bit of
eggdrop functionality to it.
Features:
* Uses the popular TCL scripting language.
* Familiar to eggdrop bot owners.
* Adds many new XChat specific commands to the Tcl language for
handling of events, user commands, timers, etc.
* It's actually documented! (Hey, what a concept!)
* Works with XChat 1.9.x and 2.x.
* Open source (GPL)
The supplied documentation for Tcl Plugin commands can be
found in doc/tclplugin.html
For a comprehensive list of IRC server tokens, see
doc/tokens.txt
(2) HOW TO GET TCL PLUGIN
You can always find the latest version of the Tcl Plugin at:
http://www.scriptkitties.com/tclplugin
You must also have Tcl 8.3 or higher installed on your system.
Tcl can be obtained from:
http://sourceforge.net/projects/tcl
http://tcl.activestate.com (pre-compiled binaries)
Tcl Man Pages
http://tcl.activestate.com/man/
Tcl Tutorials:
http://hegel.ittc.ukans.edu/topics/tcltk/tutorial-noplugin/
http://jan.netcomp.monash.edu.au/ProgrammingUnix/tcl/tcl_tut.html
http://users.belgacom.net/bruno.champagne/tcl.html
(3) QUICK STARTUP
SEE 'INSTALL'

319
plugins/tcl/printevents.h Normal file
View File

@@ -0,0 +1,319 @@
/***************************************************************************
printevents.h - TCL plugin header file
-------------------------------------------------
begin : Sat Nov 9 17:31:20 MST 2002
copyright : Copyright 2002-2007 Daniel P. Stasinski
email : mooooooo@avenues.org
generated : Mon May 21 06:03:00 PM MST 2007
***************************************************************************/
/***************************************************************************
* *
* 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. *
* *
***************************************************************************/
typedef struct {
char *event;
char *emit;
int argc;
xchat_hook *hook;
} print_event;
enum
{
CHAT,
XC_APPFOCUS,
XC_TABOPEN,
XC_TABCLOSE,
XC_TABFOCUS,
XC_KEYPRESS,
XC_ADDNOTIFY,
XC_BANLIST,
XC_BANNED,
XC_BEEP,
XC_CHANGENICK,
XC_CHANACTION,
XC_HCHANACTION,
XC_CHANBAN,
XC_CHANDATE,
XC_CHANDEHOP,
XC_CHANDEOP,
XC_CHANDEVOICE,
XC_CHANEXEMPT,
XC_CHANHOP,
XC_CHANINVITE,
XC_CHANLISTHEAD,
XC_CHANMSG,
XC_CHANMODEGEN,
XC_CHANMODES,
XC_HCHANMSG,
XC_CHANNOTICE,
XC_CHANOP,
XC_CHANRMEXEMPT,
XC_CHANRMINVITE,
XC_CHANRMKEY,
XC_CHANRMLIMIT,
XC_CHANSETKEY,
XC_CHANSETLIMIT,
XC_CHANUNBAN,
XC_CHANVOICE,
XC_CONNECTED,
XC_CONNECT,
XC_CONNFAIL,
XC_CTCPGEN,
XC_CTCPGENC,
XC_CTCPSEND,
XC_CTCPSND,
XC_CTCPSNDC,
XC_DCCCHATABORT,
XC_DCCCONCHAT,
XC_DCCCHATF,
XC_DCCCHATOFFER,
XC_DCCCHATOFFERING,
XC_DCCCHATREOFFER,
XC_DCCCONFAIL,
XC_DCCGENERICOFFER,
XC_DCCHEAD,
XC_MALFORMED,
XC_DCCOFFER,
XC_DCCIVAL,
XC_DCCRECVABORT,
XC_DCCRECVCOMP,
XC_DCCCONRECV,
XC_DCCRECVERR,
XC_DCCFILEERR,
XC_DCCRENAME,
XC_DCCRESUMEREQUEST,
XC_DCCSENDABORT,
XC_DCCSENDCOMP,
XC_DCCCONSEND,
XC_DCCSENDFAIL,
XC_DCCSENDOFFER,
XC_DCCSTALL,
XC_DCCTOUT,
XC_DELNOTIFY,
XC_DISCON,
XC_FOUNDIP,
XC_GENMSG,
XC_IGNOREADD,
XC_IGNORECHANGE,
XC_IGNOREFOOTER,
XC_IGNOREHEADER,
XC_IGNOREREMOVE,
XC_IGNOREEMPTY,
XC_INVITE,
XC_INVITED,
XC_JOIN,
XC_KEYWORD,
XC_KICK,
XC_KILL,
XC_MSGSEND,
XC_MOTD,
XC_MOTDSKIP,
XC_NICKCLASH,
XC_NICKFAIL,
XC_NODCC,
XC_NOCHILD,
XC_NOTICE,
XC_NOTICESEND,
XC_NOTIFYEMPTY,
XC_NOTIFYHEAD,
XC_NOTIFYNUMBER,
XC_NOTIFYOFFLINE,
XC_NOTIFYONLINE,
XC_OPENDIALOG,
XC_PART,
XC_PARTREASON,
XC_PINGREP,
XC_PINGTIMEOUT,
XC_PRIVMSG,
XC_DPRIVMSG,
XC_ALREADYPROCESS,
XC_QUIT,
XC_RAWMODES,
XC_WALLOPS,
XC_RESOLVINGUSER,
XC_SERVERCONNECTED,
XC_SERVERERROR,
XC_SERVERLOOKUP,
XC_SERVNOTICE,
XC_SERVTEXT,
XC_STOPCONNECT,
XC_TOPIC,
XC_NEWTOPIC,
XC_TOPICDATE,
XC_UKNHOST,
XC_USERLIMIT,
XC_USERSONCHAN,
XC_WHOIS_AUTH,
XC_WHOIS5,
XC_WHOIS2,
XC_WHOIS6,
XC_WHOIS_ID,
XC_WHOIS4,
XC_WHOIS4T,
XC_WHOIS1,
XC_WHOIS_REALHOST,
XC_WHOIS3,
XC_WHOIS_SPECIAL,
XC_UJOIN,
XC_UKICK,
XC_UPART,
XC_UPARTREASON,
XC_UACTION,
XC_UINVITE,
XC_UCHANMSG,
XC_UCHANGENICK,
XC_SIZE
};
static print_event xc[] = {
{ "CHAT", "DCC Chat Text", -1, NULL },
{ "XC_APPFOCUS", "Focus Window", -3, NULL },
{ "XC_TABOPEN", "Open Context", -2, NULL },
{ "XC_TABCLOSE", "Close Context", -2, NULL },
{ "XC_TABFOCUS", "Focus Tab", -2, NULL },
{ "XC_KEYPRESS", "Key Press", 4, NULL },
{ "XC_ADDNOTIFY", "Add Notify", 1, NULL },
{ "XC_BANLIST", "Ban List", 4, NULL },
{ "XC_BANNED", "Banned", 1, NULL },
{ "XC_BEEP", "Beep", 0, NULL },
{ "XC_CHANGENICK", "Change Nick", 2, NULL },
{ "XC_CHANACTION", "Channel Action", 3, NULL },
{ "XC_HCHANACTION", "Channel Action Hilight", 3, NULL },
{ "XC_CHANBAN", "Channel Ban", 2, NULL },
{ "XC_CHANDATE", "Channel Creation", 2, NULL },
{ "XC_CHANDEHOP", "Channel DeHalfOp", 2, NULL },
{ "XC_CHANDEOP", "Channel DeOp", 2, NULL },
{ "XC_CHANDEVOICE", "Channel DeVoice", 2, NULL },
{ "XC_CHANEXEMPT", "Channel Exempt", 2, NULL },
{ "XC_CHANHOP", "Channel Half-Operator", 2, NULL },
{ "XC_CHANINVITE", "Channel INVITE", 2, NULL },
{ "XC_CHANLISTHEAD", "Channel List", 0, NULL },
{ "XC_CHANMSG", "Channel Message", 4, NULL },
{ "XC_CHANMODEGEN", "Channel Mode Generic", 4, NULL },
{ "XC_CHANMODES", "Channel Modes", 2, NULL },
{ "XC_HCHANMSG", "Channel Msg Hilight", 4, NULL },
{ "XC_CHANNOTICE", "Channel Notice", 3, NULL },
{ "XC_CHANOP", "Channel Operator", 2, NULL },
{ "XC_CHANRMEXEMPT", "Channel Remove Exempt", 2, NULL },
{ "XC_CHANRMINVITE", "Channel Remove Invite", 2, NULL },
{ "XC_CHANRMKEY", "Channel Remove Keyword", 1, NULL },
{ "XC_CHANRMLIMIT", "Channel Remove Limit", 1, NULL },
{ "XC_CHANSETKEY", "Channel Set Key", 2, NULL },
{ "XC_CHANSETLIMIT", "Channel Set Limit", 2, NULL },
{ "XC_CHANUNBAN", "Channel UnBan", 2, NULL },
{ "XC_CHANVOICE", "Channel Voice", 2, NULL },
{ "XC_CONNECTED", "Connected", 0, NULL },
{ "XC_CONNECT", "Connecting", 3, NULL },
{ "XC_CONNFAIL", "Connection Failed", 1, NULL },
{ "XC_CTCPGEN", "CTCP Generic", 2, NULL },
{ "XC_CTCPGENC", "CTCP Generic to Channel", 3, NULL },
{ "XC_CTCPSEND", "CTCP Send", 2, NULL },
{ "XC_CTCPSND", "CTCP Sound", 2, NULL },
{ "XC_CTCPSNDC", "CTCP Sound to Channel", 3, NULL },
{ "XC_DCCCHATABORT", "DCC CHAT Abort", 1, NULL },
{ "XC_DCCCONCHAT", "DCC CHAT Connect", 2, NULL },
{ "XC_DCCCHATF", "DCC CHAT Failed", 4, NULL },
{ "XC_DCCCHATOFFER", "DCC CHAT Offer", 1, NULL },
{ "XC_DCCCHATOFFERING", "DCC CHAT Offering", 1, NULL },
{ "XC_DCCCHATREOFFER", "DCC CHAT Reoffer", 1, NULL },
{ "XC_DCCCONFAIL", "DCC Conection Failed", 3, NULL },
{ "XC_DCCGENERICOFFER", "DCC Generic Offer", 2, NULL },
{ "XC_DCCHEAD", "DCC Header", 0, NULL },
{ "XC_MALFORMED", "DCC Malformed", 2, NULL },
{ "XC_DCCOFFER", "DCC Offer", 3, NULL },
{ "XC_DCCIVAL", "DCC Offer Not Valid", 0, NULL },
{ "XC_DCCRECVABORT", "DCC RECV Abort", 2, NULL },
{ "XC_DCCRECVCOMP", "DCC RECV Complete", 4, NULL },
{ "XC_DCCCONRECV", "DCC RECV Connect", 3, NULL },
{ "XC_DCCRECVERR", "DCC RECV Failed", 4, NULL },
{ "XC_DCCFILEERR", "DCC RECV File Open Error", 2, NULL },
{ "XC_DCCRENAME", "DCC Rename", 2, NULL },
{ "XC_DCCRESUMEREQUEST", "DCC RESUME Request", 3, NULL },
{ "XC_DCCSENDABORT", "DCC SEND Abort", 2, NULL },
{ "XC_DCCSENDCOMP", "DCC SEND Complete", 3, NULL },
{ "XC_DCCCONSEND", "DCC SEND Connect", 3, NULL },
{ "XC_DCCSENDFAIL", "DCC SEND Failed", 3, NULL },
{ "XC_DCCSENDOFFER", "DCC SEND Offer", 4, NULL },
{ "XC_DCCSTALL", "DCC Stall", 3, NULL },
{ "XC_DCCTOUT", "DCC Timeout", 3, NULL },
{ "XC_DELNOTIFY", "Delete Notify", 1, NULL },
{ "XC_DISCON", "Disconnected", 1, NULL },
{ "XC_FOUNDIP", "Found IP", 1, NULL },
{ "XC_GENMSG", "Generic Message", 2, NULL },
{ "XC_IGNOREADD", "Ignore Add", 1, NULL },
{ "XC_IGNORECHANGE", "Ignore Changed", 1, NULL },
{ "XC_IGNOREFOOTER", "Ignore Footer", 0, NULL },
{ "XC_IGNOREHEADER", "Ignore Header", 0, NULL },
{ "XC_IGNOREREMOVE", "Ignore Remove", 1, NULL },
{ "XC_IGNOREEMPTY", "Ignorelist Empty", 0, NULL },
{ "XC_INVITE", "Invite", 1, NULL },
{ "XC_INVITED", "Invited", 3, NULL },
{ "XC_JOIN", "Join", 3, NULL },
{ "XC_KEYWORD", "Keyword", 1, NULL },
{ "XC_KICK", "Kick", 4, NULL },
{ "XC_KILL", "Killed", 2, NULL },
{ "XC_MSGSEND", "Message Send", 2, NULL },
{ "XC_MOTD", "Motd", 1, NULL },
{ "XC_MOTDSKIP", "MOTD Skipped", 0, NULL },
{ "XC_NICKCLASH", "Nick Clash", 2, NULL },
{ "XC_NICKFAIL", "Nick Failed", 0, NULL },
{ "XC_NODCC", "No DCC", 0, NULL },
{ "XC_NOCHILD", "No Running Process", 0, NULL },
{ "XC_NOTICE", "Notice", 2, NULL },
{ "XC_NOTICESEND", "Notice Send", 2, NULL },
{ "XC_NOTIFYEMPTY", "Notify Empty", 0, NULL },
{ "XC_NOTIFYHEAD", "Notify Header", 0, NULL },
{ "XC_NOTIFYNUMBER", "Notify Number", 1, NULL },
{ "XC_NOTIFYOFFLINE", "Notify Offline", 3, NULL },
{ "XC_NOTIFYONLINE", "Notify Online", 3, NULL },
{ "XC_OPENDIALOG", "Open Dialog", 0, NULL },
{ "XC_PART", "Part", 3, NULL },
{ "XC_PARTREASON", "Part with Reason", 4, NULL },
{ "XC_PINGREP", "Ping Reply", 2, NULL },
{ "XC_PINGTIMEOUT", "Ping Timeout", 1, NULL },
{ "XC_PRIVMSG", "Private Message", 3, NULL },
{ "XC_DPRIVMSG", "Private Message to Dialog", 3, NULL },
{ "XC_ALREADYPROCESS", "Process Already Running", 0, NULL },
{ "XC_QUIT", "Quit", 3, NULL },
{ "XC_RAWMODES", "Raw Modes", 2, NULL },
{ "XC_WALLOPS", "Receive Wallops", 2, NULL },
{ "XC_RESOLVINGUSER", "Resolving User", 2, NULL },
{ "XC_SERVERCONNECTED", "Server Connected", 0, NULL },
{ "XC_SERVERERROR", "Server Error", 1, NULL },
{ "XC_SERVERLOOKUP", "Server Lookup", 1, NULL },
{ "XC_SERVNOTICE", "Server Notice", 2, NULL },
{ "XC_SERVTEXT", "Server Text", 2, NULL },
{ "XC_STOPCONNECT", "Stop Connection", 1, NULL },
{ "XC_TOPIC", "Topic", 2, NULL },
{ "XC_NEWTOPIC", "Topic Change", 3, NULL },
{ "XC_TOPICDATE", "Topic Creation", 3, NULL },
{ "XC_UKNHOST", "Unknown Host", 0, NULL },
{ "XC_USERLIMIT", "User Limit", 1, NULL },
{ "XC_USERSONCHAN", "Users On Channel", 2, NULL },
{ "XC_WHOIS_AUTH", "WhoIs Authenticated", 3, NULL },
{ "XC_WHOIS5", "WhoIs Away Line", 2, NULL },
{ "XC_WHOIS2", "WhoIs Channel/Oper Line", 2, NULL },
{ "XC_WHOIS6", "WhoIs End", 1, NULL },
{ "XC_WHOIS_ID", "WhoIs Identified", 2, NULL },
{ "XC_WHOIS4", "WhoIs Idle Line", 2, NULL },
{ "XC_WHOIS4T", "WhoIs Idle Line with Signon", 3, NULL },
{ "XC_WHOIS1", "WhoIs Name Line", 4, NULL },
{ "XC_WHOIS_REALHOST", "WhoIs Real Host", 4, NULL },
{ "XC_WHOIS3", "WhoIs Server Line", 2, NULL },
{ "XC_WHOIS_SPECIAL", "WhoIs Special", 3, NULL },
{ "XC_UJOIN", "You Join", 3, NULL },
{ "XC_UKICK", "You Kicked", 4, NULL },
{ "XC_UPART", "You Part", 3, NULL },
{ "XC_UPARTREASON", "You Part with Reason", 4, NULL },
{ "XC_UACTION", "Your Action", 3, NULL },
{ "XC_UINVITE", "Your Invitation", 3, NULL },
{ "XC_UCHANMSG", "Your Message", 4, NULL },
{ "XC_UCHANGENICK", "Your Nick Changing", 2, NULL }
};

2290
plugins/tcl/tclplugin.c Normal file

File diff suppressed because it is too large Load Diff

98
plugins/tcl/tclplugin.h Normal file
View File

@@ -0,0 +1,98 @@
/***************************************************************************
tclplugin.h - TCL plugin header file
-------------------------------------------------
begin : Sat Nov 9 17:31:20 MST 2002
copyright : Copyright 2002-2010 Daniel P. Stasinski
email : daniel@avenues.org
***************************************************************************/
/***************************************************************************
* *
* 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. *
* *
***************************************************************************/
#define BADARGS(nl,nh,example) \
if ((argc<(nl)) || (argc>(nh))) { \
Tcl_AppendResult(irp,"wrong # args: should be \"",argv[0], \
(example),"\"",NULL); \
return TCL_ERROR; \
}
#define CHECKCTX(ctx) \
if (ctx == NULL) { \
Tcl_AppendResult(irp, "No such server/channel/nick", NULL); \
return TCL_ERROR; \
}
typedef struct {
char *procPtr;
xchat_hook *hook;
} alias;
typedef struct {
int timerid;
time_t timestamp;
char *procPtr;
int count;
int seconds;
} timer;
typedef struct {
int result;
int defresult;
char **word;
char **word_eol;
} t_complete;
#define MAX_TIMERS 512
#define MAX_COMPLETES 128
static char *StrDup(const char *string, int *length);
static char *myitoa(long value);
static xchat_context *xchat_smart_context(const char *arg1, const char *arg2);
static void queue_nexttimer();
static int insert_timer(int seconds, int count, const char *script);
static void do_timer();
static int Server_raw_line(char *word[], char *word_eol[], void *userdata);
static int Print_Hook(char *word[], void *userdata);
static int tcl_timerexists(ClientData cd, Tcl_Interp * irp, int argc, const char *argv[]);
static int tcl_killtimer(ClientData cd, Tcl_Interp * irp, int argc, const char *argv[]);
static int tcl_timers(ClientData cd, Tcl_Interp * irp, int argc, const char *argv[]);
static int tcl_timer(ClientData cd, Tcl_Interp * irp, int argc, const char *argv[]);
static int tcl_on(ClientData cd, Tcl_Interp * irp, int argc, const char *argv[]);
static int tcl_off(ClientData cd, Tcl_Interp * irp, int argc, const char *argv[]);
static int tcl_alias(ClientData cd, Tcl_Interp * irp, int argc, const char *argv[]);
static int tcl_complete(ClientData cd, Tcl_Interp * irp, int argc, const char *argv[]);
static int tcl_raw(ClientData cd, Tcl_Interp * irp, int argc, const char *argv[]);
static int tcl_command(ClientData cd, Tcl_Interp * irp, int argc, const char *argv[]);
static int tcl_xchat_puts(ClientData cd, Tcl_Interp * irp, int argc, const char *argv[]);
static int tcl_print(ClientData cd, Tcl_Interp * irp, int argc, const char *argv[]);
static int tcl_channels(ClientData cd, Tcl_Interp * irp, int argc, const char *argv[]);
static int tcl_servers(ClientData cd, Tcl_Interp * irp, int argc, const char *argv[]);
static int tcl_queries(ClientData cd, Tcl_Interp * irp, int argc, const char *argv[]);
static int tcl_users(ClientData cd, Tcl_Interp * irp, int argc, const char *argv[]);
static int tcl_chats(ClientData cd, Tcl_Interp * irp, int argc, const char *argv[]);
static int tcl_ignores(ClientData cd, Tcl_Interp * irp, int argc, const char *argv[]);
static int tcl_dcclist(ClientData cd, Tcl_Interp * irp, int argc, const char *argv[]);
static int tcl_me(ClientData cd, Tcl_Interp * irp, int argc, const char *argv[]);
static int tcl_xchat_nickcmp(ClientData cd, Tcl_Interp * irp, int argc, const char *argv[]);
static int tcl_strip(ClientData cd, Tcl_Interp * irp, int argc, const char *argv[]);
static int tcl_topic(ClientData cd, Tcl_Interp * irp, int argc, const char *argv[]);
static int tcl_word(ClientData cd, Tcl_Interp * irp, int argc, const char *argv[]);
static int tcl_word_eol(ClientData cd, Tcl_Interp * irp, int argc, const char *argv[]);
static int tcl_notifylist(ClientData cd, Tcl_Interp * irp, int argc, const char *argv[]);
static int Command_Alias(char *word[], char *word_eol[], void *userdata);
static int Null_Command_Alias(char *word[], char *word_eol[], void *userdata);
static int Command_TCL(char *word[], char *word_eol[], void *userdata);
static int Command_Source(char *word[], char *word_eol[], void *userdata);
static int Command_Reload(char *word[], char *word_eol[], void *userdata);
static int TCL_Event_Handler(void *userdata);
static void Tcl_Plugin_Init();
static void Tcl_Plugin_DeInit();
static void banner();
int xchat_plugin_init(xchat_plugin * plugin_handle, char **plugin_name, char **plugin_desc, char **plugin_version, char *arg);
int xchat_plugin_deinit();