Advertisement
Seif45

Chess

Dec 16th, 2018
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 55.79 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. char pieces[12][12];
  6. char gameBoard [12][12];
  7. char deadPieces[37];
  8. int undo[500][5];
  9. int redo[500][4];
  10. int pUndo;
  11. int pRedo;
  12. char play[5];
  13. int index[4];
  14. int died=1;
  15. int diedLast;
  16. int i,j,k,l;
  17. int valid;
  18. int turn;
  19. int king1x, king1y, king2x, king2y;
  20. int checkWhite, checkBlack;
  21. int checkMateBlack,checkMateWhite;
  22.  
  23. void readLine(char s[],int n)
  24. {
  25.     int ch, i=0;
  26.     while((ch=getchar()) != '\n'){
  27.         if(i<n)
  28.         {
  29.             s[i++]=ch;
  30.         }
  31.     }
  32.     s[i]='\0';
  33. }
  34.  
  35. void gameBoardBorders();
  36. void checkerBoard();
  37. void startingChessBoard();
  38. void printGame ();
  39. void scanAndConvert();
  40. void checkValidMove();
  41. void swapElements ();
  42. void reverseSwapElement();
  43. void rook();
  44. void knight();
  45. void king();
  46. void king();
  47. void bishop();
  48. void queen();
  49. void pawn();
  50. void moveSet();
  51. void fullKingCheckWhite(int x,int y);
  52. void fullKingCheckBlack(int x,int y);
  53. void kingWhiteCheckMate();
  54. void kingBlackCheckMate();
  55. void checkMateBlackPath(int x,int y);
  56. void checkMateWhitePath(int x,int y);
  57. void kingWhiteStaleMate();
  58. void kingBlackStaleMate();
  59. void fullPieceCheckBlack(int x,int y);
  60. void fullPieceCheckWhite(int x,int y);
  61. void saveRedo();
  62. void saveUndo();
  63.  
  64. int main(){
  65.     startingChessBoard();
  66.     gameBoardBorders();
  67.     checkerBoard();
  68.     printGame();
  69.     king1x=9, king1y=6, king2x=2, king2y=6;
  70.     turn=0;
  71.     diedLast=0;
  72.     checkWhite=0;
  73.     checkBlack=0;
  74.     pUndo=0;
  75.     pRedo=0;
  76.     int r, u;
  77.     FILE *fPointer;
  78.     while (1){
  79.         valid = 0;
  80.         checkMateBlack=-1;checkMateWhite=-1;
  81.         if (turn%2==0){
  82.             while ((valid==0)||(checkWhite==1)){
  83.                 pUndo=0;
  84.                 printf("\nWhite's turn:\t (for undo press \"U\" / for redo press \"R\" / for save press \"S\" / for load press \"L\")\n");
  85.                 scanAndConvert();
  86.                 while ((play[0]=='S')&&(play[1]=='\0')){
  87.                     printf("Enter the file name.\n");
  88.                     char saveName[100];
  89.                     readLine(saveName,100);
  90.                     fPointer = fopen(saveName,"w");
  91.                     for (i=2;i<=9;i++){
  92.                         for (j=2;j<=9;j++){
  93.                             fputc(pieces[i][j],fPointer);
  94.                         }
  95.                     }
  96.                     fputc(turn,fPointer);
  97.                     fclose(fPointer);
  98.                     printf("Game successfully saved.\n");
  99.                     printf("\nWhite's turn:\t (for undo press \"U\" / for redo press \"R\" / for save press \"S\" / for load press \"L\")\n");
  100.                     scanAndConvert();
  101.                 }
  102.                 if ((play[0]=='L')&&(play[1]=='\0')){
  103.                     printf("Enter the file name to be loaded.\n");
  104.                     char saveName[100];
  105.                     readLine(saveName,100);
  106.                     fPointer = fopen(saveName,"r");
  107.                     if (fPointer){
  108.                         for (i=2;i<=9;i++){
  109.                             for (j=2;j<=9;j++){
  110.                                 pieces[i][j]=fgetc(fPointer);
  111.                             }
  112.                         }
  113.                         turn=fgetc(fPointer);
  114.                         fclose(fPointer);
  115.                         printGame();
  116.                         printf("Game loaded successfully.\n");
  117.                         break;
  118.                     }
  119.                     else {
  120.                         printf("File doesn't exist.\n");
  121.                     }
  122.                 }
  123.                 if((play[0]=='U'&&turn>0)&&(play[1]=='\0')){
  124.                     for(u=0;u<4;u++){
  125.                         index[u]=undo[turn-1][u];
  126.                     }
  127.                     diedLast=undo[turn-1][4];
  128.                     saveRedo();
  129.                     reverseSwapElement();
  130.                     turn--;
  131.                     pUndo=1;
  132.                     break;
  133.                 }
  134.                 else if((play[0]=='R'&&pRedo-1>=0)&&(play[1]=='\0')){
  135.                     for(r=0;r<4;r++){
  136.                         index[r]=redo[pRedo-1][r];
  137.                     }
  138.                     saveUndo();
  139.                     swapElements();
  140.                     undo[turn][4]=diedLast;
  141.                     pRedo--;
  142.                     break;
  143.                 }
  144.                 else{
  145.                     if(valid==1){
  146.                         checkValidMove();
  147.                     }
  148.                     if(valid==1){
  149.                         moveSet();
  150.                     }
  151.                     if (valid==1){
  152.                         saveUndo();
  153.                         swapElements();
  154.                         undo[turn][4]=diedLast;
  155.                     }
  156.                     if(valid==1){
  157.                         fullKingCheckWhite(king1x,king1y);
  158.                     }
  159.                     if ((valid==1)&&(checkWhite==1)){
  160.                         printf("Invalid move.\n");
  161.                         reverseSwapElement();
  162.                     }
  163.                 }
  164.             }
  165.             if (play[0]=='L'){
  166.                 continue;
  167.             }
  168.             printf("\n");
  169.             printGame();
  170.             kingWhiteStaleMate();
  171.             if (checkMateBlack==0){
  172.                 printf("Stalemate.\n");
  173.                 exit(EXIT_SUCCESS);
  174.             }
  175.             fullKingCheckBlack(king2x,king2y);
  176.             if (checkMateBlack==1){
  177.                 kingBlackCheckMate();
  178.                 if (checkMateWhite==0){
  179.                     printf("Check mate.\n");
  180.                     exit(EXIT_SUCCESS);
  181.                 }
  182.             }
  183.             fullKingCheckBlack(king2x,king2y);
  184.             if (checkBlack==0){
  185.                 kingBlackStaleMate();
  186.                 if (checkMateWhite==0){
  187.                     printf("Stalemate.\n");
  188.                     exit(EXIT_SUCCESS);
  189.                 }
  190.             }
  191.             fullKingCheckBlack(king2x,king2y);
  192.             if (checkBlack==1){
  193.                 printf("Check black.\n");
  194.             }
  195.             if(pUndo==0){
  196.                 turn++;
  197.             }
  198.         }
  199.         else {
  200.             while ((valid==0)||(checkBlack==1)){
  201.                 pUndo=0;
  202.                 printf("\nBlack's turn:\t (for undo press \"U\" / for redo press \"R\" / for save press \"S\" / for load press \"L\")\n");
  203.                 scanAndConvert();
  204.                 while ((play[0]=='S')&&(play[1]=='\0')){
  205.                     printf("Enter the file name.\n");
  206.                     char saveName[100];
  207.                     readLine(saveName,100);
  208.                     fPointer = fopen(saveName,"w");
  209.                     for (i=2;i<=9;i++){
  210.                         for (j=2;j<=9;j++){
  211.                             fputc(pieces[i][j],fPointer);
  212.                         }
  213.                     }
  214.                     fputc(turn,fPointer);
  215.                     fclose(fPointer);
  216.                     printf("Game successfully saved.\n");
  217.                     printf("\nBlack's turn:\t (for undo press \"U\" / for redo press \"R\" / for save press \"S\" / for load press \"L\")\n");
  218.                     scanAndConvert();
  219.                 }
  220.                 if ((play[0]=='L')&&(play[1]=='\0')){
  221.                     printf("Enter the file name to be loaded.\n");
  222.                     char saveName[100];
  223.                     readLine(saveName,100);
  224.                     fPointer = fopen(saveName,"r");
  225.                     if (fPointer){
  226.                         for (i=2;i<=9;i++){
  227.                             for (j=2;j<=9;j++){
  228.                                 pieces[i][j]=fgetc(fPointer);
  229.                             }
  230.                         }
  231.                         turn=fgetc(fPointer);
  232.                         fclose(fPointer);
  233.                         printGame();
  234.                         printf("Game loaded successfully.\n");
  235.                         break;
  236.                     }
  237.                     else {
  238.                         printf("File doesn't exist.\n");
  239.                     }
  240.                 }
  241.                 if((play[0]=='U'&&turn>0)&&(play[1]=='\0')){
  242.                     for(u=0;u<4;u++){
  243.                         index[u]=undo[turn-1][u];
  244.                     }
  245.                     diedLast=undo[turn-1][4];
  246.                     saveRedo();
  247.                     reverseSwapElement();
  248.                     turn--;
  249.                     pUndo=1;
  250.                     break;
  251.                 }
  252.                 else if((play[0]=='R'&&pRedo-1>=0)&&(play[1]=='\0')){
  253.                     for(r=0;r<4;r++){
  254.                         index[r]=redo[pRedo-1][r];
  255.                     }
  256.                     saveUndo();
  257.                     swapElements();
  258.                     undo[turn][4]=diedLast;
  259.                     pRedo--;
  260.                     break;
  261.                 }
  262.                 else{
  263.                     if(valid==1){
  264.                         checkValidMove();
  265.                     }
  266.                     if(valid==1){
  267.                         moveSet();
  268.                     }
  269.                     if(valid==1){
  270.                         saveUndo();
  271.                         swapElements();
  272.                         undo[turn][4]=diedLast;
  273.                     }
  274.                     if(valid==1){
  275.                         fullKingCheckBlack(king2x,king2y);
  276.                     }
  277.                     if(checkBlack==1 && valid==1){
  278.                         printf("Invalid move.\n");
  279.                         reverseSwapElement();
  280.                     }
  281.                 }
  282.             }
  283.             if (play[0]=='L'){
  284.                 continue;
  285.             }
  286.             printf("\n");
  287.             printGame();
  288.             kingBlackStaleMate();
  289.             if (checkMateWhite==0){
  290.                 printf("Stalemate.\n");
  291.                 exit(EXIT_SUCCESS);
  292.             }
  293.             fullKingCheckWhite(king1x,king1y);
  294.             if (checkMateWhite==1){
  295.                 kingWhiteCheckMate();
  296.                 if (checkMateBlack==0){
  297.                     printf("Check mate.\n");
  298.                     exit(EXIT_SUCCESS);
  299.                 }
  300.             }
  301.             fullKingCheckWhite(king1x,king1y);
  302.             if (checkWhite==0){
  303.                 kingWhiteStaleMate();
  304.                 if (checkMateBlack==0){
  305.                     printf("Stalemate.\n");
  306.                     exit(EXIT_SUCCESS);
  307.                 }
  308.             }
  309.             fullKingCheckWhite(king1x,king1y);
  310.             if (checkWhite==1){
  311.                 printf("Check white.\n");
  312.             }
  313.             if(pUndo==0){
  314.                 turn++;
  315.             }
  316.         }
  317.     }
  318.     return 0;
  319. }
  320.  
  321. void gameBoardBorders(){
  322.     for (i=0;i<12;i++){
  323.         for (j=0;j<12;j++){
  324.             gameBoard[i][j]='\0';
  325.         }
  326.     }
  327.     for (i=0;i<12;i+=11){
  328.         for (j=2;j<10;j++){
  329.             gameBoard[i][j]='A'+(j-2);
  330.         }
  331.     }
  332.     for (j=2;j<10;j++){
  333.         gameBoard[1][j]='-';
  334.         gameBoard[10][j]='-';
  335.     }
  336.     for (i=2;i<10;i++){
  337.         for (j=0;j<12;j+=11){
  338.             gameBoard[i][j]='8'-(i-2);
  339.         }
  340.     }
  341.     for (i=2;i<10;i++){
  342.         gameBoard[i][1]='|';
  343.         gameBoard[i][10]='|';
  344.     }
  345.  
  346. }
  347.  
  348. void checkerBoard(){
  349.     for (i=2;i<10;i++){
  350.         for (j=2;j<10;j+=2){
  351.             if (i%2==0){
  352.                 gameBoard[i][j]='.';
  353.             }
  354.             else {
  355.                 gameBoard[i][j]='_';
  356.             }
  357.         }
  358.     }
  359.     for (i=2;i<10;i++){
  360.         for (j=3;j<10;j+=2){
  361.             if (i%2==0){
  362.                 gameBoard[i][j]='_';
  363.             }
  364.             else {
  365.                 gameBoard[i][j]='.';
  366.             }
  367.         }
  368.     }
  369. }
  370.  
  371. void startingChessBoard(){
  372.     for (i=0;i<12;i++){
  373.         for(j=0;j<12;j++){
  374.             pieces[i][j]='\0';
  375.         }
  376.     }
  377.     pieces[2][2]= 'R';
  378.     pieces[2][3]= 'N';
  379.     pieces[2][4]= 'B';
  380.     pieces[2][5]= 'Q';
  381.     pieces[2][6]= 'K';
  382.     pieces[2][7]= 'B';
  383.     pieces[2][8]= 'N';
  384.     pieces[2][9]= 'R';
  385.  
  386.     pieces[9][2]= 'r';
  387.     pieces[9][3]= 'n';
  388.     pieces[9][4]= 'b';
  389.     pieces[9][5]= 'q';
  390.     pieces[9][6]= 'k';
  391.     pieces[9][7]= 'b';
  392.     pieces[9][8]= 'n';
  393.     pieces[9][9]= 'r';
  394.  
  395.     for(j=2;j<10;j++){
  396.         pieces[3][j]= 'P';
  397.     }
  398.  
  399.     for(j=2;j<10;j++){
  400.         pieces[8][j]= 'p';
  401.     }
  402.     for(i=0;i<36;i++){
  403.         deadPieces[i]='\0';
  404.     }
  405. }
  406.  
  407. void printGame (){
  408.     system("cls");
  409.     printf("\n\t\t\t\t\t\tDead\n\n");
  410.     for (i=0;i<12;i++){
  411.         for (j=0;j<12;j++){
  412.             printf("%c",gameBoard[i][j]);
  413.             printf("%c ", pieces[i][j]);
  414.         }
  415.         printf("\t\t%c %c %c", deadPieces[i+1], deadPieces[i+13], deadPieces[i+25]);
  416.         printf("\n\n");
  417.     }
  418.     printf("\n");
  419. }
  420.  
  421. void scanAndConvert(){
  422.     readLine(play,5);
  423.     if((play[0]=='U')&&(play[1]=='\0')){
  424.         return;
  425.     }
  426.     else if((play[0]=='R')&&(play[1]=='\0')){
  427.         return;
  428.     }
  429.     else if ((play[0]=='S')&&(play[1]=='\0')){
  430.         return;
  431.     }
  432.     else if ((play[0]=='L')&&(play[1]=='\0')){
  433.         return;
  434.     }
  435.     else{
  436.         if (play[4]!='\0'){
  437.             printf("Invalid move.\n");
  438.             valid=0;
  439.             return;
  440.         }
  441.         if ((play[0]<'A')||(play[0]>'H')||(play[1]<'1')||(play[1]>'8')||(play[2]<'A')||(play[2]>'H')||(play[3]<'1')||(play[3]>'8')){
  442.             printf("Invalid move.\n");
  443.             valid=0;
  444.             return;
  445.         }
  446.     }
  447.     index[0]=58-play[1];
  448.     index[1]=play[0]-63;
  449.     index[2]=58-play[3];
  450.     index[3]=play[2]-63;
  451.     valid=1;
  452. }
  453.  
  454. void checkValidMove(){
  455.     if (turn%2==0){
  456.         if ((pieces[index[0]][index[1]]<'a')||(pieces[index[0]][index[1]]>'z')){
  457.             printf("Invalid move.\n");
  458.             valid=0;
  459.             return;
  460.         }
  461.         if ((pieces[index[2]][index[3]]>='a')&&(pieces[index[2]][index[3]]<='z')){
  462.             printf("Invalid move.\n");
  463.             valid=0;
  464.             return;
  465.         }
  466.     }
  467.     else if (turn%2==1){
  468.         if ((pieces[index[0]][index[1]]<'A')||(pieces[index[0]][index[1]]>'Z')){
  469.             printf("Invalid move.\n");
  470.             valid=0;
  471.             return;
  472.         }
  473.         if((pieces[index[2]][index[3]]>='A')&&(pieces[index[2]][index[3]]<='Z')){
  474.             printf("Invalid move.\n");
  475.             valid=0;
  476.             return;
  477.         }
  478.     }
  479.     valid=1;
  480. }
  481.  
  482. void swapElements (){
  483.     if ((pieces[index[2]][index[3]])!='\0'){
  484.         deadPieces[died]= pieces[index[2]][index[3]];
  485.         died++;
  486.         pieces[index[2]][index[3]]='\0';
  487.         diedLast=1;
  488.     }else{
  489.         diedLast=0;
  490.     }
  491.     char temp=pieces[index[0]][index[1]];
  492.     pieces[index[0]][index[1]]=pieces[index[2]][index[3]];
  493.     pieces[index[2]][index[3]]=temp;
  494. }
  495.  
  496. void saveUndo(){
  497.     int u;
  498.     for(u=0;u<4;u++){
  499.         undo[turn][u]=index[u];
  500.     }
  501. }
  502.  
  503. void saveRedo(){
  504.     int r;
  505.     for(r=0;r<4;r++){
  506.         redo[pRedo][r]=undo[turn-1][r];
  507.     }
  508.     pRedo++;
  509. }
  510.  
  511. void reverseSwapElement(){
  512.     if(diedLast==1){
  513.         if(pieces[index[0]][index[1]]=='\0' || deadPieces[died-1]!='\0'){
  514.             pieces[index[0]][index[1]]=deadPieces[died-1];
  515.             died--;
  516.             deadPieces[died]='\0';
  517.         }
  518.     }
  519.     char temp=pieces[index[2]][index[3]];
  520.     pieces[index[2]][index[3]]=pieces[index[0]][index[1]];
  521.     pieces[index[0]][index[1]]=temp;
  522. }
  523.  
  524. void rook(){
  525.     if((index[3]-index[1])==0 && (index[2]-index[0]>0)){
  526.         for (i=1;i<index[2]-index[0];i++){
  527.             if (pieces[index[0]+i][index[1]]!='\0'){
  528.                 printf("Invalid move.");
  529.                 valid=0;
  530.                 return;
  531.             }
  532.         }
  533.         if(index[0]+i==index[2]){
  534.                 valid=1;
  535.         }
  536.     }
  537.     else if ((index[3]-index[1])==0 && (index[0]-index[2]>0)){
  538.         for (i=1;i<index[0]-index[2];i++){
  539.                 if (pieces[index[0]-i][index[1]]!='\0'){
  540.                     printf("Invalid move.");
  541.                     valid=0;
  542.                     return;
  543.                 }
  544.             }
  545.             if (index[0]-i==index[2]){
  546.                 valid=1;
  547.         }
  548.     }
  549.     else if ((index[3]-index[1])>0 && (index[2]-index[0]==0)){
  550.         for (i=1;i<index[3]-index[1];i++){
  551.             if (pieces[index[0]][index[1]+i]!='\0'){
  552.                 printf("Invalid move.");
  553.                 valid=0;
  554.                 return;
  555.             }
  556.         }
  557.         if(index[1]+i==index[3]){
  558.             valid=1;
  559.         }
  560.     }
  561.     else if ((index[1]-index[3])>0 && (index[2]-index[0]==0)){
  562.         for (i=1;i<index[1]-index[3];i++){
  563.             if (pieces[index[0]][index[1]-i]!='\0'){
  564.                 printf("Invalid move.");
  565.                 valid=0;
  566.                 return;
  567.             }
  568.         }
  569.         if(index[1]-i==index[3]){
  570.             valid=1;
  571.         }
  572.     }
  573.     else{
  574.         printf("Invalid move.");
  575.         valid=0;
  576.         return;
  577.     }
  578. }
  579.  
  580. void knight(){
  581.     if ((((abs(index[3]-index[1]))==1)&&((abs(index[2]-index[0]))==2)) || (((abs(index[3]-index[1]))==2)&&((abs(index[2]-index[0]))==1)))
  582.     {
  583.         valid=1;
  584.     }else{
  585.         printf("Invalid move.");
  586.         valid=0;
  587.         return;
  588.     }
  589. }
  590.  
  591. void king(){
  592.     if((((abs(index[3]-index[1]))==1) && ((abs(index[2]-index[0]))==1)) || (((abs(index[3]-index[1]))==1) && ((abs(index[2]-index[0]))==0)) || (((abs(index[3]-index[1]))==0) && ((abs(index[2]-index[0]))==1)))
  593.     {
  594.         if (turn%2==0){
  595.             king1x=index[2];
  596.             king1y=index[3];
  597.         }
  598.         else{
  599.             king2x=index[2];
  600.             king2y=index[3];
  601.         }
  602.         valid=1;
  603.     }else{
  604.         printf("Invalid move.");
  605.         valid=0;
  606.         return;
  607.     }
  608. }
  609.  
  610. void bishop(){
  611.     if (((index[0]-index[2])==(index[1]-index[3]))&&((index[0]-index[2])>0)){
  612.         for (i=1;i<index[0]-index[2];i++){
  613.             if ((pieces[index[0]-i][index[1]-i])!='\0'){
  614.                 printf("Invalid move.");
  615.                 valid=0;
  616.                 return;
  617.             }
  618.         }
  619.         if ((index[0]-i==index[2])&&(index[1]-i==index[3])){
  620.             valid=1;
  621.         }
  622.     }
  623.     else if (((index[0]-index[2])==(index[1]-index[3]))&&((index[2]-index[0])>0)){
  624.         for (i=1;i<index[2]-index[0];i++){
  625.             if ((pieces[index[0]+i][index[1]+i])!='\0'){
  626.                 printf("Invalid move.");
  627.                 valid=0;
  628.                 return;
  629.             }
  630.         }
  631.         if ((index[0]+i==index[2])&&(index[1]+i==index[3])){
  632.             valid=1;
  633.         }
  634.     }
  635.     else if (((index[0]-index[2])==(index[3]-index[1]))&&((index[0]-index[2])>0)){
  636.         for (i=1;i<index[0]-index[2];i++){
  637.             if ((pieces[index[0]-i][index[1]+i])!='\0'){
  638.                 printf("Invalid move.");
  639.                 valid=0;
  640.                 return;
  641.             }
  642.         }
  643.         if ((index[0]-i==index[2])&&(index[1]+i==index[3])){
  644.             valid=1;
  645.         }
  646.     }
  647.     else if (((index[0]-index[2])==(index[3]-index[1]))&&((index[2]-index[0])>0)){
  648.         for (i=1;i<index[0]-index[2];i++){
  649.             if ((pieces[index[0]+i][index[1]-i])!='\0'){
  650.                 printf("Invalid move.");
  651.                 valid=0;
  652.                 return;
  653.             }
  654.         }
  655.         if ((index[0]+i==index[2])&&(index[1]-i==index[3])){
  656.             valid=1;
  657.         }
  658.     }
  659.     else{
  660.         printf("Invalid move.");
  661.         valid=0;
  662.         return;
  663.     }
  664. }
  665.  
  666. void queen(){
  667.     if((index[3]-index[1])==0 && (index[2]-index[0]>0)){
  668.         for (i=1;i<index[2]-index[0];i++){
  669.             if (pieces[index[0]+i][index[1]]!='\0'){
  670.                 printf("Invalid move.");
  671.                 valid=0;
  672.                 return;
  673.             }
  674.         }
  675.         if(index[0]+i==index[2]){
  676.                 valid=1;
  677.         }
  678.     }
  679.     else if ((index[3]-index[1])==0 && (index[0]-index[2]>0)){
  680.         for (i=1;i<index[0]-index[2];i++){
  681.                 if (pieces[index[0]-i][index[1]]!='\0'){
  682.                     printf("Invalid move.");
  683.                     valid=0;
  684.                     return;
  685.                 }
  686.             }
  687.             if (index[0]-i==index[2]){
  688.                 valid=1;
  689.         }
  690.     }
  691.     else if ((index[3]-index[1])>0 && (index[2]-index[0]==0)){
  692.         for (i=1;i<index[3]-index[1];i++){
  693.             if (pieces[index[0]][index[1]+i]!='\0'){
  694.                 printf("Invalid move.");
  695.                 valid=0;
  696.                 return;
  697.             }
  698.         }
  699.         if(index[1]+i==index[3]){
  700.             valid=1;
  701.         }
  702.     }
  703.     else if ((index[1]-index[3])>0 && (index[2]-index[0]==0)){
  704.         for (i=1;i<index[1]-index[3];i++){
  705.             if (pieces[index[0]][index[1]-i]!='\0'){
  706.                 printf("Invalid move.");
  707.                 valid=0;
  708.                 return;
  709.             }
  710.         }
  711.         if(index[1]-i==index[3]){
  712.             valid=1;
  713.         }
  714.     }
  715.     else if (((index[0]-index[2])==(index[1]-index[3]))&&((index[0]-index[2])>0)){
  716.         for (i=1;i<index[0]-index[2];i++){
  717.             if ((pieces[index[0]-i][index[1]-i])!='\0'){
  718.                 printf("Invalid move.");
  719.                 valid=0;
  720.                 return;
  721.             }
  722.         }
  723.         if ((index[0]-i==index[2])&&(index[1]-i==index[3])){
  724.             valid=1;
  725.         }
  726.     }
  727.     else if (((index[0]-index[2])==(index[1]-index[3]))&&((index[2]-index[0])>0)){
  728.         for (i=1;i<index[2]-index[0];i++){
  729.             if ((pieces[index[0]+i][index[1]+i])!='\0'){
  730.                 printf("Invalid move.");
  731.                 valid=0;
  732.                 return;
  733.             }
  734.         }
  735.         if ((index[0]+i==index[2])&&(index[1]+i==index[3])){
  736.             valid=1;
  737.         }
  738.     }
  739.     else if (((index[0]-index[2])==(index[3]-index[1]))&&((index[0]-index[2])>0)){
  740.         for (i=1;i<index[0]-index[2];i++){
  741.             if ((pieces[index[0]-i][index[1]+i])!='\0'){
  742.                 printf("Invalid move.");
  743.                 valid=0;
  744.                 return;
  745.             }
  746.         }
  747.         if ((index[0]-i==index[2])&&(index[1]+i==index[3])){
  748.             valid=1;
  749.         }
  750.     }
  751.     else if (((index[0]-index[2])==(index[3]-index[1]))&&((index[2]-index[0])>0)){
  752.         for (i=1;i<index[0]-index[2];i++){
  753.             if ((pieces[index[0]+i][index[1]-i])!='\0'){
  754.                 printf("Invalid move.");
  755.                 valid=0;
  756.                 return;
  757.             }
  758.         }
  759.         if ((index[0]+i==index[2])&&(index[1]-i==index[3])){
  760.             valid=1;
  761.         }
  762.     }
  763.     else{
  764.         printf("Invalid move.");
  765.         valid=0;
  766.         return;
  767.     }
  768. }
  769.  
  770. void pawn(){
  771.     char promote[2];
  772.         if (pieces[index[0]][index[1]]=='p'){
  773.             if(index[0]==8){
  774.                 if(((index[2]-index[0]==-1)||(index[2]-index[0]==-2)) && (index[3]-index[1]==0) && (pieces[index[2]][index[3]]=='\0')){
  775.                     valid = 1;
  776.                 }
  777.                 else if((pieces[index[2]][index[3]]!='\0')&& ((index[2]-index[0]==-1)&& (abs(index[3]-index[1])==1))){
  778.                     valid = 1;
  779.                 }
  780.                 else if ((pieces[index[2]][index[3]]!='\0')&& ((index[2]-index[0]==-1)&& (abs(index[3]-index[1])==1))){
  781.                     valid=1;
  782.                 }
  783.                 else{
  784.                     printf("Invalid move.");
  785.                     valid=0;
  786.                     return;
  787.                 }
  788.             }else{
  789.                 if((index[2]-index[0]==-1) && (index[3]-index[1]==0) && (pieces[index[2]][index[3]]=='\0')){
  790.                     valid = 1;
  791.                 }
  792.                 else if((pieces[index[2]][index[3]]!='\0')&& ((index[2]-index[0]==-1)&& (abs(index[3]-index[1])==1))){
  793.                     valid = 1;
  794.                 }
  795.                 else{
  796.                     printf("Invalid move.");
  797.                     valid=0;
  798.                     return;
  799.                 }
  800.             }
  801.             if (index[2]==2){
  802.                 printf("Promote to: ");
  803.                 readLine(promote,2);
  804.                 while ((promote[1]!='\0')||((promote[0] != 'R')&&(promote[0] != 'N')&&(promote[0] != 'B')&&(promote[0] != 'Q')&&(promote[0] != 'P'))){
  805.                     printf("Wrong promotion\n");
  806.                     printf("Promote to: ");
  807.                     readLine(promote,2);
  808.                 }
  809.                 if(promote[0] == 'R'){
  810.                     pieces[index[0]][index[1]]='r';
  811.                     valid=1;
  812.                 }
  813.                 else if(promote[0] == 'N'){
  814.                     pieces[index[0]][index[1]]='n';
  815.                     valid=1;
  816.                 }
  817.                 else if(promote[0] == 'B'){
  818.                     pieces[index[0]][index[1]]='b';
  819.                     valid=1;
  820.                 }
  821.                 else if(promote[0] == 'Q'){
  822.                     pieces[index[0]][index[1]]='q';
  823.                     valid=1;
  824.                 }else if(promote[0] == 'P'){
  825.                     pieces[index[0]][index[1]]='p';
  826.                     valid=1;
  827.                 }
  828.             }
  829.         }
  830.         else{
  831.             if(index[0]==3){
  832.                 if(((index[2]-index[0]==1)||(index[2]-index[0]==2)) && (index[3]-index[1]==0) && (pieces[index[2]][index[3]]=='\0')){
  833.                     valid = 1;
  834.                 }
  835.                 else if((pieces[index[2]][index[3]]!='\0')&& ((index[2]-index[0]==-1)&& (abs(index[3]-index[1])==1))){
  836.                     valid = 1;
  837.                 }
  838.                 else if ((pieces[index[2]][index[3]]!='\0')&& ((index[2]-index[0]==1)&& (abs(index[3]-index[1])==1))){
  839.                     valid=1;
  840.                 }
  841.                 else{
  842.                     printf("Invalid move.");
  843.                     valid=0;
  844.                     return;
  845.                 }
  846.             }else{
  847.                 if((index[2]-index[0]==1) && (index[3]-index[1]==0) && (pieces[index[2]][index[3]]=='\0')){
  848.                     valid = 1;
  849.                 }
  850.                 else if((pieces[index[2]][index[3]]!='\0')&& ((index[2]-index[0]==1)&& (abs(index[3]-index[1])==1))){
  851.                     valid = 1;
  852.                 }
  853.                 else{
  854.                     printf("Invalid move.");
  855.                     valid=0;
  856.                     return;
  857.                 }
  858.             }
  859.             if (index[2]==9){
  860.                 printf("Promote to: ");
  861.                 readLine(promote,2);
  862.                 while((promote[0] != 'R' && promote[0] != 'N' && promote[0] != 'B' && promote[0] != 'Q' && promote[0] != 'P')||(promote[1]!='\0')){
  863.                     printf("Wrong promotion\n");
  864.                     printf("Promote to: ");
  865.                     readLine(promote,2);
  866.                 }
  867.                 if(promote[0] == 'R'){
  868.                     pieces[index[0]][index[1]]='R';
  869.                     valid=1;
  870.                 }
  871.                 else if(promote[0] == 'N'){
  872.                     pieces[index[0]][index[1]]='N';
  873.                     valid=1;
  874.                 }
  875.                 else if(promote[0] == 'B'){
  876.                     pieces[index[0]][index[1]]='B';
  877.                     valid=1;
  878.                 }
  879.                 else if(promote[0] == 'Q'){
  880.                     pieces[index[0]][index[1]]='Q';
  881.                     valid=1;
  882.                 }else if(promote[0] == 'P'){
  883.                     pieces[index[0]][index[1]]='P';
  884.                     valid=1;
  885.                 }
  886.             }
  887.         }
  888.     }
  889.  
  890. void moveSet(){
  891.     if ((pieces[index[0]][index[1]]=='p')||(pieces[index[0]][index[1]]=='P')){
  892.         pawn();
  893.     }
  894.     else if ((pieces[index[0]][index[1]]=='r')||(pieces[index[0]][index[1]]=='R')){
  895.         rook();
  896.     }
  897.     else if ((pieces[index[0]][index[1]]=='n')||(pieces[index[0]][index[1]]=='N')){
  898.         knight();
  899.     }
  900.     else if ((pieces[index[0]][index[1]]=='b')||(pieces[index[0]][index[1]]=='B')){
  901.         bishop();
  902.     }
  903.     else if ((pieces[index[0]][index[1]]=='q')||(pieces[index[0]][index[1]]=='Q')){
  904.         queen();
  905.     }
  906.     else if ((pieces[index[0]][index[1]]=='k')||(pieces[index[0]][index[1]]=='K')){
  907.         king();
  908.     }
  909. }
  910.  
  911.  
  912. void fullKingCheckWhite(int x,int y){
  913.     if ((pieces[x-1][y+2]=='N')||(pieces[x+1][y+2]=='N')||(pieces[x-1][y-2]=='N')||(pieces[x+1][y-2]=='N')||(pieces[x+2][y-1]=='N')||(pieces[x+2][y+1]=='N')||(pieces[x-2][y-1]=='N')||(pieces[x-2][y+1]=='N')){
  914.         checkWhite=1;
  915.         checkMateWhite=1;
  916.         return;
  917.     }
  918.     else if ((pieces[x-1][y-1]=='P')||(pieces[x-1][y+1]=='P')){
  919.         checkWhite=1;
  920.         checkMateWhite=1;
  921.         return;
  922.     }
  923.     else if ((pieces[x-1][y]=='P')&&(pieces[x][y]=='\0')){
  924.         checkWhite=1;
  925.         checkMateWhite=1;
  926.         return;
  927.     }
  928.     else if ((pieces[x+1][y]=='K')||(pieces[x-1][y]=='K')||(pieces[x][y+1]=='K')||(pieces[x][y-1]=='K')||(pieces[x+1][y+1]=='K')||(pieces[x-1][y-1]=='K')||(pieces[x+1][y-1]=='K')||(pieces[x-1][y+1]=='K')){
  929.         checkWhite=1;
  930.         checkMateWhite=1;
  931.         return;
  932.     }
  933.     else{
  934.         for(i=1; i<=7;i++){
  935.             if(x+i>9){
  936.                 break;
  937.             }
  938.             else if(pieces[x+i][y]!='\0' && (pieces[x+i][y]!='R' && pieces[x+i][y]!='Q')){
  939.                 checkWhite=0;
  940.                 checkMateWhite=0;
  941.                 break;
  942.             }
  943.             else if(pieces[x+i][y]=='R'||pieces[x+i][y]=='Q'){
  944.                 checkWhite=1;
  945.                 checkMateWhite=1;
  946.                 return;
  947.             }
  948.         }
  949.         for(i=1; i<=7;i++){
  950.             if(x-i<2){
  951.                 break;
  952.             }
  953.             else if(pieces[x-i][y]!='\0' && (pieces[x-i][y]!='R' && pieces[x-i][y]!='Q')){
  954.                 checkWhite=0;
  955.                 checkMateWhite=0;
  956.                 break;
  957.             }
  958.             else if(pieces[x-i][y]=='R'||pieces[x-i][y]=='Q'){
  959.                 checkWhite=1;
  960.                 checkMateWhite=1;
  961.                 return;
  962.             }
  963.         }
  964.         for(i=1; i<=7;i++){
  965.             if(y+i>9){
  966.                 break;
  967.             }
  968.             else if(pieces[x][y+i]!='\0' && (pieces[x][y+i]!='R' && pieces[x][y+i]!='Q')){
  969.                 checkWhite=0;
  970.                 checkMateWhite=0;
  971.                 break;
  972.             }
  973.             else if(pieces[x][y+i]=='R'||pieces[x][y+i]=='Q'){
  974.                 checkWhite=1;
  975.                 checkMateWhite=1;
  976.                 return;
  977.             }
  978.         }
  979.         for(i=1; i<=7;i++){
  980.             if(y-i<2){
  981.                 break;
  982.             }
  983.             else if(pieces[x][y-i]!='\0' && (pieces[x][y-i]!='R' && pieces[x][y-i]!='Q')){
  984.                 checkWhite=0;
  985.                 checkMateWhite=0;
  986.                 break;
  987.             }
  988.             else if(pieces[x][y-i]=='R'||pieces[x][y-i]=='Q'){
  989.                 checkWhite=1;
  990.                 checkMateWhite=1;
  991.                 return;
  992.             }
  993.         }
  994.         for(i=1; i<=7;i++){
  995.             if(x+i>9 && y+i>9){
  996.                 break;
  997.             }else if(pieces[x+i][y+i]!='\0' && (pieces[x+i][y+i]!='B' && pieces[x+i][y+i]!='Q')){
  998.                 checkWhite=0;
  999.                 checkMateWhite=0;
  1000.                 break;
  1001.             }
  1002.             else if(pieces[x+i][y+i]=='B'||pieces[x+i][y+i]=='Q'){
  1003.                 checkWhite=1;
  1004.                 checkMateWhite=1;
  1005.                 return;
  1006.             }
  1007.         }
  1008.         for(i=1; i<=7;i++){
  1009.             if(x-i<2 && y+i>9){
  1010.                 break;
  1011.             }else if(pieces[x-i][y+i]!='\0' && (pieces[x-i][y+i]!='B' && pieces[x-i][y+i]!='Q')){
  1012.                 checkWhite=0;
  1013.                 checkMateWhite=0;
  1014.                 break;
  1015.             }
  1016.             else if(pieces[x-i][y+i]=='B'||pieces[x-i][y+i]=='Q'){
  1017.                 checkWhite=1;
  1018.                 checkMateWhite=1;
  1019.                 return;
  1020.             }
  1021.         }
  1022.         for(i=1; i<=7;i++){
  1023.             if(x-i<2 && y-i<2){
  1024.                 break;
  1025.             }else if(pieces[x-i][y-i]!='\0' && (pieces[x-i][y-i]!='B' && pieces[x-i][y-i]!='Q')){
  1026.                 checkWhite=0;
  1027.                 checkMateWhite=0;
  1028.                 break;
  1029.             }
  1030.             else if(pieces[x-i][y-i]=='B'||pieces[x-i][y-i]=='Q'){
  1031.                 checkWhite=1;
  1032.                 checkMateWhite=1;
  1033.                 return;
  1034.             }
  1035.         }
  1036.         for(i=1; i<=7;i++){
  1037.             if(x+i>9 && y-i<2){
  1038.                 break;
  1039.             }else if(pieces[x+i][y-i]!='\0' && (pieces[x+i][y-i]!='B' && pieces[x+i][y-i]!='Q')){
  1040.                 checkWhite=0;
  1041.                 checkMateWhite=0;
  1042.                 break;
  1043.             }
  1044.             else if(pieces[x+i][y-i]=='B'||pieces[x+i][y-i]=='Q'){
  1045.                 checkWhite=1;
  1046.                 checkMateWhite=1;
  1047.                 return;
  1048.             }
  1049.         }
  1050.     }
  1051. }
  1052.  
  1053. void fullKingCheckBlack(int x,int y){
  1054.     if ((pieces[x-1][y+2]=='n')||(pieces[x+1][y+2]=='n')||(pieces[x-1][y-2]=='n')||(pieces[x+1][y-2]=='n')||(pieces[x+2][y-1]=='n')||(pieces[x+2][y+1]=='n')||(pieces[x-2][y-1]=='n')||(pieces[x-2][y+1]=='n')){
  1055.         checkBlack=1;
  1056.         checkMateBlack=1;
  1057.         return;
  1058.     }
  1059.     else if ((pieces[x+1][y-1]=='p')||(pieces[x+1][y+1]=='p')){
  1060.         checkBlack=1;
  1061.         checkMateBlack=1;
  1062.         return;
  1063.     }
  1064.     else if ((pieces[x+1][y]=='k')||(pieces[x-1][y]=='k')||(pieces[x][y+1]=='k')||(pieces[x][y-1]=='k')||(pieces[x+1][y+1]=='k')||(pieces[x-1][y-1]=='k')||(pieces[x+1][y-1]=='k')||(pieces[x-1][y+1]=='k')){
  1065.         checkBlack=1;
  1066.         checkMateBlack=1;
  1067.         return;
  1068.     }
  1069.     else{
  1070.         for(i=1; i<=7;i++){
  1071.             if(x+i>9){
  1072.                 break;
  1073.             }
  1074.             else if(pieces[x+i][y]!='\0' && (pieces[x+i][y]!='r' && pieces[x+i][y]!='q')){
  1075.                 checkBlack=0;
  1076.                 checkMateBlack=0;
  1077.                 break;
  1078.             }
  1079.             else if(pieces[x+i][y]=='r'||pieces[x+i][y]=='q'){
  1080.                 checkBlack=1;
  1081.                 checkMateBlack=1;
  1082.                 return;
  1083.             }
  1084.         }
  1085.         for(i=1; i<=7;i++){
  1086.             if(x-i<2){
  1087.                 break;
  1088.             }
  1089.             else if(pieces[x-i][y]!='\0' && (pieces[x-i][y]!='r' && pieces[x-i][y]!='q')){
  1090.                 checkBlack=0;
  1091.                 checkMateBlack=0;
  1092.                 break;
  1093.             }
  1094.             else if(pieces[x-i][y]=='r'||pieces[x-i][y]=='q'){
  1095.                 checkBlack=1;
  1096.                 checkMateBlack=1;
  1097.                 return;
  1098.             }
  1099.         }
  1100.         for(i=1; i<=7;i++){
  1101.             if(y+i>9){
  1102.                 break;
  1103.             }
  1104.             else if(pieces[x][y+i]!='\0' && (pieces[x][y+i]!='r' && pieces[x][y+i]!='q')){
  1105.                 checkBlack=0;
  1106.                 checkMateBlack=0;
  1107.                 break;
  1108.             }
  1109.             else if(pieces[x][y+i]=='r'||pieces[x][y+i]=='q'){
  1110.                 checkBlack=1;
  1111.                 checkMateBlack=1;
  1112.                 return;
  1113.             }
  1114.         }
  1115.         for(i=1; i<=7;i++){
  1116.             if(y-i<2){
  1117.                 break;
  1118.             }
  1119.             else if(pieces[x][y-i]!='\0' && (pieces[x][y-i]!='r' && pieces[x][y-i]!='q')){
  1120.                 checkBlack=0;
  1121.                 checkMateBlack=0;
  1122.                 break;
  1123.             }
  1124.             else if(pieces[x][y-i]=='r'||pieces[x][y-i]=='q'){
  1125.                 checkBlack=1;
  1126.                 checkMateBlack=1;
  1127.                 return;
  1128.             }
  1129.         }
  1130.         for(i=1; i<=7;i++){
  1131.             if(x+i>9 && y+i>9){
  1132.                 break;
  1133.             }else if(pieces[x+i][y+i]!='\0' && (pieces[x+i][y+i]!='b' && pieces[x+i][y+i]!='q')){
  1134.                 checkBlack=0;
  1135.                 checkMateBlack=0;
  1136.                 break;
  1137.             }
  1138.             else if(pieces[x+i][y+i]=='b'||pieces[x+i][y+i]=='q'){
  1139.                 checkBlack=1;
  1140.                 checkMateBlack=1;
  1141.                 return;
  1142.             }
  1143.         }
  1144.         for(i=1; i<=7;i++){
  1145.             if(x-i<2 && y+i>9){
  1146.                 break;
  1147.             }else if(pieces[x-i][y+i]!='\0' && (pieces[x-i][y+i]!='b' && pieces[x-i][y+i]!='q')){
  1148.                 checkBlack=0;
  1149.                 checkMateBlack=0;
  1150.                 break;
  1151.             }
  1152.             else if(pieces[x-i][y+i]=='b'||pieces[x-i][y+i]=='q'){
  1153.                 checkBlack=1;
  1154.                 checkMateBlack=1;
  1155.                 return;
  1156.             }
  1157.         }
  1158.         for(i=1; i<=7;i++){
  1159.             if(x-i<2 && y-i<2){
  1160.                 break;
  1161.             }else if(pieces[x-i][y-i]!='\0' && (pieces[x-i][y-i]!='b' && pieces[x-i][y-i]!='q')){
  1162.                 checkBlack=0;
  1163.                 checkMateBlack=0;
  1164.                 break;
  1165.             }
  1166.             else if(pieces[x-i][y-i]=='b'||pieces[x-i][y-i]=='q'){
  1167.                 checkBlack=1;
  1168.                 checkMateBlack=1;
  1169.                 return;
  1170.             }
  1171.         }
  1172.         for(i=1; i<=7;i++){
  1173.             if(x+i>9 && y-i<2){
  1174.                 break;
  1175.             }else if(pieces[x+i][y-i]!='\0' && (pieces[x+i][y-i]!='b' && pieces[x+i][y-i]!='q')){
  1176.                 checkBlack=0;
  1177.                 checkMateBlack=0;
  1178.                 break;
  1179.             }
  1180.             else if(pieces[x+i][y-i]=='b'||pieces[x+i][y-i]=='q'){
  1181.                 checkBlack=1;
  1182.                 checkMateBlack=1;
  1183.                 return;
  1184.             }
  1185.         }
  1186.     }
  1187. }
  1188.  
  1189. void kingWhiteCheckMate(){
  1190.     checkMateWhite=1;
  1191.     if ((pieces[king1x+1][king1y]<'a')&&(king1x+1>1)&&(king1x+1<10)){
  1192.         fullKingCheckWhite(king1x+1,king1y);
  1193.     }
  1194.     if ((checkMateWhite==1)&&(pieces[king1x][king1y+1]<'a')&&(king1y+1>1)&&(king1y+1<10)){
  1195.         fullKingCheckWhite(king1x,king1y+1);
  1196.     }
  1197.     if ((checkMateWhite==1)&&(pieces[king1x+1][king1y+1]<'a')&&(king1y+1>1)&&(king1y+1<10)&&(king1x+1>1)&&(king1x+1<10)){
  1198.         fullKingCheckWhite(king1x+1,king1y+1);
  1199.     }
  1200.     if ((checkMateWhite==1)&&(pieces[king1x-1][king1y]<'a')&&(king1x-1>1)&&(king1x-1<10)){
  1201.         fullKingCheckWhite(king1x-1,king1y);
  1202.     }
  1203.     if ((checkMateWhite==1)&&(pieces[king1x][king1y-1]<'a')&&(king1y-1>1)&&(king1y-1<10)){
  1204.         fullKingCheckWhite(king1x,king1y-1);
  1205.     }
  1206.     if ((checkMateWhite==1)&&(pieces[king1x-1][king1y-1]<'a')&&(king1y-1>1)&&(king1y-1<10)&&(king1x-1>1)&&(king1x-1<10)){
  1207.         fullKingCheckWhite(king1x-1,king1y-1);
  1208.     }
  1209.     if ((checkMateWhite==1)&&(pieces[king1x+1][king1y-1]<'a')&&(king1y-1>1)&&(king1y-1<10)&&(king1x+1>1)&&(king1x+1<10)){
  1210.         fullKingCheckWhite(king1x+1,king1y-1);
  1211.     }
  1212.     if ((checkMateWhite==1)&&(pieces[king1x-1][king1y+1]<'a')&&(king1y+1>1)&&(king1y+1<10)&&(king1x-1>1)&&(king1x-1<10)){
  1213.         fullKingCheckWhite(king1x-1,king1y+1);
  1214.     }
  1215.     if (checkMateWhite==1){
  1216.         fullPieceCheckBlack(index[2],index[3]);
  1217.         if (checkMateBlack==0){
  1218.         checkMateBlackPath(king1x,king1y);
  1219.         }
  1220.     }
  1221. }
  1222.  
  1223. void kingBlackCheckMate(){
  1224.     checkMateWhite=1;
  1225.     if (((pieces[king2x+1][king2y]>='a')||(pieces[king2x+1][king2y]=='\0'))&&(king2x+1>1)&&(king2x+1<10)){
  1226.         fullKingCheckBlack(king2x+1,king2y);
  1227.     }
  1228.     if ((checkMateBlack==1)&&((pieces[king2x][king2y+1]>='a')||(pieces[king2x][king2y+1]=='\0'))&&(king2y+1>1)&&(king2y+1<10)){
  1229.         fullKingCheckBlack(king2x,king2y+1);
  1230.     }
  1231.     if ((checkMateBlack==1)&&((pieces[king2x+1][king2y+1]>='a')||(pieces[king2x+1][king2y+1]=='\0'))&&(king2y+1>1)&&(king2y+1<10)&&(king2x+1>1)&&(king2x+1<10)){
  1232.         fullKingCheckBlack(king2x+1,king2y+1);
  1233.     }
  1234.     if ((checkMateBlack==1)&&((pieces[king2x-1][king2y]>='a')||(pieces[king2x-1][king2y]=='\0'))&&(king2x-1>1)&&(king2x-1<10)){
  1235.         fullKingCheckBlack(king2x-1,king2y);
  1236.     }
  1237.     if ((checkMateBlack==1)&&((pieces[king2x][king2y-1]>='a')||(pieces[king2x][king2y-1]=='\0'))&&(king2y-1>1)&&(king2y-1<10)){
  1238.         fullKingCheckBlack(king2x,king2y-1);
  1239.     }
  1240.     if ((checkMateBlack==1)&&((pieces[king2x-1][king2y-1]>='a')||(pieces[king2x-1][king2y-1]=='\0'))&&(king2y-1>1)&&(king2y-1<10)&&(king2x-1>1)&&(king2x-1<10)){
  1241.         fullKingCheckBlack(king2x-1,king2y-1);
  1242.     }
  1243.     if ((checkMateBlack==1)&&((pieces[king2x+1][king2y-1]>='a')||(pieces[king2x+1][king2y-1]=='\0'))&&(king2y-1>1)&&(king2y-1<10)&&(king2x+1>1)&&(king2x+1<10)){
  1244.         fullKingCheckBlack(king2x+1,king2y-1);
  1245.     }
  1246.     if ((checkMateBlack==1)&&((pieces[king2x-1][king2y+1]>='a')||(pieces[king2x-1][king2y+1]=='\0'))&&(king2y+1>1)&&(king2y+1<10)&&(king2x-1>1)&&(king2x-1<10)){
  1247.         fullKingCheckBlack(king2x-1,king2y+1);
  1248.     }
  1249.     if (checkMateBlack==1){
  1250.         fullPieceCheckWhite(index[2],index[3]);
  1251.         if (checkMateWhite==0){
  1252.         checkMateWhitePath(king2x,king2y);
  1253.         }
  1254.     }
  1255. }
  1256.  
  1257. void checkMateWhitePath(int x,int y){
  1258.     if((index[3]-y)==0 && (index[2]-x>0)){
  1259.         for (k=1;k<index[2]-x;k++){
  1260.             fullKingCheckBlack(x+k,y);
  1261.             if (checkMateBlack==1){
  1262.                 break;
  1263.             }
  1264.         }
  1265.     }
  1266.     else if ((index[3]-y)==0 && (x-index[2]>0)){
  1267.         for (k=1;k<x-index[2];k++){
  1268.             fullKingCheckBlack(x-k,y);
  1269.             if (checkMateBlack==1){
  1270.                 break;
  1271.             }
  1272.         }
  1273.     }
  1274.     else if ((index[3]-y)>0 && (index[2]-x==0)){
  1275.         for (k=1;k<index[3]-y;k++){
  1276.             fullKingCheckBlack(x,y+k);
  1277.             if (checkMateBlack==1){
  1278.                 break;
  1279.             }
  1280.         }
  1281.     }
  1282.     else if ((y-index[3])>0 && (index[2]-x==0)){
  1283.         for (k=1;k<y-index[3];k++){
  1284.           fullKingCheckBlack(x,y-k);
  1285.             if (checkMateBlack==1){
  1286.                 break;
  1287.             }
  1288.         }
  1289.     }
  1290.     else if (((x-index[2])==(y-index[3]))&&((x-index[2])>0)){
  1291.         for (k=1;k<x-index[2];k++){
  1292.             fullKingCheckBlack(x-k,y-k);
  1293.             if (checkMateBlack==1){
  1294.                 break;
  1295.             }
  1296.         }
  1297.     }
  1298.     else if (((x-index[2])==(y-index[3]))&&((index[2]-x)>0)){
  1299.         for (k=1;k<index[2]-x;k++){
  1300.             fullKingCheckBlack(x+k,y+k);
  1301.             if (checkMateBlack==1){
  1302.                 break;
  1303.             }
  1304.         }
  1305.     }
  1306.     else if (((x-index[2])==(index[3]-y))&&((x-index[2])>0)){
  1307.         for (k=1;k<x-index[2];k++){
  1308.             fullKingCheckBlack(x-k,y+k);
  1309.             if (checkMateBlack==1){
  1310.                 break;
  1311.             }
  1312.         }
  1313.     }
  1314.     else if (((x-index[2])==(index[3]-y))&&((index[2]-x)>0)){
  1315.         for (k=1;k<index[0]-index[2];k++){
  1316.             fullKingCheckBlack(x+k,y-k);
  1317.             if (checkMateBlack==1){
  1318.                 break;
  1319.             }
  1320.         }
  1321.     }
  1322. }
  1323.  
  1324. void checkMateBlackPath(int x,int y){
  1325.     if((index[3]-y)==0 && (index[2]-x>0)){
  1326.         for (k=1;k<index[2]-x;k++){
  1327.             fullKingCheckBlack(x+k,y);
  1328.             if (checkMateBlack==1){
  1329.                 break;
  1330.             }
  1331.         }
  1332.     }
  1333.     else if ((index[3]-y)==0 && (x-index[2]>0)){
  1334.         for (k=1;k<x-index[2];k++){
  1335.             fullKingCheckBlack(x-k,y);
  1336.             if (checkMateBlack==1){
  1337.                 break;
  1338.             }
  1339.         }
  1340.     }
  1341.     else if ((index[3]-y)>0 && (index[2]-x==0)){
  1342.         for (k=1;k<index[3]-y;k++){
  1343.             fullKingCheckBlack(x,y+k);
  1344.             if (checkMateBlack==1){
  1345.                 break;
  1346.             }
  1347.         }
  1348.     }
  1349.     else if ((y-index[3])>0 && (index[2]-x==0)){
  1350.         for (k=1;k<y-index[3];k++){
  1351.           fullKingCheckBlack(x,y-k);
  1352.             if (checkMateBlack==1){
  1353.                 break;
  1354.             }
  1355.         }
  1356.     }
  1357.     else if (((x-index[2])==(y-index[3]))&&((x-index[2])>0)){
  1358.         for (k=1;k<x-index[2];k++){
  1359.             fullKingCheckBlack(x-k,y-k);
  1360.             if (checkMateBlack==1){
  1361.                 break;
  1362.             }
  1363.         }
  1364.     }
  1365.     else if (((x-index[2])==(y-index[3]))&&((index[2]-x)>0)){
  1366.         for (k=1;k<index[2]-x;k++){
  1367.             fullKingCheckBlack(x+k,y+k);
  1368.             if (checkMateBlack==1){
  1369.                 break;
  1370.             }
  1371.         }
  1372.     }
  1373.     else if (((x-index[2])==(index[3]-y))&&((x-index[2])>0)){
  1374.         for (k=1;k<x-index[2];k++){
  1375.             fullKingCheckBlack(x-k,y+k);
  1376.             if (checkMateBlack==1){
  1377.                 break;
  1378.             }
  1379.         }
  1380.     }
  1381.     else if (((x-index[2])==(index[3]-y))&&((index[2]-x)>0)){
  1382.         for (k=1;k<index[0]-index[2];k++){
  1383.             fullKingCheckBlack(x+k,y-k);
  1384.             if (checkMateBlack==1){
  1385.                 break;
  1386.             }
  1387.         }
  1388.     }
  1389. }
  1390.  
  1391. void kingWhiteStaleMate(){
  1392.     checkWhite=1;
  1393.     checkMateBlack=1;
  1394.     if ((pieces[king1x+1][king1y]<'a')&&(king1x+1>1)&&(king1x+1<10)){
  1395.         fullKingCheckWhite(king1x+1,king1y);
  1396.     }
  1397.     if ((checkWhite==1)&&(pieces[king1x][king1y+1]<'a')&&(king1y+1>1)&&(king1y+1<10)){
  1398.         fullKingCheckWhite(king1x,king1y+1);
  1399.     }
  1400.     if ((checkWhite==1)&&(pieces[king1x+1][king1y+1]<'a')&&(king1y+1>1)&&(king1y+1<10)&&(king1x+1>1)&&(king1x+1<10)){
  1401.         fullKingCheckWhite(king1x+1,king1y+1);
  1402.     }
  1403.     if ((checkWhite==1)&&(pieces[king1x-1][king1y]<'a')&&(king1x-1>1)&&(king1x-1<10)){
  1404.         fullKingCheckWhite(king1x-1,king1y);
  1405.     }
  1406.     if ((checkWhite==1)&&(pieces[king1x][king1y-1]<'a')&&(king1y-1>1)&&(king1y-1<10)){
  1407.         fullKingCheckWhite(king1x,king1y-1);
  1408.     }
  1409.     if ((checkWhite==1)&&(pieces[king1x-1][king1y-1]<'a')&&(king1y-1>1)&&(king1y-1<10)&&(king1x-1>1)&&(king1x-1<10)){
  1410.         fullKingCheckWhite(king1x-1,king1y-1);
  1411.     }
  1412.     if ((checkWhite==1)&&(pieces[king1x+1][king1y-1]<'a')&&(king1y-1>1)&&(king1y-1<10)&&(king1x+1>1)&&(king1x+1<10)){
  1413.         fullKingCheckWhite(king1x+1,king1y-1);
  1414.     }
  1415.     if ((checkWhite==1)&&(pieces[king1x-1][king1y+1]<'a')&&(king1y+1>1)&&(king1y+1<10)&&(king1x-1>1)&&(king1x-1<10)){
  1416.         fullKingCheckWhite(king1x-1,king1y+1);
  1417.     }
  1418.     if (checkWhite==1){
  1419.         checkMateBlack=0;
  1420.         for (k=2;k<=9;k++){
  1421.             for (l=2;l<=9;l++){
  1422.                 if (pieces[k][l]<'a'){
  1423.                     fullPieceCheckBlack(k,l);
  1424.                     if (checkMateBlack==1){
  1425.                         return;
  1426.                     }
  1427.                 }
  1428.             }
  1429.         }
  1430.     }
  1431. }
  1432.  
  1433. void kingBlackStaleMate(){
  1434.     checkBlack=1;
  1435.     checkMateWhite=1;
  1436.     if (((pieces[king2x+1][king2y]>='a')||(pieces[king2x+1][king2y]=='\0'))&&(king2x+1>1)&&(king2x+1<10)){
  1437.         fullKingCheckBlack(king2x+1,king2y);
  1438.     }
  1439.     if ((checkBlack==1)&&((pieces[king2x][king2y+1]>='a')||(pieces[king2x][king2y+1]=='\0'))&&(king2y+1>1)&&(king2y+1<10)){
  1440.         fullKingCheckBlack(king2x,king2y+1);
  1441.     }
  1442.     if ((checkBlack==1)&&((pieces[king2x+1][king2y+1]>='a')||(pieces[king2x+1][king2y+1]=='\0'))&&(king2y+1>1)&&(king2y+1<10)&&(king2x+1>1)&&(king2x+1<10)){
  1443.         fullKingCheckBlack(king2x+1,king2y+1);
  1444.     }
  1445.     if ((checkBlack==1)&&((pieces[king2x-1][king2y]>='a')||(pieces[king2x-1][king2y]=='\0'))&&(king2x-1>1)&&(king2x-1<10)){
  1446.         fullKingCheckBlack(king2x-1,king2y);
  1447.     }
  1448.     if ((checkBlack==1)&&((pieces[king2x][king2y-1]>='a')||(pieces[king2x][king2y-1]=='\0'))&&(king2y-1>1)&&(king2y-1<10)){
  1449.         fullKingCheckBlack(king2x,king2y-1);
  1450.     }
  1451.     if ((checkBlack==1)&&((pieces[king2x-1][king2y-1]>='a')||(pieces[king2x-1][king2y-1]=='\0'))&&(king2y-1>1)&&(king2y-1<10)&&(king2x-1>1)&&(king2x-1<10)){
  1452.         fullKingCheckBlack(king2x-1,king2y-1);
  1453.     }
  1454.     if ((checkBlack==1)&&((pieces[king2x+1][king2y-1]>='a')||(pieces[king2x+1][king2y-1]=='\0'))&&(king2y-1>1)&&(king2y-1<10)&&(king2x+1>1)&&(king2x+1<10)){
  1455.         fullKingCheckBlack(king2x+1,king2y-1);
  1456.     }
  1457.     if ((checkBlack==1)&&((pieces[king2x-1][king2y+1]>='a')||(pieces[king2x-1][king2y+1]=='\0'))&&(king2y+1>1)&&(king2y+1<10)&&(king2x-1>1)&&(king2x-1<10)){
  1458.         fullKingCheckBlack(king2x-1,king2y+1);
  1459.     }
  1460.     if (checkBlack==1){
  1461.         checkMateWhite=0;
  1462.         for (k=2;k<=9;k++){
  1463.             for (l=2;l<=9;l++){
  1464.                 if ((pieces[k][l]=='\0')||(pieces[k][l]>='a')){
  1465.                     fullPieceCheckWhite(k,l);
  1466.                     if (checkMateWhite==1){
  1467.                         return;
  1468.                     }
  1469.                 }
  1470.             }
  1471.         }
  1472.     }
  1473. }
  1474.  
  1475. void fullPieceCheckBlack(int x,int y){
  1476.     if ((pieces[x-1][y+2]=='n')||(pieces[x+1][y+2]=='n')||(pieces[x-1][y-2]=='n')||(pieces[x+1][y-2]=='n')||(pieces[x+2][y-1]=='n')||(pieces[x+2][y+1]=='n')||(pieces[x-2][y-1]=='n')||(pieces[x-2][y+1]=='n')){
  1477.         checkBlack=1;
  1478.         checkMateBlack=1;
  1479.         return;
  1480.     }
  1481.     else if (((pieces[x+1][y-1]=='p')||(pieces[x+1][y+1]=='p'))&&(pieces[x][y]>='A')&&(pieces[x][y]<='Z')){
  1482.         checkBlack=1;
  1483.         checkMateBlack=1;
  1484.         return;
  1485.     }
  1486.     else if ((pieces[x+1][y]=='p')&&(pieces[x][y]=='\0')){
  1487.         checkBlack=1;
  1488.         checkMateBlack=1;
  1489.         return;
  1490.     }
  1491.     else{
  1492.         for(i=1; i<=7;i++){
  1493.             if(x+i>9){
  1494.                 break;
  1495.             }
  1496.             else if(pieces[x+i][y]!='\0' && (pieces[x+i][y]!='r' && pieces[x+i][y]!='q')){
  1497.                 checkBlack=0;
  1498.                 checkMateBlack=0;
  1499.                 break;
  1500.             }
  1501.             else if(pieces[x+i][y]=='r'||pieces[x+i][y]=='q'){
  1502.                 checkBlack=1;
  1503.                 checkMateBlack=1;
  1504.                 return;
  1505.             }
  1506.         }
  1507.         for(i=1; i<=7;i++){
  1508.             if(x-i<2){
  1509.                 break;
  1510.             }
  1511.             else if(pieces[x-i][y]!='\0' && (pieces[x-i][y]!='r' && pieces[x-i][y]!='q')){
  1512.                 checkBlack=0;
  1513.                 checkMateBlack=0;
  1514.                 break;
  1515.             }
  1516.             else if(pieces[x-i][y]=='r'||pieces[x-i][y]=='q'){
  1517.                 checkBlack=1;
  1518.                 checkMateBlack=1;
  1519.                 return;
  1520.             }
  1521.         }
  1522.         for(i=1; i<=7;i++){
  1523.             if(y+i>9){
  1524.                 break;
  1525.             }
  1526.             else if(pieces[x][y+i]!='\0' && (pieces[x][y+i]!='r' && pieces[x][y+i]!='q')){
  1527.                 checkBlack=0;
  1528.                 checkMateBlack=0;
  1529.                 break;
  1530.             }
  1531.             else if(pieces[x][y+i]=='r'||pieces[x][y+i]=='q'){
  1532.                 checkBlack=1;
  1533.                 checkMateBlack=1;
  1534.                 return;
  1535.             }
  1536.         }
  1537.         for(i=1; i<=7;i++){
  1538.             if(y-i<2){
  1539.                 break;
  1540.             }
  1541.             else if(pieces[x][y-i]!='\0' && (pieces[x][y-i]!='r' && pieces[x][y-i]!='q')){
  1542.                 checkBlack=0;
  1543.                 checkMateBlack=0;
  1544.                 break;
  1545.             }
  1546.             else if(pieces[x][y-i]=='r'||pieces[x][y-i]=='q'){
  1547.                 checkBlack=1;
  1548.                 checkMateBlack=1;
  1549.                 return;
  1550.             }
  1551.         }
  1552.         for(i=1; i<=7;i++){
  1553.             if(x+i>9 && y+i>9){
  1554.                 break;
  1555.             }else if(pieces[x+i][y+i]!='\0' && (pieces[x+i][y+i]!='b' && pieces[x+i][y+i]!='q')){
  1556.                 checkBlack=0;
  1557.                 checkMateBlack=0;
  1558.                 break;
  1559.             }
  1560.             else if(pieces[x+i][y+i]=='b'||pieces[x+i][y+i]=='q'){
  1561.                 checkBlack=1;
  1562.                 checkMateBlack=1;
  1563.                 return;
  1564.             }
  1565.         }
  1566.         for(i=1; i<=7;i++){
  1567.             if(x-i<2 && y+i>9){
  1568.                 break;
  1569.             }else if(pieces[x-i][y+i]!='\0' && (pieces[x-i][y+i]!='b' && pieces[x-i][y+i]!='q')){
  1570.                 checkBlack=0;
  1571.                 checkMateBlack=0;
  1572.                 break;
  1573.             }
  1574.             else if(pieces[x-i][y+i]=='b'||pieces[x-i][y+i]=='q'){
  1575.                 checkBlack=1;
  1576.                 checkMateBlack=1;
  1577.                 return;
  1578.             }
  1579.         }
  1580.         for(i=1; i<=7;i++){
  1581.             if(x-i<2 && y-i<2){
  1582.                 break;
  1583.             }else if(pieces[x-i][y-i]!='\0' && (pieces[x-i][y-i]!='b' && pieces[x-i][y-i]!='q')){
  1584.                 checkBlack=0;
  1585.                 checkMateBlack=0;
  1586.                 break;
  1587.             }
  1588.             else if(pieces[x-i][y-i]=='b'||pieces[x-i][y-i]=='q'){
  1589.                 checkBlack=1;
  1590.                 checkMateBlack=1;
  1591.                 return;
  1592.             }
  1593.         }
  1594.         for(i=1; i<=7;i++){
  1595.             if(x+i>9 && y-i<2){
  1596.                 break;
  1597.             }else if(pieces[x+i][y-i]!='\0' && (pieces[x+i][y-i]!='b' && pieces[x+i][y-i]!='q')){
  1598.                 checkBlack=0;
  1599.                 checkMateBlack=0;
  1600.                 break;
  1601.             }
  1602.             else if(pieces[x+i][y-i]=='b'||pieces[x+i][y-i]=='q'){
  1603.                 checkBlack=1;
  1604.                 checkMateBlack=1;
  1605.                 return;
  1606.             }
  1607.         }
  1608.     }
  1609. }
  1610. void fullPieceCheckWhite(int x,int y){
  1611.     if ((pieces[x-1][y+2]=='N')||(pieces[x+1][y+2]=='N')||(pieces[x-1][y-2]=='N')||(pieces[x+1][y-2]=='N')||(pieces[x+2][y-1]=='N')||(pieces[x+2][y+1]=='N')||(pieces[x-2][y-1]=='N')||(pieces[x-2][y+1]=='N')){
  1612.         checkWhite=1;
  1613.         checkMateWhite=1;
  1614.         return;
  1615.     }
  1616.     else if (((pieces[x-1][y-1]=='P')||(pieces[x-1][y+1]=='p'))&&(pieces[x][y]>='a')&&(pieces[x][y]<='z')){
  1617.         checkBlack=1;
  1618.         checkMateBlack=1;
  1619.         return;
  1620.     }
  1621.     else if ((pieces[x-1][y]=='P')&&(pieces[x][y]=='\0')){
  1622.         checkBlack=1;
  1623.         checkMateBlack=1;
  1624.         return;
  1625.     }
  1626.     else{
  1627.         for(i=1; i<=7;i++){
  1628.             if(x+i>9){
  1629.                 break;
  1630.             }
  1631.             else if(pieces[x+i][y]!='\0' && (pieces[x+i][y]!='R' && pieces[x+i][y]!='Q')){
  1632.                 checkWhite=0;
  1633.                 checkMateWhite=0;
  1634.                 break;
  1635.             }
  1636.             else if(pieces[x+i][y]=='R'||pieces[x+i][y]=='Q'){
  1637.                 checkWhite=1;
  1638.                 checkMateWhite=1;
  1639.                 return;
  1640.             }
  1641.         }
  1642.         for(i=1; i<=7;i++){
  1643.             if(x-i<2){
  1644.                 break;
  1645.             }
  1646.             else if(pieces[x-i][y]!='\0' && (pieces[x-i][y]!='R' && pieces[x-i][y]!='Q')){
  1647.                 checkWhite=0;
  1648.                 checkMateWhite=0;
  1649.                 break;
  1650.             }
  1651.             else if(pieces[x-i][y]=='R'||pieces[x-i][y]=='Q'){
  1652.                 checkWhite=1;
  1653.                 checkMateWhite=1;
  1654.                 return;
  1655.             }
  1656.         }
  1657.         for(i=1; i<=7;i++){
  1658.             if(y+i>9){
  1659.                 break;
  1660.             }
  1661.             else if(pieces[x][y+i]!='\0' && (pieces[x][y+i]!='R' && pieces[x][y+i]!='Q')){
  1662.                 checkWhite=0;
  1663.                 checkMateWhite=0;
  1664.                 break;
  1665.             }
  1666.             else if(pieces[x][y+i]=='R'||pieces[x][y+i]=='Q'){
  1667.                 checkWhite=1;
  1668.                 checkMateWhite=1;
  1669.                 return;
  1670.             }
  1671.         }
  1672.         for(i=1; i<=7;i++){
  1673.             if(y-i<2){
  1674.                 break;
  1675.             }
  1676.             else if(pieces[x][y-i]!='\0' && (pieces[x][y-i]!='R' && pieces[x][y-i]!='Q')){
  1677.                 checkWhite=0;
  1678.                 checkMateWhite=0;
  1679.                 break;
  1680.             }
  1681.             else if(pieces[x][y-i]=='R'||pieces[x][y-i]=='Q'){
  1682.                 checkWhite=1;
  1683.                 checkMateWhite=1;
  1684.                 return;
  1685.             }
  1686.         }
  1687.         for(i=1; i<=7;i++){
  1688.             if(x+i>9 && y+i>9){
  1689.                 break;
  1690.             }else if(pieces[x+i][y+i]!='\0' && (pieces[x+i][y+i]!='B' && pieces[x+i][y+i]!='Q')){
  1691.                 checkWhite=0;
  1692.                 checkMateWhite=0;
  1693.                 break;
  1694.             }
  1695.             else if(pieces[x+i][y+i]=='B'||pieces[x+i][y+i]=='Q'){
  1696.                 checkWhite=1;
  1697.                 checkMateWhite=1;
  1698.                 return;
  1699.             }
  1700.         }
  1701.         for(i=1; i<=7;i++){
  1702.             if(x-i<2 && y+i>9){
  1703.                 break;
  1704.             }else if(pieces[x-i][y+i]!='\0' && (pieces[x-i][y+i]!='B' && pieces[x-i][y+i]!='Q')){
  1705.                 checkWhite=0;
  1706.                 checkMateWhite=0;
  1707.                 break;
  1708.             }
  1709.             else if(pieces[x-i][y+i]=='B'||pieces[x-i][y+i]=='Q'){
  1710.                 checkWhite=1;
  1711.                 checkMateWhite=1;
  1712.                 return;
  1713.             }
  1714.         }
  1715.         for(i=1; i<=7;i++){
  1716.             if(x-i<2 && y-i<2){
  1717.                 break;
  1718.             }else if(pieces[x-i][y-i]!='\0' && (pieces[x-i][y-i]!='B' && pieces[x-i][y-i]!='Q')){
  1719.                 checkWhite=0;
  1720.                 checkMateWhite=0;
  1721.                 break;
  1722.             }
  1723.             else if(pieces[x-i][y-i]=='B'||pieces[x-i][y-i]=='Q'){
  1724.                 checkWhite=1;
  1725.                 checkMateWhite=1;
  1726.                 return;
  1727.             }
  1728.         }
  1729.         for(i=1; i<=7;i++){
  1730.             if(x+i>9 && y-i<2){
  1731.                 break;
  1732.             }else if(pieces[x+i][y-i]!='\0' && (pieces[x+i][y-i]!='B' && pieces[x+i][y-i]!='Q')){
  1733.                 checkWhite=0;
  1734.                 checkMateWhite=0;
  1735.                 break;
  1736.             }
  1737.             else if(pieces[x+i][y-i]=='B'||pieces[x+i][y-i]=='Q'){
  1738.                 checkWhite=1;
  1739.                 checkMateWhite=1;
  1740.                 return;
  1741.             }
  1742.         }
  1743.     }
  1744. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement