Esempio n. 1
0
void add_mode(ChannelList *chan, char *mode, int plus, char *nick, char *reason, int max_modes)
{
	char buffer[BIG_BUFFER_SIZE+1];
	
	if (mode_len >= (IRCD_BUFFER_SIZE-100))
	{
		flush_mode(chan);
		push_len = 0;
	}

	if (reason)
	{
		sprintf(buffer, "KICK %s %s :%s\r\n", chan->channel, nick, reason);
		push_len = strlen(buffer);
		add_mode_buffer(buffer, push_len);
	}
	else
	{
		mode_str_len++;
		strcat(plus_mode, plus ? "+" : "-");
		malloc_strcat(&mode_str, mode);
		m_s3cat(&user, space, nick);
		if (mode_str_len >= max_modes)
		{
			sprintf(buffer, "MODE %s %s%s %s\r\n", chan->channel, plus_mode, mode_str, user);
			push_len = strlen(buffer);
			add_mode_buffer(buffer, push_len);
			new_free(&mode_str);
			new_free(&user);
			memset(plus_mode, 0, sizeof(plus_mode));
			mode_str_len = push_len = 0;
		}
	}
}
Esempio n. 2
0
void nick_completion(char dumb, char *dumber)
{
    char *q, *line;
    int i = -1;
    char *nick = NULL, *tmp;

    q = line = m_strdup(&current_screen->input_buffer[MIN_POS]);
    if (in_completion == STATE_NORMAL) {
	i = word_count(line);
	nick = extract_words(line, i - 1, i);
    }
    if (nick)
	line[strlen(line) - strlen(nick)] = 0;
    else
	*line = 0;
    if ((tmp = getchannick(input_lastmsg, nick && *nick ? nick : NULL))) {
	malloc_strcat(&q, tmp);
	set_input(q);
	update_input(UPDATE_ALL);
	malloc_strcpy(&input_lastmsg, tmp);
	in_completion = STATE_COMPLETE;
    }
    new_free(&q);
    new_free(&nick);
}
Esempio n. 3
0
File: if.c Progetto: choppsv1/ircii
void
foreach(u_char *command, u_char *args, u_char *subargs)
{
	u_char	*struc = NULL,
		*ptr,
		*body = NULL,
		*var = NULL;
	u_char	**sublist;
	int	total;
	int	i;
	int	slen;

	if ((ptr = new_next_arg(args, &args)) == NULL)
	{
		yell("FOREACH: missing structure expression");
		return;
	}
	malloc_strcpy(&struc, ptr);
	malloc_strcat(&struc, UP("."));
	upper(struc);
	if ((var = next_arg(args, &args)) == NULL)
	{
		new_free(&struc);
		yell("FOREACH: missing variable");
		return;
	}
	while (isspace(*args))
		args++;
	if ((body = next_expr(&args, '{')) == NULL)	/* } */
	{
		new_free(&struc);
		yell("FOREACH: missing statement");
		return;
	}
	sublist = match_alias(struc, &total, VAR_ALIAS);
	slen = my_strlen(struc);
	for (i = 0; i < total; i++)
	{
		unsigned	display;

		display = set_display_off();
		add_alias(VAR_ALIAS, var, sublist[i]+slen);
		set_display(display);
		parse_line(NULL, body, subargs ?
		    subargs : empty_string(), 0, 0, 0);
		new_free(&sublist[i]);
	}
	new_free(&sublist);
	new_free(&struc);
}
Esempio n. 4
0
void add_mode_buffer( char *buffer, int mode_str_len)
{
	
	malloc_strcat(&mode_buf, buffer);
	mode_len += push_len;
}
Esempio n. 5
0
/*
 * set_translation:  Called when the TRANSLATION variable is SET.
 * Attempts to load a new translation table.
 */
