home *** CD-ROM | disk | FTP | other *** search
- Path: uunet!zephyr.ens.tek.com!master!saab!billr
- From: billr@saab.CNA.TEK.COM (Bill Randle)
- Newsgroups: comp.sources.games
- Subject: v13i095: gnuchess4 - GNU Chess 4.0, Part07/12
- Message-ID: <3062@master.CNA.TEK.COM>
- Date: 19 Jun 92 15:54:34 GMT
- Sender: news@master.CNA.TEK.COM
- Lines: 2008
- Approved: billr@saab.CNA.TEK.COM
-
- Submitted-by: cracraft@rice-chex.ai.mit.edu (Stuart Cracraft)
- Posting-number: Volume 13, Issue 95
- Archive-name: gnuchess4/Part07
- Supersedes: gnuchess2: Volume 4, Issue 37-40
- Environment:
-
-
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 7 (of 12)."
- # Contents: misc/ChessFont src/ataks.h src/nuxdsp.c test/test12
- # Wrapped by billr@saab on Fri Jun 19 08:36:01 1992
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'misc/ChessFont' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'misc/ChessFont'\"
- else
- echo shar: Extracting \"'misc/ChessFont'\" \(28062 characters\)
- sed "s/^X//" >'misc/ChessFont' <<'END_OF_FILE'
- X%!PS-Adobe-1.0
- X%% This is my font for chess and similar pieces. It is supplied "as is".
- X%% It works for me, I have no idea whether it will work for you; you gets
- X%% what you pays for. Before using it, you should read the Copyright
- X%% notice below and the "README" file which should accompany this file.
- X%% -- ANW, March 1991.
- X
- X/Cfont 9 dict dup begin
- X
- X/FontMatrix [ 0.001 0 0 0.001 0 0 ] readonly def
- X/FontType 3 def
- X/FontBBox [ 0 0 0 0 ] readonly def
- X/Encoding 256 array def
- X/FontInfo 3 dict dup begin
- X /Notice (
- X
- X Copyright (c) 1991 A. N. Walker. All rights reserved.
- X
- X This notice must be preserved in all versions of this file, and
- X any alterations which you make must be clearly marked as such.
- X For further information, see the "README" file which should
- X accompany this, or contact me at Dept of Mathematics, Nottingham
- X Univ., UK, anw@maths.nott.ac.uk.
- X
- X ) readonly def
- X /FullName (ChessFont) readonly def
- X /version (2.0) readonly def
- Xend def
- X/UniqueID 472474 def
- X
- XEncoding
- X0 1 255 { 2 copy /.notdef put pop } for
- Xdup 8#040 /Wsquare put % ' '
- Xdup 8#042 /flap put % '"'
- Xdup 8#043 /board put % '#'
- Xdup 8#047 /flip put % ''''
- Xdup 8#052 /Bsquare put % '*'
- Xdup 8#055 /edge put % '-'
- Xdup 8#056 /blobfig put % '.'
- Xdup 8#057 /corner put % '/'
- Xdup 8#060 /m0 put % '0'
- Xdup 8#061 /Wsquare put % '1'
- Xdup 8#062 /m2 put % '2'
- Xdup 8#063 /m3 put % '3'
- Xdup 8#064 /m4 put % '4'
- Xdup 8#065 /m5 put % '5'
- Xdup 8#066 /m6 put % '6'
- Xdup 8#067 /m7 put % '7'
- Xdup 8#070 /m8 put % '8'
- Xdup 8#071 /m9 put % '9'
- Xdup 8#073 /nextline put % ';'
- Xdup 8#074 /m-1 put % '<'
- Xdup 8#076 /Wsquare put % '>'
- Xdup 8#100 /wblock put % '@'
- Xdup 8#102 /WB put % 'B'
- Xdup 8#103 /WC put % 'C'
- Xdup 8#104 /WD put % 'D'
- Xdup 8#105 /WE put % 'E'
- Xdup 8#106 /WF put % 'F'
- Xdup 8#107 /WG put % 'G'
- Xdup 8#111 /blob put % 'I'
- Xdup 8#113 /WK put % 'K'
- Xdup 8#114 /WL put % 'L'
- Xdup 8#115 /WM put % 'M'
- Xdup 8#116 /WN put % 'N'
- Xdup 8#117 /BO put % 'O'
- Xdup 8#120 /WP put % 'P'
- Xdup 8#121 /WQ put % 'Q'
- Xdup 8#122 /WR put % 'R'
- Xdup 8#123 /WS put % 'S'
- Xdup 8#124 /WT put % 'T'
- Xdup 8#125 /WU put % 'U'
- Xdup 8#126 /WV put % 'V'
- Xdup 8#130 /WX put % 'X'
- Xdup 8#132 /WZ put % 'Z'
- Xdup 8#133 /posstart put % '['
- Xdup 8#135 /posfinish put % ']'
- Xdup 8#137 /underbar put % '_'
- Xdup 8#142 /BB put % 'b'
- Xdup 8#143 /BC put % 'c'
- Xdup 8#144 /BD put % 'd'
- Xdup 8#145 /BE put % 'e'
- Xdup 8#146 /BF put % 'f'
- Xdup 8#147 /BG put % 'g'
- Xdup 8#151 /blob put % 'i'
- Xdup 8#153 /BK put % 'k'
- Xdup 8#154 /BL put % 'l'
- Xdup 8#155 /BM put % 'm'
- Xdup 8#156 /BN put % 'n'
- Xdup 8#157 /BO put % 'o'
- Xdup 8#160 /BP put % 'p'
- Xdup 8#161 /BQ put % 'q'
- Xdup 8#162 /BR put % 'r'
- Xdup 8#163 /BS put % 's'
- Xdup 8#164 /BT put % 't'
- Xdup 8#165 /BU put % 'u'
- Xdup 8#166 /BV put % 'v'
- Xdup 8#170 /BX put % 'x'
- Xdup 8#172 /BZ put % 'z'
- Xdup 8#174 /sidebar put % '|'
- Xdup 8#240 /Wsquare put % ' '+
- Xdup 8#241 /without put % '!'+
- Xdup 8#242 /flap put % '"'+
- Xdup 8#243 /board put % '#'+
- Xdup 8#245 /infinityequals put % '%'+
- Xdup 8#247 /flip put % ''''+
- Xdup 8#252 /circledot put % '*'+
- Xdup 8#253 /plus put % '+'+
- Xdup 8#255 /minus put % '-'+
- Xdup 8#272 /doubled put % ':'+
- Xdup 8#273 /nextline put % ';'+
- Xdup 8#274 /equalsplus put % '<'+
- Xdup 8#275 /equal put % '='+
- Xdup 8#276 /plusequals put % '>'+
- Xdup 8#277 /infinity put % '?'+
- Xdup 8#300 /circarrow put % '@'+
- Xdup 8#302 /Bfig put % 'B'+
- Xdup 8#303 /Cfig put % 'C'+
- Xdup 8#304 /Dfig put % 'D'+
- Xdup 8#305 /Efig put % 'E'+
- Xdup 8#306 /Ffig put % 'F'+
- Xdup 8#307 /Gfig put % 'G'+
- Xdup 8#311 /blobfig put % 'I'+
- Xdup 8#313 /Kfig put % 'K'+
- Xdup 8#314 /Lfig put % 'L'+
- Xdup 8#315 /Mfig put % 'M'+
- Xdup 8#316 /Nfig put % 'N'+
- Xdup 8#317 /Ofig put % 'O'+
- Xdup 8#320 /Pfig put % 'P'+
- Xdup 8#321 /Qfig put % 'Q'+
- Xdup 8#322 /Rfig put % 'R'+
- Xdup 8#323 /Sfig put % 'S'+
- Xdup 8#324 /Tfig put % 'T'+
- Xdup 8#325 /Ufig put % 'U'+
- Xdup 8#326 /Vfig put % 'V'+
- Xdup 8#330 /Xfig put % 'X'+
- Xdup 8#332 /Zfig put % 'Z'+
- Xdup 8#333 /minusorplus put % '['+
- Xdup 8#335 /plusorminus put % ']'+
- Xdup 8#336 /uparrow put % '^'+
- Xdup 8#341 /rightarrow put % 'a'+
- Xdup 8#342 /semicircle put % 'b'+
- Xdup 8#343 /centre put % 'c'+
- Xdup 8#344 /diags put % 'd'+
- Xdup 8#345 /etc put % 'e'+
- Xdup 8#346 /Phalo put % 'f'+
- Xdup 8#347 /samebs put % 'g'+
- Xdup 8#350 /edgefig put % 'h'+
- Xdup 8#351 /triangle put % 'i'+
- Xdup 8#352 /Bsquarefig put % 'j'+
- Xdup 8#353 /kside put % 'k'+
- Xdup 8#354 /line put % 'l'+
- Xdup 8#355 /hash put % 'm'+
- Xdup 8#356 /cornerfig put % 'n'+
- Xdup 8#357 /square put % 'o'+
- Xdup 8#360 /ending put % 'p'+
- Xdup 8#361 /qside put % 'q'+
- Xdup 8#362 /Pfill put % 'r'+
- Xdup 8#363 /separated put % 's'+
- Xdup 8#364 /tempo put % 't'+
- Xdup 8#365 /united put % 'u'+
- Xdup 8#366 /oppbs put % 'v'+
- Xdup 8#367 /with put % 'w'+
- Xdup 8#370 /weakpt put % 'x'+
- Xdup 8#371 /bpair put % 'y'+
- Xdup 8#372 /circlebolddot put % 'z'+
- X 8#374 /botharrow put % '|'+
- X
- X/CharProcs 200 dict dup begin
- X
- X% Miscellaneous:
- X /.notdef { } bind def
- X /Arcto { arcto 4 { pop } repeat } bind def
- X /Ddn3c { dup dup neg 3 copy } bind def
- X /Round { dtransform round exch round exch idtransform } bind def
- X /Rlineto { Round rlineto } bind def
- X /Rmoveto { Round rmoveto } bind def
- X /diamond { moveto dup neg 0 rmoveto dup dup neg rlineto
- X dup dup rlineto dup neg exch rlineto closepath } bind def
- X /dohalo { gsave 100 setlinewidth setW stroke grestore } bind def
- X /dofill { gsave fill grestore } bind def
- X /motion { 1000 mul exch 1000 mul exch setcharwidth } bind def
- X /setW { 1 setgray } bind def
- X /setB { 0 setgray } bind def
- X /drawingB { 0 currentgray eq } bind def
- X /setfig { 1000 0 0 -200 1000 800 setcachedevice 500 300 translate
- X } bind def
- X /setpce { 1000 0 setcharwidth 500 dup translate 0.95 dup scale
- X } bind def
- X /MiscStr (a) def
- X /tofig { 0 get 8#200 add MiscStr exch 0 exch put MiscStr } bind def
- X /Tofig { 1 0.95 div dup scale tofig } bind def
- X /intext true def
- X /flip { 0 0 setcharwidth /intext intext not def } bind def
- X /flap { 0 0 setcharwidth /intext true def } bind def
- X /Setfont { /ChessFont findfont 1000 scalefont setfont } bind def
- X /Show { rotate -500 dup moveto Setfont show } bind def
- X /Showfig { rotate -500 -300 moveto Setfont show } bind def
- X /LocStr (a) def
- X /SetChar {
- X dup 8#047 eq { pop flip stop } if
- X dup 8#200 lt { intext {
- X 8#200 add LocStr exch 0 exch put
- X Setfont LocStr dup stringwidth setcharwidth
- X 0 0 moveto show stop } if } if } bind def
- X /DoChar { Encoding exch get cvx exec } bind def
- X
- X% Kings
- X /WK { setpce Kout dohalo setW dofill setB stroke Kin } bind def
- X /BK { setpce Kout dohalo dofill stroke setW Kin } bind def
- X /Kfig { setfig Kout stroke Kin } bind def
- X
- X /Kout { 2 setmiterlimit
- X 325 -100 moveto 600 100 350 400 125 250 curveto
- X 0 250 rlineto -250 0 rlineto 0 -250 rlineto
- X -350 400 -600 100 -325 -100 curveto 0 -250 rlineto
- X -100 -500 100 -500 325 -350 curveto closepath
- X 30 setlinewidth } bind def
- X /Kin { drawingB { 325 } { 275 } ifelse
- X Ddn3c -350 moveto 0 -300 3 -1 roll -350 800 Arcto
- X -350 lineto -100 moveto 0 -50 3 -1 roll
- X -100 800 Arcto -100 lineto
- X 15 0 -185 diamond 15 -250 -210 diamond 15 250 -210 diamond
- X drawingB { 125 } { 75 } ifelse
- X Ddn3c dup dup 4 { 0 375 moveto rlineto } repeat
- X drawingB { 0 -45 moveto 125 250 lineto -250 0 rlineto
- X closepath } { 15 0 180 diamond 265 -95 moveto
- X 480 150 280 380 50 -50 curveto -265 -95 moveto
- X -480 150 -280 380 -50 -50 curveto } ifelse
- X stroke } bind def
- X
- X% Queens
- X /WQ { setpce Qout dohalo setW dofill setB stroke Qin } bind def
- X /BQ { setpce Qout dohalo dofill stroke setW Qin } bind def
- X /Qfig { setfig Qout stroke Qin } bind def
- X
- X /Qout { 2 setmiterlimit
- X 0 75 moveto -150 440 50 -80 280 arc -250 25 lineto
- X -440 200 50 -60 300 arc -325 -100 lineto 0 -250 rlineto
- X -100 -500 100 -500 325 -350 curveto 0 250 rlineto
- X 440 200 50 -120 240 arc 250 25 lineto 150 440 50 -100 260 arc
- X closepath 30 setlinewidth } bind def
- X /Qin { drawingB { 325 } { 275 } ifelse
- X Ddn3c -350 moveto 0 -300 3 -1 roll -350 800 Arcto -350 lineto
- X -100 moveto 0 -50 3 -1 roll -100 800 Arcto -100 lineto
- X 15 0 -185 diamond 15 -250 -210 diamond 15 250 -210 diamond
- X stroke } bind def
- X
- X% Rooks
- X /WR { setpce Rout dohalo setW dofill setB stroke Rin } bind def
- X /BR { setpce Rout dohalo dofill stroke setW Rin } bind def
- X /Rfig { setfig Rout stroke Rin } bind def
- X
- X /Rout { -325 -450 moveto 650 0 rlineto 0 50 rlineto -100 175 rlineto
- X 0 400 rlineto 50 75 rlineto 0 150 rlineto -86 0 rlineto
- X -30 -100 rlineto -86 0 rlineto -30 100 rlineto -86 0 rlineto
- X -30 -100 rlineto -86 0 rlineto -30 100 rlineto -86 0 rlineto
- X 0 -150 rlineto 50 -75 rlineto 0 -400 rlineto -100 -175 rlineto
- X closepath 30 setlinewidth } bind def
- X /Rin { drawingB { -225 } { -195 } ifelse
- X dup -225 moveto dup -2 mul 0 rlineto
- X dup 175 moveto -2 mul 0 rlineto stroke } bind def
- X
- X% Bishops
- X /WB { Bsetpce Bout setW dofill setB stroke Bin } bind def
- X /BB { Bsetpce Bout dofill stroke setW Bin } bind def
- X /Bfig { Bsetfig Bout stroke Bin } bind def
- X
- X /Bsetpce { /Binpce true def setpce } bind def
- X /Bsetfig { /Binpce false def setfig } bind def
- X /Bout { 2 setmiterlimit
- X -400 -500 moveto 100 100 300 0 400 100 rcurveto
- X 100 -100 300 0 400 -100 rcurveto 0 100 rlineto
- X -100 100 -300 0 -400 100 rcurveto
- X -100 -100 -300 0 -400 -100 rcurveto closepath
- X 200 -350 moveto 0 200 rlineto
- X 200 0 150 215 0 325 curveto -75 420 40 -90 270 arc
- X -340 100 -340 100 -200 -150 curveto 0 -200 rlineto
- X 200 50 rlineto closepath 30 setlinewidth
- X gsave 0 325 moveto 150 215 200 0 200 -150 curveto
- X 340 100 340 100 75 380 curveto 75 420 40 -90 270 arc
- X closepath Binpce { dohalo setW dofill setB } if stroke
- X grestore } bind def
- X /Bin { 15 0 -225 diamond
- X drawingB { 200 } { 150 } ifelse Ddn3c
- X -350 moveto 20 rlineto -20 rlineto -150 moveto
- X 30 rlineto -30 rlineto stroke } bind def
- X
- X% Knights
- X /WN { setpce Nout dohalo setW dofill setB stroke Nin } bind def
- X /BN { setpce Nout dohalo dofill stroke setW Nin } bind def
- X /Nfig { setfig Nout stroke Nin } bind def
- X
- X /Nout { 2 setmiterlimit
- X 450 -450 moveto 450 200 150 350 -50 400 curveto
- X -25 100 rlineto -75 -200 rlineto -75 150 rlineto
- X 0 -150 rlineto -125 -125 -325 -400 -275 -450 rcurveto
- X 75 -75 rlineto 100 130 rlineto 0 -200 rlineto
- X 50 -25 150 100 100 150 rcurveto 50 -50 150 75 125 150 rcurveto
- X 125 -300 -250 -250 -250 -450 curveto
- X closepath 30 setlinewidth } bind def
- X /Nin { 15 -200 150 diamond stroke
- X drawingB {
- X [ 100 100 ] 0 setdash 410 -450 moveto
- X 410 200 130 330 -60 380 curveto 50 setlinewidth
- X stroke } {
- X 430 -430 moveto 430 200 150 350 -30 370 curveto
- X 150 250 390 200 390 -430 curveto fill }
- X ifelse } bind def
- X
- X% Pawns
- X % Pawns are the only symbols which occur "frequently" in a chess
- X % diagram, so we make a special effort to optimise their caching
- X % behaviour. Also, they are the only symbols for which this is
- X % easy!
- X
- X /WP { setpce Setfont setW 0 0 moveto (f) tofig show setB (P) tofig
- X -500 -300 rmoveto show } bind def
- X /BP { setpce Setfont setW 0 0 moveto (f) tofig show setB (r) tofig
- X show } bind def
- X /Pfig { setfig Pout stroke Pin } bind def
- X
- X /Pout { 300 -450 moveto 200 -300 200 -300 75 -250 curveto
- X 125 -50 125 -50 75 150 curveto 125 150 100 0 90 arc
- X 0 300 100 -30 210 arc -125 150 100 90 180 arc
- X 150 0 rlineto -125 -50 -125 -50 -75 -250 curveto
- X -200 -300 -200 -300 -300 -450 curveto
- X closepath 50 setlinewidth } bind def
- X /Pin { -75 150 moveto 150 0 rlineto stroke } bind def
- X
- X /Phalo { 0 0 -350 -500 350 450 setcachedevice
- X Pout gsave 100 setlinewidth stroke grestore fill } bind def
- X /Pfill { 0 0 -325 -475 375 425 setcachedevice
- X Pout gsave stroke grestore fill } bind def
- X
- X% Fous
- X % There seem to be several styles of Fou (French Bishop) -- I have
- X % selected the easiest to implement. Anyone who *really* wants
- X % this piece can do some work for themselves!
- X
- X /WF { setpce Fout dohalo setW dofill setB stroke Fin } bind def
- X /BF { setpce Fout dohalo dofill stroke setW Fin } bind def
- X /Ffig { setfig Fout stroke Fin } bind def
- X
- X /Fout { 2 setlinejoin
- X -300 -400 moveto 150 300 rlineto -250 500 rlineto
- X 250 -125 rlineto 150 175 rlineto 150 -175 rlineto
- X 250 125 rlineto -250 -500 rlineto 150 -300 rlineto
- X closepath 30 setlinewidth } bind def
- X
- X /Fin { 0 -400 150 dup mul 675 dup mul add sqrt
- X drawingB { 600 300 } { 30 sub 600 270 } ifelse
- X atan dup 180 sub neg arc
- X 400 drawingB not { 15 5 sqrt mul add } if
- X dup neg 400 moveto dup dup -2 mul rlineto dup 2 mul rlineto
- X 30 -100 150 diamond 30 100 150 diamond
- X 0 175 moveto 0 -200 rlineto currentpoint stroke
- X 75 210 330 arc stroke } bind def
- X
- X% Miscellaneous Fairy pieces
- X
- X % Grasshopper
- X /WG { setpce (Q) 180 Show } bind def
- X /BG { setpce (q) 180 Show } bind def
- X /Gfig { setfig (Q) tofig 180 Showfig } bind def
- X
- X % Nightrider. Real problemists use S for Knight and N for Nightrider;
- X % the weight of tradition forces N for Knight, hence S here.
- X /WS { setpce (N) 180 Show } bind def
- X /BS { setpce (n) 180 Show } bind def
- X /Sfig { setfig (N) tofig 180 Showfig } bind def
- X
- X % Zebra
- X /WZ { setpce (N) -90 Show } bind def
- X /BZ { setpce (n) -90 Show } bind def
- X /Zfig { setfig (N) tofig -90 Showfig } bind def
- X
- X % Mao. Also Camel, but C is for Chameleon.
- X /WM { setpce (N) 90 Show } bind def
- X /BM { setpce (n) 90 Show } bind def
- X /Mfig { setfig (N) tofig 90 Showfig } bind def
- X
- X % Vao
- X /WV { setpce (B) 90 Show } bind def
- X /BV { setpce (b) 90 Show } bind def
- X /Vfig { setfig (B) tofig 90 Showfig } bind def
- X
- X % Equihopper
- X /WE { setpce (Q) -90 Show } bind def
- X /BE { setpce (q) -90 Show } bind def
- X /Efig { setfig (Q) tofig -90 Showfig } bind def
- X
- X % Leo. Also Locust, Lion, Edgehog
- X /WL { setpce (Q) 90 Show } bind def
- X /BL { setpce (q) 90 Show } bind def
- X /Lfig { setfig (Q) tofig 90 Showfig } bind def
- X
- X % Pao. Also Empress. Sorry, all Uther mnemonics seemed to be used Up.
- X /WU { setpce (R) 90 Show } bind def
- X /BU { setpce (r) 90 Show } bind def
- X /Ufig { setfig (R) tofig 90 Showfig } bind def
- X
- X % Orphan -- NB, all Orphans are black!
- X /BO { setpce (p) 90 Show } bind def
- X /Ofig { setfig 90 rotate Pout dofill stroke } bind def
- X
- X % Rose. Gardeners will know why T is mnemonic for this.
- X /WT { setpce Tout dohalo setW dofill setB stroke Tin } bind def
- X /BT { setpce Tout dohalo dofill stroke setW Tin } bind def
- X /Tfig { setfig Tout stroke Tin } bind def
- X
- X /Tout { 300 2 sqrt 1 sub mul
- X 8 { dup 300 exch dup -90 135 arc 45 rotate } repeat
- X pop 50 setlinewidth } bind def
- X /Tin { drawingB { 270 } { 300 } ifelse
- X 8 { dup 0 0 moveto 0 lineto 45 rotate } repeat
- X pop stroke } bind def
- X
- X % Chameleon
- X /WC { setpce Cout dohalo setW dofill setB stroke } bind def
- X /BC { setpce Cout dohalo dofill stroke } bind def
- X /Cfig { setfig Cout stroke } bind def
- X
- X /Cout { 2 setmiterlimit 50 setlinewidth
- X -250 -350 moveto 500 0 rlineto -500 700 rlineto
- X 500 0 rlineto closepath } bind def
- X
- X % Blob [for marking squares], also for Imitator
- X /blob { setpce 0 0 250 0 360 arc dohalo dofill } bind def
- X /blobfig { setfig 0 200 250 0 360 arc dofill } bind def
- X
- X% Draughts/Dame/Checkers pieces
- X
- X % Man
- X /WD { setpce Dout dohalo setW dofill setB stroke Din } bind def
- X /BD { setpce Dout dohalo dofill stroke setW Din } bind def
- X /Dfig { setfig Dout stroke Din } bind def
- X
- X /Dout { 1 0.5 scale 0 0 350 0 180 arc 0 -400 350 180 0 arc
- X closepath 50 setlinewidth } bind def
- X /Din { 0 0 350 drawingB { 180 0 } { 210 -30 20 setlinewidth }
- X ifelse arc stroke 20 setlinewidth 0 0 220 0 360 arc stroke
- X 0 0 80 0 360 arc stroke } bind def
- X
- X % King. The mnemonic for this is unknown.
- X /WX { setpce Xout dohalo setW dofill setB stroke Xin } bind def
- X /BX { setpce Xout dohalo dofill stroke setW Xin } bind def
- X /Xfig { setfig Xout stroke Xin } bind def
- X
- X /Xout { 1 0.5 scale 0 400 350 0 180 arc 0 -400 350 180 0 arc
- X closepath 50 setlinewidth } bind def
- X /Xin { 0 400 350 drawingB { 180 0 } { 210 -30 20 setlinewidth }
- X ifelse arc stroke 0 0 350 drawingB { 180 0 } { 210 -30 }
- X ifelse arc stroke 20 setlinewidth 0 400 220 0 360 arc stroke
- X 0 400 80 0 360 arc stroke } bind def
- X
- X% Board symbols
- X
- X /Wsquare { 1 0 motion } bind def
- X /Bsquare { setpce (j) Tofig 90 Show } bind def
- X /Bsquarefig { 1000 0 0 0 1000 1000 setcachedevice
- X /xpix 62.5 dup dtransform /ypix exch def def
- X /xpabs xpix abs def /ypabs ypix abs def
- X xpabs ypabs lt {
- X ypabs ceiling dup 4 lt { pop 4 } if
- X dup ypix div xpix mul exch } {
- X xpabs ceiling dup 4 lt { pop 4 } if
- X dup xpix div ypix mul } ifelse
- X idtransform pop abs dup 3 div setlinewidth dup 2 mul 2000
- X { dup 1000 lt { dup 0 moveto 0 exch lineto }
- X { 1000 sub dup 1000 moveto 1000 exch lineto }
- X ifelse } for stroke } bind def
- X /board { 10000 0 800 0 9200 8400 setcachedevice
- X% Setfont intext /intext dup true def 1000 8200 moveto
- X% 4 { (hhhhhhhhn) show currentpoint translate -90 rotate } repeat
- X% -90 rotate 0 7000 moveto
- X% The above was the intention, but the borders sometimes fail to match
- X% up by a pixel or two. Hence the following! However, the borders
- X% work perfectly well for special purposes.
- X Setfont intext /intext dup true def
- X 20 setlinewidth 940 140 moveto 8120 0 Rlineto 0 8120 Rlineto
- X -8120 0 Rlineto closepath stroke
- X 80 setlinewidth 840 40 moveto 8320 0 Rlineto 0 8320 Rlineto
- X -8320 0 Rlineto closepath stroke
- X 2000 200 moveto 90 rotate
- X 4 { (j j j j ; j j j j;) show } repeat exch def } bind def
- X /nextline { -8 -1 motion } bind def
- X /edge { setpce (h) Tofig 0 Show } bind def
- X /edgefig { 1000 0 0 0 1000 200 setcachedevice
- X 20 setlinewidth 0 60 moveto 1000 0 rlineto stroke
- X 80 setlinewidth 0 160 moveto 1000 0 rlineto stroke } bind def
- X /corner { setpce (n) Tofig 0 Show } bind def
- X /cornerfig { 0 0 0 0 200 200 setcachedevice
- X 20 setlinewidth 0 60 moveto 60 0 rlineto 0 -60 rlineto stroke
- X 80 setlinewidth 0 160 moveto 160 0 rlineto 0 -160 rlineto
- X stroke } bind def
- X /posstart { -9 7.2 motion } bind def
- X /posfinish { 1 -0.2 motion } bind def
- X /m0 { 0.5 dup motion } bind def
- X /m2 { 2 0 motion } bind def
- X /m3 { 3 0 motion } bind def
- X /m4 { 4 0 motion } bind def
- X /m5 { 5 0 motion } bind def
- X /m6 { 6 0 motion } bind def
- X /m7 { 7 0 motion } bind def
- X /m8 { 8 0 motion } bind def
- X /m9 { 0 1 motion } bind def
- X /m-1 { -1 0 motion } bind def
- X /underbar { 1000 0 -40 -40 1040 40 setcachedevice 80 setlinewidth
- X 1 setlinecap 0 0 moveto 1000 0 lineto stroke } bind def
- X /sidebar { 0 0 setcharwidth 80 setlinewidth
- X 1 setlinecap 0 0 moveto 0 1000 lineto stroke } bind def
- X /wblock { 0 0 setcharwidth setW
- X 200 200 moveto 600 0 rlineto 0 600 rlineto -600 0 rlineto
- X fill } bind def
- X
- X% Informant symbols
- X
- X /plusequals { 1000 0 100 0 900 800 setcachedevice 20 setlinewidth
- X 100 10 moveto 800 0 rlineto 0 140 Rmoveto -800 0 rlineto
- X 0 300 Rmoveto 800 0 rlineto 500 150 moveto 0 650 rlineto
- X stroke } bind def
- X
- X /equalsplus { 1000 0 100 0 900 800 setcachedevice 20 setlinewidth
- X 100 790 moveto 800 0 rlineto 0 -140 Rmoveto -800 0 rlineto
- X 0 -300 Rmoveto 800 0 rlineto 500 0 moveto 0 650 rlineto
- X stroke } bind def
- X
- X /plusorminus { 1000 0 100 0 900 800 setcachedevice 30 setlinewidth
- X 100 15 moveto 800 0 rlineto 0 385 Rmoveto -800 0 rlineto
- X 500 0 moveto 0 800 rlineto stroke } bind def
- X
- X /minusorplus { 1000 0 100 0 900 800 setcachedevice 30 setlinewidth
- X 100 785 moveto 800 0 rlineto 0 -385 Rmoveto -800 0 rlineto
- X 500 0 moveto 0 800 rlineto stroke } bind def
- X
- X /plus { 1000 0 100 0 900 800 setcachedevice 30 setlinewidth
- X 100 400 moveto 800 0 rlineto 500 0 moveto 0 800 rlineto
- X stroke } bind def
- X
- X /minus { 1000 0 100 385 900 415 setcachedevice 30 setlinewidth
- X 100 400 moveto 800 0 rlineto stroke } bind def
- X
- X /equal { 1000 0 100 300 800 180 Round
- X 320 add exch 100 add exch setcachedevice 20 setlinewidth
- X 100 310 moveto 800 0 rlineto 0 180 Rmoveto -800 0 rlineto
- X stroke } bind def
- X
- X /infinity { 1000 0 95 60 905 540 setcachedevice 40 setlinewidth
- X 275 300 160 0 360 arc 660 300 225 -180 180 arc stroke
- X } bind def
- X
- X /infinityequals { 1000 0 95 10 905 750 setcachedevice 30 setlinewidth
- X 275 250 160 0 360 arc 660 250 225 -180 180 arc
- X 100 565 moveto 800 0 rlineto 0 180 Rmoveto -800 0 rlineto
- X stroke } bind def
- X
- X /circarrow {1000 0 100 0 900 800 setcachedevice 30 setlinewidth
- X 500 400 385 0 30 arcn -200 0 rmoveto 200 0 rlineto
- X 0 200 rlineto stroke } bind def
- X
- X /circledot { 900 0 100 0 800 700 setcachedevice 20 setlinewidth
- X 450 350 20 0 360 arc fill 450 350 340 0 360 arc stroke
- X } bind def
- X
- X /rightarrow { 1200 0 100 185 1115 615 setcachedevice 30 setlinewidth
- X 100 400 moveto 1000 0 rlineto -200 -200 rmoveto 200 200 rlineto
- X -200 200 rlineto stroke } bind def
- X
- X /uparrow { 500 0 35 0 465 915 setcachedevice 30 setlinewidth
- X 250 0 moveto 0 900 rlineto -200 -200 rmoveto 200 200 rlineto
- X 200 -200 rlineto stroke } bind def
- X
- X /botharrow { 1200 0 100 70 1100 730 setcachedevice 20 setlinewidth
- X 100 280 moveto 990 0 rlineto -200 -200 rmoveto 200 200 rlineto
- X -200 200 rlineto 1100 520 moveto -990 0 rlineto
- X 200 -200 rmoveto -200 200 rlineto 200 200 rlineto
- X stroke } bind def
- X
- X /circlebolddot { 1000 0 100 0 900 800 setcachedevice 20 setlinewidth
- X 500 400 50 0 360 arc fill 500 400 390 0 360 arc stroke
- X } bind def
- X
- X /hash { 1000 0 100 0 900 800 setcachedevice 30 setlinewidth
- X 100 280 moveto 800 0 rlineto 0 240 Rmoveto -800 0 rlineto
- X 380 0 moveto 0 800 rlineto 240 0 Rmoveto 0 -800 rlineto
- X stroke } bind def
- X
- X /triangle { 900 0 100 0 800 750 setcachedevice 30 setlinewidth
- X 100 15 moveto 350 735 rlineto 350 -735 rlineto
- X closepath stroke } bind def
- X
- X /square { 900 0 100 0 680 680 Round
- X 20 add exch 120 add exch setcachedevice 20 setlinewidth
- X 110 10 moveto 680 0 Rlineto 0 680 Rlineto
- X -680 0 Rlineto closepath stroke } bind def
- X
- X /semicircle { 1000 0 50 0 950 465 setcachedevice 30 setlinewidth
- X 500 15 435 0 180 arc closepath stroke } bind def
- X
- X /line { 1000 0 100 190 900 610 setcachedevice 20 setlinewidth
- X 220 300 moveto 560 0 rlineto 0 200 Rmoveto -560 0 rlineto
- X 310 200 moveto -200 200 rlineto 200 200 rlineto
- X 690 200 moveto 200 200 rlineto -200 200 rlineto
- X stroke } bind def
- X
- X /diags { 1000 0 100 0 900 800 setcachedevice 20 setlinewidth
- X 110 120 moveto 670 dup rlineto 110 -110 Rmoveto
- X -670 dup rlineto 640 790 moveto 250 0 rlineto
- X 0 -250 rlineto stroke } bind def
- X
- X /centre { 1000 0 100 0 780 780 Round
- X 20 add exch 120 add exch setcachedevice 20 setlinewidth
- X 110 10 moveto 780 0 Rlineto 0 780 Rlineto -780 0 Rlineto
- X closepath 110 400 moveto 780 0 rlineto 500 10 moveto
- X 0 780 Rlineto stroke } bind def
- X
- X /kside { 700 0 100 0 600 800 setcachedevice 20 setlinewidth
- X 110 10 moveto 300 390 rlineto -300 390 rlineto
- X 180 0 Rmoveto 300 -390 rlineto -300 -390 rlineto
- X stroke } bind def
- X
- X /qside { 700 0 100 0 600 800 setcachedevice 20 setlinewidth
- X 590 10 moveto -300 390 rlineto 300 390 rlineto
- X -180 0 Rmoveto -300 -390 rlineto 300 -390 rlineto
- X stroke } bind def
- X
- X /weakpt { 700 0 100 0 600 500 setcachedevice 30 setlinewidth
- X 110 10 moveto 480 480 rlineto 590 10 moveto -480 480 rlineto
- X stroke } bind def
- X
- X /ending { 1000 0 100 0 900 800 setcachedevice 30 setlinewidth
- X 100 15 moveto 800 0 rlineto 500 0 moveto 0 800 rlineto
- X stroke } bind def
- X
- X /bpair { 1200 0 100 0 980 580 Round
- X 20 add exch 120 add exch setcachedevice 20 setlinewidth
- X 110 10 moveto 570 0 Rlineto 0 370 Rlineto -570 0 Rlineto
- X closepath 110 10 moveto 980 580 Rmoveto -570 0 Rlineto
- X 0 -370 Rlineto 570 0 Rlineto closepath stroke } bind def
- X
- X /oppbs { 1200 0 100 0 1100 600 setcachedevice 20 setlinewidth
- X 110 10 moveto 570 0 Rlineto 0 370 Rlineto -570 0 Rlineto
- X closepath stroke 1100 600 moveto -590 0 rlineto
- X 0 -390 rlineto 590 0 rlineto fill } bind def
- X
- X /samebs { 1200 0 100 0 1100 600 setcachedevice
- X 100 0 moveto 590 0 rlineto 0 390 rlineto -590 0 rlineto
- X closepath 1100 600 moveto -590 0 rlineto 0 -390 rlineto
- X 590 0 rlineto fill } bind def
- X
- X /united { 1210 0 50 0 1160 530 setcachedevice 30 setlinewidth
- X 315 265 250 0 360 arc stroke 895 265 250 0 360 arc
- X stroke } bind def
- X
- X /separated { 1550 0 50 0 1500 530 setcachedevice 30 setlinewidth
- X 315 265 250 0 360 arc stroke 1235 265 250 0 360 arc stroke
- X 665 30 60 0 360 arc fill 885 30 60 0 360 arc fill } bind def
- X
- X /doubled { 730 0 100 0 630 1160 setcachedevice 30 setlinewidth
- X 365 265 250 0 360 arc stroke 365 895 250 0 360 arc
- X stroke } bind def
- X
- X /tempo { 1000 0 100 0 900 800 setcachedevice 20 setlinewidth
- X 110 400 moveto 500 400 390 0 360 arc 500 10 moveto
- X 0 790 rlineto stroke } bind def
- X
- X /with { 1000 0 100 0 900 800 setcachedevice 30 setlinewidth
- X 100 800 moveto 0 -785 rlineto 785 0 rlineto stroke } bind def
- X
- X /without { 1000 0 100 0 900 800 setcachedevice 30 setlinewidth
- X 100 15 moveto 785 0 rlineto 0 785 rlineto stroke } bind def
- X
- X /etc { 500 0 100 0 270 800 Round
- X exch 130 add exch setcachedevice 30 setlinewidth
- X 115 0 moveto 0 800 rlineto 270 0 Rmoveto 0 -800 rlineto
- X stroke } bind def
- Xend def
- X
- X/BuildChar { exch begin CharProcs begin
- X { SetChar } stopped not { DoChar } if
- X end end } bind def
- Xend def
- X
- X/ChessFont Cfont definefont pop
- X% Demo file to be appended to the Chess Font file & sent to your LaserWriter
- X% (or whatever else you do with PostScript!).
- X
- X% Miscellaneous useful procedures:
- X
- X % show string centred on the current point
- X/cshow { dup stringwidth -2 div exch -2 div exch rmoveto show } bind def
- X
- X % Draw rank and file labels round a standard diagram
- X % On entry, the ChessFont must be currently selected,
- X % and the (properly scaled) font desired for the labels
- X % must be top of stack. Uses "cshow", defined above
- X/dolabels {
- X ('[<0) show % position of top-left label
- X (0) stringwidth -1.5 div % 1/3-square offset
- X 0 exch rmoveto exch % restore labelfont to top of stack
- X [(8)(7)(6)(5)(4)(3)(2)(1)] % rank labels
- X { gsave exch % stack == offset, label, labelfont
- X dup setfont exch cshow
- X grestore
- X (8;) show % move down a rank
- X } forall
- X [(a)(b)(c)(d)(e)(f)(g)(h)] % file labels
- X { (>) show % move along a file
- X gsave exch % as before
- X dup setfont exch cshow
- X grestore
- X } forall pop % zap the labelfont
- X (0]') show % move to RHS of board
- X 1.5 div 0 exch rmoveto % undo previous offset
- X} bind def
- X
- X % Rotate a piece. The piece [eg "(Q)"] and the desired rotation
- X % (in degrees, anticlockwise) should be on the stack
- X/twirl {
- X gsave % keep graphics state
- X (0) show % go to centre of square
- X rotate % no of degrees was on stack
- X (07;) show % back to bottom left of rotated square --
- X % "0" takes us from centre to top right, "7"
- X % advances 7 squares, ";" goes down one and
- X % back 8
- X show % string was on stack
- X grestore % restore graphics state
- X ( ) show % advance to next square
- X} bind def
- X
- X % Draw a neutral piece (for Fairy chess). Expects two strings
- X % [eg. "(R) (r)"] on the stack; the first will be drawn in
- X % the left half of the square, the second in the right half.
- X/neutral {
- X 2 dict begin % small dictionary for xinc, yinc
- X gsave % keep graphics state
- X (0) stringwidth % distance to centre of square
- X /yinc exch 2 mul def
- X /xinc exch def
- X currentpoint
- X xinc 0 rlineto % draw clipping rectangle round
- X 0 yinc rlineto % left half of square
- X xinc neg 0 rlineto clip
- X moveto show % show left half-piece
- X grestore gsave % cancel clip
- X currentpoint
- X xinc 0 rmoveto
- X xinc 0 rlineto % clip right half of square
- X 0 yinc rlineto
- X xinc neg 0 rlineto clip
- X moveto show % show right half-piece
- X grestore % restore graphics state
- X ( ) show % advance to next square
- X end % close small dictionary
- X} bind def
- X
- X% End of generally useful procedures.
- X
- X% Quick hack definitions for this file:
- X
- X% Miscellaneous definitions:
- X
- X/ps 10.5 def % point size
- X/vs 12.5 def % vertical spacing
- X/V 11 72 mul def % top margin
- X/L 40 def % left margin
- X
- X/N { L V vs sub dup /V exch def moveto } bind def % newline
- X/T { currentpoint exch L sub 6 add 36 div ceiling 36 mul L add exch moveto }
- X bind def % tab
- X
- X % Switch into Chess/Times/Courier/Bold
- X/C { /ChessFont findfont ps scalefont setfont } bind def
- X/R { /Times-Roman findfont ps scalefont setfont } bind def
- X/H { /Courier findfont ps scalefont setfont } bind def
- X/B { /Times-Bold findfont ps 1.25 mul scalefont setfont } bind def
- X
- X 12345 % pseudo-random item on stack, as check
- END_OF_FILE
- if test 28062 -ne `wc -c <'misc/ChessFont'`; then
- echo shar: \"'misc/ChessFont'\" unpacked with wrong size!
- fi
- # end of 'misc/ChessFont'
- fi
- if test -f 'src/ataks.h' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'src/ataks.h'\"
- else
- echo shar: Extracting \"'src/ataks.h'\" \(2354 characters\)
- sed "s/^X//" >'src/ataks.h' <<'END_OF_FILE'
- X/*
- X * ataks.h - Header source for GNU CHESS
- X *
- X * Copyright (c) 1988,1989,1990 John Stanback
- X * Copyright (c) 1992 Free Software Foundation
- X *
- X * This file is part of GNU CHESS.
- X *
- X * GNU Chess is free software; you can redistribute it and/or modify
- X * it under the terms of the GNU General Public License as published by
- X * the Free Software Foundation; either version 2, or (at your option)
- X * any later version.
- X *
- X * GNU Chess is distributed in the hope that it will be useful,
- X * but WITHOUT ANY WARRANTY; without even the implied warranty of
- X * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X * GNU General Public License for more details.
- X *
- X * You should have received a copy of the GNU General Public License
- X * along with GNU Chess; see the file COPYING. If not, write to
- X * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
- X */
- Xinline
- Xstatic
- Xint
- XSqAtakd (register short int sq, short int side)
- X
- X/*
- X * See if any piece with color 'side' ataks sq. First check pawns then
- X * Queen, Bishop, Rook and King and last Knight.
- X */
- X
- X{
- X register short u;
- X register unsigned char *ppos, *pdir;
- X short xside;
- X
- X xside = side ^ 1;
- X pdir = nextdir[ptype[xside][pawn]][sq];
- X u = pdir[sq]; /* follow captures thread */
- X if (u != sq)
- X {
- X if (board[u] == pawn && color[u] == side)
- X return (true);
- X u = pdir[u];
- X if (u != sq && board[u] == pawn && color[u] == side)
- X return (true);
- X }
- X /* king capture */
- X if (distance (sq, PieceList[side][0]) == 1)
- X return (true);
- X /* try a queen bishop capture */
- X ppos = nextpos[bishop][sq];
- X pdir = nextdir[bishop][sq];
- X u = ppos[sq];
- X do
- X {
- X if (color[u] == neutral)
- X u = ppos[u];
- X else
- X {
- X if (color[u] == side && (board[u] == queen || board[u] == bishop))
- X return (true);
- X u = pdir[u];
- X }
- X } while (u != sq);
- X /* try a queen rook capture */
- X ppos = nextpos[rook][sq];
- X pdir = nextdir[rook][sq];
- X u = ppos[sq];
- X do
- X {
- X if (color[u] == neutral)
- X u = ppos[u];
- X else
- X {
- X if (color[u] == side && (board[u] == queen || board[u] == rook))
- X return (true);
- X u = pdir[u];
- X }
- X } while (u != sq);
- X /* try a knight capture */
- X pdir = nextdir[knight][sq];
- X u = pdir[sq];
- X do
- X {
- X if (color[u] == side && board[u] == knight)
- X return (true);
- X u = pdir[u];
- X } while (u != sq);
- X return (false);
- X}
- END_OF_FILE
- if test 2354 -ne `wc -c <'src/ataks.h'`; then
- echo shar: \"'src/ataks.h'\" unpacked with wrong size!
- fi
- # end of 'src/ataks.h'
- fi
- if test -f 'src/nuxdsp.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'src/nuxdsp.c'\"
- else
- echo shar: Extracting \"'src/nuxdsp.c'\" \(20989 characters\)
- sed "s/^X//" >'src/nuxdsp.c' <<'END_OF_FILE'
- X/*
- X * nuxdsp.c - (new) ALPHA interface for CHESS
- X *
- X * Copyright (c) 1988,1989,1990 John Stanback
- X * Copyright (c) 1992 Free Software Foundation
- X *
- X * This file is part of GNU CHESS.
- X *
- X * GNU Chess is free software; you can redistribute it and/or modify
- X * it under the terms of the GNU General Public License as published by
- X * the Free Software Foundation; either version 2, or (at your option)
- X * any later version.
- X *
- X * GNU Chess is distributed in the hope that it will be useful,
- X * but WITHOUT ANY WARRANTY; without even the implied warranty of
- X * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X * GNU General Public License for more details.
- X *
- X * You should have received a copy of the GNU General Public License
- X * along with GNU Chess; see the file COPYING. If not, write to
- X * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
- X */
- X#include <ctype.h>
- X#include <signal.h>
- X#ifdef MSDOS
- X#include <dos.h>
- X#include <conio.h>
- X#include <stdlib.h>
- X#include <string.h>
- X#include <time.h>
- X
- X#define ESC 0x1B
- X#define refresh() fflush(stdout)
- X
- Xint mycntl1, mycntl2;
- Xstatic void param (short n);
- X
- X#else
- X#include <sys/param.h>
- X#include <sys/types.h>
- X#include <sys/file.h>
- X#include <curses.h>
- X
- X/* <stdlib.h> */
- Xextern void *malloc (size_t);
- Xextern void exit (int);
- Xextern short int sscore[];
- X
- X/* <string.h> */
- Xextern char *strcat (char *, const char *);
- Xextern int strcmp (const char *, const char *);
- Xextern char *strcpy (char *, const char *);
- X
- X/* <time.h> */
- Xextern long int time (long int *);
- X
- X#endif /* MSDOS */
- X
- X#include "gnuchess.h"
- X
- Xextern short int pscore[2];
- X
- X#define TAB (43)
- X/* coordinates within a square for the following are ([1,5],[1,3]) */
- X#define SQW (5)
- X#define SQH (3)
- X#define VIR_C(s) ((flag.reverse) ? 7-column(s) : column(s))
- X#define VIR_R(s) ((flag.reverse) ? 7-row(s) : row(s))
- X#define VSQ_X(x) ((flag.reverse) ? SQW + 1 - (x) : (x))
- X#define VSQ_Y(y) ((flag.reverse) ? SQH + 1 - (y) : (y))
- X#define Vblack(s) (!((VIR_C(s) + VIR_R(s)) % 2))
- X/* Squares swapped */
- X#define Vcoord(s,x,y) \
- X ((SQW)*(VIR_C(s)))+(x),((SQH)*(7-VIR_R(s))+(y))
- X/* Squares and internal locations swapped */
- X#define VcoordI(s,x,y) \
- X ((SQW)*(VIR_C(s)))+(VSQ_X(x)),((SQH)*(7-VIR_R(s))+(VSQ_Y(y)))
- X/* Squares and internal rows swapped */
- X#define VcoordR(s,x,y) \
- X ((SQW)*(VIR_C(s)))+(x),((SQH)*(7-VIR_R(s))+(VSQ_Y(y)))
- Xchar Analysis[128] = "";
- Xunsigned short int MV[MAXDEPTH];
- Xint MSCORE;
- Xchar *DRAW;
- Xchar mvstr[4][6];
- Xshort PositionFlag = 0;
- X
- X#if defined(MSDOS) && !defined(SEVENBIT)
- Xstatic void ONormal (void);
- Xstatic void OReverse (void);
- X
- X#endif /* MSDOS && !SEVENBIT */
- X
- Xextern char *getenv (const char *);
- Xvoid TerminateSearch (int), Die (int);
- X
- Xvoid
- XInitialize (void)
- X{
- X signal (SIGINT, Die);
- X#ifndef MSDOS
- X signal (SIGQUIT, Die);
- X initscr ();
- X crmode ();
- X#else
- X mycntl1 = mycntl2 = 0;
- X#endif /* MSDOS */
- X}
- X
- Xvoid
- XExitChess (void)
- X{
- X ListGame ();
- X gotoXY (1, 24);
- X#ifndef MSDOS
- X nocrmode ();
- X endwin ();
- X#endif /* MSDOS */
- X exit (0);
- X}
- X
- Xvoid
- XDie (int Sig)
- X{
- X char s[80];
- X
- X signal (SIGINT, SIG_IGN);
- X#ifdef MSDOS
- X Sig++; /* shut up the compiler */
- X#else
- X signal (SIGQUIT, SIG_IGN);
- X#endif /* MSDOS */
- X ShowMessage (CP[31]); /*Abort?*/
- X scanz ("%s", s);
- X if (strcmp (s, CP[210]) == 0) /*yes*/
- X ExitChess ();
- X signal (SIGINT, Die);
- X#ifndef MSDOS
- X signal (SIGQUIT, Die);
- X#endif /* MSDOS */
- X}
- X
- Xvoid
- XTerminateSearch (int Sig)
- X{
- X signal (SIGINT, SIG_IGN);
- X#ifdef MSDOS
- X Sig++; /* shut up the compiler */
- X#else
- X signal (SIGQUIT, SIG_IGN);
- X#endif /* MSDOS */
- X if (!flag.timeout)
- X flag.musttimeout = true;
- X flag.bothsides = false;
- X signal (SIGINT, Die);
- X#ifndef MSDOS
- X signal (SIGQUIT, Die);
- X#endif /* MSDOS */
- X}
- Xvoid
- XShowLine (short unsigned int *bstline)
- X{
- X}
- X
- Xvoid
- Xhelp (void)
- X{
- X ClrScreen ();
- X /*printz ("CHESS command summary\n");*/
- X printz (CP[40]);
- X printz ("----------------------------------------------------------------\n");
- X /*printz ("g1f3 move from g1 to f3 quit Exit Chess\n");*/
- X printz (CP[158]);
- X /*printz ("Nf3 move knight to f3 beep turn %s\n", (flag.beep) ? "off" : "on");*/
- X printz (CP[86]);
- X /*printz ("a7a8q promote pawn to queen\n");*/
- X printz (CP[128], (flag.material) ? CP[92] : CP[93]);
- X /*printz ("o-o castle king side easy turn %s\n", (flag.easy) ? "off" : "on");*/
- X printz (CP[173], (flag.easy) ? CP[92] : CP[93]);
- X /*printz ("o-o-o castle queen side hash turn %s\n", (flag.hash) ? "off" : "on");*/
- X printz (CP[174], (flag.hash) ? CP[92] : CP[93]);
- X /*printz ("bd redraw board reverse board display\n");*/
- X printz (CP[130]);
- X /*printz ("list game to chess.lst book turn %s used %d of %d\n", (Book) ? "off" : "on", bookcount, BOOKSIZE);*/
- X printz (CP[170], (Book) ? CP[92] : CP[93], bookcount, BOOKSIZE);
- X /*printz ("undo undo last ply remove take back a move\n");*/
- X printz (CP[200]);
- X /*printz ("edit edit board force enter game moves\n");*/
- X printz (CP[153]);
- X /*printz ("switch sides with computer both computer match\n");*/
- X printz (CP[194]);
- X /*printz ("white computer plays white black computer plays black\n");*/
- X printz (CP[202]);
- X /*printz ("depth set search depth clock set time control\n");*/
- X printz (CP[149]);
- X /*printz ("hint suggest a move post turn %s principle variation\n", (flag.post) ? "off" : "on");*/
- X printz (CP[177], (flag.post) ? CP[92] : CP[93]);
- X /*printz ("save game to file get game from file\n");*/
- X printz (CP[188]);
- X /*printz ("random randomize play new start new game\n");*/
- X printz (CP[181]);
- X /*printz ("coords show coords rv reverse video\n");*/
- X printz (CP[144]);
- X#if !defined(MSDOS) || defined(SEVENBIT)
- X printz (CP[192]);
- X#endif /* !MSDOS || SEVENBIT */
- X gotoXY (10, 20);
- X printz (CP[47], ColorStr[computer]);
- X gotoXY (10, 21);
- X printz (CP[97], ColorStr[opponent]);
- X gotoXY (10, 22);
- X printz (CP[79], Level);
- X gotoXY (10, 23);
- X printz (CP[59], (flag.easy) ? CP[93] : CP[92]);
- X gotoXY (40, 20);
- X printz (CP[52], MaxSearchDepth);
- X gotoXY (40, 21);
- X printz (CP[100], (dither) ? CP[93] : CP[92]);
- X gotoXY (40, 22);
- X printz (CP[112], (flag.hash) ? CP[93] : CP[92]);
- X gotoXY (40, 23);
- X printz (CP[73]);
- X gotoXY (10, 24);
- X printz (CP[110], (TCflag) ? CP[93] : CP[92],
- X TimeControl.moves[white], TimeControl.clock[white] / 100, OperatorTime, MaxSearchDepth);
- X refresh ();
- X fflush (stdin);
- X getchar ();
- X ClrScreen ();
- X UpdateDisplay (0, 0, 1, 0);
- X}
- X
- Xvoid
- XEditBoard (void)
- X
- X/*
- X * Set up a board position. Pieces are entered by typing the piece followed
- X * by the location. For example, Nf3 will place a knight on square f3.
- X */
- X
- X{
- X short a, r, c, sq, i;
- X char s[80];
- X
- X flag.regularstart = false;
- X Book = false;
- X ClrScreen ();
- X UpdateDisplay (0, 0, 1, 0);
- X gotoXY (TAB, 3);
- X printz (CP[29]);
- X gotoXY (TAB, 4);
- X printz (CP[28]);
- X gotoXY (TAB, 5);
- X printz (CP[136]);
- X gotoXY (TAB, 7);
- X printz (CP[64]);
- X a = white;
- X do
- X {
- X gotoXY (TAB, 6);
- X printz (CP[60], ColorStr[a]); /*Editing %s*/
- X gotoXY (TAB + 24, 7);
- X ClrEoln ();
- X scanz ("%s", s);
- X if (s[0] == CP[28][0]) /*#*/
- X {
- X for (sq = 0; sq < 64; sq++)
- X {
- X board[sq] = no_piece;
- X color[sq] = neutral;
- X DrawPiece (sq);
- X }
- X }
- X if (s[0] == CP[136][0]) /*c*/
- X a = otherside[a];
- X c = s[1] - 'a';
- X r = s[2] - '1';
- X if ((c >= 0) && (c < 8) && (r >= 0) && (r < 8))
- X {
- X sq = locn (r, c);
- X for (i = king; i > no_piece; i--)
- X if ((s[0] == pxx[i]) || (s[0] == qxx[i]))
- X break;
- X board[sq] = i;
- X color[sq] = ((board[sq] == no_piece) ? neutral : a);
- X DrawPiece (sq);
- X }
- X } while (s[0] != CP[29][0]);
- X
- X for (sq = 0; sq < 64; sq++)
- X Mvboard[sq] = ((board[sq] != Stboard[sq]) ? 10 : 0);
- X GameCnt = 0;
- X Game50 = 1;
- X ZeroRPT ();
- X Sdepth = 0;
- X InitializeStats ();
- X ClrScreen ();
- X UpdateDisplay (0, 0, 1, 0);
- X}
- X
- Xvoid
- XShowPlayers (void)
- X{
- X gotoXY (TAB, ((flag.reverse) ? 23 : 2));
- X printz ("%s", (computer == black) ? CP[218] : CP[74]);
- X gotoXY (TAB, ((flag.reverse) ? 2 : 23));
- X printz ("%s", (computer == white) ? CP[218] : CP[74]);
- X}
- X
- Xvoid
- XShowDepth (char ch)
- X{
- X gotoXY (TAB, 4);
- X printz (CP[53], Sdepth, ch); /*Depth= %d%c*/
- X ClrEoln ();
- X}
- X
- Xvoid
- XShowScore (short score)
- X{
- X gotoXY (TAB, 5);
- X printz (CP[104], score);
- X ClrEoln ();
- X}
- X
- Xvoid
- XShowMessage (char *s)
- X{
- X gotoXY (TAB, 6);
- X printz ("%s", s);
- X ClrEoln ();
- X}
- X
- Xvoid
- XClearMessage (void)
- X{
- X gotoXY (TAB, 6);
- X ClrEoln ();
- X}
- X
- Xvoid
- XShowCurrentMove (short int pnt, short int f, short int t)
- X{
- X algbr (f, t, false);
- X gotoXY (TAB, 7);
- X printz ("(%2d) %4s", pnt, mvstr[0]);
- X}
- X
- Xvoid
- XShowHeader (void)
- X{
- X gotoXY (TAB, 10);
- X#ifdef MSDOS
- X printz (CP[67]);
- X#else
- X printz (CP[68]);
- X#endif /* MSDOS */
- X}
- X
- Xvoid
- XShowSidetoMove (void)
- X{
- X gotoXY (TAB, 14);
- X printz ("%2d: %s", 1 + GameCnt / 2, ColorStr[player]);
- X ClrEoln ();
- X}
- X
- Xvoid
- XShowPrompt (void)
- X{
- X gotoXY (TAB, 19);
- X printz (CP[121]); /*Your movwe is?*/
- X ClrEoln ();
- X}
- X
- Xvoid
- XShowNodeCnt (long int NodeCnt)
- X{
- X gotoXY (TAB, 21);
- X printz (CP[90], NodeCnt, (et > 100) ? NodeCnt / (et / 100) : 0);
- X ClrEoln ();
- X}
- X
- Xvoid
- XShowResults (short int score, short unsigned int *bstline, char ch)
- X{
- X unsigned char d, ply;
- X
- X if (flag.post)
- X {
- X ShowDepth (ch);
- X ShowScore (score);
- X d = 7;
- X for (ply = 1; bstline[ply] > 0; ply++)
- X {
- X if (ply % 4 == 1)
- X {
- X gotoXY (TAB, ++d);
- X ClrEoln ();
- X }
- X algbr ((short) bstline[ply] >> 8, (short) bstline[ply] & 0xFF, false);
- X printz ("%5s ", mvstr[0]);
- X }
- X ClrEoln ();
- X while (d < 13)
- X {
- X gotoXY (TAB, ++d);
- X ClrEoln ();
- X }
- X }
- X}
- X
- Xvoid
- XSearchStartStuff (short int side)
- X{
- X short i;
- X
- X signal (SIGINT, TerminateSearch);
- X#ifdef MSDOS
- X side++; /* shut up the compiler */
- X#else
- X signal (SIGQUIT, TerminateSearch);
- X#endif /* MSDOS */
- X for (i = 4; i < 14; i++)
- X {
- X gotoXY (TAB, i);
- X ClrEoln ();
- X }
- X}
- X
- Xvoid
- XOutputMove (void)
- X{
- X register int i;
- X
- X UpdateDisplay (rootnode.f, rootnode.t, 0, (short) rootnode.flags);
- X gotoXY (TAB, 17);
- X printz (CP[84], mvstr[0]); /*My move is %s*/
- X if (flag.beep)
- X putchar (7);
- X ClrEoln ();
- X
- X gotoXY (TAB, 24);
- X if (rootnode.flags & draw)
- X printz (CP[56], DRAW);
- X else if (rootnode.score == -9999)
- X printz (CP[95]);
- X else if (rootnode.score == 9998)
- X printz (CP[44]);
- X#ifdef VERYBUGGY
- X else if (rootnode.score < -9000)
- X printz (CP[96]);
- X else if (rootnode.score > 9000)
- X printz (CP[45]);
- X#endif VERYBUGGY
- X ClrEoln ();
- X
- X if (flag.post)
- X {
- X register short h, l, t;
- X
- X h = TREE;
- X l = 0;
- X t = TREE >> 1;
- X while (l != t)
- X {
- X if (Tree[t].f || Tree[t].t)
- X l = t;
- X else
- X h = t;
- X t = (l + h) >> 1;
- X }
- X
- X
- X ShowNodeCnt (NodeCnt);
- X gotoXY (TAB, 22);
- X
- X printz (CP[81], t); /*Max Tree= %d*/
- X ClrEoln ();
- X }
- X}
- X
- Xvoid
- XUpdateClocks (void)
- X{
- X short m, s;
- X
- X m = (short) (et / 6000);
- X s = (short) (et - 6000 * (long) m) / 100;
- X if (TCflag)
- X {
- X m = (short) ((TimeControl.clock[player] - et) / 6000);
- X s = (short) ((TimeControl.clock[player] - et - 6000 * (long) m) / 100);
- X }
- X if (m < 0)
- X m = 0;
- X if (s < 0)
- X s = 0;
- X if (player == white)
- X gotoXY (60, (flag.reverse) ? 2 : 23);
- X else
- X gotoXY (60, (flag.reverse) ? 23 : 2);
- X printz ("%d:%02d ", m, s);
- X if (flag.post)
- X ShowNodeCnt (NodeCnt);
- X refresh ();
- X}
- X
- Xvoid
- XgotoXY (short int x, short int y)
- X{
- X#ifdef MSDOS
- X putchar (ESC);
- X putchar ('[');
- X param (y);
- X putchar (';');
- X param (x);
- X putchar ('H');
- X#else
- X move (y - 1, x - 1);
- X#endif /* MSDOS */
- X}
- X
- Xvoid
- XClrScreen (void)
- X{
- X#ifdef MSDOS
- X putchar (ESC);
- X putchar ('[');
- X putchar ('2');
- X putchar ('J');
- X#else
- X clear ();
- X#endif /* MSDOS */
- X refresh ();
- X}
- X
- Xvoid
- XClrEoln (void)
- X{
- X#ifdef MSDOS
- X putchar (ESC);
- X putchar ('[');
- X putchar ('K');
- X#else
- X clrtoeol ();
- X#endif /* MSDOS */
- X refresh ();
- X}
- X
- X#ifdef MSDOS
- Xvoid
- Xparam (short n)
- X{
- X if (n >= 10)
- X {
- X register short d, q;
- X
- X q = n / 10;
- X d = n % 10;
- X putchar (q + '0');
- X putchar (d + '0');
- X }
- X else
- X putchar (n + '0');
- X}
- X
- X#endif /* MSDOS */
- X
- Xvoid
- XOReverse ()
- X{
- X#ifdef MSDOS
- X putchar (ESC);
- X putchar ('[');
- X param (7);
- X putchar ('m');
- X#else
- X standout ();
- X /* attron (A_REVERSE); */
- X#endif /* MSDOS */
- X}
- X
- Xvoid
- XONormal ()
- X{
- X#ifdef MSDOS
- X putchar (ESC);
- X putchar ('[');
- X param (0);
- X putchar ('m');
- X#else
- X standend ();
- X /* attroff (A_REVERSE); */
- X#endif /* MSDOS */
- X}
- X
- Xvoid
- XDrawPiece (short int sq)
- X{
- X gotoXY (VcoordR (sq, 2, 2));
- X
- X switch (color[sq])
- X {
- X case black:
- X if (flag.rv)
- X OReverse ();
- X#if defined(MSDOS) && !defined(SEVENBIT)
- X printz (" %c ", pxx[board[sq]]);
- X#else
- X printz ((flag.stars ? "*%c*" : " %c "), pxx[board[sq]]);
- X#endif /* MSDOS && !SEVENBIT */
- X ONormal ();
- X break;
- X case neutral:
- X#if defined(MSDOS) && !defined(SEVENBIT)
- X if (flag.rv)
- X printz (Vblack (sq) ? "\262\262\262" : "\260\260\260");
- X else
- X printz (Vblack (sq) ? "\260\260\260" : "\262\262\262");
- X#else
- X if (flag.shade)
- X printz (Vblack (sq) ? "///" : " ");
- X else
- X {
- X if (Vblack (sq))
- X OReverse ();
- X printz (" ");
- X ONormal ();
- X }
- X#endif /* MSDOS && !SEVENBIT */
- X break;
- X case white:
- X#if defined(MSDOS) && !defined(SEVENBIT)
- X if (!flag.rv)
- X OReverse ();
- X printz (" %c ", pxx[board[sq]]);
- X ONormal ();
- X#else
- X printz (" %c ", pxx[board[sq]]);
- X#endif /* MSDOS && !SEVENBIT */
- X break;
- X default:
- X ShowMessage (CP[55]); /*Draw piece color[sq] err*/
- X break;
- X }
- X}
- X
- Xvoid
- XDrawSquare (short int sq)
- X{
- X#if defined(MSDOS) && !defined(SEVENBIT)
- X if (flag.rv)
- X {
- X gotoXY (Vcoord (sq, 1, 1));
- X printz (Vblack (sq) ? "\262\262\262\262\262" : "\260\260\260\260\260");
- X gotoXY (Vcoord (sq, 1, 2));
- X printz (Vblack (sq) ? "\262\262\262\262\262" : "\260\260\260\260\260");
- X gotoXY (Vcoord (sq, 1, 3));
- X printz (Vblack (sq) ? "\262\262\262\262\262" : "\260\260\260\260\260");
- X }
- X else
- X {
- X gotoXY (Vcoord (sq, 1, 1));
- X printz (Vblack (sq) ? "\260\260\260\260\260" : "\262\262\262\262\262");
- X gotoXY (Vcoord (sq, 1, 2));
- X printz (Vblack (sq) ? "\260\260\260\260\260" : "\262\262\262\262\262");
- X gotoXY (Vcoord (sq, 1, 3));
- X printz (Vblack (sq) ? "\260\260\260\260\260" : "\262\262\262\262\262");
- X }
- X#else
- X if (flag.shade)
- X {
- X gotoXY (Vcoord (sq, 1, 1));
- X printz (Vblack (sq) ? "/////" : " ");
- X gotoXY (Vcoord (sq, 1, 2));
- X printz (Vblack (sq) ? "/////" : " ");
- X gotoXY (Vcoord (sq, 1, 3));
- X printz (Vblack (sq) ? "/////" : " ");
- X }
- X else
- X {
- X if (Vblack (sq))
- X OReverse ();
- X gotoXY (Vcoord (sq, 1, 1));
- X printz (" ");
- X gotoXY (Vcoord (sq, 1, 2));
- X printz (" ");
- X gotoXY (Vcoord (sq, 1, 3));
- X printz (" ");
- X ONormal ();
- X }
- X#endif /* MSDOS && !SEVENBIT */
- X}
- X
- Xvoid
- XDrawCoords (void)
- X{
- X short z;
- X
- X for (z = 0; z <= 7; z++)
- X {
- X short sq;
- X
- X sq = z << 3;
- X gotoXY (VcoordI (sq, 1, 1));
- X#if !defined(MSDOS) || defined(SEVENBIT)
- X if ((Vblack (sq) || flag.shade) && flag.rv)
- X#endif /* !MSDOS || SEVENBIT */
- X OReverse ();
- X printz ("%d", 1 + z);
- X ONormal ();
- X }
- X
- X for (z = 0; z <= 7; z++)
- X {
- X short sq;
- X
- X sq = z;
- X gotoXY (VcoordI (sq, SQW, SQH));
- X#if !defined(MSDOS) || defined(SEVENBIT)
- X if ((Vblack (sq) || flag.shade) && flag.rv)
- X#endif /* !MSDOS || SEVENBIT */
- X OReverse ();
- X printz ("%c", cxx[z]);
- X ONormal ();
- X }
- X
- X#if !defined(MSDOS) || defined(SEVENBIT)
- X for (z = 1; z <= (8 * SQH); z++)
- X {
- X gotoXY ((8 * SQW) + 1, z);
- X printz ("|");
- X }
- X#endif /* MSDOS && !SEVENBIT */
- X}
- X
- Xvoid
- XShowPostnValue (short int sq)
- X
- X/*
- X * must have called ExaminePosition() first
- X */
- X
- X{
- X short score;
- X
- X gotoXY (VcoordR (sq, 2, 1));
- X score = ScorePosition (color[sq]);
- X#if !defined(MSDOS) || defined(SEVENBIT)
- X if (Vblack (sq) && !flag.shade)
- X OReverse ();
- X#endif /* !MSDOS || SEVENBIT */
- X
- X if (color[sq] != neutral)
- X printz ("%3d", svalue[sq]);
- X else
- X#if defined(MSDOS) && !defined(SEVENBIT)
- X {
- X if (flag.rv)
- X printz (Vblack (sq) ? "\262\262\262" : "\260\260\260");
- X else
- X printz (Vblack (sq) ? "\260\260\260" : "\262\262\262");
- X }
- X#else
- X printz (flag.shade && Vblack (sq) ? "///" : " ");
- X#endif /* MSDOS && !SEVENBIT */
- X ONormal ();
- X}
- X
- Xvoid
- XShowPostnValues (void)
- X{
- X short sq, score;
- X
- X ExaminePosition ();
- X for (sq = 0; sq < 64; sq++)
- X ShowPostnValue (sq);
- X score = ScorePosition (opponent);
- X gotoXY (TAB, 5);
- X printz (CP[103], score, mtl[computer], pmtl[computer], pscore[computer], sscore[computer],
- X mtl[opponent], pmtl[opponent], pscore[opponent], sscore[opponent]);
- X ClrEoln ();
- X}
- X
- Xvoid
- XUpdateDisplay (short int f, short int t, short int redraw, short int isspec)
- X{
- X short sq;
- X
- X if (redraw)
- X {
- X ShowHeader ();
- X ShowPlayers ();
- X for (sq = 0; sq < 64; sq++)
- X {
- X DrawSquare (sq);
- X DrawPiece (sq);
- X }
- X if (flag.coords)
- X DrawCoords ();
- X }
- X else
- X {
- X DrawPiece (f);
- X DrawPiece (t);
- X if (isspec & cstlmask)
- X if (t > f)
- X {
- X DrawPiece (f + 3);
- X DrawPiece (t - 1);
- X }
- X else
- X {
- X DrawPiece (f - 4);
- X DrawPiece (t + 1);
- X }
- X else if (isspec & epmask)
- X {
- X DrawPiece (t - 8);
- X DrawPiece (t + 8);
- X }
- X }
- X if (PositionFlag)
- X ShowPostnValues ();
- X refresh ();
- X}
- X
- Xchar *InPtr;
- Xvoid
- Xskip ()
- X{
- X while (*InPtr != ' ')
- X InPtr++;
- X while (*InPtr == ' ')
- X InPtr++;
- X}
- Xvoid
- Xskipb ()
- X{
- X while (*InPtr == ' ')
- X InPtr++;
- X}
- X
- Xvoid
- XChangeAlphaWindow (void)
- X{
- X ShowMessage (CP[114]);
- X scanz ("%hd", &WAwindow);
- X ShowMessage (CP[34]);
- X scanz ("%hd", &BAwindow);
- X}
- X
- Xvoid
- XChangeBetaWindow (void)
- X{
- X ShowMessage (CP[115]);
- X scanz ("%hd", &WBwindow);
- X ShowMessage (CP[35]);
- X scanz ("%hd", &BBwindow);
- X}
- X
- Xvoid
- XGiveHint (void)
- X{
- X char s[40];
- X if (hint)
- X {
- X algbr ((short) (hint >> 8), (short) (hint & 0xFF), false);
- X strcpy (s, CP[198]); /*try*/
- X strcat (s, mvstr[0]);
- X ShowMessage (s);
- X }
- X else
- X ShowMessage (CP[223]);
- X}
- X
- Xvoid
- XChangeHashDepth (void)
- X{
- X ShowMessage (CP[163]);
- X scanz ("%hd", &HashDepth);
- X ShowMessage (CP[82]);
- X scanz ("%hd", &HashMoveLimit);
- X}
- X
- Xvoid
- XChangeSearchDepth (void)
- X{
- X ShowMessage (CP[150]);
- X scanz ("%hd", &MaxSearchDepth);
- X TCflag = !(MaxSearchDepth > 0);
- X}
- X
- Xvoid
- XSetContempt (void)
- X{
- X ShowMessage (CP[142]);
- X scanz ("%hd", &contempt);
- X}
- X
- X
- Xvoid
- XSetAnalysis (void)
- X{
- X ShowMessage (CP[159]);
- X scanz ("%s", Analysis);
- X}
- X
- Xvoid
- XChangeXwindow (void)
- X{
- X ShowMessage (CP[208]);
- X scanz ("%hd", &xwndw);
- X}
- X
- Xvoid
- XSelectLevel (void)
- X{
- X ClrScreen ();
- X gotoXY (32, 2);
- X printz (CP[41]);
- X gotoXY (20, 4);
- X printz (CP[18]);
- X gotoXY (20, 5);
- X printz (CP[19]);
- X gotoXY (20, 6);
- X printz (CP[20]);
- X gotoXY (20, 7);
- X printz (CP[21]);
- X gotoXY (20, 8);
- X printz (CP[22]);
- X gotoXY (20, 9);
- X printz (CP[23]);
- X gotoXY (20, 10);
- X printz (CP[24]);
- X gotoXY (20, 11);
- X printz (CP[25]);
- X gotoXY (20, 12);
- X printz (CP[26]);
- X gotoXY (20, 13);
- X printz (CP[27]);
- X
- X OperatorTime = 0;
- X TCmoves = 60;
- X TCminutes = 5;
- X TCseconds = 0;
- X gotoXY (20, 17);
- X printz (CP[62]);
- X refresh ();
- X scanz ("%ld", &Level);
- X switch ((int) Level)
- X {
- X case 1:
- X TCmoves = 60;
- X TCminutes = 5;
- X break;
- X case 2:
- X TCmoves = 60;
- X TCminutes = 15;
- X break;
- X case 3:
- X TCmoves = 60;
- X TCminutes = 30;
- X break;
- X case 4:
- X TCmoves = 40;
- X TCminutes = 30;
- X break;
- X case 5:
- X TCmoves = 40;
- X TCminutes = 60;
- X break;
- X case 6:
- X TCmoves = 40;
- X TCminutes = 120;
- X break;
- X case 7:
- X TCmoves = 40;
- X TCminutes = 240;
- X break;
- X case 8:
- X TCmoves = 1;
- X TCminutes = 15;
- X break;
- X case 9:
- X TCmoves = 1;
- X TCminutes = 60;
- X break;
- X case 10:
- X TCmoves = 1;
- X TCminutes = 600;
- X break;
- X }
- X
- X TCflag = (TCmoves > 0);
- X SetTimeControl ();
- X ClrScreen ();
- X UpdateDisplay (0, 0, 1, 0);
- X}
- X
- Xvoid
- XDoDebug (void)
- X{
- X short c, p, sq, tp, tc, tsq, score;
- X char s[40];
- X
- X ExaminePosition ();
- X ShowMessage (CP[65]);
- X scanz ("%s", s);
- X c = neutral;
- X if (s[0] == CP[9][0] || s[0] == CP[9][1]) /* w W*/
- X c = white;
- X if (s[0] == CP[9][2] || s[0] == CP[9][3]) /*b B*/
- X c = black;
- X for (p = king; p > no_piece; p--)
- X if ((s[1] == pxx[p]) || (s[1] == qxx[p]))
- X break;
- X for (sq = 0; sq < 64; sq++)
- X {
- X tp = board[sq];
- X tc = color[sq];
- X board[sq] = p;
- X color[sq] = c;
- X tsq = PieceList[c][1];
- X PieceList[c][1] = sq;
- X ShowPostnValue (sq);
- X PieceList[c][1] = tsq;
- X board[sq] = tp;
- X color[sq] = tc;
- X }
- X score = ScorePosition (opponent);
- X gotoXY (TAB, 5);
- X printz (CP[103], score, mtl[computer], pmtl[computer], pscore[computer], sscore[computer],
- X mtl[opponent], pmtl[opponent], pscore[opponent], sscore[opponent]);
- X ClrEoln ();
- X}
- END_OF_FILE
- if test 20989 -ne `wc -c <'src/nuxdsp.c'`; then
- echo shar: \"'src/nuxdsp.c'\" unpacked with wrong size!
- fi
- # end of 'src/nuxdsp.c'
- fi
- if test -f 'test/test12' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'test/test12'\"
- else
- echo shar: Extracting \"'test/test12'\" \(491 characters\)
- sed "s/^X//" >'test/test12' <<'END_OF_FILE'
- XBlack computer White Human 1 # correct e5e4 Cray Blitz at 23 plys
- XCastled White false Black false #
- XTimeControl 0 Operator Time 0
- XWhite Clock 0 Moves 0
- XBlack Clock 0 Moves 0
- X
- X8 ........ 10 10 10 10 10 10 10 10
- X7 .....P.. 10 10 10 10 10 10 10 10
- X6 ........ 0 0 0 10 10 10 0 0
- X5 ....k.p. 0 0 0 0 0 0 0 0
- X4 .....pK. 0 0 0 0 0 0 0 0
- X3 ........ 0 0 0 10 10 0 0 0
- X2 ........ 10 10 10 10 10 0 10 10
- X1 ........ 10 10 10 10 10 10 10 10
- X abcdefgh
- X
- Xmove score depth nodes time flags capture color
- END_OF_FILE
- if test 491 -ne `wc -c <'test/test12'`; then
- echo shar: \"'test/test12'\" unpacked with wrong size!
- fi
- # end of 'test/test12'
- fi
- echo shar: End of archive 7 \(of 12\).
- cp /dev/null ark7isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 10 11 12 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 12 archives.
- rm -f ark[1-9]isdone ark[1-9][0-9]isdone
- echo Building book file.
- cat misc/book.xaa misc/book.xab > misc/gnuchess.nunn.book
- rm misc/book.xaa misc/book.xab
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
-