Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Crafty changes to egtb.cpp - long post

Author: Robert Hyatt

Date: 17:37:00 12/04/00

Go up one level in this thread


On December 04, 2000 at 15:47:55, Vincent Diepeveen wrote:

>Nalimov >>
>"If so, how it happened that you included other
>person's code without prior contacting him? Please note that under USA law
>"source code available" doesn't mean "public domain". There is still a
>copyright."
>
>First of all never heart of this. Secondly you never mentionned anything
>when i emailed you *never ever* you said something about this.
>
>Last i downloaded crafty and have so far
>indeed used egtb.cpp of it.
>
>As far as i know i can use that code for any
>purpose as far as i post the changes made to it.


That might not be correct.  _I_ didn't write the egtb.cpp code, that was
done by Eugene.  That is his code to restrict as he sees fit...




>
>I'll not post egtb.cpp as i didn't do changes to it.
>
>Hereby the file a .c file which i use to
>connect to it, you get it for free!
>
>Hoping to have been complete - Vincent
>
>-------- the c file -------------
>
>/* proben in de EGTB
>*/
>
>#include <stdio.h>
>
>#include <string.h>
>
>#include <stdlib.h>
>
>
>
>#include "diep.h"
>
>#include "function.h"
>
>#include "data.h"
>
>
>
>#define  XX  127
>
>#define  C_PIECES  3  /* Maximum # of pieces of one color OTB */
>
>
>
>typedef unsigned int INDEX;
>
>typedef unsigned int square;
>
>
>
>/* Those declarations necessary because Diep is C, not C++ program */
>
>
>
>#if defined (_MSC_VER)
>
>#define  TB_FASTCALL  __fastcall
>
>#else
>
>#define  TB_FASTCALL
>
>#endif
>
>
>
>#define pageL       65536
>
>#define tbbe_ssL    ((pageL-4)/2)
>
>#define bev_broken  (tbbe_ssL+1)  /* illegal or busted */
>
>#define bev_mi1     tbbe_ssL      /* mate in 1 move */
>
>#define bev_mimin   1               /* mate in max moves */
>
>#define bev_draw    0               /* draw */
>
>#define bev_limax   (-1)            /* mated in max moves */
>
>#define bev_li0     (-tbbe_ssL)   /* mated in 0 moves */
>
>
>
>typedef INDEX (TB_FASTCALL * PfnCalcIndex) (square*, square*, square, int
>fInverse);
>
>
>
>extern int IInitializeTb(char *);
>
>extern int FTbSetCacheSize(void *,unsigned long);
>
>extern int IDescFindFromCounters(int *);
>
>extern int FRegisteredFun(int,int);
>
>extern PfnCalcIndex PfnIndCalcFun(int,int);
>
>extern int TB_FASTCALL L_TbtProbeTable(int,int,INDEX);
>
>
>
>#define PfnIndCalc PfnIndCalcFun
>
>#define FRegistered FRegisteredFun
>
>
>
>void InitNalimov(void);
>
>void AskNalimov(char *);
>
>int  AskQuickNalimov(int,int);
>
>
>
>//extern int TB_CRC_CHECK;
>
>extern int cbEGTBCompBytes;
>
>
>
>int donecolor[2][8];  //indien true dan is wit al gedaan voor die kleur
>
>void *EGTB_cache = (void *)NULL;
>
>
>
>void InitNalimov(void) { /* initialiseren van de nalimov databases */
>
>
>
>  /* open de file egtb.ini anders probeer c:\diep\nalimov */
>
>  int i,ti,size;
>
>  FILE *tbini;
>
>  char inifile[256];
>
>  char bp[256];
>
>  char npath[10000];
>
>
>
>  if( ProcessNumber ) {
>
>    FlagEGTB = true;
>
>    if( tree->EngineFlags&engine_noegtb )
>
>      FlagEGTB = false;
>
>  }
>
>
>
>  if( !FlagEGTB ) {
>
>    mprint("EGTB turned off\n");
>
>    return;
>
>  }
>
>
>
>  AddDiepDir(inifile,"egtb.ini");
>
>  i = 0;
>
>  tbini = fopen(inifile,"rt");
>
>  if( tbini != NULL ) {
>
>    while( fgets(bp,255,tbini) ) {
>
>      if( bp[0] != ';' && (size = strlen(bp)) ) {
>
>        if( bp[size-1] == '\n' ) {
>
>          bp[size-1] = '\0';
>
>          size--;
>
>        }
>
>        for( ti = 0 ; ti < size ; ti++ )
>
>          npath[i++] = bp[ti];
>
>        npath[i++] = ';';
>
>      }
>
>    }
>
>    fclose(tbini);
>
>  }
>
>  npath[i] = '\0';
>
>  mprint("Initializing from %s Nalimov Compr. EGTB in dirs:\n  %s\n",
>
>   inifile,npath);
>
>  MaxEGTB = (int)IInitializeTb(npath);
>
>  // maxegtb bevat maximaal aantal stukken egtb, 5 voor 5 stukken.
>
>
>
>  if( MaxEGTB > 0 ) {
>
>    EGTB_cache = (void *)malloc(tree->CacheSizeEGTB);
>
>    FTbSetCacheSize(EGTB_cache,tree->CacheSizeEGTB);
>
>    mprint("%lu used for TB indices and decompression
>tables\n",cbEGTBCompBytes);
>
>  }
>
>  mprint("Found at most %i pieces EGTB\n",MaxEGTB);
>
>}
>
>
>
>void AskNalimov(char *buf) { /* vraagt een stelling op vanuit de interface */
>
>  int i,rgicounters[10],piece,iTb;
>
>
>
>  int    side;
>
>  int    fInvert;
>
>  square *psqW;
>
>  square *psqB;
>
>  square rgsqWhite[C_PIECES*5+1], rgsqBlack[C_PIECES*5+1];
>
>  square sqEnP;
>
>  INDEX  ind;
>
>
>
>  int    c;
>
>
>
>  for( i = 0 ; i < 8 ; i++ )
>
>    donecolor[0][i] = donecolor[1][i] = 0;
>
>
>
>  for( i = 0 ; i < 10 ; i++ )
>
>    rgicounters[i] = 0;
>
>
>
>  for( i = 0 ; i < 64 ; i++ ) {
>
>    if( (piece=partij->bord[i]) ) {
>
>      c = partij->kleur[i];
>
>      if( c == white )
>
>        rgsqWhite[((piece-1)*C_PIECES)+donecolor[white][piece]++] = (square)i;
>
>      else
>
>        rgsqBlack[((piece-1)*C_PIECES)+donecolor[black][piece]++] = (square)i;
>
>
>
>      if( piece != king )
>
>        rgicounters[(5*c)+piece-1]++;
>
>    }
>
>  }
>
>
>
>  iTb = IDescFindFromCounters (rgicounters);
>
>  if( iTb != 0 ) {
>
>    mprint("egtb available!\n");
>
>    if( iTb > 0 ) {
>
>      side = partij->aanzet;
>
>      fInvert = false;
>
>      /* assumption order of pieces = P,N,B,R,Q,K ??? */
>
>      psqW = rgsqWhite;//pointer to locations of white squares;
>
>      psqB = rgsqBlack;//pointer to locations of black squares;
>
>    }
>
>    else {
>
>      side = partij->aanzet^1;
>
>      fInvert = true;
>
>      psqW = rgsqBlack;//pointer to locations of black squares;
>
>      psqB = rgsqWhite;//pointer to locations of white squares;
>
>      iTb = -iTb;
>
>    }
>
>
>
>    if( !FRegistered(iTb, side) )
>
>      sprintf(buf,"Error retreiving EGTB\n");
>
>    else {
>
>      int score;
>
>      sqEnP = XX; // square of en-passant capture, IF IT'S POSSIBLE, or XX
>
>      ind = (PfnIndCalc(iTb, side) (psqW,psqB,sqEnP,fInvert));
>
>     // printf("index = %u iTb=%i\n",ind,iTb);
>
>      score = L_TbtProbeTable(iTb,side,ind);
>
>
>
>      if( bev_broken == score )
>
>        sprintf(buf,"EGTB score is illegal\n");
>
>      else if( score > 0 )
>
>        sprintf(buf,"EGTB score side to move mates in %i
>moves\n",(bev_mi1-score+1));
>
>      else if( score < 0 )
>
>        sprintf(buf,"EGTB score side to move loses in %i
>moves\n",(bev_mi1+score));
>
>      else
>
>        sprintf(buf,"EGTB score is a draw\n");
>
>    }
>
>  }
>
>  else
>
>    sprintf(buf,"EGTB not available!\n");
>
>}
>
>
>
>int AskQuickNalimov(int c,int realply) {
>
> /* vraagt een stelling op vanuit de search
>
>  * retourneert een matscore, remise score, of DIEPINFINITE indien geen egtb van
>toepassing */
>
>  int
>i,rgicounters[10],piece,iTb,side,fInvert,*psq,sq,donewhite[6],doneblack[6];
>
>  square *psqW;
>
>  square *psqB;
>
>  square rgsqWhite[C_PIECES*5+1], rgsqBlack[C_PIECES*5+1];
>
>  square sqEnP;
>
>  INDEX  ind;
>
>
>
>  if( PieceCnt[white]+PieceCnt[black] >= 4 )
>
>    return DIEPINFINITE; /* bij 6 pieces of meer, dan direct terug */
>
>
>
>  for( i = 0 ; i < 6 ; i++ )
>
>    donewhite[i] = doneblack[i] = 0;
>
>
>
>  for( i = 0 ; i < 10 ; i++ )
>
>    rgicounters[i] = 0;
>
>
>
>  psq = PieceList[white];
>
>  sq = *psq++;
>
>  do {
>
>    if( sq != 64 ) {
>
>      piece = board[sq]-1;
>
>      rgsqWhite[(piece*C_PIECES)+(donewhite[piece]++)] = (square)sq;
>
>      if( piece != 5 )
>
>        rgicounters[piece]++;
>
>    }
>
>  } while( (sq=*psq++) != 128 );
>
>
>
>  psq = PieceList[black];
>
>  sq=*psq++;
>
>  do {
>
>    if( sq != 64 ) {
>
>      piece = board[sq]-1;
>
>      rgsqBlack[(piece*C_PIECES)+(doneblack[piece]++)] = (square)sq;
>
>      if( piece != 5 )
>
>        rgicounters[5+piece]++;
>
>    }
>
>  } while( (sq=*psq++) != 128 );
>
>
>
>  iTb = IDescFindFromCounters(rgicounters);
>
>  if( iTb != 0 ) {
>
>    if( iTb > 0 ) {
>
>      side = c;
>
>      fInvert = false;
>
>      /* assumption order of pieces = P,N,B,R,Q,K ??? */
>
>      psqW = rgsqWhite;//pointer to locations of white squares;
>
>      psqB = rgsqBlack;//pointer to locations of black squares;
>
>    }
>
>    else {
>
>      side = c^1;
>
>      fInvert = true;
>
>      psqW = rgsqBlack;//pointer to locations of black squares;
>
>      psqB = rgsqWhite;//pointer to locations of white squares;
>
>      iTb = -iTb;
>
>    }
>
>
>
>    if( !FRegistered(iTb, side) )
>
>      return(DIEPINFINITE);
>
>    else {
>
>      int score;
>
>      sqEnP = XX; // square of en-passant capture, IF IT'S POSSIBLE, or XX
>
>      ind = (PfnIndCalc(iTb, side) (psqW,psqB,sqEnP,fInvert));
>
>     // printf("index = %u iTb=%i\n",ind,iTb);
>
>      score = L_TbtProbeTable(iTb,side,ind);
>
>
>
>      if( bev_broken == score ) {
>
>        //mprint("EGTB broken score ==> mate\n");
>
>        return(MATEVALUE-realply);
>
>      }
>
>      else if( score > 0 ) {
>
>        //mprint("EGTB score side to move mates in %i
>moves\n",(bev_mi1-score+1));
>
>        return(MATEVALUE-realply-((bev_mi1-score+1)*2));
>
>      }
>
>      else if( score < 0 ) {
>
>        //mprint("EGTB score side to move loses in %i moves\n",(bev_mi1+score));
>
>        return(-MATEVALUE+realply+((bev_mi1+score)*2));
>
>      }
>
>      else {
>
>       // mprint("EGTB score is a draw\n");
>
>        return(Contempt[c]);
>
>      }
>
>
>
>    }
>
>  }
>
>  else {
>
>    return(DIEPINFINITE);
>
>  }
>
>}
>
>
>
>
>
>/* EOF egbridge.c */
>
>egtb.cpp is already included in crafty!



This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.