/* Pepito v1.59  -- file: genjug.h --
   Copyright (c) 2000-01 Carlos del Cacho

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 2, or (at your option)
   any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; see the file COPYING.  If not, write to
   the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
   Boston, MA 02111-1307, USA.

   Contact the author: guggenjaimito@yahoo.com
*/

// macros usadas en genjug.c

#define Gen_Jugs_MSB(mapa_orig, tabla_ataq, intersecc, pieza_val)                    \
                                                                                     \
        mapa_pieza = mapa_orig;                                                      \
        while (mapa_pieza)                                                           \
          {                                                                          \
            cas_ini = Msb(mapa_pieza);                                               \
            mapa_pieza ^= MASK[cas_ini];                                             \
            mapa_destino = tabla_ataq(cas_ini) & intersecc;                          \
            while (mapa_destino)                                                     \
              {                                                                      \
                 cas_fin = Msb(mapa_destino);                                        \
                 mapa_destino ^= MASK[cas_fin];                                      \
                 ptrjug->jug = cas_ini | (cas_fin << 6) | (Tablero[cas_fin] << 12);  \
                 (ptrjug++)->valor = VALOR[Tablero[cas_fin]] - pieza_val;            \
              }                                                                      \
          }

#define Gen_Jugs_LSB(mapa_orig, tabla_ataq, intersecc, pieza_val )                   \
                                                                                     \
        mapa_pieza = mapa_orig;                                                      \
        while (mapa_pieza)                                                           \
          {                                                                          \
            cas_ini = Lsb(mapa_pieza);                                               \
            mapa_pieza ^= MASK[cas_ini];                                             \
            mapa_destino = tabla_ataq(cas_ini) & intersecc;                          \
            while (mapa_destino)                                                     \
              {                                                                      \
                cas_fin = Lsb(mapa_destino);                                         \
                mapa_destino ^= MASK[cas_fin];                                       \
                ptrjug->jug = cas_ini | (cas_fin << 6) | (Tablero[cas_fin] << 12);   \
                (ptrjug++)->valor = VALOR[Tablero[cas_fin]] - pieza_val;             \
              }                                                                      \
          }


#define Gen_Jugs_MSB_NC(mapa_orig, tabla_ataq, intersecc )                           \
                                                                                     \
        mapa_pieza = mapa_orig;                                                      \
        while (mapa_pieza)                                                           \
          {                                                                          \
            cas_ini = Msb(mapa_pieza);                                               \
            mapa_pieza ^= MASK[cas_ini];                                             \
            mapa_destino = tabla_ataq(cas_ini) & intersecc;                          \
            while (mapa_destino)                                                     \
              {                                                                      \
                 cas_fin = Msb(mapa_destino);                                        \
                 mapa_destino ^= MASK[cas_fin];                                      \
                 ptrjug->jug = cas_ini | (cas_fin << 6);                             \
                 (ptrjug++)->valor = HistHeuristic[ ptrjug->jug & 0xfff ][1];        \
              }                                                                      \
          }

#define Gen_Jugs_LSB_NC(mapa_orig, tabla_ataq, intersecc )                           \
                                                                                     \
        mapa_pieza = mapa_orig;                                                      \
        while (mapa_pieza)                                                           \
          {                                                                          \
            cas_ini = Lsb(mapa_pieza);                                               \
            mapa_pieza ^= MASK[cas_ini];                                             \
            mapa_destino = tabla_ataq(cas_ini) & intersecc;                          \
            while (mapa_destino)                                                     \
              {                                                                      \
                cas_fin = Lsb(mapa_destino);                                         \
                mapa_destino ^= MASK[cas_fin];                                       \
                ptrjug->jug = cas_ini | (cas_fin << 6);                              \
                (ptrjug++)->valor = HistHeuristic[ ptrjug->jug & 0xfff ][0];         \
              }                                                                      \
          }

#define Gen_Obstru_B(mapa_orig, tabla_ataq)                                          \
                                                                                     \
        mapa_pieza = mapa_orig;                                                      \
        while (mapa_pieza)                                                           \
          {                                                                          \
            cas_ini = Msb(mapa_pieza);                                               \
            mapa_pieza ^= MASK[cas_ini];                                             \
            if (!ClavadaReyB(cas_ini))                                               \
              {                                                                      \
                 mapa_destino = tabla_ataq(cas_ini) & a_obstruir;                    \
                 while (mapa_destino)                                                \
                   {                                                                 \
                      cas_fin = Msb(mapa_destino);                                   \
                      mapa_destino ^= MASK[cas_fin];                                 \
                      ptrjug->jug = cas_ini | (cas_fin << 6) | (Tablero[cas_fin] << 12);    \
                      ptrjug++;                                                             \
                   }                                                                 \
              }                                                                      \
          }

#define Gen_Obstru_N(mapa_orig, tabla_ataq)                                          \
                                                                                     \
        mapa_pieza = mapa_orig;                                                      \
        while (mapa_pieza)                                                           \
          {                                                                          \
            cas_ini = Lsb(mapa_pieza);                                               \
            mapa_pieza ^= MASK[cas_ini];                                             \
            if (!ClavadaReyN(cas_ini))                                               \
              {                                                                      \
                 mapa_destino = tabla_ataq(cas_ini) & a_obstruir;                    \
                 while (mapa_destino)                                                \
                   {                                                                 \
                      cas_fin = Msb(mapa_destino);                                   \
                      mapa_destino ^= MASK[cas_fin];                                 \
                      ptrjug->jug = cas_ini | (cas_fin << 6) | (Tablero[cas_fin] << 12);    \
                      ptrjug++;                                                             \
                   }                                                                 \
              }                                                                      \
          }


#define Gen_ChecksB(mapa_orig, tabla_ataq, intersecc)                                \
{                                                                                    \
                                                                                     \
        mapa_pieza = mapa_orig;                                                      \
        while (mapa_pieza)                                                           \
          {                                                                          \
            cas_ini = Msb(mapa_pieza);                                               \
            mapa_pieza ^= MASK[cas_ini];                                             \
            mapa_destino = tabla_ataq(cas_ini) & intersecc;                          \
            while (mapa_destino)                                                     \
              {                                                                      \
                 cas_fin = Msb(mapa_destino);                                        \
                 mapa_destino ^= MASK[cas_fin];                                      \
                 if (tabla_ataq(cas_fin) & ReyN)                                     \
                 {                                                                   \
                   (ptrjug++)->jug = cas_ini | (cas_fin << 6) | (Tablero[cas_fin] << 12);  \
                 }                                                                   \
              }                                                                      \
          }                                                                          \
}

#define Gen_ChecksN(mapa_orig, tabla_ataq, intersecc)                                \
{                                                                                    \
                                                                                     \
        mapa_pieza = mapa_orig;                                                      \
        while (mapa_pieza)                                                           \
          {                                                                          \
            cas_ini = Lsb(mapa_pieza);                                               \
            mapa_pieza ^= MASK[cas_ini];                                             \
            mapa_destino = tabla_ataq(cas_ini) & intersecc;                          \
            while (mapa_destino)                                                     \
              {                                                                      \
                 cas_fin = Lsb(mapa_destino);                                        \
                 mapa_destino ^= MASK[cas_fin];                                      \
                 if (tabla_ataq(cas_fin) & ReyB)                                     \
                 {                                                                   \
                   (ptrjug++)->jug = cas_ini | (cas_fin << 6) | (Tablero[cas_fin] << 12);  \
                 }                                                                   \
              }                                                                      \
          }                                                                          \
}