void set_translation(Window *win, char *tablename, int unused)
{
	FILE	*table;
	unsigned char	temp_table[512];
	char	*filename = NULL, *s;
	int	inputs[8];
	int	j,
		c = 0;
	char	buffer[BIG_BUFFER_SIZE + 1];

	if (!tablename)
	{
		translation = 0;
		return;
	}
	for (s = tablename; *s; s++)
	{
		if (isspace((unsigned char)*s))
		{
			*s = '\0';
			break;
		}			
	}
	
	tablename = upper(tablename);

	/* Check for transparent mode; ISO-8859/1, Latin-1 */
	if (!strcmp("LATIN_1", tablename))
	{
		translation = 0;
		return;
	}

	/* Else try loading the translation table from disk. */
	malloc_strcpy(&filename, TRANSLATION_PATH "/");
	malloc_strcat(&filename, tablename);
	if ( !(table = uzfopen(&filename, ".", 0)) )
	{
		say("Cannot open character table definition \"%s\" !",
			tablename);
		set_string_var(TRANSLATION_VAR, NULL);
		new_free(&filename);
		return;
	}

	/* Any problems in the translation tables between hosts are
	 * almost certain to be caused here.
	 * many scanf implementations do not work as defined. In particular,
	 * scanf should ignore white space including new lines (many stop
	 * at the new line character, hence the fgets and sscanf workaround),
	 * many fail to read 0xab as a hexadecimal number (failing on the
	 * x) despite the 0x being defined as optionally existing on input,
	 * and others zero out all the output variables if there is trailing
	 * non white space in the format string which doesn't appear on the
	 * input. Overall, the standard I/O libraries have a tendancy not
	 * to be very standard.
	 */

	while (fgets(buffer, 80, table))
	{
		sscanf(buffer, "0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x",
		    inputs+0, inputs+1, inputs+2, inputs+3,
		    inputs+4, inputs+5, inputs+6, inputs+7);
		for (j = 0; j<8; j++)
			temp_table[c++] = (unsigned char) inputs[j];
	}
	fclose(table);
	new_free(&filename);
	if (c == 512)
	{
		for (c = 0; c <= 255; c++)
		{
			transToClient[c] = temp_table[c];
			transFromClient[c] = temp_table[c | 256];
		}
#if 0
		for (c = 0; c <= 255; c++)
			transToClient[c] = c;
#endif

		translation = 1;
	}
	else
	{
		say("Error loading translation table \"%s\" !", tablename);
		set_string_var(TRANSLATION_VAR, NULL);
	}
}
Esempio n. 6
0
void sort_scan (IrcCommandDll *this_not_used, char *called, char *args, char *subargs)
{
	int numberofpeople = 0, server = -1;
	char *channel = NULL, *qbert = NULL;
	ChannelList *chanlist;
	NickList *anick, *ops = NULL, *nops = NULL, *voice = NULL, *tmp = NULL;
	
	if (!(chanlist = prepare_command (&server, channel, NO_OP)) )
		return;

	for (anick = next_nicklist (chanlist, NULL); anick; anick = next_nicklist (chanlist, anick))
	{
		if (!nick_isop(anick) && !nick_isvoice(anick))
		{
			tmp = (NickList *)new_malloc (sizeof (NickList));
			memcpy (tmp, anick, sizeof (NickList));
			tmp -> next = NULL;
			add_to_list ((List **)&nops, (List *)tmp);
		}
		else if (nick_isvoice(anick) && !nick_isop(anick))
		{
			tmp = (NickList *)new_malloc (sizeof (NickList));
			memcpy (tmp, anick, sizeof (NickList));
			tmp -> next = NULL;
			add_to_list ((List **)&voice, (List *)tmp);
		}
		else if (nick_isop(anick))
		{
			tmp = (NickList *)new_malloc (sizeof (NickList));
			memcpy (tmp, anick, sizeof (NickList));
			tmp -> next = NULL;
			add_to_list ((List **)&ops, (List *)tmp);
		}
		numberofpeople++;
	}

	put_it ("%s", convert_output_format (fget_string_var (FORMAT_NAMES_FSET), "%s %s %d %s", update_clock (GET_TIME), chanlist -> channel, numberofpeople, space));
	
	numberofpeople = 0;
	for (anick = ops; anick; anick = anick -> next)
	{
		malloc_strcat (&qbert, convert_output_format (fget_string_var (FORMAT_NAMES_OPCOLOR_FSET), "@ %s", anick -> nick));
		malloc_strcat (&qbert, space);
		if (numberofpeople++ == 4)
		{
			if (fget_string_var (FORMAT_NAMES_BANNER_FSET))
				put_it ("%s%s", convert_output_format (fget_string_var(FORMAT_NAMES_BANNER_FSET), NULL, NULL), qbert);
			else
				put_it ("%s", qbert);
			new_free (&qbert);
			numberofpeople = 0;
		}
	}
	for (anick = voice; anick; anick = anick -> next)
	{
		malloc_strcat (&qbert, convert_output_format (fget_string_var(FORMAT_NAMES_VOICECOLOR_FSET), "+ %s", anick -> nick));
		malloc_strcat (&qbert, space);
		if (numberofpeople++ == 4)
		{
			if (fget_string_var (FORMAT_NAMES_BANNER_FSET))
				put_it ("%s%s", convert_output_format (fget_string_var(FORMAT_NAMES_BANNER_FSET), NULL, NULL), qbert);
			else
				put_it ("%s", qbert);
			new_free (&qbert);
			numberofpeople = 0;
		}
	}
	for (anick = nops; anick; anick = anick -> next)
	{
		malloc_strcat (&qbert, convert_output_format (fget_string_var(FORMAT_NAMES_NICKCOLOR_FSET), "$ %s", anick -> nick));
		malloc_strcat (&qbert, space);
		if (numberofpeople++ == 4)
		{
			if (fget_string_var (FORMAT_NAMES_BANNER_FSET))
				put_it ("%s%s", convert_output_format (fget_string_var(FORMAT_NAMES_BANNER_FSET), NULL, NULL), qbert);
			else
				put_it ("%s", qbert);
			new_free (&qbert);
			numberofpeople = 0;
		}
	}
	if (numberofpeople && qbert)
	{
		if (fget_string_var (FORMAT_NAMES_BANNER_FSET))
			put_it ("%s%s", convert_output_format (fget_string_var (FORMAT_NAMES_BANNER_FSET), NULL, NULL), qbert);
		else
			put_it ("%s", qbert);
	}
	new_free (&qbert);

	if (fget_string_var (FORMAT_NAMES_FOOTER_FSET))
		put_it ("%s", convert_output_format (fget_string_var (FORMAT_NAMES_FOOTER_FSET), NULL, NULL));
	clear_sorted_nicklist (&ops);
	clear_sorted_nicklist (&nops);
	clear_sorted_nicklist (&voice);
}
Esempio n. 7
0
File: vars.c Progetto: jnbek/TekNap
/*
 * 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;
 	int i;
	char *s;
		
	for (i = 1; i < NUMBER_OF_VARIABLES - 1; i++)
		if (strcmp(irc_variable[i-1].name, irc_variable[i].name) >= 0)
			nappanic("Variable [%d] (%s) is out of order.", i, irc_variable[i].name);

	window_display = 0;

	set_string_var(DEFAULT_EMAIL_VAR, "blah@opennap");
	set_string_var(DEFAULT_SERVER_VAR, "bitchx.dimension6.com");
	if (*password)
		set_string_var(DEFAULT_PASSWORD_VAR, password);
	else
		set_string_var(DEFAULT_PASSWORD_VAR, "blah");
	if (*nickname)
		set_string_var(DEFAULT_NICKNAME_VAR,	nickname);
	else
		set_string_var(DEFAULT_NICKNAME_VAR,	"blah");

	set_string_var(DEFAULT_SPEED_VAR, "?");
	set_string_var(PTEST_CHANGE_PORT_VAR, "8899 0");

	s = m_strdup(irc_lib);
	malloc_strcat(&s, "/help");
	set_string_var(HELP_PATH_VAR, s);
	new_free(&s);
	set_string_var(LOGFILE_VAR, DEFAULT_LOGFILE);

	set_string_var(FORMAT_DIRECTORY_VAR, "%d");
	set_string_var(FORMAT_FILENAME_VAR, "%g4.1L %b %t %f");
	set_string_var(SEARCH_FORMAT_VAR, "%-40f %b %3.1H %t %g4.1L %N %1.3p");
	
	set_string_var(NAMES_NICKCOLOR_VAR, FORMAT_NICKCOLOR);
	set_string_var(DOWNLOAD_DIRECTORY_VAR, DEFAULT_DOWNLOAD_DIRECTORY);
	
	set_string_var(SHOW_NUMERICS_STR_VAR, DEFAULT_SHOW_NUMERICS_STR);
	set_numeric_string(current_window, DEFAULT_SHOW_NUMERICS_STR, 0);

	set_string_var(CMDCHARS_VAR, DEFAULT_CMDCHARS);
	set_string_var(LOGFILE_VAR, DEFAULT_LOGFILE);
	set_string_var(WORD_BREAK_VAR, DEFAULT_WORD_BREAK);

#if defined(__EMX__)
	if ((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 ((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(STATUS_FORMAT1_VAR, DEFAULT_STATUS_FORMAT1);
	set_string_var(STATUS_FORMAT2_VAR, DEFAULT_STATUS_FORMAT2);

	set_string_var(STATUS_CHANNEL_VAR, DEFAULT_STATUS_CHANNEL);
	set_string_var(STATUS_CLOCK_VAR, DEFAULT_STATUS_CLOCK);
	set_string_var(STATUS_CPU_SAVER_VAR, DEFAULT_STATUS_CPU_SAVER);
	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_NICK_VAR, DEFAULT_STATUS_NICK);
	set_string_var(STATUS_NOTIFY_VAR, DEFAULT_STATUS_NOTIFY);
	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_STATS_VAR, DEFAULT_STATUS_STATS);
	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(ILLEGAL_CHARS_VAR, DEFAULT_ILLEGAL_CHARS);
		
	set_beep_on_msg(current_window, DEFAULT_BEEP_ON_MSG, 0);

	set_cd_device(current_window, "/dev/cdrom", 0);

	set_lastlog_size(current_window, NULL, irc_variable[LASTLOG_VAR].integer);
	set_history_size(current_window, NULL, irc_variable[HISTORY_VAR].integer);

	set_lastlog_level(current_window, irc_variable[LASTLOG_LEVEL_VAR].string, 0);

	set_input_prompt(current_window, DEFAULT_INPUT_PROMPT, 0);
	build_status(current_window, NULL, 0);
	window_display = old_display;
}
Esempio n. 8
0
/*
 * set_translation:  Called when the TRANSLATION variable is SET.
 * Attempts to load a new translation table.
 */
