From c68aefc850a0c9242302b242265e77d5b4e25baf Mon Sep 17 00:00:00 2001 From: Bo Haglund Date: Sun, 11 Nov 2012 13:32:38 -0500 Subject: [PATCH] historical commit dds 2.2.4 --- DLL-dds_223_o.rtf => DLL-dds_224_o.rtf | 56 +-- DLL-dds_240_q.rtf | 661 +++++++++++++++++++++++++ dds.cpp | 97 ++-- dll.h | 11 +- readme.txt | 17 +- release_notes.txt | 19 +- 6 files changed, 750 insertions(+), 111 deletions(-) rename DLL-dds_223_o.rtf => DLL-dds_224_o.rtf (93%) create mode 100644 DLL-dds_240_q.rtf diff --git a/DLL-dds_223_o.rtf b/DLL-dds_224_o.rtf similarity index 93% rename from DLL-dds_223_o.rtf rename to DLL-dds_224_o.rtf index d86284e4..aa492aef 100644 --- a/DLL-dds_223_o.rtf +++ b/DLL-dds_224_o.rtf @@ -40,9 +40,9 @@ \widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang1053\langfe1053\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1053\langfenp1053 \snext11 \ssemihidden \sunhideused 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;}}{\*\rsidtbl \rsid4538894\rsid4542728\rsid6650094\rsid16470149}{\mmathPr\mmathFont34\mbrkBin0 -\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\operator Bo Haglund}{\creatim\yr2012\mo10\dy21\hr14\min22}{\revtim\yr2012\mo10\dy21\hr14\min50}{\version3}{\edmins24}{\nofpages5}{\nofwords1857} -{\nofchars9847}{\nofcharsws11681}{\vern49275}}{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1417\margr1417\margt1417\margb1417\gutter0\ltrsect +\b\fs26\lang1033\langfe0\loch\f31502\hich\af31502\dbch\af31501\langnp1033\langfenp0 \sbasedon10 \slink3 \slocked \ssemihidden \spriority9 Rubrik 3 Char;}}{\*\rsidtbl \rsid4538894\rsid4542728\rsid6650094\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\yr2012\mo11\dy7\hr9\min16}{\version4}{\edmins24}{\nofpages5} +{\nofwords1857}{\nofchars9847}{\nofcharsws11681}{\vern49275}}{\*\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 )}} @@ -53,28 +53,28 @@ Normal Table;}{\*\cs15 \additive \rtlch\fcs1 \ab\af0\afs32 \ltrch\fcs0 \b\fs32\l \par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\insrsid6650094\charrsid4538894 \hich\af1\dbch\af31505\loch\f1 Latest DLL issue with this description is available at }{\field{\*\fldinst {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\insrsid6650094\charrsid4538894 \hich\af1\dbch\af31505\loch\f1 HYPERLINK "http://www.bahnhof.se/wb758135/"}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\lang1053\langfe1053\langnp1053\insrsid4538894 {\*\datafield 00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b5800000068007400740070003a002f002f007700770077002e006200610068006e0068006f0066002e00730065002f00770062003700350038003100330035002f000000795881f43b1d7f48af2c825dc48527630000 -0000a5ab000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\ul\cf2\insrsid6650094\charrsid4538894 \hich\af1\dbch\af31505\loch\f1 http://www.bahnhof.se/wb758135/}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 +0000a5ab00000000}}}{\fldrslt {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\ul\cf2\insrsid6650094\charrsid4538894 \hich\af1\dbch\af31505\loch\f1 http://www.bahnhof.se/wb758135/}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\insrsid6650094\charrsid4538894 \par \par \par }\pard\plain \ltrpar\s2\ql \li0\ri0\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\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\afs20 \ltrch\fcs0 \b\fs20\ul\cf1\insrsid6650094\charrsid4538894 \hich\af1\dbch\af31505\loch\f1 Short description of the DLL functions supported in D}{\rtlch\fcs1 \ab\af1\afs20 \ltrch\fcs0 \b\fs20\ul\cf1\insrsid4538894 -\hich\af1\dbch\af31505\loch\f1 ouble Dummy Problem Solver 2.2.3}{\rtlch\fcs1 \ab\af1\afs20 \ltrch\fcs0 \b\fs20\ul\cf1\insrsid6650094\charrsid4538894 +\ab\af1\afs20 \ltrch\fcs0 \b\fs20\ul\cf1\insrsid6650094\charrsid4538894 \hich\af1\dbch\af31505\loch\f1 Short description of the DLL functions supported in D}{\rtlch\fcs1 \ab\af1\afs20 \ltrch\fcs0 \b\fs20\ul\cf1\insrsid16655487 +\hich\af1\dbch\af31505\loch\f1 ouble Dummy Problem Solver 2.2.4}{\rtlch\fcs1 \ab\af1\afs20 \ltrch\fcs0 \b\fs20\ul\cf1\insrsid6650094\charrsid4538894 \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\afs20 \ltrch\fcs0 \fs20\cf1\insrsid6650094\charrsid4538894 \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\afs20 \ltrch\fcs0 \b\fs20\cf1\insrsid6650094\charrsid4538894 \hich\af1\dbch\af31505\loch\f1 Callable functions \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\afs20 \ltrch\fcs0 \fs20\cf1\insrsid6650094\charrsid4538894 -\par \hich\af1\dbch\af31505\loch\f1 extern "C"\hich\af1\dbch\af31505\loch\f1 __declspec(dllimport) int __stdcall SolveBoard(struct deal, int target, +\par \hich\af1\dbch\af31505\loch\f1 extern "C\hich\af1\dbch\af31505\loch\f1 " __declspec(dllimport) int __stdcall SolveBoard(struct deal, int target, \par \hich\af1\dbch\af31505\loch\f1 int solutions, int mode, struct futureTricks *futp, int threadIndex); \par \par \hich\af1\dbch\af31505\loch\f1 extern "C" __declspec(dllimport) int __stdcall SolveBoardPBN(struct dealPBN, int target, -\par \hich\af1\dbch\af31505\loch\f1 int soluti\hich\af1\dbch\af31505\loch\f1 ons, int mode, struct futureTricks *futp, int threadIndex); +\par \hich\af1\dbch\af31505\loch\f1 int solut\hich\af1\dbch\af31505\loch\f1 ions, int mode, struct futureTricks *futp, int threadIndex); \par \par \hich\af1\dbch\af31505\loch\f1 extern "C" __declspec(dllimport) int __stdcall CalcDDtable(struct ddTableDeal tableDeal, \line struct ddTableResults * tablep); \par -\par \hich\af1\dbch\af31505\loch\f1 extern "C" __declspec(dllimport) int __stdcall CalcDDtablePBN(stru\hich\af1\dbch\af31505\loch\f1 ct ddTableDealPBN\line tableDealPBN, struct ddTableResults * tablep); +\par \hich\af1\dbch\af31505\loch\f1 extern "C" __declspec(dllimport) int __stdcall CalcDDtablePBN(str\hich\af1\dbch\af31505\loch\f1 uct ddTableDealPBN\line tableDealPBN, struct ddTableResults * tablep); \par \par \hich\af1\dbch\af31505\loch\f1 extern "C" __declspec(dllimport) int __stdcall SolveAllBoards(struct boardsPBN *bop, \par \hich\af1\dbch\af31505\loch\f1 struct solvedBoards *solvedp); @@ -84,7 +84,7 @@ Normal Table;}{\*\cs15 \additive \rtlch\fcs1 \ab\af0\afs32 \ltrch\fcs0 \b\fs32\l \ab\af1\afs20 \ltrch\fcs0 \b\fs20\cf1\insrsid6650094\charrsid4538894 \hich\af1\dbch\af31505\loch\f1 SolveBoard \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\afs20 \ltrch\fcs0 \fs20\cf1\insrsid6650094\charrsid4538894 -\par \hich\af1\dbch\af31505\loch\f1 SolveBoard is threa}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\cf1\insrsid4542728 \hich\af1\dbch\af31505\loch\f1 d-safe, so several t\hich\af1\dbch\af31505\loch\f1 hreads }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 +\par \hich\af1\dbch\af31505\loch\f1 SolveBoard is threa}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\cf1\insrsid4542728 \hich\af1\dbch\af31505\loch\f1 d-safe, so several \hich\af1\dbch\af31505\loch\f1 threads }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\cf1\insrsid6650094\charrsid4538894 \hich\af1\dbch\af31505\loch\f1 can call SolveBoard in parallel.}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\cf1\insrsid4538894 \hich\af1\dbch\af31505\loch\f1 The actual}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\cf1\insrsid4542728 \hich\af1\dbch\af31505\loch\f1 maximum number is configured at initial start-up, this number is maximum 16. }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\cf1\insrsid6650094\charrsid4538894 \par @@ -175,16 +175,15 @@ int equals[13]; /* Bitstring of ranks for equivalent lower rank cards. Th \par \hich\af1\dbch\af31505\loch\f1 \hich\f1 Parameter \'94}{\rtlch\fcs1 \ab\af1\afs20 \ltrch\fcs0 \b\fs20\cf1\insrsid6650094\charrsid4538894 \hich\af1\dbch\af31505\loch\f1 threadIndex}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\cf1\insrsid6650094\charrsid4538894 \loch\af1\dbch\af31505\hich\f1 \'94\loch\f1 defines the identity of the t\hich\af1\dbch\af31505\loch\f1 hread used when calling SolveBoard. \par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\cf1\insrsid16470149 \hich\af1\dbch\af31505\loch\f1 A configured maximum number of}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\cf1\insrsid6650094\charrsid4538894 \hich\af1\dbch\af31505\loch\f1 - threads can call SolveBoard in parallel, threadIndex must}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\cf1\insrsid16470149 \hich\af1\dbch\af31505\loch\f1 be an integer \hich\af1\dbch\af31505\loch\f1 in the range \hich\af1\dbch\af31505\loch\f1 -0..max number of threads\hich\af1\dbch\af31505\loch\f1 -\hich\af1\dbch\af31505\loch\f1 \hich\af1\dbch\af31505\loch\f1 1\hich\af1\dbch\af31505\loch\f1 . \hich\af1\dbch\af31505\loch\f1 This maximum nu\hich\af1\dbch\af31505\loch\f1 -mber is configured at DLL initial start-up and cannot exceed 16.}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\cf1\insrsid6650094\charrsid4538894 + threads can call SolveBoard in parallel, threadIndex must}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\cf1\insrsid16470149 \hich\af1\dbch\af31505\loch\f1 be an integer in the range 0..max number of threads - 1. This maximum nu +\hich\af1\dbch\af31505\loch\f1 mber is configured at DLL initial start-up and cannot exceed 16.}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\cf1\insrsid6650094\charrsid4538894 \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \insrsid6650094 \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\afs20 \ltrch\fcs0 \b\fs20\cf1\insrsid6650094\charrsid4538894 \par \hich\af1\dbch\af31505\loch\f1 SolveBoardPBN \par \par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\cf1\insrsid6650094\charrsid4538894 \hich\af1\dbch\af31505\loch\f1 In SolveBoardPBN the remaining cards in the deal information are given in PBN text -\par \hich\af1\dbch\af31505\loch\f1 format (e.g. \line \hich\af1\dbch\af31505\loch\f1 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, SolveboardPBN is identical to SolveBoard. +\par \hich\af1\dbch\af31505\loch\f1 format (e.g. \line W:T5.K4.652.A98542 K6.QJT976.QT7.Q6 432.A.AKJ93.JT73 AQJ987.8532.84.K) instea\hich\af1\dbch\af31505\loch\f1 d of using bits 2-14 in an integer array. Otherwise, SolveboardPBN is identical to SolveBoard. \par \par \hich\af1\dbch\af31505\loch\f1 struct dealPBN \{ @@ -194,7 +193,7 @@ mber is configured at DLL initial start-up and cannot exceed 16.}{\rtlch\fcs1 \a \par \hich\af1\dbch\af31505\loch\f1 }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\cf1\insrsid6650094\charrsid4538894 \hich\af1\dbch\af31505\loch\f1 int currentTrickRank[3]; \par \hich\af1\dbch\af31505\loch\f1 char remainCards[80]; /* First character identifies the hand having the cards given first \par \hich\af1\dbch\af31505\loch\f1 in the string, then the cards of the other hands are given in a -\par \tab \tab \tab \hich\af1\dbch\af31505\loch\f1 clock-wise order, see\hich\af1\dbch\af31505\loch\f1 example above. Null characters fill out +\par \tab \tab \tab \hich\af1\dbch\af31505\loch\f1 clock-wise order, see example above. Null charac\hich\af1\dbch\af31505\loch\f1 ters fill out \par \tab \tab \tab \hich\af1\dbch\af31505\loch\f1 the character array at the end. */ \par \}\hich\af1\dbch\af31505\loch\f1 ; \par }{\rtlch\fcs1 \ab\af1\afs20 \ltrch\fcs0 \b\fs20\cf1\insrsid6650094\charrsid4538894 @@ -207,19 +206,19 @@ mber is configured at DLL initial start-up and cannot exceed 16.}{\rtlch\fcs1 \a \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 \insrsid6650094 \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\afs20 \ltrch\fcs0 \fs20\cf1\insrsid6650094\charrsid4538894 \hich\af1\dbch\af31505\loch\f1 Before CalcDDtable can b\hich\af1\dbch\af31505\loch\f1 e called, a structure of type " ddTableResults" must be declared. +\af1\afs20 \ltrch\fcs0 \fs20\cf1\insrsid6650094\charrsid4538894 \hich\af1\dbch\af31505\loch\f1 Before CalcDDtable can be called, a structure of ty\hich\af1\dbch\af31505\loch\f1 pe " 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\afs20 \ltrch\fcs0 \b\fs20\cf1\insrsid6650094\charrsid4538894 \hich\af1\dbch\af31505\loch\f1 CalcDDtable}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\cf1\insrsid6650094\charrsid4538894 \hich\af1\dbch\af31505\loch\f1 returns a status integer, "no fault" means the DLL supplies the double dummy scores in the "ddTableResults" type structure.\line Status codes: \par \hich\af1\dbch\af31505\loch\f1 1=No fault, -\par \hich\af1\dbch\af31505\loch\f1 Other status codes \hich\af1\dbch\af31505\loch\f1 are errors, with codes equal to SolveBoard status codes. }{\rtlch\fcs1 \af1 \ltrch\fcs0 \insrsid6650094 +\par \hich\af1\dbch\af31505\loch\f1 Other status codes are errors, with codes equa\hich\af1\dbch\af31505\loch\f1 l to SolveBoard status codes. }{\rtlch\fcs1 \af1 \ltrch\fcs0 \insrsid6650094 \par \par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\cf1\insrsid6650094\charrsid4538894 \hich\af1\dbch\af31505\loch\f1 \hich\f1 Structure \'94}{\rtlch\fcs1 \ab\af1\afs20 \ltrch\fcs0 \b\fs20\cf1\insrsid6650094\charrsid4538894 \hich\af1\dbch\af31505\loch\f1 ddTableDeal}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\cf1\insrsid6650094\charrsid4538894 \loch\af1\dbch\af31505\hich\f1 \'94\loch\f1 defines the dealt cards to be analyzed.}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\insrsid6650094 \par \hich\af1\dbch\af31505\loch\f1 struct ddTableDeal \{ \par \hich\af1\dbch\af31505\loch\f1 unsigned int cards[4][4]; /* 1}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\super\insrsid6650094 \hich\af1\dbch\af31505\loch\f1 st}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\insrsid6650094 \hich\af1\dbch\af31505\loch\f1 index is hand, 2}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\super\insrsid6650094 \hich\af1\dbch\af31505\loch\f1 nd}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\insrsid6650094 \hich\af1\dbch\af31505\loch\f1 - index is suit, same coding as for deal.remainCards for\hich\af1\dbch\af31505\loch\f1 SolveBoard. */ + index is suit, same coding as for deal.remainCards for SolveBoard. */ \par \}\hich\af1\dbch\af31505\loch\f1 ; \par \par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\cf1\insrsid6650094\charrsid4538894 \hich\af1\dbch\af31505\loch\f1 struct }{\rtlch\fcs1 \ab\af1\afs20 \ltrch\fcs0 \b\fs20\cf1\insrsid6650094\charrsid4538894 \hich\af1\dbch\af31505\loch\f1 ddTableResults}{ @@ -227,7 +226,7 @@ ddTableDeal}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\cf1\insrsid6650094\charrsi \fs20\insrsid6650094 \par \hich\af1\dbch\af31505\loch\f1 int resTable[5][4];\tab /* 1}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\super\insrsid6650094 \hich\af1\dbch\af31505\loch\f1 st}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\insrsid6650094 \hich\af1\dbch\af31505\loch\f1 index is trump (0=Spades, 1=Hearts, 2=Diamonds, 3=Clubs, 4=No Trump 2}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\super\insrsid6650094 \hich\af1\dbch\af31505\loch\f1 nd}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\insrsid6650094 -\hich\af1\dbch\af31505\loch\f1 index is declar\hich\af1\dbch\af31505\loch\f1 er hand, 0=North, 1=East, 2=South, 3=West */ +\hich\af1\dbch\af31505\loch\f1 index is declarer hand, 0=North, 1=East, 2\hich\af1\dbch\af31505\loch\f1 =South, 3=West */ \par \}\hich\af1\dbch\af31505\loch\f1 ; \par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \insrsid6650094 \par @@ -245,16 +244,15 @@ In CalcDDtablePBN the remaining cards in the deal information are given in PBN t \par \par }{\rtlch\fcs1 \ab\af1\afs20 \ltrch\fcs0 \b\fs20\cf1\insrsid6650094\charrsid4538894 \hich\af1\dbch\af31505\loch\f1 SolveAllBoards}{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \fs20\cf1\insrsid6650094\charrsid4538894 \par -\par \hich\af1\dbch\af31505\loch\f1 -SolveAllBoards is called with a buffer containing a number of boards, maximum 100 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 -\hich\af1\dbch\af31505\loch\f1 e\hich\af1\dbch\af31505\loch\f1 als. SolveAllBoards uses multi-thread calls to SolveBoardPBN for solving the buffered boards. +\par \hich\af1\dbch\af31505\loch\f1 SolveAllBoards is called with a buffer containing a number of boards, maximum 100 boards per call. Each board is defined with the same input data as in SolveBoardPBN. The input data per board can be freely given indep +\hich\af1\dbch\af31505\loch\f1 endent of the settings for the other deals. SolveAllBoards uses multi-thread calls to SolveBoardPBN for solving the buffered boards. \par \par \hich\af1\dbch\af31505\loch\f1 struct boardsPBN \{ \par \hich\af1\dbch\af31505\loch\f1 int noOfBoards; \par \hich\af1\dbch\af31505\loch\f1 struct dealPBN deals[MAXNOOFBOARDS]; \par \hich\af1\dbch\af31505\loch\f1 int target[MAXNOOFBOARDS]; -\par \hich\af1\dbch\af31505\loch\f1 int solutions[MAXNOOFBOARDS]; -\par \hich\af1\dbch\af31505\loch\f1 int mode[MAXNOOFBOARDS\hich\af1\dbch\af31505\loch\f1 ]; +\par \hich\af1\dbch\af31505\loch\f1 int solutions[M\hich\af1\dbch\af31505\loch\f1 AXNOOFBOARDS]; +\par \hich\af1\dbch\af31505\loch\f1 int mode[MAXNOOFBOARDS]; \par \}\hich\af1\dbch\af31505\loch\f1 ; \par \par \hich\af1\dbch\af31505\loch\f1 struct solvedBoards \{ @@ -262,9 +260,9 @@ SolveAllBoards is called with a buffer containing a number of boards, maximum 10 \par \hich\af1\dbch\af31505\loch\f1 struct futureTricks solvedBoard[MAXNOOFBOARDS]; \par \}\hich\af1\dbch\af31505\loch\f1 ; \par -\par \hich\af1\dbch\af31505\loch\f1 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 bo\hich\af1\dbch\af31505\loch\f1 -ardsPBN structure, the number must not exceed MAXNOOFBOARDS which is 100. In the 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 info -\hich\af1\dbch\af31505\loch\f1 r\hich\af1\dbch\af31505\loch\f1 mation per board as with SolveBoard. +\par \hich\af1\dbch\af31505\loch\f1 In the SolveAllBoards call, the cards are coded in PBN text format using the dealPBN structure. The number of boards\hich\af1\dbch\af31505\loch\f1 + to be solved must be defined in the boardsPBN structure, the number must not exceed MAXNOOFBOARDS which is 100. In the returned information in struct solvedBoards, the number of solved boards are given. The futureTricks information is provided for all so +\hich\af1\dbch\af31505\loch\f1 l\hich\af1\dbch\af31505\loch\f1 ved boards with the same returned information per board as with SolveBoard. \par \par \hich\af1\dbch\af31505\loch\f1 SolveAllBoards returns 1 if the call succeeds, otherwise an error code identical to the SolveBoard error codes is given when there is a problem in the input information. \par @@ -426,8 +424,8 @@ fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e500000000000000000000000000c5 -e9978aafcd01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 +ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e5000000000000000000000000c0a4 +9b3fc0bccd01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file diff --git a/DLL-dds_240_q.rtf b/DLL-dds_240_q.rtf new file mode 100644 index 00000000..15c41b9d --- /dev/null +++ b/DLL-dds_240_q.rtf @@ -0,0 +1,661 @@ +{\rtf1\adeflang1025\ansi\ansicpg1252\uc1\adeff1\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi0\deflang1053\deflangfe1053\themelang1053\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;} +{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}{\f37\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} +{\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;} +{\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;} +{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;} +{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} +{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} +{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} +{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} +{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} +{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;} +{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;} +{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} +{\fbiminor\f31579\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbiminor\f31581\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbiminor\f31582\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} +{\fbiminor\f31583\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbiminor\f31584\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbiminor\f31585\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} +{\fbiminor\f31586\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0; +\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}{\*\defchp +\fs22\loch\af31506\hich\af31506\dbch\af31505 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 +\rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1053\loch\f1\hich\af1\dbch\af31505\cgrid\langnp1033\langfenp1053 \snext0 \sqformat \spriority0 Normal;}{\s1\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel0\rin0\lin0\itap0 +\rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1053\loch\f1\hich\af1\dbch\af31505\cgrid\langnp1033\langfenp1053 \sbasedon0 \snext0 \slink15 \sqformat heading 1;}{ +\s2\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel1\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1053\loch\f1\hich\af1\dbch\af31505\cgrid\langnp1033\langfenp1053 \sbasedon0 \snext0 \slink16 \sqformat +heading 2;}{\s3\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\outlinelevel2\rin0\lin0\itap0 \rtlch\fcs1 \af1\afs24\alang1025 \ltrch\fcs0 \fs24\lang1033\langfe1053\loch\f1\hich\af1\dbch\af31505\cgrid\langnp1033\langfenp1053 +\sbasedon0 \snext0 \slink17 \sqformat heading 3;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\* +\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1 +\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af0\afs22\alang1025 \ltrch\fcs0 \fs22\lang1053\langfe1053\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1053\langfenp1053 \snext11 \ssemihidden \sunhideused +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\rsid750573\rsid930020\rsid940090\rsid1187219\rsid1190356\rsid1191142\rsid1258951\rsid1261441\rsid1706832\rsid1770393\rsid2060511\rsid2112235\rsid2260548\rsid2443070\rsid2641133\rsid2894529\rsid3347855\rsid3547548\rsid3819803\rsid4460640 +\rsid4538894\rsid4542728\rsid4602097\rsid4679726\rsid5332441\rsid5462095\rsid5525810\rsid5712409\rsid6228168\rsid6309374\rsid6569652\rsid6633554\rsid6650094\rsid6845226\rsid6950962\rsid7041439\rsid7167315\rsid7616262\rsid7683346\rsid7807046\rsid7949161 +\rsid7952569\rsid8137115\rsid8527940\rsid8541195\rsid8593145\rsid8799536\rsid8999377\rsid9047914\rsid9314635\rsid9515749\rsid9530285\rsid10631094\rsid11078728\rsid11279197\rsid11297517\rsid12068517\rsid12156867\rsid12530193\rsid12732549\rsid12854747 +\rsid12982360\rsid12986669\rsid13174672\rsid13180120\rsid13316938\rsid13915886\rsid14095979\rsid14169293\rsid14295269\rsid14370947\rsid15031452\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\mo1\dy9\hr19\min58}{\version63}{\edmins546}{\nofpages10}{\nofwords2867}{\nofchars15197}{\nofcharsws18028} +{\vern49275}}{\*\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\insrsid9530285 \hich\af31506\dbch\af31505\loch\f31506 Rev Q, 2014-01-09}{\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 +0000a5ab00000000004b0000007900000000007500}}}{\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 +\par }\pard\plain \ltrpar\s2\ql \li0\ri0\keepn\nowidctlpar\wrapdefault\faauto\outlinelevel1\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\ul\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 Short description of the DLL functions supported in D}{\rtlch\fcs1 \ab\af1 \ltrch\fcs0 \b\f31506\ul\cf1\insrsid11078728 +\hich\af31506\dbch\af31505\loch\f31506 ouble Dummy Problem Solver 2.4}{\rtlch\fcs1 \ab\af1 \ltrch\fcs0 \b\f31506\ul\cf1\insrsid8999377\charrsid13915886 .0}{\rtlch\fcs1 \ab\af1 \ltrch\fcs0 \b\f31506\ul\cf1\insrsid6650094\charrsid13915886 +\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 }\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 \hich\af31506\dbch\af31505\loch\f31506 Callable functions +\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 ext\hich\af31506\dbch\af31505\loch\f31506 ern "C" __declspec(dllimport) int __stdcall SolveBoard(struct deal, int target, +\par \hich\af31506\dbch\af31505\loch\f31506 int solutions, int mode, struct futureTricks *futp, int threadIndex); +\par +\par \hich\af31506\dbch\af31505\loch\f31506 extern "C" __declspec(dllimport) int __stdcall SolveBoardPBN(struct dealPBN, int target, +\par \hich\af31506\dbch\af31505\loch\f31506 int\hich\af31506\dbch\af31505\loch\f31506 solutions, int mode, struct futureTricks *futp, int threadIndex); +\par +\par \hich\af31506\dbch\af31505\loch\f31506 extern "C" __declspec(dllimport) int __stdcall CalcDDtable(struct ddTableDeal tableDeal, \line struct ddTableResults * tablep); +\par +\par \hich\af31506\dbch\af31505\loch\f31506 extern "C" __declspec(dllimport) int __stdcall CalcDDtableP\hich\af31506\dbch\af31505\loch\f31506 BN(struct ddTableDealPBN\line tableDealPBN, struct ddTableResults * tablep);}{\rtlch\fcs1 \af1 \ltrch\fcs0 +\f31506\cf1\insrsid6650094 +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid488565 +\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid488565 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid488565 \hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 extern \'93\loch\f31506 \hich\f31506 C\'94\loch\f31506 +__declspec(dllimport) int __stdcall }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid488565\charrsid488565 \hich\af37\dbch\af31505\loch\f37 CalcAllTables(struct ddTableDeals *dealsp,}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid488565 \line }{\rtlch\fcs1 +\af1 \ltrch\fcs0 \f37\cf1\insrsid488565\charrsid488565 \hich\af37\dbch\af31505\loch\f37 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid488565 \hich\af37\dbch\af31505\loch\f37 int mode, int trumpFilter[5], }{\rtlch\fcs1 \af1 \ltrch\fcs0 +\f37\cf1\insrsid488565\charrsid488565 \hich\af37\dbch\af31505\loch\f37 struct ddTablesRes *resp, struct allParResults *presp);}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid488565 +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid7041439 +\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid7041439 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid7041439\charrsid7041439 \hich\af37\dbch\af31505\loch\f37 \hich\f37 extern \'93\loch\f37 \hich\f37 C\'94\loch\f37 +__declspec(dllimport) int __stdcall CalcAllTables}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid7041439 \hich\af37\dbch\af31505\loch\f37 PBN}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid7041439\charrsid7041439 \hich\af37\dbch\af31505\loch\f37 +(struct ddTableDeals}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid7041439 \hich\af37\dbch\af31505\loch\f37 PBN\line *dealsp, }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid7041439\charrsid7041439 \hich\af37\dbch\af31505\loch\f37 +int mode, int trumpFilter[5], struct ddTablesRes *resp, }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid7041439 +\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 SolveAllBoards(st\hich\af31506\dbch\af31505\loch\f31506 ruct boardsPBN *bop, +\par \hich\af31506\dbch\af31505\loch\f31506 struct solvedBoards *solvedp); }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid12986669\charrsid13915886 +\par +\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 extern "C" __d\hich\af31506\dbch\af31505\loch\f31506 eclspec(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 +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid12986669\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 \hich\af31506\dbch\af31505\loch\f31506 SolveBoard +\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 SolveBoard in par\hich\af31506\dbch\af31505\loch\f31506 allel.}{\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 \hich\af31506\dbch\af31505\loch\f31506 the trick data in 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 -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 -\hich\af31506\dbch\af31505\loch\f31506 8=solutions < 1, +\par \hich\af31506\dbch\af31505\loch\f31506 -9=solutions > 3, +\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 current trick is also defined as a remaining card to play. +\par \hich\af31506\dbch\af31505\loch\f31506 -14=W\hich\af31506\dbch\af31505\loch\f31506 rong 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 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 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 \hich\af31506\dbch\af31505\loch\f31506 +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 }{\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 \hich\f31506 + index suit (0-3), values as bitstring of ranks bit 0=0, bit 1=0, bit 2=rank 2, \'85\'85\'85\loch\f31506 . bit 14=rank 1\hich\af31506\dbch\af31505\loch\f31506 4, 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 (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 \hich\af31506\dbch\af31505\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. +\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 solutions that SolveBoard must return: +\par \hich\af31506\dbch\af31505\loch\f31506 targe\hich\af31506\dbch\af31505\loch\f31506 t=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 tricks can be won. \line target=-1, solutions=\hich\af31506\dbch\af31505\loch\f31506 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 returned scores are the same as target w\hich\af31506\dbch\af31505\loch\f31506 +hen 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: Return all optimum cards with their scores. +\par \hich\af31506\dbch\af31505\loch\f31506 \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. +\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 defines the DLL mode of operation.\line mode=\hich\af31506\dbch\af31505\loch\f31506 +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 choices for cards to play, search is don\hich\af31506\dbch\af31505\loch\f31506 e\hich\af31506\dbch\af31505\loch\f31506 + 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 possible equivalents, to play. For both mode=0 and mode=1: If the p\hich\af31506\dbch\af31505\loch\f31506 +receding 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 mode=2 is no longer needed in this case, but can still be done for backw +\hich\af31506\dbch\af31505\loch\f31506 a\hich\af31506\dbch\af31505\loch\f31506 rds 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 to ensure that reusing the table is safe in the actual situation. Exam +\hich\af31506\dbch\af31505\loch\f31506 p\hich\af31506\dbch\af31505\loch\f31506 le: 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, 1, 2, &fut, 0), deal.first=2, i.e. South leads. +\par \hich\af31506\dbch\af31505\loch\f31506 \tab 3rd call: SolveBoard\hich\af31506\dbch\af31505\loch\f31506 (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 \{\hich\af31506\dbch\af31505\loch\f31506 /* The DLL provides 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 i\hich\af31506\dbch\af31505\loch\f31506 nt suit[13]; /* 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=ra\hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 nk 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 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 }{\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\hich\af31506\dbch\af31505\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 ini\hich\af31506\dbch\af31505\loch\f31506 tial 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 in\hich\af31506\dbch\af31505\loch\f31506 +teger 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 char remainCards[80]; /* First character identifies the hand having the cards\hich\af31506\dbch\af31505\loch\f31506 given first +\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 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 +\par +\par \hich\af31506\dbch\af31505\loch\f31506 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 \af0 \ltrch\fcs0 +\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 CalcDD\hich\af31506\dbch\af31505\loch\f31506 table }{\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 + 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 f +\hich\af31506\dbch\af31505\loch\f31506 ault" 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 +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 Structure \'94}{\rtlch\fcs1 \ab\af1 \ltrch\fcs0 \b\f31506\cf1\insrsid6650094\charrsid13915886 +\hich\af31506\dbch\af31505\loch\f31506 ddTableDeal}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \loch\af31506\dbch\af31505\hich\f31506 \'94\hich\af31506\dbch\af31505\loch\f31506 defines the dealt cards to be analyzed.}{ +\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid6650094\charrsid13915886 +\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. */ +\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 \{ /* For each combination trump suit / dec\hich\af31506\dbch\af31505\loch\f31506 larer 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 */ +\par \}\hich\af31506\dbch\af31505\loch\f31506 ; +\par +\par +\par }{\rtlch\fcs1 \ab\af1 \ltrch\fcs0 \b\f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 CalcDDtablePBN}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid6650094\charrsid13915886 +\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 \hich\af31506\dbch\af31505\loch\f31506 +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. +\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]; +\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 +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \b\f31506\cf1\insrsid2112235\charrsid7616262 \hich\af31506\dbch\af31505\loch\f31506 CalcAllTables +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094 +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid1770393 \hich\af37\dbch\af31505\loch\f37 CallAllTables}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid1770393\charrsid1770393 \hich\af37\dbch\af31505\loch\f37 }{\rtlch\fcs1 \af1 \ltrch\fcs0 +\f37\cf1\insrsid1770393 \hich\af37\dbch\af31505\loch\f37 calculates }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid1770393\charrsid1770393 \hich\af37\dbch\af31505\loch\f37 the double dummy values }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid1770393 +\hich\af37\dbch\af31505\loch\f37 of the }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid1770393\charrsid1770393 \hich\af37\dbch\af31505\loch\f37 20 trump suit/declarer hand combinations }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid12068517 +\hich\af37\dbch\af31505\loch\f37 for }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid1770393\charrsid1770393 \hich\af37\dbch\af31505\loch\f37 a number of boards in parallel}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid12068517 +\hich\af37\dbch\af31505\loch\f37 . This increases}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid1770393\charrsid1770393 \hich\af37\dbch\af31505\loch\f37 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid10631094 \hich\af37\dbch\af31505\loch\f37 the speed}{ +\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid1770393\charrsid1770393 \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 board.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid1770393 +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid5525810 +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid5525810\charrsid5525810 \hich\af37\dbch\af31505\loch\f37 Before Calc}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid5525810 \hich\af37\dbch\af31505\loch\f37 AllT}{\rtlch\fcs1 \af1 \ltrch\fcs0 +\f37\cf1\insrsid5525810\charrsid5525810 \hich\af37\dbch\af31505\loch\f37 able}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid5525810 \hich\af37\dbch\af31505\loch\f37 s}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid5525810\charrsid5525810 +\hich\af37\dbch\af31505\loch\f37 can be calle\hich\af37\dbch\af31505\loch\f37 d, 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 +\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 fo\hich\af37\dbch\af31505\loch\f37 r the function CalcDDtable.}{\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 \{ +\par \hich\af37\dbch\af31505\loch\f37 struct ddTableResults results[MAXNOOFBOARDS / 20]; +\par \}\hich\af37\dbch\af31505\loch\f37 ;}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid940090 +\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid6569652 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid5332441\charrsid6569652 +\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\pararsid12156867 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid12156867 \hich\af37\dbch\af31505\loch\f37 + -201=Error, all trump suits and the no trump suit alternatives have been marked in the\line calling parameter \hich\af37\dbch\af31505\loch\f37 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\insrsid12156867 \hich\af37\dbch\af31505\loch\f37 been set to TRUE).}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid12156867\charrsid6569652 +\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid6569652 {\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6569652\charrsid6569652 \hich\af37\dbch\af31505\loch\f37 + Other status codes are errors, with codes equal to SolveBoard status codes.}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6569652 +\par }{\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 \hich\f37 up to 10 deals, each in a structure \'93\loch\f37 \hich\f37 ddTableDeal\'94\loch\f37 , +\par \hich\af37\dbch\af31505\loch\f37 described for the fun\hich\af37\dbch\af31505\loch\f37 ction CalcDDtable. +\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 \{ +\par \hich\af37\dbch\af31505\loch\f37 struct ddTableDeal deals[MAXNOOFBOARDS / 20]; +\par \}\hich\af37\dbch\af31505\loch\f37 ;}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6633554 +\par +\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 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 \hich\af37\dbch\af31505\loch\f37 +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 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 th\hich\af37\dbch\af31505\loch\f37 e 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 +\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 parResults presults[MAXNOOFBOARDS / 20]; +\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\hich\af37\dbch\af31505\loch\f37 +, 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\insrsid12982360 \hich\af37\dbch\af31505\loch\f37 E.g. setting trumpFilter to\line \{FALSE, FALSE, TRUE, TRUE, TRUE\} means that values will only be calculated for}{\rtlch\fcs1 \af1 +\ltrch\fcs0 \f37\cf1\insrsid6650094 +\par }{\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 CalcAllTable\hich\af37\dbch\af31505\loch\f37 sPBN +\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\loch\f37 \hich\f37 ddTableDealPBN\'94\loch\f37 is }{\rtlch\fcs1 +\af1 \ltrch\fcs0 \f37\cf1\insrsid14095979 \hich\af37\dbch\af31505\loch\f37 given}{\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 \{ +\par \hich\af37\dbch\af31505\loch\f37 struct ddTableDealPBN deals[MAXNOOFBOARDS / 20]; +\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 \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\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 b\hich\af31506\dbch\af31505\loch\f31506 +oards 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 buffe +\hich\af31506\dbch\af31505\loch\f31506 r\hich\af31506\dbch\af31505\loch\f31506 ed boards. +\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 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 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 exceed M +\hich\af31506\dbch\af31505\loch\f31506 +AXNOOFBOARDS which is 100. In the 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 SolveAll\hich\af31506\dbch\af31505\loch\f31506 Boards returns 1 if the call succeeds, 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 \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 boards buffer that are similar (same trump, very minor difference between cards distribution between hands) typically means that transposition table information cannot +\hich\af31506\dbch\af31505\loch\f31506 b\hich\af31506\dbch\af31505\loch\f31506 e 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 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 }{\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 al +\hich\af31506\dbch\af31505\loch\f31506 ternative}{\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 }{\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 AllBo\hich\af31506\dbch\af31505\loch\f31506 ards.}{\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 \hich\af31506\dbch\af31505\loch\f31506 +par calculations. Thus there 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 +\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 +\hich\af31506\dbch\af31505\loch\f31506 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 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 +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid7952569 \hich\af31506\dbch\af31505\loch\f31506 0 = None +\par \hich\af31506\dbch\af31505\loch\f31506 1 = Both sides +\par \hich\af31506\dbch\af31505\loch\f31506 2 = North / South side vulnerable +\par \hich\af31506\dbch\af31505\loch\f31506 3 = East / West side vulnerable +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid1258951 +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid5462095 \hich\af31506\dbch\af31505\loch\f31506 The structure t}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid12854747 \hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 ypes \'93\loch\f31506 \hich\f31506 +ddTableDeal\'94\loch\f31506 \hich\f31506 and \'93\loch\f31506 ddTableR}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid5462095 \hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 esults\'94\loch\f31506 are described for the function CalcDDtable.}{ +\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid13915886\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid5462095 \line \hich\af31506\dbch\af31505\loch\f31506 \hich\f31506 The \'93\loch\f31506 +\hich\f31506 parResults\'94\loch\f31506 structure type }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid8799536 \hich\af31506\dbch\af31505\loch\f31506 includes the par score and the par contracts results returned by }{\rtlch\fcs1 \af1 \ltrch\fcs0 +\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 stru\hich\af37\dbch\af31505\loch\f37 ct 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][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 +\hich\af31506\dbch\af31505\loch\f31506 }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid1187219 +\par +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid11297517 \hich\af31506\dbch\af31505\loch\f31506 Par score is give}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\insrsid930020 \hich\af31506\dbch\af31505\loch\f31506 n as a text string, e.g NS -460. NS lost 460}{ +\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 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 \hich\af31506\dbch\af31505\loch\f31506 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,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 \hich\af37\dbch\af31505\loch\f37 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 \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 \hich\af37\dbch\af31505\loch\f37 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 for both starting points. +\hich\af37\dbch\af31505\loch\f37 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 \hich\f37 . For description of \'93\loch\f37 \hich\f37 ddTableDealPBN\'94\loch\f37 , see \hich\af37\dbch\af31505\loch\f37 +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 +\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\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 +\ab\af1 \ltrch\fcs0 \b\f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 Revision History +\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 Rev A, 2006-02-25.\tab \tab First issue. +\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 +\par \hich\af31506\dbch\af31505\loch\f31506 Rev D, 2006-04-05\tab Updated issue. Usage of target=0 to list all cards\hich\af31506\dbch\af31505\loch\f31506 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 \loch\f31506 11 for calling SolveBoard with mode = 2 and forbidden values of other pa +\hich\af31506\dbch\af31505\loch\f31506 rameters. +\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. +\par +\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 +\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 relea\hich\af31506\dbch\af31505\loch\f31506 se 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 ddTableResults is declarer hand. +\par +\par \hich\af31506\dbch\af31505\loch\f31506 Rev L, 2011-10-14\tab Added SolveBoa\hich\af31506\dbch\af31505\loch\f31506 rdPBN and CalcDDtablePBN. +\par +\par \hich\af31506\dbch\af31505\loch\f31506 Rev M, 2012-07-06\tab Added SolveAllBoards. +\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 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 +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6950962 +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid9530285 \hich\af37\dbch\af31505\loch\f37 Rev Q, 2014-01-09}{\rtlch\fcs1 \af1 \ltrch\fcs0 \f37\cf1\insrsid6950962\charrsid6950962 \tab \hich\af37\dbch\af31505\loch\f37 Added functions Calc}{\rtlch\fcs1 \af1 +\ltrch\fcs0 \f37\cf1\insrsid6950962 \hich\af37\dbch\af31505\loch\f37 AllTables/CalcAllTablesPBN. +\par +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6950962\charrsid13915886 +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid4538894\charrsid13915886 +\par }{\rtlch\fcs1 \af1 \ltrch\fcs0 \f31506\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 +\par +\par }{\rtlch\fcs1 \af1\afs20 \ltrch\fcs0 \f31506\fs20\cf1\insrsid6650094\charrsid13915886 \hich\af31506\dbch\af31505\loch\f31506 +\par +\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a +9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad +5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6 +b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0 +0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6 +a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f +c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512 +0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462 +a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865 +6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b +4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b +4757e8d3f729e245eb2b260a0238fd010000ffff0300504b03041400060008000000210036cc113fa8060000a31b0000160000007468656d652f7468656d652f +7468656d65312e786d6cec594f6f1b4514bf23f11d467b6f6327761a4775aad8b11b48d346b15bd4e37877bc3bcdecce6a669cd437d41e9190100571a012370e +08a8d44a5ccaa709144191fa157833b3bbde89d7246923a8a039b4f6ec6fdefff79b37ebabd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad +79482a9c0498f184b4bd2991deb58df7dfbb8ad755446282607f22d771db8b944ad79796a40fcb585ee62949e0d9988b182bf82ac2a540e023901bb3a5e55a6d +7529c634f1508263107b6b3ca63eb9a460abb791cbee31509028a9177c26065a327136186c7050d70839955d26d021666d0fd404fc6848ee2b0f312c153c687b +35f3e72d6d5c5dc2ebd926a616ec2dedeb9bbf6c5fb6213858363a45382a94d6fb8dd695ad42be0130358febf57add5ebd906700d8f7c1536b4b5966a3bf56ef +e4324b20fb715e76b7d6ac355c7c49feca9ccdad4ea7d36c65b658a106643f36e6f06bb5d5c6e6b28337208b6fcee11b9dcd6e77d5c11b90c5afcee1fb575aab +0d176f4011a3c9c11c5a27b4dfcfa417903167db95f03580afd532f80c05d55054975631e6895a546b31bec7451f001ac8b0a20952d3948cb10f45dcc5f14850 +ac15e075824b4fec922fe796b42e247d4153d5f63e4c3134c44cdeabe7dfbf7afe141d3f7876fce0a7e3870f8f1ffc680539bbb671129677bdfcf6b33f1f7f8c +fe78facdcb475f54e36519ffeb0f9ffcf2f3e7d540689f99392fbe7cf2dbb3272fbefaf4f7ef1e55c037051e95e1431a13896e9223b4cf6370cc44c5b59c8cc4 +f9760c234ccb3b369350e2046b2d15f27b2a72d037a79865d971ece81037827704d04715f0fae49e63f0201213452b34ef44b103dce59c75b8a88cc28ed6550a +f3709284d5cac5a48cdbc7f8b04a7717274e7e7b931478332f4bc7f16e441c33f7184e140e494214d2cff8012115dedda5d489eb2ef505977cacd05d8a3a9856 +866448474e35cd366dd318f232adf219f2edc466f70eea7056e5f516397491d0159855183f24cc09e3753c5138ae1239c4312b07fc065651959183a9f0cbb89e +5490e990308e7a0191b26acf2d01fe9692be8381b12ad3becba6b18b148a1e54c9bc81392f23b7f84137c2715a851dd0242a633f900750a218ed715505dfe56e +87e8ef90079c2c4cf71d4a9c749fce06b769e898342b10fd64222a72799d70a77e075336c6c4500d90bac3d5314dfe8eb81905e6b61a2e8eb8812a5f7cfdb8c2 +eeb795b237e1f4aaea99ed1344bd0877929ebb5c04f4ed67e72d3c49f60834c4fc11f58e9cdf91b3f79f27e745fd7cf1943c636120683d8bd841db8cddf1c2a9 +7b4c191ba8292337a419bc259c3d411f16f53e73e124c52d2c8de0a3ee6450e0e04281cd1e24b8fa88aa6810e11486f6baa7858432131d4a9472099745b35c29 +5be361f057f6aad9d49710cb1c12ab5d1ed8e515bd9cdf350a31c6aad05c6873452b5ac05995ad5cc984826fafa3acae8d3ab3b6ba31cd90a2a3ad705987d85c +ca21e4856bb0584413861a04a310447915aefc5a355c763023818ebbcd519e1693858b4c918c7040b21c69bfe773543749ca6b65ce11ed872d067d713c256a25 +6d2d2df60db49d254965758d05eaf2ecbd4996f20a9e6509a49d6c4796949b9325e8a8edb59acb4d0ff9386d7b63b827c3c73885ac4b3d476216c2bb265f095b +f6a736b3e9f259365bb9636e13d4e1d5878dfb9cc30e0fa442aa2d2c235b1ae65156022cd19aacfdcb4d08eb453950c14667b362650d8ae15fb302e2e8a6968c +c7c457e564975674ececd78c4af9441131888223346213b18f21fdba54c19f804a78dd6118417f8177733adae6914bce59d395df88199c5dc72c8d7046b7ba45 +f34eb6704348850de65bc93cf0add276e3dcf95d312d7f41ae94cbf87fe68a3e4fe0edc34aa033e0c39b618191ee94b6c7858a38b0501a51bf2f607030dc01d5 +02ef77e1311415bc9f36ff0b72a8ffb73d676598b6864ba4daa7211214ce23150942f680964cf59d22ac9e9d5d5624cb04998a2a992b536bf6881c1236d41cb8 +aacf760f4550ea864d321a30b893f5e77ecf3a6814ea21a7dc6f0e931567afed817f7af2b1cd0c4eb93c6c069a3cfe8589c578303b55ed7eb33d3f7bcb8ee807 +b331ab917705282b1d05adaced5fd384731eb596b1e63c5e6ee6c64116e73d86c562204ae11d12d2ffc0f94785cf8829637da00ef93e702b821f2fb430281ba8 +ea4b76f0409a20ede2080627bb688b498bb2a1cd46271db5fcb0bee049b7d07b22d8dab2b3e4fb9cc12e8633579dd38b1719ec2cc24eaceddac25043664fb628 +2c8df38b8c498cf995acfc4b161fdd83446fc16f0613a6a42926f89d4a6098a107a60fa0f9ad46b375e32f000000ffff0300504b030414000600080000002100 +0dd1909fb60000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f7 +8277086f6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89 +d93b64b060828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd500 +1996509affb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0f +bfff0000001c0200001300000000000000000000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6 +a7e7c0000000360100000b00000000000000000000000000300100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a +0000001c00000000000000000000000000190200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d00140006000800000021 +0036cc113fa8060000a31b00001600000000000000000000000000d60200007468656d652f7468656d652f7468656d65312e786d6c504b01022d001400060008 +00000021000dd1909fb60000001b0100002700000000000000000000000000b20900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000ad0a00000000} +{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d +617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 +6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 +656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} +{\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef1\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdlocked0 heading 1;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdlocked0 heading 2;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdlocked0 heading 3;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4; +\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9; +\lsdpriority39 \lsdlocked0 toc 1;\lsdpriority39 \lsdlocked0 toc 2;\lsdpriority39 \lsdlocked0 toc 3;\lsdpriority39 \lsdlocked0 toc 4;\lsdpriority39 \lsdlocked0 toc 5;\lsdpriority39 \lsdlocked0 toc 6;\lsdpriority39 \lsdlocked0 toc 7; +\lsdpriority39 \lsdlocked0 toc 8;\lsdpriority39 \lsdlocked0 toc 9;\lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdpriority1 \lsdlocked0 Default Paragraph Font; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority59 \lsdlocked0 Table Grid;\lsdunhideused0 \lsdlocked0 Placeholder Text;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdunhideused0 \lsdlocked0 Revision; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference; +\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdpriority37 \lsdlocked0 Bibliography;\lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 010500000200000018000000 +4d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000 +d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff +ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e50000000000000000000000009020 +35c06c0dcf01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file diff --git a/dds.cpp b/dds.cpp index 87285268..b242090a 100644 --- a/dds.cpp +++ b/dds.cpp @@ -1,5 +1,5 @@ -/* DDS 2.2.3 A bridge double dummy solver. */ +/* DDS 2.2.4 A bridge double dummy solver. */ /* Copyright (C) 2006-2012 by Bo Haglund */ /* Cleanups and porting to Linux and MacOSX (C) 2006 by Alex Martelli */ /* */ @@ -42,10 +42,6 @@ int noOfThreads=MAXNOOFTHREADS; /* The number of entries to the transposition t one entry per thread. */ int noOfCores; /* The number of processor cores, however cannot be higher than noOfThreads. */ -/*#if defined(_MSC_VER) -CRITICAL_SECTION solv_crit; -#endif*/ - #ifdef _MANAGED #pragma managed(push, off) #endif @@ -59,14 +55,8 @@ extern "C" BOOL APIENTRY DllMain(HMODULE hModule, if (ul_reason_for_call==DLL_PROCESS_ATTACH) { InitStart(0, 0); -/*#if defined(_MSC_VER) - InitializeCriticalSection(&solv_crit); -#endif*/ } else if (ul_reason_for_call==DLL_PROCESS_DETACH) { -/*#if defined(_MSC_VER) - DeleteCriticalSection(&solv_crit); -#endif*/ for (k=0; k=noOfThreads)) { + if ((thrId<0)||(thrId>=noOfThreads)) { /* Fault corrected after suggestion by Dirk Willecke. */ DumpInput(-15, dl, target, solutions, mode); return -15; } @@ -860,7 +850,8 @@ void InitStart(int gb_ram, int ncores) { MEMORYSTATUSEX statex; statex.dwLength = sizeof (statex); - GlobalMemoryStatusEx (&statex); + GlobalMemoryStatusEx (&statex); /* Using GlobalMemoryStatusEx instead of GlobalMemoryStatus + was suggested by Lorne Anderson. */ pcmem=(unsigned long long)statex.ullTotalPhys/1024; @@ -875,7 +866,7 @@ void InitStart(int gb_ram, int ncores) { noOfCores=Min(noOfThreads, (int)temp.dwNumberOfProcessors); #endif - #ifdef __linux__ + #ifdef __linux__ /* The code for linux was suggested by Antony Lee. */ FILE* fifo = popen("free -k | tail -n+3 | head -n1 | awk '{print $NF}'", "r"); fscanf(fifo, "%ld", &pcmem); fclose(fifo); @@ -965,9 +956,7 @@ void InitStart(int gb_ram, int ncores) { localVar[k].wmem=(WSIZE+1)*sizeof(struct winCardType); localVar[k].nmem=(NSIZE+1)*sizeof(struct nodeCardsType); localVar[k].lmem=(LSIZE+1)*sizeof(struct posSearchType); - /*localVar[k].maxIndex=(int)( - localVar[k].maxmem-localVar[k].summem)/((WSIZE+1) * sizeof(struct winCardType));*/ - localVar[k].maxIndex=(int)( + localVar[k].maxIndex=(int)( (localVar[k].maxmem-localVar[k].summem)/((WSIZE+1) * sizeof(struct winCardType))); localVar[k].pw = (struct winCardType **)calloc(localVar[k].maxIndex+1, sizeof(struct winCardType *)); @@ -2372,19 +2361,7 @@ int QuickTricks(struct pos * posPoint, int hand, commPartner=FALSE; for (s=0; s<=3; s++) { if ((trump!=4)&&(trump!=s)) { - /*if ((posPoint->rankInSuit[hand][s]!=0)&&((posPoint->rankInSuit[lho[hand]][s]!=0)|| - (posPoint->rankInSuit[lho[hand]][trump]==0))&& - ((posPoint->rankInSuit[rho[hand]][s]!=0)||(posPoint->rankInSuit[rho[hand]][trump]==0))&& - (posPoint->rankInSuit[partner[hand]][s]==0)&&(posPoint->rankInSuit[partner[hand]][trump]>0) - &&((posPoint->winner[s].hand==lho[hand])||(posPoint->winner[s].hand==rho[hand]))&& - ((posPoint->winner[trump].hand==lho[hand])||(posPoint->winner[trump].hand==rho[hand]))) { - commPartner=TRUE; - commSuit=s; - commRank=0; - ruff=TRUE; - break; - } - else*/ if (posPoint->winner[s].hand==partner[hand]) { + if (posPoint->winner[s].hand==partner[hand]) { /* Partner has winning card */ if (posPoint->rankInSuit[hand][s]!=0) { /* Own hand has card in suit */ @@ -2465,16 +2442,7 @@ int QuickTricks(struct pos * posPoint, int hand, countPart=posPoint->length[partner[hand]][suit]; opps=countLho | countRho; - /*if ((ruff)&&(suit==commSuit)) { - qtricks++; - if (qtricks>=cutoff) - return qtricks; - suit++; - if ((trump!=4) && (suit==trump)) - suit++; - continue; - } - else*/ if (!opps && (countPart==0)) { + if (!opps && (countPart==0)) { if (countOwn==0) { /* Continue with next suit. */ if ((trump!=4)&&(trump!=suit)) { @@ -3466,7 +3434,7 @@ int MoveGen(struct pos * posPoint, int depth, int trump, struct movePlyType *mpl k--; } if (m!=1) { - if ((trump!=4)/*&&(posPoint->winner[trump].hand!=-1)*/) { + if ((trump!=4)&&(posPoint->winner[trump].rank!=0)) { for (k=0; k<=m-1; k++) mply->move[k].weight=WeightAllocTrump(posPoint, &(mply->move[k]), depth, ris, trump, thrId); @@ -3516,7 +3484,7 @@ int MoveGen(struct pos * posPoint, int depth, int trump, struct movePlyType *mpl } } - if ((trump!=4)/*&&(posPoint->winner[trump].hand!=-1)*/) { + if ((trump!=4)&&(posPoint->winner[trump].rank!=0)) { for (k=0; k<=m-1; k++) mply->move[k].weight=WeightAllocTrump(posPoint, &(mply->move[k]), depth, 0/*ris*/, trump, thrId); @@ -3544,7 +3512,7 @@ int WeightAllocNT(struct pos * posPoint, struct moveType * mp, int depth, unsigned short notVoidInSuit, int thrId) { int weight=0, k, l, kk, ll, suit, suitAdd=0, leadSuit; int suitWeightDelta, first, q; - int rRank; + int rRank, thirdBestHand; int suitBonus=0; int winMove=FALSE; unsigned short suitCount, suitCountLH, suitCountRH, aggr; @@ -3560,6 +3528,7 @@ int WeightAllocNT(struct pos * posPoint, struct moveType * mp, int depth, switch (posPoint->handRelFirst) { case 0: + thirdBestHand=localVar[thrId].rel[aggr].absRank[3][suit].hand; suitCount=posPoint->length[q][suit]; suitCountLH=posPoint->length[lho[q]][suit]; suitCountRH=posPoint->length[rho[q]][suit]; @@ -3624,6 +3593,13 @@ int WeightAllocNT(struct pos * posPoint, struct moveType * mp, int depth, weight+=20/*17*//*14*/; } else { + if ((posPoint->secondBest[suit].hand==partner[first])&&(partner[first]==thirdBestHand)) + suitWeightDelta+=22/*20*//*10*/; + else if(((posPoint->secondBest[suit].hand==first)&&(partner[first]==thirdBestHand)&& + (posPoint->length[partner[first]][suit]>1))||((posPoint->secondBest[suit].hand==partner[first])&& + (first==thirdBestHand)&&(posPoint->length[partner[first]][suit]>1))) + suitWeightDelta+=24/*20*//*10*/; + if (((suitCountLH==1)&&(posPoint->winner[suit].hand==lho[first])) ||((suitCountRH==1)&&(posPoint->winner[suit].hand==rho[first]))) weight=suitWeightDelta+25/*23*//*22*/+rRank; @@ -3826,7 +3802,7 @@ int WeightAllocNT(struct pos * posPoint, struct moveType * mp, int depth, int WeightAllocTrump(struct pos * posPoint, struct moveType * mp, int depth, unsigned short notVoidInSuit, int trump, int thrId) { int weight=0, k, l, kk, ll, suit, suitAdd=0, leadSuit; - int suitWeightDelta, first, q, rRank; + int suitWeightDelta, first, q, rRank, thirdBestHand; int suitBonus=0; int winMove=FALSE; unsigned short suitCount, suitCountLH, suitCountRH, aggr; @@ -3842,6 +3818,7 @@ int WeightAllocTrump(struct pos * posPoint, struct moveType * mp, int depth, switch (posPoint->handRelFirst) { case 0: + thirdBestHand=localVar[thrId].rel[aggr].absRank[3][suit].hand; suitCount=posPoint->length[q][suit]; suitCountLH=posPoint->length[lho[q]][suit]; suitCountRH=posPoint->length[rho[q]][suit]; @@ -3988,6 +3965,14 @@ int WeightAllocTrump(struct pos * posPoint, struct moveType * mp, int depth, weight+=14/*15*//*12*//*11*/; } else { + if ((posPoint->secondBest[suit].hand==partner[first])&&(partner[first]==thirdBestHand)) + suitWeightDelta+=20/*22*/; + else if(((posPoint->secondBest[suit].hand==first)&&(partner[first]==thirdBestHand)&& + (posPoint->length[partner[first]][suit]>1))|| + ((posPoint->secondBest[suit].hand==partner[first])&& + (first==thirdBestHand)&&(posPoint->length[partner[first]][suit]>1))) + suitWeightDelta+=20/*24*/; + if (((suitCountLH==1)&&(posPoint->winner[suit].hand==lho[first])) ||((suitCountRH==1)&&(posPoint->winner[suit].hand==rho[first]))) weight=suitWeightDelta+rRank-2; @@ -5579,16 +5564,6 @@ DWORD CALLBACK SolveChunkDDtable (void *) { int thid; long j; - /*EnterCriticalSection(&solv_crit); - __try - { - threadIndex++; - thid=threadIndex; - } - __finally - { - LeaveCriticalSection(&solv_crit); - }*/ thid=InterlockedIncrement(&threadIndex); while ((j=_InterlockedExchangeAdd(¤t, chunk))solvedBoard[i].cards=0; - omp_set_num_threads(noOfCores); + omp_set_num_threads(noOfCores); /* Added after suggestion by Dirk Willecke. */ #pragma omp parallel shared(bop, solvedp, chunk, fail) private(k) { @@ -5827,7 +5792,7 @@ int SolveAllBoards1(struct boards *bop, struct solvedBoards *solvedp) { for (i=0; isolvedBoard[i].cards=0; - omp_set_num_threads(noOfCores); + omp_set_num_threads(noOfCores); /* Added after suggestion by Dirk Willecke. */ #pragma omp parallel shared(bop, solvedp, chunk, fail) private(k) { diff --git a/dll.h b/dll.h index 74a4b062..172f8431 100644 --- a/dll.h +++ b/dll.h @@ -35,7 +35,7 @@ /* end of portability-macros section */ -#define DDS_VERSION 20203 /* Version 2.2.3. Allowing for 2 digit +#define DDS_VERSION 20204 /* Version 2.2.4. Allowing for 2 digit minor versions */ #define PBN @@ -365,10 +365,6 @@ struct localVarType { int lenSetSize; /* Index with range 0 to lenSetSizeLimit */ }; -/*#if defined(_WIN32) -extern CRITICAL_SECTION solv_crit; -#endif*/ - extern int noOfThreads; extern int noOfCores; extern struct localVarType localVar[MAXNOOFTHREADS]; @@ -444,6 +440,11 @@ EXTERN_C DLLEXPORT int STDCALL SolveAllBoards(struct boardsPBN *bop, struct solv #endif #endif +#ifdef __linux +/*paul hide 2012-11-6 added the following as in previous version*/ +EXTERN_C void InitStart(int gb_ram, int ncores); /* For usage with ctypes in Linux. */ +#endif + void InitStart(int gb_ram, int ncores); void InitGame(int gameNo, int moveTreeFlag, int first, int handRelFirst, int thrId); void InitSearch(struct pos * posPoint, int depth, diff --git a/readme.txt b/readme.txt index 3bab018c..d172b159 100644 --- a/readme.txt +++ b/readme.txt @@ -1,13 +1,13 @@ -DDS 2.2.1, Bo Haglund 2012-07-16 +DDS 2.2.4, Bo Haglund 2012-11-07 For Win32, DDS compiles with Visual C++ 2010 Express edition -and the Mingw port of gcc. +and the TDM-GCC/Mingw port of gcc. When using Visual C++, the statement #include "stdafx.h" at the beginning of dds.cpp must be uncommented. When not using Visual C++, the compilation of DDS includes function CalcDDtable -implemented using GCC/MingW OpenMP. +implemented using TDM-GCC/MingW OpenMP. Linking with an application using DDS @@ -24,12 +24,13 @@ Maximum number of threads The maximum number of simultaneous threads depends on the PC physical memory size: 1 GB or less, max 2 threads. 2 GB, max 4 threads. -3 or 4 GB, max 8 threads. +3 or 4 GB, max 16 threads. -For Windows, allocating memory for the maximum number of simultaneous threads can +For e.g. Windows, allocating memory for the maximum number of simultaneous threads can be done by reading out the physical memory size from Windows. This is done in the DDS.DLL. Another alternative is to provide the physical memory size as a parameter (gb_ram) in the -InitStart call. This alternative needs to be used when the operating system is not Windows. +InitStart call. This alternative needs to be used when the operating system does not support +memory autoconfiguration. Setting the number of simultaneous threads when calling CalcDDtable. @@ -37,7 +38,7 @@ Setting the number of simultaneous threads when calling CalcDDtable. For Windows, this can be done either by reading out the number of processor cores from Windows and using this for setting the number of threads, or by supplying the number of threads (ncores) in InitStart. This latter alternative needs to be used when the operating -system is not Windows. +system does not support reading out of the number of processors. Options at DDS compilation @@ -54,7 +55,7 @@ The possible configurens thus are: 2) "PBN": Support for SolveBoardPBN and CalcDDtablePBN. 3) None of these definitions: No support for any of the above 3 functions. -Staying with the previous configuration might be needed when 2.2.2 is to replace an +Staying with the previous configuration might be needed when 2.2.4 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 09c63344..09cad7ce 100644 --- a/release_notes.txt +++ b/release_notes.txt @@ -371,12 +371,25 @@ DDS 2.2.3 add Mingw compiled DLLs and makes a number of code improvements. Maximum number of threads is increased to 16. The 2.2.3 Mingw DLLs are about 5% faster than the 2.2.2 DLLs. - Release Notes DDS 1.1.16 ------------------------ +------------------------ DDS 1.1.16 add Mingw compiled DLLs and makes a number of code improvements. -The 2.2.3 Mingw DLLs are about 5% faster than the 1.1.15 DLLs. +The 1.1.16 Mingw DLLs are about 5% faster than the 1.1.15 DLLs. + +Release Notes DDS 2.2.4 +----------------------- +A newer port from GCC to Windows, the TDM-GCC 4.7.1 version is used. It gives +faster DLLs and only requires one supporting DLL, which supports OpenMP. +Also, the move ordering has been slighly improved. +A total speed increase of 4% is achieved compared to 2.2.3. + +Release Notes DDS 1.1.17 +------------------------ +A newer port from GCC to Windows, the TDM-GCC 4.7.1 version is used. It gives +faster DLLs and does not require any supporting DLLs. +Also, the move ordering has been slighly improved. +A total speed increase of 4% is achieved compared to 1.1.16.