Вот здесь есть исходник шахматной программы: http://prboom-plus.sourceforge.net/chess.txt
Но совсем нечитаемый. С помощью gcc -E удалось избавиться от макроопределений:
#include <stdio.h>
#include <stdlib.h>
int v,w,Y= -1,W,J,p,F,o=9999,M,N,K,X,YY,_,P[9999],s(); typedef int(*L)(); L q[9999]; tj(){
int S=(v<0?-1:!!v)+((w<0?-1:!!w)<<K); if(!S)return J; for(v=W+S; v!=J&&!q[v]; v+=S); return v; } k(){ _=K; return
v?(v<0?-v:v)>1||w-Y||!q[J]:(w-Y&&(w-Y*2||q[W+Y*(N+1)]|| (J>>K)-K+(Y-1)/ 2))||q[J];
} z(){ _=5; return v*w||tj()-J; } e(){ _= -2;
return(v*v*v-v||w*w*w-w)&&(J-W-2||(W&N)-4||(W>>K!=(Y-1?N:0))||
q[W+1]||q[W+2]||q[W+K]!=z||P[W+K]*Y<0); } double VR(){ int PZ=0x7fff;
return(double)(rand()&PZ)/(double)PZ; } l(){ _=K+1; return(v*w&&(v<0?-v:v)-(w<0?-w:w))||tj()-J; } double UC(){ double i=0,d;
while((i+=d=VR())<1.0); return d; } c(){ _= -11; return (v<0?-v:v)-(w<0?-w:w)||tj()-J; } I(ur,n,x){ W=ur;
J=n; if(P[W]!=Y||P[J]==Y)return J+1; v=(J&N)-(W&N); w=(J>>K)-(W>>K); return
q[W]()||(x&&QL(W,J,s)); } TT(W){ v=w=0; return q[W]()+K; } s(){ int j= -1,i; Y= -Y;
for(i=0; i<M; ++i){ if(j<0&&P[i]== -Y&&TT(i)&&_== -2) { j=i; i= -1; } else
if(j>=0&&!I(i,j,0))return Y= -Y; } return!(Y= -Y); } bb(){ _=1; return (v*w<0?-v*w:v*w)-2; } uv(){
for(v=0; v<9999; ++v){ if(((v>>K)<=K?v>>K:N-(v>>K))==0){ int S=((v&N)<=K?v&N:N-(v&N));
q[v]=!S?z:(S==1?bb:(S==2?c:(v&N>K?l:e))); } else if(((v>>K)<=K?v>>K:N-(v>>K))==1)q[v]=k; else q[v]=0;
P[v]=!!q[v]*(28-v); } } y(){ int G=Y,i; J=0; for(i=0; i<M; ++i){
i%8||printf("\n%4o ",i); if((Y=P[i]=(P[i]<0?-1:!!P[i]))&& TT(i))printf("%c ",_+93+Y*16); else printf("- "); }
printf("\n "); do printf("%2d",i++&N); while(i&N); Y=G; printf("\n"); } O(W,J){
if((q[J]=q[W])==k&&((J>>K)<=K?J>>K:N-(J>>K))==0)q[J]=l; if(q[W]==e)if(J-W==2)O(J+1,J-1); else
if(W-J==2)O(W-1,W+1); P[J]=P[W]; q[W]=0; P[W]=0; } QL(W,J,D)L D; { int
HQ=P[J],YX; L AJ=q[J],XY=q[W]; O(W,J); YX=D(); O(J,W); q[J]=AJ; q[W]=XY;
P[J]=HQ; return YX; } C(){ int i,j,BZ=0; for(i=0; i<M; ++i){ L Z=q[i]; if(Z){ int
r=((i>>K)<=K?i>>K:N-(i>>K))+((i&N)<=K?i&N:N-(i&N)),G=Y, S=Z==z?88:(Z==k?11 +r+(P[i]<0?N-(i>>K):(i>>K)):
(Z==l?124-((YY<8&&((i&N)!=K|| (i>>K)!=(P[i]>0?0:N)))?M:0):
(Z==c?41+r:(Z==e?9999 -r-r:36+r+r)))); Y=P[i]; for(j=0; j<M;
++j)if(!I(i,j,0))S+=(P[j]?5:1); BZ+=G==Y?S:-S; Y=G; } }
if(!(++X&M-1))write(1,".",1); return BZ; } PX(){ int i,Q=0,XP=0,JZ=M*M,E= -9999,t,S=o;
if(!F--)return++F+C(); for(i=0; i<JZ; ++i)if(!I(i>>K+K,i&M-1,1)){ Y= -Y; o= -E; t=
-QL(i>>K+K,i&M-1,PX); Y= -Y; if(t>E){ ++XP; Q=i; E=t; if(E>=S) return++F,E; } }
if(!XP)E=s()?-9999 +1:0; p=Q; return++F,E; } RZ(){ int i,j,T=0; for(; ; ){ y(); o=9999; do{
printf("\n%d %d %d %s ",X,T,C(),s()?"!":">"); fflush(stdout); }
while(scanf("%o%o",&i,&j)!=2||I(i,j,1)); O(i,j); y(); X=0; ++YY; Y= -Y; T=PX();
i=p>>(K<<1); j=p&(M-1); if(I(i,j,1)){ printf("Rats!\n"); return; } O(i,j); Y= -Y;
if(T>M*M)printf("\nHar har.\n"); } } main(ac,av)char**av; { long time(),j=time(&j);
double i=0; srand((int)j); for(M=0; M<=9999; ++M)i+=UC(); M=i/100; if(M&3)++M; if(M&1)--M;
for(N=1; N*N<M; ++N); K= --N/2; F=ac>1?atoi(av[1]):2; uv(); RZ(); }
Тем не менее, все равно еще невозможно прочесть. Можно ли как-нибудь отформатировать этот текст в стиле K&R, GNU etc?