%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%   bg.sty : A style file to annote backgammon matches and positions  %
%								      %
% 		Copyright by J. Richter 1994                          %
%								      %
% Distribution and use is free, as long as you don't change this file %
%								      %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newcount\@value
\newcount\@f
\newcount\@t

\newcount\@movenumber
\newfont{\@bigboardfont}{bg scaled 750}
\newfont{\@normalboardfont}{bg scaled 500}
\newfont{\@smallboardfont}{bg scaled 250}

\newdimen\@whiteskip
\@whiteskip=\textwidth
\divide\@whiteskip by 2

\def\@black{-1}
\def\@white{1}
\def\@middle{0}

\newif\ifcube      % only true if the cubevalue should be printed with the boards
\newif\ifblack     % only true if black is on move
\newif\ifnumbers   % only true if boardpoints are numbered
\newif\ifmoves     % only true if \move prints out his arguments
\newif\ifindent    % only true if the moves of white are indented by \@whiteskip
\newif\ifptsonmove % only true if points are numbered from the view of the one on move
\newif\ifbothhalfs   % only true if both halfs of the board are printed
\newif\ifsecmove     % only true if the move numbers change only every second move

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Some global default settings of the switches %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\def\boardtype{drawnormalboard}
\indenttrue
\numberstrue
\cubetrue
\movestrue
\blacktrue
\ptsonmovetrue
\bothhalfstrue
\secmovetrue

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Macros to set and get the value of a point %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\def\@set[#1](#2){
	\expandafter\xdef\csname point#1\endcsname{#2}}

\def\@get#1[#2]{
	\edef#1{\csname point#2\endcsname}}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Macro to make all points of the board empty %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\def\@clearboard{
\@value=0{
\loop \@set[\the\@value](0) \ifnum\@value<27\advance\@value by 1 \repeat}
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Macro to set the board to the configuration at the start of the game %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% White plays from 0 to 24 with 0 being the bar of White
% Black plays from 25 to 1 with 25 being the bar of Black

% a positive value means that White has this number of checkers on the point
% a negative value means that Black has the negative of this number as 
%                                          chechers on this point

\def\initboard{
\@set[0](0) \@set[1](2) \@set[2](0) \@set[3](0) \@set[4](0) \@set[5](0) \@set[6](-5)
\@set[7](0) \@set[8](-3) \@set[9](0) \@set[10](0) \@set[11](0) \@set[12](5)
\@set[13](-5) \@set[14](0) \@set[15](0) \@set[16](0) \@set[17](3) \@set[18](0)
\@set[19](5) \@set[20](0) \@set[21](0) \@set[22](0) \@set[23](0) \@set[24](-2)
\@set[25](0)
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Macros to draw a single point %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\def\@whitehangingpoint[#1]{
\@get\@dummy[#1]
\@value=\@dummy{
\ifnum\@value=0\vbox{\hbox{k}\hbox{l}\hbox{m}\hbox{n}\hbox{o}}\else
\ifnum\@value=1\vbox{\hbox{K}\hbox{l}\hbox{m}\hbox{n}\hbox{o}}\else
\ifnum\@value=2\vbox{\hbox{K}\hbox{L}\hbox{m}\hbox{n}\hbox{o}}\else
\ifnum\@value=3\vbox{\hbox{K}\hbox{L}\hbox{M}\hbox{n}\hbox{o}}\else
\ifnum\@value=4\vbox{\hbox{K}\hbox{L}\hbox{M}\hbox{N}\hbox{o}}\else
\ifnum\@value=5\vbox{\hbox{K}\hbox{L}\hbox{M}\hbox{N}\hbox{O}}\else
\ifnum\@value>5\advance\@value by 166
\vbox{\hbox{K}\hbox{L}\hbox{M}\hbox{N}\hbox{\char\the\@value}}\else
\ifnum\@value=-1\vbox{\hbox{P}\hbox{l}\hbox{m}\hbox{n}\hbox{o}}\else
\ifnum\@value=-2\vbox{\hbox{P}\hbox{Q}\hbox{m}\hbox{n}\hbox{o}}\else
\ifnum\@value=-3\vbox{\hbox{P}\hbox{Q}\hbox{R}\hbox{n}\hbox{o}}\else
\ifnum\@value=-4\vbox{\hbox{P}\hbox{Q}\hbox{R}\hbox{S}\hbox{o}}\else
\ifnum\@value=-5\vbox{\hbox{P}\hbox{Q}\hbox{R}\hbox{S}\hbox{T}}\else
\ifnum\@value<-5\multiply\@value by -1\advance\@value by 176
\vbox{\hbox{P}\hbox{Q}\hbox{R}\hbox{S}\hbox{\char\the\@value}}
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
}

\def\@blackhangingpoint[#1]{
\@get\@dummy[#1]
\@value=\@dummy{
\ifnum\@value=0\vbox{\hbox{p}\hbox{q}\hbox{r}\hbox{s}\hbox{t}}\else
\ifnum\@value=1\vbox{\hbox{U}\hbox{q}\hbox{r}\hbox{s}\hbox{t}}\else
\ifnum\@value=2\vbox{\hbox{U}\hbox{V}\hbox{r}\hbox{s}\hbox{t}}\else
\ifnum\@value=3\vbox{\hbox{U}\hbox{V}\hbox{W}\hbox{s}\hbox{t}}\else
\ifnum\@value=4\vbox{\hbox{U}\hbox{V}\hbox{W}\hbox{X}\hbox{t}}\else
\ifnum\@value=5\vbox{\hbox{U}\hbox{V}\hbox{W}\hbox{X}\hbox{Y}}\else
\ifnum\@value>5\advance\@value by 186
\vbox{\hbox{U}\hbox{V}\hbox{W}\hbox{X}\hbox{\char\the\@value}}\else
\ifnum\@value=-1\vbox{\hbox{u}\hbox{q}\hbox{r}\hbox{s}\hbox{t}}\else
\ifnum\@value=-2\vbox{\hbox{u}\hbox{v}\hbox{r}\hbox{s}\hbox{t}}\else
\ifnum\@value=-3\vbox{\hbox{u}\hbox{v}\hbox{w}\hbox{s}\hbox{t}}\else
\ifnum\@value=-4\vbox{\hbox{u}\hbox{v}\hbox{w}\hbox{x}\hbox{t}}\else
\ifnum\@value=-5\vbox{\hbox{u}\hbox{v}\hbox{w}\hbox{x}\hbox{y}}\else
\ifnum\@value<-5\multiply\@value by -1\advance\@value by 196
\vbox{\hbox{u}\hbox{v}\hbox{w}\hbox{x}\hbox{\char\the\@value}}
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
}

\def\@whitestandingpoint[#1]{
\@get\@dummy[#1]
\@value=\@dummy{
\ifnum\@value=0\vbox{\hbox{e}\hbox{d}\hbox{c}\hbox{b}\hbox{a}}\else
\ifnum\@value=1\vbox{\hbox{e}\hbox{d}\hbox{c}\hbox{b}\hbox{A}}\else
\ifnum\@value=2\vbox{\hbox{e}\hbox{d}\hbox{c}\hbox{B}\hbox{A}}\else
\ifnum\@value=3\vbox{\hbox{e}\hbox{d}\hbox{C}\hbox{B}\hbox{A}}\else
\ifnum\@value=4\vbox{\hbox{e}\hbox{D}\hbox{C}\hbox{B}\hbox{A}}\else
\ifnum\@value=5\vbox{\hbox{E}\hbox{D}\hbox{C}\hbox{B}\hbox{A}}\else
\ifnum\@value>5\advance\@value by 206
\vbox{\hbox{\char\the\@value}\hbox{D}\hbox{C}\hbox{B}\hbox{A}}\else
\ifnum\@value=-1\vbox{\hbox{e}\hbox{d}\hbox{c}\hbox{b}\hbox{0}}\else
\ifnum\@value=-2\vbox{\hbox{e}\hbox{d}\hbox{c}\hbox{1}\hbox{0}}\else
\ifnum\@value=-3\vbox{\hbox{e}\hbox{d}\hbox{2}\hbox{1}\hbox{0}}\else
\ifnum\@value=-4\vbox{\hbox{e}\hbox{3}\hbox{2}\hbox{1}\hbox{0}}\else
\ifnum\@value=-5\vbox{\hbox{4}\hbox{3}\hbox{2}\hbox{1}\hbox{0}}\else
\ifnum\@value<-5\multiply\@value by -1\advance\@value by 216
\vbox{\hbox{\char\the\@value}\hbox{3}\hbox{2}\hbox{1}\hbox{0}}
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
}

\def\@blackstandingpoint[#1]{
\@get\@dummy[#1]
\@value=\@dummy{
\ifnum\@value=0\vbox{\hbox{j}\hbox{i}\hbox{h}\hbox{g}\hbox{f}}\else
\ifnum\@value=1\vbox{\hbox{j}\hbox{i}\hbox{h}\hbox{g}\hbox{F}}\else
\ifnum\@value=2\vbox{\hbox{j}\hbox{i}\hbox{h}\hbox{G}\hbox{F}}\else
\ifnum\@value=3\vbox{\hbox{j}\hbox{i}\hbox{H}\hbox{G}\hbox{F}}\else
\ifnum\@value=4\vbox{\hbox{j}\hbox{I}\hbox{H}\hbox{G}\hbox{F}}\else
\ifnum\@value=5\vbox{\hbox{J}\hbox{I}\hbox{H}\hbox{G}\hbox{F}}\else
\ifnum\@value>5\advance\@value by 226
\vbox{\hbox{\char\the\@value}\hbox{I}\hbox{H}\hbox{G}\hbox{F}}\else
\ifnum\@value=-1\vbox{\hbox{j}\hbox{i}\hbox{h}\hbox{g}\hbox{5}}\else
\ifnum\@value=-2\vbox{\hbox{j}\hbox{i}\hbox{h}\hbox{6}\hbox{5}}\else
\ifnum\@value=-3\vbox{\hbox{j}\hbox{i}\hbox{7}\hbox{6}\hbox{5}}\else
\ifnum\@value=-4\vbox{\hbox{j}\hbox{8}\hbox{7}\hbox{6}\hbox{5}}\else
\ifnum\@value=-5\vbox{\hbox{9}\hbox{8}\hbox{7}\hbox{6}\hbox{5}}\else
\ifnum\@value<-5\multiply\@value by -1\advance\@value by 236
\vbox{\hbox{\char\the\@value}\hbox{8}\hbox{7}\hbox{6}\hbox{5}}
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Macro to draw the pieces on the bar %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\def\hangingbar[#1]{
\@get\@dummy[#1]
\@value=\@dummy{
\ifnum\@value=0\vbox{\hbox{z}\hbox{z}\hbox{z}\hbox{z}\hbox{z}}\else
\ifnum\@value=1\vbox{\hbox{*}\hbox{z}\hbox{z}\hbox{z}\hbox{z}}\else
\ifnum\@value=2\vbox{\hbox{*}\hbox{*}\hbox{z}\hbox{z}\hbox{z}}\else
\ifnum\@value=3\vbox{\hbox{*}\hbox{*}\hbox{*}\hbox{z}\hbox{z}}\else
\ifnum\@value=4\vbox{\hbox{*}\hbox{*}\hbox{*}\hbox{*}\hbox{z}}\else
\ifnum\@value=5\vbox{\hbox{*}\hbox{*}\hbox{*}\hbox{*}\hbox{*}}\else
\ifnum\@value>5\advance\@value by 146
\vbox{\hbox{*}\hbox{*}\hbox{*}\hbox{*}\hbox{\char\the\@value}}\else
\ifnum\@value=-1\vbox{\hbox{@}\hbox{z}\hbox{z}\hbox{z}\hbox{z}}\else
\ifnum\@value=-2\vbox{\hbox{@}\hbox{@}\hbox{z}\hbox{z}\hbox{z}}\else
\ifnum\@value=-3\vbox{\hbox{@}\hbox{@}\hbox{@}\hbox{z}\hbox{z}}\else
\ifnum\@value=-4\vbox{\hbox{@}\hbox{@}\hbox{@}\hbox{@}\hbox{z}}\else
\ifnum\@value=-5\vbox{\hbox{@}\hbox{@}\hbox{@}\hbox{@}\hbox{@}}\else
\ifnum\@value<-5\multiply\@value by -1\advance\@value by 156
\vbox{\hbox{@}\hbox{@}\hbox{@}\hbox{@}\hbox{\char\the\@value}}
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
}

\def\standingbar[#1]{
\@get\@dummy[#1]
\@value=\@dummy{
\ifnum\@value=0\vbox{\hbox{z}\hbox{z}\hbox{z}\hbox{z}\hbox{z}}\else
\ifnum\@value=1\vbox{\hbox{z}\hbox{z}\hbox{z}\hbox{z}\hbox{*}}\else
\ifnum\@value=2\vbox{\hbox{z}\hbox{z}\hbox{z}\hbox{*}\hbox{*}}\else
\ifnum\@value=3\vbox{\hbox{z}\hbox{z}\hbox{*}\hbox{*}\hbox{*}}\else
\ifnum\@value=4\vbox{\hbox{z}\hbox{*}\hbox{*}\hbox{*}\hbox{*}}\else
\ifnum\@value=5\vbox{\hbox{*}\hbox{*}\hbox{*}\hbox{*}\hbox{*}}\else
\ifnum\@value>5\advance\@value by 146
\vbox{\hbox{\char\the\@value}\hbox{*}\hbox{*}\hbox{*}\hbox{*}}\else
\ifnum\@value=-1\vbox{\hbox{z}\hbox{z}\hbox{z}\hbox{z}\hbox{@}}\else
\ifnum\@value=-2\vbox{\hbox{z}\hbox{z}\hbox{z}\hbox{@}\hbox{@}}\else
\ifnum\@value=-3\vbox{\hbox{z}\hbox{z}\hbox{@}\hbox{@}\hbox{@}}\else
\ifnum\@value=-4\vbox{\hbox{z}\hbox{@}\hbox{@}\hbox{@}\hbox{@}}\else
\ifnum\@value=-5\vbox{\hbox{@}\hbox{@}\hbox{@}\hbox{@}\hbox{@}}else
\ifnum\@value<-5\multiply\@value by -1\advance\@value by 156
\vbox{\hbox{\char\the\@value}\hbox{@}\hbox{@}\hbox{@}\hbox{@}}
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Macros to draw some borders %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\def\@verticalborder{
\@value=1\vbox{
\loop \hbox{Z} \ifnum\@value<5\advance\@value by 1 \repeat}
}

\def\@horizontalborder{
\ifbothhalfs
\@value=1\hbox{
\loop \hbox{-} \ifnum\@value<13\advance\@value by 1 \repeat}
\else
\@value=1\hbox{
\loop \hbox{-} \ifnum\@value<7\advance\@value by 1 \repeat}
\fi
}

\def\@middleoftheboard{
\ifbothhalfs
\hbox{  \vsize=0.5em
	\hbox{Z}
	\@value=1{
	\loop \hbox{z} \ifnum\@value<6\advance\@value by 1 \repeat}
	\hbox{ZzZ}
	\@value=1{
	\loop \hbox{z} \ifnum\@value<6\advance\@value by 1 \repeat}
	\hbox{Z}
}
\else
\hbox{  \vsize=0.5em
	\hbox{Z}
	\@value=1{
	\loop \hbox{z} \ifnum\@value<6\advance\@value by 1 \repeat}
	\hbox{ZzZ}
}
\fi
}

	
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Macros to write boards in various sizes %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\def\@onetotwelfe{\ifptsonmove
\hbox{\char0\char128\char129\char130\char131\char132\char133\char0z\char0
\ifbothhalfs
\char134\char135\char136\char137\char138\char139\fi}
\else
\hbox{\char0\char151\char150\char149\char148\char147\char146\char0z\char0
\ifbothhalfs
\char145\char144\char143\char142\char141\char140
\fi}
\fi
}
\def\@twentyfourtothirteen{\ifptsonmove
\hbox{\char0\char151\char150\char149\char148\char147\char146\char0z\char0
\ifbothhalfs
\char145\char144\char143\char142\char141\char140\fi}
\else
\hbox{\char0\char128\char129\char130\char131\char132\char133\char0z\char0
\ifbothhalfs
\char134\char135\char136\char137\char138\char139
\fi}
\fi
}

\def\@drawcube{
\ifcube\@value=\cubeowner\relax
\ifnum\@value=\@black\@value=\@cubevalue
\advance\@value by 127
\vbox{\hbox to 1.5em{	\hfill
			\vbox{	\hbox{z}\hbox{z}\hbox{z}\hbox{z}\hbox{z}\hbox{z}\hbox{z}
				\hbox{z}\hbox{z}\hbox{z}\hbox{z}
				\hbox{-}\hbox{\hbox{Z}\char\the\@value\hbox{Z}}\hbox{-}
				\hbox{z}}
			}
}
\else\ifnum\@value=\@white\@value=\@cubevalue
\advance\@value by 127
\vbox{\hbox to 1.5em{	\hfill
			\vbox{	\hbox{z}
				\hbox{-}\hbox{\hbox{Z}\char\the\@value\hbox{Z}}\hbox{-}
				\hbox{z}\hbox{z}\hbox{z}\hbox{z}\hbox{z}
				\hbox{z}\hbox{z}\hbox{z}\hbox{z}\hbox{z}\hbox{z}}
			}
}
\else\ifnum\@value=\@middle\@value=\@cubevalue
\advance\@value by 127
\vbox{\hbox to 1.5em{	\hfill
			\vbox{	\hbox{z}\hbox{z}\hbox{z}\hbox{z}\hbox{z}\hbox{z}
				\hbox{-}\hbox{\hbox{Z}\char\the\@value\hbox{Z}}\hbox{-}
				\hbox{z}\hbox{z}\hbox{z}\hbox{z}\hbox{z}\hbox{z}}
			}
}
\fi\fi\fi\fi
}

\def\@drawboard{
\offinterlineskip
\vbox{
	\ifnumbers\ifblack\@twentyfourtothirteen\else\@onetotwelfe\fi\fi
	\@horizontalborder
	\hbox{  \@verticalborder
		\@blackhangingpoint [24]
		\@whitehangingpoint [23]
		\@blackhangingpoint [22]
		\@whitehangingpoint [21]
		\@blackhangingpoint [20]
		\@whitehangingpoint [19]
		\@verticalborder
		\hangingbar [0]
		\@verticalborder
		\ifbothhalfs
		\@blackhangingpoint [18]
		\@whitehangingpoint [17]
		\@blackhangingpoint [16]
		\@whitehangingpoint [15]
		\@blackhangingpoint [14]
		\@whitehangingpoint [13]
		\@verticalborder
		\fi
	}
	\@middleoftheboard
	\hbox{  \@verticalborder
		\@whitestandingpoint [1]
		\@blackstandingpoint [2]
		\@whitestandingpoint [3]
		\@blackstandingpoint [4]
		\@whitestandingpoint [5]
		\@blackstandingpoint [6]
		\@verticalborder
		\standingbar [25]
		\@verticalborder
		\ifbothhalfs
		\@whitestandingpoint [7]
		\@blackstandingpoint [8]
		\@whitestandingpoint [9]
		\@blackstandingpoint [10]
		\@whitestandingpoint [11]
		\@blackstandingpoint [12]
		\@verticalborder
		\fi
	}
	\@horizontalborder
	\ifnumbers\ifblack\@onetotwelfe\else\@twentyfourtothirteen\fi\fi
}
\@drawcube
}

\def\@drawbigboard{
{\@bigboardfont
\@drawboard
}
}

\def\@drawnormalboard{
{\@normalboardfont
\@drawboard
}
}

\def\@drawsmallboard{
{\@smallboardfont
\@drawboard
}
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Macro to move a single checker %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\def\@movechecker(#1-#2){
%
\ifblack
\xdef\from{#1}\xdef\to{#2}\xdef\@movecolour{\@black}\xdef\@negmovecolour{\@white}
\else
\@value=#1\multiply\@value by -1\advance\@value by 25\xdef\from{\the\@value}
\@value=#2\multiply\@value by -1\advance\@value by 25\xdef\to{\the\@value}
\xdef\@movecolour{\@white}\xdef\@negmovecolour{\@black}
\fi
%
\@value=\@movecolour\multiply\@value by 25\advance\@value by 25\divide\@value by 2\relax
\ifnum\@value=\to
% bearoff %
\@get\@dummy[\from]\@value=\@dummy\advance\@value by \@negmovecolour\@set[\from](\the\@value)
\else\@get\@dummy[\to]\@value=\@dummy\multiply\@value by \@movecolour\relax
\ifnum\@value=-1
%A checker is hit%
\gdef\washit{*}
\@get\@dummy[\from]\@value=\@dummy\advance\@value by \@negmovecolour\@set[\from](\the\@value)
\@set[\to](\@movecolour)
\@value=\@movecolour\multiply\@value by 25\advance\@value by 25\divide\@value by 2\xdef\hit{\the\@value}
\@get\@dummy[\hit]\@value=\@dummy\advance\@value by \@negmovecolour\@set[\hit](\the\@value)
\else
%normal move%
\@get\@dummy[\from]\@value=\@dummy\advance\@value by \@negmovecolour\@set[\from](\the\@value)
\@get\@dummy[\to]\@value=\@dummy\advance\@value by \@movecolour\@set[\to](\the\@value)
\fi\fi
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Macro to perform all moves contained in a string which    %
% starts with a , and ends with 69-69,69-69.                %
% defines \stringofmoves, which contains the formatted move %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\def\@moveallcheckers#1-#2,#3.{
\@value=#1
\ifnum\@value=69 %reached end of the list%
\else\@f=#1\@t=#2%Delete blanks in #1 and #2 %
\gdef\washit{}\@movechecker(\the\@f-\the\@t)
\xdef\@dummy{\stringofmoves}
\ifnum\@f=25\def\from{bar}\else\def\from{\the\@f}\fi
\ifnum\@t=0\def\to{off}\else\def\to{\the\@t}\fi
\edef\stringofmoves{\@dummy\comma\from--\to\washit}\gdef\comma{, }
\expandafter\@moveallcheckers#3.\fi
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Commands for the position and the game environment %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newcommand{\blackpoint}[2]{\@value=#1\@set[\the\@value](-#2)}
\newcommand{\whitepoint}[2]{\@value=#1\advance\@value by -25
			    \multiply\@value by -1
			    \@set[\the\@value](#2)}
\newcommand{\whitebar}[1]{\@set[0](#1)}
\newcommand{\blackbar}[1]{\@set[25](-#1)}
\newcommand{\smallboard}{\def\@boardtype{@drawsmallboard}}
\newcommand{\normalboard}{\def\@boardtype{@drawnormalboard}}
\newcommand{\bigboard}{\def\@boardtype{@drawbigboard}}
\newcommand{\boardcaption}[1]{\def\capt{#1}}
\newcommand{\blackonmove}{\global\blacktrue}
\newcommand{\whiteonmove}{\global\blackfalse}
\newcommand{\dontshownumbers}{\global\numbersfalse}
\newcommand{\shownumbers}{\global\numberstrue}
\newcommand{\togglenumbers}{\ifptsonmove\global\ptsonmovefalse\else\ptsonmovetrue\fi}
\newcommand{\dontshowcube}{\global\cubefalse}
\newcommand{\showcube}{\global\cubetrue}
\newcommand{\blackcube}[1]{\gdef\cubeowner{\@black}\edef\@cubevalue{#1}}
\newcommand{\whitecube}[1]{\gdef\cubeowner{\@white}\edef\@cubevalue{#1}}
\newcommand{\middlecube}[1]{\gdef\cubeowner{\@middle}\edef\@cubevalue{#1}}
\newcommand{\showmoves}{\global\movestrue}
\newcommand{\dontshowmoves}{\global\movesfalse}
\newcommand{\indentwhite}{\global\indenttrue}
\newcommand{\dontindentwhite}{\global\indentfalse}
\newcommand{\halfboard}{\global\bothhalfsfalse}
\newcommand{\fullboard}{\global\bothhalfstrue}
\newcommand{\halfincr}{\global\secmovetrue}
\newcommand{\fullincr}{\global\secmovefalse}
\newcommand{\printboard}{\par\vspace{2em}
\centerline{\csname \@boardtype \endcsname}\par
\vspace{0.5em}
\centerline{\capt}
\vspace*{1.5em}\par}
\newcommand{\rawboard}{\mbox{\csname\@boardtype\endcsname}}
\def\dices(#1#2){\@value=#1\multiply\@value by 10\advance\@value by #2\relax
\the\@value}
\newcommand{\move}[2]{\gdef\comma{}\gdef\stringofmoves{}\relax\expandafter\@moveallcheckers#2,69-69,69-69.
\ifmoves
\par\ifindent\ifblack\else\hspace*{\@whiteskip}\fi\fi
\ifsecmove
\@value=\@movenumber\advance\@value by 1\divide\@value 2
\else
\@value=\@movenumber
\fi
\the\@value. \ifblack$\bullet$ \else$\circ$ \fi
\dices(#1)
: \stringofmoves\par
\fi
\ifblack\global\blackfalse\else\blacktrue\fi
\advance \@movenumber by 1}
\newcommand{\textmove}[1]{\ifmoves
\par\ifblack\else\ifindent\hspace*{\@whiteskip}\fi\fi
\ifsecmove
\@value=\@movenumber\advance\@value by 1\divide\@value 2
\else
\@value=\@movenumber
\fi
\the\@value. \ifblack$\bullet$ \else$\circ$ \fi#1\par
\fi
\ifblack\global\blackfalse\else\blacktrue\fi
\advance \@movenumber by 1}
\newcommand{\takecube}{\ifblack\gdef\cubeowner{\@white}\else\gdef\cubeowner{\@black}\fi
\@value=\@cubevalue\multiply\@value by 2\edef\@cubevalue{\the\@value}}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% The position environment to produce a single board %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newenvironment{position}%
{\@clearboard
\gdef\capt{}
\gdef\cubeowner{\@middle}
\gdef\@cubevalue{1}
}%
{\printboard}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% The game environment to annotate matches %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newenvironment{game}[2]%
{\initboard
\gdef\capt{}
\global\blacktrue
\gdef\cubeowner{\@middle}
\gdef\@cubevalue{1}
\global\@movenumber=1
\ifx\@empty#1\else\ifx\@empty#2\else
\ifindent
\par\hbox{\large\hbox to \@whiteskip{$\bullet$ #1\hfill}\hbox{$\circ$ #2}}\par
\else
\par\vbox{\large\hbox{$\bullet$ #1\hfill}\hbox{$\circ$ #2}}\par
\fi
\vspace*{4ex}
\fi\fi
}%
{}