From e0ab124da8de6faaa161c8e6118b2b676e922e00 Mon Sep 17 00:00:00 2001 From: Bo Haglund Date: Fri, 28 Feb 2014 20:04:34 -0500 Subject: [PATCH] historical commit dds 2.5.0 --- DLL-dds_243_s.rtf => DLL-dds_250_t.rtf | 415 ++++++++++++++----------- dds.cpp | 148 ++++++++- dll.h | 41 +-- readme.txt | 20 +- release_notes.txt | 5 + 5 files changed, 417 insertions(+), 212 deletions(-) rename DLL-dds_243_s.rtf => DLL-dds_250_t.rtf (70%) diff --git a/DLL-dds_243_s.rtf b/DLL-dds_250_t.rtf similarity index 70% rename from DLL-dds_243_s.rtf rename to DLL-dds_250_t.rtf index c25a9954..68a61403 100644 --- a/DLL-dds_243_s.rtf +++ b/DLL-dds_250_t.rtf @@ -3,14 +3,14 @@ {\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;} {\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} {\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;} -{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f39\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f40\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} -{\f42\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f43\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f44\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f45\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} -{\f46\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f47\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f49\fbidi \fswiss\fcharset238\fprq2 Arial CE;}{\f50\fbidi \fswiss\fcharset204\fprq2 Arial Cyr;} -{\f52\fbidi \fswiss\fcharset161\fprq2 Arial Greek;}{\f53\fbidi \fswiss\fcharset162\fprq2 Arial Tur;}{\f54\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew);}{\f55\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic);} -{\f56\fbidi \fswiss\fcharset186\fprq2 Arial Baltic;}{\f57\fbidi \fswiss\fcharset163\fprq2 Arial (Vietnamese);}{\f379\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}{\f380\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;} -{\f382\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f383\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f386\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}{\f387\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);} -{\f409\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f410\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\f412\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f413\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;} -{\f416\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f417\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\fbiminor\f31507\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f182\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f183\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\f185\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f186\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f187\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f188\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\f189\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f190\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f192\fbidi \fswiss\fcharset238\fprq2 Arial CE;}{\f193\fbidi \fswiss\fcharset204\fprq2 Arial Cyr;} +{\f195\fbidi \fswiss\fcharset161\fprq2 Arial Greek;}{\f196\fbidi \fswiss\fcharset162\fprq2 Arial Tur;}{\f197\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew);}{\f198\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic);} +{\f199\fbidi \fswiss\fcharset186\fprq2 Arial Baltic;}{\f200\fbidi \fswiss\fcharset163\fprq2 Arial (Vietnamese);}{\f522\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}{\f523\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;} +{\f525\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f526\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f529\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}{\f530\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);} +{\f552\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\f553\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\f555\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\f556\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;} +{\f559\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\f560\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} {\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} {\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} {\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} @@ -43,24 +43,25 @@ heading 2;}{\s3\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel2\rin0\li Normal Table;}{\*\cs15 \additive \rtlch\fcs1 \ab\af0\afs32 \ltrch\fcs0 \b\fs32\lang1033\langfe0\kerning32\loch\f31502\hich\af31502\dbch\af31501\langnp1033\langfenp0 \sbasedon10 \slink1 \slocked \spriority9 Rubrik 1 Char;}{\*\cs16 \additive \rtlch\fcs1 \ab\ai\af0\afs28 \ltrch\fcs0 \b\i\fs28\lang1033\langfe0\loch\f31502\hich\af31502\dbch\af31501\langnp1033\langfenp0 \sbasedon10 \slink2 \slocked \ssemihidden \spriority9 Rubrik 2 Char;}{\*\cs17 \additive \rtlch\fcs1 \ab\af0\afs26 \ltrch\fcs0 \b\fs26\lang1033\langfe0\loch\f31502\hich\af31502\dbch\af31501\langnp1033\langfenp0 \sbasedon10 \slink3 \slocked \ssemihidden \spriority9 Rubrik 3 Char;}}{\*\pgptbl {\pgp\ipgp0\itap0\li0\ri0\sb0\sa0}}{\*\rsidtbl \rsid488565\rsid490522\rsid532764 -\rsid556337\rsid617158\rsid750573\rsid876335\rsid930020\rsid940090\rsid1187219\rsid1190356\rsid1191142\rsid1258951\rsid1261441\rsid1445386\rsid1706832\rsid1770393\rsid2060511\rsid2112235\rsid2181632\rsid2260548\rsid2443070\rsid2641133\rsid2894529 -\rsid3347855\rsid3547548\rsid3819803\rsid4460640\rsid4538894\rsid4542728\rsid4602097\rsid4679726\rsid4981561\rsid5332441\rsid5462095\rsid5525810\rsid5712409\rsid6228168\rsid6309374\rsid6309794\rsid6362316\rsid6499600\rsid6569652\rsid6633554\rsid6650094 -\rsid6845226\rsid6950962\rsid7041439\rsid7089377\rsid7167315\rsid7421144\rsid7616262\rsid7683346\rsid7807046\rsid7949161\rsid7952569\rsid8001475\rsid8137115\rsid8527940\rsid8541195\rsid8593145\rsid8799536\rsid8983788\rsid8999377\rsid9047914\rsid9125746 -\rsid9175287\rsid9314635\rsid9515749\rsid9530285\rsid10426263\rsid10631094\rsid11078728\rsid11279197\rsid11297517\rsid12068517\rsid12087407\rsid12156867\rsid12530193\rsid12595779\rsid12732549\rsid12788235\rsid12854747\rsid12982360\rsid12986669 -\rsid13174672\rsid13180120\rsid13316938\rsid13319718\rsid13915886\rsid14095979\rsid14102810\rsid14169293\rsid14295269\rsid14370947\rsid14892228\rsid15031452\rsid15620535\rsid16405367\rsid16470149\rsid16655487}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0 -\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\operator Bo Haglund}{\creatim\yr2012\mo10\dy21\hr14\min22}{\revtim\yr2014\mo2\dy20\hr7\min55}{\version82}{\edmins669}{\nofpages10}{\nofwords3025}{\nofchars16034} -{\nofcharsws19021}{\vern49167}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1417\margr1417\margt1417\margb1417\gutter0\ltrsect +\rsid543320\rsid556337\rsid617158\rsid750573\rsid876335\rsid930020\rsid940090\rsid1187219\rsid1190356\rsid1191142\rsid1258951\rsid1261441\rsid1445386\rsid1706832\rsid1770393\rsid2060511\rsid2112235\rsid2112392\rsid2181632\rsid2260548\rsid2427760 +\rsid2443070\rsid2446079\rsid2641133\rsid2894529\rsid3036029\rsid3347855\rsid3547548\rsid3819803\rsid4460640\rsid4538894\rsid4542728\rsid4602097\rsid4675069\rsid4679726\rsid4981561\rsid5332441\rsid5462095\rsid5525810\rsid5712409\rsid6228168\rsid6309374 +\rsid6309794\rsid6362316\rsid6436444\rsid6499600\rsid6569652\rsid6633554\rsid6650094\rsid6845226\rsid6950962\rsid7041439\rsid7089377\rsid7167315\rsid7421144\rsid7616262\rsid7683346\rsid7807046\rsid7949161\rsid7952569\rsid8000484\rsid8001475\rsid8090374 +\rsid8137115\rsid8527940\rsid8541195\rsid8593145\rsid8799536\rsid8983788\rsid8999377\rsid9002512\rsid9047914\rsid9125746\rsid9175287\rsid9314635\rsid9515749\rsid9530285\rsid9907738\rsid10245607\rsid10426263\rsid10631094\rsid11078728\rsid11279197 +\rsid11297517\rsid12068517\rsid12087407\rsid12156867\rsid12530193\rsid12595779\rsid12732549\rsid12788235\rsid12854747\rsid12982360\rsid12986669\rsid12992185\rsid13174672\rsid13180120\rsid13250408\rsid13316938\rsid13319718\rsid13336457\rsid13714332 +\rsid13915886\rsid14095979\rsid14102810\rsid14169293\rsid14295269\rsid14370947\rsid14892228\rsid15031452\rsid15620535\rsid15821976\rsid16147558\rsid16405367\rsid16470149\rsid16610750\rsid16655487}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0 +\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\operator Bo Haglund}{\creatim\yr2012\mo10\dy21\hr14\min22}{\revtim\yr2014\mo2\dy28\hr22\min10}{\version99}{\edmins829}{\nofpages11}{\nofwords3137}{\nofchars16629} +{\nofcharsws19727}{\vern49167}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1417\margr1417\margt1417\margb1417\gutter0\ltrsect \widowctrl\ftnbj\aenddoc\hyphhotz425\trackmoves0\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\horzdoc\dghspace120\dgvspace120 \dghorigin1701\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale100\rsidroot4538894 \fet0{\*\wgrffmtfilter 2450}\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}} {\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}} {\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9 \pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1053\loch\af1\hich\af1\dbch\af31505\cgrid\langnp1033\langfenp1053 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 Bo Haglund, Bob Richardson -\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid8001475 \hich\af31506\dbch\af31505\loch\f31506 Rev S, 2014-01-18}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid6650094\charrsid13915886 +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid12992185 \hich\af31506\dbch\af31505\loch\f31506 Rev T, 2014-03-01}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid6650094\charrsid13915886 \par \hich\af31506\dbch\af31505\loch\f31506 Latest DLL issue with this description is available at }{\field\flddirty{\*\fldinst {\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 HYPERLINK "http://www.bahnhof.se/wb758135/"}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\lang1053\langfe1053\langnp1053\insrsid4538894\charrsid13915886 {\*\datafield 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b5800000068007400740070003a002f002f007700770077002e006200610068006e0068006f0066002e00730065002f00770062003700350038003100330035002f000000795881f43b1d7f48af2c825dc48527630000 -0000a5ab00000000004b00000079000000000075000b00006d00000000}}}{\fldrslt {\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\ul\cf2\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 http://www.bahnhof.se/wb758135/}}}\sectd \ltrsect +0000a5ab00000000004b00000079000000000075000b00006d000000000b010000}}}{\fldrslt {\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\ul\cf2\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 http://www.bahnhof.se/wb758135/}}}\sectd \ltrsect \linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid6650094\charrsid13915886 \par \par @@ -97,12 +98,18 @@ __declspec(dllimport) int __stdcall CalcAllTables}{\rtlch\fcs1 \af1 \ltrch\fcs0 \par \hich\af37\dbch\af31505\loch\f37 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid7041439\charrsid7041439 \hich\af37\dbch\af31505\loch\f37 struct allParResults *presp);}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid7041439\charrsid488565 \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \par \hich\af31506\dbch\af31505\loch\f31506 extern "C" __declspec(dllimport) int __stdcall SolveAll\hich\af31506\dbch\af31505\loch\f31506 Boards(struct boardsPBN *bop, -\par \hich\af31506\dbch\af31505\loch\f31506 struct solvedBoards *solvedp); }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid12986669\charrsid13915886 -\par +\par \hich\af31506\dbch\af31505\loch\f31506 struct solvedBoards *solvedp); }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid12986669 +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid12992185 +\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid12992185 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid12992185\charrsid12992185 \hich\af37\dbch\af31505\loch\f37 extern "C" __declspec(dllimport) int __stdcall SolveAll}{ +\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid12992185 \hich\af37\dbch\af31505\loch\f37 Chunk}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid13336457 \hich\af37\dbch\af31505\loch\f37 s}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid12992185\charrsid12992185 +\hich\af37\dbch\af31505\loch\f37 (struct boardsPBN *bop, +\par \hich\af37\dbch\af31505\loch\f37 struct solvedBoards *}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid12992185 \hich\af37\dbch\af31505\loch\f37 solved, int chunkSize}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid12992185\charrsid12992185 +\hich\af37\dbch\af31505\loch\f37 );}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid12992185\charrsid13915886 +\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid12986669\charrsid13915886 \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid12986669 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid12986669\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 extern "C" __declspec(dllimport) int __stdcall CalcPar(struct ddTableDeal tableDeal, int vulnerable, struct ddTableResults * tablep, struct parResults *presp); \par -\par \hich\af31506\dbch\af31505\loch\f31506 exter\hich\af31506\dbch\af31505\loch\f31506 n "C" __declspec(dllimport) int __stdcall CalcParPBN(struct ddTableDealPBN tableDealPBN, +\par \hich\af31506\dbch\af31505\loch\f31506 extern "C" __declspec(dllimport) int __stdcall CalcParPBN(struct ddTableDealPBN tableDealPBN, \par \hich\af31506\dbch\af31505\loch\f31506 struct ddTableR}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid2894529 \hich\af31506\dbch\af31505\loch\f31506 esults * tablep, int vulnerable}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid12986669\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 , struct parResults *presp);}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 @@ -112,19 +119,19 @@ extern "C" __declspec(dllimport) int __stdcall CalcPar(struct ddTableDeal tableD \par }\pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1053\loch\af1\hich\af1\dbch\af31505\cgrid\langnp1033\langfenp1053 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \par \hich\af31506\dbch\af31505\loch\f31506 SolveBoard is threa}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid4542728\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 d-safe, so several threads }{\rtlch\fcs1 \af1 \ltrch\fcs0 -\f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 can call SolveBoa\hich\af31506\dbch\af31505\loch\f31506 rd in parallel.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid4538894\charrsid13915886 -\hich\af31506\dbch\af31505\loch\f31506 The actual}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid4542728\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 maximum number is configured at initial start-up, this number is maximum 16. }{ -\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 +\f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 can call SolveBoard in parallel.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid4538894\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 The actual}{\rtlch\fcs1 +\af1 \ltrch\fcs0 \f31506\cf1\insrsid4542728\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 maximum number is configured at initial start-up, this number is maximum 16. }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 + \par \par \hich\af31506\dbch\af31505\loch\f31506 Before SolveBoard can be called, a structure of type "futureTricks" must be declared. \par \par }{\rtlch\fcs1 \ab\af1 \ltrch\fcs0 \b\f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 SolveBoard}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 - returns a status integer, "no fault" means the DLL supplies the trick data in the "futureTricks" type structure.\line Status codes: + returns a status integer, "no fault" means the DLL supplies the trick data in\hich\af31506\dbch\af31505\loch\f31506 the "futureTricks" type structure.\line Status codes: \par \hich\af31506\dbch\af31505\loch\f31506 1=No fault, \par \hich\af31506\dbch\af31505\loch\f31506 -1=Unknown fault, \par \hich\af31506\dbch\af31505\loch\f31506 -2=No of cards = 0, \par \hich\af31506\dbch\af31505\loch\f31506 -3=target > Number of tricks left, -\par \hich\af31506\dbch\af31505\loch\f31506 -\hich\af31506\dbch\af31505\loch\f31506 4=Duplicated cards, +\par \hich\af31506\dbch\af31505\loch\f31506 -4=Duplicated cards, \par \hich\af31506\dbch\af31505\loch\f31506 -5=target < -1, \par \hich\af31506\dbch\af31505\loch\f31506 -7=target >13, \par \hich\af31506\dbch\af31505\loch\f31506 -8=solutions < 1, @@ -132,107 +139,108 @@ extern "C" __declspec(dllimport) int __stdcall CalcPar(struct ddTableDeal tableD \par \hich\af31506\dbch\af31505\loch\f31506 -10=No of cards > 52 \par \hich\af31506\dbch\af31505\loch\f31506 -11=Not used \par \hich\af31506\dbch\af31505\loch\f31506 -12=Suit or rank value out of range for deal.currentTrickSuit or deal.currentTrickRank. -\par \hich\af31506\dbch\af31505\loch\f31506 -13=Card already played in the cur\hich\af31506\dbch\af31505\loch\f31506 rent trick is also defined as a remaining card to play. +\par \hich\af31506\dbch\af31505\loch\f31506 -13=Card already played in the current trick is also defined as a remaining card to play. \par \hich\af31506\dbch\af31505\loch\f31506 -14=Wrong number of remaining cards for a hand. \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid4538894\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 -15=threadIndex < 0 or >=noOfThreads, noOfThreads is the configured maximum number of threads}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 .\line \hich\af31506\dbch\af31505\loch\f31506 \line \hich\f31506 Structure \'94}{\rtlch\fcs1 \ab\af1 \ltrch\fcs0 \b\f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 deal}{ -\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \loch\af31506\dbch\af31505\hich\f31506 \'94\loch\f31506 defines all data needed to describe t\hich\af31506\dbch\af31505\loch\f31506 he deal to be analyzed. +\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \loch\af31506\dbch\af31505\hich\f31506 \'94\loch\f31506 defines all data needed to describe the deal to be analyzed. \par \hich\af31506\dbch\af31505\loch\f31506 struct deal \{}{\rtlch\fcs1 \af0 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 -\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 int trump; /* I.e. which suit that is trump or if contract is NT, Spades=0, Hearts=1, Diamonds=2, Clubs=3, NT=4 */}{\rtlch\fcs1 \af0 -\ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 int trump; /\hich\af31506\dbch\af31505\loch\f31506 +* I.e. which suit that is trump or if contract is NT, Spades=0, Hearts=1, Diamonds=2, Clubs=3, NT=4 */}{\rtlch\fcs1 \af0 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 int first; /* 0-3, 0=North, 1=East, 2=South, 3=West , Leading hand for the trick.*/}{\rtlch\fcs1 \af0 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 -\par \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 int currentTrickSuit[3]; /* 0-2 for up to 3 cards in the order played */ -\par \hich\af31506\dbch\af31505\loch\f31506 int currentTrickRank[3]; /* 2-14 for up to 3 cards */}{\rtlch\fcs1 \af0 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 +\par \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 int currentTrickSuit[3]; /* 0-2 for up to 3 cards in \hich\af31506\dbch\af31505\loch\f31506 +the order played */ +\par \hich\af31506\dbch\af31505\loch\f31506 int currentTrickRank[3]; /* 2-14 for up to 3 cards}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6436444 \hich\af31506\dbch\af31505\loch\f31506 . Suits and ranks set to 0 otherwise.}{\rtlch\fcs1 \af1 +\ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 */}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6436444\charrsid6436444 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 unsigned int remainCards[4][4]; /* 1}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\super\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 st}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 index hand (0-3), 2}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\super\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 nd}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 - index suit (0-3), values as bitstring of ranks bit 0=0, \hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 bit 1=0, bit 2=rank 2, \'85\'85\'85\loch\f31506 . bit 14=rank 14, bit 15=0}{\rtlch\fcs1 \af0 \ltrch\fcs0 + index suit (0-3), values as bitstring of ranks bit 0=0, bit 1=0, bit 2=rank 2\hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 , \'85\'85\'85\loch\f31506 . bit 14=rank 14, bit 15=0}{\rtlch\fcs1 \af0 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 -for cards remaining after already played cards (cards already played to the current trick are not included in this bitstring). \line The decimal value for a card then range between 4 (=rank 2) and 16384 (A\hich\af31506\dbch\af31505\loch\f31506 -ce=rank 14). */}{\rtlch\fcs1 \af0 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 +for cards remaining after already played cards (cards already played to the current trick are not included in this bitstring). \line The decimal value for a card then range between 4 (=rank 2) and 16384 (Ace=rank 14). */}{\rtlch\fcs1 \af0 \ltrch\fcs0 +\f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \}\hich\af31506\dbch\af31505\loch\f31506 ;}{\rtlch\fcs1 \af0 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \par \par \hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 Parameter \'94}{\rtlch\fcs1 \ab\af1 \ltrch\fcs0 \b\f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 target}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \loch\af31506\dbch\af31505\hich\f31506 \'94\loch\f31506 is the number of tricks to be won by the side to play, -1 means that the program}{\rtlch\fcs1 \af0 \ltrch\fcs0 -\f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 -shall find the maximum number. For equivalent cards only the highest is returned. +\f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 shall find the }{\rtlch\fcs1 \af1 \ltrch\fcs0 +\f31506\cf1\insrsid13336457 \hich\af31506\dbch\af31505\loch\f31506 maximum number. For equivalent }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 cards only the highest is returned. \par \line \hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 Parameter \'94}{\rtlch\fcs1 \ab\af1 \ltrch\fcs0 \b\f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 solutions}{\rtlch\fcs1 \af1 \ltrch\fcs0 -\f31506\cf1\insrsid6650094\charrsid13915886 \loch\af31506\dbch\af31505\hich\f31506 \'94\loch\f31506 defines how many card solut\hich\af31506\dbch\af31505\loch\f31506 ions that SolveBoard must return: +\f31506\cf1\insrsid6650094\charrsid13915886 \loch\af31506\dbch\af31505\hich\f31506 \'94\hich\af31506\dbch\af31505\loch\f31506 defines how many card solutions that SolveBoard must return: \par \hich\af31506\dbch\af31505\loch\f31506 target=1-13, solutions=1: Returns only one of the cards. Its returned score is the same as target when}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid8137115 \hich\af31506\dbch\af31505\loch\f31506 }{ -\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 target or higher tricks can be won. Otherwise, score \hich\f31506 \endash \loch\f31506 -1 is returned if target cannot be reached, or score 0 if no tr\hich\af31506\dbch\af31505\loch\f31506 icks can be won. \line target=-1, solutions=1: Returns only one of the optimum cards and its score. +\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 target or higher tricks can be won. Otherwise, score \hich\f31506 \endash \loch\f31506 1 is returned if target cannot be +\hich\af31506\dbch\af31505\loch\f31506 reached, or score 0 if no tricks can be won. \line target=-1, solutions=1: Returns only one of the optimum cards and its score. \par \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 target=0, solutions=1: Returns only one of the cards legal to play with score set to 0.}{\rtlch\fcs1 -\af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \line \hich\af31506\dbch\af31505\loch\f31506 target 1-13, solutions=2: Return all cards meeting target. Their\hich\af31506\dbch\af31505\loch\f31506 - returned scores are the same as target when target or higher tricks can be won. Otherwise, only one card is returned with score \hich\f31506 \endash \loch\f31506 -1 if target cannot be reached, or score 0 for all cards legal to play if no tricks can be won.\line target \hich\f31506 \endash \loch\f31506 1, solutions=2: Ret\hich\af31506\dbch\af31505\loch\f31506 u\hich\af31506\dbch\af31505\loch\f31506 -rn all optimum cards with their scores. +\af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \line \hich\af31506\dbch\af31505\loch\f31506 target 1-13, solutions=2: Return all\hich\af31506\dbch\af31505\loch\f31506 + cards meeting target. Their returned scores are the same as target when target or higher tricks can be won. Otherwise, only one card is returned with score \hich\f31506 \endash \loch\f31506 +1 if target cannot be reached, or score 0 for all cards legal to play if no tricks can be won.\line \hich\af31506\dbch\af31505\loch\f31506 t\hich\af31506\dbch\af31505\loch\f31506 arget \hich\f31506 \endash \loch\f31506 +1, solutions=2: Return all optimum cards with their scores. \par \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 target=0, solutions=2: Return all cards legal to play with scores set to 0}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf6\insrsid6650094\charrsid13915886 .}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \line \hich\af31506\dbch\af31505\loch\f31506 - target irrelevant, solutions=3: Return all cards that can be legally played w}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid8137115 \hich\af31506\dbch\af31505\loch\f31506 ith their scores in descending }{\rtlch\fcs1 \af1 \ltrch\fcs0 -\f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 order. + target irrelevant, solutions=3: Return all cards that can be legally played w}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid8137115 \hich\af31506\dbch\af31505\loch\f31506 ith their scores in descendin\hich\af31506\dbch\af31505\loch\f31506 g }{ +\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 order. \par \par \hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 Parameter \'94}{\rtlch\fcs1 \ab\af1 \ltrch\fcs0 \b\f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 mode}{\rtlch\fcs1 \af1 \ltrch\fcs0 -\f31506\cf1\insrsid6650094\charrsid13915886 \loch\af31506\dbch\af31505\hich\f31506 \'94\loch\f31506 d\hich\af31506\dbch\af31505\loch\f31506 efines the DLL mode of operation.\line - mode=0: Do not search to find the score if the hand to play has only one card, including its equivalents, to play. Score is set to \hich\f31506 \endash \loch\f31506 2 for this card, indicating that there are no alternative cards. If there are multiple -\hich\af31506\dbch\af31505\loch\f31506 \hich\af31506\dbch\af31505\loch\f31506 choices for cards to play, search is done to find the score. This mode is very fast but you don\hich\f31506 \rquote \loch\f31506 t}{\rtlch\fcs1 \af1 \ltrch\fcs0 -\f31506\cf1\insrsid8137115 \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid8137115 \hich\af37\dbch\af31505\loch\f37 a}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid8137115\charrsid8137115 -\hich\af37\dbch\af31505\loch\f37 lways search to find the score. }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 -\par \hich\af31506\dbch\af31505\loch\f31506 mode=1: Always }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 search to find the score. Even when the hand to play has only one card, +\f31506\cf1\insrsid6650094\charrsid13915886 \loch\af31506\dbch\af31505\hich\f31506 \'94\loch\f31506 defines the DLL mode of operation.\line + mode=0: Do not search to find the score if the hand to play has only one card, including its equivalents, to play. Score is set to \hich\f31506 \endash \loch\f31506 2 for this card, indicating that there are no alternative c +\hich\af31506\dbch\af31505\loch\f31506 ards. If there are multiple choices for cards to play, search is done to find the score. This mode is very fast but you don\hich\f31506 \rquote \loch\f31506 t}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid8137115 +\hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid8137115 \hich\af37\dbch\af31505\loch\f37 a}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid8137115\charrsid8137115 \hich\af37\dbch\af31505\loch\f37 +lways search to find the score. }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 +\par \hich\af31506\dbch\af31505\loch\f31506 mode=1: Always }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 search to find the score. Even when the hand to play has only one card, with \hich\af31506\dbch\af31505\loch\f31506 - with possible equivalents, to play. For both mode=0 and mode=1: If the preceding SolveBoard call had the same trump suit and the same deal, except for deal.first, then the transposition table contents is reused from the preceding SolveBoard call. Settin -\hich\af31506\dbch\af31505\loch\f31506 g\hich\af31506\dbch\af31505\loch\f31506 mode=2 is no longer needed in this case, but can still be done for backwards compatibility.\line - mode=2: As for mode=1, but the transposition table contents is reused from the preceding SolveBoard call. It is the responsibility of the programmer using the \hich\af31506\dbch\af31505\loch\f31506 D\hich\af31506\dbch\af31505\loch\f31506 -LL to ensure that reusing the table is safe in the actual situation. Example: Deal is the same, except for deal.first. Trump suit is the same. + possible equivalents, to play. For both mode=0 and mode=1: If the preceding SolveBoard call had the same trump suit and the same deal, except for deal.first, then the transposition table contents is reused from the preceding SolveBoard call. Setting mod +\hich\af31506\dbch\af31505\loch\f31506 e\hich\af31506\dbch\af31505\loch\f31506 =2 is no longer needed in this case, but can still be done for backwards compatibility.\line + mode=2: As for mode=1, but the transposition table contents is reused from the preceding SolveBoard call. It is the responsibility of the programmer using the DLL t\hich\af31506\dbch\af31505\loch\f31506 o\hich\af31506\dbch\af31505\loch\f31506 + ensure that reusing the table is safe in the actual situation. Example: Deal is the same, except for deal.first. Trump suit is the same. \par }\pard \ltrpar\ql \fi720\li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 1}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\super\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 st}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 call: SolveBoard(deal, -1, 1, 1, &fut, 0), deal.first=1, i.e. East leads. \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 \tab 2}{\rtlch\fcs1 \af1 \ltrch\fcs0 -\f31506\super\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 nd}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 call: SolveBoard(deal, -1 -\hich\af31506\dbch\af31505\loch\f31506 , 1, 2, &fut, 0), deal.first=2, i.e. South leads. +\f31506\super\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 nd}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 call: SolveBoard(deal, -1, 1, +\hich\af31506\dbch\af31505\loch\f31506 2, &fut, 0), deal.first=2, i.e. South leads. \par \hich\af31506\dbch\af31505\loch\f31506 \tab 3rd call: SolveBoard(deal, -1, 1, 2, &fut, 0), deal.first=3, i.e. West leads. \par }\pard \ltrpar\ql \fi720\li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 4th call: SolveBoard(deal, -1, 1, 2, &fut, 0), deal.first=0, i.e. North leads. }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \par \hich\af31506\dbch\af31505\loch\f31506 struct }{\rtlch\fcs1 \ab\af1 \ltrch\fcs0 \b\f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 futureTricks}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 -\hich\af31506\dbch\af31505\loch\f31506 \{ /* The DLL prov\hich\af31506\dbch\af31505\loch\f31506 ides the score (number of tricks) that can be won by the card to play defined by its suit and rank. Array of all alternative cards. */}{\rtlch\fcs1 \af0 +\hich\af31506\dbch\af31505\loch\f31506 \{ /* The DLL provides \hich\af31506\dbch\af31505\loch\f31506 the score (number of tricks) that can be won by the card to play defined by its suit and rank. Array of all alternative cards. */}{\rtlch\fcs1 \af0 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 int nodes; /* Number of searched nodes */ \par \hich\af31506\dbch\af31505\loch\f31506 int cards; /* No of alternative cards */}{\rtlch\fcs1 \af0 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 -\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 int suit[13]; \hich\af31506\dbch\af31505\loch\f31506 /* 0=Spades, 1=Hearts, 2=Diamonds, 3=Clubs */ +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 int suit[13]; \hich\af31506\dbch\af31505\loch\f31506 /* 0=Spades, 1=Hearts, 2=Diamonds, 3=Clubs */ \par \hich\af31506\dbch\af31505\loch\f31506 int rank[13]; /* 2-14 for 2 through Ace *}{\rtlch\fcs1 \ab\af1 \ltrch\fcs0 \b\f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 / -\par \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 -int equals[13]; /* Bitstring of ranks for equivalent lower rank cards. The decimal value range between 4 (=2) and 8192 (King=rank 13). When th\hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 ere are several \'94\loch\f31506 \hich\f31506 equals -\'94\loch\f31506 \hich\f31506 , the value is the sum of each \'94\loch\f31506 \hich\f31506 equal\'94\loch\f31506 . *}{\rtlch\fcs1 \ab\af1 \ltrch\fcs0 \b\f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 /}{\rtlch\fcs1 \af1 -\ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 -\par \hich\af31506\dbch\af31505\loch\f31506 int score[13]; /* -1 indicates that target was not reached, otherwise target or max numbe of tricks */}{\rtlch\fcs1 \af0 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 -\hich\af31506\dbch\af31505\loch\f31506 +\par \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 +int equals[13]; /* Bitstring of ranks for equivalent lower rank cards. The decimal value range between 4 (=2) and 8192 (King=rank 13). When there are several \'94\loch\f31506 \hich\f31506 equals\'94\loch\f31506 \hich\f31506 +, the value is the sum of each \'94\loch\f31506 \hich\f31506 equal\'94\loch\f31506 . *}{\rtlch\fcs1 \ab\af1 \ltrch\fcs0 \b\f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 /}{\rtlch\fcs1 \af1 \ltrch\fcs0 +\f31506\cf1\insrsid6650094\charrsid13915886 +\par \hich\af31506\dbch\af31505\loch\f31506 int score[13]; /* -1 indicates th\hich\af31506\dbch\af31505\loch\f31506 at target was not reached, otherwise target or max numbe of tricks */}{\rtlch\fcs1 \af0 \ltrch\fcs0 +\f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \}\hich\af31506\dbch\af31505\loch\f31506 ; \par \par \hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 Parameter \'94}{\rtlch\fcs1 \ab\af1 \ltrch\fcs0 \b\f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 threadIndex}{\rtlch\fcs1 \af1 \ltrch\fcs0 -\f31506\cf1\insrsid6650094\charrsid13915886 \loch\af31506\dbch\af31505\hich\f31506 \'94\loch\f31506 defines the identity of the t\hich\af31506\dbch\af31505\loch\f31506 hread used when calling SolveBoard. +\f31506\cf1\insrsid6650094\charrsid13915886 \loch\af31506\dbch\af31505\hich\f31506 \'94\loch\f31506 defines the identity of the thread used when calling SolveBoard. \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid16470149\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 A configured maximum number of}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 -\hich\af31506\dbch\af31505\loch\f31506 threads can call SolveBoard in parallel, threadIndex must}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid16470149\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 - be an integer in the range 0..max number of threads - 1. This maximum number is configured at DLL initial start-up and cannot excee\hich\af31506\dbch\af31505\loch\f31506 d 16.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 - +\hich\af31506\dbch\af31505\loch\f31506 threads can call SolveBoard in parallel, threadIndex must}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid16470149\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 b\hich\af31506\dbch\af31505\loch\f31506 +e an integer in the range 0..max number of threads - 1. This maximum number is configured at DLL initial start-up and cannot exceed 16.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid6650094\charrsid13915886 \par }\pard\plain \ltrpar\s3\ql \li0\ri0\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel2\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1053\loch\af1\hich\af1\dbch\af31505\cgrid\langnp1033\langfenp1053 {\rtlch\fcs1 \ab\af1 \ltrch\fcs0 \b\f31506\cf1\insrsid6650094\charrsid13915886 \par \hich\af31506\dbch\af31505\loch\f31506 SolveBoardPBN \par \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 In SolveBoardPBN the remaining cards in the deal information are given in PBN text -\par \hich\af31506\dbch\af31505\loch\f31506 format (e.g. \line W:T5.K4.652.A98542 K6.QJT976.QT7.Q6 432.A.AKJ93.JT73 AQJ987.8532.84.K) instead of using bits 2-14 in an integer array. Otherwise, Solveb\hich\af31506\dbch\af31505\loch\f31506 -oardPBN is identical to SolveBoard. +\par \hich\af31506\dbch\af31505\loch\f31506 format (e.g. \line W:T5.K\hich\af31506\dbch\af31505\loch\f31506 +4.652.A98542 K6.QJT976.QT7.Q6 432.A.AKJ93.JT73 AQJ987.8532.84.K) instead of using bits 2-14 in an integer array. Otherwise, SolveboardPBN is identical to SolveBoard. \par \par \hich\af31506\dbch\af31505\loch\f31506 struct dealPBN \{ \par \hich\af31506\dbch\af31505\loch\f31506 int trump; \par \hich\af31506\dbch\af31505\loch\f31506 int first; \par \hich\af31506\dbch\af31505\loch\f31506 int currentTrickSuit[3]; }{\rtlch\fcs1 \ab\af1 \ltrch\fcs0 \b\f31506\cf1\insrsid6650094\charrsid13915886 -\par \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 int currentTrickRank[3]; +\par \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 int curre\hich\af31506\dbch\af31505\loch\f31506 ntTrickRank[3]; \par \hich\af31506\dbch\af31505\loch\f31506 char remainCards[80]; /* First character identifies the hand having the cards given first -\par \hich\af31506\dbch\af31505\loch\f31506 \hich\af31506\dbch\af31505\loch\f31506 in the string, then the cards of the other hands are given in a -\par \tab \tab \tab \hich\af31506\dbch\af31505\loch\f31506 clock-wise order, see example above. Null characters fill out +\par \hich\af31506\dbch\af31505\loch\f31506 in the string, then the cards of the other hands are given in a +\par \tab \tab \tab \hich\af31506\dbch\af31505\loch\f31506 clock-wise order, see example \hich\af31506\dbch\af31505\loch\f31506 above. Null characters fill out \par \tab \tab \tab \hich\af31506\dbch\af31505\loch\f31506 the character array at the end. */ \par \}\hich\af31506\dbch\af31505\loch\f31506 ; \par }{\rtlch\fcs1 \ab\af1 \ltrch\fcs0 \b\f31506\cf1\insrsid6650094\charrsid13915886 @@ -242,14 +250,14 @@ oardPBN is identical to SolveBoard. \f31506\cf1\insrsid6650094\charrsid13915886 \par }\pard\plain \ltrpar\s1\ql \li0\ri0\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel0\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1053\loch\af1\hich\af1\dbch\af31505\cgrid\langnp1033\langfenp1053 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 CalcDDtable }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid1770393 \hich\af31506\dbch\af31505\loch\f31506 calculates the double}{\rtlch\fcs1 -\af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 du\hich\af31506\dbch\af31505\loch\f31506 mmy values of the initial 52 cards for all the 20 trump suit/declarer hand combinations. +\af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 dummy values of the initial 52 cards for all the 20 trump suit/declarer hand combinations. \par }\pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1053\loch\af1\hich\af1\dbch\af31505\cgrid\langnp1033\langfenp1053 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid6650094\charrsid13915886 \par }\pard\plain \ltrpar\s1\ql \li0\ri0\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel0\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1053\loch\af1\hich\af1\dbch\af31505\cgrid\langnp1033\langfenp1053 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 Before CalcDDtable can be called, a structure of type " ddTableResults" must be declared. \par }\pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1053\loch\af1\hich\af1\dbch\af31505\cgrid\langnp1033\langfenp1053 {\rtlch\fcs1 \ab\af1 \ltrch\fcs0 \b\f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 CalcDDtable}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 - returns a status integer, "no fault" means the DLL supplies t\hich\af31506\dbch\af31505\loch\f31506 he double dummy scores in the "ddTableResults" type structure.\line Status codes: + returns a status integer, "no fault" means the DLL supplies the double dummy scores in the "ddTableResults" type structure.\line Status codes: \par \hich\af31506\dbch\af31505\loch\f31506 1=No fault, \par \hich\af31506\dbch\af31505\loch\f31506 Other status codes are errors, with codes equal to SolveBoard status codes. }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid6650094\charrsid13915886 \par @@ -259,16 +267,16 @@ oardPBN is identical to SolveBoard. \par \hich\af31506\dbch\af31505\loch\f31506 struct ddTableDeal \{ \par \hich\af31506\dbch\af31505\loch\f31506 unsigned int cards[4][4]; /* 1}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\super\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 st}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 index is hand, 2}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\super\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 nd}{\rtlch\fcs1 \af1 \ltrch\fcs0 -\f31506\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 index is suit, same coding as for deal.remainCards for SolveBoard. */ +\f31506\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 index is suit, same coding as \hich\af31506\dbch\af31505\loch\f31506 for deal.remainCards for SolveBoard. */ \par \}\hich\af31506\dbch\af31505\loch\f31506 ; \par \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 struct }{\rtlch\fcs1 \ab\af1 \ltrch\fcs0 \b\f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 ddTableResults} -{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 \{\hich\af31506\dbch\af31505\loch\f31506 /* For each combination trump suit / declarer hand, the DLL provides the double dummy score. */}{ -\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid6650094\charrsid13915886 +{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 \{ /* For each combination trump suit / declarer hand, the DLL provides the double dummy score. */}{\rtlch\fcs1 \af1 \ltrch\fcs0 +\f31506\insrsid6650094\charrsid13915886 \par \hich\af31506\dbch\af31505\loch\f31506 int resTable[5][4];\tab /* 1}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\super\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 st}{\rtlch\fcs1 \af1 \ltrch\fcs0 -\f31506\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 index is trump (0=Spades, 1=Hearts, 2=Diamonds, 3=Clubs, 4=No Trump 2}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\super\insrsid6650094\charrsid13915886 -\hich\af31506\dbch\af31505\loch\f31506 nd}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 index is declarer hand, 0=North, 1=East, 2=South, 3=West *\hich\af31506\dbch\af31505\loch\f31506 / - +\f31506\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 index is trump (0=Spades, 1=Hearts, 2=Diamonds, 3=Clubs, 4=No T\hich\af31506\dbch\af31505\loch\f31506 rump 2}{\rtlch\fcs1 \af1 \ltrch\fcs0 +\f31506\super\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 nd}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 + index is declarer hand, 0=North, 1=East, 2=South, 3=West */ \par \}\hich\af31506\dbch\af31505\loch\f31506 ; \par \par @@ -276,11 +284,11 @@ oardPBN is identical to SolveBoard. \par \par }\pard\plain \ltrpar\s3\ql \li0\ri0\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel2\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1053\loch\af1\hich\af1\dbch\af31505\cgrid\langnp1033\langfenp1053 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 -In CalcDDtablePBN the remaining cards in the deal information are given in PBN text format, see the description above for SolveBoardPBN. Otherwise, CalcDDtablePBN is identical to CalcDDtable. +In CalcDDtablePBN the remaining cards in the deal information are given in PBN text format, see the description above for SolveBoardPBN. Otherwise, CalcDDtablePBN is \hich\af31506\dbch\af31505\loch\f31506 identical to CalcDDtable. \par }\pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1053\loch\af1\hich\af1\dbch\af31505\cgrid\langnp1033\langfenp1053 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \par \hich\af31506\dbch\af31505\loch\f31506 struct ddTableDealPBN \{ -\par \hich\af31506\dbch\af31505\loch\f31506 char cards[80]\hich\af31506\dbch\af31505\loch\f31506 ; +\par \hich\af31506\dbch\af31505\loch\f31506 char cards[80]; \par \}\hich\af31506\dbch\af31505\loch\f31506 ;}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid2112235 \par @@ -295,14 +303,15 @@ In CalcDDtablePBN the remaining cards in the deal information are given in PBN t \hich\af37\dbch\af31505\loch\f37 compared to }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid4602097 \hich\af37\dbch\af31505\loch\f37 calculating}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid1770393\charrsid1770393 \hich\af37\dbch\af31505\loch\f37 the}{ \rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid12068517 \hich\af37\dbch\af31505\loch\f37 se values}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid1770393\charrsid1770393 \hich\af37\dbch\af31505\loch\f37 using a }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid12068517 \hich\af37\dbch\af31505\loch\f37 CalcDDtable call }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid1770393\charrsid1770393 \hich\af37\dbch\af31505\loch\f37 for each }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid13319718 -\hich\af37\dbch\af31505\loch\f37 DD \hich\af37\dbch\af31505\loch\f37 table}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid1770393\charrsid1770393 .}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid1770393 +\hich\af37\dbch\af31505\loch\f37 DD table}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid1770393\charrsid1770393 .}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid1770393 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid9175287 \par \hich\af37\dbch\af31505\loch\f37 The maximum number of DD tables in a CallAllTables call depends on the number of strains (the number of }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid1445386 \hich\af37\dbch\af31505\loch\f37 5 }{\rtlch\fcs1 \af1 -\ltrch\fcs0 \f37\cf1\insrsid9175287 \hich\af37\dbch\af31505\loch\f37 trump alternatives, any of the 4 suits and no trump) to be part of the DD calculations. If all 5 strains are included there are 20 declarer ha\hich\af37\dbch\af31505\loch\f37 -nd / strain combinations. The maximum number of boards that can be calculated in parallel is 200, so the maximum number}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid1445386 \hich\af37\dbch\af31505\loch\f37 }{\rtlch\fcs1 \af1 \ltrch\fcs0 -\f37\cf1\insrsid14102810 \hich\af37\dbch\af31505\loch\f37 of DD tables that can be included in a CallAllTable call is 10.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid9175287 \hich\af37\dbch\af31505\loch\f37 }{\rtlch\fcs1 \af1 \ltrch\fcs0 -\f37\cf1\insrsid14892228 \hich\af37\dbch\af31505\loch\f37 At fewer strains the maximum number of DD tables in a call is higher:}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid9175287 -\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid14892228 \hich\af37\dbch\af31505\loch\f37 4 \hich\af37\dbch\af31505\loch\f37 strains maximum 12 DD tables +\ltrch\fcs0 \f37\cf1\insrsid9175287 \hich\af37\dbch\af31505\loch\f37 trump alternatives, any of th\hich\af37\dbch\af31505\loch\f37 +e 4 suits and no trump) to be part of the DD calculations. If all 5 strains are included there are 20 declarer hand / strain combinations. The maximum number of boards that can be calculated in parallel is 200, so the maximum number}{\rtlch\fcs1 \af1 +\ltrch\fcs0 \f37\cf1\insrsid1445386 \hich\af37\dbch\af31505\loch\f37 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid14102810 \hich\af37\dbch\af31505\loch\f37 of DD tables that can b\hich\af37\dbch\af31505\loch\f37 e included in a CallAllTable call is 10. +}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid9175287 \hich\af37\dbch\af31505\loch\f37 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid14892228 \hich\af37\dbch\af31505\loch\f37 At fewer strains the maximum number of DD tables in a call is higher:}{ +\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid9175287 +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid14892228 \hich\af37\dbch\af31505\loch\f37 4 strains maximum 12 DD tables \par \hich\af37\dbch\af31505\loch\f37 3 strains maximum 16}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid14892228\charrsid14892228 \hich\af37\dbch\af31505\loch\f37 DD tables}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid14892228 \par \hich\af37\dbch\af31505\loch\f37 2}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid14892228\charrsid14892228 \hich\af37\dbch\af31505\loch\f37 strains maximum }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid14892228 \hich\af37\dbch\af31505\loch\f37 25}{ \rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid14892228\charrsid14892228 \hich\af37\dbch\af31505\loch\f37 DD tables}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid14892228 @@ -314,12 +323,12 @@ nd / strain combinations. The maximum number of boards that can be calculated in \hich\af37\dbch\af31505\loch\f37 can be called, a st}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid5525810 \hich\af37\dbch\af31505\loch\f37 ructure of type "ddTable}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid15031452 \hich\af37\dbch\af31505\loch\f37 s }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid5525810 \hich\af37\dbch\af31505\loch\f37 Res}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid5525810\charrsid5525810 \hich\af37\dbch\af31505\loch\f37 " must be declared.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid5525810 -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid6569652 {\rtlch\fcs1 \af1 \ltrch\fcs0 \b\f37\cf1\insrsid6569652\charrsid5332441 \hich\af37\dbch\af31505\loch\f37 CallAllTables}{\rtlch\fcs1 \af1 \ltrch\fcs0 +\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid6569652 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6569652\charrsid16610750 \hich\af37\dbch\af31505\loch\f37 CallAllTables}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6569652\charrsid6569652 \hich\af37\dbch\af31505\loch\f37 returns a status integer, "no fault" means the DLL supplies the double dum}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid15031452 \hich\af37\dbch\af31505\loch\f37 my scores in the "ddTablesRes}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6569652\charrsid6569652 \hich\af37\dbch\af31505\loch\f37 " type structure.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid5332441 \hich\af37\dbch\af31505\loch\f37 \hich\f37 - Its contained structure of type \'93\loch\f37 \hich\f37 ddTableResults\'94\loch\f37 is described for the function CalcDDtable.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid617158 \hich\af37\dbch\af31505\loch\f37 \hich\f37 The variable \'93\loch\f37 -\hich\f37 noOfBoards\'94\loch\f37 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid15620535 \hich\af37\dbch\af31505\loch\f37 show}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid617158 \hich\af37\dbch\af31505\loch\f37 s the number -\hich\af37\dbch\af31505\loch\f37 of solved boards (max 200).}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6569652 + Its contained structure of type \'93\loch\f37 \hich\f37 ddTableResults\'94\loch\f37 is d\hich\af37\dbch\af31505\loch\f37 escribed for the function CalcDDtable.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid617158 \hich\af37\dbch\af31505\loch\f37 +\hich\f37 The variable \'93\loch\f37 \hich\f37 noOfBoards\'94\loch\f37 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid15620535 \hich\af37\dbch\af31505\loch\f37 show}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid617158 \hich\af37\dbch\af31505\loch\f37 +s the number of solved boards (max 200).}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6569652 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid940090 \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid940090 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid940090\charrsid940090 \hich\af37\dbch\af31505\loch\f37 struct ddTablesRes \{}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid940090 @@ -332,17 +341,17 @@ my scores in the "ddTablesRes}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6569 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6569652\charrsid6569652 \hich\af37\dbch\af31505\loch\f37 Status codes: \par \hich\af37\dbch\af31505\loch\f37 1=No fault,}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6569652 \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid8983788 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid12156867 \hich\af37\dbch\af31505\loch\f37 -201=Error, all trump suits an}{\rtlch\fcs1 \af1 \ltrch\fcs0 -\f37\cf1\insrsid15620535 \hich\af37\dbch\af31505\loch\f37 d the no trump suit alternative}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid12156867 \hich\af37\dbch\af31505\loch\f37 have been marked in the\line ca\hich\af37\dbch\af31505\loch\f37 -lling parameter trumpFilter to be left out (i.e. they have }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid10631094 \hich\af37\dbch\af31505\loch\f37 all }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid2181632 \hich\af37\dbch\af31505\loch\f37 +\f37\cf1\insrsid15620535 \hich\af37\dbch\af31505\loch\f37 d the no trump suit alternative}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid12156867 \hich\af37\dbch\af31505\loch\f37 have been marked in the\line + calling parameter trumpFilter to be left out (i.e. they have }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid10631094 \hich\af37\dbch\af31505\loch\f37 all }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid2181632 \hich\af37\dbch\af31505\loch\f37 been set to TRUE),}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6569652 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid12087407 \hich\af37\dbch\af31505\loch\f37 -202=Error, too many DD tables in the call. \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid6569652 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid940090 \par \hich\af37\dbch\af31505\loch\f37 \hich\f37 Structure \'93}{\rtlch\fcs1 \af1 \ltrch\fcs0 \b\f37\cf1\insrsid940090\charrsid6228168 \hich\af37\dbch\af31505\loch\f37 ddTableDeals}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid940090 -\loch\af37\dbch\af31505\hich\f37 \'94\loch\f37 contains }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6228168 \hich\af37\dbch\af31505\loch\f37 up to }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6309794 \hich\af37\dbch\af31505\loch\f37 5}{\rtlch\fcs1 -\af1 \ltrch\fcs0 \f37\cf1\insrsid6228168 \hich\af37\dbch\af31505\loch\f37 0 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid9125746 \hich\af37\dbch\af31505\loch\f37 DD table }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6228168 -\hich\af37\dbch\af31505\loch\f37 \hich\f37 deals, each in a structure \'93\loch\f37 \hich\f37 ddTableDeal\'94\loch\f37 , -\par \hich\af37\dbch\af31505\loch\f37 described for the function Calc\hich\af37\dbch\af31505\loch\f37 DDtable.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid15620535 \hich\af37\dbch\af31505\loch\f37 \hich\f37 The actual number is set in the \'93\loch\f37 -\hich\f37 noOfTables\'94\loch\f37 parameter.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6228168 +\loch\af37\dbch\af31505\hich\f37 \'94\loch\f37 con\hich\af37\dbch\af31505\loch\f37 tains }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6228168 \hich\af37\dbch\af31505\loch\f37 up to }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6309794 +\hich\af37\dbch\af31505\loch\f37 5}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6228168 \hich\af37\dbch\af31505\loch\f37 0 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid9125746 \hich\af37\dbch\af31505\loch\f37 DD table }{\rtlch\fcs1 \af1 \ltrch\fcs0 +\f37\cf1\insrsid6228168 \hich\af37\dbch\af31505\loch\f37 \hich\f37 deals, each in a structure \'93\loch\f37 \hich\f37 ddTableDeal\'94\loch\f37 , +\par \hich\af37\dbch\af31505\loch\f37 described for the function CalcDDtable.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid15620535 \hich\af37\dbch\af31505\loch\f37 \hich\f37 The actual number is set in the \'93\loch\f37 \hich\f37 noOfTables\'94\loch\f37 + parameter.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6228168 \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6633554 \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid6633554 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6633554\charrsid6633554 \hich\af37\dbch\af31505\loch\f37 struct ddTableDeals \{}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6633554 @@ -353,36 +362,38 @@ been set to TRUE),}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6569652 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6309794 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid532764 \hich\af37\dbch\af31505\loch\f37 \hich\f37 Parameter \'93}{\rtlch\fcs1 \af1 \ltrch\fcs0 \b\f37\cf1\insrsid532764\charrsid12854747 \hich\af37\dbch\af31505\loch\f37 mode}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid532764 \loch\af37\dbch\af31505\hich\f37 \'94\loch\f37 specifies whether or not par score and par contracts }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid10631094 \hich\af37\dbch\af31505\loch\f37 wi}{\rtlch\fcs1 \af1 \ltrch\fcs0 -\f37\cf1\insrsid532764 \hich\af37\dbch\af31505\loch\f37 ll be calculated\line \hich\af37\dbch\af31505\loch\f37 and if so, wh}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid3547548 \hich\af37\dbch\af31505\loch\f37 ich sides that are vulnerable:\line -1}{ -\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid532764 \hich\af37\dbch\af31505\loch\f37 : }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid3547548 \hich\af37\dbch\af31505\loch\f37 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid3547548\charrsid3547548 -\hich\af37\dbch\af31505\loch\f37 no par calculation}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6633554 +\f37\cf1\insrsid532764 \hich\af37\dbch\af31505\loch\f37 ll be calculated\line and if so, wh}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid3547548 \hich\af37\dbch\af31505\loch\f37 ich sides that are vulnerable:\line -1}{\rtlch\fcs1 \af1 \ltrch\fcs0 +\f37\cf1\insrsid532764 \hich\af37\dbch\af31505\loch\f37 : }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid3547548 \hich\af37\dbch\af31505\loch\f37 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid3547548\charrsid3547548 \hich\af37\dbch\af31505\loch\f37 +no par calculation}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6633554 \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid3547548 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid3547548\charrsid3547548 \hich\af37\dbch\af31505\loch\f37 0:\tab par calculation, vulnerability None \par \hich\af37\dbch\af31505\loch\f37 1:\tab par calculation, vulnerability All -\par \hich\af37\dbch\af31505\loch\f37 2:\tab par calculation, vulnerability NS}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid3547548 \hich\af37\dbch\af31505\loch\f37 only}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid3547548\charrsid3547548 +\par \hich\af37\dbch\af31505\loch\f37 2:\tab par calculation, \hich\af37\dbch\af31505\loch\f37 vulnerability NS}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid3547548 \hich\af37\dbch\af31505\loch\f37 only}{\rtlch\fcs1 \af1 \ltrch\fcs0 +\f37\cf1\insrsid3547548\charrsid3547548 \par \hich\af37\dbch\af31505\loch\f37 3:\tab par calculation, vulnerability EW}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid3547548 \hich\af37\dbch\af31505\loch\f37 only \par \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid12854747 \hich\af37\dbch\af31505\loch\f37 \hich\f37 The results of the par calculations are given in the structure \'93\loch\f37 \hich\f37 allParResults\'94, -\par \hich\af37\dbch\af31505\loch\f37 which contains the results for all boards. Each board results are given\line \hich\f37 in structure \'93\loch\f37 \hich\f37 parResults\'94\loch\f37 , described for the CalcPar function. +\par \hich\af37\dbch\af31505\loch\f37 which contains the results for all boards. Each board results are given\line \hich\f37 in structure \'93\loch\f37 \hich\f37 parResults\'94\loch\f37 , described fo\hich\af37\dbch\af31505\loch\f37 r the CalcPar function. + \par \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid6633554 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6633554\charrsid6633554 \hich\af37\dbch\af31505\loch\f37 struct allParResults \{ -\par \hich\af37\dbch\af31505\loch\f37 struct parResul\hich\af37\dbch\af31505\loch\f37 ts presults[MAXNOOFBOARDS / }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid12595779 \hich\af37\dbch\af31505\loch\f37 4}{\rtlch\fcs1 \af1 \ltrch\fcs0 -\f37\cf1\insrsid6633554\charrsid6633554 \hich\af37\dbch\af31505\loch\f37 ]; +\par \hich\af37\dbch\af31505\loch\f37 struct parResults presults[MAXNOOFBOARDS / }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid12595779 \hich\af37\dbch\af31505\loch\f37 4}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6633554\charrsid6633554 +\hich\af37\dbch\af31505\loch\f37 ]; \par \}\hich\af37\dbch\af31505\loch\f37 ;}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6633554 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid12854747 \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid12854747 \hich\af37\dbch\af31505\loch\f37 \hich\f37 Parameter \'93}{\rtlch\fcs1 \af1 \ltrch\fcs0 \b\f37\cf1\insrsid12854747\charrsid7949161 \hich\af37\dbch\af31505\loch\f37 trumpFilter}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid12854747 \loch\af37\dbch\af31505\hich\f37 \'94\loch\f37 describes which, if any, of the trump suits or the no trump suit }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid7949161 \line \hich\af37\dbch\af31505\loch\f37 alternatives that will be excluded from the calculations.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid2260548 \hich\af37\dbch\af31505\loch\f37 }{\rtlch\fcs1 -\af1 \ltrch\fcs0 \f37\cf1\insrsid1445386 \hich\af37\dbch\af31505\loch\f37 They are defined in the order Spades, Hearts, Diamonds, Clubs and No Trum\hich\af37\dbch\af31505\loch\f37 p}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid617158 -\hich\af37\dbch\af31505\loch\f37 s}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid1445386 \hich\af37\dbch\af31505\loch\f37 . E.g. setting trumpFilter to }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid12982360 \{\hich\af37\dbch\af31505\loch\f37 -FALSE, FALSE, TRUE, TRUE, TRUE\} means that values will only be calculated for}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid1445386 \hich\af37\dbch\af31505\loch\f37 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid12982360 -\hich\af37\dbch\af31505\loch\f37 the trump suits Spades and Hearts. +\af1 \ltrch\fcs0 \f37\cf1\insrsid1445386 \hich\af37\dbch\af31505\loch\f37 They are defined in the order Spades, Hearts, Diamonds, Clubs and No Trump}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid617158 \hich\af37\dbch\af31505\loch\f37 s}{\rtlch\fcs1 \af1 +\ltrch\fcs0 \f37\cf1\insrsid1445386 \hich\af37\dbch\af31505\loch\f37 . E.g. setting trumpFilter to }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid12982360 \{\hich\af37\dbch\af31505\loch\f37 FALSE, FALSE, TRUE, TRUE, TRUE\} + means that values will only be calculated for}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid1445386 \hich\af37\dbch\af31505\loch\f37 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid12982360 \hich\af37\dbch\af31505\loch\f37 +the trump suits Spades and Hearts. \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid5712409 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid2260548 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \b\f37\cf1\insrsid2260548\charrsid2260548 \hich\af37\dbch\af31505\loch\f37 CalcAllTablesPBN \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid12982360 -\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid2260548 \hich\af37\dbch\af31505\loch\f37 As for CalcAllTables except that the deals are given in PBN format. The structure\line \hich\f37 \'93\hich\af37\dbch\af31505\loch\f37 \hich\f37 ddTableDealPBN\'94 -\loch\f37 is }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid15620535 \hich\af37\dbch\af31505\loch\f37 described}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid2260548 \hich\af37\dbch\af31505\loch\f37 for the CalcDDtablePBN }{\rtlch\fcs1 \af1 \ltrch\fcs0 -\f37\cf1\insrsid14095979 \hich\af37\dbch\af31505\loch\f37 function.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid2260548 +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid2260548 \hich\af37\dbch\af31505\loch\f37 As for CalcAllTab\hich\af37\dbch\af31505\loch\f37 les except that the deals are given in PBN format. The structure\line \hich\f37 \'93\loch\f37 \hich\f37 +ddTableDealPBN\'94\loch\f37 is }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid15620535 \hich\af37\dbch\af31505\loch\f37 described}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid2260548 \hich\af37\dbch\af31505\loch\f37 for the CalcDDtablePBN }{ +\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid14095979 \hich\af37\dbch\af31505\loch\f37 function.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid2260548 \par \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid2260548 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid2260548\charrsid2260548 \hich\af37\dbch\af31505\loch\f37 struct ddTableDealsPBN \{}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid2260548 @@ -392,75 +403,110 @@ FALSE, FALSE, TRUE, TRUE, TRUE\} means that values will only be calculated for}{ \par \}\hich\af37\dbch\af31505\loch\f37 ;}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid2260548 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid14095979 \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid2260548\charrsid12982360 -\par }{\rtlch\fcs1 \ab\af1 \ltrch\fcs0 \b\f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 SolveAllBoards}{\rtlch\fcs1 \ab\af1 \ltrch\fcs0 \b\f31506\cf1\insrsid7616262\charrsid7616262 +\par }{\rtlch\fcs1 \ab\af1 \ltrch\fcs0 \b\f31506\cf1\insrsid13336457 \hich\af31506\dbch\af31505\loch\f31506 SolveAll}{\rtlch\fcs1 \ab\af1 \ltrch\fcs0 \b\f31506\cf1\insrsid9907738 \hich\af31506\dbch\af31505\loch\f31506 Chunk}{\rtlch\fcs1 \ab\af1 \ltrch\fcs0 +\b\f31506\cf1\insrsid13336457 \hich\af31506\dbch\af31505\loch\f31506 s}{\rtlch\fcs1 \ab\af1 \ltrch\fcs0 \b\f31506\cf1\insrsid7616262\charrsid7616262 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 -\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid7616262 \hich\af31506\dbch\af31505\loch\f31506 SolveAllBoards solves a}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid16405367 \hich\af31506\dbch\af31505\loch\f31506 - number of boards in parallel for increased performance compared to solve them sequentionally using a SolveBoard call for each board.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid7616262 +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid13336457 \hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 A \'93\loch\f31506 \hich\f31506 chunk\'94}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid16610750 \hich\af31506\dbch\af31505\loch\f31506 + is a collection of boards \hich\af31506\dbch\af31505\loch\f31506 to be }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid13336457 \hich\af31506\dbch\af31505\loch\f31506 solved by the same thread. +\par \hich\af31506\dbch\af31505\loch\f31506 SolveAll}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid9907738 \hich\af31506\dbch\af31505\loch\f31506 Chunk}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid13336457 \hich\af31506\dbch\af31505\loch\f31506 s}{ +\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid7616262 \hich\af31506\dbch\af31505\loch\f31506 solves a}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid16405367 \hich\af31506\dbch\af31505\loch\f31506 number of }{\rtlch\fcs1 \af1 \ltrch\fcs0 +\f31506\cf1\insrsid16610750 \hich\af31506\dbch\af31505\loch\f31506 chunk}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid16405367 \hich\af31506\dbch\af31505\loch\f31506 +s in parallel for increased performance compared to solve them sequentionally using a SolveBoard call for each board.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid7616262 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid16405367 -\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 SolveAllBoards is called with a buffer containi}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid7807046 -\hich\af31506\dbch\af31505\loch\f31506 ng }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid2443070 \hich\af31506\dbch\af31505\loch\f31506 board dat}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid7807046 \hich\af31506\dbch\af31505\loch\f31506 a }{ -\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid2443070 \hich\af31506\dbch\af31505\loch\f31506 for a }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid7807046 \hich\af31506\dbch\af31505\loch\f31506 number of boards, maximum 2}{\rtlch\fcs1 \af1 -\ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 -00 boards per call. Each board is defined with the same input data as in SolveBoardPBN. The input data per board can be freely given independent of the settings for the other deals. SolveAllBoards uses multi-thread calls to SolveBoardPBN for solving the b -\hich\af31506\dbch\af31505\loch\f31506 u\hich\af31506\dbch\af31505\loch\f31506 ffered boards. +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid13336457 \hich\af31506\dbch\af31505\loch\f31506 SolveAll}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid16147558 \hich\af31506\dbch\af31505\loch\f31506 Chunk}{\rtlch\fcs1 \af1 \ltrch\fcs0 +\f31506\cf1\insrsid13336457 \hich\af31506\dbch\af31505\loch\f31506 s}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 is called with a buffer c\hich\af31506\dbch\af31505\loch\f31506 ontaini} +{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid7807046 \hich\af31506\dbch\af31505\loch\f31506 ng }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid2443070 \hich\af31506\dbch\af31505\loch\f31506 board dat}{\rtlch\fcs1 \af1 \ltrch\fcs0 +\f31506\cf1\insrsid7807046 \hich\af31506\dbch\af31505\loch\f31506 a }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid2443070 \hich\af31506\dbch\af31505\loch\f31506 for a }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid7807046 +\hich\af31506\dbch\af31505\loch\f31506 number of boards, maximum 2}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 +00 boards per call. Each board is defined with the same input data as in SolveBoardPBN. The input data per board can be freely given independent of the settings for the other d}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid13336457 +\hich\af31506\dbch\af31505\loch\f31506 eals. SolveAll}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid16147558 \hich\af31506\dbch\af31505\loch\f31506 Chunk}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid13336457 \hich\af31506\dbch\af31505\loch\f31506 s +}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 uses \hich\af31506\dbch\af31505\loch\f31506 multi-thread calls to SolveBoardPBN for solving the buffered boards.}{\rtlch\fcs1 \af1 +\ltrch\fcs0 \f31506\cf1\insrsid16147558 \hich\af31506\dbch\af31505\loch\f31506 The chunkSize}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid13336457 \hich\af31506\dbch\af31505\loch\f31506 parameter in the SolveAll}{\rtlch\fcs1 \af1 \ltrch\fcs0 +\f31506\cf1\insrsid16147558 \hich\af31506\dbch\af31505\loch\f31506 Chunk}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid13336457 \hich\af31506\dbch\af31505\loch\f31506 s}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid16147558 +\hich\af31506\dbch\af31505\loch\f31506 call specifies how many boards that are allocated per thread.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \par \par \hich\af31506\dbch\af31505\loch\f31506 struct boardsPBN \{ \par \hich\af31506\dbch\af31505\loch\f31506 int noOfBoards; \par \hich\af31506\dbch\af31505\loch\f31506 struct dealPBN deals[MAXNOOFBOARDS]; -\par \hich\af31506\dbch\af31505\loch\f31506 int target[MAXNOOFBOARDS]; +\par \hich\af31506\dbch\af31505\loch\f31506 \hich\af31506\dbch\af31505\loch\f31506 int target[MAXNOOFBOARDS]; \par \hich\af31506\dbch\af31505\loch\f31506 int solutions[MAXNOOFBOARDS]; \par \hich\af31506\dbch\af31505\loch\f31506 int mode[MAXNOOFBOARDS]; \par \}\hich\af31506\dbch\af31505\loch\f31506 ; \par \par \hich\af31506\dbch\af31505\loch\f31506 struct solvedBoards \{ \par \hich\af31506\dbch\af31505\loch\f31506 int noOfBoards; -\par \hich\af31506\dbch\af31505\loch\f31506 struct futureTricks solvedBoar\hich\af31506\dbch\af31505\loch\f31506 d[MAXNOOFBOARDS]; +\par \hich\af31506\dbch\af31505\loch\f31506 struct futureTricks solvedBoard[MAXNOOFBOARDS]; \par \}\hich\af31506\dbch\af31505\loch\f31506 ; \par -\par \hich\af31506\dbch\af31505\loch\f31506 In the SolveAllBoards call, the cards are coded in PBN text format using the dealPBN structure. The number of boards to be solved must be defined in the boardsPBN structure, the number must not}{\rtlch\fcs1 \af1 -\ltrch\fcs0 \f31506\cf1\insrsid12595779 \hich\af31506\dbch\af31505\loch\f31506 exceed MAXNOOFBOARDS which is 2}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 00. In th -\hich\af31506\dbch\af31505\loch\f31506 e returned information in struct solvedBoards, the number of solved boards are given. The futureTricks information is provided for all solved boards with the same returned information per board as with SolveBoard. - -\par -\par \hich\af31506\dbch\af31505\loch\f31506 SolveAllBoards returns 1 if the call suc\hich\af31506\dbch\af31505\loch\f31506 ceeds, otherwise an error code identical to the SolveBoard error codes is given when there is a problem in the input information. -\par +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid13336457 \hich\af31506\dbch\af31505\loch\f31506 In the SolveAll}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid13714332 \hich\af31506\dbch\af31505\loch\f31506 Chunk}{\rtlch\fcs1 \af1 \ltrch\fcs0 +\f31506\cf1\insrsid13336457 \hich\af31506\dbch\af31505\loch\f31506 s}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 call, the\hich\af31506\dbch\af31505\loch\f31506 + cards are coded in PBN text format using the dealPBN structure. The number of boards to be solved must be defined in the boardsPBN structure, the number must not}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid12595779 +\hich\af31506\dbch\af31505\loch\f31506 exceed MAXNOOFBOARDS which is 2}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 00. In the returned information in struct solvedBoards,}{\rtlch\fcs1 +\af1 \ltrch\fcs0 \f31506\cf1\insrsid13714332 \hich\af31506\dbch\af31505\loch\f31506 the nu\hich\af31506\dbch\af31505\loch\f31506 mber of solved boards is}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 +\hich\af31506\dbch\af31505\loch\f31506 given. The futureTricks information is provided for all solved boards with the same returned information per board as with SolveBoard. +\par +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid13336457 \hich\af31506\dbch\af31505\loch\f31506 SolveAll}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid13714332 \hich\af31506\dbch\af31505\loch\f31506 Chunk}{\rtlch\fcs1 \af1 \ltrch\fcs0 +\f31506\cf1\insrsid13336457 \hich\af31506\dbch\af31505\loch\f31506 s}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid9002512 \hich\af31506\dbch\af31505\loch\f31506 returns 1 if the call succeeds. In case chu}{\rtlch\fcs1 \af1 \ltrch\fcs0 +\f31506\cf1\insrsid3036029 \hich\af31506\dbch\af31505\loch\f31506 n}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid9002512 \hich\af31506\dbch\af31505\loch\f31506 kSize is set to less than 1, the er\hich\af31506\dbch\af31505\loch\f31506 ror code -201}{ +\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid3036029 \hich\af31506\dbch\af31505\loch\f31506 is given}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid9002512 ,}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid16610750 +\hich\af31506\dbch\af31505\loch\f31506 otherwise }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 error code}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid16610750 +\hich\af31506\dbch\af31505\loch\f31506 s}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 identical to the SolveBoard}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid15821976 +\hich\af31506\dbch\af31505\loch\f31506 PBN}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 error codes is given when there is a problem in the input information.}{\rtlch\fcs1 \af1 +\ltrch\fcs0 \f31506\cf1\insrsid6650094 +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid13336457 +\par +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid13250408 +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \b\f37\cf1\insrsid13250408\charrsid13250408 \hich\af37\dbch\af31505\loch\f37 SolveAllBoards +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid13250408 +\par \hich\af37\dbch\af31505\loch\f37 SolveAllBoards gives the same results as calling Solve}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid13336457 \hich\af37\dbch\af31505\loch\f37 All}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid13250408 +\hich\af37\dbch\af31505\loch\f37 Chunk}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid13336457 \hich\af37\dbch\af31505\loch\f37 s}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid13250408 \hich\af37\dbch\af31505\loch\f37 with chunksize=1. Solve +\hich\af37\dbch\af31505\loch\f37 AllBoards is included to obtain DDS backward compatibility. }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid13250408\charrsid13915886 +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \par }{\rtlch\fcs1 \ab\af1 \ltrch\fcs0 \b\f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 Note}{\rtlch\fcs1 \ab\af1 \ltrch\fcs0 \b\f31506\cf1\insrsid10631094 \hich\af31506\dbch\af31505\loch\f31506 s on DDS use for simulations} {\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \par -\par \hich\af31506\dbch\af31505\loch\f31506 SolveAllBoards is optimal when the input boards are dissimilar. Adjacent boards in the boar\hich\af31506\dbch\af31505\loch\f31506 -ds buffer that are similar (same trump, very minor difference between cards distribution between hands) typically means that transposition table information cannot be reused. That is because these boards typically use different threads. }{\rtlch\fcs1 -\af1 \ltrch\fcs0 \f31506\cf1\insrsid1191142 \hich\af31506\dbch\af31505\loch\f31506 In simulation}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid10631094 \hich\af31506\dbch\af31505\loch\f31506 s invo\hich\af31506\dbch\af31505\loch\f31506 lving }{ -\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid1191142 \hich\af31506\dbch\af31505\loch\f31506 different d}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid14169293 \hich\af31506\dbch\af31505\loch\f31506 eclarer hand alternatives and}{\rtlch\fcs1 \af1 -\ltrch\fcs0 \f31506\cf1\insrsid1191142 \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid1706832 \hich\af31506\dbch\af31505\loch\f31506 possibly also }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid1191142 -\hich\af31506\dbch\af31505\loch\f31506 different suit trump alternatives, usage of }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid7167315 \hich\af31506\dbch\af31505\loch\f31506 Calc}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid1191142 -\hich\af31506\dbch\af31505\loch\f31506 AllTables is a more convenient and probably a faster alternative}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 . }{\rtlch\fcs1 \af1 \ltrch\fcs0 -\f31506\cf1\insrsid1191142 \line \hich\af31506\dbch\af31505\loch\f31506 E.g. if the task is to make simulations to find which of the major suits is best\hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid2060511 -\hich\af31506\dbch\af31505\loch\f31506 in a}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid1191142 \hich\af31506\dbch\af31505\loch\f31506 trump contract and which hand is best as declarer, then }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid2060511 -\hich\af31506\dbch\af31505\loch\f31506 such}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid1191142 \hich\af31506\dbch\af31505\loch\f31506 simulation is }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid2060511 \hich\af31506\dbch\af31505\loch\f31506 -easily set up using }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid7167315 \hich\af31506\dbch\af31505\loch\f31506 Calc}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid2060511 \hich\af31506\dbch\af31505\loch\f31506 -AllTables and most likely runs faster than with }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid7167315 \hich\af31506\dbch\af31505\loch\f31506 Solve}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid2060511 \hich\af31506\dbch\af31505\loch\f31506 -AllBoards.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid13915886\charrsid13915886 +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid2427760 \hich\af31506\dbch\af31505\loch\f31506 Setting parameter chunkSize to 1 in the call to }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid13336457 \hich\af31506\dbch\af31505\loch\f31506 SolveAll}{ +\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid543320 \hich\af31506\dbch\af31505\loch\f31506 Chunk}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid13336457 \hich\af31506\dbch\af31505\loch\f31506 s}{\rtlch\fcs1 \af1 \ltrch\fcs0 +\f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 is optimal when th}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid2427760 \hich\af31506\dbch\af31505\loch\f31506 e input boards are dissimilar. If however, a}{ +\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 djacent boards in the boards buffer are similar (same trump, very minor difference between ca}{\rtlch\fcs1 \af1 \ltrch\fcs0 +\f31506\cf1\insrsid2427760 \hich\af31506\dbch\af31505\loch\f31506 rds distribution between hands), then the }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 transp}{\rtlch\fcs1 \af1 +\ltrch\fcs0 \f31506\cf1\insrsid2427760 \hich\af31506\dbch\af31505\loch\f31506 osition table information can often}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 be reused. }{\rtlch\fcs1 +\af1 \ltrch\fcs0 \f31506\cf1\insrsid2427760 \hich\af31506\dbch\af31505\loch\f31506 But it is then necessary that}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 these boards use }{ +\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid8000484 \hich\af31506\dbch\af31505\loch\f31506 the same thread}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid2427760 \hich\af31506\dbch\af31505\loch\f31506 . }{\rtlch\fcs1 \af1 \ltrch\fcs0 +\f31506\cf1\insrsid8000484 \hich\af31506\dbch\af31505\loch\f31506 For \hich\af31506\dbch\af31505\loch\f31506 example, when the simulation aims to find out which hand is best as declarer, the boards can be grouped in pairs where }{\rtlch\fcs1 \af1 +\ltrch\fcs0 \f31506\cf1\insrsid2446079 \hich\af31506\dbch\af31505\loch\f31506 the two}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid8000484 \hich\af31506\dbch\af31505\loch\f31506 board}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid2446079 +\hich\af31506\dbch\af31505\loch\f31506 s in the pair have}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid8000484 \hich\af31506\dbch\af31505\loch\f31506 different declarer }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid4675069 +\hich\af31506\dbch\af31505\loch\f31506 hand}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid2446079 \hich\af31506\dbch\af31505\loch\f31506 s}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid4675069 \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 +\af1 \ltrch\fcs0 \f31506\cf1\insrsid8000484 \hich\af31506\dbch\af31505\loch\f31506 but otherwise are the same. }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid4675069 \hich\af31506\dbch\af31505\loch\f31506 +In this case, chunkSize should be set to 2 for obtai\hich\af31506\dbch\af31505\loch\f31506 ning transposition table information reuse. +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid1191142 \hich\af31506\dbch\af31505\loch\f31506 In simulation}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid10631094 \hich\af31506\dbch\af31505\loch\f31506 s involving }{\rtlch\fcs1 \af1 \ltrch\fcs0 +\f31506\cf1\insrsid1191142 \hich\af31506\dbch\af31505\loch\f31506 different d}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid14169293 \hich\af31506\dbch\af31505\loch\f31506 eclarer hand alternatives and}{\rtlch\fcs1 \af1 \ltrch\fcs0 +\f31506\cf1\insrsid1191142 \hich\af31506\dbch\af31505\loch\f31506 \hich\af31506\dbch\af31505\loch\f31506 different \hich\af31506\dbch\af31505\loch\f31506 trump }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid16610750 +\hich\af31506\dbch\af31505\loch\f31506 suit }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid1191142 \hich\af31506\dbch\af31505\loch\f31506 alternatives, usage of }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid7167315 +\hich\af31506\dbch\af31505\loch\f31506 Calc}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid1191142 \hich\af31506\dbch\af31505\loch\f31506 AllTables }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid2112392 \hich\af31506\dbch\af31505\loch\f31506 can be}{ +\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid1191142 \hich\af31506\dbch\af31505\loch\f31506 a more }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid2112392 \hich\af31506\dbch\af31505\loch\f31506 convenient}{\rtlch\fcs1 \af1 \ltrch\fcs0 +\f31506\cf1\insrsid1191142 \hich\af31506\dbch\af31505\loch\f31506 alternative}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid2060511 .}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid13915886\charrsid13915886 \par \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \b\f31506\cf1\insrsid13915886\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 CalcPar \par \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid556337 \hich\af31506\dbch\af31505\loch\f31506 CalcPar c}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid13915886\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 alculates the par score and par contracts of a given deal.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid750573 \hich\af31506\dbch\af31505\loch\f31506 - It also includes calculation and presentation of the double dummy values table otherwise calculated by the CalcDDtable function, since this table is a prerequisite for the par calculations. Thus there is no need to make a CalcDDtable call before calling -\hich\af31506\dbch\af31505\loch\f31506 C\hich\af31506\dbch\af31505\loch\f31506 alcPar. }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid13915886\charrsid13915886 \line + It also includes calculation and presentation of the double dummy values table otherwise calculated by the CalcDDtable function, since this table is a prerequisite for the par calculations. Thus th\hich\af31506\dbch\af31505\loch\f31506 +ere is no need to make a CalcDDtable call before calling CalcPar. }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid13915886\charrsid13915886 \line \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid13915886 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid13915886\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 Before Calc}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid7683346 \hich\af31506\dbch\af31505\loch\f31506 Par}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid12530193 \hich\af31506\dbch\af31505\loch\f31506 can be called, }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid13174672 \hich\af31506\dbch\af31505\loch\f31506 a }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid13915886\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 structure of }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid13174672 \hich\af31506\dbch\af31505\loch\f31506 each }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid13915886\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 type " ddTableResults" }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid12530193 \hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 and \'93\loch\f31506 \hich\f31506 parResults\'94\loch\f31506 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid13915886\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 must be declared. \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid12530193 \hich\af31506\dbch\af31505\loch\f31506 CalcPar}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid13915886\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 - returns a status integer, "no fault" means the DLL supplies the double dummy scores in the "ddTableResults" type structure}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid12530193 \hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 - and the par results in the \'93\loch\f31506 \hich\f31506 parResults\'94\loch\f31506 structure.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid13915886 + returns a status integer, "no fault" means the DLL supplies the double d\hich\af31506\dbch\af31505\loch\f31506 ummy scores in the "ddTableResults" type structure}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid12530193 +\hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 and the par results in the \'93\loch\f31506 \hich\f31506 parResults\'94\loch\f31506 structure.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid13915886 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid14295269 \hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 Calling CalcPar with the structure of type \'93\loch\f31506 \hich\f31506 ddTableDeal\'94\loch\f31506 is done in the same way as for calling CalcDDtable.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid8527940 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid14295269\charrsid13915886 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid13915886\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 Status codes: \par \hich\af31506\dbch\af31505\loch\f31506 1=No fault, -\par \hich\af31506\dbch\af31505\loch\f31506 Other status codes are errors, with codes equal to SolveBoa\hich\af31506\dbch\af31505\loch\f31506 rd status codes. }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid1190356 +\par \hich\af31506\dbch\af31505\loch\f31506 Other sta\hich\af31506\dbch\af31505\loch\f31506 tus codes are errors, with codes equal to SolveBoard status codes. }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid1190356 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid1258951 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid1190356 \hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 Parameter \'93}{\rtlch\fcs1 \af1 \ltrch\fcs0 \b\f31506\insrsid1261441 \hich\af31506\dbch\af31505\loch\f31506 vulnerable}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid1190356 \loch\af31506\dbch\af31505\hich\f31506 \'94}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid7952569 \hich\af31506\dbch\af31505\loch\f31506 is set according to:}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid1190356 @@ -476,10 +522,10 @@ ddTableDeal\'94\loch\f31506 \hich\f31506 and \'93\loch\f31506 ddTableR}{\rtlch\ \f31506\insrsid1190356 \hich\af31506\dbch\af31505\loch\f31506 the call to CalcPar: \par \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid1190356 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid1190356\charrsid1190356 \hich\af37\dbch\af31505\loch\f37 struct parResults \{ -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid8541195 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid8541195 \hich\af37\dbch\af31505\loch\f37 char parScore[2][16];\tab -/* index = 0 is from NS view and index =1 is from EW view. */}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid1190356\charrsid1190356 -\par \hich\af37\dbch\af31505\loch\f37 char parContractsString[2][12\hich\af37\dbch\af31505\loch\f37 8];}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid8541195 \hich\af37\dbch\af31505\loch\f37 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid8541195\charrsid1190356 -\hich\af37\dbch\af31505\loch\f37 /* index = 0 is NS view and index = 1 is EW view. }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid8541195 \hich\af37\dbch\af31505\loch\f37 \hich\f37 By \'93\loch\f37 \hich\f37 view\'94\loch\f37 is +\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid8541195 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid8541195 \hich\af37\dbch\af31505\loch\f37 char parScore[2][16];\tab /* index = 0 is from NS view and index = +\hich\af37\dbch\af31505\loch\f37 1 is from EW view. */}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid1190356\charrsid1190356 +\par \hich\af37\dbch\af31505\loch\f37 char parContractsString[2][128];}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid8541195 \hich\af37\dbch\af31505\loch\f37 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid8541195\charrsid1190356 \hich\af37\dbch\af31505\loch\f37 +/* index = 0 is NS view and index = 1 is EW view. }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid8541195 \hich\af37\dbch\af31505\loch\f37 \hich\f37 By \'93\loch\f37 \hich\f37 view\'94\loch\f37 is \par }\pard \ltrpar\ql \fi720\li2160\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin2160\itap0\pararsid9314635 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid8541195 \hich\af37\dbch\af31505\loch\f37 here meant which side that starts the bidding. }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid8541195\charrsid1190356 \hich\af37\dbch\af31505\loch\f37 */}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid1190356\charrsid1190356 \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid1190356 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid1190356\charrsid1190356 \}\hich\af37\dbch\af31505\loch\f37 ;}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid8799536 @@ -489,34 +535,34 @@ ddTableDeal\'94\loch\f31506 \hich\f31506 and \'93\loch\f31506 ddTableR}{\rtlch\ \rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid9314635 \hich\af31506\dbch\af31505\loch\f31506 points.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid13915886\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid6650094 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid9314635 \hich\af31506\dbch\af31505\loch\f31506 All par contracts }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid9515749 \hich\af31506\dbch\af31505\loch\f31506 for different suits }{\rtlch\fcs1 \af1 \ltrch\fcs0 -\f31506\insrsid9314635 \hich\af31506\dbch\af31505\loch\f31506 are listed with co\hich\af31506\dbch\af31505\loch\f31506 mma separating }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid9515749 \hich\af31506\dbch\af31505\loch\f31506 the }{\rtlch\fcs1 \af1 -\ltrch\fcs0 \f31506\insrsid9314635 \hich\af31506\dbch\af31505\loch\f31506 suits.\line Possible different trick levels of par score contracts are enumerated in the contract description, e.g the possible trick levels }{\rtlch\fcs1 \af1 \ltrch\fcs0 -\f31506\insrsid930020 \hich\af31506\dbch\af31505\loch\f31506 3, }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid9314635 \hich\af31506\dbch\af31505\loch\f31506 4 and 5 in }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid13180120 -\hich\af31506\dbch\af31505\loch\f31506 No trumps, are}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid930020 \hich\af31506\dbch\af31505\loch\f31506 given as 345N}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid9314635 . +\f31506\insrsid9314635 \hich\af31506\dbch\af31505\loch\f31506 are listed with comma separating }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid9515749 \hich\af31506\dbch\af31505\loch\f31506 the }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid9314635 +\hich\af31506\dbch\af31505\loch\f31506 suits.\line Possible different trick levels of par score contracts are enumerated in the contract description, e.g the possible trick levels }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid930020 +\hich\af31506\dbch\af31505\loch\f31506 3, }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid9314635 \hich\af31506\dbch\af31505\loch\f31506 4 and 5 in }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid13180120 \hich\af31506\dbch\af31505\loch\f31506 No trumps, are} +{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid930020 \hich\af31506\dbch\af31505\loch\f31506 given as 345N}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid9314635 . \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid3347855 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid930020 \hich\af31506\dbch\af31505\loch\f31506 Example of par contracts in different suits: -\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid4679726\charrsid4679726 \hich\af37\dbch\af31505\loch\f37 NS:NS 23S,N\hich\af37\dbch\af31505\loch\f37 S 23H}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid4679726 +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid4679726\charrsid4679726 \hich\af37\dbch\af31505\loch\f37 NS:NS 23S,NS 23H}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid4679726 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid930020 \hich\af37\dbch\af31505\loch\f37 This is from the NS view. }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid4679726 \hich\af37\dbch\af31505\loch\f37 North}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid930020 \hich\af37\dbch\af31505\loch\f37 and }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid4679726 \hich\af37\dbch\af31505\loch\f37 South}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid930020 \hich\af37\dbch\af31505\loch\f37 as declarer make 2 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid3347855 \hich\af37\dbch\af31505\loch\f37 or 3 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid9515749 \hich\af37\dbch\af31505\loch\f37 Spades and }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid930020 \hich\af37\dbch\af31505\loch\f37 Hearts} {\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid3347855 \hich\af37\dbch\af31505\loch\f37 contracts, 2 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid9515749 \hich\af37\dbch\af31505\loch\f37 Spades and 2 H}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid3347855 \hich\af37\dbch\af31505\loch\f37 earts with an overtrick.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid9515749 -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid9515749 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid9515749\charrsid9515749 \hich\af37\dbch\af31505\loch\f37 -If only North could make 3 Hearts, the text string would have looked: +\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid9515749 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid9515749\charrsid9515749 \hich\af37\dbch\af31505\loch\f37 If only North could make 3 Hearts, the text string would h +\hich\af37\dbch\af31505\loch\f37 ave looked: \par \hich\af37\dbch\af31505\loch\f37 NS:NS 23S,N 23H}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid3347855 \hich\af37\dbch\af31505\loch\f37 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid930020 \hich\af37\dbch\af31505\loch\f37 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid3347855\charrsid3347855 \hich\af37\dbch\af31505\loch\f37 NS before the colon refer}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid13180120 \hich\af37\dbch\af31505\loch\f37 s}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid3347855\charrsid3347855 \hich\af37\dbch\af31505\loch\f37 to }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid9515749 \hich\af37\dbch\af31505\loch\f37 the}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid12732549 \hich\af37\dbch\af31505\loch\f37 assumed side that made the initial bid in the process for determining the par score / contracts}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid3347855 \hich\af37\dbch\af31505\loch\f37 . }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid9515749 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid14370947 \hich\af37\dbch\af31505\loch\f37 Also, DDS calculates the par score / contracts when the assumed side is EW: \par \hich\af37\dbch\af31505\loch\f37 EW}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid14370947\charrsid14370947 \hich\af37\dbch\af31505\loch\f37 :NS 23S,N 23H }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid14370947 -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid3347855 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid14370947 \hich\af37\dbch\af31505\loch\f37 Nearly always, the par score / contracts are the same fo -\hich\af37\dbch\af31505\loch\f37 r both starting points. One case where they are not is if both sides can make 1 NT but no other contract. }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid3347855 +\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid3347855 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid14370947 \hich\af37\dbch\af31505\loch\f37 +Nearly always, the par score / contracts are the same for both starting points. One case where they are not is if both sides can make 1 NT but no other contract. }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid3347855 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid14370947\charrsid3347855 \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid1190356 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid490522 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \b\f37\insrsid490522\charrsid8593145 \hich\af37\dbch\af31505\loch\f37 CalcParPBN \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid11279197 \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid11279197 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid11279197 \hich\af37\dbch\af31505\loch\f37 \hich\f37 The only difference compared to CalcPar is that the structure type -\'93\loch\f37 \hich\f37 ddTableDealPBN\'94\loch\f37 \hich\f37 is used instead of \'93\loch\f37 \hich\f37 ddTableDeal\'94\loch\f37 . For description o\hich\af37\dbch\af31505\loch\f37 \hich\f37 f \'93\loch\f37 \hich\f37 ddTableDealPBN\'94\loch\f37 +\'93\loch\f37 ddTableDeal\hich\af37\dbch\af31505\loch\f37 \hich\f37 PBN\'94\loch\f37 \hich\f37 is used instead of \'93\loch\f37 \hich\f37 ddTableDeal\'94\loch\f37 \hich\f37 . For description of \'93\loch\f37 \hich\f37 ddTableDealPBN\'94\loch\f37 , see CalcDDtablePBN.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid11279197\charrsid11279197 \hich\af37\dbch\af31505\loch\f37 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid11279197 \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid1190356 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid11279197 \hich\af37\dbch\af31505\loch\f37 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\insrsid490522 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid490522\charrsid13915886 @@ -529,32 +575,32 @@ If only North could make 3 Hearts, the text string would have looked: \par \par \hich\af31506\dbch\af31505\loch\f31506 Rev B, 2006-03-20\tab \tab Updated issue. \par -\par }\pard \ltrpar\ql \fi-2880\li2880\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin2880\itap0 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 Rev C, 2006-03-28\tab \hich\f31506 -Updated issue. Addition of the SolveBoard parameter \'94\loch\f31506 \hich\f31506 mode\'94. +\par }\pard \ltrpar\ql \fi-2880\li2880\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin2880\itap0 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 Rev C, 2006-03-28\tab +\hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 Updated issue. Addition of the SolveBoard parameter \'94\loch\f31506 \hich\f31506 mode\'94. \par -\par \hich\af31506\dbch\af31505\loch\f31506 Rev D, 2006-04-05\tab \hich\af31506\dbch\af31505\loch\f31506 Updated issue. Usage of target=0 to list all cards that are legal to play. +\par \hich\af31506\dbch\af31505\loch\f31506 Rev D, 2006-04-05\tab Updated issue. Usage of target=0 to list all cards that are legal to play. \par \par \hich\af31506\dbch\af31505\loch\f31506 Rev E, 2006-05-29\tab Updated issue. New error code \hich\f31506 \endash \loch\f31506 10 for number of cards > 52. \par -\par \hich\af31506\dbch\af31505\loch\f31506 Rev F, 2006-08-09\tab Updated issue. New mode parameter value = 2. New error code \hich\f31506 \endash \hich\af31506\dbch\af31505\loch\f31506 +\par \hich\af31506\dbch\af31505\loch\f31506 Rev F, 2006-08-09\tab Upda\hich\af31506\dbch\af31505\loch\f31506 ted issue. New mode parameter value = 2. New error code \hich\f31506 \endash \loch\f31506 11 for calling SolveBoard with mode = 2 and forbidden values of other parameters. \par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \par }\pard \ltrpar\ql \fi-2880\li2880\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin2880\itap0 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 Rev F1, 2006-08-14\tab -Clarifications on conditions for returning scores for the different combinations of the values for target and solutions. +Clarifications on conditions for returning scores for the different combinations of the values fo\hich\af31506\dbch\af31505\loch\f31506 r target and solutions. \par -\par \hich\af31506\dbch\af31505\loch\f31506 Rev F2, 2006-08-26\tab New error cod\hich\af31506\dbch\af31505\loch\f31506 e \hich\f31506 \endash \loch\f31506 12 for wrongly set valu}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid9047914 -\hich\af31506\dbch\af31505\loch\f31506 es of deal.currentTrickSuit and }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 deal.currentTrickRank. +\par \hich\af31506\dbch\af31505\loch\f31506 Rev F2, 2006-08-26\tab New error code \hich\f31506 \endash \loch\f31506 12 for wrongly set valu}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid9047914 \hich\af31506\dbch\af31505\loch\f31506 +es of deal.currentTrickSuit and }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 deal.currentTrickRank. \par \par \hich\af31506\dbch\af31505\loch\f31506 Rev G, 2007-01-04\tab New DDS release 1.1, otherwise no change compared to isse F2. \par -\par \hich\af31506\dbch\af31505\loch\f31506 Rev H, 2007-04-23\tab DDS release 1.4, changes for parameter mode=2. +\par \hich\af31506\dbch\af31505\loch\f31506 Rev H, 2007-04-23\tab DDS release 1.4, c\hich\af31506\dbch\af31505\loch\f31506 hanges for parameter mode=2. \par -\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6309374 \hich\af31506\dbch\af31505\loch\f31506 Rev I, }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 2010-04-10\tab DDS relea -\hich\af31506\dbch\af31505\loch\f31506 se 2.0, multi-thread support. +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6309374 \hich\af31506\dbch\af31505\loch\f31506 Rev I, }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 2010-04-10\tab +DDS release 2.0, multi-thread support. \par \par \hich\af31506\dbch\af31505\loch\f31506 Rev J, 2010-05-29\tab DDS release 2.1, OpenMP support, reuse of previous DD transposition table results of similar deals. \par -\par \hich\af31506\dbch\af31505\loch\f31506 Rev K, 2010-10-27\tab Correction of fault in the description: 2nd index in resTable of the structure ddTableR\hich\af31506\dbch\af31505\loch\f31506 esults is declarer hand. +\par \hich\af31506\dbch\af31505\loch\f31506 Rev K, 2010-10-27\tab Correction of fault in the desc\hich\af31506\dbch\af31505\loch\f31506 ription: 2nd index in resTable of the structure ddTableResults is declarer hand. \par \par \hich\af31506\dbch\af31505\loch\f31506 Rev L, 2011-10-14\tab Added SolveBoardPBN and CalcDDtablePBN. \par @@ -562,8 +608,8 @@ Clarifications on conditions for returning scores for the different combinations \par \par \hich\af31506\dbch\af31505\loch\f31506 Rev N, 2012-07-16\tab Max number of threads is 8.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid4538894\charrsid13915886 \par -\par \hich\af31506\dbch\af31505\loch\f31506 Rev O, 2012-10-21\tab Max number of threads is }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid4542728\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 configured at initial start-up, but nev -\hich\af31506\dbch\af31505\loch\f31506 er exceeds 16.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid4538894\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid4538894 +\par \hich\af31506\dbch\af31505\loch\f31506 Rev O, 2012-10-21\tab \hich\af31506\dbch\af31505\loch\f31506 Max number of threads is }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid4542728\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 +configured at initial start-up, but never exceeds 16.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid4538894\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid4538894 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid13316938 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid13316938 \hich\af37\dbch\af31505\loch\f37 Rev P, 2013-03-16}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid13316938\charrsid13316938 \tab }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid13316938 \hich\af37\dbch\af31505\loch\f37 Added functions CalcPar and CalcParPBN}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid13316938\charrsid13316938 .}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid13316938 @@ -574,8 +620,13 @@ Clarifications on conditions for returning scores for the different combinations \par \hich\af37\dbch\af31505\loch\f37 Rev R, 2014-01-13\tab Updated }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid12595779\charrsid12595779 \hich\af37\dbch\af31505\loch\f37 functions CalcAllTables/CalcAllTablesPBN.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid12595779 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid7089377 -\par \hich\af37\dbch\af31505\loch\f37 Rev S}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid7089377\charrsid7089377 \hich\af37\dbch\af31505\loch\f37 , 2014-01-13\tab Updated \hich\af37\dbch\af31505\loch\f37 functions CalcAllTables/CalcAllTablesPBN.}{\rtlch\fcs1 -\af1 \ltrch\fcs0 \f37\cf1\insrsid7089377 +\par \hich\af37\dbch\af31505\loch\f37 Rev S}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid7089377\charrsid7089377 \hich\af37\dbch\af31505\loch\f37 , 2014-01-13\tab Updated functions CalcAllTables/CalcAllTablesPBN.}{\rtlch\fcs1 \af1 \ltrch\fcs0 +\f37\cf1\insrsid7089377 +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid10245607 +\par \hich\af37\dbch\af31505\loch\f37 Rev T, 2014-03-01}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid10245607\charrsid10245607 \tab }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid10245607 \hich\af37\dbch\af31505\loch\f37 Added function}{\rtlch\fcs1 \af1 +\ltrch\fcs0 \f37\cf1\insrsid10245607\charrsid10245607 \hich\af37\dbch\af31505\loch\f37 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid13336457 \hich\af37\dbch\af31505\loch\f37 SolveAll}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid10245607 +\hich\af37\dbch\af31505\loch\f37 Chunk}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid13336457 \hich\af37\dbch\af31505\loch\f37 s}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid10245607\charrsid10245607 .}{\rtlch\fcs1 \af1 \ltrch\fcs0 +\f37\cf1\insrsid10245607 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6950962 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6950962\charrsid13915886 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid4538894\charrsid13915886 @@ -688,8 +739,8 @@ fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e50000000000000000000000005067 -20bc082ecf01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 +ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e5000000000000000000000000005a +9a73c934cf01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file diff --git a/dds.cpp b/dds.cpp index f3076b76..85289673 100755 --- a/dds.cpp +++ b/dds.cpp @@ -1,5 +1,5 @@ -/* DDS 2.4.3 A bridge double dummy solver. */ +/* DDS 2.5.0 A bridge double dummy solver. */ /* Copyright (C) 2006-2014 by Bo Haglund */ /* Cleanups and porting to Linux and MacOSX (C) 2006 by Alex Martelli. */ /* The code for calculation of par score / contracts is based upon the */ @@ -5695,13 +5695,13 @@ void ReceiveTTstore(struct pos *posPoint, struct nodeCardsType * cardsP, } #endif -#if defined(_WIN32) +#if defined(_WIN32) && !defined(_OPENMP) HANDLE solveAllEvents[MAXNOOFTHREADS]; struct paramType param; LONG volatile threadIndex; LONG volatile current; -const long chunk = 4; +long chunk = 4; DWORD CALLBACK SolveChunkDDtable (void *) { struct futureTricks fut[MAXNOOFBOARDS]; @@ -5793,6 +5793,64 @@ int SolveAllBoards4(struct boards *bop, struct solvedBoards *solvedp) { return param.error; } +int SolveAllBoardsN(struct boards *bop, struct solvedBoards *solvedp, int chunkSize) { + int k/*, errCode*/; + DWORD res; + DWORD solveAllWaitResult; + + current = 0; + threadIndex = -1; + chunk = chunkSize; + + if (bop->noOfBoards > MAXNOOFBOARDS) + return -101; + + for (k = 0; knoOfBoards; + + for (k = 0; ksolvedBoard[k].cards = 0; + + for (k = 0; knoOfBoards = 0; + for (k = 0; ksolvedBoard[k].cards != 0) + solvedp->noOfBoards++; + } + + if (param.error == 0) + return 1; + else + return param.error; +} + + DWORD CALLBACK SolveChunk (void *) { struct futureTricks fut[MAXNOOFBOARDS]; int thid; @@ -5822,6 +5880,8 @@ DWORD CALLBACK SolveChunk (void *) { } + + int SolveAllBoards1(struct boards *bop, struct solvedBoards *solvedp) { int k/*, errCode*/; DWORD res; @@ -5879,6 +5939,8 @@ int SolveAllBoards1(struct boards *bop, struct solvedBoards *solvedp) { else return param.error; } + + #else int SolveAllBoards4(struct boards *bop, struct solvedBoards *solvedp) { int k, i, res, chunk, fail; @@ -5930,6 +5992,59 @@ int SolveAllBoards4(struct boards *bop, struct solvedBoards *solvedp) { return 1; } + +int SolveAllBoardsN(struct boards *bop, struct solvedBoards *solvedp, int chunkSize) { + int k, i, res, chunk, fail; + struct futureTricks fut[MAXNOOFBOARDS]; + + chunk=chunkSize; fail=1; + + if (bop->noOfBoards > MAXNOOFBOARDS) + return -101; + + for (i=0; isolvedBoard[i].cards=0; + +#ifdef _OPENMP + omp_set_num_threads(noOfCores); /* Added after suggestion by Dirk Willecke. */ +#endif + + #pragma omp parallel shared(bop, solvedp, chunk, fail) private(k) + { + + #pragma omp for schedule(dynamic, chunk) + + for (k=0; knoOfBoards; k++) { + res=SolveBoard(bop->deals[k], bop->target[k], bop->solutions[k], + bop->mode[k], &fut[k], +#ifdef _OPENMP + omp_get_thread_num() +#else + 0 +#endif + ); + if (res==1) { + solvedp->solvedBoard[k]=fut[k]; + } + else + fail=res; + } + } + + if (fail!=1) + return fail; + + solvedp->noOfBoards=0; + for (i=0; isolvedBoard[i].cards!=0) + solvedp->noOfBoards++; + } + + return 1; +} + + + int SolveAllBoards1(struct boards *bop, struct solvedBoards *solvedp) { int k, i, res, chunk, fail; struct futureTricks fut[MAXNOOFBOARDS]; @@ -5981,6 +6096,7 @@ int SolveAllBoards1(struct boards *bop, struct solvedBoards *solvedp) { } #endif + int STDCALL CalcDDtable(struct ddTableDeal tableDeal, struct ddTableResults * tablep) { int h, s, k, ind, tr, first, res; @@ -6313,6 +6429,32 @@ int STDCALL SolveAllBoards(struct boardsPBN *bop, struct solvedBoards *solvedp) return res; } + +int STDCALL SolveAllChunks(struct boardsPBN *bop, struct solvedBoards *solvedp, int chunkSize) { + struct boards bo; + int k, i, res; + + if (chunkSize < 1) + return -201; + + bo.noOfBoards = bop->noOfBoards; + for (k = 0; knoOfBoards; k++) { + bo.mode[k] = bop->mode[k]; + bo.solutions[k] = bop->solutions[k]; + bo.target[k] = bop->target[k]; + bo.deals[k].first = bop->deals[k].first; + bo.deals[k].trump = bop->deals[k].trump; + for (i = 0; i <= 2; i++) { + bo.deals[k].currentTrickSuit[i] = bop->deals[k].currentTrickSuit[i]; + bo.deals[k].currentTrickRank[i] = bop->deals[k].currentTrickRank[i]; + } + if (ConvertFromPBN(bop->deals[k].remainCards, bo.deals[k].remainCards) != 1) + return -99; + } + + res = SolveAllBoardsN(&bo, solvedp, chunkSize); + return res; +} #endif #ifdef PBN_PLUS diff --git a/dll.h b/dll.h index 177e39a5..850b76f5 100755 --- a/dll.h +++ b/dll.h @@ -17,7 +17,7 @@ #endif #if defined(_WIN32) && defined(__MINGW32__) -#define WINVER 0x500 /* Dirty trick, but it works. */ +#define WINVER 0x500 # include # include #endif @@ -27,20 +27,23 @@ # include #endif -#if defined(_MSC_VER) -# include -#else +#ifdef __linux__ +# include +#endif + +#define DDS_OPENMP + +#if defined(DDS_OPENMP) # include #endif -#ifdef __linux__ -# include +#if defined(_MSC_VER) +# include #endif /* end of portability-macros section */ -#define DDS_VERSION 20403 /* Version 2.4.3. Allowing for 2 digit - minor versions */ +#define DDS_VERSION 20500 /* Version 2.5.0. Allowing for 2 digit minor versions */ #define PBN @@ -90,12 +93,12 @@ typedef long long __int64; #define NSIZE 100000 #define WSIZE 100000 #define LSIZE 20000 -#define NINIT /*450000*/ 250000 -#define WINIT /*1000000*/ 700000 -#define LINIT /*80000*/ 50000 +#define NINIT 250000 +#define WINIT 700000 +#define LINIT 50000 #define SIMILARDEALLIMIT 5 -#define SIMILARMAXWINNODES /*1000000*/ 700000 +#define SIMILARMAXWINNODES 700000 #define MAXNOOFBOARDS 200/*100*/ @@ -127,8 +130,8 @@ struct gameInfo { /* All info of a particular deal */ struct moveType { - int /*unsigned char*/ suit; - int /*unsigned char*/ rank; + int suit; + int rank; unsigned short int sequence; /* Whether or not this move is the first in a sequence */ short int weight; /* Weight used at sorting */ @@ -187,10 +190,10 @@ struct pos { unsigned short int winRanks[50][4]; /* Cards that win by rank, indices are depth and suit */ unsigned char length[4][4]; - int /*char*/ ubound; - int /*char*/ lbound; - int /*char*/ bestMoveSuit; - int /*char*/ bestMoveRank; + int ubound; + int lbound; + int bestMoveSuit; + int bestMoveRank; int first[50]; /* Hand that leads the trick for each ply*/ int high[50]; /* Hand that is presently winning the trick */ struct moveType move[50]; /* Presently winning move */ @@ -480,6 +483,7 @@ EXTERN_C DLLEXPORT int STDCALL CalcDDtablePBN(struct ddTableDealPBN tableDealPBN #ifdef PBN_PLUS EXTERN_C DLLEXPORT int STDCALL SolveAllBoards(struct boardsPBN *bop, struct solvedBoards *solvedp); +EXTERN_C DLLEXPORT int STDCALL SolveAllChunks(struct boardsPBN *bop, struct solvedBoards *solvedp, int chunkSize); EXTERN_C DLLEXPORT int STDCALL CalcAllTables(struct ddTableDeals *dealsp, int mode, int trumpFilter[5], struct ddTablesRes *resp, struct allParResults *presp); EXTERN_C DLLEXPORT int STDCALL CalcAllTablesPBN(struct ddTableDealsPBN *dealsp, int mode, @@ -539,6 +543,7 @@ void AddWinSet(int thrId); void PrintDeal(FILE *fp, unsigned short ranks[4][4]); int SolveAllBoards4(struct boards *bop, struct solvedBoards *solvedp); +int SolveAllBoardsN(struct boards *bop, struct solvedBoards *solvedp, int chunkSize); int SolveAllBoards1(struct boards *bop, struct solvedBoards *solvedp); int IsCard(char cardChar); diff --git a/readme.txt b/readme.txt index 24427bc7..7a66c2a9 100755 --- a/readme.txt +++ b/readme.txt @@ -1,4 +1,4 @@ -DDS 2.4, Bo Haglund 2014-01-09 +DDS 2.4, Bo Haglund 2014-03-01 For Win32, DDS compiles with Visual C++ 2010 and 2012 Express editions and the TDM-GCC/Mingw port of gcc. @@ -45,16 +45,18 @@ Compiling options: The SolveBoard and CalcDDtable are included in all DDS compilation options. The "PBN" and the "PBN_PLUS" definitions are included in the header fill dll.h. Defining "PBN" means that the functions SolveBoardPBN and CalcDDtablePBN are supported. -Defining "PBN_PLUS" as well means that also the SolveAllBoards function, -ParCalc and ParCalcPBN are supported. +Defining "PBN_PLUS" as well means that also the functions SolveAllBoards, +SolveAllChunks, ParCalc and ParCalcPBN are supported. -The possible configurens thus are: -1) "PBN" and "PBN_PLUS": Support for SolveBoardPBN, CalcDDtablePBN, SolveAllBoards, - SolveAllTables, SolveAllTablesPBN, ParCalc and ParCalcPBN. -2) "PBN": Support for SolveBoardPBN and CalcDDtablePBN. -3) None of these definitions: No support for any of the above 3 functions. +The possible configurations thus are: -Staying with the previous configuration might be needed when 2.4.2 is to replace an +1) None of the definitions "PBN" and "PBN_plus": + only the basic functions SolveBoard and CalcDDtable are supported. +2) "PBN": Also support for SolveBoardPBN and CalcDDtablePBN. +3) "PBN" and "PBN_PLUS": As for "PBN" and also supporting SolveAllBoards, + SolveAllChunks, SolveAllTables, SolveAllTablesPBN, ParCalc and ParCalcPBN. + +Staying with the previous configuration might be needed when 2.5.0 is to replace an older 2.x.y version, and the application using DDS cannot handle a changed interface. diff --git a/release_notes.txt b/release_notes.txt index b234254b..b214542a 100755 --- a/release_notes.txt +++ b/release_notes.txt @@ -441,3 +441,8 @@ Tuned code for increased performance, especially in function MoveGen and in the functions WeightAlloc. +Release Notes DDS 2.5.0 +----------------------- +Added function SolveAllChunks. + +