% This is BdFCHESS.STY Version 1.2
% New additions to Piet Tutelaers CHESS.STY 1.2
% for correspondence chess players
%
% Documentation see BDFGERM.TEX or BDFENGL.TEX
%
% Author Frank Hassel
% February 1993
%
% These macros are free software in the spirit of TeX.
% Anyone, who demands payment for the distribution of this
% material, must make clear that the charge is for distribution
% and is no sense a licence fee or purchase fee for BDFCHESS.STY.
% Each user uses these macros entirely at his own risk.
%
%
% To include other postcardlanguages search for xxxx
%
%
%------- Usefull definitions not only for postalchess ---------
%
%
%
%
%------- \showinversboard -------------------------------------
\newcount\@t
\newcount\@w
\def\@showinversrow#1{
    \@r=#1
    \@c=8
    \@sum=\@r
    \advance\@sum by\@c
   \loop
      \@showchar
      \ifnum\@c>1 \advance\@c by-1\advance\@sum by-1
   \repeat
}

\def\showinversboard{
\@t=1
\vbox{\offinterlineskip
   \hrule height1pt
   \hbox{\vrule width1pt\Chess
          \vbox{\loop
                \hbox{\@showinversrow\@t}
                \ifnum\@t<8 \advance\@t by1
                \repeat}%
          \vrule width1pt}
   \hrule height1pt}}
%---- \showboardwithnotation and \showinversboardwithnotation --
%----- for boardsizes 10,15,20 and 30 pt------------------------
\newlength{\boardbreite}
\newlength{\rhoehe}
\newlength{\feldbreite}
%
\def\selectnotationsize{
\settowidth{\boardbreite}{\vrule width 2pt \Chess\@showrow8}
\feldbreite=\boardbreite
\advance\feldbreite by -2pt
\divide\feldbreite8
\rhoehe=\boardbreite
\divide\rhoehe24
%
\ifdim\boardbreite>240pt\font\no=cmr12\else
\ifdim\boardbreite>160pt\font\no=cmr10\else
\ifdim\boardbreite>120pt\font\no=cmr8\else
\ifdim\boardbreite>80pt\font\no=cmr6\fi\fi\fi\fi}
%
\def\showboardwithnotation{\selectnotationsize
\@t=8
\vbox{\offinterlineskip
   \hrule height1pt width\boardbreite
   \Chess
\loop
   \hbox{\vrule width1pt\@showrow\@t\vrule width1pt
    \raisebox{\rhoehe}{\no\ \the\@t}}
    \ifnum\@t>1 \advance\@t by-1
\repeat
   \hrule height1pt width\boardbreite\smallskip
\hbox{
\hbox to \feldbreite{\hfil\no a\hfil}
\hbox to \feldbreite{\hfil\no b\hfil}
\hbox to \feldbreite{\hfil\no c\hfil}
\hbox to \feldbreite{\hfil\no d\hfil}
\hbox to \feldbreite{\hfil\no e\hfil}
\hbox to \feldbreite{\hfil\no f\hfil}
\hbox to \feldbreite{\hfil\no g\hfil}
\hbox to \feldbreite{\hfil\no h\hfil}
}}}
%
\def\showinversboardwithnotation{\selectnotationsize
\@t=1
\vbox{\offinterlineskip
   \hrule height1pt width\boardbreite
   \Chess
\loop
   \hbox{\vrule width1pt\@showinversrow\@t\vrule width1pt
    \raisebox{\rhoehe}{\no\ \the\@t}}
    \ifnum\@t<8 \advance\@t by1
\repeat
   \hrule height1pt width\boardbreite\smallskip
\hbox{
\hbox to \feldbreite{\hfil\no h\hfil}
\hbox to \feldbreite{\hfil\no g\hfil}
\hbox to \feldbreite{\hfil\no f\hfil}
\hbox to \feldbreite{\hfil\no e\hfil}
\hbox to \feldbreite{\hfil\no d\hfil}
\hbox to \feldbreite{\hfil\no c\hfil}
\hbox to \feldbreite{\hfil\no b\hfil}
\hbox to \feldbreite{\hfil\no a\hfil}
}}}
%------- \savegameone and \restoregameone ---------------------
\def\@colA{\ifcase\@c\or i\or j\or k\or l\or m\or n\or o\or p\fi}
%
\newif\ifWhiteone 
\newif\ifcastlingone
\newif\ifKnotmovedone
\newif\ifknotmovedone
\newif\ifpromotionone
\newif\ifenpassantone
\newcount\movecountone
%
\def\savegameone{
\global\let\Whiteone=\White
\global\let\castlingone=\castling
\global\let\Knotmovedone=\Knotmoved
\global\let\knotmovedone=\knotmoved
\global\let\promotionone=\promotion
\global\let\enpassantone=\enpassant
\global\movecountone=\movecount

  \@r=1
  \loop
    {\@c=1
      \loop
      \@get\piece[\@col\the\@r]
         \@set[\@colA\the\@r](\piece)
         \ifnum\@c<8 \advance\@c by1
      \repeat}
      \ifnum\@r<8 \advance\@r by 1
   \repeat
}
%
\def\restoregameone{
\global\let\White=\Whiteone
\global\let\castling=\castlingone
\global\let\Knotmoved=\Knotmovedone
\global\let\knotmoved=\knotmovedone
\global\let\promotion=\promotionone
\global\let\enpassant=\enpassantone
\global\movecount=\movecountone
   \@r=1
   \loop
     {\@c=1
      \loop
      \@get\piece[\@colA\the\@r]
         \@set[\@col\the\@r](\piece)
         \ifnum\@c<8 \advance\@c by1
      \repeat}
      \ifnum\@r<8 \advance\@r by 1
   \repeat
}
%------- \savegametwo and \restoregametwo ---------------------
\def\@colB{\ifcase\@c\or q\or r\or s\or t\or u\or v\or w\or x\fi}

