Let seek command accept same parameters as match
[capablanca.git] / lasker-2.2.3 / src / seekproc.c
index e065cef..8a1b9f6 100644 (file)
@@ -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));
@@ -67,6 +68,38 @@ int com_seek(int p, param_list param)
        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 */
+       }
+       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
        if (param[0].type == TYPE_INT)
                seek_globals.ads[num].wtime = param[0].val.integer;     /* White time */
        else
@@ -100,6 +133,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);
 
@@ -223,7 +257,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 +276,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 +289,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;
 }