Example #1
0
static void
HandleKeyboardW(WEVENT *ev)
{
	_Bool press = ev->type == EVENT_KEY;

	if (press && ev->key == 27) {
		if (winW != WROOT) w_delete(winW);
		w_exit();
		quit();                    /* ESC */
	}

	/* the coin and dipswitch inputs work only in VS UniSystem mode */
	if (unisystem)
		switch (ev->key) {
		case '[':
		case '{':
			ctl_coinslot(0x01, press);
			break;
		case ']':
		case '}':
			ctl_coinslot(0x02, press);
			break;
		case '\\':
		case '|':
			ctl_coinslot(0x04, press);
			break;
		case 'Q':
		case 'q':
			ctl_dipswitch(0x01, press);
			break;
		case 'W':
		case 'w':
			ctl_dipswitch(0x02, press);
			break;
		case 'E':
		case 'e':
			ctl_dipswitch(0x04, press);
			break;
		case 'R':
		case 'r':
			ctl_dipswitch(0x08, press);
			break;
		case 'T':
		case 't':
			ctl_dipswitch(0x10, press);
			break;
		case 'Y':
		case 'y':
			ctl_dipswitch(0x20, press);
			break;
		case 'U':
		case 'u':
			ctl_dipswitch(0x40, press);
			break;
		case 'I':
		case 'i':
			ctl_dipswitch(0x80, press);
			break;
		}

	switch (ev->key)
	{
		/* controller 1 keyboard mapping */
	case '\r':
	case '\n':
		ctl_keypress(0, STARTBUTTON, press);
		break;
	case '\t':
		ctl_keypress(0, SELECTBUTTON, press);
		break;
	case WKEY_UP:
		ctl_keypress(0, UP, press);
		break;
	case WKEY_DOWN:
		ctl_keypress(0, DOWN, press);
		break;
	case WKEY_LEFT:
		ctl_keypress(0, LEFT, press);
		break;
	case WKEY_RIGHT:
		ctl_keypress(0, RIGHT, press);
		break;
	case WKEY_HOME:
		ctl_keypress_diag(0, UP | LEFT, press);
		break;
	case WKEY_PGUP:
		ctl_keypress_diag(0, UP | RIGHT, press);
		break;
	case WKEY_END:
		ctl_keypress_diag(0, DOWN | LEFT, press);
		break;
	case WKEY_PGDOWN:
		ctl_keypress_diag(0, DOWN | RIGHT, press);
		break;
	case 'Z':
	case 'z':
	case 'X':
	case 'x':
	case 'D':
	case 'd':
	case WKEY_INS:
	case WMOD_SHIFT | WMOD_LEFT:
	case WMOD_SHIFT | WMOD_RIGHT:
	case WMOD_CTRL | WMOD_LEFT:
	case WMOD_ALT | WMOD_RIGHT:
	case WMOD_META | WMOD_RIGHT:
	case WMOD_ALTGR | WMOD_LEFT:
	case WMOD_ALTGR | WMOD_RIGHT:
		ctl_keypress(0, BUTTONB, press);
		break;
	case 'A':
	case 'a':
	case 'C':
	case 'c':
	case ' ':
	case WKEY_DEL:
	case WMOD_ALT | WMOD_LEFT:
	case WMOD_CTRL | WMOD_RIGHT:
		ctl_keypress(0, BUTTONA, press);
		break;

		/* controller 2 keyboard mapping */
	case 'G':
	case 'g':
		ctl_keypress(1, STARTBUTTON, press);
		break;
	case 'F':
	case 'f':
		ctl_keypress(1, SELECTBUTTON, press);
		break;
	case 'K':
	case 'k':
		ctl_keypress(1, UP, press);
		break;
	case 'J':
	case 'j':
		ctl_keypress(1, DOWN, press);
		break;
	case 'H':
	case 'h':
		ctl_keypress(1, LEFT, press);
		break;
	case 'L':
	case 'l':
		ctl_keypress(1, RIGHT, press);
		break;
	case 'V':
	case 'v':
		ctl_keypress(1, BUTTONB, press);
		break;
	case 'B':
	case 'b':
		ctl_keypress(1, BUTTONA, press);
		break;
	}

	/* emulator keys */
	if (press)
		switch (ev->key) {
/*		case WKEY_F1: */
/*			debug_bgoff = 1; */
/*			break; */
/*		case WKEY_F2: */
/*			debug_bgoff = 0; */
/*			break; */
/*		case WKEY_F3: */
/*			debug_spritesoff = 1; */
/*			break; */
/*		case WKEY_F4: */
/*			debug_spritesoff = 0; */
/*			break; */
/*		case WKEY_F5: */
/*			debug_switchtable = 1; */
/*			break; */
/*		case WKEY_F6: */
/*			debug_switchtable = 0; */
/*			break; */
		case WKEY_F7:
		case 'S':
		case 's':
			SaveScreenshotW();
			break;
/*		case WKEY_F8: */
/*			memset(displaycachevalid, 0, sizeof displaycachevalid); */
/*			memset(bitplanecachevalid, 0, sizeof bitplanecachevalid); */
/*			break; */
		case 8:
			START();
			break;
		case 'P':
		case 'p':
			renderer_data.pause_display = !renderer_data.pause_display;
			desync = 1;
			break;
		case '`':
			desync = 1;
			halfspeed = 1;
			doublespeed = 0;
			renderer_data.pause_display = 0;
			break;
		case '1':
			desync = 1;
			halfspeed = 0;
			doublespeed = 0;
			renderer_data.pause_display = 0;
			break;
		case '2':
			desync = 1;
			halfspeed = 0;
			doublespeed = 2;
			renderer_data.pause_display = 0;
			break;
		case '3':
			desync = 1;
			halfspeed = 0;
			doublespeed = 3;
			renderer_data.pause_display = 0;
			break;
		case '4':
			desync = 1;
			halfspeed = 0;
			doublespeed = 4;
			renderer_data.pause_display = 0;
			break;
		case '5':
			desync = 1;
			halfspeed = 0;
			doublespeed = 5;
			renderer_data.pause_display = 0;
			break;
		case '6':
			desync = 1;
			halfspeed = 0;
			doublespeed = 6;
			renderer_data.pause_display = 0;
			break;
		case '7':
			desync = 1;
			halfspeed = 0;
			doublespeed = 7;
			renderer_data.pause_display = 0;
			break;
		case '8':
			desync = 1;
			halfspeed = 0;
			doublespeed = 8;
			renderer_data.pause_display = 0;
			break;
		case '0':
			desync = 1;
			renderer_data.pause_display = 1;
			break;
		}
}
Example #2
0
int main(int argc, char *argv[])
{
	//usage error check
	if(argc < 2) { printf("usage : ./server <port number>\n"); exit(1); }
	//make port number
	int server_port = atoi(argv[1]);
	
	//socket variables
	int chat_sd;
	int game_sd;
	int listen_sd;
	struct sockaddr_in addr;
	struct timeval timeout;
	fd_set select_result;
	int on=1;
	
	//pthread variables
	pthread_t thr;

	//etc variables
	int i, j, buf_len, rc;
	int x, y, winner;
	char buffer[4096];
	char smbuf[5];

	//server init
	listen_sd = socket(AF_INET, SOCK_STREAM, 0);
	if(listen_sd<0){printf("socket error\n"); exit(2);}
	rc = setsockopt(listen_sd, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on));
	if(rc<0){printf("setsockopt error\n"); exit(2);}

	memset(&addr, 0, sizeof(addr));
	addr.sin_family 		= AF_INET;
	addr.sin_addr.s_addr 	= htonl(INADDR_ANY);
	addr.sin_port			= htons(server_port);

	rc = bind(listen_sd, (struct sockaddr *)&addr, sizeof(addr));
	if(rc < 0){printf("bind error\n"); exit(3);} 

	rc = listen(listen_sd, 32);
	if(rc < 0){printf("listen error\n"); exit(4);}

	init_set();
	add_to_set(fileno(stdin));
	add_to_set(listen_sd);

	//timeval init
	timeout.tv_sec = 3*60;
	timeout.tv_usec = 0;

	//Waiting client
	printf("Waiting client\n");
	chat_sd = accept(listen_sd, (struct sockaddr *)NULL, NULL);
	add_to_set(chat_sd);
	printf("accept chat_sd\n");

	game_sd = accept(listen_sd, (struct sockaddr *)NULL, NULL);
	add_to_set(game_sd);
	printf("accept game_sd\n");
	

	//game init
	initlog();
	init_board();
	while(1)
	{
		//your turn
		
		addlog(" < YOUR TURN > ", 3, 1);

		//make thread to check time
		pipe(pipefd);
		add_to_set(pipefd[0]);
		pthread_create(&thr, NULL, thr_time, NULL);

		while(1)
		{
			printboard(1);
			printlog();
			memcpy(&select_result, &master_set, sizeof(master_set));
			rc = select(max_sd+1,&select_result, NULL,NULL, &timeout);
			if(rc<0) exit(5);
			if(rc==0) exit(6); //timecheck error
			if(FD_ISSET(game_sd, &select_result)) w_exit(-1);
			else if(FD_ISSET(fileno(stdin), &select_result)) //stdin
			{
				fgets(buffer,4096,stdin);
				if(buffer[0] == 58) //special command
				{
					if(buffer[2]==' ' && buffer[4]=='\n')
					{
						if(buffer[1]<78 && buffer[1]>64)
							buffer[1] = buffer[1] + 32;
						if(buffer[3]<78 && buffer[3]>64)
							buffer[3] = buffer[3] + 32;
						if(buffer[1]<110 && buffer[1]>96 && buffer[3]<110 && buffer[3]>96)
						{
							y = buffer[1] - 96;
							x = buffer[3] - 96;
							if(is_33(y, x))
								addlog("3x3 not allowed", 3, 1);
							else if(board[y][x]!=0)
								addlog("try again", 3,1);
							else
							{
								pthread_cancel(thr);
								board[y][x] = 1;
								smbuf[0] = y;
								smbuf[1] = x;
								smbuf[2] = '\0';
								send(game_sd, smbuf, 2, 0);
								if(winner = finish_board())
									w_exit(winner);
								break;
							}
						}
					}
					else if(buffer[1]=='q' && buffer[2]=='\n')
					{
						printf("\rdissconnected\n");
						exit(0);
					}
				}
				else
				{
					buffer[strlen(buffer)-1] ='\0';
					send(chat_sd, buffer,strlen(buffer),0);
					addlog(buffer, 1, 1);
				}
			}
			else if(FD_ISSET(chat_sd, &select_result))
			{
				rc = recv(chat_sd, buffer, 4096, 0);
				if(rc<0) exit(7);	//recv error
				if(rc == 0) w_exit(-1); //disconnected
				buffer[rc]='\0';
				addlog(buffer, 2, 1);
			}
			else if(FD_ISSET(pipefd[0], &select_result))
			{
				send(game_sd, "t",1,0);
				break;
			}
		}
		remove_from_set(pipefd[0]);
		//opp turn
		
		while(1)
		{
			printboard(2);
			printlog();
			memcpy(&select_result, &master_set, sizeof(master_set));
			rc = select(max_sd+1, &select_result, NULL,NULL,&timeout);
			if(rc<0) exit(5);
			if(rc==0) exit(6); //timeout;
			if(FD_ISSET(fileno(stdin), &select_result))
			{
				fgets(buffer,4096,stdin);
				if(buffer[0] != ':')
				{
					buffer[strlen(buffer)-1]='\0';
					send(chat_sd, buffer, strlen(buffer),0);
					addlog(buffer,1, 2);
				}
				else if(buffer[1] == 'q' && buffer[2] == '\n')
				{
					printf("\rdisconnected\n");
					exit(0);
				}
			}
			else if(FD_ISSET(game_sd, &select_result))
			{
				rc = recv(game_sd, smbuf,2 ,0);
				if(rc<0) exit(7); //recv error
				if(rc==0) w_exit(-1); //disconnected
				if(smbuf[0] == 't')
				{
					addlog("Opponent timeout", 3, 2);
					break;
				}
				else
				{
					y = smbuf[0];
					x = smbuf[1];
					board[y][x] = 2;
					if(winner = finish_board())
						w_exit(winner);
					break;
				}
			}
			else if(FD_ISSET(chat_sd, &select_result))
			{
				rc = recv(chat_sd, buffer, 4096,0);
				if(rc<0) exit(7);
				if(rc == 0) w_exit(-1);
				buffer[rc]= '\0';
				addlog(buffer, 2, 2);
			}
		}
	}
	
	exit(0);
}
Example #3
0
int
InitDisplayW(int argc, char **argv)
{
	rgb_t color;
	struct timeval time;

	if (magstep < 1) {
		magstep = 1;
	}
	if (magstep > maxsize) {
		fprintf(stderr, "Warning: Enlargement factor %d is too large!\n",
		        magstep);
		magstep = maxsize;
	}
	if (!(serverW = w_init())) {
		fprintf(stderr, "%s: W initialization failed\n", argv[0]);
		exit(EXIT_FAILURE);
	}
	bpp = serverW->planes;
	if (verbose)
		fprintf(stderr,
		        "W: %dbpp [%s, %s] %d shared colors, %s blocks\n",
		        bpp,
		        (serverW->type == BM_PACKEDCOLORMONO) ? "bitplanes, monochrome"
		        : (serverW->type == BM_PACKEDMONO) ? "1 bitplane, monochrome"
		        : (serverW->type == BM_DIRECT8) ? "8-bit chunky (direct) colors"
		        : (serverW->type == BM_PACKEDCOLOR) ? "bitplanes, colors settable"
		        : (serverW->type == BM_DIRECT24) ? "24-bit (rgb) image"
		        : "unknown scheme",
		        (indexedcolor && (bpp > 1)) ? "dynamic" : "static",
		        serverW->sharedcolors,
		        (serverW->flags & WSERVER_SHM) ? "shared" : "normal");
	if (renderer_config.inroot) {
		width = serverW->width;
		height = serverW->height;
		x0 = 0;
		y0 = 0;
		winW = WROOT;
	} else {
		WFONT *fontW;

		width = UNDEF;
		height = UNDEF;
		x0 = UNDEF;
		y0 = UNDEF;
		if (renderer_config.geometry) {
			char *s;
			int c;

			/* this little hack converts "NxM" geometry specs into "N,M" */
			for (s = renderer_config.geometry; (c = *s); s++)
				if ((c == 'x') || (c == ',')) {
					*s = ',';
					break;
				}
			scan_geometry(renderer_config.geometry,
			              &width, &height,
			              &x0, &y0);
		}
		if ((width == UNDEF) || !width)
			width = 256 * magstep;
		if ((height == UNDEF) || !height)
			height = 240 * magstep;
		if (!(fontW = w_loadfont("lucidat", 13, F_BOLD)))
			if (!(fontW = w_loadfont(0, 0, 0))) {
				w_exit();
				fprintf(stderr, "%s: failed to acquire font\n", argv[0]);
				exit(EXIT_FAILURE);
			}
		if ((iconW = w_create(w_strlen(fontW, PACKAGE) + 4,
		                      fontW->height + 2,
		                      W_MOVE | EV_MOUSE
		                      | EV_KEYS | EV_MODIFIERS))) {
			w_setfont(iconW, fontW);
			w_printstring(iconW, 2, 1, PACKAGE);
		}
		w_unloadfont(fontW);
		if (!(winW = w_create(width, height,
		                      W_MOVE | W_TITLE | W_CLOSE
		                      | (iconW ? W_ICON : 0)
		                      | W_RESIZE
		                      | EV_KEYS | EV_MODIFIERS))) {
			if (iconW) w_delete(iconW);
			w_exit();
			fprintf(stderr, "%s: failed to create window\n", argv[0]);
			exit(EXIT_FAILURE);
		}
		w_settitle(winW, PACKAGE_NAME);
		limit2screen(winW, &x0, &y0);
	}
	/* Allocate rendering bitmap */
	if (!(bitmapW = w_allocbm(256 * magstep, 240 * magstep,
	                          serverW->type,
	                          ((serverW->type == BM_DIRECT8) ||
	                           (serverW->type == BM_PACKEDCOLOR))
	                          ? 1 << serverW->planes
	                          : 0))) {
		w_delete(winW);
		if (iconW)
			w_delete(iconW);
		w_exit();
		fprintf(stderr, "%s: failed to allocate bitmap\n", argv[0]);
		exit(EXIT_FAILURE);
	}
	/* Allocate black and white pixels */
	for (blackpixel = 0; blackpixel < serverW->sharedcolors; blackpixel++)
		if (!w_getColor(winW, blackpixel,
		                &(color.red), &(color.green), &(color.blue))) {
			if ((color.red <= 0x0FU)
			 && (color.green <= 0x0FU)
			 && (color.blue <= 0x0FU))
				break;
		}
	if (blackpixel == serverW->sharedcolors)
		blackpixel = w_allocColor(winW, 0x00U, 0x00U, 0x00U);
	if (blackpixel < 0) {
		if (bpp > 1)
			fprintf(stderr,
			        "W: can't allocate black pixel -- using index 1\n");
		blackpixel = 1;
	}
	color.red = color.green = color.blue = 0x00U;
	if (bitmapW->palette)
		bitmapW->palette[blackpixel] = color;
	for (whitepixel = 0; whitepixel < serverW->sharedcolors; whitepixel++)
		if (!w_getColor(winW, whitepixel,
		                &(color.red), &(color.green), &(color.blue))) {
			if ((color.red >= 0xF0U)
			 && (color.green >= 0xF0U)
			 && (color.blue >= 0xF0U))
				break;
		}
	if (whitepixel == serverW->sharedcolors)
		whitepixel = w_allocColor(winW, 0xFFU, 0xFFU, 0xFFU);
	if (whitepixel < 0) {
		if (bpp > 1)
			fprintf(stderr,
			        "W: can't allocate white pixel -- using index 0\n");
		whitepixel = 0;
	}
	color.red = color.green = color.blue = 0xFFU;
	if (bitmapW->palette)
		bitmapW->palette[whitepixel] = color;
	for (int x=0; x < 24; x++) {
		palette[x] = palette2[x] = whitepixel;
	}
	if (indexedcolor && (bpp > 1)) {
		/* Pre-initialize the colormap to known values */
		oldbgcolor = currentbgcolor = NES_palette[0];
		color.red = ((NES_palette[0] & 0xFF0000) >> 16);
		color.green = ((NES_palette[0] & 0xFF00) >> 8);
		color.blue = (NES_palette[0] & 0xFF);
		for (int x = 0; x <= 24; x++) {
			palette[x] =
			  w_allocColor(winW, color.red, color.green, color.blue);
			palette2[x] = blackpixel;
			if (palette[x] < 0) {
				if (winW != WROOT)
					w_delete(winW);
				if (iconW)
					w_delete(iconW);
				w_exit();
				fprintf(stderr, "Can't allocate colors!\n");
				exit(EXIT_FAILURE);
			} else if (bitmapW->palette)
				bitmapW->palette[palette[x]] = color;
		}
		if (scanlines && (scanlines != 100)) {
			fprintf(stderr, "Warning: Scanline intensity is ignored in indexed-color modes!\n");
			scanlines = 0;
		}
	} else /* truecolor */ {
Example #4
0
int main(int argc, char *argv[])
{
	//usage error check
	if(argc < 2) { printf("usage : ./server <port number>\n"); exit(1); }
	//make port number
	int server_port = atoi(argv[1]);
	
	//socket variables
	int chat_sd;
	int game_sd;
	int listen_sd;
	struct sockaddr_in addr;
	struct timeval timeout;
	fd_set select_result;
	int on=1;
	
	//pthread variables
	pthread_t thr;

	//etc variables
	int i, j, buf_len, rc;
	int x, y, winner;
	char buffer[4096];
	char smbuf[5];

	//server init
	listen_sd = socket(AF_INET, SOCK_STREAM, 0);
	if(listen_sd<0){printf("socket error\n"); exit(2);}
	rc = setsockopt(listen_sd, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on));
	if(rc<0){printf("setsockopt error\n"); exit(2);}

	memset(&addr, 0, sizeof(addr));
	addr.sin_family 		= AF_INET;
	addr.sin_addr.s_addr 	= htonl(INADDR_ANY);
	addr.sin_port			= htons(server_port);

	rc = bind(listen_sd, (struct sockaddr *)&addr, sizeof(addr));
	if(rc < 0){printf("bind error\n"); exit(3);} 

	rc = listen(listen_sd, 32);
	if(rc < 0){printf("listen error\n"); exit(4);}

	init_set();
	add_to_set(listen_sd);

	//timeval init
	timeout.tv_sec = 3*60;
	timeout.tv_usec = 0;

	//Waiting client
	printf("Waiting client\n");
	chat_sd = accept(listen_sd, (struct sockaddr *)NULL, NULL);
	add_to_set(chat_sd);
	printf("accept chat_sd\n");

	game_sd = accept(listen_sd, (struct sockaddr *)NULL, NULL);
	add_to_set(game_sd);
	printf("accept game_sd\n");
	
	//ncurses init
	window=initscr();
	keypad(stdscr,TRUE);
	mousemask(BUTTON1_RELEASED, NULL);


	//game init
	initlog();
	init_board();
	while(1)
	{
		//your turn
		
		addlog(" < YOUR TURN > ", 3, 1);

		//make thread to check mouse
		pipe(pipefd);
		add_to_set(pipefd[0]);
		pthread_create(&thr, NULL, thr_mouse, NULL);
		while(1)
		{
			printall(1);
			memcpy(&select_result, &master_set, sizeof(master_set));
			rc = select(max_sd+1,&select_result, NULL,NULL, &timeout);
			if(rc<0) s_exit(5);
			if(rc==0) s_exit(6); //timecheck error
			if(FD_ISSET(game_sd, &select_result)) w_exit(-1);
			else if(FD_ISSET(pipefd[0],&select_result))
			{
				read(pipefd[0],smbuf,2);
				pthread_cancel(thr);
				y=smbuf[0];
				x=smbuf[1];
				board[y][x] = 1;
				send(game_sd,smbuf,2,0);
				if(winner = finish_board())
					w_exit(winner);
				break;

			}
			else if(FD_ISSET(chat_sd, &select_result))
			{
				rc = recv(chat_sd, buffer, 4096, 0);
				if(rc<0) s_exit(7);	//recv error
				if(rc == 0) w_exit(-1); //disconnected
				buffer[rc]='\0';
				addlog(buffer, 2, 1);
			}
		}
		//opp turn
		
		while(1)
		{
			printall(2);
			memcpy(&select_result, &master_set, sizeof(master_set));
			rc = select(max_sd+1, &select_result, NULL,NULL,&timeout);
			if(rc<0) s_exit(5);
			if(rc==0) s_exit(6); //timeout;
			if(FD_ISSET(game_sd, &select_result))
			{
				rc = recv(game_sd, smbuf,2 ,0);
				if(rc<0) s_exit(7); //recv error
				if(rc==0) w_exit(-1); //disconnected
				if(smbuf[0] == 't')
				{
					addlog("Opponent timeout", 3, 2);
					break;
				}
				else
				{
					y = smbuf[0];
					x = smbuf[1];
					board[y][x] = 2;
					if(winner = finish_board())
						w_exit(winner);
					break;
				}
			}
			else if(FD_ISSET(chat_sd, &select_result))
			{
				rc = recv(chat_sd, buffer, 4096,0);
				if(rc<0) s_exit(7);
				if(rc == 0) w_exit(-1);
				buffer[rc]= '\0';
				addlog(buffer, 2, 2);
			}
		}
	}
	
	s_exit(0);
}