void	set_translation (void *stuff)
{
	VARIABLE *v;
	const char *orig;
	FILE	*table;
	unsigned char	temp_table[512];
	char	*filename = (char *) 0;
	int	inputs[8];
	int	j,
		c = 0;
	char	buffer[81];
	char 	*tablename;

	v = (VARIABLE *)stuff;
	orig = v->string;
	if (!orig)
	{
		translation = 0;
		return;
	}
	tablename = LOCAL_COPY(orig);
	upper(tablename);

	/* Check for transparent mode; ISO-8859/1, Latin-1 */
	if (!strcmp("LATIN_1", tablename))
	{
		translation = 0;
		return;
	}

	/* Else try loading the translation table from disk. */
	if (get_string_var(TRANSLATION_PATH_VAR))
		malloc_strcpy(&filename, get_string_var(TRANSLATION_PATH_VAR));
	malloc_strcat(&filename, tablename);
	if ( !(table = fopen(filename, "r")) )
	{
		say("Cannot open character table definition \"%s\" !",
			tablename);
		new_free(&v->string);
		new_free(&filename);
		return;
	}

	/* 
	 * Any problems in the translation tables between hosts are
	 * almost certain to be caused here.
	 * many scanf implementations do not work as defined. In particular,
	 * scanf should ignore white space including new lines (many stop
	 * at the new line character, hence the fgets and sscanf workaround),
	 * many fail to read 0xab as a hexadecimal number (failing on the
	 * x) despite the 0x being defined as optionally existing on input,
	 * and others zero out all the output variables if there is trailing
	 * non white space in the format string which doesn't appear on the
	 * input. Overall, the standard I/O libraries have a tendancy not
	 * to be very standard.
	 */
	while (fgets(buffer, 80, table))
	{
		sscanf(buffer, "0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,0x%x",
		    inputs+0, inputs+1, inputs+2, inputs+3,
		    inputs+4, inputs+5, inputs+6, inputs+7);
		for (j = 0; j<8; j++)
			temp_table[c++] = (unsigned char) inputs[j];
	}
	fclose(table);
	new_free(&filename);
	if (c == 512)
	{
		for (c = 0; c <= 255; c++)
		{
			transToClient[c] = temp_table[c];
			transFromClient[c] = temp_table[c | 256];
		}
		translation = 1;
	}
	else
	{
		say("Error loading translation table \"%s\" !", tablename);
		new_free(&v->string);
	}
}