From: H.G.Muller Date: Wed, 28 Dec 2016 16:01:16 +0000 (+0100) Subject: Print setup and piece commands in engine-defined variants X-Git-Url: http://winboard.nl/cgi-bin?a=commitdiff_plain;h=d5930321138c6673e69d8aca9e9d5c2b99e0d28d;p=crazywa.git Print setup and piece commands in engine-defined variants A setup command with the start position is now sent whenever a variant is initialized, and ptc[] contains a piece-to-char table for that variant. In addition, piece commands are sent when betza[] contains move definitions for that variant. --- diff --git a/dropper.c b/dropper.c index 1e2516f..29f632c 100644 --- a/dropper.c +++ b/dropper.c @@ -329,6 +329,26 @@ shogiProms[16] = { Z_MUST, Z_2ND, COLOR, 0, Z_MUST, Z_MUST, Z_2ND }, toriProms[16] = { Z_MUST, 0, 0, 0, 0, Z_MUST }, waProms[16] = { Z_MUST, Z_2ND, Z_MUST, Z_MUST, Z_MUST, COLOR, COLOR, Z_MUST, Z_MUST, Z_MUST, COLOR, Z_MUST, COLOR, Z_MUST }; +char *betza[] = { // piece defs for sending to GUI + NULL, // suppresses setup command + "", + "", + NULL, + ",P& fW,L& fWbF,U& fWbF,C& fFsW,G& fFvW,M& fFvW,D& fFbsW,V& FfW,W& WfF,O& fR,H& fRbW2,S& sRvW,F& BfW,E& vRfF3bFsW,R& fRFbW,X& FAvWvD" + ",+P& WfF,+L& vRfF3bFsW,+U& BfW,+C& vRfFsW,+G& sRvW,+M& FfW,+D& WfF,+V& FfsW,+W& K,+O& K,+H& vN,+S& R,+F& BvRsW,+R& FAvWvD", + ",S& fW,P& fDbF,L& fRbrBblF,R& fRblBbrF,C& FvW,F& FfsW,+S& fAbD,+F& fBbRbF2fsW", +}; + +char *ptc[] = { // XBoard 4.9 piece-to-char table + NULL, + "P.BR.S...G.+.++.+Kp.br.s...g.+.++.+k", + "PNBR.S...G.++++.+Kpnbr.s...g.++++.+k", + NULL, + "P..^S^FV..^LW^OH.F.^R.E....R...D.GOL^M..^H.M.C.^CU.^W../.......^V.^P.^U..^DS.^GXK" + "p..^s^fv..^lw^oh.f.^r.e....r...d.gol^m..^h.m.c.^cu.^w../.......^v.^p.^u..^ds.^gxk", + "S.....F..........^F.P........^S....L........C......RKs.....f..........^f.p........^s....l........c......rk" +}; + typedef struct { int files, ranks, hand, zone; char *name; @@ -408,7 +428,7 @@ void GameInit (char *name) { int v, *ip, i, color, r, f, zone; - unsigned char *moves, *codes; char c; + unsigned char *moves, *codes; char c, *p; // determine variant parameters if(sscanf(name, "%dx%d+%d_%c", &f, &r, &i, &c) == 4) { @@ -425,6 +445,12 @@ printf("# variant %d: %s\n", v, variants[v].name); startPos= variants[v].fen; codes = variants[v].proms; + if((p = betza[v])) { // configure GUI for this variant + printf("setup (%s) %dx%d+%d_%s %s 0 1", ptc[v], nrFiles, nrRanks, maxDrop+1, (v == 4 ? "chu" : "shogi"), startPos); + while(*p) { if(*p == ',') printf("\npiece "); else printf("%c", *p); p++; } + printf("\n"); + } + maxDrop += (v==2 || v==1); // Judkins & mini-Shogi have dummy Lance // board