D E S C R I P T I O N O F P O P E Y E 4 . 5 Some remarks on the distribution of popeye: Popeye is free software. Everybody may get the source of popeye. We believe that this software should be public and does not constitute our own personal property - even we have invested a lot of work in it. This work cannot be waged by money, and also we devote our time to popeye not to earn money. The only restriction that we impose is that Popeye be distributed in its entirety - including all the files listed below. py-engl.txt: The file you are reading now py-deut.txt: German version of this file py-fran.txt: French version of this file license.txt: Popeye License. readme.txt: Short hints for those who want to recompile popeye pydos32.exe: Executable file for MS-DOS (32 Bit, 80386) pywin32.exe: Executable file for MS-Windows-NT/-2000/-XP pywin98.exe: Executable file for MS-Windows-95/-98/-ME py-*.str: These files contain the language dependant texts for popeye. They must reside in the same directory as the executable. Source files: makefile.unx: Makefile for UNIX-systems and friends py.h: Header-file for all C-files. pydata.h: All global data are define here. pydata.c: For the generation of pydata.o. py1.c, py2.c, py3.c py4.c (+py4.h) py5.c py6.c: C-Source of popeye. pyhash.c: dynamic hashing functions. dht: package supporting "dynamic hashing". pyint.c: Procedures for intelligent mode calculation. pyio.c: Everything concerning I/O is coded here. pymsg.c: All procedures for output of messages. pylang.c Language dependent procedures. pyproof.c: Procedures for shortest proofgame (and a=>b) solving pysignal.c: All procedures for UNIX signal handling. pytime.c: All procedures for meassuring time. pymac.h: Segmentspecification of Macintosh's MPW pymsg.h: Defines for the messages of popeye. pyproc.h: Definitions of the procedures. todef.awk: awk-script to convert enumerations in py.h to #defines. toenum.awk: awk-script to convert defines in py.h to enumerations. py-*.msg: The language dependent files for Popeye-messages. pie*.txt: The files for LaTeX output of the piece types supported by Popeye. genpystr.c: Source of the program which generates the py-*.str from py-*.msg. BEISPIEL: Directory which contains example input files in German EXAMPLES: Directory which contains example input files in English DHT: Directory containing C-files for the dynamic hashing package. LATEX: Directory containing LaTeX files. Providing feedback: The preferred way of submitting bug reports or feature requests is through the tools offered on sourceforge.net . Please direct your browser to http://sourceforge.net/tracker/?group_id=200122&atid=972237 (bug reports) http://sourceforge.net/tracker/?group_id=200122&atid=972240 (feature requests) Use the "Add new" link and fill out the "Summary" and "Description" with the information you'd like to submit, then use the "Add Artifact" button to submit your bug report or feature request. Starting popeye: Change the name of your preferred executable to py.exe To operate it from the terminal: py To solve problems recorded in file XX: py XX Commandline parameters: -maxmem You can provide for Popeye for example 40960 kilobyte (or 40 megabye) of memory with -maxmem 40960 resp. -maxmem 40M to speed up solving. Popeye uses this memory to avoid testing the same intermediate positions repeatedly. You can indicate -maxmem 0 to turn off this optimisation. -maxtime Indicate the maximum number of seconds that Popeye may spend on each problem. This command line option is equivalent to the option maxtime that can be used in the problem definition (see below). Example: -maxtime 60 If a problem hasn't been solved after one minute, solving continues with the next problem in the input file (if any). -regression FOR DEVELOPERS MAINLY Popeye version info and solving times are suppressed from output files. Stopping Popeye: press CTRL + C key combination Description of the input language of popeye: The input to popeye is not case sensitive. Every input to popeye starts with the reserved word `BeginProblem'. After entering this command to popeye, following commands may be used: remark, author, origin, title, protocol, condition, option, stipulation, sstipulation, forsyth, pieces, twin The order of these commands is free, and can also occur more times. The last of the commands in the second line is relevant. All of these commands expect further parameters. Lets start with the simpler commands: - remark: this keyword introduces a comment. Everything up to the end of the line will be ignored and has no further effects. - author: The parameter to this command is the author of the problem. All Text up to end of line will be put above the diagram in the output. This input is completely optional and has no effect to the other capabilities of the program. All the input of multiple author commands will be placed on the output. - origin: All the same as the author command. - title: All the same as the author command. - protocol: The parameter to his command is interpreted as filename, and all further output of popeye on the screen is also placed in the given file. If the file exists already, the output of popeye is appended to the file. The file will not be deleted. - condition: All the conditions neccessary for the problem, seperated by blanks or newline, should be given to this command. Through combination of single conditions you can get other already existing conditions: for example: Circe and Immunchess results in StrictCirce The following conditions are implemented: RexInclusive RexExclusive Circe MirrorCirce Madrasi Volage Hypervolage BichromChess MonochromChess GridChess KoeKo BlackEdgemover WhiteEdgemover Leofamily ChineseChess Patrouille PWC NoCapture ImmunChess MirrorImmunChess ContactGridChess Imitator CavalierMajeur HaanerChess CouscousCirce ChameleonCirce EquipollentsCirce FileCirce Sentinelles BlackMaximummer WhiteMaximummer BlackMinimummer WhiteMinimummer MagicSquares DiagramCirce Tibet DoubleTibet Hole (= a square where you cannot move to) BlackMustCapture WhiteMustCapture TransmutedKings BlackFollowMyLeader WhiteFollowMyLeader DuellistChess ParrainCirce ContraParrain SymmetryCirce NoIProm No Promotion to Imitator allowed VogtlaenderChess EinsteinChess Bicolores NewKoeko CirceClone AntiCirce MirrorFileCirce AntipodeanCirce MirrorCirceClone MirrorAntiCirce DiagramAntiCirce FileAntiCirce SymmetryAntiCirce MirrorAntiCirce AntipodeanAntiCirce EquipollentsAntiCirce FileImmunChess DiagramImmunChess MirrorFileImmunChess SymmetryImmunChess AntipodeanImmunChess EquipollentsImmunChess CageImmunChess ReversalEinsteinChess SuperCirce RelegationChess NorskSjakk TraitorChess AndernachChess BlackForcedSquare WhiteForcedSquare BlackConsequentForcedSquare WhiteConsequentForcedSquare ReflectiveKings ChameleonChess FunctionaryChess GlasgowChess AntiAndernachChess FrischaufCirce VerticalMirrorCirce Isardam ChecklessChess DiametralCirce PromOnly ExclusiveChess Marscirce MarsMirrorCirce PhantomChess WhiteTransmutedKing BlackTransmutedKing WhiteReflectiveKing BlackReflectiveKing AntiEinsteinChess MirrorCouscousCirce BlackRoyalSquare WhiteRoyalSquare CirceAssassin PlusChess BrunnerChess CentralChess ExtinctionChess RepublicanChess ActuatedRevolvingBoard MessignyChess Woozles BiWoozles Heffalumps BiHeffalumps WhitePromSquares BlackPromSquares NoWhitePromotion NoBlackPromotion EiffelChess ActuatedRevolvingCentre Maximummer UltraSchachZwang WhiteUltraSchachZwang BlackUltraSchachZwang ShieldedKings StingChess NoWhiteCapture NoBlackCapture AprilChess AlphabeticChess LineChameleonChess CirceTurncoats CirceDoubleAgents AMU SingleBox MAFF OWU WhiteOscillatingKings BlackOscillatingKings AntiKings AntiMarsCirce AntiMarsMirrorCirce AntiMarsAntipodeanCirce WhiteSuperTransmutingKing BlackSuperTransmutingKing AntiSuperCirce UltraPatrol SwappingKings RoyalDynasty SAT StrictSAT Take&MakeChess BlackSynchronMover WhiteSynchronMover BlackAntiSynchronMover WhiteAntiSynchronMover Masand BGL AnnanChess NormalPawn BlackChecks GenevaChess VaultingKings WhiteVaultingKing BlackVaultingKing ProteanChess Lortap Antikoeko CastlingChess ChameleonPursuit LosingChess GhostChess CageCirce Football WhiteAlphabeticChess BlackAlphabeticChess KobulKings After the conditions Imitator, MagicSquare, Hole, FrischaufCirce, WhitePromSquares, BlackPromSquares or one of the ForcedSquares, list the squares on which the imitators are to be placed, where the special squares are located, where promoted pieces (FrischaufCirce) are located, or where the white or black promotionsquares are located. The condition PromOnly must be followed by a list of piece types, separated through blanks. Promotion is only allowed into those piece types. The condition ChameleonCirce can be followed by a list of piece types, separated by blanks. The list determines how pieces change their type before being reborn. (Examples: "ChameleonCirce S B R Q S" is ordinary Chameleon-Circe and equivalent to "ChameleonCirce" "ChameleonCirce S Q R B S" gives reverse ChameleonCirce.) After some of the Circe, Immun, Madrasi, Phantomchess or Genevachess conditions you can enter "RexInclusiv". After all Anticirce conditions "Cheylan" or "Calvet" can be entered - according to the type desired; Calvet is the default. After the Isardam condition, "TypeB" can be entered. After the SingleBox condition, "Type1", "Type2" or "Type3" can be entered. After the RepublicanChess condition, "Type1" or "Type2" can be indicated; Type2 is the default. After the Sentinelles condition "PionAdvers", "PionNeutre", "ParaSentinelles", or "Berolina" can be entered, and also "MaximumWhite", "MaximumBlack" or "MaximumTotal" followed by a number. After MessignyChess, (Bi)Woozles, (Bi)Heffalumps and Protean Chess you can enter "RexExclusiv". After the WhiteOscillatingKings or BlackOscillatingKings condition "TypeB" or or "TypeC" can be entered. After GridChess, various variantes can be entered. VerticalShift, HorizontalShift and DiagonalShift produce the normal grid shifted by one rank and/or file. E.g. the cell containing the square a1 consists of: VerticalShift: a1b1 HorizontalShift: a1a2 DiagonalShift: a1 Orthogonal followed by a list of files (to the left of any grid lines) and ranks (below any grid lines) all without spaces between. Irregular followed by space-separated lists of square groups forming the grid cells. N.B. The largest square group can be omitted as all remaining squares not specified will form another group. For example the standard grid can be described by any of condition grid condition grid orthogonal bdf246 condition grid irregular a8a7b8b7 c8c7d8d7 ... Specifying condition grid irregular with no squares listed will make all moves illegal. GridLine followed by a list of lines will add extra lines to the grid. This should be used only to specify partial lines that do not subdivide a grid cell, (i.e. to allow some moves to be legal within a grid cell) as specifying cells is more efficient. The grid lines must be specified in 4 characters e.g. condition grid gridline Ha24 Vc61 will draw a horizontal grid line from the bottom-left corner of a2 for 4 squares and a vertical line from the bottom-left corner of c6 for 1 square, on top of the normal grid. To draw grid lines on a blank board, i.e. with no regular grid, specify condition grid irregular gridline Ha24 Vc61 (N.B. In the context of grid chess, moves go as straight lines from square centre to square centre; pieces that do not move in straight lines may not behave as expected; moves are permitted which merely touch the end of a gridline (e.g with gridline Ve11 and wKd1, the move Kd1-e2 is legal). After any of the VaultingKings conditions, a space-separated list of piece types may be given. The checked king will move additionally as one of the piece types in the list. If the option Transmuting is given, the checked king will move only as one of the pieces in the list (not as king). If no piece type is given, the checked king (additionally) moves as equihopper. After the MustCapture, Maximummer and Minimummer conditions, the keyword "Ultra" indicates that the respective Ultra condition is intended. - option: Everything which should be in effect should be given here as blank seperated list. The following is recognized: Try calculate if a move is a try. Defence this option is followed by a number indicating the number of defences which should be taken into consideration. For instance Defence 1 all real tries are calculated. SetPlay calculate setplay. Threat for moremovers: This option must be followed by an integer. The opposit party has defended when there is no threat in less or equal this number of moves. WhiteToPlay white starts moving in helpplay. Variation show threats and variations. MoveNumbers Movenumber, already calculated move and cumulated solving time on output. StartMoveNumber This option is followed by the Movenumber popeye was interrupted at. NoWk without white king NoBk without black king Duplex calculate stipulation for both sides NoThreat calculate variations without calculating threats MaxSolutions This option must be followed by an integer. Popeye stops calculating if this number of solutions are reached. MaxFlightsquares for moremovers: This option must be followed by an integer. The opposit party has defended when the number of flightsquares for it's king are more or equal this number. EnPassant Must be followed by at most two squares. A possible enpassant-key to this square(s) is calculated. CastlingMutuallyExclusive Castlings with the rooks that occupy the indicated squares in the game array are mutually exclusive. Example: CastlingMutuallyExclusive a1h8 For indicating more than one pair of mutually exclusive castlings, the option can used multiple times. NoBoard The chessboard is not printed to screen or into file. NoShortVariations Short variations are suppressed on output. HalfDuplex calculate stipulation only for the opponent side. PostKeyPlay The position entered is considered to be the position after the key. Just the solution play is analysed. NonTrivial m n A special option to solve/cook/test long self and (semi)reflex problems. The second argument n deter- mines which black moves are considered to be trivial - a move that can be met by a s#n (or r=n resp.). In long problems (more than n moves) black has at every stage at least one nontrivial move. I. e. a move that doesnot lead to a s#n. The first argument m determines how many additional nontrivial moves can be granted to black by white during the whole solving procedure. Example: nontr 0 1. This is the most restrictive option. White forced to play moves that leave black with only one move not met by a s#1. Intelligent intelligent (quick) solving of helpmate-moremovers. After the intelligent option, the maximum number of solutions per mating position can be given. MaxTime This option must be followed by an integer. Popeye stops calculating if this number of seconds solving time are reached. NoCastling This option must be followed by the squares of those pieces that cannot castle anymore in the diagram position. Quodlibet In s# or r# also direct mates are a solution. StopOnShortSolutions Calculation is terminated after detecting of short solutions. Beep This option can be followed by an integer. Each time Popeye has found a solution it beeps a number of times. SuppressGrid (Grid Chess) Suppress the rendition of grid lines in text and LaTeX output. WriteGrid (Grid Chess) Writes an additional board that the partition of the board into grid cells. Useful for irregular grids. KeepMatingPiece Stop solving when there is no piece left that could deliver mate. LastCapture Follow by a colour, piece and square as in the piece command. Specifies piece captured on move leading to the diagram. GoalIsEnd applicable if the goal doesn't lead to immobility (e.g. z, x): the play ends if the wrong side reaches the goal. - stipulation: popeye knows the following stipulations: any meaningful combination of {#= } {#= } {!= } {!= } {00 } {00 } {% } {% } {~ } {~ } {ep } {ep } {SER- } {H } {# } {# } {PSER-} {S } {= } {= } {m->} + {EXACT-} + {PHSER-}+ {R } + ( + {== } + ) + {== } + n {SEMI-} {HS} {+ } {+ } {RECI-} {HR} {Zxy} {Zxy } {x } {x } {## } {## } {##!} {##! } {ct } {ct } {<> } {<> } {ctr} {ctr } {<>r} {<>r } {c81} {c81 } {dia } + n{.5} {SER-} + {dia } + n {a=>b} + n{.5} {SER-} + {a=>b} + n (m, n are the number of moves) for example: #3 mate in three moves HZg74 help-targetsquare-g7 in 4 moves S+2 self-check in 2 moves R==3 reflex-doublestalemate in 3 moves HS#3 helpselfmate in 3 moves (= help forced selfmate) SER-+7 series-check in 7 moves SEMI-R+4 semi-reflex-check in 4 moves x3 Capture in 3 moves RECI-H#2 reciprocal helpmate in 2 (= Grazer helpmate) RECI-H(=)#2 reciprocal help(stale)mate in 2 moves (black delivers stalemate or allows being mated) SER-%4 series-Win_a_Piece in 4 moves H##!4 help-"gegenmatt" in 4 moves SER-H##3 series-help-"beidmatt" in 3 moves 2->ser-h#4 white makes 2 moves, then ser-h#4 h003 help-castling in 3 moves dia6.5 Shortest Proofgame in 13 halfmoves (after the seventh move of white) ser-dia9 Series-Proofgame in 9 moves reci-h(=)#4 helpalternative(stale)mate in 4 moves ser-!=7 Series-AutoStalemate in 7 moves ser-ct10 Series-direct circuit (switchback) in 10 moves (of W piece) h<>3 help exchange place in 3 moves (Bl helps W swap 2 pieces from diagram) ser-sctr2 series self circuit by rebirth in 2 moves (W forces Bl to complete switchback of a W piece) ser-h<>r5 series help exchange place by rebirth in 5 moves (Bl helps W complete by rebirth the exchange of two Bl pieces) #=2 mate or stalemate in 2 moves h~1 any helpmove HR#3 helpreflexmate in 3 moves (= help forced reflexmate) pser-h#6 Parry series helpmate in 6 phser-s#6 Parry series selfmate in 6 (parry moves are help moves) SEMI is valid only in combination with direct reflex-play. All these stipulations must be followed by a number giving the count of moves. - sstipulation: The stipulation can also be indicated in "structured form". This form allows all stipulations to be indicated that can also be indicated in traditional form using the command "stipulation". In addition, it allows many more stipulations to be indicated. (Exception: pser stipulations are not supported currently) With sstipulation, the play is described as a tree structure. Play starts at the root, continues through branches that may fork, and ends in one or more leaves. After the keyword sstipulation, indicate the root by specifying the side to move, then the branches and the leaves in the language as specified below. Anatomy of a sstipulation ------------------------- Example: sstipulation white 5s[#] In this stipulation, it is White to move. Play consists of a branch that leads into a leaf. The branch consists of 5 *s*eries moves. The leaf simply tests whether a mate has been reached. The definition of a branch normally consists of: - the maximum length in half-moves (in the example: 5) - the type of the branch (s for series) - forks ([#]) - Constraints (don't occur in the example) Play ends in one or multiple leaves. Their definition normally consists of the goal (in the example: #) to be reached. When changing from a branch to another or to a leaf, the right to move is changed. In the example, it is Black to move in the leaf, i.e. the leaf tests whether Black is mate. The example is thus a synonym for stipulation ser-#5 Branch types ------------ Type Notation Examples Synonyms as stipulation Series s 5s[#] ser-#5 "Battle play" ad 3a[+]d, 4ad[x] +2, sx2 da 3d[==]a s==2 option postkeyplay Help play hh 5h[=]h h=2.5 The letters s (series move), a (attacking move), d (defending move) and h (help move) each represent a half-move. A fork following a, h or s defines what the respective move is supposed to reach, and a fork following d what the move defends against. Note: a da branch is solvable if the side to move DOES NOT have a refutation. Fork into a branch ------------------ A fork can also lead into a nested branch. Examples Synonyms as stipulation 3a[1a[#]d]d semi-r#2 4hh[1a[#]d] not supported (Help-Semireflexmate in 2.5) 6s[1d[#]a] ser-s#6 Branches with more than one fork -------------------------------- For a half-move, both a fork into a leaf and into a branch can be indicated. And for battle and help branches, forks can be indicated for both half-moves. Examples Synonyms as stipulation 4a[#=]d[#=] s#=2 option quodlibet 3a[#][1a[#]d]d semi-r#2 option quodlibet Logical expressions ------------------- The following operators can be applied to leaves and branches to form expressions: Operator Meaning ! Negation | OR & AND Examples Meaning !# the side to move is not mate !3a[#]d there is no solution to a direct twomover 4ad[#] | 3h[#]h s#2 or h#1.5 1h[#]h & 2hh[#] #1 and h#1 (i.e. reci-h#1) Both operands of the binary operators have to belong to the same of the following groups: - leaf # = zh1 ... - attack ad hh s - defense da An expression belongs to the same group as its operand(s) and can therefore be the operand of an expression, e.g. (as alternative to triplets): 3a[#]d | 4hh[#] | 4ad[#] The three partial expressions as well as the | expressions belong to the attack group. Operators are normally evaluated from left to right. If necessary, use () to define the proper precedence. E.g. 4hh[#] & ( 4ad[#] | 4hh[=] ) Constraints ----------- Constraints can be indicated in branches using curly braces ({}). Example Synonym as stipulation 3a[1a[#]d]d{!1a[#]d} r#2 Note: even if the constraint follows the d, it is enforced BEFORE each attacking move (including the first one!). The problem has thus no solution if the constraint is violated in the diagram. The two principal differences between nested branches/leaves and restrictions are: - the requirement expressed by the nested branch/leaf only needs to be fulfilled at the end of play; a restriction, however, has to be fulfilled each time before the respective move is played - the moves played for the verification of a constraint don't appear in the printed solution, with the following 2 exceptions: * if a constraint is violated in the diagram position * if the refutation of a try leads to a violated constraint ("reflex defense") Branches with minimal length ---------------------------- The syntax m:n can be used to define a branch with minimal length (m=minimal, n=maximal length): Examples synonym as stipulation 4:4hh[#] exact-h#2 3:5s[#] not supported (series mate in 3 to 5 moves) Special operators at the beginning of a branch ---------------------------------------------- The operators >, / and - can occur in this order at the beginning of branches. > at the beginning of the definition of a nested branch ends play in the containing branch in positions where the nested branch has a solution. E.g. a problem with sstipulation white 3h[1a[x]d]h can have the solutions 1.g3-g4 h5*g4 x 1.g3-g4 h5*g4 2.h4-h5 g4*f3 x The longer sequence is a solution although the goal has been reached after the first two half-moves already. If play is to end as soon as the goal is reached, write sstipulation white 3h[>1a[x]d]h The operator / at the beginning of a nested branch prevents the moves played in that branch from appearing in the output. E.g. the capturing moves forced by Zugzwang in CapZug stipulations are not part of the solution. Help CapZug in 2.5 moves is thus defined as sstipulation black - 5h[/1d[x]a{!+}]h The side to move at the beginning of a branch can be changed using the - operator. Examples Synonyms as stipulation - 7h[#]h h#3.5 3h[- 4hh[#]]h not supported (h#4 without 2nd white move) - forsyth: With this command you can enter the position in forsyth notation. All these commands up to now are very easy to use (except maybe sstipulation). A little bit more elaborate is the command - pieces: This command specifies all the pieces belonging to the problem. After this keyword, the color of the following pieces must be given: This is one of: White Black Neutral After the color specification Chameleon Jigger Kamikaze Paralysing Royal Volage Functionary HalfNeutral HurdleColourChanging (only for hoppers !) Protean Magic Uncapturable may be given. All the pieces given after this will have these attributes. After this specification follows the list of pieces: First the type of the piece followed by the list of squares the piece should be placed on. By giving a new color specifiation pieces of another color may be entered without repeating the pieces command. Popeye knows the following piece types: 15 1,5-leaper 16 1,6-leaper 24 2,4-leaper 25 2,5-leaper 35 3,5-leaper 36 3,6-leaper 37 3,7-leaper ag Andernach grasshopper al alfil am amazon an antelope ao maorider ar archbishop b bishop b1 bouncer b2 rook bouncer b3 bishop bouncer be bishop eagle bh bishop hopper bi bison 1,3+2,3 leaper bk bouncy knight bl bishop-lion bm bishop moose bn bouncy nightrider (continues ride by bouncing in any direction from board edge) bo bob bp berolina pawn br bishop/rook hunter bs berolina superpawn bt boyscout bu root-25-leaper (bucephale) bw bishop sparrow c cardinal ca camel cg contra grasshopper ch camelrider hopper cp chinese pawn cr camelrider ct CAT (cavalier trojan) cy charybdis da dabbabba db doublebishopper dg doublegrasshopper dk doublerookhopper do dolphin grasshopper + kangaroo dr dragon ds ("Diagonalspiralspringer") du dummy ea eagle eh edgehog ek erlking em empress eq equihopper et elephant 0,1+1,1+1,2 rider f friend fe fers fr fersrider like bishop, but different rebirth square g grasshopper g2 grasshopper-2 g3 grasshopper-3 gh gnurider hopper gi giraffe gl gral alfil + rookhopper gn gnu gr gnurider gt girlscout ha hamster k king ka kangaroo kh kinghopper l locust lb bishop locust le leo li lion ln nightrider locust lr rook locust ls rose locust m moose ma mao mg marguerite g+sw+ea+m+ha ml maorider lion mm moarider lion mo moa n nightrider na nao chinese nightrider nd nereide ne nonstop equihopper nh nightrider hopper nl nightrider lion o orphan oa moarider ok okapi knight + zebra or Orix English equihopper on queen lines p pawn pa pao pp reverse pawn moves opposite to normal p and promotes at opp end of board pr princess q queen qe equi english equi approacher stopable qf equi french equi approacher nonstopable qn quintessence = (3,1)-Zigzag Nightrider (e.g. a1-b3-d2-e4-g3...) qq querquisite r rook ra rao chinese rose rb reflecting bishop re rook eagle rf root-50-leaper rh rook hopper rk radial leaper (aka radial knight) rl rook-lion rm rook moose rn rose-lion rp rose-hopper ro rose rr rook/bishop hunter rt rabbit rw rook sparrow s knight s1 (1,1)-Zigzag Nightrider (e.g. b1-a3-c2-b4-d3...) s2 (2,0)-Zigzag Nightrider (e.g. a1-b3-c1-d3-e1...) s3 (3,3)-Zigzag Nightrider (e.g. a1-b3-d4-e6-g7...) s4 (4,0)-Zigzag Nightrider (e.g. a1-c2-e1-g2...) si sirene sk skylla so scorpion sp superpawn sq squirrel ss ("Spiralspringer") sw sparrow tr triton uu ubiubi va vao wa waran we wazir wr wazirrider like rook, but different rebirth square z zebra ze Zebu 1,3+1,4 knight zh zebrarider hopper zr zebrarider X/Y X/Y hunter generalized hunter: away from the homebase like a n X, in direction of the homebase like an Y; horizontal moves not allowed - Twin: Solving/testing of positions obtained by small changes of the initial position. The following specifications are supported: Stipulation ...: The stipulation is changed. See the repective basic command. Condition ...: Cange of fairy conditions. The old conditions are subsituted by those put in. Move : Move the piece from square1 to square2. A piece accidentally standing on square2 will be removed. Example: twin move a3 b4. Exchange : The pieces on and exchange places. Example: twin exchange a3 b4. Remove : The piece located on the square specified is removed. Example: twin remove e5. Substitute : All pieces of type are replaced by pieces of type . Colour and further piece specifications (like paralysing etc.) are not affected. Example: twin substitute R B. All rooks are replaced by bishops. Add : Add pieces. Example: twin add black para NHa6 - a black paralysing NightriderHopper is added on a6. See the basic command "pieces". Rotate n: Turns the board by n degrees to the left (n=90, 180, 270). Example: twin rotate 180. Mirror a1<-->h1: Mirrors the position on the vertical middle line. Mirror a1<-->a8: Mirrors the position on the horizontal middle line. Mirror a1<-->h8: Mirrors the position on the diagonal a8-h1. Mirror h1<-->a8: Mirrors the position on the diagonal a1-h8. So, not the mirror line is given, but square into which a1 (or h1) is turned into. Shift : Shift the whole position into the direction determined by the two squares entered. Example: twin shift a1 a2 - all pieces are moved one square up. PolishType: All pieces change colour. More than one change may be specified, for example twin rem e7 add white qe8. As you can see the twinning commands can abreviated. By default the changes refer to the position initially set. Alternatively the changes can be applied to the position solved most recently. Just enter "continued" (or "cont") immediately after "twin". Example twin cont rem a1. - ZeroPosition: This command can be used alternatively to the command "twin". It indicates that the initial position is not for solving. The command must be followed by the changes for the first position to be solved. Example: zero move b4 d5 twin move c5 b5. When all data have been entered to describe completely the problem, the solving may be started by giving the keyword `endproblem' to popeye. Immediately after reading this, provided no input errors were discovered, popeye starts to solve the problem. Here comes a sample: BeginProblem Author Unknown Origin Also Unkown Stipulation #2 Pieces White Ka3 Ra8 Black Kb1 Option MoveNumbers Try Set Variation EndProblem This input seems long and cumbersome. But Popeye recognizes the keywords as long as the shortage is unique. The above input may also be written like this: Begi Auth Unknown Orig Also Unkown Stie #2 Piec Whit Ka3 Ra8 Blac Kb1 Opti Move Try Set Vari Endp In the future the minimum length of unique shortages changes, when popeyes capabilities are increased. But we try to keep all keywords uniq within the first four characters. If they are now uniq with less than four, its not guaranteed for the future. If there are more problems to be solved in one run, you can replace the `EndProblem' directive with `NextProblem'. After this, popeye expects an new problem specification, after he has solved the previous one. The last problem specification should be finished with `EndProblem'. Special things depending on your operating system: UNIX, SINIX, XENIX, ULTRIX, MUNIX, SUNOS, SOLARIS, AIX, HPUX, IRIX, LINUX, BSD: 1) Maximum depth of calculation: 999 half-moves. 2) Solving can be interrupted anytime with the CTRL-C key. Windows-95/-98/-ME: 1) Maximum depth of calculation: 699 half-moves. 2) Solving can be interrupted anytime with the CTRL-C key. 3) Maximum amount of usable memory: 768 MB Windows-NT/-2000/-XP: MS-DOS (32 Bit), DR-DOS (32 Bit): 1) Maximum depth of calculation: 699 half-moves. 2) Solving can be interrupted anytime with the CTRL-C key. MVS, ATARI, macintosh: will EVENTUALLY be supported by: MVS: Harald Denker ATARI: Harald Denker macintosh: Stefan Brunzen MS-DOS (16 Bit), DR-DOS (16 Bit): BS2000: OS/2: VMS: Not supported any more ... Thomas Maeder, Stephen Emmerson, Norbert Geissler, Torsten Linss, Elmar Bartel