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

📄 bnchat.c

📁 打魔兽战网的都知道他是什么
💻 C
📖 第 1 页 / 共 5 页
字号:
            "    --arch=XMAC                 report architecture as PowerPC MacOSX\n");    fprintf(stderr,	    "    -o NAME, --owner=NAME       report CD owner as NAME\n"	    "    -k KEY, --cdkey=KEY         report CD key as KEY\n"	    "    -l LANG --lang=LANG         report language as LANG (default \"enUS\")\n"            "    -h, --help, --usage         show this information and exit\n"            "    -v, --version               print version number and exit\n");    exit(STATUS_FAILURE);}int read_commandline(int argc, char * * argv,		     char const * * servname, unsigned short * servport,		     char const * * clienttag,		     char const * * archtag,		     int * changepass, int * newacct,		     char const * * channel,		     char const * * cdowner,		     char const * * cdkey,		     char const * * gamelang,		     int * useansi){  int a;    if (argc<1 || !argv || !argv[0])    {	fprintf(stderr,"bad arguments\n");	return STATUS_FAILURE;    }        for (a=1; a<argc; a++)	if (*servname && isdigit((int)argv[a][0]) && a+1>=argc)	{            if (str_to_ushort(argv[a],servport)<0)            {                fprintf(stderr,"%s: \"%s\" should be a positive integer\n",argv[0],argv[a]);                usage(argv[0]);            }	}	else if (!(*servname) && argv[a][0]!='-' && a+2>=argc)	    *servname = argv[a];        else if (strcmp(argv[a],"-a")==0 || strcmp(argv[a],"--use-ansi")==0)	    *useansi = 1;        else if (strcmp(argv[a],"-n")==0 || strcmp(argv[a],"--new-account")==0)	{	    if (*changepass)	    {		fprintf(stderr,"%s: can not create new account when changing passwords\n",argv[0]);		usage(argv[0]);	    }	    *newacct = 1;	}        else if (strcmp(argv[a],"-c")==0 || strcmp(argv[a],"--change-password")==0)	{	    if (*newacct)	    {		fprintf(stderr,"%s: can not change passwords when creating a new account\n",argv[0]);		usage(argv[0]);	    }	    *changepass = 1;	}        else if (strcmp(argv[a],"--client=CHAT")==0)	{	    if (*clienttag)	    {		fprintf(stderr,"%s: client type was already specified as \"%s\"\n",argv[0],*clienttag);		usage(argv[0]);	    }	    *clienttag = CLIENTTAG_BNCHATBOT;	    *channel = CHANNEL_BNCHATBOT;	}        else if (strcmp(argv[a],"-b")==0 || strcmp(argv[a],"--client=SEXP")==0)	{	    if (*clienttag)	    {		fprintf(stderr,"%s: client type was already specified as \"%s\"\n",argv[0],*clienttag);		usage(argv[0]);	    }	    *clienttag = CLIENTTAG_BROODWARS;	    *channel = CHANNEL_BROODWARS;	}        else if (strcmp(argv[a],"-d")==0 || strcmp(argv[a],"--client=DRTL")==0)	{	    if (*clienttag)	    {		fprintf(stderr,"%s: client type was already specified as \"%s\"\n",argv[0],*clienttag);		usage(argv[0]);	    }	    *clienttag = CLIENTTAG_DIABLORTL;	    *channel = CHANNEL_DIABLORTL;	}        else if (strcmp(argv[a],"--client=DSHR")==0)	{	    if (*clienttag)	    {		fprintf(stderr,"%s: client type was already specified as \"%s\"\n",argv[0],*clienttag);		usage(argv[0]);	    }	    *clienttag = CLIENTTAG_DIABLOSHR;	    *channel = CHANNEL_DIABLOSHR;	}        else if (strcmp(argv[a],"-s")==0 || strcmp(argv[a],"--client=STAR")==0)	{	    if (*clienttag)	    {		fprintf(stderr,"%s: client type was already specified as \"%s\"\n",argv[0],*clienttag);		usage(argv[0]);	    }	    *clienttag = CLIENTTAG_STARCRAFT;	    *channel = CHANNEL_STARCRAFT;	}        else if (strcmp(argv[a],"--client=SSHR")==0)	{	    if (*clienttag)	    {		fprintf(stderr,"%s: client type was already specified as \"%s\"\n",argv[0],*clienttag);		usage(argv[0]);	    }	    *clienttag = CLIENTTAG_SHAREWARE;	    *channel = CHANNEL_SHAREWARE;	}        else if (strcmp(argv[a],"-w")==0 || strcmp(argv[a],"--client=W2BN")==0)	{	    if (*clienttag)	    {		fprintf(stderr,"%s: client type was already specified as \"%s\"\n",argv[0],*clienttag);		usage(argv[0]);	    }	    *clienttag = CLIENTTAG_WARCIIBNE;	    *channel = CHANNEL_WARCIIBNE;	}        else if (strcmp(argv[a],"--client=D2DV")==0)	{	    if (*clienttag)	    {		fprintf(stderr,"%s: client type was already specified as \"%s\"\n",argv[0],*clienttag);		usage(argv[0]);	    }	    *clienttag = CLIENTTAG_DIABLO2DV;	    *channel = CHANNEL_DIABLO2DV;	}        else if (strcmp(argv[a],"--client=D2XP")==0)	{	    if (*clienttag)	    {		fprintf(stderr,"%s: client type was already specified as \"%s\"\n",argv[0],*clienttag);		usage(argv[0]);	    }	    *clienttag = CLIENTTAG_DIABLO2XP;	    *channel = CHANNEL_DIABLO2XP;	}        else if (strcmp(argv[a],"--client=WAR3")==0)	{	    if (*clienttag)	    {		fprintf(stderr,"%s: client type was already specified as \"%s\"\n",argv[0],*clienttag);		usage(argv[0]);	    }	    *clienttag = CLIENTTAG_WARCRAFT3;	    *channel = CHANNEL_WARCRAFT3;	}        else if (strcmp(argv[a],"--client=W3XP")==0)	{	    if (*clienttag)	    {		fprintf(stderr,"%s: client type was already specified as \"%s\"\n",argv[0],*clienttag);		usage(argv[0]);	    }	    *clienttag = CLIENTTAG_WAR3XP;	    *channel = CHANNEL_WAR3XP;	}	else if (strncmp(argv[a],"--client=",9)==0)	{	    fprintf(stderr,"%s: unknown client tag \"%s\"\n",argv[0],&argv[a][9]);	    usage(argv[0]);	}        else if (strcmp(argv[a],"--arch=IX86")==0)	{	    *archtag = ARCHTAG_WINX86;	}        else if (strcmp(argv[a],"--arch=PMAC")==0)	{	    *archtag = ARCHTAG_MACPPC;	}        else if (strcmp(argv[a],"--arch=XMAC")==0)	{	    *archtag = ARCHTAG_OSXPPC;	}	else if (strncmp(argv[a],"--arch=",7)==0)	{	    fprintf(stderr,"%s: unknown architecture tag \"%s\"\n",argv[0],&argv[a][7]);	    usage(argv[0]);	}	else if (strcmp(argv[a],"-o")==0)	{	    if (a+1>=argc)            {                fprintf(stderr,"%s: option \"%s\" requires an argument\n",argv[0],argv[a]);                usage(argv[0]);            }	    if (*cdowner)	    {		fprintf(stderr,"%s: CD owner was already specified as \"%s\"\n",argv[0],*cdowner);		usage(argv[0]);	    }	    *cdowner = argv[++a];	}	else if (strncmp(argv[a],"--owner=",8)==0)	{	    if (*cdowner)	    {		fprintf(stderr,"%s: CD owner was already specified as \"%s\"\n",argv[0],*cdowner);		usage(argv[0]);	    }	    *cdowner = &argv[a][8];	}	else if (strcmp(argv[a],"-k")==0)	{	    if (a+1>=argc)            {                fprintf(stderr,"%s: option \"%s\" requires an argument\n",argv[0],argv[a]);                usage(argv[0]);            }	    if (*cdkey)	    {		fprintf(stderr,"%s: CD key was already specified as \"%s\"\n",argv[0],*cdkey);		usage(argv[0]);	    }	    *cdkey = argv[++a];	}	else if (strncmp(argv[a],"--cdkey=",8)==0)	{	    if (*cdkey)	    {		fprintf(stderr,"%s: CD key was already specified as \"%s\"\n",argv[0],*cdkey);		usage(argv[0]);	    }	    *cdkey = &argv[a][8];	}	else if (strcmp(argv[a],"-l")==0)	{	    if (a+1>=argc)            {                fprintf(stderr,"%s: option \"%s\" requires an argument\n",argv[0],argv[a]);                usage(argv[0]);            }	    if (strlen(argv[a + 1]) != 4)	    {		fprintf(stderr,"%s: language has to be 4 characters long\n",argv[0]);		usage(argv[0]);	    }	    *gamelang = argv[++a];	}	else if (strncmp(argv[a],"--lang=",7)==0)	{	    if (strlen(argv[a] + 7) != 4)	    {		fprintf(stderr,"%s: language has to be 4 characters long\n",argv[0]);		usage(argv[0]);	    }	    *gamelang = &argv[a][7];	}	else if (strcmp(argv[a],"-v")==0 || strcmp(argv[a],"--version")==0)	{            printf("version "PVPGN_VERSION"\n");            return STATUS_SUCCESS;	}	else if (strcmp(argv[a],"-h")==0 || strcmp(argv[a],"--help")==0 || strcmp(argv[a],"--usage")==0)            usage(argv[0]);        else if (strcmp(argv[a],"--client")==0 || strcmp(argv[a],"--owner")==0 || strcmp(argv[a],"--cdkey")==0)	{	    fprintf(stderr,"%s: option \"%s\" requires an argument\n",argv[0],argv[a]);	    usage(argv[0]);	}	else	{	    fprintf(stderr,"%s: unknown option \"%s\"\n",argv[0],argv[a]);	    usage(argv[0]);	}        if (*servport==0)	*servport = BNETD_SERV_PORT;    if (!(*cdowner))	*cdowner = BNETD_DEFAULT_OWNER;    if (!(*cdkey))	*cdkey = BNETD_DEFAULT_KEY;    if (!(*clienttag))    {	*clienttag = CLIENTTAG_STARCRAFT;	*channel = CHANNEL_STARCRAFT;    }    if (!(*servname))	*servname = BNETD_DEFAULT_HOST;    return 0;}void munge(t_client_state * client){    int i;    if (!client->munged)    {	printf("\r");	for (i=0; i<strlen(mode_get_prompt(client->mode)); i++)	    printf(" ");	for (i=0; i<strlen(client->text) && i<client->screen_width-strlen(mode_get_prompt(client->mode)); i++)	    printf(" ");	printf("\r");	client->munged = 1;    }}void ansi_printf(t_client_state * client,int color, char const * fmt, ...){    va_list		args;    char		buffer[2048];    if (!(client))        return;    if (!(fmt))        return;    if (client->useansi)        ansi_text_color_fore(color);    VA_START(args,fmt);    vsnprintf(buffer,2048,fmt,args);    va_end(args);        str_print_term(stdout,buffer,0,1);    if (client->useansi)        ansi_text_reset();    fflush(stdout);}extern int main(int argc, char * argv[]){    int                newacct=0;    int                changepass=0;    t_client_state	client;    t_user_info		user;    t_packet *         packet;    t_packet *         rpacket;    char const *       servname=NULL;    unsigned short     servport=0;    char const * *     channellist;    unsigned int       statsmatch=24; /* any random number that is rare in uninitialized fields */        memset(&user,0,sizeof(t_user_info));    memset(&client,0,sizeof(t_client_state));    /* default values */    user.archtag = ARCHTAG_WINX86;    user.gamelang = CLIENT_COUNTRYINFO_109_GAMELANG;    read_commandline(argc,argv,&servname,&servport,&user.clienttag,&user.archtag,&changepass,                     &newacct,&user.channel,&user.cdowner,&user.cdkey,&user.gamelang,&client.useansi);        client.fd_stdin = fileno(stdin);    if (tcgetattr(client.fd_stdin,&client.in_attr_old)>=0)    {        client.in_attr_new = client.in_attr_old;        client.in_attr_new.c_lflag &= ~(ECHO | ICANON); /* turn off ECHO and ICANON */	client.in_attr_new.c_cc[VMIN]  = 0; /* don't require reads to return data */        client.in_attr_new.c_cc[VTIME] = 1; /* timeout = .1 seconds */        tcsetattr(client.fd_stdin,TCSANOW,&client.in_attr_new);        client.changed_in = 1;    }    else    {	fprintf(stderr,"%s: could not set terminal attributes for stdin\n",argv[0]);	client.changed_in = 0;    }    #ifdef HAVE_SIGACTION    {        struct sigaction winch_action;	        winch_action.sa_handler = winch_sig_handle;        sigemptyset(&winch_action.sa_mask);        winch_action.sa_flags = SA_RESTART;	        sigaction(SIGWINCH,&winch_action,NULL);    }#endif    if (client_get_termsize(client.fd_stdin,&client.screen_width,&client.screen_height)<0)    {	fprintf(stderr,"%s: could not determine screen size\n",argv[0]);	if (client.changed_in)	    tcsetattr(client.fd_stdin,TCSAFLUSH,&client.in_attr_old);	return STATUS_FAILURE;    }        if (client.useansi)    {	ansi_text_reset();	ansi_screen_clear();	ansi_cursor_move_home();	fflush(stdout);    }        if ((client.sd = client_connect(argv[0],			     servname,servport,user.cdowner,user.cdkey,user.clienttag,			     &client.saddr,&client.sessionkey,&client.sessionnum,user.archtag,user.gamelang))<0)    {	fprintf(stderr,"%s: fatal error during handshake\n",argv[0]);	if (client.changed_in)	    tcsetattr(client.fd_stdin,TCSAFLUSH,&client.in_attr_old);	return STATUS_FAILURE;    }        /* reuse this same packet over and over */

⌨️ 快捷键说明

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