V7/usr/src/games/chess/io.c
#include "old.h"
rline()
{
char *p1;
int c;
p1 = sbuf;
while((c = getchar()) != '\n')
if(c <= 0)
onhup(); else
*p1++ = c;
*p1++ = '\0';
}
getchar()
{
int c;
loop:
c = 0;
read(0, &c, 1);
if(c == 0 && intrp) {
intrp = 0;
goto loop;
}
return(c);
}
pboard()
{
int i, x, y, c, p;
c = 0;
i = 0;
x = 8;
while(x--) {
if(!mantom || mfmt)
putchar('1'+x); else
putchar('8'-x);
putchar(' ');
c++;
y = 8;
while(y--) {
c++;
putchar(' ');
if(p = board[i++])
putchar("kqrbnp PNBRQK"[p+6]); else
if((c&1)!=0)
putchar('*'); else
putchar('-');
}
putchar('\n');
if(intrp)
return;
}
if(mfmt)
printf("\n a b c d e f g h"); else
printf("\n q q q q k k k k\n r n b b n r");
printf("\n");
}
out1(m)
{
printf("%d. ", moveno);
if(mantom)
printf("... ");
out(m);
putchar('\n');
}
out(m)
int m;
{
int from, to, epf, pmf;
from = m>>8;
to = m&0377;
if(mfmt) {
algco(from);
algco(to);
return;
}
mantom? bmove(m): wmove(m);
epf = pmf = 0;
switch(amp[-1]) {
case 0:
case 1:
stdp(board[to]);
ed:
putchar('/');
stdb(from);
if(amp[-2]) {
putchar('x');
stdp(amp[-2]);
putchar('/');
} else
putchar('-');
stdb(to);
break;
case 3:
putchar('o');
putchar('-');
case 2:
putchar('o');
putchar('-');
putchar('o');
break;
case 4:
epf = 1;
putchar('p');
goto ed;
case 5:
pmf = 1;
putchar('p');
goto ed;
}
if(pmf) {
putchar('(');
putchar('q');
putchar(')');
}
if(epf) {
putchar('e');
putchar('p');
}
if(check())
putchar('+');
mantom? bremove(): wremove();
}
stdp(p)
int p;
{
if(p < 0)
p = -p;
p = "ppnbrqk"[p];
putchar(p);
}
stdb(b)
int b;
{
int r, f;
r = b/8;
if((f = b%8) < 4)
putchar('q'); else {
putchar('k');
f = 7-f;
}
f = "rnb\0"[f];
if(f)
putchar(f);
putchar(mantom? r+'1': '8'-r);
}
algco(p)
int p;
{
putchar('a'+(p%8));
putchar('8'-(p/8));
}
putchar(c)
{
switch(c) {
case '\t':
do
putchar(' ');
while(column%8);
return;
case '\n':
column = 0;
break;
default:
column++;
}
write(1, &c, 1);
}
prtime(a, b)
{
printf("time = %d/%d\n", a, b);
}
score1(m)
{
if(intrp)
return;
if(!mantom) {
if(moveno < 10)
putchar(' '); else
putchar(moveno/10 + '0');
putchar(moveno%10 + '0');
putchar('.');
putchar(' ');
} else
while(column < 20)
putchar(' ');
out(m);
if(mantom)
putchar('\n');
}
score()
{
int *p;
putchar('\n');
p = amp;
while(amp[-1] != -1) {
mantom? wremove(): bremove();
decrem();
}
posit(score1, p);
putchar('\n');
}