Files
bitchx/source/vars.c
Kevin Easton 8cdc62ae0d Wire up /SET DOUBLE_STATUS_LINES so it actually does something
The DOUBLE_STATUS_LINES /SET has existed for a long while, but setting it has
never actually had an effect.  This change causes it to affect the
/window double setting of new windows: 0 means new windows are created without
double status lines, 1 means only the first window is created with double
status lines and subsequent windows aren't (this is the default) and 2 means
that all windows are created with double status lines.

Note that setting this variable in your .ircrc can't actually affect the first
window, because that's created before the .ircrc is loaded.  The compiled-in
default value (DEFAULT_DOUBLE_STATUS_LINES in config.h) is the only thing that
can affect the first window.

Reported by presi.
2015-06-03 23:16:57 +10:00

1722 lines
63 KiB
C

/*
* vars.c: All the dealing of the irc variables are handled here.
*
*
* Written By Michael Sandrof
*
* Copyright(c) 1990
*
* See the COPYRIGHT file, or do a HELP IRCII COPYRIGHT
*/
#include "irc.h"
static char cvsrevision[] = "$Id$";
CVS_REVISION(vars_c)
#include "struct.h"
#include "status.h"
#include "window.h"
#include "lastlog.h"
#include "log.h"
#include "encrypt.h"
#include "history.h"
#include "notify.h"
#include "vars.h"
#include "input.h"
#include "ircaux.h"
#include "who.h"
#include "ircterm.h"
#include "output.h"
#include "screen.h"
#include "list.h"
#include "server.h"
#include "window.h"
#include "misc.h"
#include "stack.h"
#include "alist.h"
#include "hash2.h"
#include "cset.h"
#include "module.h"
#include "tcl_bx.h"
void add_tcl_vars(void);
#ifdef WANT_CD
#include "cdrom.h"
#endif
#ifdef TRANSLATE
#include "translat.h"
#endif
#define MAIN_SOURCE
#include "modval.h"
#if defined(WINNT)
#include <windows.h>
extern DWORD gdwPlatform;
#endif
char *var_settings[] =
{
"OFF", "ON", "TOGGLE"
};
extern char *auto_str;
extern Screen *screen_list;
extern struct in_addr nat_address;
extern int use_nat_address;
int loading_global = 0;
enum VAR_TYPES find_variable (char *, int *);
static void exec_warning (Window *, char *, int);
static void eight_bit_characters (Window *, char *, int);
static void set_realname (Window *, char *, int);
static void set_numeric_string (Window *, char *, int);
static void set_user_mode (Window *, char *, int);
static void set_ov_mode (Window *, char *, int);
static void set_away_time (Window *, char *, int);
static void reinit_screen (Window *, char *, int);
void reinit_status (Window *, char *, int);
static void set_clock_format (Window *, char *, int);
void create_fsets (Window *, int);
void setup_ov_mode (int, int, int);
void convert_swatch (Window *, char *, int);
void toggle_reverse_status(Window *, char *, int);
static void set_dcc_timeout(Window *, char *, int);
void BX_set_scrollback_size (Window *, char *, int);
static void set_use_socks(Window *, char *, int);
static void set_mangle_inbound (Window *, char *, int);
static void set_mangle_outbound (Window *, char *, int);
static void set_mangle_logfiles (Window *, char *, int);
static void set_mangle_operlog (Window *, char *, int);
static void set_nat_address (Window *, char *, int);
extern void debug_window (Window *, char *, int);
extern void set_detach_on_hup (Window *, char *, int);
/*
* irc_variable: all the irc variables used. Note that the integer and
* boolean defaults are set here, which the string default value are set in
* the init_variables() procedure
*/
static IrcVariable irc_variable[] =
{
{ "AINV",0, INT_TYPE_VAR, DEFAULT_AINV, NULL, NULL, 0, VIF_BITCHX },
{ "ALTNICK",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "ALT_CHARSET", 0, BOOL_TYPE_VAR, DEFAULT_ALT_CHARSET, NULL, NULL, 0, VIF_BITCHX },
{ "ALWAYS_SPLIT_BIGGEST",0, BOOL_TYPE_VAR, DEFAULT_ALWAYS_SPLIT_BIGGEST, NULL, NULL, 0, 0 },
{ "ANNOY_KICK",0, BOOL_TYPE_VAR, DEFAULT_ANNOY_KICK, NULL, NULL, 0, VIF_BITCHX },
{ "AOP",0, BOOL_TYPE_VAR, DEFAULT_AOP_VAR, NULL, NULL, 0, VIF_BITCHX },
{ "APPEND_LOG",0, BOOL_TYPE_VAR, 1, NULL, NULL, 0, VIF_BITCHX },
{ "AUTOKICK_ON_VERSION",0, BOOL_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "AUTO_AWAY",0, BOOL_TYPE_VAR, DEFAULT_AUTO_AWAY, NULL, NULL, 0, VIF_BITCHX },
{ "AUTO_AWAY_TIME",0, INT_TYPE_VAR, DEFAULT_AUTO_AWAY_TIME, NULL, set_away_time, 0, VIF_BITCHX },
{ "AUTO_JOIN_ON_INVITE",0, BOOL_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "AUTO_LIMIT",0, INT_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "AUTO_NSLOOKUP",0, BOOL_TYPE_VAR, DEFAULT_AUTO_NSLOOKUP, NULL, NULL, 0, VIF_BITCHX },
{ "AUTO_RECONNECT",0, BOOL_TYPE_VAR, DEFAULT_AUTO_RECONNECT, NULL, NULL, 0, VIF_BITCHX },
{ "AUTO_REJOIN",0, INT_TYPE_VAR, DEFAULT_AUTO_REJOIN, NULL, NULL, 0, VIF_BITCHX },
{ "AUTO_RESPONSE",0, BOOL_TYPE_VAR, 1, NULL, NULL, 0, VIF_BITCHX },
{ "AUTO_RESPONSE_STR",0, STR_TYPE_VAR, 0, NULL, reinit_autoresponse, 0, VIF_BITCHX },
{ "AUTO_UNBAN",0, INT_TYPE_VAR, DEFAULT_AUTO_UNBAN, NULL, NULL, 0, VIF_BITCHX },
{ "AUTO_UNMARK_AWAY",0, BOOL_TYPE_VAR, DEFAULT_AUTO_UNMARK_AWAY, NULL, NULL, 0, 0 },
{ "AUTO_WHOWAS",0, BOOL_TYPE_VAR, DEFAULT_AUTO_WHOWAS, NULL, NULL, 0, 0 },
{ "BANTIME", 0, INT_TYPE_VAR, DEFAULT_BANTIME, NULL, NULL, 0, VIF_BITCHX },
{ "BEEP",0, BOOL_TYPE_VAR, DEFAULT_BEEP, NULL, NULL, 0, VIF_BITCHX },
{ "BEEP_ALWAYS",0, BOOL_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "BEEP_MAX",0, INT_TYPE_VAR, DEFAULT_BEEP_MAX, NULL, NULL, 0, 0 },
{ "BEEP_ON_MSG",0, STR_TYPE_VAR, 0, NULL, set_beep_on_msg, 0, VIF_BITCHX },
{ "BEEP_WHEN_AWAY",0, INT_TYPE_VAR, DEFAULT_BEEP_WHEN_AWAY, NULL, NULL, 0, VIF_BITCHX },
{ "BITCH",0, BOOL_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "BITCHX_HELP",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "BLINK_VIDEO",0, BOOL_TYPE_VAR, DEFAULT_BLINK_VIDEO, NULL, NULL, 0, 0 },
{ "BOLD_VIDEO",0, BOOL_TYPE_VAR, DEFAULT_BOLD_VIDEO, NULL, NULL, 0, 0 },
{ "BOT_LOG",0, BOOL_TYPE_VAR, 1, NULL, NULL, 0, VIF_BITCHX },
{ "BOT_LOGFILE",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "BOT_MODE",0, BOOL_TYPE_VAR, 0, NULL, NULL, 0, 0 },
{ "BOT_PASSWD",0, STR_TYPE_VAR, 0, NULL, NULL, 0, 0 },
{ "BOT_RETURN",0, STR_TYPE_VAR, 0, NULL, NULL, 0, 0 },
{ "BOT_TCL",0, BOOL_TYPE_VAR, 0, NULL, NULL, 0, 0 },
{ "CDCC",0, BOOL_TYPE_VAR, DEFAULT_CDCC, NULL, NULL, 0, 0 },
{ "CDCC_FLOOD_AFTER",0, INT_TYPE_VAR, DEFAULT_CDCC_FLOOD_AFTER, NULL, NULL, 0, VIF_BITCHX },
{ "CDCC_FLOOD_RATE",0, INT_TYPE_VAR, DEFAULT_CDCC_FLOOD_RATE,NULL, NULL, 0, VIF_BITCHX },
{ "CDCC_PROMPT",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "CDCC_SECURITY",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
#ifdef WANT_CD
{ "CD_DEVICE",0, STR_TYPE_VAR, 0, NULL, set_cd_device, 0, VIF_BITCHX },
#else
{ "CD_DEVICE",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
#endif
{ "CHANGE_NICK_ON_KILL",0, BOOL_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "CHANMODE",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "CHANNEL_NAME_WIDTH",0, INT_TYPE_VAR, DEFAULT_CHANNEL_NAME_WIDTH, NULL, BX_update_all_status, 0, 0 },
{ "CHECK_BEEP_USERS",0, BOOL_TYPE_VAR, 0, NULL, NULL, 0, 0 },
{ "CLIENT_INFORMATION",0, STR_TYPE_VAR, 0, NULL, NULL, 0, 0 },
{ "CLOAK",0, INT_TYPE_VAR, DEFAULT_CLOAK, NULL, BX_update_all_status, 0, VIF_BITCHX },
{ "CLOCK",0, BOOL_TYPE_VAR, DEFAULT_CLOCK, NULL, BX_update_all_status, 0, 0 },
{ "CLOCK_24HOUR",0, BOOL_TYPE_VAR, DEFAULT_CLOCK_24HOUR, NULL, reset_clock, 0, VIF_BITCHX },
{ "CLOCK_FORMAT",0, STR_TYPE_VAR, 0, NULL, set_clock_format, 0, 0 },
{ "CLONE_CHECK",0, INT_TYPE_VAR, 0, NULL, NULL, 0, 0 },
{ "CLONE_COUNT",0, INT_TYPE_VAR, 0, NULL, NULL, 0, 0 },
{ "CMDCHARS",0, STR_TYPE_VAR, 0, NULL, NULL, 0, 0 },
{ "COLOR",0, BOOL_TYPE_VAR, 1, NULL, NULL, 0, 0 },
{ "COMMAND_MODE",0, BOOL_TYPE_VAR, DEFAULT_COMMAND_MODE, NULL, NULL, 0, 0 },
{ "COMMENT_BREAKAGE",0, BOOL_TYPE_VAR, 0, NULL, NULL, 0, 0 },
{ "COMPRESS_MODES",0, BOOL_TYPE_VAR, 0, NULL, NULL, 0, 0 },
{ "CONNECT_DELAY",0, INT_TYPE_VAR, DEFAULT_CONNECT_DELAY, NULL, NULL, 0, VIF_BITCHX },
{ "CONNECT_TIMEOUT",0, INT_TYPE_VAR, DEFAULT_CONNECT_TIMEOUT, NULL, NULL, 0, 0 },
{ "CONTINUED_LINE",0, STR_TYPE_VAR, 0, NULL, BX_set_continued_lines, 0, 0 },
{ "CPU_SAVER_AFTER",0, INT_TYPE_VAR, DEFAULT_CPU_SAVER_AFTER, NULL, NULL, 0, VIF_BITCHX },
{ "CPU_SAVER_EVERY",0, INT_TYPE_VAR, DEFAULT_CPU_SAVER_EVERY, NULL, NULL, 0, VIF_BITCHX },
{ "CTCP_DELAY",0, INT_TYPE_VAR, DEFAULT_CTCP_DELAY, NULL, NULL, 0, VIF_BITCHX },
{ "CTCP_FLOOD_AFTER",0, INT_TYPE_VAR, DEFAULT_CTCP_FLOOD_AFTER, NULL, NULL, 0, VIF_BITCHX },
{ "CTCP_FLOOD_BAN",0, BOOL_TYPE_VAR, DEFAULT_CTCP_FLOOD_BAN, NULL, NULL, 0, 0 },
{ "CTCP_FLOOD_PROTECTION",0, BOOL_TYPE_VAR, DEFAULT_CTCP_FLOOD_PROTECTION, NULL, NULL, 0, 0 },
{ "CTCP_FLOOD_RATE",0, INT_TYPE_VAR, DEFAULT_CTCP_FLOOD_RATE, NULL, NULL, 0, VIF_BITCHX},
{ "CTCP_VERBOSE",0, BOOL_TYPE_VAR, DEFAULT_VERBOSE_CTCP, NULL, NULL, 0, 0 },
{ "CTOOLZ_DIR",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "DCC_AUTOGET",0, BOOL_TYPE_VAR, DEFAULT_DCC_AUTOGET, NULL, NULL, 0, VIF_BITCHX },
{ "DCC_AUTORENAME",0, BOOL_TYPE_VAR, DEFAULT_DCC_AUTORENAME, NULL, NULL, 0, VIF_BITCHX },
{ "DCC_AUTORESUME",0, BOOL_TYPE_VAR, DEFAULT_DCC_AUTORESUME, NULL, NULL, 0, VIF_BITCHX },
{ "DCC_BAR_TYPE",0, INT_TYPE_VAR, DEFAULT_DCC_BAR_TYPE, NULL, NULL, 0, VIF_BITCHX },
{ "DCC_BLOCK_SIZE",0, INT_TYPE_VAR, DEFAULT_DCC_BLOCK_SIZE, NULL, NULL, 0, VIF_BITCHX },
{ "DCC_DLDIR",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "DCC_FAST",0, BOOL_TYPE_VAR, DEFAULT_DCC_FAST, NULL, NULL, 0, VIF_BITCHX },
{ "DCC_FORCE_PORT",0, INT_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "DCC_GET_LIMIT",0, INT_TYPE_VAR, DEFAULT_DCC_GET_LIMIT, NULL, NULL, 0, VIF_BITCHX },
{ "DCC_MAX_AUTOGET_SIZE",0, INT_TYPE_VAR, DEFAULT_MAX_AUTOGET_SIZE, NULL, NULL, 0, VIF_BITCHX },
{ "DCC_QUEUE_LIMIT",0, INT_TYPE_VAR, DEFAULT_DCC_QUEUE_LIMIT, NULL, NULL, 0, VIF_BITCHX },
{ "DCC_SEND_LIMIT",0, INT_TYPE_VAR, DEFAULT_DCC_SEND_LIMIT, NULL, NULL, 0, VIF_BITCHX },
{ "DCC_TIMEOUT",0, INT_TYPE_VAR, DEFAULT_DCCTIMEOUT, NULL, set_dcc_timeout, 0, VIF_BITCHX },
{ "DCC_ULDIR",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "DCC_USE_GATEWAY_ADDR",0, BOOL_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "DEBUG",0, STR_TYPE_VAR, 0, NULL, debug_window, 0, 0 },
#if defined(__EMXPM__) || defined(WIN32)
{ "DEFAULT_CODEPAGE",0, INT_TYPE_VAR, DEFAULT_CODEPAGE, NULL, NULL, 0, VIF_BITCHX },
#endif
{ "DEFAULT_FONT",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "DEFAULT_MENU",0, STR_TYPE_VAR, 0, NULL, NULL, 0, 0 },
{ "DEFAULT_NICK",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "DEFAULT_REASON",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "DEOPFLOOD",0, BOOL_TYPE_VAR, DEFAULT_DEOPFLOOD, NULL, NULL, 0, VIF_BITCHX },
{ "DEOPFLOOD_TIME",0, INT_TYPE_VAR, DEFAULT_DEOPFLOOD_TIME, NULL, NULL, 0, VIF_BITCHX },
{ "DEOP_ON_DEOPFLOOD",0, INT_TYPE_VAR, DEFAULT_DEOP_ON_DEOPFLOOD, NULL, NULL, 0, VIF_BITCHX },
{ "DEOP_ON_KICKFLOOD",0, INT_TYPE_VAR, DEFAULT_DEOP_ON_KICKFLOOD, NULL, NULL, 0, VIF_BITCHX },
{ "DETACH_ON_HUP",0, BOOL_TYPE_VAR, DEFAULT_DETACH_ON_HUP, NULL, set_detach_on_hup, 0, 0 },
{ "DISPATCH_UNKNOWN_COMMANDS",0,BOOL_TYPE_VAR, DEFAULT_DISPATCH_UNKNOWN_COMMANDS, NULL, NULL, 0, 0 },
{ "DISPLAY",0, BOOL_TYPE_VAR, DEFAULT_DISPLAY, NULL, NULL, 0, 0 },
{ "DISPLAY_ANSI",0, BOOL_TYPE_VAR, DEFAULT_DISPLAY_ANSI, NULL, toggle_reverse_status, 0, 0 },
{ "DISPLAY_PC_CHARACTERS",0, INT_TYPE_VAR, DEFAULT_DISPLAY_PC_CHARACTERS, NULL, reinit_screen, 0, VIF_BITCHX },
{ "DOUBLE_STATUS_LINE",0, INT_TYPE_VAR, DEFAULT_DOUBLE_STATUS_LINE, NULL, NULL, 0, VIF_BITCHX },
{ "EIGHT_BIT_CHARACTERS",0, BOOL_TYPE_VAR, DEFAULT_EIGHT_BIT_CHARACTERS, NULL, eight_bit_characters, 0, VIF_BITCHX },
{ "EXEC_PROTECTION",0, BOOL_TYPE_VAR, DEFAULT_EXEC_PROTECTION, NULL, exec_warning, 0, VF_NODAEMON },
{ "FAKE_SPLIT_PATTERNS",0, STR_TYPE_VAR, 0, NULL, NULL, 0, 0 },
{ "FLOATING_POINT_MATH_VAR",0, BOOL_TYPE_VAR, DEFAULT_FLOATING_POINT_MATH, NULL, NULL, 0, 0 },
{ "FLOOD_AFTER",0, INT_TYPE_VAR, DEFAULT_FLOOD_AFTER, NULL, NULL, 0, VIF_BITCHX },
{ "FLOOD_KICK",0, BOOL_TYPE_VAR, DEFAULT_FLOOD_KICK, NULL, NULL, 0, VIF_BITCHX },
{ "FLOOD_PROTECTION",0, BOOL_TYPE_VAR, DEFAULT_FLOOD_PROTECTION, NULL, NULL, 0, VIF_BITCHX },
{ "FLOOD_RATE",0, INT_TYPE_VAR, DEFAULT_FLOOD_RATE, NULL, NULL, 0, VIF_BITCHX },
{ "FLOOD_USERS",0, INT_TYPE_VAR, DEFAULT_FLOOD_USERS, NULL, NULL, 0, VIF_BITCHX },
{ "FLOOD_WARNING",0, BOOL_TYPE_VAR, DEFAULT_FLOOD_WARNING, NULL, NULL, 0, VIF_BITCHX },
{ "FTP_GRAB",0, BOOL_TYPE_VAR, DEFAULT_FTP_GRAB, NULL, NULL, 0, VIF_BITCHX },
{ "FULL_STATUS_LINE",0, BOOL_TYPE_VAR, DEFAULT_FULL_STATUS_LINE, NULL, BX_update_all_status, 0, 0 },
{ "HACKING",0, INT_TYPE_VAR, DEFAULT_HACKING, NULL, NULL, 0, VIF_BITCHX },
{ "HACK_OPS",0, BOOL_TYPE_VAR, 0, NULL, NULL, 0, 0},
{ "HEBREW_TOGGLE",0, BOOL_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "HELP_PAGER",0, BOOL_TYPE_VAR, DEFAULT_HELP_PAGER, NULL, NULL, 0, 0 },
{ "HELP_PATH",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VF_EXPAND_PATH|VF_NODAEMON },
{ "HELP_PROMPT",0, BOOL_TYPE_VAR, DEFAULT_HELP_PROMPT, NULL, NULL, 0, 0 },
{ "HELP_WINDOW",0, BOOL_TYPE_VAR, DEFAULT_HELP_WINDOW, NULL, NULL, 0, 0 },
{ "HIDE_PRIVATE_CHANNELS",0, BOOL_TYPE_VAR, DEFAULT_HIDE_PRIVATE_CHANNELS, NULL, BX_update_all_status, 0, 0 },
{ "HIGHLIGHT_CHAR",0, STR_TYPE_VAR, 0, NULL, set_highlight_char, 0, 0 },
{ "HIGH_BIT_ESCAPE",0, INT_TYPE_VAR, DEFAULT_HIGH_BIT_ESCAPE, NULL, set_meta_8bit, 0, 0 },
{ "HISTORY",0, INT_TYPE_VAR, DEFAULT_HISTORY, NULL, set_history_size, 0, VF_NODAEMON },
{ "HOLD_MODE",0, BOOL_TYPE_VAR, DEFAULT_HOLD_MODE, NULL, BX_reset_line_cnt, 0, 0 },
{ "HOLD_MODE_MAX",0, INT_TYPE_VAR, DEFAULT_HOLD_MODE_MAX, NULL, NULL, 0, 0 },
{ "HTTP_GRAB",0, BOOL_TYPE_VAR, DEFAULT_HTTP_GRAB, NULL, NULL, 0, VIF_BITCHX },
{ "IDENT_HACK",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "IDLE_CHECK",0, INT_TYPE_VAR, 120, NULL, NULL, 0, VIF_BITCHX },
{ "IGNORE_TIME",0, INT_TYPE_VAR, DEFAULT_IGNORE_TIME, NULL, NULL, 0, VIF_BITCHX },
{ "INDENT",0, BOOL_TYPE_VAR, DEFAULT_INDENT, NULL, NULL, 0, 0 },
{ "INPUT_ALIASES",0, BOOL_TYPE_VAR, DEFAULT_INPUT_ALIASES, NULL, NULL, 0, 0 },
{ "INPUT_GLOB",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "INPUT_PROMPT",0, STR_TYPE_VAR, 0, NULL, BX_set_input_prompt, 0, 0 },
{ "INSERT_MODE",0, BOOL_TYPE_VAR, DEFAULT_INSERT_MODE, NULL, BX_update_all_status, 0, 0 },
{ "INVERSE_VIDEO",0, BOOL_TYPE_VAR, DEFAULT_INVERSE_VIDEO, NULL, NULL, 0, 0 },
{ "JOINFLOOD",0, BOOL_TYPE_VAR, DEFAULT_JOINFLOOD, NULL, NULL, 0, VIF_BITCHX },
{ "JOINFLOOD_TIME",0, INT_TYPE_VAR, DEFAULT_JOINFLOOD_TIME, NULL, NULL, 0, VIF_BITCHX },
{ "JOIN_NEW_WINDOW",0, BOOL_TYPE_VAR, DEFAULT_JOIN_NEW_WINDOW, NULL, NULL, 0, VIF_BITCHX },
{ "JOIN_NEW_WINDOW_TYPE",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "KICKFLOOD",0, BOOL_TYPE_VAR, DEFAULT_KICKFLOOD, NULL, NULL, 0, VIF_BITCHX },
{ "KICKFLOOD_TIME",0, INT_TYPE_VAR, DEFAULT_KICKFLOOD_TIME, NULL, NULL, 0, VIF_BITCHX },
{ "KICK_IF_BANNED",0, BOOL_TYPE_VAR, DEFAULT_KICK_IF_BANNED, NULL, NULL, 0, VIF_BITCHX },
{ "KICK_ON_DEOPFLOOD",0, INT_TYPE_VAR, DEFAULT_KICK_ON_DEOPFLOOD, NULL, NULL, 0, VIF_BITCHX },
{ "KICK_ON_JOINFLOOD",0, INT_TYPE_VAR, DEFAULT_KICK_ON_JOINFLOOD, NULL, NULL, 0, VIF_BITCHX },
{ "KICK_ON_KICKFLOOD",0, INT_TYPE_VAR, DEFAULT_KICK_ON_KICKFLOOD, NULL, NULL, 0, VIF_BITCHX },
{ "KICK_ON_NICKFLOOD",0, INT_TYPE_VAR, DEFAULT_KICK_ON_NICKFLOOD, NULL, NULL, 0, VIF_BITCHX },
{ "KICK_ON_PUBFLOOD",0, INT_TYPE_VAR, DEFAULT_KICK_ON_PUBFLOOD, NULL, NULL, 0, VIF_BITCHX },
{ "KICK_OPS",0, BOOL_TYPE_VAR, DEFAULT_KICK_OPS, NULL, NULL, 0, VIF_BITCHX },
{ "LAMEIDENT",0, BOOL_TYPE_VAR, DEFAULT_LAME_IDENT, NULL, NULL, 0, VIF_BITCHX },
{ "LAMELIST",0, BOOL_TYPE_VAR, DEFAULT_LAMELIST, NULL, NULL, 0, VIF_BITCHX },
{ "LASTLOG",0, INT_TYPE_VAR, DEFAULT_LASTLOG, NULL, set_lastlog_size, 0, 0 },
{ "LASTLOG_ANSI",0, BOOL_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "LASTLOG_LEVEL",0, STR_TYPE_VAR, 0, NULL, set_lastlog_level, 0, 0 },
{ "LLOOK",0, BOOL_TYPE_VAR, DEFAULT_LLOOK, NULL, NULL, 0, 0 },
{ "LLOOK_DELAY",0, INT_TYPE_VAR, DEFAULT_LLOOK_DELAY, NULL, NULL, 0, VIF_BITCHX },
{ "LOAD_PATH",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VF_NODAEMON },
{ "LOG",0, BOOL_TYPE_VAR, DEFAULT_LOG, NULL, logger, 0, 0 },
{ "LOGFILE",0, STR_TYPE_VAR, 0, NULL, set_log_file, 0, VF_NODAEMON },
{ "MAIL",0, INT_TYPE_VAR, DEFAULT_MAIL, NULL, BX_update_all_status, 0, VIF_BITCHX },
{ "MANGLE_INBOUND",0, STR_TYPE_VAR, 0, NULL, set_mangle_inbound, 0, VIF_BITCHX },
{ "MANGLE_LOGFILES",0, STR_TYPE_VAR, 0, NULL, set_mangle_logfiles, 0, VIF_BITCHX },
{ "MANGLE_OPERLOG",0, STR_TYPE_VAR, 0, NULL, set_mangle_operlog, 0, VIF_BITCHX },
{ "MANGLE_OUTBOUND",0, STR_TYPE_VAR, 0, NULL, set_mangle_outbound, 0, VIF_BITCHX },
{ "MAX_DEOPS",0, INT_TYPE_VAR, DEFAULT_MAX_DEOPS, NULL, NULL, 0, VIF_BITCHX },
{ "MAX_IDLEKICKS",0, INT_TYPE_VAR, DEFAULT_MAX_IDLEKICKS, NULL, NULL, 0, VIF_BITCHX },
{ "MAX_SERVER_RECONNECT",0, INT_TYPE_VAR, DEFAULT_MAX_SERVER_RECONNECT, NULL, NULL, 0, VIF_BITCHX },
{ "MAX_URLS",0, INT_TYPE_VAR, DEFAULT_MAX_URLS, NULL, NULL, 0, VIF_BITCHX },
#ifdef GUI
{ "MDI",0, BOOL_TYPE_VAR, DEFAULT_MDI, NULL, gui_mdi, 0, VIF_BITCHX },
#else
{ "MDI",0, BOOL_TYPE_VAR, DEFAULT_MDI, NULL, NULL, 0, VIF_BITCHX },
#endif
{ "META_STATES_VAR",0, INT_TYPE_VAR, DEFAULT_META_STATES, NULL, NULL, 0, 0 },
{ "MIRCS",0, BOOL_TYPE_VAR, 1, NULL, NULL, 0, VIF_BITCHX },
{ "MODE_STRIPPER",0, BOOL_TYPE_VAR, 0, NULL, NULL, 0, 0 },
{ "MSGCOUNT",0, INT_TYPE_VAR, 0, NULL, NULL, 0, 0 },
{ "MSGLOG",0, BOOL_TYPE_VAR, DEFAULT_MSGLOG, NULL, NULL, 0, 0 },
{ "MSGLOG_FILE",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX|VF_EXPAND_PATH },
{ "MSGLOG_LEVEL",0, STR_TYPE_VAR, 0, NULL, set_msglog_level, 0, VIF_BITCHX},
{ "NAMES_COLUMNS",0, INT_TYPE_VAR, 5, NULL, NULL, 0, VIF_BITCHX },
{ "NAT_ADDRESS",0, STR_TYPE_VAR, 0, NULL, set_nat_address, 0, VIF_BITCHX },
{ "ND_SPACE_MAX",0, INT_TYPE_VAR, DEFAULT_ND_SPACE_MAX, NULL, NULL, 0, 0 },
{ "NEW_SERVER_LASTLOG_LEVEL",0, STR_TYPE_VAR, 0, NULL, set_new_server_lastlog_level, 0, VIF_BITCHX },
{ "NEXT_SERVER_ON_LOCAL_KILL",0, BOOL_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "NICKFLOOD",0, BOOL_TYPE_VAR, DEFAULT_NICKFLOOD, NULL, NULL, 0, VIF_BITCHX },
{ "NICKFLOOD_TIME",0, INT_TYPE_VAR, DEFAULT_NICKFLOOD_TIME, NULL, NULL, 0, VIF_BITCHX },
{ "NICKLIST",0, INT_TYPE_VAR, DEFAULT_NICKLIST, NULL, NULL, 0, VIF_BITCHX },
{ "NICKLIST_SORT",0, INT_TYPE_VAR, DEFAULT_NICKLIST_SORT, NULL, NULL, 0, VIF_BITCHX },
{ "NICK_COMPLETION",0, BOOL_TYPE_VAR, DEFAULT_NICK_COMPLETION, NULL, NULL, 0, VIF_BITCHX },
{ "NICK_COMPLETION_CHAR",0, CHAR_TYPE_VAR, DEFAULT_NICK_COMPLETION_CHAR, NULL, NULL, 0, VIF_BITCHX },
{ "NICK_COMPLETION_LEN",0, INT_TYPE_VAR, DEFAULT_NICK_COMPLETION_LEN, NULL, NULL, 0, VIF_BITCHX },
{ "NICK_COMPLETION_TYPE",0, INT_TYPE_VAR, DEFAULT_NICK_COMPLETION_TYPE, NULL, NULL, 0, VIF_BITCHX },
{ "NOTIFY",0, BOOL_TYPE_VAR, DEFAULT_NOTIFY, NULL, NULL, 0, VIF_BITCHX },
{ "NOTIFY_HANDLER",0, STR_TYPE_VAR, 0, NULL, set_notify_handler, 0, 0 },
{ "NOTIFY_INTERVAL",0, INT_TYPE_VAR, DEFAULT_NOTIFY_INTERVAL, NULL, NULL, 0, VIF_BITCHX },
{ "NOTIFY_LEVEL",0, STR_TYPE_VAR, 0, NULL, set_notify_level, 0, 0 },
{ "NOTIFY_ON_TERMINATION",0, BOOL_TYPE_VAR, DEFAULT_NOTIFY_ON_TERMINATION, NULL, NULL, 0, VF_NODAEMON },
{ "NO_CTCP_FLOOD",0, BOOL_TYPE_VAR, DEFAULT_NO_CTCP_FLOOD, NULL, NULL, 0, 0 },
{ "NO_FAIL_DISCONNECT",0, BOOL_TYPE_VAR, DEFAULT_NO_FAIL_DISCONNECT, NULL, NULL, 0, VIF_BITCHX },
{ "NUM_BANMODES",0, INT_TYPE_VAR, DEFAULT_NUM_BANMODES, NULL, NULL, 0, VIF_BITCHX },
{ "NUM_KICKS",0, INT_TYPE_VAR, DEFAULT_NUM_KICKS, NULL, NULL, 0, VIF_BITCHX },
{ "NUM_KILLS",0, INT_TYPE_VAR, 1, NULL, NULL, 0, VIF_BITCHX },
{ "NUM_OF_WHOWAS",0, INT_TYPE_VAR, DEFAULT_NUM_OF_WHOWAS, NULL, NULL, 0, VIF_BITCHX },
{ "NUM_OPMODES",0, INT_TYPE_VAR, DEFAULT_NUM_OPMODES, NULL, NULL, 0, VIF_BITCHX },
{ "OPER_MODES",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "ORIGNICK_TIME",0, INT_TYPE_VAR, 5, NULL, NULL, 0, VIF_BITCHX },
#ifdef WANT_OPERVIEW
{ "OV",0, BOOL_TYPE_VAR, DEFAULT_OPER_VIEW, NULL, set_ov_mode, 0, VIF_BITCHX },
#else
{ "OV",0, BOOL_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
#endif
{ "PAD_CHAR",0, CHAR_TYPE_VAR, DEFAULT_PAD_CHAR, NULL, NULL, 0, 0 },
{ "PING_TYPE",0, INT_TYPE_VAR, DEFAULT_PING_TYPE, NULL, NULL, 0, VIF_BITCHX },
{ "PROTECT_CHANNELS",0, STR_TYPE_VAR, 0, NULL, NULL, 0, 0 },
{ "PUBFLOOD",0, BOOL_TYPE_VAR, DEFAULT_PUBFLOOD, NULL, NULL, 0, VIF_BITCHX },
{ "PUBFLOOD_TIME",0, INT_TYPE_VAR, DEFAULT_PUBFLOOD_TIME, NULL, NULL, 0, VIF_BITCHX },
{ "QUERY_NEW_WINDOW",0, BOOL_TYPE_VAR, DEFAULT_QUERY_NEW_WINDOW, NULL, NULL, 0, VIF_BITCHX },
{ "QUERY_NEW_WINDOW_TYPE",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "QUEUE_SENDS",0, INT_TYPE_VAR, DEFAULT_QUEUE_SENDS, NULL, NULL, 0, VIF_BITCHX },
{ "RANDOM_LOCAL_PORTS",0, BOOL_TYPE_VAR, DEFAULT_RANDOM_LOCAL_PORTS, NULL, NULL, 0, VIF_BITCHX },
{ "RANDOM_SOURCE",0, INT_TYPE_VAR, DEFAULT_RANDOM_SOURCE, NULL, NULL, 0, VIF_BITCHX },
{ "REALNAME",0, STR_TYPE_VAR, 0, NULL, set_realname, 0, VF_NODAEMON },
{ "REVERSE_STATUS",0, BOOL_TYPE_VAR, 0, NULL, reinit_status, 0, 0 },
{ "SAVEFILE",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "SCREEN_OPTIONS",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VF_NODAEMON },
{ "SCRIPT_HELP",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "SCROLLBACK",0, INT_TYPE_VAR, DEFAULT_SCROLLBACK_LINES, NULL, BX_set_scrollback_size, 0, 0 },
{ "SCROLLBACK_RATIO",0, INT_TYPE_VAR, DEFAULT_SCROLLBACK_RATIO, NULL, NULL, 0, 0 },
{ "SCROLL_LINES",0, INT_TYPE_VAR, DEFAULT_SCROLL_LINES, NULL, BX_set_scroll_lines, 0, 0 },
{ "SEND_AWAY_MSG",0, BOOL_TYPE_VAR, DEFAULT_SEND_AWAY_MSG, NULL, NULL, 0, VIF_BITCHX },
{ "SEND_CTCP_MSG",0, BOOL_TYPE_VAR, DEFAULT_SEND_CTCP_MSG, NULL, NULL, 0, VIF_BITCHX },
{ "SEND_IGNORE_MSG",0, BOOL_TYPE_VAR, DEFAULT_SEND_IGNORE_MSG, NULL, NULL, 0, VIF_BITCHX },
{ "SEND_OP_MSG",0, BOOL_TYPE_VAR, DEFAULT_SEND_OP_MSG, NULL, NULL, 0, VIF_BITCHX },
{ "SERVER_GROUPS",0, BOOL_TYPE_VAR, DEFAULT_SERVER_GROUPS, NULL, NULL, 0, VIF_BITCHX },
{ "SERVER_PROMPT",0, STR_TYPE_VAR, 0, NULL, NULL, 0, 0 },
{ "SHELL",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VF_NODAEMON },
{ "SHELL_FLAGS",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VF_NODAEMON },
{ "SHELL_LIMIT",0, INT_TYPE_VAR, DEFAULT_SHELL_LIMIT, NULL, NULL, 0, VF_NODAEMON },
{ "SHITLIST",0, BOOL_TYPE_VAR, DEFAULT_SHITLIST, NULL, NULL, 0, VIF_BITCHX },
{ "SHITLIST_REASON",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "SHOW_AWAY_ONCE",0, BOOL_TYPE_VAR, DEFAULT_SHOW_AWAY_ONCE, NULL, NULL, 0, VIF_BITCHX },
{ "SHOW_CHANNEL_NAMES",0, BOOL_TYPE_VAR, DEFAULT_SHOW_CHANNEL_NAMES, NULL, NULL, 0, 0 },
{ "SHOW_END_OF_MSGS",0, BOOL_TYPE_VAR, DEFAULT_SHOW_END_OF_MSGS, NULL, NULL, 0, 0 },
{ "SHOW_NUMERICS",0, BOOL_TYPE_VAR, DEFAULT_SHOW_NUMERICS, NULL, NULL, 0, 0 },
{ "SHOW_NUMERICS_STR",0, STR_TYPE_VAR, 0, NULL, set_numeric_string, 0, 0 },
{ "SHOW_STATUS_ALL",0, BOOL_TYPE_VAR, DEFAULT_SHOW_STATUS_ALL, NULL, BX_update_all_status, 0, 0 },
{ "SHOW_WHO_HOPCOUNT",0, BOOL_TYPE_VAR, DEFAULT_SHOW_WHO_HOPCOUNT, NULL, NULL, 0, 0 },
{ "SOCKS_HOST",0, STR_TYPE_VAR, 0, NULL, set_use_socks, 0, VIF_BITCHX },
{ "SOCKS_PORT",0, INT_TYPE_VAR, DEFAULT_SOCKS_PORT, NULL, NULL, 0, VIF_BITCHX },
{ "STATUS_AWAY",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_CDCCCOUNT",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_CHANNEL",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_CHANOP",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_CLOCK",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_CPU_SAVER",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_DCCCOUNT",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_DOES_EXPANDOS",0, BOOL_TYPE_VAR, DEFAULT_STATUS_DOES_EXPANDOS, NULL, BX_build_status, 0, 0 },
{ "STATUS_FLAG",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_FORMAT",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_FORMAT1",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_FORMAT2",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_FORMAT3",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_HALFOP",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_HOLD",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_HOLD_LINES",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_INSERT",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_LAG",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_MAIL",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, VF_NODAEMON },
{ "STATUS_MODE",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_MSGCOUNT",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_NICK",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_NOTIFY",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_NO_REPEAT",0, BOOL_TYPE_VAR, DEFAULT_STATUS_NO_REPEAT, NULL, NULL, 0, 0 },
{ "STATUS_OPER",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_OPER_KILLS",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_OVERWRITE",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_QUERY",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_SCROLLBACK",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_SERVER",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_TOPIC",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_UMODE",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER0",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER1",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER10",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER11",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER12",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER13",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER14",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER15",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER16",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER17",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER18",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER19",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER2",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER20",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER21",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER22",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER23",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER24",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER25",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER26",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER27",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER28",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER29",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER3",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER30",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER31",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER32",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER33",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER34",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER35",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER36",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER37",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER38",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER39",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER4",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER5",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER6",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER7",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER8",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USER9",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_USERS",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_VOICE",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "STATUS_WINDOW",0, STR_TYPE_VAR, 0, NULL, BX_build_status, 0, 0 },
{ "SUPPRESS_SERVER_MOTD",0, BOOL_TYPE_VAR, DEFAULT_SUPPRESS_SERVER_MOTD, NULL, NULL, 0, VF_NODAEMON },
#ifdef WANT_OPERVIEW
{ "SWATCH",0, STR_TYPE_VAR, 0, NULL, convert_swatch, 0, VIF_BITCHX },
#else
{ "SWATCH",0, STR_TYPE_VAR, 0, NULL, NULL, 0, 0 },
#endif
{ "TAB",0, BOOL_TYPE_VAR, DEFAULT_TAB, NULL, NULL, 0, 0 },
{ "TAB_MAX",0, INT_TYPE_VAR, DEFAULT_TAB_MAX, NULL, NULL, 0, 0 },
{ "TIMESTAMP",0, BOOL_TYPE_VAR, DEFAULT_TIMESTAMP, NULL, NULL, 0, VIF_BITCHX },
{ "TIMESTAMP_AWAYLOG_HOURLY",0, BOOL_TYPE_VAR, DEFAULT_TIMESTAMP_AWAYLOG_HOURLY, NULL, NULL, 0, VIF_BITCHX },
{ "TIMESTAMP_STRING",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
#ifdef TRANSLATE
{ "TRANSLATION",0, STR_TYPE_VAR, 0, NULL, set_translation, 0, 0 },
#else
{ "TRANSLATION",0, STR_TYPE_VAR, 0, NULL, NULL, 0, 0 },
#endif
{ "UNDERLINE_VIDEO",0, BOOL_TYPE_VAR, DEFAULT_UNDERLINE_VIDEO, NULL, NULL, 0, 0 },
{ "USERLIST",0, BOOL_TYPE_VAR, DEFAULT_USERLIST, NULL, NULL, 0, VIF_BITCHX },
{ "USERMODE",0, STR_TYPE_VAR, 0, NULL, set_user_mode, 0, VIF_BITCHX},
{ "USER_FLAG_OPS",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "USER_FLAG_PROT",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "USER_INFORMATION",0, STR_TYPE_VAR, 0, NULL, NULL, 0, 0 },
{ "WINDOW_DESTROY_PART",0, BOOL_TYPE_VAR, DEFAULT_WINDOW_DESTROY_PART, NULL, NULL, 0, VIF_BITCHX },
{ "WINDOW_QUIET",0, BOOL_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "WORD_BREAK",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "XTERM",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "XTERM_OPTIONS",0, STR_TYPE_VAR, 0, NULL, NULL, 0, VF_NODAEMON },
{ "XTERM_TITLE",0, BOOL_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "_CDCC_CLOSE_IDLE_SENDS_TIME",0,INT_TYPE_VAR, 55,NULL, NULL, 0, VIF_BITCHX },
{ "_CDCC_MINSPEED_TIME",0, INT_TYPE_VAR, 0, NULL, NULL, 0, VIF_BITCHX },
{ "_CDCC_PACKS_OFFERED",0, INT_TYPE_VAR, 0, NULL, NULL, 0, 0 },
{ NULL, 0, 0, 0, NULL, NULL, 0, 0 }
};
/*
* get_string_var: returns the value of the string variable given as an index
* into the variable table. Does no checking of variable types, etc
*/
char * BX_get_string_var(enum VAR_TYPES var)
{
return (irc_variable[var].string);
}
/*
* get_int_var: returns the value of the integer string given as an index
* into the variable table. Does no checking of variable types, etc
*/
int BX_get_int_var(enum VAR_TYPES var)
{
return (irc_variable[var].integer);
}
/*
* set_string_var: sets the string variable given as an index into the
* variable table to the given string. If string is null, the current value
* of the string variable is freed and set to null
*/
void BX_set_string_var(enum VAR_TYPES var, char *string)
{
if (string)
malloc_strcpy(&(irc_variable[var].string), string);
else
new_free(&(irc_variable[var].string));
}
/*
* set_int_var: sets the integer value of the variable given as an index into
* the variable table to the given value
*/
void BX_set_int_var(enum VAR_TYPES var, unsigned int value)
{
irc_variable[var].integer = value;
}
/*
* init_variables: initializes the string variables that can't really be
* initialized properly above
*/
void init_variables()
{
#if defined(WINNT) || defined(__EMX__)
char *shell;
#endif
int old_display = window_display;
char *s;
#if 1
/* def VAR_DEBUG*/
int i;
for (i = 1; i < NUMBER_OF_VARIABLES - 1; i++)
if (strcmp(irc_variable[i-1].name, irc_variable[i].name) >= 0)
ircpanic("Variable [%d] (%s) is out of order.", i, irc_variable[i].name);
#endif
window_display = 0;
set_string_var(SCRIPT_HELP_VAR, DEFAULT_SCRIPT_HELP_FILE);
set_string_var(BITCHX_HELP_VAR, DEFAULT_BITCHX_HELP_FILE);
set_string_var(IDENT_HACK_VAR, DEFAULT_IDENT_HACK);
set_string_var(AUTO_RESPONSE_STR_VAR, nickname);
set_string_var(XTERM_OPTIONS_VAR, DEFAULT_XTERM);
set_string_var(XTERM_OPTIONS_VAR, DEFAULT_XTERM_OPTIONS);
set_string_var(SHOW_NUMERICS_STR_VAR, DEFAULT_SHOW_NUMERICS_STR);
set_numeric_string(current_window, DEFAULT_SHOW_NUMERICS_STR, 0);
reinit_autoresponse(current_window, nickname, 0);
set_string_var(MSGLOGFILE_VAR, DEFAULT_MSGLOGFILE);
set_string_var(MSGLOG_LEVEL_VAR, DEFAULT_MSGLOG_LEVEL);
set_string_var(CTOOLZ_DIR_VAR, DEFAULT_CTOOLZ_DIR);
set_int_var(LLOOK_DELAY_VAR, DEFAULT_LLOOK_DELAY);
set_int_var(MSGCOUNT_VAR, 0);
set_string_var(SHITLIST_REASON_VAR, DEFAULT_SHITLIST_REASON);
set_string_var(PROTECT_CHANNELS_VAR, DEFAULT_PROTECT_CHANNELS);
set_string_var(DEFAULT_REASON_VAR, DEFAULT_KICK_REASON);
set_string_var(DCC_DLDIR_VAR, DEFAULT_DCC_DLDIR);
set_string_var(DCC_ULDIR_VAR, DEFAULT_DCC_DLDIR);
set_string_var(CMDCHARS_VAR, DEFAULT_CMDCHARS);
set_string_var(LOGFILE_VAR, DEFAULT_LOGFILE);
set_string_var(WORD_BREAK_VAR, DEFAULT_WORD_BREAK);
set_string_var(JOIN_NEW_WINDOW_TYPE_VAR, DEFAULT_JOIN_NEW_WINDOW_TYPE);
set_string_var(QUERY_NEW_WINDOW_TYPE_VAR, DEFAULT_QUERY_NEW_WINDOW_TYPE);
#if defined(__EMX__)
if (getenv("SHELL"))
{
shell = getenv("SHELL");
set_string_var(SHELL_VAR, path_search(shell, getenv("PATH")));
if (getenv("SHELL_FLAGS"))
set_string_var(SHELL_FLAGS_VAR, getenv("SHELL_FLAGS"));
}
else
{
shell = "cmd.exe";
set_string_var(SHELL_FLAGS_VAR, "/c");
set_string_var(SHELL_VAR, convert_dos(path_search(shell, getenv("PATH"))));
}
#elif WINNT
if (getenv("SHELL"))
{
shell = getenv("SHELL");
set_string_var(SHELL_VAR, path_search(shell, getenv("PATH")));
if (getenv("SHELL_FLAGS"))
set_string_var(SHELL_FLAGS_VAR, getenv("SHELL_FLAGS"));
}
else if (gdwPlatform == VER_PLATFORM_WIN32_WINDOWS)
{
shell = "command.com";
set_string_var(SHELL_FLAGS_VAR, "/c");
set_string_var(SHELL_VAR, convert_dos(path_search(shell, getenv("PATH"))));
}
else
{
shell = "cmd.exe";
set_string_var(SHELL_FLAGS_VAR, "/c");
set_string_var(SHELL_VAR, convert_dos(path_search(shell, getenv("PATH"))));
}
#else
set_string_var(SHELL_VAR, DEFAULT_SHELL);
set_string_var(SHELL_FLAGS_VAR, DEFAULT_SHELL_FLAGS);
#endif
set_string_var(CONTINUED_LINE_VAR, DEFAULT_CONTINUED_LINE);
set_string_var(INPUT_PROMPT_VAR, DEFAULT_INPUT_PROMPT);
set_string_var(HIGHLIGHT_CHAR_VAR, DEFAULT_HIGHLIGHT_CHAR);
set_string_var(LASTLOG_LEVEL_VAR, DEFAULT_LASTLOG_LEVEL);
set_string_var(NOTIFY_HANDLER_VAR, DEFAULT_NOTIFY_HANDLER);
set_string_var(NOTIFY_LEVEL_VAR, DEFAULT_NOTIFY_LEVEL);
set_string_var(REALNAME_VAR, realname);
set_string_var(STATUS_FLAG_VAR, DEFAULT_STATUS_FLAG);
set_string_var(STATUS_FORMAT_VAR, DEFAULT_STATUS_FORMAT);
set_string_var(STATUS_FORMAT1_VAR, DEFAULT_STATUS_FORMAT1);
set_string_var(STATUS_FORMAT2_VAR, DEFAULT_STATUS_FORMAT2);
set_string_var(STATUS_FORMAT3_VAR, DEFAULT_STATUS_FORMAT3);
set_string_var(STATUS_DCCCOUNT_VAR, DEFAULT_STATUS_DCCCOUNT);
set_string_var(STATUS_CDCCCOUNT_VAR, DEFAULT_STATUS_CDCCCOUNT);
set_string_var(STATUS_AWAY_VAR, DEFAULT_STATUS_AWAY);
set_string_var(STATUS_CHANNEL_VAR, DEFAULT_STATUS_CHANNEL);
set_string_var(STATUS_CHANOP_VAR, DEFAULT_STATUS_CHANOP);
set_string_var(STATUS_CLOCK_VAR, DEFAULT_STATUS_CLOCK);
set_string_var(STATUS_CPU_SAVER_VAR, DEFAULT_STATUS_CPU_SAVER);
set_string_var(STATUS_HALFOP_VAR, DEFAULT_STATUS_HALFOP);
set_string_var(STATUS_HOLD_VAR, DEFAULT_STATUS_HOLD);
set_string_var(STATUS_HOLD_LINES_VAR, DEFAULT_STATUS_HOLD_LINES);
set_string_var(STATUS_INSERT_VAR, DEFAULT_STATUS_INSERT);
set_string_var(STATUS_LAG_VAR, DEFAULT_STATUS_LAG);
set_string_var(STATUS_MAIL_VAR, DEFAULT_STATUS_MAIL);
set_string_var(STATUS_MODE_VAR, DEFAULT_STATUS_MODE);
set_string_var(STATUS_MSGCOUNT_VAR, DEFAULT_STATUS_MSGCOUNT);
set_string_var(STATUS_OPER_VAR, DEFAULT_STATUS_OPER);
set_string_var(STATUS_VOICE_VAR, DEFAULT_STATUS_VOICE);
set_string_var(STATUS_NICK_VAR, DEFAULT_STATUS_NICK);
set_string_var(STATUS_NOTIFY_VAR, DEFAULT_STATUS_NOTIFY);
set_string_var(STATUS_OPER_KILLS_VAR, DEFAULT_STATUS_OPER_KILLS);
set_string_var(STATUS_OVERWRITE_VAR, DEFAULT_STATUS_OVERWRITE);
set_string_var(STATUS_QUERY_VAR, DEFAULT_STATUS_QUERY);
set_string_var(STATUS_SERVER_VAR, DEFAULT_STATUS_SERVER);
set_string_var(STATUS_TOPIC_VAR, DEFAULT_STATUS_TOPIC);
set_string_var(STATUS_UMODE_VAR, DEFAULT_STATUS_UMODE);
set_string_var(STATUS_USERS_VAR, DEFAULT_STATUS_USERS);
set_string_var(STATUS_USER0_VAR, DEFAULT_STATUS_USER);
set_string_var(STATUS_USER1_VAR, DEFAULT_STATUS_USER1);
set_string_var(STATUS_USER2_VAR, DEFAULT_STATUS_USER2);
set_string_var(STATUS_USER3_VAR, DEFAULT_STATUS_USER3);
set_string_var(STATUS_USER4_VAR, DEFAULT_STATUS_USER4);
set_string_var(STATUS_USER5_VAR, DEFAULT_STATUS_USER5);
set_string_var(STATUS_USER6_VAR, DEFAULT_STATUS_USER6);
set_string_var(STATUS_USER7_VAR, DEFAULT_STATUS_USER7);
set_string_var(STATUS_USER8_VAR, DEFAULT_STATUS_USER8);
set_string_var(STATUS_USER9_VAR, DEFAULT_STATUS_USER9);
set_string_var(STATUS_USER10_VAR, DEFAULT_STATUS_USER10);
set_string_var(STATUS_USER11_VAR, DEFAULT_STATUS_USER11);
set_string_var(STATUS_USER12_VAR, DEFAULT_STATUS_USER12);
set_string_var(STATUS_USER13_VAR, DEFAULT_STATUS_USER13);
set_string_var(STATUS_USER14_VAR, DEFAULT_STATUS_USER14);
set_string_var(STATUS_USER15_VAR, DEFAULT_STATUS_USER15);
set_string_var(STATUS_USER16_VAR, DEFAULT_STATUS_USER16);
set_string_var(STATUS_USER17_VAR, DEFAULT_STATUS_USER17);
set_string_var(STATUS_USER18_VAR, DEFAULT_STATUS_USER18);
set_string_var(STATUS_USER19_VAR, DEFAULT_STATUS_USER19);
set_string_var(STATUS_USER20_VAR, DEFAULT_STATUS_USER20);
set_string_var(STATUS_USER21_VAR, DEFAULT_STATUS_USER21);
set_string_var(STATUS_USER22_VAR, DEFAULT_STATUS_USER22);
set_string_var(STATUS_USER23_VAR, DEFAULT_STATUS_USER23);
set_string_var(STATUS_USER24_VAR, DEFAULT_STATUS_USER24);
set_string_var(STATUS_USER25_VAR, DEFAULT_STATUS_USER25);
set_string_var(STATUS_USER26_VAR, DEFAULT_STATUS_USER26);
set_string_var(STATUS_USER27_VAR, DEFAULT_STATUS_USER27);
set_string_var(STATUS_USER28_VAR, DEFAULT_STATUS_USER28);
set_string_var(STATUS_USER29_VAR, DEFAULT_STATUS_USER29);
set_string_var(STATUS_USER30_VAR, DEFAULT_STATUS_USER30);
set_string_var(STATUS_USER31_VAR, DEFAULT_STATUS_USER31);
set_string_var(STATUS_USER32_VAR, DEFAULT_STATUS_USER32);
set_string_var(STATUS_USER33_VAR, DEFAULT_STATUS_USER33);
set_string_var(STATUS_USER34_VAR, DEFAULT_STATUS_USER34);
set_string_var(STATUS_USER35_VAR, DEFAULT_STATUS_USER35);
set_string_var(STATUS_USER36_VAR, DEFAULT_STATUS_USER36);
set_string_var(STATUS_USER37_VAR, DEFAULT_STATUS_USER37);
set_string_var(STATUS_USER38_VAR, DEFAULT_STATUS_USER38);
set_string_var(STATUS_USER39_VAR, DEFAULT_STATUS_USER39);
set_string_var(STATUS_WINDOW_VAR, DEFAULT_STATUS_WINDOW);
set_string_var(STATUS_SCROLLBACK_VAR, DEFAULT_STATUS_SCROLLBACK);
set_string_var(TIMESTAMP_STRING_VAR, DEFAULT_TIMESTAMP_STR);
set_string_var(USERINFO_VAR, DEFAULT_USERINFO);
set_string_var(USERMODE_VAR, !send_umode ? DEFAULT_USERMODE : send_umode);
set_user_mode(current_window, !send_umode? DEFAULT_USERMODE : send_umode, 0);
set_beep_on_msg(current_window, DEFAULT_BEEP_ON_MSG, 0);
set_var_value(SWATCH_VAR, DEFAULT_SWATCH, NULL);
set_string_var(CLIENTINFO_VAR, IRCII_COMMENT);
set_string_var(FAKE_SPLIT_PATS_VAR, "*fuck* *shit* *suck* *dick* *penis* *cunt* *haha* *fake* *split* *hehe* *bogus* *yawn* *leet* *blow* *screw* *dumb* *fbi* *l33t* *gov");
set_string_var(CHANMODE_VAR, DEFAULT_CHANMODE);
set_string_var(CDCC_PROMPT_VAR, "%GC%gDCC");
set_string_var(DEFAULT_MENU_VAR, "none");
set_string_var(DEFAULT_FONT_VAR, DEFAULT_FONT);
set_string_var(SERVER_PROMPT_VAR, DEFAULT_SERVER_PROMPT);
set_string_var(BOT_LOGFILE_VAR, "tcl.log");
s = m_strdup(irc_lib);
malloc_strcat(&s, "/help");
set_string_var(HELP_PATH_VAR, s);
new_free(&s);
#ifdef WANT_CD
set_cd_device(current_window, "/dev/cdrom", 0);
#endif
set_string_var(OPER_MODES_VAR, DEFAULT_OPERMODE);
set_string_var(MANGLE_INBOUND_VAR, NULL);
set_string_var(MANGLE_OUTBOUND_VAR, NULL);
set_string_var(MANGLE_LOGFILES_VAR, NULL);
set_mangle_operlog(current_window, "ALL", 0);
set_string_var(NEW_SERVER_LASTLOG_LEVEL_VAR, DEFAULT_NEW_SERVER_LASTLOG_LEVEL);
set_lastlog_size(current_window, NULL, irc_variable[LASTLOG_VAR].integer);
set_history_size(current_window, NULL, irc_variable[HISTORY_VAR].integer);
set_highlight_char(current_window, irc_variable[HIGHLIGHT_CHAR_VAR].string, 0);
set_lastlog_level(current_window, irc_variable[LASTLOG_LEVEL_VAR].string, 0);
set_notify_level(current_window, irc_variable[NOTIFY_LEVEL_VAR].string, 0);
set_msglog_level(current_window, irc_variable[MSGLOG_LEVEL_VAR].string, 0);
#ifdef TRANSLATE
set_string_var(TRANSLATION_VAR, "LATIN1");
set_translation(current_window, "LATIN1", 0);
#endif
create_fsets(current_window, get_int_var(DISPLAY_ANSI_VAR));
set_input_prompt(current_window, DEFAULT_INPUT_PROMPT, 0);
if (current_window->wset)
remove_wsets_for_window(current_window);
current_window->wset = create_wsets_for_window(current_window);
build_status(current_window, NULL, 0);
window_display = old_display;
}
BUILT_IN_COMMAND(init_window_vars)
{
if (current_window->wset)
remove_wsets_for_window(current_window);
current_window->wset = create_wsets_for_window(current_window);
update_all_windows();
build_status(current_window, NULL, 0);
update_all_status(current_window, NULL, 0);
}
BUILT_IN_COMMAND(init_vars)
{
init_variables();
init_window_vars(NULL, NULL, NULL, NULL);
}
/*
* do_boolean: just a handy thing. Returns 1 if the str is not ON, OFF, or
* TOGGLE
*/
int do_boolean(char *str, int *value)
{
upper(str);
if (strcmp(str, var_settings[ON]) == 0)
*value = 1;
else if (strcmp(str, var_settings[OFF]) == 0)
*value = 0;
else if (strcmp(str, "TOGGLE") == 0)
{
if (*value)
*value = 0;
else
*value = 1;
}
else
return (1);
return (0);
}
/*
* set_var_value: Given the variable structure and the string representation
* of the value, this sets the value in the most verbose and error checking
* of manors. It displays the results of the set and executes the function
* defined in the var structure
*/
void set_var_value(int var_index, char *value, IrcVariableDll *dll)
{
char *rest;
IrcVariable *var;
int old;
#ifdef WANT_DLL
if (dll)
{
var = (IrcVariable *) new_malloc(sizeof(IrcVariable));
var->type = dll->type;
var->string = dll->string;
var->integer = dll->integer;
var->int_flags = dll->int_flags;
var->flags = dll->flags;
var->name = dll->name;
var->func = dll->func;
}
else
#endif
var = &(irc_variable[var_index]);
switch (var->type)
{
case BOOL_TYPE_VAR:
if (value && *value && (value = next_arg(value, &rest)))
{
old = var->integer;
if (do_boolean(value, &(var->integer)))
{
say("Value must be either ON, OFF, or TOGGLE");
break;
}
if (!(var->int_flags & VIF_CHANGED))
{
if (old != var->integer)
var->int_flags |= VIF_CHANGED;
}
if (loading_global)
var->int_flags |= VIF_GLOBAL;
if (var->func)
(var->func) (current_window, NULL, var->integer);
say("Value of %s set to %s", var->name,
var->integer ? var_settings[ON]
: var_settings[OFF]);
}
else
put_it("%s", convert_output_format(fget_string_var(FORMAT_SET_FSET), "%s %s", var->name, var->integer?var_settings[ON] : var_settings[OFF]));
break;
case CHAR_TYPE_VAR:
if (!value)
{
if (!(var->int_flags & VIF_CHANGED))
{
if (var->integer)
var->int_flags |= VIF_CHANGED;
}
if (loading_global)
var->int_flags |= VIF_GLOBAL;
var->integer = ' ';
if (var->func)
(var->func) (current_window, NULL, var->integer);
say("Value of %s set to '%c'", var->name, var->integer);
}
else if (value && *value && (value = next_arg(value, &rest)))
{
if (strlen(value) > 1)
say("Value of %s must be a single character",
var->name);
else
{
if (!(var->int_flags & VIF_CHANGED))
{
if (var->integer != *value)
var->int_flags |= VIF_CHANGED;
}
if (loading_global)
var->int_flags |= VIF_GLOBAL;
var->integer = *value;
if (var->func)
(var->func) (current_window, NULL, var->integer);
say("Value of %s set to '%c'", var->name,
var->integer);
}
}
else
put_it("%s", convert_output_format(fget_string_var(FORMAT_SET_FSET), "%s %c", var->name, var->integer));
break;
case INT_TYPE_VAR:
if (value && *value && (value = next_arg(value, &rest)))
{
int val;
if (!is_number(value))
{
say("Value of %s must be numeric!", var->name);
break;
}
if ((val = my_atol(value)) < 0)
{
say("Value of %s must be greater than 0", var->name);
break;
}
if (!(var->int_flags & VIF_CHANGED))
{
if (var->integer != val)
var->int_flags |= VIF_CHANGED;
}
if (loading_global)
var->int_flags |= VIF_GLOBAL;
var->integer = val;
if (var->func)
(var->func) (current_window, NULL, var->integer);
say("Value of %s set to %d", var->name, var->integer);
}
else
put_it("%s", convert_output_format(fget_string_var(FORMAT_SET_FSET), "%s %d", var->name, var->integer));
break;
case STR_TYPE_VAR:
if (value)
{
if (*value)
{
char *temp = NULL;
if (var->flags & VF_EXPAND_PATH)
{
temp = expand_twiddle(value);
if (temp)
value = temp;
else
say("SET: no such user");
}
if ((!var->int_flags & VIF_CHANGED))
{
if ((var->string && ! value) ||
(! var->string && value) ||
my_stricmp(var->string, value))
var->int_flags |= VIF_CHANGED;
}
if (loading_global)
var->int_flags |= VIF_GLOBAL;
malloc_strcpy(&(var->string), value);
if (temp)
new_free(&temp);
}
else
{
put_it("%s", convert_output_format(fget_string_var(var->string?FORMAT_SET_FSET:FORMAT_SET_NOVALUE_FSET), "%s %s", var->name, var->string));
#ifdef WANT_DLL
goto got_dll;
#else
return;
#endif
}
}
else
new_free(&(var->string));
if (var->func && !(var->int_flags & VIF_PENDING))
{
var->int_flags |= VIF_PENDING;
(var->func) (current_window, var->string, 0);
var->int_flags &= ~VIF_PENDING;
}
say("Value of %s set to %s", var->name, var->string ?
var->string : "<EMPTY>");
break;
}
#ifdef WANT_DLL
got_dll:
if (dll)
{
dll->integer = var->integer;
if (var->string)
dll->string = m_strdup(var->string);
else
dll->string = NULL;
new_free(&var->string);
new_free((char **)&var);
}
#endif
}
extern AliasStack1 *set_stack;
void do_stack_set(int type, char *args)
{
AliasStack1 *aptr = set_stack;
AliasStack1 **aptrptr = &set_stack;
if (!*aptrptr && (type == STACK_POP || type == STACK_LIST))
{
say("Set stack is empty!");
return;
}
if (STACK_PUSH == type)
{
enum VAR_TYPES var_index;
int cnt = 0;
char *copy;
copy = LOCAL_COPY(args);
/* Dont need to unstub it, we're not actually using it. */
upper(copy);
find_fixed_array_item(irc_variable, sizeof(IrcVariable), NUMBER_OF_VARIABLES, copy, &cnt, (int *)&var_index);
if (cnt < 0)
{
aptr = (AliasStack1 *)new_malloc(sizeof(AliasStack1));
aptr->next = aptrptr ? *aptrptr : NULL;
*aptrptr = aptr;
aptr->set = (IrcVariable *) new_malloc(sizeof(IrcVariable));
memcpy(aptr->set, &irc_variable[var_index], sizeof(IrcVariable));
aptr->name = m_strdup(irc_variable[var_index].name);
if (irc_variable[var_index].string)
aptr->set->string = m_strdup(irc_variable[var_index].string);
aptr->var_index = var_index;
}
else if ((cnt == 0))
say("No such Set [%s]", args);
else
say("Set is ambiguous %s", args);
return;
}
if (STACK_POP == type)
{
AliasStack1 *prev = NULL;
for (aptr = *aptrptr; aptr; prev = aptr, aptr = aptr->next)
{
/* have we found it on the stack? */
if (!my_stricmp(args, aptr->name))
{
/* remove it from the list */
if (prev == NULL)
*aptrptr = aptr->next;
else
prev->next = aptr->next;
new_free(&(irc_variable[aptr->var_index].string));
memcpy(&irc_variable[aptr->var_index], aptr->set, sizeof(IrcVariable));
/* free it */
new_free((char **)&aptr->name);
new_free((char **)&aptr->set);
new_free((char **)&aptr);
return;
}
}
say("%s is not on the %s stack!", args, "Set");
return;
}
if (STACK_LIST == type)
{
AliasStack1 *prev = NULL;
for (aptr = *aptrptr; aptr; prev = aptr, aptr = aptr->next)
{
switch(aptr->set->type)
{
case BOOL_TYPE_VAR:
say("Variable [%s] = %s", aptr->set->name, on_off(aptr->set->integer));
break;
case INT_TYPE_VAR:
say("Variable [%s] = %d", aptr->set->name, aptr->set->integer);
break;
case CHAR_TYPE_VAR:
say("Variable [%s] = %c", aptr->set->name, aptr->set->integer);
break;
case STR_TYPE_VAR:
say("Variable [%s] = %s", aptr->set->name, aptr->set->string?aptr->set->string:"<Empty String>");
break;
default:
bitchsay("Error in do_stack_set: unknown set type");
}
}
return;
}
say("Unknown STACK type ??");
}
/*
* set_variable: The SET command sets one of the irc variables. The args
* should consist of "variable-name setting", where variable name can be
* partial, but non-ambbiguous, and setting depends on the variable being set
*/
BUILT_IN_COMMAND(setcmd)
{
char *var;
int cnt = 0;
int hook = 0;
enum VAR_TYPES var_index = 0;
IrcVariableDll *dll = NULL;
if ((var = next_arg(args, &args)) != NULL)
{
if (*var == '-')
{
var++;
args = NULL;
}
#ifdef WANT_DLL
if (dll_variable)
{
int dll_cnt = 0;
if ((dll = (IrcVariableDll *) find_in_list_ext((List **)&dll_variable, var, 0, list_strnicmp)))
{
IrcVariableDll *tmp;
for (tmp = dll; tmp; tmp = tmp->next)
{
if (!my_strnicmp(tmp->name, var, strlen(var)))
dll_cnt++;
}
if (my_stricmp(dll->name, var))
{
cnt = dll_cnt;
if (cnt == 1)
cnt = -1;
}
else
cnt = -1;
}
}
if (cnt == 0)
#endif
{
upper(var);
find_fixed_array_item (irc_variable, sizeof(IrcVariable), NUMBER_OF_VARIABLES, var, &cnt, (int *)&var_index);
}
if (cnt == 1)
cnt = -1;
if ((cnt >= 0) || (!dll && !(irc_variable[var_index].int_flags & VIF_PENDING)) || (dll && !(dll->int_flags & VIF_PENDING)))
hook = 1;
if (cnt < 0)
{
if (dll)
dll->int_flags |= VIF_PENDING;
else
irc_variable[var_index].int_flags |= VIF_PENDING;
}
if (hook)
{
hook = do_hook(SET_LIST, "%s %s", var, args ? args : "<unset>"/*empty_string*/);
if (hook && (cnt < 0))
{
hook = do_hook(SET_LIST, "%s %s",
dll? dll->name : irc_variable[var_index].name,
args ? args : "<unset>" /*empty_string*/);
}
}
if (cnt < 0)
{
if (dll)
dll->int_flags &= ~VIF_PENDING;
else
irc_variable[var_index].int_flags &= ~VIF_PENDING;
}
if (hook)
{
if (cnt < 0)
set_var_value(var_index, args, dll);
else if (cnt == 0)
{
if (!dll)
{
if (do_hook(SET_LIST, "set-error No such variable \"%s\"", var))
say("No such variable \"%s\"", var);
}
else
set_var_value(-1, args, dll);
}
else
{
if (do_hook(SET_LIST, "set-error %s is ambiguous", var))
{
say("%s is ambiguous", var);
if (dll)
{
IrcVariableDll *tmp;
for (tmp = dll; tmp; tmp = tmp->next)
{
if (!my_strnicmp(tmp->name, var, strlen(var)))
set_var_value(-1, empty_string, tmp);
else
break;
}
}
else
{
for (cnt += var_index; var_index < cnt; var_index++)
set_var_value(var_index, empty_string, dll);
}
}
}
}
}
else
{
int var_index;
for (var_index = 0; var_index < NUMBER_OF_VARIABLES; var_index++)
set_var_value(var_index, empty_string, NULL);
#ifdef WANT_DLL
for (dll = dll_variable; dll; dll = dll->next)
set_var_value(-1, empty_string, dll);
#endif
}
}
/*
* save_variables: this writes all of the IRCII variables to the given FILE
* pointer in such a way that they can be loaded in using LOAD or the -l switch
*/
void save_variables(FILE *fp, int do_all)
{
IrcVariable *var;
for (var = irc_variable; var->name; var++)
{
if (!(var->int_flags & VIF_CHANGED))
continue;
if ((do_all == 1) || !(var->int_flags & VIF_GLOBAL))
{
if (strcmp(var->name, "DISPLAY") == 0 || strcmp(var->name, "CLIENT_INFORMATION") == 0)
continue;
fprintf(fp, "SET ");
switch (var->type)
{
case BOOL_TYPE_VAR:
fprintf(fp, "%s %s\n", var->name, var->integer ?
var_settings[ON] : var_settings[OFF]);
break;
case CHAR_TYPE_VAR:
fprintf(fp, "%s %c\n", var->name, var->integer);
break;
case INT_TYPE_VAR:
fprintf(fp, "%s %u\n", var->name, var->integer);
break;
case STR_TYPE_VAR:
if (var->string)
fprintf(fp, "%s %s\n", var->name,
var->string);
else
fprintf(fp, "-%s\n", var->name);
break;
}
}
}
}
void savebitchx_variables(FILE *fp)
{
IrcVariable *var;
int count = 0;
for (var = irc_variable; var->name; var++)
{
if (!(var->flags & VIF_BITCHX))
continue;
count++;
fprintf(fp, "SET ");
switch (var->type)
{
case BOOL_TYPE_VAR:
fprintf(fp, "%s %s\n", var->name, var->integer ?
var_settings[ON] : var_settings[OFF]);
break;
case CHAR_TYPE_VAR:
fprintf(fp, "%s %c\n", var->name, var->integer);
break;
case INT_TYPE_VAR:
fprintf(fp, "%s %u\n", var->name, var->integer);
break;
case STR_TYPE_VAR:
if (var->string)
fprintf(fp, "%s %s\n", var->name,
var->string);
else
fprintf(fp, "-%s\n", var->name);
break;
}
}
bitchsay("Saved %d variables", count);
}
char *make_string_var(const char *var_name)
{
int cnt,
msv_index;
char *ret = NULL;
char *copy;
copy = LOCAL_COPY(var_name);
upper(copy);
if ((find_fixed_array_item (irc_variable, sizeof(IrcVariable), NUMBER_OF_VARIABLES, copy, &cnt, &msv_index) == NULL))
return NULL;
if (cnt >= 0)
return NULL;
switch (irc_variable[msv_index].type)
{
case STR_TYPE_VAR:
ret = m_strdup(irc_variable[msv_index].string);
break;
case INT_TYPE_VAR:
ret = m_strdup(ltoa(irc_variable[msv_index].integer));
break;
case BOOL_TYPE_VAR:
ret = m_strdup(var_settings[irc_variable[msv_index].integer]);
break;
case CHAR_TYPE_VAR:
ret = m_dupchar(irc_variable[msv_index].integer);
break;
}
return ret;
}
IrcVariable *get_var_address(char *var_name)
{
int cnt,
msv_index;
char *copy;
copy = LOCAL_COPY(var_name);
upper(copy);
if ((find_fixed_array_item (irc_variable, sizeof(IrcVariable), NUMBER_OF_VARIABLES, copy, &cnt, &msv_index) == NULL))
return NULL;
if (cnt >= 0)
return NULL;
return &irc_variable[msv_index];
}
/* exec_warning: a warning message displayed whenever EXEC_PROTECTION is turned off. */
static void exec_warning(Window *win, char *unused, int value)
{
if (value == OFF)
{
bitchsay("Warning! You have turned EXEC_PROTECTION off");
bitchsay("Please read the /HELP SET EXEC_PROTECTION documentation");
}
}
/* returns the size of the character set */
int charset_size(void)
{
return get_int_var(EIGHT_BIT_CHARACTERS_VAR) ? 256 : 128;
}
static void eight_bit_characters(Window *win, char *unused, int value)
{
if (value == ON && !term_eight_bit())
say("Warning! Your terminal says it does not support eight bit characters");
set_term_eight_bit(value);
}
static void set_realname(Window *win, char *value, int unused)
{
if (value)
strlcpy(realname, value, sizeof realname);
else
strlcpy(realname, empty_string, sizeof realname);
}
void reinit_autoresponse(Window *win, char *value, int unused)
{
int old_window = window_display;
window_display = 1;
if (value)
malloc_strcpy(&auto_str, value);
else
bitchsay("Auto Response is set to - %s", auto_str);
window_display = old_window;
}
static void set_numeric_string(Window *win, char *value, int unused)
{
malloc_strcpy(&thing_ansi, value);
}
static void set_user_mode(Window *win, char *value, int unused)
{
malloc_strcpy(&send_umode, value);
}
int old_ov_mode = -1;
#ifdef WANT_OPERVIEW
static void set_ov_mode (Window *win, char *value, int unused)
{
int old_window_display = window_display;
if (!current_window)
return;
window_display = 0;
if (old_ov_mode == -1)
setup_ov_mode(unused ? 0 : 1, 0, -1);
else if (old_ov_mode != unused)
setup_ov_mode(unused ? 0 : 1, 0, -1);
old_ov_mode = unused;
window_display = old_window_display;
}
#endif
static void set_away_time(Window *win, char *unused, int value)
{
if (value == 0)
set_int_var(AUTO_AWAY_TIME_VAR, 0);
else if ((value / 60) == 0)
set_int_var(AUTO_AWAY_TIME_VAR, value * 60);
else if (value < 60 * 10)
set_int_var(AUTO_AWAY_TIME_VAR, 60 * 10);
else
set_int_var(AUTO_AWAY_TIME_VAR, value);
}
void clear_sets(void)
{
int i = 0;
for(i = 0; irc_variable[i].name; i++)
new_free(&irc_variable->string);
}
static void reinit_screen(Window *win, char *unused, int value)
{
set_input_prompt(current_window, NULL, 0);
set_input_prompt(current_window, get_string_var(INPUT_PROMPT_VAR), 0);
update_all_windows();
update_all_status(current_window, NULL, 0);
update_input(UPDATE_ALL);
}
void reinit_status(Window *win, char *unused, int value)
{
update_all_windows();
update_all_status(current_window, NULL, 0);
}
void toggle_reverse_status(Window *win, char *unused, int value)
{
if (!value)
set_int_var(REVERSE_STATUS_VAR, 1);
else
set_int_var(REVERSE_STATUS_VAR, 0);
create_fsets(win, value);
set_string_var(SHOW_NUMERICS_STR_VAR, value ? DEFAULT_SHOW_NUMERICS_STR : NO_NUMERICS_STR);
set_numeric_string(current_window, value ? DEFAULT_SHOW_NUMERICS_STR : NO_NUMERICS_STR, 0);
reinit_status(win, unused, value);
}
#ifdef WANT_TCL
char *ircii_rem_str(ClientData *cd, Tcl_Interp *intp, char *name1, char *name2, int flags)
{
char *s;
IrcVariable *n;
n = (IrcVariable *)cd;
if ((s = Tcl_GetVar(intp, name1, TCL_GLOBAL_ONLY)))
{
Tcl_UnlinkVar(intp, name1);
if (s && *s)
malloc_strcpy(&n->string, s);
else
new_free(&n->string);
Tcl_LinkVar(intp, name1, (char *)&n->string, TCL_LINK_STRING);
}
return NULL;
}
void add_tcl_vars(void)
{
char varname[80];
int i = 0;
for(i = 0; irc_variable[i].name; i++)
{
int type_of = -1;
switch(irc_variable[i].type)
{
case INT_TYPE_VAR:
type_of = TCL_LINK_INT;
break;
case STR_TYPE_VAR:
type_of = TCL_LINK_STRING;
break;
case BOOL_TYPE_VAR:
type_of = TCL_LINK_BOOLEAN;
break;
default:
continue;
}
strcpy(varname, irc_variable[i].name);
lower(varname);
Tcl_LinkVar(tcl_interp, varname,
(irc_variable[i].type == STR_TYPE_VAR) ?
(char *)&irc_variable[i].string :
(char *)&irc_variable[i].integer,
type_of);
if (irc_variable[i].type == STR_TYPE_VAR)
Tcl_TraceVar(tcl_interp, varname, TCL_TRACE_WRITES,
(Tcl_VarTraceProc *)ircii_rem_str,
(ClientData)&irc_variable[i]);
}
}
#endif
void clear_variables(void)
{
int i;
for(i = 0; irc_variable[i].name; i++)
{
if (irc_variable[i].string)
new_free(&irc_variable[i].string);
}
}
static void set_clock_format (Window *win, char *value, int unused)
{
extern char *time_format; /* XXXX bogus XXXX */
malloc_strcpy(&time_format, value);
update_clock(RESET_TIME);
update_all_status(current_window, NULL, 0);
}
char *get_all_sets(void)
{
int i;
char *ret = NULL;
for (i = 0; irc_variable[i].name; i++)
m_s3cat(&ret, space, irc_variable[i].name);
return ret;
}
char *get_set(char *str)
{
int i;
char *ret = NULL;
if (!str || !*str)
return get_all_sets();
for (i = 0; irc_variable[i].name; i++)
if (wild_match(str, irc_variable[i].name))
m_s3cat(&ret, space, irc_variable[i].name);
return ret ? ret : m_strdup(empty_string);
}
static void set_dcc_timeout (Window *win, char *unused, int value)
{
extern time_t dcc_timeout;
if (value == 0)
dcc_timeout = (time_t) -1;
else
dcc_timeout = value;
}
static void set_use_socks(Window *win, char *value, int unused)
{
extern int use_socks;
if (value && *value)
use_socks = 1;
else
use_socks = 0;
}
int parse_mangle (char *value, int nvalue, char **rv)
{
char *str1, *str2;
char *copy;
char *nv = NULL;
if (rv)
*rv = NULL;
if (!value)
return 0;
copy = LOCAL_COPY(value);
while ((str1 = new_next_arg(copy, &copy)))
{
while (*str1 && (str2 = next_in_comma_list(str1, &str1)))
{
if (!my_strnicmp(str2, "ALL", 3))
nvalue = (0x7FFFFFFF - (MANGLE_ESCAPES));
else if (!my_strnicmp(str2, "-ALL", 4))
nvalue = 0;
else if (!my_strnicmp(str2, "ALL_OFF", 4))
nvalue |= STRIP_ALL_OFF;
else if (!my_strnicmp(str2, "-ALL_OFF", 5))
nvalue &= ~(STRIP_ALL_OFF);
else if (!my_strnicmp(str2, "ANSI", 2))
nvalue |= MANGLE_ANSI_CODES;
else if (!my_strnicmp(str2, "-ANSI", 3))
nvalue &= ~(MANGLE_ANSI_CODES);
else if (!my_strnicmp(str2, "BLINK", 2))
nvalue |= STRIP_BLINK;
else if (!my_strnicmp(str2, "-BLINK", 3))
nvalue &= ~(STRIP_BLINK);
else if (!my_strnicmp(str2, "BOLD", 2))
nvalue |= STRIP_BOLD;
else if (!my_strnicmp(str2, "-BOLD", 3))
nvalue &= ~(STRIP_BOLD);
else if (!my_strnicmp(str2, "COLOR", 1))
nvalue |= STRIP_COLOR;
else if (!my_strnicmp(str2, "-COLOR", 2))
nvalue &= ~(STRIP_COLOR);
else if (!my_strnicmp(str2, "ESCAPE", 1))
nvalue |= MANGLE_ESCAPES;
else if (!my_strnicmp(str2, "-ESCAPE", 2))
nvalue &= ~(MANGLE_ESCAPES);
else if (!my_strnicmp(str2, "ND_SPACE", 2))
nvalue |= STRIP_ND_SPACE;
else if (!my_strnicmp(str2, "-ND_SPACE", 3))
nvalue &= ~(STRIP_ND_SPACE);
else if (!my_strnicmp(str2, "NONE", 2))
nvalue = 0;
else if (!my_strnicmp(str2, "REVERSE", 1))
nvalue |= STRIP_REVERSE;
else if (!my_strnicmp(str2, "-REVERSE", 2))
nvalue &= ~(STRIP_REVERSE);
else if (!my_strnicmp(str2, "ROM_CHAR", 1))
nvalue |= STRIP_ROM_CHAR;
else if (!my_strnicmp(str2, "-ROM_CHAR", 2))
nvalue &= ~(STRIP_ROM_CHAR);
else if (!my_strnicmp(str2, "UNDERLINE", 1))
nvalue |= STRIP_UNDERLINE;
else if (!my_strnicmp(str2, "-UNDERLINE", 2))
nvalue &= ~(STRIP_UNDERLINE);
}
}
if (rv)
{
if (nvalue & MANGLE_ESCAPES)
m_s3cat(&nv, comma, "ESCAPE");
if (nvalue & MANGLE_ANSI_CODES)
m_s3cat(&nv, comma, "ANSI");
if (nvalue & STRIP_COLOR)
m_s3cat(&nv, comma, "COLOR");
if (nvalue & STRIP_REVERSE)
m_s3cat(&nv, comma, "REVERSE");
if (nvalue & STRIP_UNDERLINE)
m_s3cat(&nv, comma, "UNDERLINE");
if (nvalue & STRIP_BOLD)
m_s3cat(&nv, comma, "BOLD");
if (nvalue & STRIP_BLINK)
m_s3cat(&nv, comma, "BLINK");
if (nvalue & STRIP_ROM_CHAR)
m_s3cat(&nv, comma, "ROM_CHAR");
if (nvalue & STRIP_ND_SPACE)
m_s3cat(&nv, comma, "ND_SPACE");
if (nvalue & STRIP_ALL_OFF)
m_s3cat(&nv, comma, "ALL_OFF");
*rv = nv;
}
return nvalue;
}
static void set_mangle_inbound (Window *w, char *value, int unused)
{
char *nv = NULL;
inbound_line_mangler = parse_mangle(value, inbound_line_mangler, &nv);
set_string_var(MANGLE_INBOUND_VAR, nv);
new_free(&nv);
}
static void set_mangle_outbound (Window *w, char *value, int unused)
{
char *nv = NULL;
outbound_line_mangler = parse_mangle(value, outbound_line_mangler, &nv);
set_string_var(MANGLE_OUTBOUND_VAR, nv);
new_free(&nv);
}
static void set_mangle_logfiles (Window *w, char *value, int unused)
{
char *nv = NULL;
logfile_line_mangler = parse_mangle(value, logfile_line_mangler, &nv);
set_string_var(MANGLE_LOGFILES_VAR, nv);
if (w)
w->mangler = logfile_line_mangler;
new_free(&nv);
}
static void set_mangle_operlog (Window *w, char *value, int unused)
{
char *nv = NULL;
operlog_line_mangler = parse_mangle(value, operlog_line_mangler, &nv);
set_string_var(MANGLE_OPERLOG_VAR, nv);
new_free(&nv);
}
static void set_nat_address (Window *w, char *value, int unused)
{
char *nv = NULL, *h;
if (value && *value)
{
nv = next_arg(value, &value);
if (isdigit((unsigned char)*nv))
h = nv;
else
h = host_to_ip(nv);
set_string_var(NAT_ADDRESS_VAR, h);
nat_address.s_addr = inet_addr(h);
use_nat_address = 2;
}
else
{
set_string_var(NAT_ADDRESS_VAR, NULL);
use_nat_address = 0;
}
}
#ifdef GUI
IrcVariable *return_irc_var(int nummer)
{
return &irc_variable[nummer];
}
#endif