Introduction
Introduction Statistics Contact Development Disclaimer Help
pgn_standard_1994-03-12.txt - chess-puzzles - chess puzzle book generator
git clone git://git.codemadness.org/chess-puzzles
Log
Files
Refs
README
LICENSE
---
pgn_standard_1994-03-12.txt (121009B)
---
1 Standard: Portable Game Notation Specification and Implementation Guide
2
3 Revised: 1994.03.12
4
5 Authors: Interested readers of the Internet newsgroup rec.games.chess
6
7 Coordinator: Steven J. Edwards (send comments to [email protected])
8
9
10 0: Preface
11
12 From the Tower of Babel story:
13
14 "If now, while they are one people, all speaking the same language, they…
15 started to do this, nothing will later stop them from doing whatever they
16 propose to do."
17
18 Genesis XI, v.6, _New American Bible_
19
20
21 1: Introduction
22
23 PGN is "Portable Game Notation", a standard designed for the representat…
24 chess game data using ASCII text files. PGN is structured for easy read…
25 writing by human users and for easy parsing and generation by computer
26 programs. The intent of the definition and propagation of PGN is to fac…
27 the sharing of public domain chess game data among chessplayers (both or…
28 and otherwise), publishers, and computer chess researchers throughout the
29 world.
30
31 PGN is not intended to be a general purpose standard that is suitable fo…
32 possible use; no such standard could fill all conceivable requirements.
33 Instead, PGN is proposed as a universal portable representation for data
34 interchange. The idea is to allow the construction of a family of chess
35 applications that can quickly and easily process chess game data using P…
36 import and export among themselves.
37
38
39 2: Chess data representation
40
41 Computer usage among chessplayers has become quite common in recent year…
42 variety of different programs, both commercial and public domain, are us…
43 generate, access, and propagate chess game data. Some of these programs…
44 rather impressive; most are now well behaved in that they correctly foll…
45 Laws of Chess and handle users' data with reasonable care. Unfortunatel…
46 programs have had serious problems with several aspects of the external
47 representation of chess game data. Sometimes these problems become more
48 visible when a user attempts to move significant quantities of data from…
49 program to another; if there has been no real effort to ensure portabili…
50 data, then the chances for a successful transfer are small at best.
51
52
53 2.1: Data interchange incompatibility
54
55 The reasons for format incompatibility are easy to understand. In fact,…
56 of them are correlated with the same problems that have already been see…
57 commercial software offerings for other domains such as word processing,
58 spreadsheets, fonts, and graphics. Sometimes a manufacturer deliberately
59 designs a data format using encryption or some other secret, proprietary
60 technique to "lock in" a customer. Sometimes a designer may produce a f…
61 that can be deciphered without too much difficulty, but at the same time
62 publicly discourage third party software by claiming trade secret protec…
63 Another software producer may develop a non-proprietary system, but it m…
64 well only within the scope of a single program or application because it…
65 easily expandable. Finally, some other software may work very well for …
66 purposes, but it uses symbols and language not easily understood by peop…
67 computers available to those outside the country of its development.
68
69
70 2.2: Specification goals
71
72 A specification for a portable game notation must observe the lessons of
73 history and be able to handle probable needs of the future. The design
74 criteria for PGN were selected to meet these needs. These criteria incl…
75
76 1) The details of the system must be publicly available and free of unne…
77 complexity. Ideally, if the documentation is not available for some rea…
78 typical chess software developers and users should be able to understand…
79 of the data without the need for third party assistance.
80
81 2) The details of the system must be non-proprietary so that users and s…
82 developers are unrestricted by concerns about infringing on intellectual
83 property rights. The idea is to let chess programmers compete in a free…
84 where customers may choose software based on their real needs and not ba…
85 artificial requirements created by a secret data format.
86
87 3) The system must work for a variety of programs. The format should be…
88 that it can be used by chess database programs, chess publishing program…
89 chess server programs, and chessplaying programs without being unnecessa…
90 specific to any particular application class.
91
92 4) The system must be easily expandable and scalable. The expansion abi…
93 must include handling data items that may not exist currently but could …
94 expected to emerge in the future. (Examples: new opening classification…
95 new country names.) The system should be scalable in that it must not h…
96 arbitrary restrictions concerning the quantity of stored data. Also, pl…
97 modes of expansion should either preserve earlier databases or at least …
98 for their automatic conversion.
99
100 5) The system must be international. Chess software users are found in …
101 countries and the system should be free of difficulties caused by conven…
102 local to a given region.
103
104 6) Finally, the system should handle the same kinds and amounts of data …
105 are already handled by existing chess software and by print media.
106
107
108 2.3: A sample PGN game
109
110 Although its description may seem rather lengthy, PGN is actually fairly
111 simple. A sample PGN game follows; it has most of the important features
112 described in later sections of this document.
113
114 [Event "F/S Return Match"]
115 [Site "Belgrade, Serbia JUG"]
116 [Date "1992.11.04"]
117 [Round "29"]
118 [White "Fischer, Robert J."]
119 [Black "Spassky, Boris V."]
120 [Result "1/2-1/2"]
121
122 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 …
123 O-O 9. h3 Nb8 10. d4 Nbd7 11. c4 c6 12. cxb5 axb5 13. Nc3 Bb7 14. Bg5 b4…
124 Nb1 h6 16. Bh4 c5 17. dxe5 Nxe4 18. Bxe7 Qxe7 19. exd6 Qf6 20. Nbd2 Nxd6…
125 Nc4 Nxc4 22. Bxc4 Nb6 23. Ne5 Rae8 24. Bxf7+ Rxf7 25. Nxf7 Rxe1+ 26. Qxe…
126 27. Qe3 Qg5 28. Qxg5 hxg5 29. b3 Ke6 30. a3 Kd6 31. axb4 cxb4 32. Ra5 Nd…
127 f3 Bc8 34. Kf2 Bf5 35. Ra7 g6 36. Ra6+ Kc5 37. Ke1 Nf4 38. g3 Nxh3 39. K…
128 40. Rd6 Kc5 41. Ra6 Nf2 42. g4 Bd3 43. Re6 1/2-1/2
129
130
131 3: Formats: import and export
132
133 There are two formats in the PGN specification. These are the "import" …
134 and the "export" format. These are the two different ways of formatting…
135 same PGN data according to its source. The details of the two formats a…
136 described throughout the following sections of this document.
137
138 Other than formats, there is the additional topic of PGN presentation. …
139 both PGN import and export formats are designed to be readable by humans…
140 is no recommendation that either of these be an ultimate mode of chess d…
141 presentation. Rather, software developers are urged to consider all of …
142 various techniques at their disposal to enhance the display of chess dat…
143 the presentation level (i.e., highest level) of their programs. This me…
144 that the use of different fonts, character sizes, color, and other tools…
145 computer aided interaction and publishing should be explored to provide …
146 quality presentation appropriate to the function of the particular progr…
147
148
149 3.1: Import format allows for manually prepared data
150
151 The import format is rather flexible and is used to describe data that m…
152 been prepared by hand, much like a source file for a high level programm…
153 language. A program that can read PGN data should be able to handle the
154 somewhat lax import format.
155
156
157 3.2: Export format used for program generated output
158
159 The export format is rather strict and is used to describe data that is …
160 prepared under program control, something like a pretty printed source p…
161 reformatted by a compiler.
162
163
164 3.2.1: Byte equivalence
165
166 For a given PGN data file, export format representations generated by di…
167 PGN programs on the same computing system should be exactly equivalent, …
168 for byte.
169
170
171 3.2.2: Archival storage and the newline character
172
173 Export format should also be used for archival storage. Here, "archival"
174 storage is defined as storage that may be accessed by a variety of compu…
175 systems. The only extra requirement for archival storage is that the ne…
176 character have a specific representation that is independent of its valu…
177 particular computing system's text file usage. The archival representat…
178 a newline is the ASCII control character LF (line feed, decimal value 10,
179 hexadecimal value 0x0a).
180
181 Sadly, there are some accidents of history that survive to this day that…
182 baroque representations for a newline: multicharacter sequences, end-of-…
183 record markers, start-of-line byte counts, fixed length records, and so …
184 It is well beyond the scope of the PGN project to reconcile all of these…
185 unified world of ANSI C and the those enjoying the bliss of a single '\n'
186 convention. Some systems may just not be able to handle an archival PGN…
187 file with native text editors. In these cases, an indulgence of sorts is
188 granted to use the local newline convention in non-archival PGN files fo…
189 text editors.
190
191
192 3.2.3: Speed of processing
193
194 Several parts of the export format deal with exact descriptions of line …
195 field justification that are absent from the import format details. The…
196 reason for these restrictions on the export format are to allow the
197 construction of simple data translation programs that can easily scan PG…
198 without having to have a full chess engine or other complex parsing rout…
199 The idea is to encourage chess software authors to always allow for at l…
200 limited PGN reading capability. Even when a full chess engine parsing
201 capability is available, it is likely to be at least two orders of magni…
202 slower than a simple text scanner.
203
204
205 3.2.4: Reduced export format
206
207 A PGN game represented using export format is said to be in "reduced exp…
208 format" if all of the following hold: 1) it has no commentary, 2) it has…
209 the standard seven tag roster identification information ("STR", see bel…
210 it has no recursive annotation variations ("RAV", see below), and 4) it …
211 numeric annotation glyphs ("NAG", see below). Reduced export format is …
212 for bulk storage of unannotated games. It represents a minimum level of
213 standard conformance for a PGN exporting application.
214
215
216 4: Lexicographical issues
217
218 PGN data is composed of characters; non-overlapping contiguous sequences…
219 characters form lexical tokens.
220
221
222 4.1: Character codes
223
224 PGN data is represented using a subset of the eight bit ISO 8859/1 (Lati…
225 character set. ("ISO" is an acronym for the International Standards
226 Organization.) This set is also known as ECMA-94 and is similar to othe…
227 Latin character sets. ISO 8859/1 includes the standard seven bit ASCII
228 character set for the 32 control character code values from zero to 31. …
229 printing character code values from 32 to 126 are also equivalent to sev…
230 ASCII usage. (Code value 127, the ASCII DEL control character, is a gra…
231 character in ISO 8859/1; it is not used for PGN data representation.)
232
233 The 32 ISO 8859/1 code values from 128 to 159 are non-printing control
234 characters. They are not used for PGN data representation. The 32 code…
235 from 160 to 191 are mostly non-alphabetic printing characters and their …
236 PGN data is discouraged as their graphic representation varies considera…
237 among other ISO Latin sets. Finally, the 64 code values from 192 to 255…
238 mostly alphabetic printing characters with various diacritical marks; th…
239 is encouraged for those languages that require such characters. The gra…
240 representations of this last set of 64 characters is fairly constant for…
241 ISO Latin family.
242
243 Printing character codes outside of the seven bit ASCII range may only a…
244 in string data and in commentary. They are not permitted for use in sym…
245 construction.
246
247 Because some PGN users' environments may not support presentation of non…
248 characters, PGN game authors should refrain from using such characters in
249 critical commentary or string values in game data that may be referenced…
250 such environments. PGN software authors should have their programs hand…
251 environments by displaying a question mark ("?") for non-ASCII character…
252 This is an important point because there are many computing systems that…
253 display eight bit character data, but the display graphics may differ am…
254 machines and operating systems from different manufacturers.
255
256 Only four of the ASCII control characters are permitted in PGN import fo…
257 these are the horizontal and vertical tabs along with the linefeed and c…
258 return codes.
259
260 The external representation of the newline character may differ among
261 platforms; this is an acceptable variation as long as the details of the
262 implementation are hidden from software implementors and users. When a …
263 is practical, the Unix "newline is linefeed" convention is preferred.
264
265
266 4.2: Tab characters
267
268 Tab characters, both horizontal and vertical, are not permitted in the e…
269 format. This is because the treatment of tab characters is highly depen…
270 upon the particular software in use on the host computing system. Also,…
271 characters may not appear inside of string data.
272
273
274 4.3: Line lengths
275
276 PGN data are organized as simple text lines without any special bytes or
277 markers for secondary record structure imposed by specific operating sys…
278 Import format PGN text lines are limited to having a maximum of 255 char…
279 per line including the newline character. Lines with 80 or more printing
280 characters are strongly discouraged because of the difficulties experien…
281 common text editors with long lines.
282
283 In some cases, very long tag values will require 80 or more columns, but…
284 are relatively rare. An example of this is the "FEN" tag pair; it may h…
285 long tag value, but this particular tag pair is only used to represent a…
286 that doesn't start from the usual initial position.
287
288
289 5: Commentary
290
291 Comment text may appear in PGN data. There are two kinds of comments. …
292 first kind is the "rest of line" comment; this comment type starts with a
293 semicolon character and continues to the end of the line. The second ki…
294 starts with a left brace character and continues to the next right brace
295 character. Comments cannot appear inside any token.
296
297 Brace comments do not nest; a left brace character appearing in a brace …
298 loses its special meaning and is ignored. A semicolon appearing inside …
299 brace comment loses its special meaning and is ignored. Braces appearing
300 inside of a semicolon comments lose their special meaning and are ignore…
301
302 *** Export format representation of comments needs definition work.
303
304
305 6: Escape mechanism
306
307 There is a special escape mechanism for PGN data. This mechanism is tri…
308 by a percent sign character ("%") appearing in the first column of a lin…
309 data on the rest of the line is ignored by publicly available PGN scanni…
310 software. This escape convention is intended for the private use of sof…
311 developers and researchers to embed non-PGN commands and data in PGN str…
312
313 A percent sign appearing in any other place other than the first positio…
314 line does not trigger the escape mechanism.
315
316
317 7: Tokens
318
319 PGN character data is organized as tokens. A token is a contiguous sequ…
320 characters that represents a basic semantic unit. Tokens may be separat…
321 adjacent tokens by white space characters. (White space characters incl…
322 space, newline, and tab characters.) Some tokens are self delimiting an…
323 not require white space characters.
324
325 A string token is a sequence of zero or more printing characters delimit…
326 pair of quote characters (ASCII decimal value 34, hexadecimal value 0x22…
327 empty string is represented by two adjacent quotes. (Note: an apostroph…
328 not a quote.) A quote inside a string is represented by the backslash
329 immediately followed by a quote. A backslash inside a string is represe…
330 two adjacent backslashes. Strings are commonly used as tag pair values …
331 below). Non-printing characters like newline and tab are not permitted …
332 of strings. A string token is terminated by its closing quote. Current…
333 string is limited to a maximum of 255 characters of data.
334
335 An integer token is a sequence of one or more decimal digit characters. …
336 a special case of the more general "symbol" token class described below.
337 Integer tokens are used to help represent move number indications (see b…
338 An integer token is terminated just prior to the first non-symbol charac…
339 following the integer digit sequence.
340
341 A period character (".") is a token by itself. It is used for move numb…
342 indications (see below). It is self terminating.
343
344 An asterisk character ("*") is a token by itself. It is used as one of …
345 possible game termination markers (see below); it indicates an incomplet…
346 or a game with an unknown or otherwise unavailable result. It is self
347 terminating.
348
349 The left and right bracket characters ("[" and "]") are tokens. They ar…
350 to delimit tag pairs (see below). Both are self terminating.
351
352 The left and right parenthesis characters ("(" and ")") are tokens. The…
353 used to delimit Recursive Annotation Variations (see below). Both are s…
354 terminating.
355
356 The left and right angle bracket characters ("<" and ">") are tokens. T…
357 reserved for future expansion. Both are self terminating.
358
359 A Numeric Annotation Glyph ("NAG", see below) is a token; it is composed…
360 dollar sign character ("$") immediately followed by one or more digit
361 characters. It is terminated just prior to the first non-digit character
362 following the digit sequence.
363
364 A symbol token starts with a letter or digit character and is immediately
365 followed by a sequence of zero or more symbol continuation characters. …
366 continuation characters are letter characters ("A-Za-z"), digit characte…
367 ("0-9"), the underscore ("_"), the plus sign ("+"), the octothorpe sign …
368 the equal sign ("="), the colon (":"), and the hyphen ("-"). Symbols a…
369 for a variety of purposes. All characters in a symbol are significant. …
370 symbol token is terminated just prior to the first non-symbol character
371 following the symbol character sequence. Currently, a symbol is limited…
372 maximum of 255 characters in length.
373
374
375 8: Parsing games
376
377 A PGN database file is a sequential collection of zero or more PGN games…
378 empty file is a valid, although somewhat uninformative, PGN database.
379
380 A PGN game is composed of two sections. The first is the tag pair secti…
381 the second is the movetext section. The tag pair section provides infor…
382 that identifies the game by defining the values associated with a set of
383 standard parameters. The movetext section gives the usually enumerated …
384 possibly annotated moves of the game along with the concluding game term…
385 marker. The chess moves themselves are represented using SAN (Standard
386 Algebraic Notation), also described later in this document.
387
388
389 8.1: Tag pair section
390
391 The tag pair section is composed of a series of zero or more tag pairs.
392
393 A tag pair is composed of four consecutive tokens: a left bracket token,…
394 symbol token, a string token, and a right bracket token. The symbol tok…
395 the tag name and the string token is the tag value associated with the t…
396 name. (There is a standard set of tag names and semantics described bel…
397 The same tag name should not appear more than once in a tag pair section.
398
399 A further restriction on tag names is that they are composed exclusively…
400 letters, digits, and the underscore character. This is done to facilita…
401 mapping of tag names into key and attribute names for use with general p…
402 database programs.
403
404 For PGN import format, there may be zero or more white space characters …
405 any adjacent pair of tokens in a tag pair.
406
407 For PGN export format, there are no white space characters between the l…
408 bracket and the tag name, there are no white space characters between th…
409 value and the right bracket, and there is a single space character betwe…
410 tag name and the tag value.
411
412 Tag names, like all symbols, are case sensitive. All tag names used for
413 archival storage begin with an upper case letter.
414
415 PGN import format may have multiple tag pairs on the same line and may e…
416 have a tag pair spanning more than a single line. Export format require…
417 tag pair to appear left justified on a line by itself; a single empty li…
418 follows the last tag pair.
419
420 Some tag values may be composed of a sequence of items. For example, a
421 consultation game may have more than one player for a given side. When …
422 occurs, the single character ":" (colon) appears between adjacent items.
423 Because of this use as an internal separator in strings, the colon shoul…
424 otherwise appear in a string.
425
426 The tag pair format is designed for expansion; initially only strings are
427 allowed as tag pair values. Tag value formats associated with the STR (…
428 Tag Roster, see below) will not change; they will always be string value…
429 However, there are long term plans to allow general list structures as t…
430 values for non-STR tag pairs. Use of these expanded tag values will lik…
431 restricted to special research programs. In all events, the top level
432 structure of a tag pair remains the same: left bracket, tag name, tag va…
433 and right bracket.
434
435
436 8.1.1: Seven Tag Roster
437
438 There is a set of tags defined for mandatory use for archival storage of…
439 data. This is the STR (Seven Tag Roster). The interpretation of these …
440 fixed as is the order in which they appear. Although the definition and…
441 additional tag names and semantics is permitted and encouraged when need…
442 STR is the common ground that all programs should follow for public data
443 interchange.
444
445 For import format, the order of tag pairs is not important. For export …
446 the STR tag pairs appear before any other tag pairs. (The STR tag pairs…
447 also appear in order; this order is described below). Also for export f…
448 any additional tag pairs appear in ASCII order by tag name.
449
450 The seven tag names of the STR are (in order):
451
452 1) Event (the name of the tournament or match event)
453
454 2) Site (the location of the event)
455
456 3) Date (the starting date of the game)
457
458 4) Round (the playing round ordinal of the game)
459
460 5) White (the player of the white pieces)
461
462 6) Black (the player of the black pieces)
463
464 7) Result (the result of the game)
465
466 A set of supplemental tag names is given later in this document.
467
468 For PGN export format, a single blank line appears after the last of the…
469 pairs to conclude the tag pair section. This helps simple scanning prog…
470 quickly determine the end of the tag pair section and the beginning of t…
471 movetext section.
472
473
474 8.1.1.1: The Event tag
475
476 The Event tag value should be reasonably descriptive. Abbreviations are…
477 avoided unless absolutely necessary. A consistent event naming should b…
478 to help facilitate database scanning. If the name of the event is unkno…
479 single question mark should appear as the tag value.
480
481 Examples:
482
483 [Event "FIDE World Championship"]
484
485 [Event "Moscow City Championship"]
486
487 [Event "ACM North American Computer Championship"]
488
489 [Event "Casual Game"]
490
491
492 8.1.1.2: The Site tag
493
494 The Site tag value should include city and region names along with a sta…
495 name for the country. The use of the IOC (International Olympic Committ…
496 three letter names is suggested for those countries where such codes are
497 available. If the site of the event is unknown, a single question mark …
498 appear as the tag value. A comma may be used to separate a city from a …
499 No comma is needed to separate a city or region from the IOC country cod…
500 later section of this document gives a list of three letter nation codes…
501 with a few additions for "locations" not covered by the IOC.
502
503 Examples:
504
505 [Site "New York City, NY USA"]
506
507 [Site "St. Petersburg RUS"]
508
509 [Site "Riga LAT"]
510
511
512 8.1.1.3: The Date tag
513
514 The Date tag value gives the starting date for the game. (Note: this is…
515 necessarily the same as the starting date for the event.) The date is g…
516 with respect to the local time of the site given in the Event tag. The …
517 tag value field always uses a standard ten character format: "YYYY.MM.DD…
518 first four characters are digits that give the year, the next character …
519 period, the next two characters are digits that give the month, the next
520 character is a period, and the final two characters are digits that give…
521 day of the month. If the any of the digit fields are not known, then qu…
522 marks are used in place of the digits.
523
524 Examples:
525
526 [Date "1992.08.31"]
527
528 [Date "1993.??.??"]
529
530 [Date "2001.01.01"]
531
532
533 8.1.1.4: The Round tag
534
535 The Round tag value gives the playing round for the game. In a match
536 competition, this value is the number of the game played. If the use of…
537 round number is inappropriate, then the field should be a single hyphen
538 character. If the round is unknown, a single question mark should appea…
539 the tag value.
540
541 Some organizers employ unusual round designations and have multipart pla…
542 rounds and sometimes even have conditional rounds. In these cases, a mu…
543 round identifier can be made from a sequence of integer round numbers se…
544 by periods. The leftmost integer represents the most significant round …
545 succeeding integers represent round numbers in descending hierarchical o…
546
547 Examples:
548
549 [Round "1"]
550
551 [Round "3.1"]
552
553 [Round "4.1.2"]
554
555
556 8.1.1.5: The White tag
557
558 The White tag value is the name of the player or players of the white pi…
559 The names are given as they would appear in a telephone directory. The …
560 or last name appears first. If a first name or first initial is availab…
561 is separated from the family name by a comma and a space. Finally, one …
562 middle initials may appear. (Wherever a comma appears, the very next ch…
563 should be a space. Wherever an initial appears, the very next character…
564 be a period.) If the name is unknown, a single question mark should app…
565 the tag value.
566
567 The intent is to allow meaningful ASCII sorting of the tag value that is
568 independent of regional name formation customs. If more than one person…
569 playing the white pieces, the names are listed in alphabetical order and…
570 separated by the colon character between adjacent entries. A player who…
571 also a computer program should have appropriate version information list…
572 after the name of the program.
573
574 The format used in the FIDE Rating Lists is appropriate for use for play…
575 tags.
576
577 Examples:
578
579 [White "Tal, Mikhail N."]
580
581 [White "van der Wiel, Johan"]
582
583 [White "Acme Pawngrabber v.3.2"]
584
585 [White "Fine, R."]
586
587
588 8.1.1.6: The Black tag
589
590 The Black tag value is the name of the player or players of the black pi…
591 The names are given here as they are for the White tag value.
592
593 Examples:
594
595 [Black "Lasker, Emmanuel"]
596
597 [Black "Smyslov, Vasily V."]
598
599 [Black "Smith, John Q.:Woodpusher 2000"]
600
601 [Black "Morphy"]
602
603
604 8.1.1.7: The Result tag
605
606 The Result field value is the result of the game. It is always exactly …
607 same as the game termination marker that concludes the associated movete…
608 is always one of four possible values: "1-0" (White wins), "0-1" (Black …
609 "1/2-1/2" (drawn game), and "*" (game still in progress, game abandoned,…
610 result otherwise unknown). Note that the digit zero is used in both of …
611 first two cases; not the letter "O".
612
613 All possible examples:
614
615 [Result "0-1"]
616
617 [Result "1-0"]
618
619 [Result "1/2-1/2"]
620
621 [Result "*"]
622
623
624 8.2: Movetext section
625
626 The movetext section is composed of chess moves, move number indications,
627 optional annotations, and a single concluding game termination marker.
628
629 Because illegal moves are not real chess moves, they are not permitted i…
630 movetext. They may appear in commentary, however. One would hope that …
631 moves are relatively rare in games worthy of recording.
632
633
634 8.2.1: Movetext line justification
635
636 In PGN import format, tokens in the movetext do not require any specific…
637 justification.
638
639 In PGN export format, tokens in the movetext are placed left justified on
640 successive text lines each of which has less than 80 printing characters…
641 many tokens as possible are placed on a line with the remainder appearin…
642 successive lines. A single space character appears between any two adja…
643 symbol tokens on the same line in the movetext. As with the tag pair se…
644 a single empty line follows the last line of data to conclude the movete…
645 section.
646
647 Neither the first or the last character on an export format PGN line is a
648 space. (This may change in the case of commentary; this area is current…
649 under development.)
650
651
652 8.2.2: Movetext move number indications
653
654 A move number indication is composed of one or more adjacent digits (an …
655 token) followed by zero or more periods. The integer portion of the ind…
656 gives the move number of the immediately following white move (if presen…
657 also the immediately following black move (if present).
658
659
660 8.2.2.1: Import format move number indications
661
662 PGN import format does not require move number indications. It does not
663 prohibit superfluous move number indications anywhere in the movetext as…
664 as the move numbers are correct.
665
666 PGN import format move number indications may have zero or more period
667 characters following the digit sequence that gives the move number; one …
668 white space characters may appear between the digit sequence and the per…
669
670
671 8.2.2.2: Export format move number indications
672
673 There are two export format move number indication formats, one for use
674 appearing immediately before a white move element and one for use appear…
675 immediately before a black move element. A white move number indication…
676 formed from the integer giving the fullmove number with a single period
677 character appended. A black move number indication is formed from the i…
678 giving the fullmove number with three period characters appended.
679
680 All white move elements have a preceding move number indication. A blac…
681 element has a preceding move number indication only in two cases: first,…
682 there is intervening annotation or commentary between the black move and…
683 previous white move; and second, if there is no previous white move in t…
684 special case where a game starts from a position where Black is the acti…
685 player.
686
687 There are no other cases where move number indications appear in PGN exp…
688 format.
689
690
691 8.2.3: Movetext SAN (Standard Algebraic Notation)
692
693 SAN (Standard Algebraic Notation) is a representation standard for chess…
694 using the ASCII Latin alphabet.
695
696 Examples of SAN recorded games are found throughout most modern chess
697 publications. SAN as presented in this document uses English language s…
698 character abbreviations for chess pieces, although this is easily change…
699 the source. English is chosen over other languages because it appears t…
700 the most widely recognized.
701
702 An alternative to SAN is FAN (Figurine Algebraic Notation). FAN uses mi…
703 piece icons instead of single letter piece abbreviations. The two notat…
704 are otherwise identical.
705
706
707 8.2.3.1: Square identification
708
709 SAN identifies each of the sixty four squares on the chessboard with a u…
710 two character name. The first character of a square identifier is the f…
711 the square; a file is a column of eight squares designated by a single l…
712 case letter from "a" (leftmost or queenside) up to and including "h" (ri…
713 or kingside). The second character of a square identifier is the rank o…
714 square; a rank is a row of eight squares designated by a single digit fr…
715 (bottom side [White's first rank]) up to and including "8" (top side [Bl…
716 first rank]). The initial squares of some pieces are: white queen rook …
717 white king at e1, black queen knight pawn at b7, and black king rook at …
718
719
720 8.2.3.2: Piece identification
721
722 SAN identifies each piece by a single upper case letter. The standard E…
723 values: pawn = "P", knight = "N", bishop = "B", rook = "R", queen = "Q",…
724 king = "K".
725
726 The letter code for a pawn is not used for SAN moves in PGN export format
727 movetext. However, some PGN import software disambiguation code may all…
728 the appearance of pawn letter codes. Also, pawn and other piece letter …
729 are needed for use in some tag pair and annotation constructs.
730
731 It is admittedly a bit chauvinistic to select English piece letters over…
732 from other languages. There is a slight justification in that English i…
733 facto universal second language among most chessplayers and program user…
734 is probably the best that can be done for now. A later section of this
735 document gives alternative piece letters, but these should be used only …
736 local presentation software and not for archival storage or for dynamic
737 interchange among programs.
738
739
740 8.2.3.3: Basic SAN move construction
741
742 A basic SAN move is given by listing the moving piece letter (omitted for
743 pawns) followed by the destination square. Capture moves are denoted by…
744 lower case letter "x" immediately prior to the destination square; pawn
745 captures include the file letter of the originating square of the captur…
746 pawn immediately prior to the "x" character.
747
748 SAN kingside castling is indicated by the sequence "O-O"; queenside cast…
749 indicated by the sequence "O-O-O". Note that the upper case letter "O" …
750 used, not the digit zero. The use of a zero character is not only incom…
751 with traditional text practices, but it can also confuse parsing algorit…
752 which also have to understand about move numbers and game termination ma…
753 Also note that the use of the letter "O" is consistent with the practice…
754 having all chess move symbols start with a letter; also, it follows the
755 convention that all non-pwn move symbols start with an upper case letter.
756
757 En passant captures do not have any special notation; they are formed as…
758 captured pawn were on the capturing pawn's destination square. Pawn pro…
759 are denoted by the equal sign "=" immediately following the destination …
760 with a promoted piece letter (indicating one of knight, bishop, rook, or…
761 immediately following the equal sign. As above, the piece letter is in …
762 case.
763
764
765 8.2.3.4: Disambiguation
766
767 In the case of ambiguities (multiple pieces of the same type moving to t…
768 square), the first appropriate disambiguating step of the three followin…
769 is taken:
770
771 First, if the moving pieces can be distinguished by their originating fi…
772 the originating file letter of the moving piece is inserted immediately …
773 the moving piece letter.
774
775 Second (when the first step fails), if the moving pieces can be distingu…
776 by their originating ranks, the originating rank digit of the moving pie…
777 inserted immediately after the moving piece letter.
778
779 Third (when both the first and the second steps fail), the two character…
780 coordinate of the originating square of the moving piece is inserted
781 immediately after the moving piece letter.
782
783 Note that the above disambiguation is needed only to distinguish among m…
784 the same piece type to the same square; it is not used to distinguish am…
785 attacks of the same piece type to the same square. An example of this w…
786 a position with two white knights, one on square c3 and one on square g1…
787 vacant square e2 with White to move. Both knights attack square e2, and…
788 both could legally move there, then a file disambiguation is needed; the
789 (nonchecking) knight moves would be "Nce2" and "Nge2". However, if the …
790 king were at square e1 and a black bishop were at square b4 with a vacant
791 square d2 (thus an absolute pin of the white knight at square c3), then …
792 one white knight (the one at square g1) could move to square e2: "Ne2".
793
794
795 8.2.3.5: Check and checkmate indication characters
796
797 If the move is a checking move, the plus sign "+" is appended as a suffi…
798 the basic SAN move notation; if the move is a checkmating move, the octo…
799 sign "#" is appended instead.
800
801 Neither the appearance nor the absence of either a check or checkmating
802 indicator is used for disambiguation purposes. This means that if two (…
803 more) pieces of the same type can move to the same square the difference…
804 checking status of the moves does not allieviate the need for the standa…
805 and file disabiguation described above. (Note that a difference in chec…
806 status for the above may occur only in the case of a discovered check.)
807
808 Neither the checking or checkmating indicators are considered annotation…
809 they do not communicate subjective information. Therefore, they are
810 qualitatively different from move suffix annotations like "!" and "?".
811 Subjective move annotations are handled using Numeric Annotation Glyphs …
812 described in a later section of this document.
813
814 There are no special markings used for double checks or discovered check…
815
816 There are no special markings used for drawing moves.
817
818
819 8.2.3.6: SAN move length
820
821 SAN moves can be as short as two characters (e.g., "d4"), or as long as …
822 characters (e.g., "Qa6xb7#", "fxg1=Q+"). The average SAN move length se…
823 realistic games is probably just fractionally longer than three characte…
824 the SAN rules seem complicated, be assured that the earlier notation sys…
825 LEN (Long English Notation) and EDN (English Descriptive Notation) are m…
826 more complex, and that LAN (Long Algebraic Notation, the predecessor of …
827 unnecessarily bulky.
828
829
830 8.2.3.7: Import and export SAN
831
832 PGN export format always uses the above canonical SAN to represent moves…
833 movetext section of a PGN game. Import format is somewhat more relaxed …
834 makes allowances for moves that do not conform exactly to the canonical …
835 However, these allowances may differ among different PGN reader programs…
836 data appearing in export format is in all cases guaranteed to be importa…
837 into all PGN readers.
838
839 There are a number of suggested guidelines for use with implementing PGN…
840 software for permitting non-canonical SAN move representation. The idea…
841 have a PGN reader apply various transformations to attempt to discover t…
842 that is represented by non-canonical input. Some suggested transformati…
843 include: letter case remapping, capture indicator insertion, check indic…
844 insertion, and checkmate indicator insertion.
845
846
847 8.2.3.8: SAN move suffix annotations
848
849 Import format PGN allows for the use of traditional suffix annotations f…
850 moves. There are exactly six such annotations available: "!", "?", "!!"…
851 "?!", and "??". At most one such suffix annotation may appear per move,…
852 present, it is always the last part of the move symbol.
853
854 When exported, a move suffix annotation is translated into the correspon…
855 Numeric Annotation Glyph as described in a later section of this documen…
856 example, if the single move symbol "Qxa8?" appears in an import format P…
857 movetext, it would be replaced with the two adjacent symbols "Qxa8 $2".
858
859
860 8.2.4: Movetext NAG (Numeric Annotation Glyph)
861
862 An NAG (Numeric Annotation Glyph) is a movetext element that is used to
863 indicate a simple annotation in a language independent manner. An NAG is
864 formed from a dollar sign ("$") with a non-negative decimal integer suff…
865 The non-negative integer must be from zero to 255 in value.
866
867
868 8.2.5: Movetext RAV (Recursive Annotation Variation)
869
870 An RAV (Recursive Annotation Variation) is a sequence of movetext contai…
871 one or more moves enclosed in parentheses. An RAV is used to represent …
872 alternative variation. The alternate move sequence given by an RAV is o…
873 may be legally played by first unplaying the move that appears immediate…
874 prior to the RAV. Because the RAV is a recursive construct, it may be n…
875
876 *** The specification for import/export representation of RAV elements n…
877 further development.
878
879
880 8.2.6: Game Termination Markers
881
882 Each movetext section has exactly one game termination marker; the marker
883 always occurs as the last element in the movetext. The game termination…
884 is a symbol that is one of the following four values: "1-0" (White wins)…
885 (Black wins), "1/2-1/2" (drawn game), and "*" (game in progress, result
886 unknown, or game abandoned). Note that the digit zero is used in the ab…
887 not the upper case letter "O". The game termination marker appearing in…
888 movetext of a game must match the value of the game's Result tag pair. …
889 the marker appears as a string in the Result tag, it appears as a symbol
890 without quotes in the movetext.)
891
892
893 9: Supplemental tag names
894
895 The following tag names and their associated semantics are recommended f…
896 for information not contained in the Seven Tag Roster.
897
898
899 9.1: Player related information
900
901 Note that if there is more than one player field in an instance of a pla…
902 (White or Black) tag, then there will be corresponding multiple fields i…
903 of the following tags. For example, if the White tag has the three fiel…
904 "Jones:Smith:Zacharias" (a consultation game), then the WhiteTitle tag c…
905 have a value of "IM:-:GM" if Jones was an International Master, Smith was
906 untitled, and Zacharias was a Grandmaster.
907
908
909 9.1.1: Tags: WhiteTitle, BlackTitle
910
911 These use string values such as "FM", "IM", and "GM"; these tags are use…
912 for the standard abbreviations for FIDE titles. A value of "-" is used …
913 untitled player.
914
915
916 9.1.2: Tags: WhiteElo, BlackElo
917
918 These tags use integer values; these are used for FIDE Elo ratings. A v…
919 "-" is used for an unrated player.
920
921
922 9.1.3: Tags: WhiteUSCF, BlackUSCF
923
924 These tags use integer values; these are used for USCF (United States Ch…
925 Federation) ratings. Similar tag names can be constructed for other rat…
926 agencies.
927
928
929 9.1.4: Tags: WhiteNA, BlackNA
930
931 These tags use string values; these are the e-mail or network addresses …
932 players. A value of "-" is used for a player without an electronic addr…
933
934
935 9.1.5: Tags: WhiteType, BlackType
936
937 These tags use string values; these describe the player types. The value
938 "human" should be used for a person while the value "program" should be …
939 for algorithmic (computer) players.
940
941
942 9.2: Event related information
943
944 The following tags are used for providing additional information about t…
945 event.
946
947
948 9.2.1: Tag: EventDate
949
950 This uses a date value, similar to the Date tag field, that gives the st…
951 date of the Event.
952
953
954 9.2.2: Tag: EventSponsor
955
956 This uses a string value giving the name of the sponsor of the event.
957
958
959 9.2.3: Tag: Section
960
961 This uses a string; this is used for the playing section of a tournament…
962 "Open" or "Reserve").
963
964
965 9.2.4: Tag: Stage
966
967 This uses a string; this is used for the stage of a multistage event (e.…
968 "Preliminary" or "Semifinal").
969
970
971 9.2.5: Tag: Board
972
973 This uses an integer; this identifies the board number in a team event a…
974 in a simultaneous exhibition.
975
976
977 9.3: Opening information (locale specific)
978
979 The following tag pairs are used for traditional opening names. The ass…
980 tag values will vary according to the local language in use.
981
982
983 9.3.1: Tag: Opening
984
985 This uses a string; this is used for the traditional opening name. This…
986 vary by locale. This tag pair is associated with the use of the EPD opc…
987 "v0" described in a later section of this document.
988
989
990 9.3.2: Tag: Variation
991
992 This uses a string; this is used to further refine the Opening tag. Thi…
993 vary by locale. This tag pair is associated with the use of the EPD opc…
994 "v1" described in a later section of this document.
995
996
997 9.3.3: Tag: SubVariation
998
999 This uses a string; this is used to further refine the Variation tag. T…
1000 will vary by locale. This tag pair is associated with the use of the EPD
1001 opcode "v2" described in a later section of this document.
1002
1003
1004 9.4: Opening information (third party vendors)
1005
1006 The following tag pairs are used for representing opening identification
1007 according to various third party vendors and organizations. References …
1008 these organizations does not imply any endorsement of them or any endors…
1009 by them.
1010
1011
1012 9.4.1: Tag: ECO
1013
1014 This uses a string of either the form "XDD" or the form "XDD/DD" where t…
1015 is a letter from "A" to "E" and the "D" positions are digits; this is us…
1016 an opening designation from the five volume _Encyclopedia of Chess Openi…
1017 This tag pair is associated with the use of the EPD opcode "eco" describ…
1018 later section of this document.
1019
1020
1021 9.4.2: Tag: NIC
1022
1023 This uses a string; this is used for an opening designation from the _Ne…
1024 Chess_ database. This tag pair is associated with the use of the EPD op…
1025 "nic" described in a later section of this document.
1026
1027
1028 9.5: Time and date related information
1029
1030 The following tags assist with further refinement of the time and data
1031 information associated with a game.
1032
1033
1034 9.5.1: Tag: Time
1035
1036 This uses a time-of-day value in the form "HH:MM:SS"; similar to the Dat…
1037 except that it denotes the local clock time (hours, minutes, and seconds…
1038 the start of the game. Note that colons, not periods, are used for field
1039 separators for the Time tag value. The value is taken from the local ti…
1040 corresponding to the location given in the Site tag pair.
1041
1042
1043 9.5.2: Tag: UTCTime
1044
1045 This tag is similar to the Time tag except that the time is given accord…
1046 the Universal Coordinated Time standard.
1047
1048
1049 9.5.3: Tag:; UTCDate
1050
1051 This tag is similar to the Date tag except that the date is given accord…
1052 the Universal Coordinated Time standard.
1053
1054
1055 9.6: Time control
1056
1057 The follwing tag is used to help describe the time control used with the…
1058
1059
1060 9.6.1: Tag: TimeControl
1061
1062 This uses a list of one or more time control fields. Each field contain…
1063 descriptor for each time control period; if more than one descriptor is …
1064 then they are separated by the colon character (":"). The descriptors a…
1065 in the order in which they are used in the game. The last field appeari…
1066 considered to be implicitly repeated for further control periods as need…
1067
1068 There are six kinds of TimeControl fields.
1069
1070 The first kind is a single question mark ("?") which means that the time
1071 control mode is unknown. When used, it is usually the only descriptor p…
1072
1073 The second kind is a single hyphen ("-") which means that there was no t…
1074 control mode in use. When used, it is usually the only descriptor prese…
1075
1076 The third Time control field kind is formed as two positive integers sep…
1077 by a solidus ("/") character. The first integer is the number of moves …
1078 period and the second is the number of seconds in the period. Thus, a t…
1079 control period of 40 moves in 2 1/2 hours would be represented as "40/90…
1080
1081 The fourth TimeControl field kind is used for a "sudden death" control p…
1082 It should only be used for the last descriptor in a TimeControl tag valu…
1083 is sometimes the only descriptor present. The format consists of a sing…
1084 integer that gives the number of seconds in the period. Thus, a blitz g…
1085 would be represented with a TimeControl tag value of "300".
1086
1087 The fifth TimeControl field kind is used for an "incremental" control pe…
1088 It should only be used for the last descriptor in a TimeControl tag valu…
1089 is usually the only descriptor in the value. The format consists of two
1090 positive integers separated by a plus sign ("+") character. The first i…
1091 gives the minimum number of seconds allocated for the period and the sec…
1092 integer gives the number of extra seconds added after each move is made.…
1093 an incremental time control of 90 minutes plus one extra minute per move…
1094 be given by "4500+60" in the TimeControl tag value.
1095
1096 The sixth TimeControl field kind is used for a "sandclock" or "hourglass"
1097 control period. It should only be used for the last descriptor in a
1098 TimeControl tag value and is usually the only descriptor in the value. …
1099 format consists of an asterisk ("*") immediately followed by a positive
1100 integer. The integer gives the total number of seconds in the sandclock
1101 period. The time control is implemented as if a sandclock were set at t…
1102 start of the period with an equal amount of sand in each of the two cham…
1103 and the players invert the sandclock after each move with a time forfeit
1104 indicated by an empty upper chamber. Electronic implementation of a phy…
1105 sandclock may be used. An example sandclock specification for a common …
1106 minute egg timer sandclock would have a tag value of "*180".
1107
1108 Additional TimeControl field kinds will be defined as necessary.
1109
1110
1111 9.7: Alternative starting positions
1112
1113 There are two tags defined for assistance with describing games that did…
1114 start from the usual initial array.
1115
1116
1117 9.7.1: Tag: SetUp
1118
1119 This tag takes an integer that denotes the "set-up" status of the game. …
1120 value of "0" indicates that the game has started from the usual initial …
1121 A value of "1" indicates that the game started from a set-up position; t…
1122 position is given in the "FEN" tag pair. This tag must appear for a game
1123 starting with a set-up position. If it appears with a tag value of "1",…
1124 tag pair must also appear.
1125
1126
1127 9.7.2: Tag: FEN
1128
1129 This tag uses a string that gives the Forsyth-Edwards Notation for the s…
1130 position used in the game. FEN is described in a later section of this
1131 document. If a SetUp tag appears with a tag value of "1", the FEN tag p…
1132 also required.
1133
1134
1135 9.8: Game conclusion
1136
1137 There is a single tag that discusses the conclusion of the game.
1138
1139
1140 9.8.1: Tag: Termination
1141
1142 This takes a string that describes the reason for the conclusion of the …
1143 While the Result tag gives the result of the game, it does not provide a…
1144 extra information and so the Termination tag is defined for this purpose.
1145
1146 Strings that may appear as Termination tag values:
1147
1148 * "abandoned": abandoned game.
1149
1150 * "adjudication": result due to third party adjudication process.
1151
1152 * "death": losing player called to greater things, one hopes.
1153
1154 * "emergency": game concluded due to unforeseen circumstances.
1155
1156 * "normal": game terminated in a normal fashion.
1157
1158 * "rules infraction": administrative forfeit due to losing player's fail…
1159 observe either the Laws of Chess or the event regulations.
1160
1161 * "time forfeit": loss due to losing player's failure to meet time contr…
1162 requirements.
1163
1164 * "unterminated": game not terminated.
1165
1166
1167 9.9: Miscellaneous
1168
1169 These are tags that can be briefly described and that doon't fit well in…
1170 sections.
1171
1172
1173 9.9.1: Tag: Annotator
1174
1175 This tag uses a name or names in the format of the player name tags; this
1176 identifies the annotator or annotators of the game.
1177
1178
1179 9.9.2: Tag: Mode
1180
1181 This uses a string that gives the playing mode of the game. Examples: "…
1182 (over the board), "PM" (paper mail), "EM" (electronic mail), "ICS" (Inte…
1183 Chess Server), and "TC" (general telecommunication).
1184
1185
1186 9.9.3: Tag: PlyCount
1187
1188 This tag takes a single integer that gives the number of ply (moves) in …
1189 game.
1190
1191
1192 10: Numeric Annotation Glyphs
1193
1194 NAG zero is used for a null annotation; it is provided for the convenien…
1195 software designers as a placeholder value and should probably not be use…
1196 external PGN data.
1197
1198 NAGs with values from 1 to 9 annotate the move just played.
1199
1200 NAGs with values from 10 to 135 modify the current position.
1201
1202 NAGs with values from 136 to 139 describe time pressure.
1203
1204 Other NAG values are reserved for future definition.
1205
1206 Note: the number assignments listed below should be considered prelimina…
1207 nature; they are likely to be changed as a result of reviewer feedback.
1208
1209 NAG Interpretation
1210 --- --------------
1211 0 null annotation
1212 1 good move (traditional "!")
1213 2 poor move (traditional "?")
1214 3 very good move (traditional "!!")
1215 4 very poor move (traditional "??")
1216 5 speculative move (traditional "!?")
1217 6 questionable move (traditional "?!")
1218 7 forced move (all others lose quickly)
1219 8 singular move (no reasonable alternatives)
1220 9 worst move
1221 10 drawish position
1222 11 equal chances, quiet position
1223 12 equal chances, active position
1224 13 unclear position
1225 14 White has a slight advantage
1226 15 Black has a slight advantage
1227 16 White has a moderate advantage
1228 17 Black has a moderate advantage
1229 18 White has a decisive advantage
1230 19 Black has a decisive advantage
1231 20 White has a crushing advantage (Black should resign)
1232 21 Black has a crushing advantage (White should resign)
1233 22 White is in zugzwang
1234 23 Black is in zugzwang
1235 24 White has a slight space advantage
1236 25 Black has a slight space advantage
1237 26 White has a moderate space advantage
1238 27 Black has a moderate space advantage
1239 28 White has a decisive space advantage
1240 29 Black has a decisive space advantage
1241 30 White has a slight time (development) advantage
1242 31 Black has a slight time (development) advantage
1243 32 White has a moderate time (development) advantage
1244 33 Black has a moderate time (development) advantage
1245 34 White has a decisive time (development) advantage
1246 35 Black has a decisive time (development) advantage
1247 36 White has the initiative
1248 37 Black has the initiative
1249 38 White has a lasting initiative
1250 39 Black has a lasting initiative
1251 40 White has the attack
1252 41 Black has the attack
1253 42 White has insufficient compensation for material deficit
1254 43 Black has insufficient compensation for material deficit
1255 44 White has sufficient compensation for material deficit
1256 45 Black has sufficient compensation for material deficit
1257 46 White has more than adequate compensation for material deficit
1258 47 Black has more than adequate compensation for material deficit
1259 48 White has a slight center control advantage
1260 49 Black has a slight center control advantage
1261 50 White has a moderate center control advantage
1262 51 Black has a moderate center control advantage
1263 52 White has a decisive center control advantage
1264 53 Black has a decisive center control advantage
1265 54 White has a slight kingside control advantage
1266 55 Black has a slight kingside control advantage
1267 56 White has a moderate kingside control advantage
1268 57 Black has a moderate kingside control advantage
1269 58 White has a decisive kingside control advantage
1270 59 Black has a decisive kingside control advantage
1271 60 White has a slight queenside control advantage
1272 61 Black has a slight queenside control advantage
1273 62 White has a moderate queenside control advantage
1274 63 Black has a moderate queenside control advantage
1275 64 White has a decisive queenside control advantage
1276 65 Black has a decisive queenside control advantage
1277 66 White has a vulnerable first rank
1278 67 Black has a vulnerable first rank
1279 68 White has a well protected first rank
1280 69 Black has a well protected first rank
1281 70 White has a poorly protected king
1282 71 Black has a poorly protected king
1283 72 White has a well protected king
1284 73 Black has a well protected king
1285 74 White has a poorly placed king
1286 75 Black has a poorly placed king
1287 76 White has a well placed king
1288 77 Black has a well placed king
1289 78 White has a very weak pawn structure
1290 79 Black has a very weak pawn structure
1291 80 White has a moderately weak pawn structure
1292 81 Black has a moderately weak pawn structure
1293 82 White has a moderately strong pawn structure
1294 83 Black has a moderately strong pawn structure
1295 84 White has a very strong pawn structure
1296 85 Black has a very strong pawn structure
1297 86 White has poor knight placement
1298 87 Black has poor knight placement
1299 88 White has good knight placement
1300 89 Black has good knight placement
1301 90 White has poor bishop placement
1302 91 Black has poor bishop placement
1303 92 White has good bishop placement
1304 93 Black has good bishop placement
1305 84 White has poor rook placement
1306 85 Black has poor rook placement
1307 86 White has good rook placement
1308 87 Black has good rook placement
1309 98 White has poor queen placement
1310 99 Black has poor queen placement
1311 100 White has good queen placement
1312 101 Black has good queen placement
1313 102 White has poor piece coordination
1314 103 Black has poor piece coordination
1315 104 White has good piece coordination
1316 105 Black has good piece coordination
1317 106 White has played the opening very poorly
1318 107 Black has played the opening very poorly
1319 108 White has played the opening poorly
1320 109 Black has played the opening poorly
1321 110 White has played the opening well
1322 111 Black has played the opening well
1323 112 White has played the opening very well
1324 113 Black has played the opening very well
1325 114 White has played the middlegame very poorly
1326 115 Black has played the middlegame very poorly
1327 116 White has played the middlegame poorly
1328 117 Black has played the middlegame poorly
1329 118 White has played the middlegame well
1330 119 Black has played the middlegame well
1331 120 White has played the middlegame very well
1332 121 Black has played the middlegame very well
1333 122 White has played the ending very poorly
1334 123 Black has played the ending very poorly
1335 124 White has played the ending poorly
1336 125 Black has played the ending poorly
1337 126 White has played the ending well
1338 127 Black has played the ending well
1339 128 White has played the ending very well
1340 129 Black has played the ending very well
1341 130 White has slight counterplay
1342 131 Black has slight counterplay
1343 132 White has moderate counterplay
1344 133 Black has moderate counterplay
1345 134 White has decisive counterplay
1346 135 Black has decisive counterplay
1347 136 White has moderate time control pressure
1348 137 Black has moderate time control pressure
1349 138 White has severe time control pressure
1350 139 Black has severe time control pressure
1351
1352
1353 11: File names and directories
1354
1355 File names chosen for PGN data should be both informative and portable. …
1356 directory names and arrangements should also be chosen for the same reas…
1357 also for ease of navigation.
1358
1359 Some of suggested file and directory names may be difficult or impossibl…
1360 represent on certain computing systems. Use of appropriate conversion c…
1361 is encouraged.
1362
1363
1364 11.1: File name suffix for PGN data
1365
1366 The use of the file suffix ".pgn" is encouraged for ASCII text files con…
1367 PGN data.
1368
1369
1370 11.2: File name formation for PGN data for a specific player
1371
1372 PGN games for a specific player should have a file name consisting of the
1373 player's last name followed by the ".pgn" suffix.
1374
1375
1376 11.3: File name formation for PGN data for a specific event
1377
1378 PGN games for a specific event should have a file name consisting of the
1379 event's name followed by the ".pgn" suffix.
1380
1381
1382 11.4: File name formation for PGN data for chronologically ordered games
1383
1384 PGN data files used for chronologically ordered (oldest first) archives …
1385 date information as file name root strings. A file containing all the P…
1386 games for a given year would have an eight character name in the format
1387 "YYYY.pgn". A file containing PGN data for a given month would have a t…
1388 character name in the format "YYYYMM.pgn". Finally, a file for PGN game…
1389 single day would have a twelve character name in the format "YYYYMMDD.pg…
1390 Large files are split into smaller files as needed.
1391
1392 As game files are commonly arranged by chronological order, games with m…
1393 or incomplete Date tag pair data are to be avoided. Any question mark
1394 characters in a Date tag value will be treated as zero digits for collat…
1395 within a file and also for file naming.
1396
1397 Large quantities of PGN data arranged by chronological order should be
1398 organized into hierarchical directories. A directory containing all PGN…
1399 for a given year would have a four character name in the format "YYYY";
1400 directories containing PGN files for a given month would have a six char…
1401 name in the format "YYYYMM".
1402
1403
1404 11.5: Suggested directory tree organization
1405
1406 A suggested directory arrangement for ftp sites and CD-ROM distributions:
1407
1408 * PGN: master directory of the PGN subtree (pub/chess/Game-Databases/PGN)
1409
1410 * PGN/Events: directory of PGN files, each for a specific event
1411
1412 * PGN/Events/News: news and status of the event collection
1413
1414 * PGN/Events/ReadMe: brief description of the local directory contents
1415
1416 * PGN/MGR: directory of the Master Games Repository subtree
1417
1418 * PGN/MGR/News: news and status of the entire PGN/MGR subtree
1419
1420 * PGN/MGR/ReadMe: brief description of the local directory contents
1421
1422 * PGN/MGR/YYYY: directory of games or subtrees for the year YYYY
1423
1424 * PGN/MGR/YYYY/ReadMe: description of local directory for year YYYY
1425
1426 * PGN/MGR/YYYY/News: news and status for year YYYY data
1427
1428 * PGN/News: news and status of the entire PGN subtree
1429
1430 * PGN/Players: directory of PGN files, each for a specific player
1431
1432 * PGN/Players/News: news and status of the player collection
1433
1434 * PGN/Players/ReadMe: brief description of the local directory contents
1435
1436 * PGN/ReadMe: brief description of the local directory contents
1437
1438 * PGN/Standard: the PGN standard (this document)
1439
1440 * PGN/Tools: software utilities that access PGN data
1441
1442
1443 12: PGN collating sequence
1444
1445 There is a standard sorting order for PGN games within a file. This col…
1446 is based on eight keys; these are the seven tag values of the STR and al…
1447 movetext itself.
1448
1449 The first (most important, primary key) is the Date tag. Earlier dated …
1450 appear prior to games played at a later date. This field is sorted by
1451 ascending numeric value first with the year, then the month, and finally…
1452 day of the month. Query characters used for unknown date digit values w…
1453 treated as zero digit characters for ordering comparison.
1454
1455 The second key is the Event tag. This is sorted in ascending ASCII orde…
1456
1457 The third key is the Site tag. This is sorted in ascending ASCII order.
1458
1459 The fourth key is the Round tag. This is sorted in ascending numeric or…
1460 based on the value of the integer used to denote the playing round. A q…
1461 hyphen used for the round is ordered before any integer value. A query
1462 character is ordered before a hyphen character.
1463
1464 The fifth key is the White tag. This is sorted in ascending ASCII order.
1465
1466 The sixth key is the Black tag. This is sorted in ascending ASCII order.
1467
1468 The seventh key is the Result tag. This is sorted in ascending ASCII or…
1469
1470 The eighth key is the movetext itself. This is sorted in ascending ASCI…
1471 with the entire text including spaces and newline characters.
1472
1473
1474 13: PGN software
1475
1476 This section describes some PGN software that is either currently availa…
1477 expected to be available in the near future. The entries are presented …
1478 rough chronological order of their being made known to the PGN standard
1479 coordinator. Authors of PGN capable software are encouraged to contact …
1480 coordinator (e-mail address listed near the start of this document) so t…
1481 information may be included here in this section.
1482
1483 In addition to the PGN standard, there are two more chess standards of i…
1484 to the chess software community. These are the FEN standard (Forsyth-Ed…
1485 Notation) for position notation and the EPD standard (Extended Position
1486 Description) for comprehensive position description for automated interp…
1487 processing. These are described in a later section of this document.
1488
1489 Some PGN software is freeware and can be gotten from ftp sites and other
1490 sources. Other PGN software is payware and appears as part of commercial
1491 chessplaying programs and chess database managers. Those who are intere…
1492 the propagation of the PGN standard are encouraged to support manufactur…
1493 chess software that use the standard. If a particular vendor does not o…
1494 PGN compatibility, it is likely that a few letters to them along with a …
1495 this specification may help them decide to include PGN support in their …
1496 release.
1497
1498 The staff at the University of Oklahoma at Norman (USA) have graciously
1499 provided an ftp site (chess.uoknor.edu) for the storage of chess related…
1500 and programs. Because file names change over time, those accessing the …
1501 are encouraged to first retrieve the file "pub/chess/ls-lR.gz" for a cur…
1502 listing. A scan of this listing will also help locate versions of PGN p…
1503 for machine types and operating systems other than those listed below. …
1504 information about this archive can be gotten from its administrator, Chr…
1505 Petroff ([email protected]).
1506
1507 For European users, the kind staff at the University of Hamburg (Germany…
1508 provided the ftp site ftp.math.uni-hamburg.de; this carries a daily mirr…
1509 the pub/chess directory at the chess.uoknor.edu site.
1510
1511
1512 13.1: The SAN Kit
1513
1514 The "SAN Kit" is an ANSI C source chess programming toolkit available fo…
1515 from the ftp site chess.uoknor.edu in the directory pub/chess/Unix as th…
1516 "SAN.tar.gz" (a gzip tar archive). This kit contains code for PGN impor…
1517 export and can be used to "regularize" PGN data into reduced export form…
1518 use of its "tfgg" command. The SAN Kit also supports FEN I/O. Code fro…
1519 kit is freely redistributable for anyone as long as future distribution …
1520 unhindered for everyone. The SAN Kit is undergoing continuous developme…
1521 although dates of future deliveries are quite difficult to predict and r…
1522 sometimes appear months apart. Suggestions and comments should be direc…
1523 its author, Steven J. Edwards ([email protected]).
1524
1525
1526 13.2: pgnRead
1527
1528 The program "pgnRead" runs under MS Windows 3.1 and provides an interact…
1529 graphical user interface for scanning PGN data files. This program incl…
1530 colorful figurine chessboard display and scrolling controls for game and…
1531 text selection. It is available from the chess.uoknor.edu ftp site in t…
1532 pub/chess/DOS directory; several versions are available with names of th…
1533 "pgnrd**.exe"; the latest at this writing is "PGNRD130.EXE". Suggestion…
1534 comments should be directed to its author, Keith Fuller ([email protected]…
1535
1536
1537 13.3: mail2pgn/GIICS
1538
1539 The program "mail2pgn" produces a PGN version of chess game data generat…
1540 the ICS (Internet Chess Server). It can be found at the chess.uoknor.ed…
1541 site in the pub/chess/DOS directory as the file "mail2pgn.zip" A C lang…
1542 version is in the directory pub/chess/Unix as the file "mail2pgn.c".
1543 Suggestions and comments should be directed to its author, John Aronson
1544 ([email protected]). This code has been reportedly incorpo…
1545 into the GIICS (Graphical Interface for the ICS); suggestions and commen…
1546 should be directed to its author, Tony Acero ([email protected]).
1547
1548 There is a report that mail2pgn has been superseded by the newer program
1549 "MV2PGN" described below.
1550
1551
1552 13.4: XBoard
1553
1554 "XBoard" is a comprehensive chess utility running under the X Window Sys…
1555 that provides a graphical user interface in a portable manner. A new ve…
1556 now handles PGN data. It is available from the chess.uoknor.edu ftp sit…
1557 the pub/chess/X directory as the file "xboard-3.0.pl9.tar.gz". Suggesti…
1558 comments should be directed to its author, Tim Mann ([email protected]).
1559
1560
1561 13.5: cupgn
1562
1563 The program "cupgn" converts game data stored in the ChessBase format in…
1564 It is available from the chess.uoknor.edu ftp site in the
1565 pub/chess/Game-Databases/CBUFF directory as the file "cupgn.tar.gz". An…
1566 version is in the directory pub/chess/DOS as the file "cupgn120.exe".
1567 Suggestions and comments should be directed to its author, Anjo Anjewier…
1568 ([email protected]).
1569
1570
1571 13.6: Zarkov
1572
1573 The current version (3.0) of the commercial chessplaying program "Zarkov…
1574 read and write games using PGN. This program can also use the EPD stand…
1575 communication with other EPD capable programs. Historically, Zarkov is …
1576 very first program to use EPD. Suggestions and comments should be direc…
1577 its author, John Stanback ([email protected]).
1578
1579 A vendor for North America is:
1580
1581 International Chess Enterprises
1582 P.O. Box 19457
1583 Seattle, WA 98109
1584 USA
1585 (800) 262-4277
1586
1587 A vendor for Europe is:
1588
1589 Gambit-Soft
1590 Feckenhauser Strasse 27
1591 D-78628 Rottweil
1592 GERMANY
1593 49-741-21573
1594
1595
1596 13.7: Chess Assistant
1597
1598 The upcoming version of the multifunction commercial database program "C…
1599 Assistant" will be able to use the PGN standard as an import and export …
1600 There is a report of a freeware program, "PGN2CA", that will convert PGN
1601 databases into Chess Assistant format. For more information, the contac…
1602 Victor Zakharov, one of the members of the Chess Assistant development t…
1603 ([email protected]).
1604
1605 A vendor for North America is:
1606
1607 International Chess Enterprises
1608 P.O. Box 19457
1609 Seattle, WA 98109
1610 USA
1611 (800) 262-4277
1612
1613
1614 13.8: BOOKUP
1615
1616 The MS-DOS edition of the multifunction commercial program BOOKUP, versi…
1617 is able to use the EPD standard for communication with other EPD capable
1618 programs. It may also be PGN capable as well.
1619
1620 The BOOKUP 8.1.1 Addenda notes dated 1993.12.17 provide comprehensive
1621 information on how to use EPD in conjunction with "analyst" programs suc…
1622 Zarkov and HIARCS. Specifically, the search and evaluation abilities of…
1623 analyst program are combined with the information organization abilities…
1624 BOOKUP database program to provide position scoring. This is done by fi…
1625 having BOOKUP export a database in EPD format, then having an analyst pr…
1626 annotate each EPD record with a numeric score, and then having BOOKUP im…
1627 the changed EPD file. BOOKUP can then apply minimaxing to the imported
1628 database; this results in scores from terminal positions being propagate…
1629 to earlier positions and even back to moves from the starting array.
1630
1631 For some reason, BOOKUP calls this process "backsolving", but it's reall…
1632 standard minimaxing. In any case, it's a good example of how different
1633 programs from different authors performing different types of tasks can …
1634 integrated by use of a common, non-proprietary standard. This allows fo…
1635 set of powerful features that are beyond the capabilities of any one of …
1636 individual component programs.
1637
1638 BOOKUP allows for some customizing of EPD actions. One such customizati…
1639 to require the positional evaluations to follow the EPD standard; this m…
1640 that the score is always given from the viewpoint of the active player. …
1641 is explained more fully in the section on the "ce" (centipawn evaluation)
1642 opcode in the EPD description in a later section of this document. To e…
1643 that BOOKUP handles the centipawn evaluations in the "right" way, the EPD
1644 setting "Positive for White" must be set to "N". This makes BOOKUP work
1645 correctly with Zarkov and with all other programs that use the "right"
1646 centipawn evaluation convention. There is an apparent problem with HIAR…
1647 requires this option to be set to "Y"; but this really means that, if tr…
1648 HIARCS needs to be adjusted to use the "right" centipawn evaluation conv…
1649
1650 A vendor in North America is:
1651
1652 BOOKUP
1653 2763 Kensington Place West
1654 Columbus, OH 43202
1655 USA
1656 (800) 949-5445
1657 (614) 263-7219
1658
1659
1660 13.9: HIARCS
1661
1662 The current version (2.1) of the commercial chessplaying program "HIARCS…
1663 able to use the EPD standard for communication with other EPD capable pr…
1664 It may also be PGN capable as well. More details will appear here as th…
1665 become available.
1666
1667 A vendor in North America is:
1668
1669 HIARCS
1670 c/o BOOKUP
1671 2763 Kensington Place West
1672 Columbus, OH 43202
1673 USA
1674 (800) 949-5445
1675 (614) 263-7219
1676
1677
1678 13.10: Deja Vu
1679
1680 The chess database "Deja Vu" from ChessWorks is a PGN compatible collect…
1681 over 300,000 games. It is available only on CD-ROM and is scheduled for
1682 release in 1994.05 with periodic revisions thereafter. The introductory…
1683 is US$329. For further information, the authors are John Crayton and Er…
1684 Schiller and they can be contacted via e-mail ([email protected]).
1685
1686
1687 13.11: MV2PGN
1688
1689 The program "MV2PGN" can be used to convert game data generated by both …
1690 and older versions of the GIICS (Graphical Interface - Internet Chess Se…
1691 The program is included in the self extracting archive available from
1692 chess.uoknor.edu in the directory pub/chess/DOS as the file "ics2pgn.exe…
1693 Source code is also included. This program is reported to supersede the…
1694 "mail2pgn" and was needed due to a change in ICS recording format in lat…
1695 For further information about MV2PGN, the contact person is Gary Bastin
1696 ([email protected]).
1697
1698
1699 13.12: The Hansen utilities (cb2pgn, nic2pgn, pgn2cb, pgn2nic)
1700
1701 The Hansen utilities are used to convert among various chess data
1702 representation formats. The PGN related programs include: "cb2pgn.exe"
1703 (convert ChessBase to PGN), "nic2pgn.exe" (convert NIC to PGN), "pgn2cb.…
1704 (convert PGN to ChessBase), and "pgn2nic.exe" (convert PGN to NIC).
1705
1706 The ChessBase related utilities (cb2pgn/pgn2cb) are found at chess.uokno…
1707 in the pub/chess/Game-Databases/ChessBase directory.
1708
1709 The NIC related utilities (nic2pgn/pgn2nic) are found at chess.uoknor.ed…
1710 the pub/chess/Game-Databases/NIC directory.
1711
1712 For further information about the Hansen utilities, the contact person i…
1713 author, Carsten Hansen ([email protected]).
1714
1715
1716 13.13: Slappy the Database
1717
1718 "Slappy the Database" is a commercial chess database and translation pro…
1719 scheduled for release no sooner than late 1994. It is a low cost utilit…
1720 a simple character interface intended for those who want a supported pro…
1721 but who do not need (or cannot afford) a comprehensive, feature-laden pr…
1722 with a graphical user interface. Slappy's two most important features a…
1723 batch processing ability and its full implementation of each and every s…
1724 described in this document. Versions of Slappy the Database will be pro…
1725 for various platforms including: Intel 386/486 Unix, Apple Macintosh, and
1726 MS-DOS.
1727
1728 Slappy may also be useful to those who have a full feature program who a…
1729 need to run time consuming chess database tasks on a spare computer.
1730
1731 Suggestions and comments should be directed to its author, Steven J. Edw…
1732 ([email protected]). More details will appear here as they become avail…
1733
1734
1735 13.14: CBASCII
1736
1737 "CBASCII" is a general utility for converting chess data between ChessBa…
1738 format and ASCII representations. It has PGN capability, and it is avai…
1739 from the chess.uoknor.edu ftp site in the pub/chess/DOS directory as the…
1740 "cba1_2.zip". The contact person is the program's author, Andy Duplain
1741 ([email protected]).
1742
1743
1744 13.15: ZZZZZZ
1745
1746 "ZZZZZZ" is a chessplaying program, complete with source, that also incl…
1747 some database functions. A recent version is reported to have both PGN …
1748 capabilities. It is available from the chess.uoknor.edu ftp site in the
1749 pub/chess/Unix directory as the file "zzzzzz-3.2b1.tar.gz". The contact…
1750 is its author, Gijsbert Wiesenecker ([email protected]).
1751
1752
1753 13.16: icsconv
1754
1755 The program "icsconv" can be used to convert Internet Chess Server games…
1756 old and new format, to PGN. It is available from the chess.uoknor.edu s…
1757 the pub/chess/Game-Databases/PGN/Tools directory as the file "icsconv.ex…
1758 The contact person is the author, Kevin Nomura ([email protected]).
1759
1760
1761 13.17: CHESSOP (CHESSOPN/CHESSOPG)
1762
1763 CHESSOP is an openings database and viewing tool with support for readin…
1764 games. It runs under MS-DOS and displays positions rather than games. …
1765 each position, both good and bad moves are listed with appropriate annot…
1766 Transpositions are handled as well. The distributed database contains o…
1767 100,000 positions covering all the common openings. Users can feed in t…
1768 own PGN data as well. CHESSOP takes 3 Mbyte of hard disk, costs US$39 a…
1769 be obtained from:
1770
1771 CHESSX Software
1772 12 Bluebell Close
1773 Glenmore Park
1774 AUSTRALIA 2745.
1775
1776 The ideas behind CHESSOP can be seen in CHESSOPN (alias CHESSOPG), a free
1777 version on the ICS server which has a reduced openings database (25,000
1778 positions) and no PGN or transposition support but is otherwise the same…
1779 CHESSOP. (These are the files "chessopg.zip" in the directory pub/chess…
1780 the chess.uoknor.edu ftp site.)
1781
1782
1783 13.18: CAT2PGN
1784
1785 The program "CAT2PGN" is a utility that translates data from the format …
1786 Chess Assistant into PGN. It is available from the chess.uoknor.edu ftp…
1787 The contact person for CAT2PGN is its author, David Myers
1788 ([email protected]).
1789
1790
1791 13.19: pgn2opg
1792
1793 The utility "pgn2opg" can be used to convert PGN files into a text forma…
1794 by the "CHESSOPG" program mentioned above. Although it does not perform…
1795 semantic analysis on PGN input, it has been demonstrated to handle known
1796 correct PGN input properly. The file can be found in the pub/chess/PGN/…
1797 directory at the chess.uoknor.edu ftp site. For more information, the a…
1798 is David Barnes ([email protected]).
1799
1800
1801 14: PGN data archives
1802
1803 The primary PGN data archive repository is located at the ftp site
1804 chess.uoknor.edu as the directory "pub/chess/Game-Databases/PGN". It is
1805 organized according to the description given in section C.5 of this docu…
1806 The European site ftp.math.uni-hamburg.de is also reported to carry a re…
1807 updated copy of the repository.
1808
1809
1810 15: International Olympic Committee country codes
1811
1812 International Olympic Committee country codes are employed for Site nati…
1813 information because of their traditional use with the reporting of
1814 international sporting events. Due to changes in geography and linguist…
1815 custom, some of the following may be incorrect or outdated. Corrections…
1816 extensions should be sent via e-mail to the PGN coordinator whose address
1817 listed near the start of this document.
1818
1819 AFG: Afghanistan
1820 AIR: Aboard aircraft
1821 ALB: Albania
1822 ALG: Algeria
1823 AND: Andorra
1824 ANG: Angola
1825 ANT: Antigua
1826 ARG: Argentina
1827 ARM: Armenia
1828 ATA: Antarctica
1829 AUS: Australia
1830 AZB: Azerbaijan
1831 BAN: Bangladesh
1832 BAR: Bahrain
1833 BHM: Bahamas
1834 BEL: Belgium
1835 BER: Bermuda
1836 BIH: Bosnia and Herzegovina
1837 BLA: Belarus
1838 BLG: Bulgaria
1839 BLZ: Belize
1840 BOL: Bolivia
1841 BRB: Barbados
1842 BRS: Brazil
1843 BRU: Brunei
1844 BSW: Botswana
1845 CAN: Canada
1846 CHI: Chile
1847 COL: Columbia
1848 CRA: Costa Rica
1849 CRO: Croatia
1850 CSR: Czechoslovakia
1851 CUB: Cuba
1852 CYP: Cyprus
1853 DEN: Denmark
1854 DOM: Dominican Republic
1855 ECU: Ecuador
1856 EGY: Egypt
1857 ENG: England
1858 ESP: Spain
1859 EST: Estonia
1860 FAI: Faroe Islands
1861 FIJ: Fiji
1862 FIN: Finland
1863 FRA: France
1864 GAM: Gambia
1865 GCI: Guernsey-Jersey
1866 GEO: Georgia
1867 GER: Germany
1868 GHA: Ghana
1869 GRC: Greece
1870 GUA: Guatemala
1871 GUY: Guyana
1872 HAI: Haiti
1873 HKG: Hong Kong
1874 HON: Honduras
1875 HUN: Hungary
1876 IND: India
1877 IRL: Ireland
1878 IRN: Iran
1879 IRQ: Iraq
1880 ISD: Iceland
1881 ISR: Israel
1882 ITA: Italy
1883 IVO: Ivory Coast
1884 JAM: Jamaica
1885 JAP: Japan
1886 JRD: Jordan
1887 JUG: Yugoslavia
1888 KAZ: Kazakhstan
1889 KEN: Kenya
1890 KIR: Kyrgyzstan
1891 KUW: Kuwait
1892 LAT: Latvia
1893 LEB: Lebanon
1894 LIB: Libya
1895 LIC: Liechtenstein
1896 LTU: Lithuania
1897 LUX: Luxembourg
1898 MAL: Malaysia
1899 MAU: Mauritania
1900 MEX: Mexico
1901 MLI: Mali
1902 MLT: Malta
1903 MNC: Monaco
1904 MOL: Moldova
1905 MON: Mongolia
1906 MOZ: Mozambique
1907 MRC: Morocco
1908 MRT: Mauritius
1909 MYN: Myanmar
1910 NCG: Nicaragua
1911 NET: The Internet
1912 NIG: Nigeria
1913 NLA: Netherlands Antilles
1914 NLD: Netherlands
1915 NOR: Norway
1916 NZD: New Zealand
1917 OST: Austria
1918 PAK: Pakistan
1919 PAL: Palestine
1920 PAN: Panama
1921 PAR: Paraguay
1922 PER: Peru
1923 PHI: Philippines
1924 PNG: Papua New Guinea
1925 POL: Poland
1926 POR: Portugal
1927 PRC: People's Republic of China
1928 PRO: Puerto Rico
1929 QTR: Qatar
1930 RIN: Indonesia
1931 ROM: Romania
1932 RUS: Russia
1933 SAF: South Africa
1934 SAL: El Salvador
1935 SCO: Scotland
1936 SEA: At Sea
1937 SEN: Senegal
1938 SEY: Seychelles
1939 SIP: Singapore
1940 SLV: Slovenia
1941 SMA: San Marino
1942 SPC: Aboard spacecraft
1943 SRI: Sri Lanka
1944 SUD: Sudan
1945 SUR: Surinam
1946 SVE: Sweden
1947 SWZ: Switzerland
1948 SYR: Syria
1949 TAI: Thailand
1950 TMT: Turkmenistan
1951 TRK: Turkey
1952 TTO: Trinidad and Tobago
1953 TUN: Tunisia
1954 UAE: United Arab Emirates
1955 UGA: Uganda
1956 UKR: Ukraine
1957 UNK: Unknown
1958 URU: Uruguay
1959 USA: United States of America
1960 UZB: Uzbekistan
1961 VEN: Venezuela
1962 VGB: British Virgin Islands
1963 VIE: Vietnam
1964 VUS: U.S. Virgin Islands
1965 WLS: Wales
1966 YEM: Yemen
1967 YUG: Yugoslavia
1968 ZAM: Zambia
1969 ZIM: Zimbabwe
1970 ZRE: Zaire
1971
1972
1973 16: Additional chess data standards
1974
1975 While PGN is used for game storage, there are other data representation
1976 standards for other chess related purposes. Two important standards are…
1977 and EPD, both described in this section.
1978
1979
1980 16.1: FEN
1981
1982 FEN is "Forsyth-Edwards Notation"; it is a standard for describing chess
1983 positions using the ASCII character set.
1984
1985 A single FEN record uses one text line of variable length composed of si…
1986 fields. The first four fields of the FEN specification are the same as …
1987 first four fields of the EPD specification.
1988
1989 A text file composed exclusively of FEN data records should have a file …
1990 with the suffix ".fen".
1991
1992
1993 16.1.1: History
1994
1995 FEN is based on a 19th century standard for position recording designed …
1996 Scotsman David Forsyth, a newspaper journalist. The original Forsyth st…
1997 has been slightly extended for use with chess software by Steven Edwards…
1998 assistance from commentators on the Internet. This new standard, FEN, w…
1999 first implemented in Edwards' SAN Kit.
2000
2001
2002 16.1.2: Uses for a position notation
2003
2004 Having a standard position notation is particularly important for chess
2005 programmers as it allows them to share position databases. For example,…
2006 exist standard position notation databases with many of the classical be…
2007 tests for chessplaying programs, and by using a common position notation…
2008 many hours of tedious data entry can be saved. Additionally, a position
2009 notation can be useful for page layout programs and for confirming posit…
2010 status for e-mail competition.
2011
2012 Many interesting chess problem sets represented using FEN can be found a…
2013 chess.uoknor.edu ftp site in the directory pub/chess/SAN_testsuites.
2014
2015
2016 16.1.3: Data fields
2017
2018 FEN specifies the piece placement, the active color, the castling availa…
2019 the en passant target square, the halfmove clock, and the fullmove numbe…
2020 These can all fit on a single text line in an easily read format. The l…
2021 of a FEN position description varies somewhat according to the position.…
2022 some cases, the description could be eighty or more characters in length…
2023 may not fit conveniently on some displays. However, these positions are…
2024 common.
2025
2026 A FEN description has six fields. Each field is composed only of non-bl…
2027 printing ASCII characters. Adjacent fields are separated by a single AS…
2028 space character.
2029
2030
2031 16.1.3.1: Piece placement data
2032
2033 The first field represents the placement of the pieces on the board. Th…
2034 contents are specified starting with the eighth rank and ending with the…
2035 rank. For each rank, the squares are specified from file a to file h. …
2036 pieces are identified by uppercase SAN piece letters ("PNBRQK") and black
2037 pieces are identified by lowercase SAN piece letters ("pnbrqk"). Empty …
2038 are represented by the digits one through eight; the digit used represen…
2039 count of contiguous empty squares along a rank. A solidus character "/"…
2040 used to separate data of adjacent ranks.
2041
2042
2043 16.1.3.2: Active color
2044
2045 The second field represents the active color. A lower case "w" is used …
2046 White is to move; a lower case "b" is used if Black is the active player.
2047
2048
2049 16.1.3.3: Castling availability
2050
2051 The third field represents castling availability. This indicates potent…
2052 future castling that may of may not be possible at the moment due to blo…
2053 pieces or enemy attacks. If there is no castling availability for eithe…
2054 the single character symbol "-" is used. Otherwise, a combination of fr…
2055 to four characters are present. If White has kingside castling availabi…
2056 the uppercase letter "K" appears. If White has queenside castling
2057 availability, the uppercase letter "Q" appears. If Black has kingside c…
2058 availability, the lowercase letter "k" appears. If Black has queenside
2059 castling availability, then the lowercase letter "q" appears. Those let…
2060 which appear will be ordered first uppercase before lowercase and second
2061 kingside before queenside. There is no white space between the letters.
2062
2063
2064 16.1.3.4: En passant target square
2065
2066 The fourth field is the en passant target square. If there is no en pas…
2067 target square then the single character symbol "-" appears. If there is…
2068 passant target square then is represented by a lowercase file character
2069 immediately followed by a rank digit. Obviously, the rank digit will be…
2070 following a white pawn double advance (Black is the active color) or els…
2071 the digit "6" after a black pawn double advance (White being the active …
2072
2073 An en passant target square is given if and only if the last move was a …
2074 advance of two squares. Therefore, an en passant target square field ma…
2075 a square name even if there is no pawn of the opposing side that may
2076 immediately execute the en passant capture.
2077
2078
2079 16.1.3.5: Halfmove clock
2080
2081 The fifth field is a nonnegative integer representing the halfmove clock…
2082 number is the count of halfmoves (or ply) since the last pawn advance or
2083 capturing move. This value is used for the fifty move draw rule.
2084
2085
2086 16.1.3.6: Fullmove number
2087
2088 The sixth and last field is a positive integer that gives the fullmove n…
2089 This will have the value "1" for the first move of a game for both White…
2090 Black. It is incremented by one immediately after each move by Black.
2091
2092
2093 16.1.4: Examples
2094
2095 Here's the FEN for the starting position:
2096
2097 rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
2098
2099 And after the move 1. e4:
2100
2101 rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1
2102
2103 And then after 1. ... c5:
2104
2105 rnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR w KQkq c6 0 2
2106
2107 And then after 2. Nf3:
2108
2109 rnbqkbnr/pp1ppppp/8/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R b KQkq - 1 2
2110
2111 For two kings on their home squares and a white pawn on e2 (White to mov…
2112 thirty eight full moves played with five halfmoves since the last pawn m…
2113 capture:
2114
2115 4k3/8/8/8/8/8/4P3/4K3 w - - 5 39
2116
2117
2118 16.2: EPD
2119
2120 EPD is "Extended Position Description"; it is a standard for describing …
2121 positions along with an extended set of structured attribute values usin…
2122 ASCII character set. It is intended for data and command interchange am…
2123 chessplaying programs. It is also intended for the representation of po…
2124 opening library repositories.
2125
2126 A single EPD uses one text line of variable length composed of four data…
2127 followed by zero or more operations. The four fields of the EPD specifi…
2128 are the same as the first four fields of the FEN specification.
2129
2130 A text file composed exclusively of EPD data records should have a file …
2131 with the suffix ".epd".
2132
2133
2134 16.2.1: History
2135
2136 EPD is based in part on the earlier FEN standard; it has added extension…
2137 use with opening library preparation and also for general data and comma…
2138 interchange among advanced chess programs. EPD was developed by John St…
2139 and Steven Edwards; its first implementation is in Stanback's master str…
2140 chessplaying program Zarkov.
2141
2142
2143 16.2.2: Uses for an extended position notation
2144
2145 Like FEN, EPD can also be used for general position description. Howeve…
2146 unlike FEN, EPD is designed to be expandable by the addition of new oper…
2147 that provide new functionality as needs arise.
2148
2149 Many interesting chess problem sets represented using EPD can be found a…
2150 chess.uoknor.edu ftp site in the directory pub/chess/SAN_testsuites.
2151
2152
2153 16.2.3: Data fields
2154
2155 EPD specifies the piece placement, the active color, the castling availa…
2156 and the en passant target square of a position. These can all fit on a …
2157 text line in an easily read format. The length of an EPD position descr…
2158 varies somewhat according to the position and any associated operations.…
2159 some cases, the description could be eighty or more characters in length…
2160 may not fit conveniently on some displays. However, most EPD descriptio…
2161 among programs only and these are not usually seen by program users.
2162
2163 (Note: due to the likelihood of future expansion of EPD, implementors are
2164 encouraged to have their programs handle EPD text lines of up to 1024
2165 characters long.)
2166
2167 Each EPD data field is composed only of non-blank printing ASCII charact…
2168 Adjacent data fields are separated by a single ASCII space character.
2169
2170
2171 16.2.3.1: Piece placement data
2172
2173 The first field represents the placement of the pieces on the board. Th…
2174 contents are specified starting with the eighth rank and ending with the…
2175 rank. For each rank, the squares are specified from file a to file h. …
2176 pieces are identified by uppercase SAN piece letters ("PNBRQK") and black
2177 pieces are identified by lowercase SAN piece letters ("pnbrqk"). Empty …
2178 are represented by the digits one through eight; the digit used represen…
2179 count of contiguous empty squares along a rank. A solidus character "/"…
2180 used to separate data of adjacent ranks.
2181
2182
2183 16.2.3.2: Active color
2184
2185 The second field represents the active color. A lower case "w" is used …
2186 White is to move; a lower case "b" is used if Black is the active player.
2187
2188
2189 16.2.3.3: Castling availability
2190
2191 The third field represents castling availability. This indicates potent…
2192 future castling that may or may not be possible at the moment due to blo…
2193 pieces or enemy attacks. If there is no castling availability for eithe…
2194 the single character symbol "-" is used. Otherwise, a combination of fr…
2195 to four characters are present. If White has kingside castling availabi…
2196 the uppercase letter "K" appears. If White has queenside castling
2197 availability, the uppercase letter "Q" appears. If Black has kingside c…
2198 availability, the lowercase letter "k" appears. If Black has queenside
2199 castling availability, then the lowercase letter "q" appears. Those let…
2200 which appear will be ordered first uppercase before lowercase and second
2201 kingside before queenside. There is no white space between the letters.
2202
2203
2204 16.2.3.4: En passant target square
2205
2206 The fourth field is the en passant target square. If there is no en pas…
2207 target square then the single character symbol "-" appears. If there is…
2208 passant target square then is represented by a lowercase file character
2209 immediately followed by a rank digit. Obviously, the rank digit will be…
2210 following a white pawn double advance (Black is the active color) or els…
2211 the digit "6" after a black pawn double advance (White being the active …
2212
2213 An en passant target square is given if and only if the last move was a …
2214 advance of two squares. Therefore, an en passant target square field ma…
2215 a square name even if there is no pawn of the opposing side that may
2216 immediately execute the en passant capture.
2217
2218
2219 16.2.4: Operations
2220
2221 An EPD operation is composed of an opcode followed by zero or more opera…
2222 is concluded by a semicolon.
2223
2224 Multiple operations are separated by a single space character. If there…
2225 least one operation present in an EPD line, it is separated from the last
2226 (fourth) data field by a single space character.
2227
2228
2229 16.2.4.1: General format
2230
2231 An opcode is an identifier that starts with a letter character and may be
2232 followed by up to fourteen more characters. Each additional character m…
2233 letter or a digit or the underscore character.
2234
2235 An operand is either a set of contiguous non-white space printing charac…
2236 a string. A string is a set of contiguous printing characters delimited…
2237 quote character at each end. A string value must have less than 256 byt…
2238 data.
2239
2240 If at least one operand is present in an operation, there is a single sp…
2241 between the opcode and the first operand. If more than one operand is p…
2242 in an operation, there is a single blank character between every two adj…
2243 operands. If there are no operands, a semicolon character is appended t…
2244 opcode to mark the end of the operation. If any operands appear, the la…
2245 operand has an appended semicolon that marks the end of the operation.
2246
2247 Any given opcode appears at most once per EPD record. Multiple operatio…
2248 single EPD record should appear in ASCII order of their opcode names
2249 (mnemonics). However, a program reading EPD records may allow for opera…
2250 not in ASCII order by opcode mnemonics; the semantics are the same in ei…
2251 case.
2252
2253 Some opcodes that allow for more than one operand may have special order…
2254 requirements for the operands. For example, the "pv" (predicted variati…
2255 opcode requires its operands (moves) to appear in the order in which the…
2256 be played. All other opcodes that allow for more than one operand shoul…
2257 operands appearing in ASCII order. An example of the latter set is the …
2258 (best move[s]) opcode; its operands are moves that are all immediately p…
2259 from the current position.
2260
2261 Some opcodes require one or more operands that are chess moves. These m…
2262 should be represented using SAN. If a different representation is used,…
2263 is no guarantee that the EPD will be read correctly during subsequent
2264 processing.
2265
2266 Some opcodes require one or more operands that are integers. Some opcod…
2267 require that an integer operand must be within a given range; the detail…
2268 described in the opcode list given below. A negative integer is formed …
2269 hyphen (minus sign) preceding the integer digit sequence. An optional p…
2270 sign may be used for indicating a non-negative value, but such use is not
2271 required and is indeed discouraged.
2272
2273 Some opcodes require one or more operands that are floating point number…
2274 Some opcodes may require that a floating point operand must be within a …
2275 range; the details are described in the opcode list given below. A floa…
2276 point operand is constructed from an optional sign character ("+" or "-"…
2277 digit sequence (with at least one digit), a radix point (always "."), an…
2278 final digit sequence (with at least one digit).
2279
2280
2281 16.2.4.2: Opcode mnemonics
2282
2283 An opcode mnemonic used for archival storage and for interprogram commun…
2284 starts with a lower case letter and is composed of only lower case lette…
2285 digits, and the underscore character (i.e., no upper case letters). The…
2286 mnemonics will also all be at least two characters in length.
2287
2288 Opcode mnemonics used only by a single program or an experimental suite …
2289 programs should start with an upper case letter. This is so they may be…
2290 distinguished should they be inadvertently be encountered by other progr…
2291 When a such a "private" opcode be demonstrated to be widely useful, it s…
2292 be brought into the official list (appearing below) in a lower case form.
2293
2294 If a given program does not recognize a particular opcode, that operatio…
2295 simply ignored; it is not signaled as an error.
2296
2297
2298 16.2.5: Opcode list
2299
2300 The opcodes are listed here in ASCII order of their mnemonics. Suggesti…
2301 new opcodes should be sent to the PGN standard coordinator listed near t…
2302 start of this document.
2303
2304
2305 16.2.5.1: Opcode "acn": analysis count: nodes
2306
2307 The opcode "acn" takes a single non-negative integer operand. It is use…
2308 represent the number of nodes examined in an analysis. Note that the va…
2309 be quite large for some extended searches and so use of (at least) a lon…
2310 byte) representation is suggested.
2311
2312
2313 16.2.5.2: Opcode "acs": analysis count: seconds
2314
2315 The opcode "acs" takes a single non-negative integer operand. It is use…
2316 represent the number of seconds used for an analysis. Note that the val…
2317 be quite large for some extended searches and so use of (at least) a lon…
2318 byte) representation is suggested.
2319
2320
2321 16.2.5.3: Opcode "am": avoid move(s)
2322
2323 The opcode "am" indicates a set of zero or more moves, all immediately p…
2324 from the current position, that are to be avoided in the opinion of the …
2325 writer. Each operand is a SAN move; they appear in ASCII order.
2326
2327
2328 16.2.5.4: Opcode "bm": best move(s)
2329
2330 The opcode "bm" indicates a set of zero or more moves, all immediately p…
2331 from the current position, that are judged to the best available by the …
2332 writer. Each operand is a SAN move; they appear in ASCII order.
2333
2334
2335 16.2.5.5: Opcode "c0": comment (primary, also "c1" though "c9")
2336
2337 The opcode "c0" (lower case letter "c", digit character zero) indicates …
2338 level comment that applies to the given position. It is the first of ten
2339 ranked comments, each of which has a mnemonic formed from the lower case…
2340 "c" followed by a single decimal digit. Each of these opcodes takes eit…
2341 single string operand or no operand at all.
2342
2343 This ten member comment family of opcodes is intended for use as descrip…
2344 commentary for a complete game or game fragment. The usual processing o…
2345 opcodes are as follows:
2346
2347 1) At the beginning of a game (or game fragment), a move sequence scanni…
2348 program initializes each element of its set of ten comment string regist…
2349 be null.
2350
2351 2) As the EPD record for each position in the game is processed, the com…
2352 operations are interpreted from left to right. (Actually, all operation…
2353 EPD record are interpreted from left to right.) Because operations appe…
2354 ASCII order according to their opcode mnemonics, opcode "c0" (if present…
2355 be handled prior to all other opcodes, then opcode "c1" (if present), an…
2356 forth until opcode "c9" (if present).
2357
2358 3) The processing of opcode "cN" (0 <= N <= 9) involves two steps. Firs…
2359 comment string registers with an index equal to or greater than N are se…
2360 null. (This is the set "cN" though "c9".) Second, and only if a string
2361 operand is present, the value of the corresponding comment string regist…
2362 set equal to the string operand.
2363
2364
2365 16.2.5.6: Opcode "ce": centipawn evaluation
2366
2367 The opcode "ce" indicates the evaluation of the indicated position in ce…
2368 units. It takes a single operand, an optionally signed integer that giv…
2369 evaluation of the position from the viewpoint of the active player; i.e.…
2370 player with the move. Positive values indicate a position favorable to …
2371 moving player while negative values indicate a position favorable to the
2372 passive player; i.e., the player without the move. A centipawn evaluati…
2373 value close to zero indicates a neutral positional evaluation.
2374
2375 Values are restricted to integers that are equal to or greater than -327…
2376 are less than or equal to 32766.
2377
2378 A value greater than 32000 indicates the availability of a forced mate t…
2379 active player. The number of plies until mate is given by subtracting t…
2380 evaluation from the value 32767. Thus, a winning mate in N fullmoves is…
2381 in ((2 * N) - 1) halfmoves (or ply) and has a corresponding centipawn
2382 evaluation of (32767 - ((2 * N) - 1)). For example, a mate on the move …
2383 in one) has a centipawn evaluation of 32766 while a mate in five has a
2384 centipawn evaluation of 32758.
2385
2386 A value less than -32000 indicates the availability of a forced mate to …
2387 passive player. The number of plies until mate is given by subtracting …
2388 evaluation from the value -32767 and then negating the result. Thus, a …
2389 mate in N fullmoves is a mate in (2 * N) halfmoves (or ply) and has a
2390 corresponding centipawn evaluation of (-32767 + (2 * N)). For example, …
2391 after the move (losing mate in one) has a centipawn evaluation of -32765…
2392 a losing mate in five has a centipawn evaluation of -32757.
2393
2394 A value of -32767 indicates an illegal position. A stalemate position h…
2395 centipawn evaluation of zero as does a position drawn due to insufficient
2396 mating material. Any other position known to be a certain forced draw a…
2397 a centipawn evaluation of zero.
2398
2399
2400 16.2.5.7: Opcode "dm": direct mate fullmove count
2401
2402 The "dm" opcode is used to indicate the number of fullmoves until checkm…
2403 to be delivered by the active color for the indicated position. It alwa…
2404 takes a single operand which is a positive integer giving the fullmove c…
2405 For example, a position known to be a "mate in three" would have an oper…
2406 of "dm 3;" to indicate this.
2407
2408 This opcode is intended for use with problem sets composed of positions
2409 requiring direct mate answers as solutions.
2410
2411
2412 16.2.5.8: Opcode "draw_accept": accept a draw offer
2413
2414 The opcode "draw_accept" is used to indicate that a draw offer made afte…
2415 move that lead to the indicated position is accepted by the active playe…
2416 This opcode takes no operands.
2417
2418
2419 16.2.5.9: Opcode "draw_claim": claim a draw
2420
2421 The opcode "draw_claim" is used to indicate claim by the active player t…
2422 draw exists. The draw is claimed because of a third time repetition or …
2423 of the fifty move rule or because of insufficient mating material. A su…
2424 move (see the opcode "sm") is also required to appear as part of the sam…
2425 record. The draw_claim opcode takes no operands.
2426
2427
2428 16.2.5.10: Opcode "draw_offer": offer a draw
2429
2430 The opcode "draw_offer" is used to indicate that a draw is offered by the
2431 active player. A supplied move (see the opcode "sm") is also required to
2432 appear as part of the same EPD record; this move is considered played fr…
2433 indicated position. The draw_offer opcode takes no operands.
2434
2435
2436 16.2.5.11: Opcode "draw_reject": reject a draw offer
2437
2438 The opcode "draw_reject" is used to indicate that a draw offer made afte…
2439 move that lead to the indicated position is rejected by the active playe…
2440 This opcode takes no operands.
2441
2442
2443 16.2.5.12: Opcode "eco": _Encyclopedia of Chess Openings_ opening code
2444
2445 The opcode "eco" is used to associate an opening designation from the
2446 _Encyclopedia of Chess Openings_ taxonomy with the indicated position. …
2447 opcode takes either a single string operand (the ECO opening name) or no
2448 operand at all. If an operand is present, its value is associated with …
2449 "ECO" string register of the scanning program. If there is no operand, …
2450 string register of the scanning program is set to null.
2451
2452 The usage is similar to that of the "ECO" tag pair of the PGN standard.
2453
2454
2455 16.2.5.13: Opcode "fmvn": fullmove number
2456
2457 The opcode "fmvn" represents the fullmove n umber associated with the po…
2458 It always takes a single operand that is the positive integer value of t…
2459 number.
2460
2461 This opcode is used to explicitly represent the fullmove number in EPD t…
2462 present by default in FEN as the sixth field. Fullmove number informati…
2463 usually omitted from EPD because it does not affect move generation (com…
2464 needed for EPD-using tasks) but it does affect game notation (commonly n…
2465 for FEN-using tasks). Because of the desire for space optimization for …
2466 EPD files, fullmove numbers were dropped from EPD's parent FEN. The hal…
2467 clock information was similarly dropped.
2468
2469
2470 16.2.5.14: Opcode "hmvc": halfmove clock
2471
2472 The opcode "hmvc" represents the halfmove clock associated with the posi…
2473 The halfmove clock of a position is equal to the number of plies since t…
2474 pawn move or capture. This information is used to implement the fifty m…
2475 draw rule. It always takes a single operand that is the non-negative in…
2476 value of the halfmove clock.
2477
2478 This opcode is used to explicitly represent the halfmove clock in EPD th…
2479 present by default in FEN as the fifth field. Halfmove clock informatio…
2480 usually omitted from EPD because it does not affect move generation (com…
2481 needed for EPD-using tasks) but it does affect game termination issues
2482 (commonly needed for FEN-using tasks). Because of the desire for space
2483 optimization for large EPD files, halfmove clock values were dropped fro…
2484 parent FEN. The fullmove number information was similarly dropped.
2485
2486
2487 16.2.5.15: Opcode "id": position identification
2488
2489 The opcode "id" is used to provide a simple identifying label for the in…
2490 position. It takes a single string operand.
2491
2492 This opcode is intended for use with test suites used for measuring
2493 chessplaying program strength. An example "id" operand for the seven hu…
2494 fifty seventh position of the one thousand one problems in Reinfeld's _1…
2495 Winning Chess Sacrifices and Combinations_ would be "WCSAC.0757" while t…
2496 fifteenth position in the twenty four problem Bratko-Kopec test suite wo…
2497 have an "id" operand of "BK.15".
2498
2499
2500 16.2.5.16: Opcode "nic": _New In Chess_ opening code
2501
2502 The opcode "nic" is used to associate an opening designation from the _N…
2503 Chess_ taxonomy with the indicated position. The opcode takes either a …
2504 string operand (the NIC opening name) or no operand at all. If an opera…
2505 present, its value is associated with an "NIC" string register of the sc…
2506 program. If there is no operand, the NIC string register of the scanning
2507 program is set to null.
2508
2509 The usage is similar to that of the "NIC" tag pair of the PGN standard.
2510
2511
2512 16.2.5.17: Opcode "noop": no operation
2513
2514 The "noop" opcode is used to indicate no operation. It takes zero or mo…
2515 operands, each of which may be of any type. The operation involves no
2516 processing. It is intended for use by developers for program testing pu…
2517
2518
2519 16.2.5.18: Opcode "pm": predicted move
2520
2521 The "pm" opcode is used to provide a single predicted move for the indic…
2522 position. It has exactly one operand, a move playable from the position…
2523 move is judged by the EPD writer to represent the best move available to…
2524 active player.
2525
2526 If a non-empty "pv" (predicted variation) line of play is also present i…
2527 same EPD record, the first move of the predicted variation is the same a…
2528 predicted move.
2529
2530 The "pm" opcode is intended for use as a general "display hint" mechanis…
2531
2532
2533 16.2.5.19: Opcode "pv": predicted variation
2534
2535 The "pv" opcode is used to provide a predicted variation for the indicat…
2536 position. It has zero or more operands which represent a sequence of mo…
2537 playable from the position. This sequence is judged by the EPD writer to
2538 represent the best play available.
2539
2540 If a "pm" (predicted move) operation is also present in the same EPD rec…
2541 the predicted move is the same as the first move of the predicted variat…
2542
2543
2544 16.2.5.20: Opcode "rc": repetition count
2545
2546 The "rc" opcode is used to indicate the number of occurrences of the ind…
2547 position. It takes a single, positive integer operand. Any position,
2548 including the initial starting position, is considered to have an "rc" v…
2549 at least one. A value of three indicates a candidate for a draw claim b…
2550 position repetition rule.
2551
2552
2553 16.2.5.21: Opcode "resign": game resignation
2554
2555 The opcode "resign" is used to indicate that the active player has resig…
2556 game. This opcode takes no operands.
2557
2558
2559 16.2.5.22: Opcode "sm": supplied move
2560
2561 The "sm" opcode is used to provide a single supplied move for the indica…
2562 position. It has exactly one operand, a move playable from the position…
2563 move is the move to be played from the position.
2564
2565 The "sm" opcode is intended for use to communicate the most recent playe…
2566 in an active game. It is used to communicate moves between programs in
2567 automatic play via a network. This includes correspondence play using e…
2568 and also programs acting as network front ends to human players.
2569
2570
2571 16.2.5.23: Opcode "tcgs": telecommunication: game selector
2572
2573 The "tcgs" opcode is one of the telecommunication family of opcodes used…
2574 games conducted via e-mail and similar means. This opcode takes a single
2575 operand that is a positive integer. It is used to select among various …
2576 in progress between the same sender and receiver.
2577
2578
2579 16.2.5.24: Opcode "tcri": telecommunication: receiver identification
2580
2581 The "tcri" opcode is one of the telecommunication family of opcodes used…
2582 games conducted via e-mail and similar means. This opcode takes two ord…
2583 dependent string operands. The first operand is the e-mail address of t…
2584 receiver of the EPD record. The second operand is the name of the player
2585 (program or human) at the address who is the actual receiver of the EPD …
2586
2587
2588 16.2.5.25: Opcode "tcsi": telecommunication: sender identification
2589
2590 The "tcsi" opcode is one of the telecommunication family of opcodes used…
2591 games conducted via e-mail and similar means. This opcode takes two ord…
2592 dependent string operands. The first operand is the e-mail address of t…
2593 sender of the EPD record. The second operand is the name of the player
2594 (program or human) at the address who is the actual sender of the EPD re…
2595
2596
2597 16.2.5.26: Opcode "v0": variation name (primary, also "v1" though "v9")
2598
2599 The opcode "v0" (lower case letter "v", digit character zero) indicates …
2600 level variation name that applies to the given position. It is the firs…
2601 ten ranked variation names, each of which has a mnemonic formed from the…
2602 case letter "v" followed by a single decimal digit. Each of these opcod…
2603 takes either a single string operand or no operand at all.
2604
2605 This ten member variation name family of opcodes is intended for use as
2606 traditional variation names for a complete game or game fragment. The u…
2607 processing of these opcodes are as follows:
2608
2609 1) At the beginning of a game (or game fragment), a move sequence scanni…
2610 program initializes each element of its set of ten variation name string
2611 registers to be null.
2612
2613 2) As the EPD record for each position in the game is processed, the var…
2614 name operations are interpreted from left to right. (Actually, all oper…
2615 in n EPD record are interpreted from left to right.) Because operations…
2616 in ASCII order according to their opcode mnemonics, opcode "v0" (if pres…
2617 will be handled prior to all other opcodes, then opcode "v1" (if present…
2618 so forth until opcode "v9" (if present).
2619
2620 3) The processing of opcode "vN" (0 <= N <= 9) involves two steps. Firs…
2621 variation name string registers with an index equal to or greater than N…
2622 set to null. (This is the set "vN" though "v9".) Second, and only if a…
2623 operand is present, the value of the corresponding variation name string
2624 register is set equal to the string operand.
2625
2626
2627 17: Alternative chesspiece identifier letters
2628
2629 English language piece names are used to define the letter set for ident…
2630 chesspieces in PGN movetext. However, authors of programs which are use…
2631 for local presentation or scanning of chess move data may find it conven…
2632 use piece letter codes common in their locales. This is not a problem a…
2633 as PGN data that resides in archival storage or that is exchanged among
2634 programs still uses the SAN (English) piece letter codes: "PNBRQK".
2635
2636 For the above authors only, a list of alternative piece letter codes are
2637 provided:
2638
2639 Language Piece letters (pawn knight bishop rook queen king)
2640 ---------- --------------------------------------------------
2641 Czech P J S V D K
2642 Danish B S L T D K
2643 Dutch O P L T D K
2644 English P N B R Q K
2645 Estonian P R O V L K
2646 Finnish P R L T D K
2647 French P C F T D R
2648 German B S L T D K
2649 Hungarian G H F B V K
2650 Icelandic P R B H D K
2651 Italian P C A T D R
2652 Norwegian B S L T D K
2653 Polish P S G W H K
2654 Portuguese P C B T D R
2655 Romanian P C N T D R
2656 Spanish P C A T D R
2657 Swedish B S L T D K
2658
2659
2660 18: Formal syntax
2661
2662 <PGN-database> ::= <PGN-game> <PGN-database>
2663 <empty>
2664
2665 <PGN-game> ::= <tag-section> <movetext-section>
2666
2667 <tag-section> ::= <tag-pair> <tag-section>
2668 <empty>
2669
2670 <tag-pair> ::= [ <tag-name> <tag-value> ]
2671
2672 <tag-name> ::= <identifier>
2673
2674 <tag-value> ::= <string>
2675
2676 <movetext-section> ::= <element-sequence> <game-termination>
2677
2678 <element-sequence> ::= <element> <element-sequence>
2679 <recursive-variation> <element-sequence>
2680 <empty>
2681
2682 <element> ::= <move-number-indication>
2683 <SAN-move>
2684 <numeric-annotation-glyph>
2685
2686 <recursive-variation> ::= ( <element-sequence> )
2687
2688 <game-termination> ::= 1-0
2689 0-1
2690 1/2-1/2
2691 *
2692 <empty> ::=
2693
2694
2695 19: Canonical chess position hash coding
2696
2697 *** This section is under development.
2698
2699
2700 20: Binary representation (PGC)
2701
2702 *** This section is under development.
2703
2704 The binary coded version of PGN is PGC (PGN Game Coding). PGC is a bina…
2705 representation standard of PGN data designed for the dual goals of stora…
2706 efficiency and program I/O. A file containing PGC data should have a na…
2707 a suffix of ".pgc".
2708
2709 Unlike PGN text files that may have locale dependent representations for
2710 newlines, PGC files have data that does not vary due to local processing
2711 environment. This means that PGC files may be transferred among systems…
2712 general binary file methods.
2713
2714 PGC files should be used only when the use of PGN is impractical due to …
2715 and space resource constraints. As the general level of processing
2716 capabilities increases, the need for PGC over PGN will decrease. Theref…
2717 implementors are encouraged not to use PGC as the default representation
2718 because it is much more difficult (than PGN) to understand without proper
2719 software.
2720
2721 PGC data is composed of a sequence of PGC records. Each record is compo…
2722 a sequence of one or more bytes. The first byte is the PGN record marke…
2723 it specifies the interpretation of the remaining portion of the record. …
2724 remaining portion is composed of zero or more PGN record items. Item ty…
2725 include move sequences, move sets, and character strings.
2726
2727
2728 20.1: Bytes, words, and doublewords
2729
2730 At the lowest level, PGC binary data is organized as bytes, words (two
2731 contiguous bytes), and doublewords (four contiguous bytes). All eight b…
2732 a byte are used. Longwords (eight contiguous bytes) are not used. Inte…
2733 values are stored using two's complement representation. Integers may be
2734 signed or unsigned depending on context. Multibyte integers are stored …
2735 low-endian format with the least significant byte appearing first.
2736
2737 A one byte integer item is called "int-1". A two byte integer item is c…
2738 "int-2". A four byte integer item is called "int-4".
2739
2740 Characters are stored as bytes using the ISO 8859/1 Latin-1 (ECMA-94) co…
2741 There is no provision for other characters sets or representations.
2742
2743
2744 20.2: Move ordinals
2745
2746 A chess move is represented using a move ordinal. This is a single unsi…
2747 byte quantity with values from zero to 255. A move ordinal is interpret…
2748 an index into the list of legal moves from the current position. This l…
2749 constructed by generating the legal moves from the current position, ass…
2750 SAN ASCII strings to each move, and then sorting these strings in ascend…
2751 order. Note that a seven bit ordinal, as used by some inferior represen…
2752 systems, is insufficient as there are some positions that have more than…
2753 moves available.
2754
2755 Examples: From the initial position, there are twenty moves. Move ordi…
2756 corresponds to the SAN move string "Na3"; move ordinal 1 corresponds to …
2757 move ordinal 4 corresponds to "a3", and move ordinal 19 corresponds to "…
2758
2759 Moves can be organized into sequences and sets. A move sequence is an o…
2760 list of moves that are played, one after another from first to last. A …
2761 set is a list of moves that are all playable from the current position.
2762
2763 Move sequence data is represented using a length header followed by move
2764 ordinal data. The length header is an unsigned integer that may be a by…
2765 word. The integer gives the number, possibly zero, of following move or…
2766 bytes. Most move sequences can be represented using just a byte header;…
2767 are called "mvseq-1" items. Move sequence data using a word header are …
2768 "mvseq-2" items.
2769
2770 Move set data is represented using a length header followed by move ordi…
2771 data. The length header is an unsigned integer that is a byte. The int…
2772 gives the number, possibly zero, of following move ordinal bytes. All m…
2773 sets are be represented using just a byte header; these are called "mvse…
2774 items. (Note the implied restriction that a move set can only have a ma…
2775 of 255 of the possible 256 ordinals present at one time.)
2776
2777
2778 20.3: String data
2779
2780 PGC string data is represented using a length header followed by bytes of
2781 character data. The length header is an unsigned integer that may be a …
2782 word, or a doubleword. The integer gives the number, possibly zero, of
2783 following character bytes. Most strings can be represented using just a…
2784 header; these are called "string-1" items. String data using a word hea…
2785 called "string-2" items and string data using a doubleword header are ca…
2786 "string-4" items. No special ASCII NUL termination byte is required for…
2787 storage of a string as the length is explicitly given in the item header.
2788
2789
2790 20.4: Marker codes
2791
2792 PGC marker codes are given in hexadecimal format. PGC marker code zero …
2793 0x00) is the "noop" marker and carries no meaning. Each additional mark…
2794 defined appears in its own subsection below.
2795
2796
2797 20.4.1: Marker 0x01: reduced export format single game
2798
2799 Marker 0x01 is used to indicate a single complete game in reduced export
2800 format. This refers to a game that has only the Seven Tag Roster data, …
2801 moves, and no annotations or comments. This record type is used as an
2802 alternative to the general game data begin/end record pairs described be…
2803 The general marker pair (0x05/0x06) is used to help represent game data …
2804 can't be adequately represented in reduced export format. There are eig…
2805 items that follow marker 0x01 to form the "reduced export format single …
2806 record. In order, these are:
2807
2808 1) string-1 (Event tag value)
2809
2810 2) string-1 (Site tag value)
2811
2812 3) string-1 (Date tag value)
2813
2814 4) string-1 (Round tag value)
2815
2816 5) string-1 (White tag value)
2817
2818 6) string-1 (Black tag value)
2819
2820 7) string-1 (Result tag value)
2821
2822 8) mvseq-2 (played moves)
2823
2824
2825 20.4.2: Marker 0x02: tag pair
2826
2827 Marker 0x02 is used to indicate a single tag pair. There are two items …
2828 follow marker 0x02 to form the "tag pair" record; in order these are:
2829
2830 1) string-1 (tag pair name)
2831
2832 2) string-1 (tag pair value)
2833
2834
2835 20.4.3: Marker 0x03: short move sequence
2836
2837 Marker 0x03 is used to indicate a short move sequence. There is one ite…
2838 follows marker 0x03 to form the "short move sequence" record; this is:
2839
2840 1) mvseq-1 (played moves)
2841
2842
2843 20.4.4: Marker 0x04: long move sequence
2844
2845 Marker 0x04 is used to indicate a long move sequence. There is one item…
2846 follows marker 0x04 to form the "long move sequence" record; this is:
2847
2848 1) mvseq-2 (played moves)
2849
2850
2851 20.4.5: Marker 0x05: general game data begin
2852
2853 Marker 0x05 is used to indicate the beginning of data for a game. It ha…
2854 associated items; it is a complete record by itself. Instead, it marks …
2855 beginning of PGC records used to describe a game. All records up to the
2856 corresponding "general game data end" record are considered to be part o…
2857 same game. (PGC record type 0x01, "reduced export format single game", …
2858 permitted to appear within a general game begin/end record pair. The ge…
2859 game construct is to be used as an alternative to record type 0x01 in th…
2860 cases where the latter is too restrictive to contain the data for a game…
2861
2862
2863 20.4.6: Marker 0x06: general game data end
2864
2865 Marker 0x06 is used to indicate the end of data for a game. It has no
2866 associated items; it is a complete record by itself. Instead, it marks …
2867 of PGC records used to describe a game. All records after the correspon…
2868 (and earlier appearing) "general game data begin" record are considered …
2869 part of the same game.
2870
2871
2872 20.4.7: Marker 0x07: simple-nag
2873
2874 Marker 0x07 is used to indicate the presence of a simple NAG (Numeric
2875 Annotation Glyph). This is an annotation marker that has only a short t…
2876 identification and no operands. There is one item that follows marker 0…
2877 form the "simple-nag" record; this is:
2878
2879 1) int-1 (unsigned NAG value, from 0 to 255)
2880
2881
2882 20.4.8: Marker 0x08: rav-begin
2883
2884 Marker 0x08 is used to indicate the beginning of an RAV (Recursive Annot…
2885 Variation). It has no associated items; it is a complete record by itse…
2886 Instead, it marks the beginning of PGC records used to describe a recurs…
2887 annotation. It is considered an opening bracket for a later rav-end rec…
2888 the recursive annotation is completely described between the bracket pai…
2889 rav-begin/data/rav-end structures can be nested.
2890
2891
2892 20.4.9: Marker 0x09: rav-end
2893
2894 Marker 0x09 is used to indicate the end of an RAV (Recursive Annotation
2895 Variation). It has no associated items; it is a complete record by itse…
2896 Instead, it marks the end of PGC records used to describe a recursive
2897 annotation. It is considered a closing bracket for an earlier rav-begin
2898 record; the recursive annotation is completely described between the bra…
2899 pair. The rav-begin/data/rav-end structures can be nested.
2900
2901
2902 20.4.10: Marker 0x0a: escape-string
2903
2904 Marker 0x0a is used to indicate the presence of an escape string. This …
2905 string represented by the use of the percent sign ("%") escape mechanism…
2906 PGN. The data that is escaped is the sequence of characters immediately
2907 follwoing the percent sign up to but not including the terminating newli…
2908 is the case with the PGN percent sign escape, the use of a PGC escape-st…
2909 record is limited to use for non-archival data. There is one item that …
2910 marker 0x0a to form the "escape-string" record; this is the string data …
2911 escaped:
2912
2913 1) string-2 (escaped string data)
2914
2915
2916 21: E-mail correspondence usage
2917
2918 *** This section is under development.
2919
2920
2921 Standard: EOF
You are viewing proxied material from codemadness.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.