summary refs log blame commit diff stats
path: root/plugins/tcl/tclplugin.h
blob: a5425edf8d0e504a0e66265e9feeafdb275b3a4f (plain) (tree)
1
2
3
4
5
6



                                                                            

                                                                  

























                                                                             
                       





















                                                     
                                                                                
























                                                                                          
                                                                                              













                                                                                         

                                                                                                                                  
/***************************************************************************
                           tclplugin.h  -  TCL plugin header file
                           -------------------------------------------------
    begin                : Sat Nov  9 17:31:20 MST 2002
    copyright            : Copyright 2002-2012 Daniel P. Stasinski
    email                : daniel@GenericInbox.com
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   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;
    hexchat_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 hexchat_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_hexchat_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 hexchat_plugin_init(hexchat_plugin * plugin_handle, char **plugin_name, char **plugin_desc, char **plugin_version, char *arg);
int hexchat_plugin_deinit();