\newif\ifpostalWhitetwo 
\newif\ifcastlingtwo
\newif\ifKnotmovedtwo
\newif\ifknotmovedtwo
\newif\ifpromotiontwo
\newif\ifenpassanttwo
\newcount\movecounttwo
%
\def\savegametwo{
\global\let\Whitetwo=\White
\global\let\castlingtwo=\castling
\global\let\Knotmovedtwo=\Knotmoved
\global\let\knotmovedtwo=\knotmoved
\global\let\promotiontwo=\promotion
\global\let\enpassanttwo=\enpassant
\global\movecounttwo=\movecount
   \@r=1
   \loop
     {\@c=1
      \loop
      \@get\piece[\@col\the\@r]
         \@set[\@colB\the\@r](\piece)
         \ifnum\@c<8 \advance\@c by1
      \repeat}
      \ifnum\@r<8 \advance\@r by 1
   \repeat}
%
\def\restoregametwo{
\global\let\White=\Whitetwo
\global\let\castling=\castlingtwo
\global\let\Knotmoved=\Knotmovedtwo
\global\let\knotmoved=\knotmovedtwo
\global\let\promotion=\promotiontwo
\global\let\enpassant=\enpassanttwo
\global\movecount=\movecounttwo
   \@r=1
   \loop
     {\@c=1
      \loop
      \@get\piece[\@colB\the\@r]
         \@set[\@col\the\@r](\piece)
         \ifnum\@c<8 \advance\@c by1
      \repeat}
      \ifnum\@r<8 \advance\@r by 1
   \repeat
}
%----------- \storeboard ------------------------------------
\def\storeboard#1{
\newwrite\bdf
\immediate\openout\bdf=#1
\immediate\write\bdf{\string\begin{position}}
\immediate\write\bdf{\string\White(}
\@r=1
\loop
\@c=1
\@sum=\@r\advance \@sum by \@c
\loop
   \@get\piece[\@col\the\@r]
\if\piece E 
\else
%
%
\if\piece R \immediate\write\bdf{\uc@rook\@col\the\@r,}\fi  
\if\piece N \immediate\write\bdf{\uc@knight\@col\the\@r,}\fi 
\if\piece B \immediate\write\bdf{\uc@bishop\@col\the\@r,}\fi 
\if\piece Q \immediate\write\bdf{\uc@queen\@col\the\@r,}\fi 
\if\piece P \immediate\write\bdf{\@col\the\@r,}\fi  
\if\piece K \@t=\@c \@w=\@r \fi
\fi
   \ifnum\@c<8 \advance \@c by 1 \advance\@sum by 1
   \repeat
   \ifnum\@r<8 \advance \@r by 1
\@c=1
\repeat
\@c=\@t
\immediate\write\bdf{\uc@king\@col\the\@w )}
%
\immediate\write\bdf{\string\Black(}
\@r=1
\loop
\@c=1
\@sum=\@r\advance \@sum by \@c
\loop
   \@get\piece[\@col\the\@r]
\if\piece E 
\else
\if\piece k \@t=\@c \@w=\@r\fi
%
%
\if\piece r \immediate\write\bdf{\uc@rook\@col\the\@r,}\fi
\if\piece n \immediate\write\bdf{\uc@knight\@col\the\@r,}\fi
\if\piece b \immediate\write\bdf{\uc@bishop\@col\the\@r,}\fi
\if\piece q \immediate\write\bdf{\uc@queen\@col\the\@r,}\fi
\if\piece p \immediate\write\bdf{\@col\the\@r,}\fi
\fi
   \ifnum\@c<8 \advance \@c by 1 \advance\@sum by 1
   \repeat
   \ifnum\@r<8 \advance \@r by 1
\@c=1
\repeat
\@c=\@t
\immediate\write\bdf{\uc@king\@col\the\@w )}
%
\immediate\write\bdf{\string\global\movecount=\the\movecount}
\ifWhite
\immediate\write\bdf{\string\global\string\Whitetrue}
\else
\immediate\write\bdf{\string\global\string\Whitefalse}
\fi
\immediate\write\bdf{\string\end{position}}
\immediate\closeout\bdf
}
%
%------- Here are the definitions for postal chessplayers -----
%
%-------- boxes for postcard in several languages -------------
\global\font\Fig=chessf10
\newbox\yourdatebox
\newbox\mydatebox
\newbox\moveonebox
\newbox\movetwobox
\newbox\acceptonebox
\newbox\accepttwobox
%
\def\cardtabular[#1,#2,#3,#4]{
\hbox{\hbox to 10mm{\hss #1\hss}
      \hbox to 18mm{\hss #2\hss}
      \hbox to 7mm{\hss #3\hss}
      \hbox to 18mm{\hss #4\hss}}}
%
%%------------------- Definitions for english postcard ---------
\chardef \pc@english=0
\gdef\tabularheader{\vbox{
  \hbox{\hbox to 30mm{\hss Date\hss}
   \hbox to 70mm{\hss\ \hss}
   \hbox to 30mm{\hss Date\hss}}
\movetabular[Arrival,Leaving,$\sum$,{\large\bf White}, ,{\large
\bf Black},Arrival,Leaving,$\sum$]
\vskip 1pt\hrule}}
%
\def\cardenglish{%
\gdef\postcardname{postcard}
\gdef\salutations{Yours sincerly}
\gdef\nameif{if }
\def\yourdate[##1][##2][##3]{\global\setbox\yourdatebox=\vbox{
\hbox{Your postmark date ##1}
\hbox{Your time taken ##2 day(s)}
\hbox{Your total time ##3 days}}}
%
\def\mydate[##1][##2][##3][##4]{\global\setbox\mydatebox=\vbox{
\hbox{Received on ##1}
\hbox{Replied on ##2}
\hbox{My time taken ##3 day(s)}
\hbox{My total time ##4 days}}}
%
\global\setbox\acceptonebox=\vbox{
\hbox to 50mm{\hss Game 1\hss}\vskip 2mm
\cardtabular[No.,Your move,No.,My move]
\hrule\vskip 2pt}
%
\global\setbox\accepttwobox=\vbox{
\hbox to 50mm{\hss Game 2\hss}\vskip 2mm
\cardtabular[No.,Your move,No.,My move]
\hrule\vskip 2pt}
%
}%
%------------------- Definitions for german postcard ---------
\chardef \pc@german=1
\ifcurrentlanguage{germanb}{%
\gdef\tabularheader{\vbox{
  \hbox{\hbox to 30mm{\hss Datum\hss}
   \hbox to 70mm{\hss\ \hss}
   \hbox to 30mm{\hss Datum\hss}}
\movetabular[Ankunft,Abgang,$\sum$,{\large\bf Wei\ss}, ,{\large
\bf Schwarz},Ankunft,Abgang,$\sum$]
\vskip 1pt\hrule}}}
%
\def\cardgerman{%
\gdef\postcardname{Postkarte}
\gdef\salutations{Freundliche Gr\"u\ss e}
\gdef\nameif{falls }
\def\yourdate[##1][##2][##3]{\global\setbox\yourdatebox=\vbox{
\hbox{Ihr Poststempeldatum ##1}
\hbox{Ihre Bedenkzeit ##2 Tag(e)}
\hbox{Ihre Gesamtbedenkzeit ##3 Tage}}}
%
\def\mydate[##1][##2][##3][##4]{\global\setbox\mydatebox=\vbox{
\hbox{Empfangen am ##1}
\hbox{Beantwortet am ##2}
\hbox{Meine Bedenkzeit ##3 Tag(e)}
\hbox{Meine Gesamtbedenkzeit ##4 Tage}}}
%
\global\setbox\acceptonebox=\vbox{
\hbox to 50mm{\hss Partie 1\hss}\vskip 2mm
\cardtabular[Nr.,Ihr Zug,Nr.,Mein Zug]
\hrule\vskip 2pt}
%
\global\setbox\accepttwobox=\vbox{
\hbox to 50mm{\hss Partie 2\hss}\vskip 2mm
\cardtabular[Nr.,Ihr Zug,Nr.,Mein Zug]
\hrule\vskip 2pt}
%
}%
%------------------- Definitions for french postcard ---------
\chardef \pc@french=2
\ifcurrentlanguage{french}{%
\gdef\tabularheader{\vbox{
  \hbox{\hbox to 30mm{\hss Date\hss}
   \hbox to 70mm{\hss\ \hss}
   \hbox to 30mm{\hss Date\hss}}
\movetabular[Arriv\'ee,D\'epart,$\sum$,{\large\bf Blanc}, ,{\large
\bf Noir},Arriv\'ee,D\'epart,$\sum$]
\vskip 1pt\hrule}}}
%
\def\cardfrench{%
\gdef\postcardname{carte postale}
\gdef\salutations{Salutations}
\gdef\nameif{que }
\def\yourdate[##1][##2][##3]{\global\setbox\yourdatebox=\vbox{
\hbox{Votre date de la poste ##1}
\hbox{Votre temps ##2 jour(s)}
\hbox{Votre temps total ##3 jours}}}
%
\def\mydate[##1][##2][##3][##4]{\global\setbox\mydatebox=\vbox{
\hbox{Arriv\'ee ##1}
\hbox{D\'epart ##2}
\hbox{Mon temps ##3 jour(s)}
\hbox{Mon temps total ##4 jours}}}
%
\global\setbox\acceptonebox=\vbox{
\hbox to 50mm{\hss Partie 1\hss}\vskip 2mm
\cardtabular[No.,Votre coup,No.,Mon coup]
\hrule\vskip 2pt}
%
\global\setbox\accepttwobox=\vbox{
\hbox to 50mm{\hss Partie 2\hss}\vskip 2mm
\cardtabular[No.,Votre coup,No.,Mon coup]
\hrule\vskip 2pt}
%
}
%------------------- Definitions for xxxx postcard ---------
\chardef \pc@xxxx=3
\ifcurrentlanguage{xxxx}{%
\gdef\tabularheader{\vbox{
  \hbox{\hbox to 30mm{\hss xxxx\hss}
   \hbox to 70mm{\hss\ \hss}
   \hbox to 30mm{\hss xxxx\hss}}
\movetabular[xxxx,xxxx,$\sum$,{\large\bf xxxx}, ,{\large \bf
 xxxx},xxxx,xxxx,$\sum$]
\vskip 1pt\hrule}}}
%
\def\cardxxxx{%
\gdef\postcardname{xxxx}
\gdef\salutations{xxxx}
\gdef\nameif{xxxx }
\def\yourdate[##1][##2][##3]{\global\setbox\yourdatebox=\vbox{
\hbox{xxxx ##1}
\hbox{xxxx ##2 xxxx}
\hbox{xxxx ##3 xxxx}}}
%
\def\mydate[##1][##2][##3][##4]{\global\setbox\mydatebox=\vbox{
\hbox{xxxx ##1}
\hbox{xxxx ##2}
\hbox{xxxx ##3 xxxx}
\hbox{xxxx ##4 xxxx}}}
%
\global\setbox\acceptonebox=\vbox{
\hbox to 50mm{\hss xxxx 1\hss}\vskip 2mm
\cardtabular[xxxx,xxxx,xxxx,xxxx]
\hrule\vskip 2pt}
%
\global\setbox\accepttwobox=\vbox{
\hbox to 50mm{\hss xxxx 2\hss}\vskip 2mm
\cardtabular[xxxx,xxxx,xxxx,xxxx]
\hrule\vskip 2pt}
}
%--------------- Selection of language -------------------------
\def\p@postcardlanguage#1{\expandafter\ifx\csname pc@#1\endcsname\relax
\errhelp{Your command will be ignored, type <return> to proceed}%
\errmessage{You haven't defined the language #1 yet}%
  \else
\csname card#1\endcsname
  \fi}

\def\postcardlanguage#1{\protect\p@postcardlanguage{%
  \ifnum\escapechar=\expandafter`\string#1\empty
  \else \string#1\empty\fi}}
%----------------- Init ------------------------------
\postcardlanguage{english}% Default language
\ifcurrentlanguage{germanb}{\postcardlanguage{german}}
\ifcurrentlanguage{french}{\postcardlanguage{french}}
\ifcurrentlanguage{xxxx}{\postcardlanguage{xxxx}}
\newgame
\newif\iffinishgameone\finishgameonetrue
\newif\iffinishgametwo\finishgametwotrue
\savegameone
\savegametwo
%
% different cardmoves
%
\def\acceptmoveone#1 #2 #3 #4 {
\global\setbox\acceptonebox= \vbox{\unvbox\acceptonebox
\vskip 2pt\cardtabular[#1,#2,#3,#4]}}
%
\def\acceptmovetwo#1 #2 #3 #4 {
\global\setbox\accepttwobox= \vbox{\unvbox\accepttwobox
\vskip 2pt\cardtabular[#1,#2,#3,#4]}}
%
\def\ifmoveone#1 #2 #3 #4 {
\movetabular[\ ,\ ,#1,#2,#3,#4,\ ,\ ,\ ]
\global\setbox\moveonebox= \vbox{\unvbox\moveonebox
\vskip 1.5pt\cardtabular[\nameif #1,#2,#3,#4]}}
%
\def\ifmovetwo#1 #2 #3 #4 {
\movetabular[\ ,\ ,#1,#2,#3,#4,\ ,\ ,\ ]
\global\setbox\movetwobox= \vbox{\unvbox\movetwobox
\vskip 1.5pt\cardtabular[\nameif #1,#2,#3,#4]}}
%
\def\moveone[#1][#2][#3][#4]{%
\global\setbox\moveonebox=\vbox{\cardtabular[#1,#2,#3,#4 ]}}
%
\def\movetwo[#1][#2][#3][#4]{%
\global\setbox\movetwobox=\vbox{\cardtabular[#1,#2,#3,#4 ]}}
%
%
%---\postmove and \postply same as \move and \ply in CHESS.STY-
%---but with calculation of consider- and departuretime -------
%
\def\movetabular[#1,#2,#3,#4,#5,#6,#7,#8,#9]{\par
     \hbox{\strut\hskip 1mm
            \hbox to 15mm{\hfill #1\hfill}
            \hbox to 15mm{\hfill #2\hfill}
            \hbox to 8mm{\hfill #3}
            \hbox to 24mm{\hfill #4\hfill}
            \hbox to 8mm{\hfill #5}
            \hbox to 24mm{\hfill #6\hfill}
            \hbox to 15mm{\hfill #7\hfill}
            \hbox to 15mm{\hfill #8\hfill}
            \hbox to 8mm{\hfill #9}}\par}
%
\newcount\considerwhite
\newcount\considersumwhite
\newcount\considerblack
\newcount\considersumblack
\newcount\movecountwhite
\newcount\movecountblack

\newbox\arrivalwhite
\newbox\leavingwhite
\newbox\arrivalblack
\newbox\leavingblack

\newbox\plywhite
\newbox\plyblack

\def\postmove #1 #2 #3 #4 #5 #6 {\frenchspacing
\advance\movecount by 1
%
\considerwhite=#2
\advance\considersumwhite by #2
\@departure#1 #2 {}
\setbox\arrivalwhite=\copy\arrival
\setbox\leavingwhite=\copy\leaving
\setbox\plywhite=\hbox{\@ply#3 }
%
\considerblack=#6
\advance\considersumblack by #6
\@departure#5 #6 {}
\setbox\arrivalblack=\copy\arrival
\setbox\leavingblack=\copy\leaving
\setbox\plyblack=\hbox{\@ply#4 }
%
% Typesetting 
%
\movetabular[\copy\arrivalwhite,\copy\leavingwhite,
    \the\considersumwhite,\copy\plywhite,
    \the\movecount.,\copy\plyblack,\copy\arrivalblack,
    \copy\leavingblack,\the\considersumblack]
%Holiday 
\global\advance\considerwhite by -\hw
\global\advance\considerblack by -\hb
\global\hw=0
\global\hb=0
%
\message{\the\movecount }}
%
%
\def\postply#1 #2 #3 {\frenchspacing
    \ifWhite\advance\movecount by 1
\considerwhite=#2
    \advance\considersumwhite by #2
    \else
\considerblack=#2
    \advance\considersumblack by #2
    \fi
\@departure#1 #2 {}
\ifWhite
\setbox\arrivalwhite=\copy\arrival
\setbox\leavingwhite=\copy\leaving
\setbox\plywhite=\hbox{\@ply#3 }
\movetabular[\copy\arrivalwhite,\copy\leavingwhite,
    \the\considersumwhite,\copy\plywhite,
    \the\movecount.,\ ,\ ,\ ,\ ]
\else
\setbox\arrivalblack=\copy\arrival
\setbox\leavingblack=\copy\leaving
\setbox\plyblack=\hbox{\@ply#3 }
\movetabular[\ ,\ ,\ ,...,\the\movecount.,
\copy\plyblack,\copy\arrivalblack,
\copy\leavingblack,\the\considersumblack]
\fi
%Holiday 
\global\advance\considerwhite by -\hw
\global\advance\considerblack by -\hb
\global\hw=0
\global\hb=0
%
\message{(\the\movecount )}
    \par}%
%
%------------- Game 1 --------------------------------
%
\newenvironment{gameone}{%
\tabularheader
    \newgame
\considersumwhite=0
\considersumblack=0
\global\finishgameonefalse
%
\typeout{Game 1}
\message{Move : }}{% 
\savegameone
%
\ifWhite
%
\moveone[\the\movecount][\copy\plywhite][\the\movecount][\copy\plyblack]
\yourdate[\copy\leavingwhite][\the\considerwhite][\the\considersumwhite]
\mydate[\copy\arrivalblack][\copy\leavingblack][\the\considerblack][\the\considersumblack]
\else
\movecountblack=\movecount
\advance\movecountblack by -1
% First ply for white ?
\ifnum\movecountblack=0
\moveone[\,][\copy\plyblack][\the\movecount][\copy\plywhite]
\setbox\arrivalwhite=\hbox{} %delete arrival
\else
\moveone[\the\movecountblack][\copy\plyblack][\the\movecount][\copy\plywhite]
\fi
\mydate[\copy\arrivalwhite][\copy\leavingwhite][\the\considerwhite][\the\considersumwhite]
\yourdate[\copy\leavingblack][\the\considerblack][\the\considersumblack]
\fi}%

\def\finishgameone{
    \newgame
\savegameone
\global\finishgameonetrue}
%------------------ Game 2 -------------------------------------
%
\newenvironment{gametwo}{%
\tabularheader
    \newgame
\considersumwhite=0
\considersumblack=0
\global\finishgametwofalse
%
\typeout{Game 2}
\message{Move : }}{% end of begin gametwo
\savegametwo
%
\ifWhite
\movetwo[\the\movecount][\copy\plywhite][\the\movecount][\copy\plyblack]
\iffinishgameone
\yourdate[\copy\leavingwhite][\the\considerwhite][\the\considersumwhite]
\mydate[\copy\arrivalblack][\copy\leavingblack][\the\considerblack][\the\considersumblack]
\fi
\else
\movecountblack=\movecount
\advance\movecountblack by -1
\ifnum\movecountblack=0
\movetwo[\,][\copy\plyblack][\the\movecount][\copy\plywhite]
\setbox\arrivalwhite=\hbox{} %delete arrival
\else
\movetwo[\the\movecountblack][\copy\plyblack][\the\movecount][\copy\plywhite]
\fi
\iffinishgameone
\yourdate[\copy\leavingblack][\the\considerblack][\the\considersumblack]
\mydate[\copy\arrivalwhite][\copy\leavingwhite][\the\considerwhite][\the\considersumwhite]\fi
\fi}%
%
\def\finishgametwo{
    \newgame
\savegametwo
\global\finishgametwotrue}
%----------------- Holiday --------------------------------
\newcount\hw \hw=0
\newcount\hb \hb=0
\gdef\holidaywhite#1 {\global\hw=#1 \global\advance\considersumwhite by-\hw}
\gdef\holidayblack#1 {\global\hb=#1 \global\advance\considersumblack by-\hb}
%
%-----------------Create the postcard----------------------
%
\def\sender#1{\gdef\sender{#1}}
\def\receiver#1{\gdef\receiver{#1}}
\def\cardmessage#1{\gdef\cardmessage{#1}}
%
\gdef\postcard{\@ifnextchar [{\@ipostcard}{\@ipostcard[e]}}
\long\def\@ipostcard[#1](#2,#3){%
\vbox{\vskip #3\fboxsep 0pt\rlap{\kern#2
\if #1f \fboxrule0.5pt \else \fboxrule0pt \fi
\fbox{\vbox to 97mm{\font\Chess=chess15
\restoregameone
\vskip 2mm
\hbox to 69mm{\hskip 10mm\showboardwithnotation\hss}\vskip 2mm
\iffinishgameone \else 
\hbox to 69mm{\hss\copy\acceptonebox\hss}
\hbox to 69mm{\hss\copy\moveonebox\hss}
\fi
\vss
\hbox to 69mm{\hskip 10mm\copy\mydatebox\hss}
\vskip 4mm}
%
\vbox to 97mm{\font\Chess=chess15
\restoregametwo
\vskip 2mm
\hbox to 69mm{\hskip 10mm\showboardwithnotation\hss}\vskip 2mm
\iffinishgametwo \else
\hbox to 69mm{\hss\copy\accepttwobox\hss}
\hbox to 69mm{\hss\copy\movetwobox\hss}
\fi
\vss
\hbox to 69mm{\hskip 10mm\copy\yourdatebox\hss}
\vskip 2mm
\hbox{\salutations\hss}
\vskip 2mm
}}}}}
%
\gdef\postcardaddress{
\@ifnextchar [{\@ipostcardaddress}{\@ipostcardaddress[ee]}}
\long\def\@ipostcardaddress[#1#2](#3,#4){%
\vbox{\vskip #4
\fboxsep 4mm\rlap{\kern#3\hbox{
\if #1f \fboxrule0.5pt \else 
\if #2f \fboxrule0.5pt \else 
\fboxrule0pt \fi\fi
\fbox{\vbox to 89mm{\hsize 60mm
\sender\\\vss
\cardmessage\vss\vss}
\hskip 4.5mm 
\if #1t \vrule \else \if #2t \vrule\fi\fi
\hskip 5.5mm
\vbox to 89mm{\hsize 60mm\fboxrule0.5pt
\hskip 35mm\fbox{\rule{0cm}{16mm}\hskip 12mm}\\[8mm]
\if #1t {\xiipt \bf \postcardname} \else
\if #2t {\xiipt \bf \postcardname} \fi\fi
\vss\vss\vss
\receiver
\vss}}}}}}
%
%-----------------Calculation of departure date------------
%
% Call \departure day.month.year time ==> in box \arrival 
% result : in box \leaving 
\newbox\arrival
\newbox\leaving
%
\newcount\posty
\newcount\postm
\newcount\postd
\newcount\posttemp
\newcount\postp
\newcount\posts
% date time
\gdef\@departure#1.#2.#3 #4#5{%
\posty=#3\relax\postm=#2\relax\postd=#1\relax\postp=#4#5\relax
%
% It works only up to 2099 but I think it doesn't matter
%
\advance\posty by -1900
%
\posts=\posty
\ifnum\posts>99\advance\posts by -100 \fi
\setbox\arrival=\hbox{\the\postd .\the\postm .\the\posts }
%
\ifnum\postm<3\advance\postm12\advance\posty by -1\else \fi
%
\posts=\posty
\multiply\posts36525\relax
\divide\posts100\relax
%
\posttemp=\postm
\advance\posttemp1
\multiply\posttemp306\relax
\divide\posttemp10\relax
\advance\posts\posttemp
\advance\posts by -122
\advance\posts\postd
%
% Advance daycount  by considertime
%
\advance\posts\postp
%
% year
%
\posty=\posts
\multiply\posty by 100
\divide\posty36525
\posttemp=\posty
%
\multiply\posttemp36525
\divide\posttemp100\relax
\advance\posts by -\posttemp
%
% month
\advance\posts by 122
\postm=\posts
\multiply\postm10\relax
\divide\postm306\relax
\advance\postm by -1
% day
\posttemp=\postm
\advance\posttemp by 1
\multiply\posttemp306\relax
\divide\posttemp10\relax
\advance\posts by -\posttemp
\postd=\posts
%
% I think there is a little mistake in my formular 
% Correction at leapyear : 29.2 instead of 31.2
%
\ifnum\postm=2 \ifnum\postd=31 \advance\postd by -2\fi\fi
%
\ifnum\postm>12\advance\postm by -12 \advance\posty by 1\else \fi
\ifnum\posty>99\advance\posty by -100 \fi
%
% Other faults 00.04 instead of 31.03
% Other faults 00.09 instead of 31.08
%
\ifnum\postm=4 \ifnum\postd=0 \postd=31 \postm=3 \fi\fi
\ifnum\postm=9 \ifnum\postd=0 \postd=31 \postm=8 \fi\fi
%
\setbox\leaving=\hbox{\the\postd .\the\postm .\the\posty }
}

\def\departure#1.#2.#3 #4{% day, month, year , considertime
\@departure}
%