diff options
Diffstat (limited to 'gnu/games/chess/Xchess/program.c')
| -rw-r--r-- | gnu/games/chess/Xchess/program.c | 204 |
1 files changed, 0 insertions, 204 deletions
diff --git a/gnu/games/chess/Xchess/program.c b/gnu/games/chess/Xchess/program.c deleted file mode 100644 index e2eb186f98ed..000000000000 --- a/gnu/games/chess/Xchess/program.c +++ /dev/null @@ -1,204 +0,0 @@ - -/* This file contains code for X-CHESS. - Copyright (C) 1986 Free Software Foundation, Inc. - -This file is part of X-CHESS. - -X-CHESS is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY. No author or distributor -accepts responsibility to anyone for the consequences of using it -or for whether it serves any particular purpose or works at all, -unless he says so in writing. Refer to the X-CHESS General Public -License for full details. - -Everyone is granted permission to copy, modify and redistribute -X-CHESS, but only under the conditions described in the -X-CHESS General Public License. A copy of this license is -supposed to have been given to you along with X-CHESS so you -can know your rights and responsibilities. It should be in a -file named COPYING. Among other things, the copyright notice -and this notice must be preserved on all copies. */ - - -/* RCS Info: $Revision: 1.3 $ on $Date: 1994/11/04 02:11:30 $ - * $Source: /home/ncvs/src/gnu/games/chess/Xchess/program.c,v $ - * Copyright (c) 1986 Wayne A. Christopher, U. C. Berkeley CAD Group - * Permission is granted to do anything with this code except sell it - * or remove this message. - * - * The interface to whichever chess playing program we are using... - */ - -#include "xchess.h" -#include <signal.h> -#include <sys/time.h> - -static int pid; -static FILE *from; -static FILE *to; -static bool easy = 1; - -bool -program_init(name) - char *name; -{ - int toprog[2], fromprog[2]; - char buf[BSIZE]; - char time[10]; - char moves[10]; - - pipe(toprog); - pipe(fromprog); - - if (!(pid = fork())) { - /* Start up the program. */ - dup2(toprog[0], 0); - dup2(fromprog[1], 1); - close(toprog[0]); - close(toprog[1]); - close(fromprog[0]); - close(fromprog[1]); - sprintf (time, "%d", timeunit/60); - sprintf (moves, "%d", movesperunit); - if (proghost) - execl("/usr/ucb/rsh", "rsh", proghost, name, - moves, time, - (char *) NULL); - else - execl(name, name, moves, time, (char *) NULL); - perror(name); - exit(1); - } - - close(toprog[0]); - close(fromprog[1]); - - from = fdopen(fromprog[0], "r"); - setbuf(from, NULL); - to = fdopen(toprog[1], "w"); - setbuf(to, NULL); - - /* Get the first line... */ - fgets(buf, BSIZE, from); - if (debug) - fprintf(stderr, "program says %s", buf); - if (blackflag) { - fputs("switch\n", to); - fflush(to); - fgets(buf, BSIZE, from); - if (debug) - fprintf(stderr, "program says %s", buf); - message_add(win1, "GNU Chess playing white\n", false); - } else - message_add(win1, "GNU Chess playing black\n", false); - - return (true); -} - -void -program_end() -{ - fclose(from); - fclose(to); - kill(pid, SIGTERM); - return; -} - -void -program_send(m) - move *m; -{ - char buf[BSIZE]; - - if ((m->type == MOVE) || (m->type == CAPTURE)) - sprintf(buf, "%c%d%c%d\n", 'a' + m->fromx, SIZE - m->fromy, - 'a' + m->tox, SIZE - m->toy); - else if (m->type == KCASTLE) - strcpy(buf, (m->piece.color == WHITE) ? "e1g1\n" : "e8g8\n"); - else if (m->type == QCASTLE) - strcpy(buf, (m->piece.color == WHITE) ? "e1c1\n" : "e8c8\n"); - - if (debug) - fprintf(stderr, "sending program %s", buf); - if (!easy) - kill (pid, SIGINT); - - fputs(buf, to); - fflush(to); - - /* One junk line... */ - fgets(buf, BSIZE, from); - if (debug) - fprintf(stderr, "program says %s", buf); - return; -} - -move * -program_get() -{ - int rfd = (1 << fileno(from)), wfd = 0, xfd = 0; - static struct timeval notime = { 0, 0 }; - char buf[BSIZE], *s; - move *m; - int i; - - /* Do a poll... */ - -#ifdef __FreeBSD__ - if (!(i = select(32, &rfd, &wfd, &xfd, ¬ime))) { -#else - if (!(i = select(32, &rfd, &wfd, &xfd, ¬ime)) && - !from->_cnt) { /* Bad stuff... */ -#endif - if (debug) - fprintf(stderr, "poll: nothing\n"); - return (NULL); - } - if (i == -1) { - perror("select"); - return (NULL); - } - - fgets(buf, BSIZE, from); - if (*buf == '\n' || *buf == '\0') { - message_add(win1, "program died", false); - return (NULL); - } - - if (debug) - fprintf(stderr, "got from program %s", buf); - - for (s = buf; !isalpha(*s); s++) - ; - m = parse_imove(chessboard, s, nexttomove); - if (m == NULL) - return (NULL); - - if (!valid_move(m, chessboard)) { - fprintf(stderr, "Error: move %s is invalid!!\n", buf); - return (NULL); - } - - /* - fgets(buf, BSIZE, from); - if (debug) - fprintf(stderr, "program says %s", buf); - */ - message_add(win1, buf, false); - return (m); -} - -void -program_undo() -{ - fputs("undo\n", to); - return; -} -void -program_easy (mode) - bool mode; - -{ - fputs("easy\n", to); - easy = mode; -} |
