⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 outbound.c

📁 The major functionality added in this release includes: - Rootless mode in X11 - Widget Templt
💻 C
📖 第 1 页 / 共 5 页
字号:
		sprintf (tbuf, "PART %s\r\nJOIN %s %s\r\n", chan, chan, key);		tcp_send (sess->server, tbuf);		return TRUE;	}	return FALSE;}intcmd_dcc (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	int goodtype;	struct DCC *dcc = 0;	char *type = word[2];	if (*type)	{		if (!strcasecmp (type, "HELP"))			return FALSE;		if (!strcasecmp (type, "CLOSE"))		{			if (*word[3] && *word[4])			{				goodtype = 0;				if (!strcasecmp (word[3], "SEND"))				{					dcc = find_dcc (word[4], word[5], TYPE_SEND);					if (dcc)						dcc_close (dcc, 0, TRUE);					goodtype = TRUE;				}				if (!strcasecmp (word[3], "GET"))				{					dcc = find_dcc (word[4], word[5], TYPE_RECV);					if (dcc)						dcc_close (dcc, 0, TRUE);					goodtype = TRUE;				}				if (!strcasecmp (word[3], "CHAT"))				{					dcc = find_dcc (word[4], "", TYPE_CHATRECV);					if (!dcc)						dcc = find_dcc (word[4], "", TYPE_CHATSEND);					if (dcc)						dcc_close (dcc, 0, TRUE);					goodtype = TRUE;				}				if (!goodtype)					return FALSE;				if (!dcc)					EMIT_SIGNAL (XP_TE_NODCC, sess, NULL, NULL, NULL, NULL, 0);				return TRUE;			}			return FALSE;		}		if (!strcasecmp (type, "CHAT"))		{			char *nick = word[3];			if (*nick)				dcc_chat (sess, nick);			return TRUE;		}		if (!strcasecmp (type, "LIST"))		{			dcc_show_list (sess, tbuf);			return TRUE;		}		if (!strcasecmp (type, "GET"))		{			char *nick = word[3];			char *file = word[4];			if (!*file)			{				if (*nick)					dcc_get_nick (sess, nick);			} else			{				dcc = find_dcc (nick, file, TYPE_RECV);				if (dcc)					dcc_get (dcc);				else					EMIT_SIGNAL (XP_TE_NODCC, sess, NULL, NULL, NULL, NULL, 0);			}			return TRUE;		}		if (!strcasecmp (type, "SEND"))		{			char *nick = word[3];			if (*nick)			{				int i = 4;				char *file;				while (1)				{					file = word[i];					if (!*file && i == 4)					{						fe_dcc_send_filereq (sess, nick);						return TRUE;					}					if (!*file)						break;					dcc_send (sess, tbuf, nick, file);					i++;				}			}			return TRUE;		}	} else		dcc_show_list (sess, tbuf);	return TRUE;}static intcmd_debug (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	struct session *s;	struct server *v;	GSList *list = sess_list;	PrintText (sess, "Session   T Channel    WaitChan  WillChan  Server\n");	while (list)	{		s = (struct session *) list->data;		sprintf (tbuf, "0x%lx %1x %-10.10s %-10.10s %-10.10s 0x%lx\n",					(unsigned long) s, s->type, s->channel, s->waitchannel,					s->willjoinchannel, (unsigned long) s->server);		PrintText (sess, tbuf);		list = list->next;	}	list = serv_list;	PrintText (sess, "Server    Sock  Name\n");	while (list)	{		v = (struct server *) list->data;		sprintf (tbuf, "0x%lx %-5ld %s\n",					(unsigned long) v, (unsigned long) v->sok, v->servername);		PrintText (sess, tbuf);		list = list->next;	}	sprintf (tbuf,				"\nfront_session: %lx\n"				"current_tab: %lx\n\n",				(unsigned long) sess->server->front_session,				(unsigned long) current_tab);	PrintText (sess, tbuf);#ifdef MEMORY_DEBUG	sprintf (tbuf, "current mem: %d\n\n", current_mem_usage);	PrintText (sess, tbuf);#endif  /* !MEMORY_DEBUG */	return TRUE;}intcmd_delbutton (struct session *sess, char *tbuf, char *word[],					char *word_eol[]){	if (*word[2])	{		if (sess->type == SESS_DIALOG)		{			if (list_delentry (&dlgbutton_list, word[2]))				fe_dlgbuttons_update (sess);		} else		{			if (list_delentry (&button_list, word[2]))				fe_buttons_update (sess);		}		return TRUE;	}	return FALSE;}intcmd_dehop (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	int i = 2;	while (1)	{		if (!*word[i])		{			if (i == 2)				return FALSE;			send_channel_modes (sess, tbuf, word, 2, i, '-', 'h');			return TRUE;		}		i++;	}}intcmd_deop (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	int i = 2;	while (1)	{		if (!*word[i])		{			if (i == 2)				return FALSE;			send_channel_modes (sess, tbuf, word, 2, i, '-', 'o');			return TRUE;		}		i++;	}}intcmd_mdehop (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	struct User *user;	char **nicks = malloc (sizeof (char *) * sess->hops);	int i = 0;	GSList *list = sess->userlist;	while (list)	{		user = (struct User *) list->data;		if (user->hop && (strcmp (user->nick, sess->server->nick) != 0))		{			nicks[i] = user->nick;			i++;		}		list = list->next;	}	send_channel_modes (sess, tbuf, nicks, 0, i, '-', 'h');	free (nicks);	return TRUE;}intcmd_mdeop (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	struct User *user;	char **nicks = malloc (sizeof (char *) * sess->ops);	int i = 0;	GSList *list = sess->userlist;	while (list)	{		user = (struct User *) list->data;		if (user->op && (strcmp (user->nick, sess->server->nick) != 0))		{			nicks[i] = user->nick;			i++;		}		list = list->next;	}	send_channel_modes (sess, tbuf, nicks, 0, i, '-', 'o');	free (nicks);	return TRUE;}intcmd_mkick (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	struct User *user;	char *reason = word_eol[2];	GSList *list;	list = sess->userlist;	while (list)	{		user = (struct User *) list->data;		if (user->op)		{			if (strcmp (user->nick, sess->server->nick) != 0)			{				if (*reason)					sprintf (tbuf, "KICK %s %s :%s\r\n", sess->channel, user->nick,								reason);				else					sprintf (tbuf, "KICK %s %s\r\n", sess->channel, user->nick);				tcp_send (sess->server, tbuf);			}		}		list = list->next;	}	list = sess->userlist;	while (list)	{		user = (struct User *) list->data;		if (!user->op)		{			if (strcmp (user->nick, sess->server->nick) != 0)			{				if (*reason)					sprintf (tbuf, "KICK %s %s :%s\r\n", sess->channel, user->nick,								reason);				else					sprintf (tbuf, "KICK %s %s\r\n", sess->channel, user->nick);				tcp_send (sess->server, tbuf);			}		}		list = list->next;	}	return TRUE;}intcmd_mkickb (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	sprintf (tbuf, "MODE %s +b *@*\r\n", sess->channel);	tcp_send (sess->server, tbuf);	return cmd_mkick (sess, tbuf, word, word_eol);}intcmd_devoice (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	int i = 2;	while (1)	{		if (!*word[i])		{			if (i == 2)				return FALSE;			send_channel_modes (sess, tbuf, word, 2, i, '-', 'v');			return TRUE;		}		i++;	}}intcmd_discon (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	disconnect_server (sess, TRUE, -1);	return TRUE;}intcmd_dns (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	char *nick = word[2];	struct User *user;	if (*nick)	{		if (strchr (nick, '.') == NULL)		{			user = find_name (sess, nick);			if (user && user->hostname)			{				do_dns (sess, tbuf, user->nick, user->hostname);			} else			{				sprintf (tbuf, "WHO %s\r\n", nick);				tcp_send (sess->server, tbuf);				sess->server->doing_who = TRUE;			}		} else		{			sprintf (tbuf, "/exec %s %s", prefs.dnsprogram, nick);			handle_command (tbuf, sess, 0, 0);		}		return TRUE;	}	return FALSE;}intcmd_echo (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	PrintText (sess, word_eol[2]);	return TRUE;}#ifndef WIN32static voidexec_check_process (struct session *sess){	int val;	if (sess->running_exec == NULL)		return;	val = waitpid (sess->running_exec->childpid, NULL, WNOHANG);	if (val == -1 || val > 0)	{		close (sess->running_exec->myfd);		fe_input_remove (sess->running_exec->iotag);		free (sess->running_exec);		sess->running_exec = NULL;	}}#ifndef __EMX__intcmd_execs (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	int r;	exec_check_process (sess);	if (sess->running_exec == NULL)	{		EMIT_SIGNAL (XP_TE_NOCHILD, sess, NULL, NULL, NULL, NULL, 0);		return FALSE;	}	r = kill (sess->running_exec->childpid, SIGSTOP);	if (r == -1)		PrintText (sess, "Error in kill(2)\n");	return TRUE;}intcmd_execc (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	int r;	exec_check_process (sess);	if (sess->running_exec == NULL)	{		EMIT_SIGNAL (XP_TE_NOCHILD, sess, NULL, NULL, NULL, NULL, 0);		return FALSE;	}	r = kill (sess->running_exec->childpid, SIGCONT);	if (r == -1)		PrintText (sess, "Error in kill(2)\n");	return TRUE;}intcmd_execk (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	int r;	exec_check_process (sess);	if (sess->running_exec == NULL)	{		EMIT_SIGNAL (XP_TE_NOCHILD, sess, NULL, NULL, NULL, NULL, 0);		return FALSE;	}	if (strcmp (word[2], "-9") == 0)		r = kill (sess->running_exec->childpid, SIGKILL);	else		r = kill (sess->running_exec->childpid, SIGTERM);	if (r == -1)		PrintText (sess, "Error in kill(2)\n");	return TRUE;}/* OS/2 Can't have the /EXECW command because it uses pipe(2) not socketpair   and thus it is simplex --AGL */intcmd_execw (struct session *sess, char *tbuf, char *word[], char *word_eol[]){	int len;	char *temp;	exec_check_process (sess);	if (sess->running_exec == NULL)	{		EMIT_SIGNAL (XP_TE_NOCHILD, sess, NULL, NULL, NULL, NULL, 0);		return FALSE;	}	len = strlen(word_eol[2]);	temp = malloc(len + 2);	sprintf(temp, "%s\n", word_eol[2]);	PrintText(sess, temp);	write(sess->running_exec->myfd, temp, len + 1);	free(temp);	return TRUE;}#endif /* !__EMX__ *//* convert ANSI escape color codes to mIRC codes */static short escconv[] =/* 0 1 2 3 4 5  6 7  0 1 2 3 4  5  6  7 */{  1,4,3,5,2,10,6,1, 1,7,9,8,12,11,13,1 };static voidexec_handle_colors (char *buf, int len){	char numb[16];	char *nbuf;	int i = 0, j = 0, k = 0, firstn = 0, col, colf = 0, colb = 0;	int esc = FALSE, backc = FALSE, bold = FALSE;	/* any escape codes in this text? */	if (strchr (buf, 27) == 0)		return;	nbuf = malloc (len + 1);	while (i < len)	{		switch (buf[i])		{		case '\r':			break;		case 27:			esc = TRUE;			break;		case ';':			if (!esc)				goto norm;			backc = TRUE;			numb[k] = 0;			firstn = atoi (numb);			k = 0;			break;		case '[':			if (!esc)				goto norm;			break;		default:			if (esc)			{				if (buf[i] >= 'A' && buf[i] <= 'z')				{					if (buf[i] == 'm')					{						/* ^[[0m */						if (k == 0 || (numb[0] == '0' && k == 1))						{							nbuf[j] = '\017';							j++;							bold = FALSE;							goto cont;						}						numb[k] = 0;						col = atoi (numb);						backc = FALSE;						if (firstn == 1)							bold = TRUE;						if (firstn >= 30 && firstn <= 37)							colf = firstn - 30;						if (col >= 40)						{							colb = col - 40;							backc = TRUE;						}						if (col >= 30 && col <= 37)							colf = col - 30;						if (bold)							colf += 8;						if (backc)						{							colb = escconv[colb % 14];							colf = escconv[colf % 14];							j += sprintf (&nbuf[j], "\003%d,%02d", colf, colb);						} else						{							colf = escconv[colf % 14];							j += sprintf (&nbuf[j], "\003%02d", colf);						}					}cont:				esc = FALSE;					backc = FALSE;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -