X-Git-Url: http://winboard.nl/cgi-bin?p=capablanca.git;a=blobdiff_plain;f=lasker-2.2.3%2Fsrc%2Fseekproc.c;h=399dfbe2cf378554bfcb6747b73eef39fc7b971f;hp=e065cef529327563f30215da30880be57cc80a48;hb=c132554b3ef68b4b728c3a8334a379c22f626415;hpb=707e46a1e2dba3ef53b97c63520d50f4ecc3996b diff --git a/lasker-2.2.3/src/seekproc.c b/lasker-2.2.3/src/seekproc.c index e065cef..399dfbe 100644 --- a/lasker-2.2.3/src/seekproc.c +++ b/lasker-2.2.3/src/seekproc.c @@ -24,7 +24,7 @@ enum { SEEKOPEN = 0, SEEKCLOSED }; /* The values of the follwing enums cannot be changed as they will end up */ /* Being seen by the client- we can add values later but the ones */ /* Here, after being documented, have to be here forever */ -enum { LIGHTNING = 0, STANDARD, BLITZ, UNTIMED }; +enum { UNTIMED = 0, BLITZ, STANDARD, NONSTANDARD, WILD, LIGHTNING }; #undef BLACK #undef WHITE @@ -40,7 +40,8 @@ int com_seek(int p, param_list param) int p1, count = 0; int num; /* sought ID */ char *msgtxt; - char board[1], category[1]; + char board[100], category[100]; + int wt, bt, winc, binc, rated, white; srandom(time(0)); @@ -64,9 +65,45 @@ int com_seek(int p, param_list param) pprintf(p, "ERROR: Sorry, all available slots for seek are closed.\n"); return COM_OK; } - seek_globals.ads[num].status = SEEKCLOSED; seek_globals.ads[num].whofrom = p; +#if 1 + // [HGM] attempt to make seek as powerful as match + wt = bt = winc = binc = -1; + board[0] = category[0] = '\0'; + white = rated = -1; + if (param[0].type != TYPE_NULL) { + if (!parse_match_string(p, &wt,&bt,&winc,&binc,&white,&rated,category, + board,param[0].val.string)) + return COM_OK; /* couldn't parse */ + } + + seek_globals.ads[num].status = SEEKCLOSED; // params are valid; create ad + + if(wt < 0) wt = pp->d_time; if(bt < 0) bt = wt; + if(winc < 0) winc = pp->d_inc; if(binc < 0) binc = bt; + seek_globals.ads[num].wtime = wt; + seek_globals.ads[num].btime = bt; + seek_globals.ads[num].winc = winc; + seek_globals.ads[num].binc = binc; + + if (rated != -1) { + if (!rated || !CheckPFlag(p, PFLAG_REG) || seek_globals.ads[num].wtime == 0) + seek_globals.ads[num].rated = UNRATED; /* unrated */ + else if (rated) + seek_globals.ads[num].rated = RATED; /* rated */ + } else + seek_globals.ads[num].rated = BoolCheckPFlag(p, PFLAG_RATED); + + + if (white != -1) { + seek_globals.ads[num].seek_color = white ? WHITE : BLACK; + } else + seek_globals.ads[num].seek_color = random() % 2; + +#else + seek_globals.ads[num].status = SEEKCLOSED; + if (param[0].type == TYPE_INT) seek_globals.ads[num].wtime = param[0].val.integer; /* White time */ else @@ -100,6 +137,7 @@ int com_seek(int p, param_list param) category[0]='\0'; board[0]='\0'; /* FIXME- use proper values */ +#endif seek_globals.ads[num].category = strdup(category); seek_globals.ads[num].board_type = strdup(board); @@ -190,7 +228,7 @@ void withdraw_seeks(int p) continue; pprintf_prompt(p1, "AD_DESTROY: %d\n", i); } - pprintf(p, "AD_DESTROY: %d\n", i); + pprintf(p, "Ads removed: %d\n", i); FREE(seek_globals.ads[i].category); FREE(seek_globals.ads[i].board_type); } @@ -223,7 +261,7 @@ static int get_empty_seekslot(void) static char *form_ad(struct pending * ad, int i) { - char *final; + char *final, buf[100]; int rating, total, type; total = ad->wtime * 60 + ad->winc * 40; @@ -242,6 +280,12 @@ static char *form_ad(struct pending * ad, int i) rating = player_globals.parray[ad->whofrom].b_stats.rating; } + if(ad->category[0]) { // [HGM] print category with seek ad + sprintf(buf, " %s", ad->category); + if(ad->board_type[0] && strcmp(ad->board_type, "0")) + sprintf(buf + strlen(buf), " %s", ad->board_type); + } else strcpy(buf, TypeStrings[type]); // [HGM] replaced color by type here... + asprintf(&final, "%3u %4u %-17s %3u %3u %-7s %-10s\n", i, rating, @@ -249,7 +293,7 @@ static char *form_ad(struct pending * ad, int i) ad->wtime, ad->winc, ad->rated?"rated":"unrated", - TypeStrings[ad->seek_color]); + buf); return final; }