5fa304b534ab384c8308eedc08011bb6dd370da6
[gnushogi.git] / src / pattern.h
1 /*
2  * pattern.h - C source for GNU SHOGI
3  *
4  * Copyright (c) 1993, 1994, 1995 Matthias Mutz
5  *
6  * GNU SHOGI is based on GNU CHESS
7  *
8  * Copyright (c) 1988,1989,1990 John Stanback
9  * Copyright (c) 1992 Free Software Foundation
10  *
11  * This file is part of GNU SHOGI.
12  *
13  * GNU Shogi is free software; you can redistribute it and/or modify
14  * it under the terms of the GNU General Public License as published by
15  * the Free Software Foundation; either version 1, or (at your option)
16  * any later version.
17  *
18  * GNU Shogi is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License
24  * along with GNU Shogi; see the file COPYING.  If not, write to
25  * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
26  */
27  
28 /* #define TEST_PATTERN  */
29 /* #define DEBUG_PATTERN */
30
31
32 #define MAX_NAME 16    /* maximum length of opening name */
33 #define MAX_SEQUENCE 4 /* maximum number of sequences for an opening type */
34
35
36 #define CANNOT_REACH (-1)
37 #define NOT_TO_REACH (-2)
38 #define IS_REACHED   (-3)
39 #define IS_SUCCESSOR (-4)
40
41 #define END_OF_SEQUENCES (-1)
42 #define END_OF_PATTERNS (-2)
43 #define END_OF_LINKS (-3)
44 #define END_OF_FIELDS (-4)
45
46   struct PatternField {
47     short side;
48     short piece;
49     short square;
50   }; 
51
52
53   struct Pattern_rec {
54     small_short visited;
55     small_short distance[2];
56     short reachedGameCnt[2];
57     short first_link;
58     short first_field;
59     short next_pattern;
60   };
61                
62
63   struct OpeningSequence_rec {
64     short opening_type;
65     short first_pattern[MAX_SEQUENCE];
66   };
67
68
69 extern struct OpeningSequence_rec OpeningSequence[];
70 extern struct Pattern_rec Pattern[];
71
72
73
74 extern 
75   short
76   piece_to_pattern_distance 
77     (short side, short piece, short pside, short pattern);
78
79 extern
80   short
81   pattern_distance (short pside, short pattern);
82
83 extern
84   short
85   board_to_pattern_distance 
86     (short pside, short osequence, short pmplty, short GameCnt);
87  
88 extern
89   short locate_opening_sequence(short pside, char *s, short GameCnt);
90
91 extern
92   void
93   DisplayPattern (FILE *fd, short first_field);
94
95 extern
96   void update_advance_bonus (short pside, short os);
97
98 extern
99   void
100   GetOpeningPatterns (short *max_opening_sequence);
101
102 extern
103   void
104   ShowOpeningPatterns (short max_opening_sequence);
105   
106   
107 extern short ValueOfOpeningName (char *name);
108
109 extern void NameOfOpeningValue (short i, char *name);
110
111
112 #ifdef EXTPATTERNFILE
113
114 extern void ReadOpeningSequences (short *pindex);
115
116 extern void WriteOpeningSequences (short pindex);
117   
118 #endif
119
120