home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 7 / FreshFishVol7.bin / bbs / game / uchess-2.89.lha / UChess / src / nondsp.c < prev    next >
C/C++ Source or Header  |  1994-06-29  |  24KB  |  1,153 lines

  1. /*
  2.  * nondsp.c - UNIX & MSDOS NON-DISPLAY, AND CHESSTOOL interface for Chess
  3.  *
  4.  * Copyright (c) 1988,1989,1990 John Stanback
  5.  * Copyright (c) 1992 Free Software Foundation
  6.  *
  7.  * This file is part of GNU CHESS.
  8.  *
  9.  * GNU Chess is free software; you can redistribute it and/or modify
  10.  * it under the terms of the GNU General Public License as published by
  11.  * the Free Software Foundation; either version 2, or (at your option)
  12.  * any later version.
  13.  *
  14.  * GNU Chess is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with GNU Chess; see the file COPYING.  If not, write to
  21.  * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  22.  */
  23.  
  24. #include <ctype.h>
  25. #include <signal.h>
  26.  
  27. #ifdef AMIGA
  28. void mysprintf(char *,char *,int);
  29. void mysprintf4(char *,char *,int);
  30. void mysprintf3(char *,char *,int,int);
  31. void algbr2 (short, short, short);
  32. #define __USE_SYSBASE
  33. #include <exec/types.h>
  34. #include <exec/exec.h>
  35. #include <proto/exec.h>
  36. #include <proto/dos.h>
  37. #include <proto/graphics.h>
  38. #include <proto/intuition.h>
  39. #endif
  40.  
  41. char __far HintString[80];
  42.  
  43.  
  44. #define SIGQUIT SIGINT
  45.  
  46. #include "gnuchess.h"
  47. #ifdef MSDOS
  48. #include <dos.h>
  49. #include <conio.h>
  50. #include <stdlib.h>
  51. #include <string.h>
  52. #include <time.h>
  53. #else
  54. #include <dos.h>
  55. #include <stdlib.h>
  56. #include <string.h>
  57. #include <time.h>
  58. /*
  59. #include <sys/param.h>
  60. #include <sys/types.h>
  61. #include <sys/file.h>
  62. #include <sys/ioctl.h>
  63. */
  64. #endif
  65.  
  66. extern int __aligned thinkahead;
  67.  
  68. extern INTSIZE __aligned amigaboard[64],amigacolor[64];
  69. extern short int ISZERO;
  70. char __aligned __far IllegalString[40];
  71. extern int AmigaStarted;
  72. extern int __aligned global_tmp_score;
  73. extern int __aligned previous_score;
  74. int __aligned IllegalMove=0;
  75. int __aligned Mate=0;
  76. int __aligned DrawnGame=0;
  77. char __far __aligned MateString[40]={0};
  78. extern long OrigResponse;
  79.  
  80. #ifdef DEBUG
  81. INTSIZE int __aligned debuglevel = 0;
  82.  
  83. #endif /* DEBUG */
  84. unsigned INTSIZE int __aligned MV[MAXDEPTH];
  85. int __aligned MSCORE;
  86.  
  87. #if defined CHESSTOOL || defined XBOARD
  88. INTSIZE int __aligned chesstool = 1;
  89.  
  90. #else
  91. INTSIZE int __aligned chesstool = 0;
  92.  
  93. #endif /* CHESSTOOL */
  94. extern char __aligned mvstrhint[8][8];
  95. extern char mvstr[8][8];
  96. int __aligned mycnt1, mycnt2;
  97. char __aligned *DRAW;
  98. extern char *InPtr;
  99. extern INTSIZE int pscore[];
  100.  
  101. void mysprintf4(ostr,fstr,num)
  102. char *ostr,*fstr;
  103. int num;
  104. { // formats string "Tgt:%d xxx"
  105.  
  106.  int index;
  107.  int thou,hun,ten,one,rem;
  108.  
  109.  
  110.  ostr[0] = fstr[0];
  111.  ostr[1] = fstr[1];
  112.  ostr[2] = fstr[2];
  113.  ostr[3] = fstr[3];
  114.  ostr[4] = 0;
  115.  if (num < 0) 
  116.   {
  117.    num = -num;
  118.    index = 5;
  119.    strcat(ostr,"-");
  120.   }
  121.  else
  122.   {
  123.    index = 4;
  124.   }
  125.  thou = num / 1000;
  126.  rem = num-(num / 1000)*1000;
  127.  hun = (rem / 100);
  128.  rem = rem-(hun * 100);
  129.  ten = rem / 10;
  130.  rem = rem-(ten * 10);
  131.  one = rem;
  132.  if (thou)
  133.   {
  134.    ostr[index++] = thou+'0';
  135.   }
  136.  if ((hun)||(thou))
  137.   {
  138.    ostr[index++] = hun+'0';
  139.   }
  140.  if ((ten)||(hun)||(thou))
  141.   {
  142.    ostr[index++] = ten+'0';
  143.   }
  144.  ostr[index++] = one+'0';
  145.  ostr[index] = 0;
  146.  strcat(ostr,&fstr[6]);
  147. }
  148.  
  149. void mysprintf3(ostr,fstr,num,num2)
  150. char *ostr,*fstr;
  151. int num,num2;
  152. { // formats string "D%d S%d "
  153.  
  154.  int index;
  155.  int thou,hun,ten,one,rem;
  156.  
  157.  
  158.  ostr[0] = fstr[0]; // get the D
  159.  ostr[1] = 0;
  160.  if (num < 0) 
  161.   {
  162.    num = -num;
  163.    index = 2;
  164.    strcat(ostr,"-");
  165.   }
  166.  else
  167.   {
  168.    index = 1;
  169.   }
  170.  thou = num / 1000;
  171.  rem = num-(num / 1000)*1000;
  172.  hun = (rem / 100);
  173.  rem = rem-(hun * 100);
  174.  ten = rem / 10;
  175.  rem = rem-(ten * 10);
  176.  one = rem;
  177.  if (thou)
  178.   {
  179.    ostr[index++] = thou+'0';
  180.   }
  181.  if ((hun)||(thou))
  182.   {
  183.    ostr[index++] = hun+'0';
  184.   }
  185.  if ((ten)||(hun)||(thou))
  186.   {
  187.    ostr[index++] = ten+'0';
  188.   }
  189.  ostr[index++] = one+'0';
  190.  ostr[index++] = fstr[3];
  191.  ostr[index++] = fstr[4];
  192.  
  193.  if (num2 < 0)
  194.   {
  195.    num2 = -num2;
  196.    ostr[index++] = '-';
  197.   }
  198.  thou = num2 / 1000;
  199.  rem = num2-(num2 / 1000)*1000;
  200.  hun = (rem / 100);
  201.  rem = rem-(hun * 100);
  202.  ten = rem / 10;
  203.  rem = rem-(ten * 10);
  204.  one = rem;
  205.  if (thou)
  206.   {
  207.    ostr[index++] = thou+'0';
  208.   }
  209.  if ((hun)||(thou))
  210.   {
  211.    ostr[index++] = hun+'0';
  212.   }
  213.  if ((ten)||(hun)||(thou))
  214.   {
  215.    ostr[index++] = ten+'0';
  216.   }
  217.  ostr[index++] = one+'0';
  218.  ostr[index] = 0;
  219.  strcat(ostr,&fstr[7]);
  220. }
  221.  
  222.  
  223. void
  224. Initialize (void)
  225. {
  226.   mycnt1 = mycnt2 = 0;
  227. #if defined CHESSTOOL || defined XBOARD
  228. #ifndef SYSV
  229. /*  setlinebuf (stdout);*/
  230. #else
  231. /*  setvbuf (stdout, NULL, _IOLBF, BUFSIZ);*/
  232. #endif
  233. /*  printf (CP[43]);*/        /*Chess*/
  234.   if (!TCflag && (MaxResponseTime == 0))
  235.     MaxResponseTime = 15L*100L;
  236. #endif /* CHESSTOOL */
  237. }
  238.  
  239.  
  240. void DoAMove(void);
  241.  
  242. void DoAMove()
  243. {
  244.  char astr[40];
  245.  int r,c,l;
  246.  char piece;
  247.  
  248.       r = mvstr[0][3] - '1';
  249.       c = mvstr[0][2] - 'a';
  250.       l = ((flag.reverse) ? locn (7 - r, 7 - c) : locn (r, c));
  251.       if (color[l] == neutral)
  252.        {
  253.     //DisplayBeep(0L);
  254.         //Delay(25L);
  255.     //DisplayBeep(0L);
  256.         //Delay(25L);
  257.     //DisplayBeep(0L);
  258.         //Delay(25L);
  259.         piece = ' ';
  260.        }
  261.       else if (color[l] == white)
  262.         piece = qxx[board[l]]; /* white are lower case pieces */
  263.       else
  264.         piece = pxx[board[l]]; /* black are upper case pieces */
  265.   if (computer == black)
  266.    {
  267.     mysprintf(astr,"%d: ",GameCnt>>1);
  268.     strcat(astr,mvstr[0]);
  269.    }
  270.   else
  271.    {
  272.     mysprintf(astr,"%d: ",(GameCnt+1)>>1);   
  273.     strcat(astr,mvstr[0]);
  274.    }
  275.   DisplayComputerMove(astr);
  276.   if (piece != ' ')
  277.    AnimateAmigaMove(mvstr[0],piece);
  278. }
  279. void
  280. ExitChess (void)
  281. {
  282. /*  signal (SIGTERM, SIG_IGN);*/
  283.   ListGame (0L);
  284. #ifdef AMIGA
  285.   if (AmigaStarted)
  286.    AmigaShutDown();
  287. #endif
  288.   exit (0);
  289. }
  290.  
  291. #ifndef MSDOS            /* never called!!! */
  292. #ifndef AMIGA
  293. void
  294. Die (int sig)
  295. {
  296.   char s[80];
  297.  
  298.   ShowMessage (CP[31]);        /*Abort?*/
  299.   scanz ("%s", s);
  300.   if (strcmp (s, CP[210]) == 0)    /*yes*/
  301.     ExitChess ();
  302. }
  303. #endif
  304. #endif /* MSDOS */
  305.  
  306. void
  307. TerminateSearch (int sig)
  308. {
  309. #ifdef MSDOS
  310.   sig++;            /* shut up the compiler */
  311. #endif /* MSDOS */
  312.   if (!flag.timeout)
  313.     flag.musttimeout = true;
  314.   flag.bothsides = false;
  315. }
  316.  
  317.  
  318. void
  319. help (void)
  320. {
  321. #ifndef AMIGA
  322.   ClrScreen ();
  323.   /*printz ("CHESS command summary\n");*/
  324.   printz (CP[40]);
  325.   printz ("----------------------------------------------------------------\n");
  326.   /*printz ("g1f3      move from g1 to f3      quit      Exit Chess\n");*/
  327.   printz (CP[158]);
  328.   /*printz ("Nf3       move knight to f3       beep      turn %s\n", (flag.beep) ? "off" : "on");*/
  329.   printz (CP[86], (flag.beep) ? CP[92] : CP[93]);
  330.   /*printz ("a7a8q     promote pawn to queen\n");*/
  331.   printz (CP[128], (flag.material) ? CP[92] : CP[93]);
  332.   /*printz ("o-o       castle king side        easy      turn %s\n", (flag.easy) ? "off" : "on");*/
  333.   printz (CP[173], (flag.easy) ? CP[92] : CP[93]);
  334.   /*printz ("o-o-o     castle queen side       hash      turn %s\n", (flag.hash) ? "off" : "on");*/
  335.   printz (CP[174], (flag.hash) ? CP[92] : CP[93]);
  336.   /*printz ("bd        redraw board            reverse   board display\n");*/
  337.   printz (CP[130]);
  338.   /*printz ("list      game to chess.lst       book      turn %s used %d of %d\n", (Book) ? "off" : "on", bookcount, BOOKSIZE);*/
  339.   printz (CP[170], (Book) ? CP[92] : CP[93], bookcount, BOOKSIZE);
  340.   /*printz ("undo      undo last ply           remove    take back a move\n");*/
  341.   printz (CP[200]);
  342.   /*printz ("edit      edit board              force     enter game moves\n");*/
  343.   printz (CP[153]);
  344.   /*printz ("switch    sides with computer     both      computer match\n");*/
  345.   printz (CP[194]);
  346.   /*printz ("white     computer plays white    black     computer plays black\n");*/
  347.   printz (CP[202]);
  348.   /*printz ("depth     set search depth        clock     set time control\n");*/
  349.   printz (CP[149]);
  350.   /*printz ("post      principle variation     hint      suggest a move\n");*/
  351.   printz (CP[177]);
  352.   /*printz ("save      game to file            get       game from file\n");*/
  353.   printz (CP[188]);
  354.   /*printz ("random    randomize play          new       start new game\n");*/
  355.   printz (CP[181]);
  356.   printz ("----------------------------------------------------------------\n");
  357.   /*printz ("Computer: %-12s Opponent:            %s\n",*/
  358.   printz (CP[46],