Maybe I got it all wrong. So, what exactly is one doing when picking through the ippo* code trying to figure it out to see if any ideas can be discovered to implement in one's own engine? What is that called? Ditto disassembly of Houdini, Rybka, etc.? You disagree with Muller that Fabien's accomplishment and originality is relegated to little more than debugging? Why do you disagree with that, if you do? If good debugging earns one the "originality" predicate a la Muller, then why does Don dismiss Richard's opinion that Houdart has done something original? What are your percentages? Dear sir, please divide up each of the Crafty functions below into two groups: 1-1 and 1-many. Let's start there. Please don't bother, if all you got to say is "you know it when you see it". We have a long ways to go; but, you appear to have interest in defining "originality". In your opinion, what % of chess engine source code is 1:1 and what percentage is 1:many? Are there sub-parts within search() that are 1:1? What category do magic bitboards fall into? kpk bitbases go into the 1:1 bucket, right? For, instance, if I copy the following null move code into my search(), does that diminish "originality"?:
Probably every top engine has source code that is virtually identical to the above null-move routine. Would you penalize my "originality" if I literally copied the above code into my search()? Why? What if I throw in Tabibi's verified null move code? Is null-move 1:1? It is, isn't it. Everything around it may not be, but null move reduction is. Or isn't?
Code: Select all
int Evaluate(TREE * RESTRICT, int, int, int, int);
void EvaluateBishops(TREE * RESTRICT, int);
void EvaluateDevelopment(TREE * RESTRICT, int, int);
int EvaluateDraws(TREE * RESTRICT, int, int, int);
void EvaluateKings(TREE * RESTRICT, int, int);
int EvaluateKingsFile(TREE * RESTRICT, int, int);
void EvaluateKnights(TREE * RESTRICT, int);
void EvaluateMate(TREE * RESTRICT, int);
void EvaluateMaterial(TREE * RESTRICT, int);
void EvaluatePassedPawns(TREE * RESTRICT, int);
void EvaluatePassedPawnRaces(TREE * RESTRICT, int);
void EvaluatePawns(TREE * RESTRICT, int);
void EvaluateQueens(TREE * RESTRICT, int);
void EvaluateRooks(TREE * RESTRICT, int);
int EvaluateWinningChances(TREE * RESTRICT, int, int);
int EvaluateHasOpposition(int, int, int);
void AlignedMalloc(void **, int, int);
void AlignedRemalloc(void **, int, int);
int Book(TREE * RESTRICT, int, int);
void BookClusterIn(FILE *, int, BOOK_POSITION *);
void BookClusterOut(FILE *, int, BOOK_POSITION *);
int BookIn32(unsigned char *ch);
void BookUp(TREE * RESTRICT, int, char **);
void BookSort(BB_POSITION *, int, int);
int CheckInput(void);
void CopyFromChild(TREE * RESTRICT, TREE * RESTRICT, int);
TREE *CopyToChild(TREE * RESTRICT, int);
void EVTest(char *);
int FindBlockID(TREE * RESTRICT);
int FTbSetCacheSize(void *, unsigned long);
int GameOver(int);
void ClearHashTableScores(void);
int HashProbe(TREE * RESTRICT, int, int, int, int *, int);
void HashStore(TREE * RESTRICT, int, int, int, int, int, int);
void HashStorePV(TREE * RESTRICT, int, int);
int IInitializeTb(char *);
void Initialize(void);
void InitializeAttackBoards(void);
void InitializeChessBoard(TREE *);
int InitializeGetLogID();
void InitializeHashTables(void);
void InitializeKillers(void);
void InitializeKingSafety(void);
void InitializeMagic(void);
void InitializeMasks(void);
void InitializePawnMasks(void);
void InitializeSMP(void);
int InvalidPosition(TREE * RESTRICT);
int Iterate(int, int, int);
void Killer(TREE * RESTRICT, int, int);
int KingPawnSquare(int, int, int, int);
void LearnBook(void);
int LearnFunction(int, int, int, int);
void LearnValue(int, int);
void NewGame(int);
int NextEvasion(TREE * RESTRICT, int, int);
int NextMove(TREE * RESTRICT, int, int);
int NextRootMove(TREE * RESTRICT, TREE * RESTRICT, int);
int NextRootMoveParallel(void);
int Option(TREE * RESTRICT);
int OptionMatch(char *, char *);
void OptionPerft(TREE * RESTRICT, int, int, int);
void Output(TREE * RESTRICT, int, int);
int OutputGood(TREE * RESTRICT, char *, int, int);
int ParseTime(char *);
void Pass(void);
int PinnedOnKing(TREE * RESTRICT, int, int);
int Ponder(int);
void PreEvaluate(TREE * RESTRICT);
int Quiesce(TREE * RESTRICT, int, int, int, int);
int QuiesceChecks(TREE * RESTRICT, int, int, int, int);
int QuiesceEvasions(TREE * RESTRICT, int, int, int, int);
void RootMoveList(int);
int Search(TREE * RESTRICT, int, int, int, int, int, int);
int SearchRoot(TREE * RESTRICT, int, int, int, int);
int SearchParallel(TREE * RESTRICT, int, int, int, int, int, int);
void SetChessBitBoards(TREE *);
int SetRootAlpha(unsigned char, int);
int SetRootBeta(unsigned char, int);
void *SharedMalloc(size_t, int);
void SharedFree(void *address);
int StrCnt(char *, char);
int Swap(TREE * RESTRICT, int, int);
int Thread(TREE * RESTRICT);
void WaitForAllThreadsInitialized(void);
void *STDCALL ThreadInit(void *);
void ThreadMalloc(int);
void ThreadStop(TREE * RESTRICT);
int ThreadWait(long, TREE * RESTRICT);
void TimeAdjust(int, int);
int TimeCheck(TREE * RESTRICT, int);
void TimeSet(TREE * RESTRICT, int);
extern void *WinMallocInterleaved(size_t, int);
extern void WinFreeInterleaved(void *, size_t);
int Attacks(TREE * RESTRICT, int, int);
void Analyze(void);
void Annotate(void);
void AnnotateHeaderHTML(char *, FILE *);
void AnnotateFooterHTML(FILE *);
void AnnotatePositionHTML(TREE * RESTRICT, int, FILE *);
char *AnnotateVtoNAG(int, int, int, int);
void AnnotateHeaderTeX(char *, FILE *);
void AnnotateFooterTeX(FILE *);
void AnnotatePositionTeX(TREE *, int, FILE *);
void Bench(int);
void CraftyExit(int);
void DisplayArray(int *, int);
void DisplayArrayX2(int *, int *, int);
void DisplayBitBoard(BITBOARD);
void Display2BitBoards(BITBOARD, BITBOARD);
void DisplayChessBoard(FILE *, POSITION);
char *DisplayEvaluation(int, int);
char *DisplayEvaluationKibitz(int, int);
void DisplayFT(int, int, int);
char *DisplayHHMM(unsigned int);
char *DisplayHHMMSS(unsigned int);
char *DisplayKM(unsigned int);
void DisplayPV(TREE * RESTRICT, int, int, int, int, PATH *);
char *DisplayTime(unsigned int);
char *DisplayTimeKibitz(unsigned int);
void DisplayTreeState(TREE * RESTRICT, int, int, int);
void DisplayChessMove(char *, int);
void DisplayType3(int *, int *);
void DisplayType4(int *, int *);
void DisplayType5(int *, int *, int);
void DisplayType6(int *, int *);
void DisplayType7(int *, int *);
void DisplayType8(int *, int);
void DisplayType9(int *, int *);
void Edit(void);
void Kibitz(int, int, int, int, int, BITBOARD, int, char *);
void Test(char *);
void TestEPD(char *);
int Drawn(TREE * RESTRICT, int);
int InputMove(TREE * RESTRICT, char *, int, int, int, int);
int InputMoveICS(TREE * RESTRICT, char *, int, int, int, int);
char *FormatPV(TREE * RESTRICT, int, PATH);
int Read(int, char *);
int ReadChessMove(TREE * RESTRICT, FILE *, int, int);
void ReadClear(void);
unsigned int ReadClock(void);
int ReadPGN(FILE *, int);
int ReadNextMove(TREE * RESTRICT, char *, int, int);
int ReadParse(char *, char *args[], char *);
int ReadInput(void);
char *OutputMove(TREE * RESTRICT, int, int, int);
char *OutputMoveICS(int);
int *GenerateCaptures(TREE * RESTRICT, int, int, int *);
int *GenerateCheckEvasions(TREE * RESTRICT, int, int, int *);
int *GenerateChecks(TREE * RESTRICT, int, int, int *);
int *GenerateNoncaptures(TREE * RESTRICT, int, int, int *);
void MakeMove(TREE * RESTRICT, int, int, int);
void MakeMoveRoot(TREE * RESTRICT, int, int);
void UnmakeMove(TREE * RESTRICT, int, int, int);
int ValidMove(TREE * RESTRICT, int, int, int);
int VerifyMove(TREE * RESTRICT, int, int, int);
void ValidatePosition(TREE * RESTRICT, int, int, char *);
int RepetitionCheck(TREE * RESTRICT, int, int);
int RepetitionCheckBook(TREE * RESTRICT, int, int);
int RepetitionDraw(TREE * RESTRICT, int, int);
void ResignOrDraw(TREE * RESTRICT, int);
void RestoreGame(void);
void Trace(TREE * RESTRICT, int, int, int, int, int, char *, int);
void SetBoard(TREE *, int, char **, int);
void Interrupt(int);
void Print(int, char *, ...);
char *PrintKM(size_t, int);