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; } }
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); }
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 */ {
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); }