if(promoChar == 'd' && (piece == WhiteRook || piece == BlackRook) ||
promoChar == 'h' && (piece == WhiteBishop || piece == BlackBishop) ||
promoChar == 'g' && (piece <= WhiteFerz || piece <= BlackFerz && piece >= BlackPawn) )
- promoChar = '^'; // allowed ICS notations
+ promoChar = '+'; // allowed ICS notations
if(appData.debugMode)fprintf(debugFP,"SHOGI promoChar = %c\n", promoChar ? promoChar : '-');
- if(promoChar != NULLCHAR && promoChar != '^' && promoChar != '=')
+ if(promoChar != NULLCHAR && promoChar != '+' && promoChar != '=')
return CharToPiece(promoChar) == EmptySquare ? ImpossibleMove : IllegalMove;
else if(flags & F_WHITE_ON_MOVE) {
if( (int) piece < (int) WhiteWazir &&
piece == WhiteKnight && rt > BOARD_HEIGHT-3) /* promotion mandatory */
cl.kind = promoChar == '=' ? IllegalMove : WhitePromotion;
else /* promotion optional, default is defer */
- cl.kind = promoChar == '^' ? WhitePromotion : WhiteNonPromotion;
- } else cl.kind = promoChar == '^' ? IllegalMove : NormalMove;
+ cl.kind = promoChar == '+' ? WhitePromotion : WhiteNonPromotion;
+ } else cl.kind = promoChar == '+' ? IllegalMove : NormalMove;
} else {
if( (int) piece < (int) BlackWazir && (rf < BOARD_HEIGHT/3 || rt < BOARD_HEIGHT/3) ) {
if( (piece == BlackPawn || piece == BlackQueen) && rt < 1 ||
piece == BlackKnight && rt < 2 ) /* promotion obligatory */
cl.kind = promoChar == '=' ? IllegalMove : BlackPromotion;
else /* promotion optional, default is defer */
- cl.kind = promoChar == '^' ? BlackPromotion : BlackNonPromotion;
- } else cl.kind = promoChar == '^' ? IllegalMove : NormalMove;
+ cl.kind = promoChar == '+' ? BlackPromotion : BlackNonPromotion;
+ } else cl.kind = promoChar == '+' ? IllegalMove : NormalMove;
}
}
} else
if (c == 'x') c = NULLCHAR; // get rid of any 'x' (which should never happen?)
if(gameInfo.variant == VariantShogi) {
- /* [HGM] Shogi promotions. On input, '=' means defer, '^' promote. Afterwards, c is set to '+' for promotions, NULL other */
+ /* [HGM] Shogi promotions. On input, '=' means defer, '+' promote. Afterwards, c is set to '+' for promotions, NULL other */
if(closure->rfIn != DROP_RANK && closure->kind == NormalMove) {
ChessSquare piece = closure->piece;
if (c == 'd' && (piece == WhiteRook || piece == BlackRook) ||
c == 'h' && (piece == WhiteBishop || piece == BlackBishop) ||
c == 'g' && (piece <= WhiteFerz || piece <= BlackFerz && piece >= BlackPawn) )
- c = '^'; // allowed ICS notations
- if(c != NULLCHAR && c != '^' && c != '=') closure->kind = IllegalMove; // otherwise specifying a piece is illegal
+ c = '+'; // allowed ICS notations
+ if(c != NULLCHAR && c != '+' && c != '=') closure->kind = IllegalMove; // otherwise specifying a piece is illegal
else if(flags & F_WHITE_ON_MOVE) {
if( (int) piece < (int) WhiteWazir &&
(closure->rf >= BOARD_HEIGHT-(BOARD_HEIGHT/3) || closure->rt >= BOARD_HEIGHT-(BOARD_HEIGHT/3)) ) {
piece == WhiteKnight && closure->rt > BOARD_HEIGHT-3) /* promotion mandatory */
closure->kind = c == '=' ? IllegalMove : WhitePromotion;
else /* promotion optional, default is defer */
- closure->kind = c == '^' ? WhitePromotion : WhiteNonPromotion;
- } else closure->kind = c == '^' ? IllegalMove : NormalMove;
+ closure->kind = c == '+' ? WhitePromotion : WhiteNonPromotion;
+ } else closure->kind = c == '+' ? IllegalMove : NormalMove;
} else {
if( (int) piece < (int) BlackWazir && (closure->rf < BOARD_HEIGHT/3 || closure->rt < BOARD_HEIGHT/3) ) {
if( (piece == BlackPawn || piece == BlackQueen) && closure->rt < 1 ||
piece == BlackKnight && closure->rt < 2 ) /* promotion obligatory */
closure->kind = c == '=' ? IllegalMove : BlackPromotion;
else /* promotion optional, default is defer */
- closure->kind = c == '^' ? BlackPromotion : BlackNonPromotion;
- } else closure->kind = c == '^' ? IllegalMove : NormalMove;
+ closure->kind = c == '+' ? BlackPromotion : BlackNonPromotion;
+ } else closure->kind = c == '+' ? IllegalMove : NormalMove;
}
}
- if(closure->kind == WhitePromotion || closure->kind == BlackPromotion) c = '^'; else
+ if(closure->kind == WhitePromotion || closure->kind == BlackPromotion) c = '+'; else
if(closure->kind == WhiteNonPromotion || closure->kind == BlackNonPromotion) c = '=';
} else
if (closure->kind == WhitePromotion || closure->kind == BlackPromotion) {
} else if (c != NULLCHAR) closure->kind = IllegalMove;
closure->promoChar = ToLower(c); // this can be NULLCHAR! Note we keep original promoChar even if illegal.
- if(c != '^' && c != '=' && c != NULLCHAR && CharToPiece(c) == EmptySquare)
+ if(c != '+' && c != '=' && c != NULLCHAR && CharToPiece(c) == EmptySquare)
closure->kind = ImpossibleMove; // but we cannot handle non-existing piece types!
if (closure->count > 1) {
closure->kind = AmbiguousMove;
else { *outp++ = (rt+ONE-'0')/10 + '0';*outp++ = (rt+ONE-'0')%10 + '0'; }
if (gameInfo.variant == VariantShogi) {
/* [HGM] in Shogi non-pawns can promote */
- if(promoChar == '^') promoChar = '+';
*outp++ = promoChar; // Don't bother to correct move type, return value is never used!
}
*outp = NULLCHAR;