int main(int argc, char *argv[]) { int i, t = 0; uint32 done = 0; char ch, benchmark = 0, noinput = 0; hd_engine *engine; circle_object obj[6]; for (i = 1; i < argc; i++) { if (*argv[i] == '-') { if (strcmp("benchmark", argv[i]+1) == 0) benchmark = 1; if (strcmp("noinput", argv[i]+1) == 0) noinput = 1; } } noinput = noinput && benchmark; #ifndef IPOD if (SDL_Init(SDL_INIT_VIDEO) < 0) { fprintf(stderr,"Unable to init SDL: %s\n",SDL_GetError()); exit(1); } atexit(SDL_Quit); screen = SDL_SetVideoMode(WIDTH, HEIGHT,16,SDL_SWSURFACE); if (screen == NULL) { fprintf(stderr,"Unable to init SDL video: %s\n",SDL_GetError()); exit(1); } engine = HD_Initialize (WIDTH, HEIGHT, 16, screen->pixels, update); #define IMGPREFIX "" #else HD_LCD_Init(); HD_LCD_GetInfo (0, &WIDTH, &HEIGHT, 0); screen = xmalloc (WIDTH * HEIGHT * 2); engine = HD_Initialize (WIDTH, HEIGHT, 16, screen, update); #define IMGPREFIX "" #endif obj[4].object = HD_PNG_Create (IMGPREFIX "bg.png"); obj[4].object->x = 0; obj[4].object->y = 0; obj[4].object->w = WIDTH; obj[4].object->h = HEIGHT; obj[0].object = HD_PNG_Create (IMGPREFIX "photos.png"); obj[0].object->x = 0; obj[0].object->y = 0; obj[0].object->w = 75 * WIDTH / 220; obj[0].object->h = 150 * WIDTH / 220; obj[1].object = HD_PNG_Create (IMGPREFIX "music.png"); obj[1].object->x = 0; obj[1].object->y = 0; obj[1].object->w = 75 * WIDTH / 220; obj[1].object->h = 150 * WIDTH / 220; obj[2].object = HD_PNG_Create (IMGPREFIX "dvd.png"); obj[2].object->x = 0; obj[2].object->y = 0; obj[2].object->w = 75 * WIDTH / 220; obj[2].object->h = 150 * WIDTH / 220; obj[3].object = HD_PNG_Create (IMGPREFIX "movies.png"); obj[3].object->x = 0; obj[3].object->y = 0; obj[3].object->w = 75 * WIDTH / 220; obj[3].object->h = 150 * WIDTH / 220; obj[5].object = HD_Canvas_Create (100, 100); obj[5].object->x = 100; obj[5].object->y = 100; HD_Register(engine,obj[4].object); HD_Register(engine,obj[0].object); HD_Register(engine,obj[1].object); HD_Register(engine,obj[2].object); HD_Register(engine,obj[3].object); if (obj[5].object) HD_Register(engine,obj[5].object); obj[0].position = 0; obj[1].position = 1024; obj[2].position = 2048; obj[3].position = 3072; object_topwid = ((50 * WIDTH / 220) << 16) / obj[0].object->w; object_bottomwid = ((70 * WIDTH / 220) << 16) / obj[0].object->w; if (benchmark) { HD_AnimateCircle(obj[0].object, 80 * WIDTH / 220, 50 * HEIGHT / 176, 50 * HEIGHT / 176, object_topwid, object_bottomwid, obj[0].position, 4096, -100); HD_AnimateCircle(obj[1].object, 80 * WIDTH / 220, 50 * HEIGHT / 176, 50 * HEIGHT / 176, object_topwid, object_bottomwid, obj[1].position, 4096, -100); HD_AnimateCircle(obj[2].object, 80 * WIDTH / 220, 50 * HEIGHT / 176, 50 * HEIGHT / 176, object_topwid, object_bottomwid, obj[2].position, 4096, -100); HD_AnimateCircle(obj[3].object, 80 * WIDTH / 220, 50 * HEIGHT / 176, 50 * HEIGHT / 176, object_topwid, object_bottomwid, obj[3].position, 4096, -100); } else { circle_rotate(&obj[0], 1); circle_rotate(&obj[1], 1); circle_rotate(&obj[2], 1); circle_rotate(&obj[3], 1); } #ifdef IPOD uint32 srtc = *(volatile uint32 *)0x60005010; set_keypress(); fd_set rd; struct timeval tv; int n; #endif while(!done) { if (!benchmark && (ch = check_pending()) && !obj[0].object->animating) { circle_rotate(&obj[0], ch); circle_rotate(&obj[1], ch); circle_rotate(&obj[2], ch); circle_rotate(&obj[3], ch); } #ifndef IPOD SDL_Event event; while(SDL_PollEvent(&event)) { switch(event.type) { case SDL_KEYDOWN: switch(event.key.keysym.sym) { case SDLK_SPACE: case SDLK_BACKSPACE: case SDLK_DOWN: case SDLK_UP: break; case SDLK_RIGHT: if (benchmark) break; if (obj[0].object->animating) { add_pending(1); break; } circle_rotate(&obj[0], 1); circle_rotate(&obj[1], 1); circle_rotate(&obj[2], 1); circle_rotate(&obj[3], 1); break; case SDLK_LEFT: if (benchmark) break; if (obj[0].object->animating) { add_pending(-1); break; } circle_rotate(&obj[0], -1); circle_rotate(&obj[1], -1); circle_rotate(&obj[2], -1); circle_rotate(&obj[3], -1); break; case SDLK_ESCAPE: done = 1; break; default: break; } break; case SDL_QUIT: return(0); break; default: break; } } SDL_Delay (30); #else #define SCROLL_MOD_NUM 24 // 100/25 - 1 #define SCROLL_MOD(n) \ ({ \ static int sofar = 0; \ int use = 0; \ if (++sofar >= n) { \ sofar -= n; \ use = 1; \ } \ (use == 1); \ }) if (!noinput) { FD_ZERO(&rd); FD_SET(0, &rd); tv.tv_sec = 0; tv.tv_usec = 100; n = select(0+1, &rd, NULL, NULL, &tv); if (FD_ISSET(0, &rd) && (n > 0)) { read(0, &ch, 1); switch(ch) { case 'm': done = 1; break; case 'r': if (SCROLL_MOD(SCROLL_MOD_NUM)) { if (benchmark) break; if (obj[0].object->animating) { add_pending(1); break; } circle_rotate(&obj[0], 1); circle_rotate(&obj[1], 1); circle_rotate(&obj[2], 1); circle_rotate(&obj[3], 1); } break; case 'l': if (SCROLL_MOD(SCROLL_MOD_NUM)) { if (benchmark) break; if (obj[0].object->animating) { add_pending(-1); break; } circle_rotate(&obj[0], -1); circle_rotate(&obj[1], -1); circle_rotate(&obj[2], -1); circle_rotate(&obj[3], -1); } break; case 'w': case 'f': case 'd': default: break; } } } #endif t++; if (benchmark && t > 200) done = 1; HD_Animate (engine); #ifndef IPOD if( SDL_MUSTLOCK(screen) ) SDL_LockSurface(screen); #endif HD_Render(engine); #ifndef IPOD if( SDL_MUSTLOCK(screen) ) SDL_UnlockSurface(screen); #endif } #ifdef IPOD HD_LCD_Quit(); uint32 ertc = *(volatile uint32 *)0x60005010; printf ("%d frames in %d microseconds = %d.%02d frames/sec\n", t, ertc - srtc, 1000000 * t / (ertc - srtc), (1000000 * t / ((ertc - srtc) / 100)) % 100); sleep (5); reset_keypress(); #endif HD_Deinitialize(engine); return(0); }
int com_match(int p, param_list param) { struct player *pp = &player_globals.parray[p]; int adjourned; /* adjourned game? */ int g; /* more adjourned game junk */ int p1; int bh = 0, partner = 0, pp1 = 0; struct pending* pendfrom; struct pending* pendto; struct pending* pend; int wt = -1; /* white start time */ int winc = -1; /* white increment */ int bt = -1; /* black start time */ int binc = -1; /* black increment */ int rated = -1; /* 1 = rated, 0 = unrated */ int white = -1; /* 1 = want white, 0 = want black */ char category[100], board[100]; textlist *clauses = NULL; int type = 0; category[0] ='\0'; board[0] ='\0'; if ((pp->game >= 0) && ((game_globals.garray[pp->game].status == GAME_EXAMINE) || (game_globals.garray[pp->game].status == GAME_SETUP))) { pprintf(p, "You can't challenge while you are examining a game.\n"); return COM_OK; } if (pp->game >= 0) { pprintf(p, "You can't challenge while you are playing a game.\n"); return COM_OK; } /* Makes sure that the user has not been ratebanned - Added by johnthegreat*/ if (in_list(p, L_RATEBAN, player_globals.parray[p].name)) { pprintf_prompt(p,"You are banned from playing rated games."); return COM_OK; } stolower(param[0].val.word); p1 = player_find_part_login(param[0].val.word); if (p1 < 0) { pprintf(p, "No user named \"%s\" is logged in.\n", param[0].val.word); return COM_OK; } if (p1 == p) { /* Allowing to match yourself to enter analysis mode */ //ExamineScratch (p, param, 0); pprintf(p, "Your can not match yourself.\n"); return COM_OK; } if (!CheckPFlag(p1, PFLAG_OPEN)) { pprintf(p, "Player \"%s\" is not open to match requests.\n", player_globals.parray[p1].name); return COM_OK; } if (player_globals.parray[p1].game >= 0) { pprintf(p, "Player \"%s\" is playing a game.\n", player_globals.parray[p1].name); return COM_OK; } if (CheckPFlag(p, PFLAG_TOURNEY) && !CheckPFlag(p1, PFLAG_TOURNEY)) { pprintf(p, "You may only match players with their tournament variable set.\n"); return COM_OK; } if (!CheckPFlag(p, PFLAG_TOURNEY) && CheckPFlag(p1, PFLAG_TOURNEY)) { pprintf(p, "%s is in a tournament, and cannot accept other challenges.\n", player_globals.parray[p1].name); return COM_OK; } if (!net_globals.con[pp->socket]->timeseal) { return COM_OK; } if (!CheckPFlag(p, PFLAG_OPEN)) { PFlagON(p, PFLAG_OPEN); pprintf(p, "Setting you open for matches.\n"); } /* look for an adjourned game between p and p1 */ g = game_new(); adjourned = (game_read(g, p, p1) >= 0) || (game_read(g, p1, p) >= 0); if (adjourned) { type = game_globals.garray[g].type; wt = game_globals.garray[g].wInitTime / 60000; bt = game_globals.garray[g].bInitTime / 60000; winc = game_globals.garray[g].wIncrement / 1000; binc = game_globals.garray[g].bIncrement / 1000; rated = game_globals.garray[g].rated; } game_remove(g); pendto = find_pend(p, p1, PEND_MATCH); pendfrom = find_pend(p1, p, PEND_MATCH); if (!adjourned) { if (player_censored(p1, p)) { pprintf(p, "Player \"%s\" is censoring you.\n", player_globals.parray[p1].name); return COM_OK; } if (player_censored(p, p1)) { pprintf(p, "You are censoring \"%s\".\n", player_globals.parray[p1].name); return COM_OK; } if (in_list(p1, L_NOPLAY, pp->name)) { pprintf(p, "You are on %s's noplay list.\n", player_globals.parray[p1].name); return COM_OK; } if (in_list(p, L_NOPLAY, player_globals.parray[p1].name)) { pprintf(p, "You have %s on your noplay list.\n", player_globals.parray[p1].name); return COM_OK; } /* Makes sure that the opponent has not been ratebanned - Added by johnthegreat*/ if (in_list(p1, L_RATEBAN, player_globals.parray[p1].name)) { pprintf(p,"%s has been banned from playing rated games.",player_globals.parray[p1].name); return COM_OK; } if (CheckPFlag(p1, PFLAG_WHITELIST) && !player_isAllowedPlay(p1, p)) { struct player *pp2 = player_getStruct(p1); pprintf(p, "%s is not allowing requests from you.\n", pp2->name); return COM_OK; } if (param[1].type != TYPE_NULL) { if (!parse_match_string(p, &wt,&bt,&winc,&binc,&white,&rated,category, board,param[1].val.string)) return COM_OK; /* couldn't parse */ } if (rated == -1) rated = BoolCheckPFlag(p, PFLAG_RATED); if (!CheckPFlag(p, PFLAG_REG) || !CheckPFlag(p1, PFLAG_REG)) rated = 0; if (winc == -1) winc = (wt == -1) ? pp->d_inc : 0; /* match 5 == match 5 0 */ if (wt == -1) wt = pp->d_time; if (bt == -1) bt = wt; if (binc == -1) binc = winc; if (category[0]) { if (!board[0] && strcmp(category,"bughouse") && strcmp(category,"zh")) { pprintf(p, "You must specify a board and a category.\n"); return COM_OK; } else if (board[0]) { char fname[MAX_FILENAME_SIZE]; if (!strcmp(board,"FR")) sprintf(fname, "%s/%s", BOARD_DIR, board); else sprintf(fname, "%s/%s/%s", BOARD_DIR, category, board); if (!file_exists(fname)) { pprintf(p, "No such category/board: %s/%s\n", category, board); return COM_OK; } } } type = game_isblitz(category,board); if (type == TYPE_BUGHOUSE) { if (rated && pp->partner >= 0 && player_globals.parray[p1].partner >= 0) { if (!CheckPFlag(pp->partner, PFLAG_REG) || !CheckPFlag(player_globals.parray[p1].partner, PFLAG_REG)) rated = 0; } } if (rated && (type == TYPE_NONSTANDARD)) { pprintf(p, "Game is non-standard - reverting to unrated\n"); rated = 0; } if (rated && (type == TYPE_UNTIMED)) { pprintf(p, "Game is untimed - reverting to unrated\n"); rated = 0; } if ((pendfrom == NULL) && !CheckPFlag(p1, PFLAG_ROPEN) && (rated != BoolCheckPFlag(p1, PFLAG_RATED))) { pprintf(p, "%s only wants to play %s games.\n", player_globals.parray[p1].name, rstr[!rated]); pprintf_highlight(p1, "Ignoring"); pprintf(p1, " %srated match request from %s.\n", (rated ? "" : "un"), pp->name); return COM_OK; } /* Now check formula. */ if (!adjourned && !GameMatchesFormula(p,p1, wt,winc,bt,binc, rated, type, &clauses)) { pprintf(p, "Match request does not fit formula for %s:\n", player_globals.parray[p1].name); pprintf(p, "%s's formula: %s\n", player_globals.parray[p1].name, player_globals.parray[p1].formula); ShowClauses (p, p1, clauses); ClearTextList(clauses); pprintf_highlight(p1, "Ignoring"); pprintf_prompt(p1, " (formula): %s (%d) %s (%d) %s.\n", pp->name, GetRating(&player_globals.parray[p], type), player_globals.parray[p1].name, GetRating(&player_globals.parray[p1], type), game_str(rated, wt * 60, winc, bt * 60, binc, category, board)); return COM_OK; } if (type == TYPE_BUGHOUSE) { bh = 1; partner = pp->partner; pp1 = player_globals.parray[p1].partner; if (pp < 0) { pprintf(p, "You have no partner for bughouse.\n"); return COM_OK; } if (pp1 < 0) { pprintf(p, "Your opponent has no partner for bughouse.\n"); return COM_OK; } if (partner == pp1) { /* should be an impossible case - DAV */ pprintf(p, "You and your opponent both chose the same partner!\n"); return COM_OK; } if (partner == p1 || pp1 == p) { pprintf(p, "You and your opponent can't choose each other as partners!\n"); return COM_OK; } if (player_globals.parray[partner].partner != p) { /* another impossible case - DAV */ pprintf(p, "Your partner hasn't chosen you as his partner!\n"); return COM_OK; } if (player_globals.parray[pp1].partner != p1) { /* another impossible case - DAV */ pprintf(p, "Your opponent's partner hasn't chosen your opponent as his partner!\n"); return COM_OK; } if (!CheckPFlag(partner, PFLAG_OPEN) || player_globals.parray[partner].game >= 0) { pprintf(p, "Your partner isn't open to play right now.\n"); return COM_OK; } if (!CheckPFlag(pp1, PFLAG_OPEN) || player_globals.parray[pp1].game >= 0) { pprintf(p, "Your opponent's partner isn't open to play right now.\n"); return COM_OK; } /* Bypass NOPLAY lists, censored lists, ratedness, privacy, and formula for now */ /* Active challenger/ee will determine these. */ } /* Ok match offer will be made */ } /* adjourned games shouldn't have to worry about that junk? */ /* keep incase of adjourned bughouse in future*/ if (pendto != NULL) { pprintf(p, "Updating offer already made to \"%s\".\n", player_globals.parray[p1].name); } if (pendfrom != NULL) { if (pendto != NULL) { pprintf(p, "Pending list error!.\n"); d_printf( "CHESSD: This shouldn't happen. You can't have a match pending from and to the same person.\n"); return COM_OK; } if (adjourned || ((wt == pendfrom->btime) && (winc == pendfrom->binc) && (bt == pendfrom->wtime) && (binc == pendfrom->winc) && (rated == pendfrom->rated) && ((white == -1) || (white + pendfrom->seek_color == 1)) && (!strcmp(category, pendfrom->category)) && (!strcmp(board, pendfrom->board_type)))) { /* Identical match, should accept! */ accept_match(pendfrom,p, p1); return COM_OK; } else { delete_pending(pendfrom); } } if (pendto == NULL) pend = add_pending(p,p1,PEND_MATCH); else pend = pendto; pend->wtime = wt; pend->winc = winc; pend->btime = bt; pend->binc = binc; pend->rated = rated; pend->seek_color = white; pend->game_type = type; pend->category = strdup(category); pend->board_type = strdup (board); if (pendfrom != NULL) { pprintf(p, "Declining offer from %s and offering new match parameters.\n", player_globals.parray[p1].name); pprintf(p1, "\n%s declines your match offer a match with these parameters:", pp->name); } if (pendto != NULL) { pprintf(p, "Updating match request to: "); pprintf(p1, "\n%s updates the match request.\n", pp->name); } else { pprintf(p, "Issuing: "); pprintf(p1, "\n"); } pprintf(p, "%s (%s) %s", pp->name, ratstrii(GetRating(&player_globals.parray[p], type), p), colorstr[white + 1]); pprintf_highlight(p, "%s", player_globals.parray[p1].name); pprintf(p, " (%s) %s%s.\n", ratstrii(GetRating(&player_globals.parray[p1], type), p1), game_str(rated, wt , winc, bt , binc, category, board), adjustr[adjourned]); pprintf(p1, "Challenge: "); pprintf_highlight(p1, "%s", pp->name); pprintf(p1, " (%s) %s", ratstrii(GetRating(&player_globals.parray[p], type), p), colorstr[white + 1]); pprintf(p1, "%s (%s) %s%s.\n", player_globals.parray[p1].name, ratstrii(GetRating(&player_globals.parray[p1], type), p1), game_str(rated, wt , winc, bt , binc, category, board), adjustr[adjourned]); Bell (p1); if (bh) { pprintf(partner, "\nYour bughouse partner issuing %s (%s) %s", pp->name, ratstrii(GetRating(&player_globals.parray[p], type), p), colorstr[white + 1]); pprintf_highlight(partner, "%s", player_globals.parray[p1].name); pprintf(partner, " (%s) %s.\n", ratstrii(GetRating(&player_globals.parray[p1], type), p1), game_str(rated, wt , winc, bt , binc, category, board)); pprintf(partner, "Your game would be "); pprintf_highlight(partner, "%s", player_globals.parray[pp1].name); pprintf_prompt(partner, " (%s) %s%s (%s) %s.\n", ratstrii(GetRating(&player_globals.parray[pp1], type), pp1), colorstr[white + 1], player_globals.parray[partner].name, ratstrii(GetRating(&player_globals.parray[partner], type), partner), game_str(rated, wt , winc, bt , binc, category, board)); Bell (partner); pprintf(pp1, "\nYour bughouse partner was challenged "); pprintf_highlight(pp1, "%s", pp->name); pprintf(pp1, " (%s) %s", ratstrii(GetRating(&player_globals.parray[p], type), p), colorstr[white + 1]); pprintf(pp1, "%s (%s) %s.\n", player_globals.parray[p1].name, ratstrii(GetRating(&player_globals.parray[p1], type), p1), game_str(rated, wt , winc, bt , binc, category, board)); pprintf(pp1, "Your game would be %s (%s) %s", player_globals.parray[pp1].name, ratstrii(GetRating(&player_globals.parray[pp1], type), pp1), colorstr[white + 1]); pprintf_highlight(pp1, "%s", player_globals.parray[partner].name); pprintf_prompt(pp1, " (%s) %s.\n", ratstrii(GetRating(&player_globals.parray[partner], type), partner), game_str(rated, wt , winc, bt , binc, category, board)); Bell(pp1); } check_lists_match (p,p1); print_match_rating_info (p,p1,type,rated); pprintf_prompt(p1, "You can \"accept\" or \"decline\", or propose different parameters.\n"); return COM_OK; }