amiga-request@ab20.larc.nasa.gov (Amiga Sources/Binaries Moderator) (05/18/91)
Submitted-by: RWALLACE%vax1.tcd.ie@CUNYVM.CUNY.EDU Posting-number: Volume 91, Issue 115 Archive-name: games/draughts/part01 [ includes uuencoded executable ...tad ] Run from operating system prompt by typing "draughts <ply>" where <ply> is the number of half-moves you want the program to look ahead. The higher the number the better the quality of the game but the slower the program will play. 3 or 4 is probably about the limit for most people's patience, but you could use higher numbers for batch-mode play. The program always takes first move (it plays black, you play white). It will display the board on the screen and the cursor below that. You can then type your move by typing the coordinates of the start and finish squares, row first e.g. one possible starting move is 5140. Note that you must type the 4 digits with no spaces or anything between them, exactly as shown. Also when taking one of the computer's pieces, the destination square is on top of the enemy piece not beyond it even though your piece will actually be jumping over the enemy piece. Press CTRL-C to stop the program. Exceptions to the standard rules of draughts are: - No repeat taking in one move - You don't have to take an enemy piece if the opportunity arises - If one side can make no legal move, the game does not end #!/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 1 (of 1)." # Contents: draughts.c draughts.uu # Wrapped by tadguy@ab20 on Fri May 17 22:12:07 1991 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'draughts.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'draughts.c'\" else echo shar: Extracting \"'draughts.c'\" \(7553 characters\) sed "s/^X//" >'draughts.c' <<'END_OF_FILE' X/* XDraughts game by Russell Wallace 29 September 1990 XStandard ANSI C so it should compile on any system XUses Alpha-Beta minimax algorithm X XRun from operating system prompt by typing "draughts <ply>" Xwhere <ply> is the number of half-moves you want the program to look ahead. XThe higher the number the better the quality of the game but the slower the Xprogram will play. 3 or 4 is probably about the limit for most people's Xpatience, but you could use higher numbers for batch-mode play. The program Xalways takes first move (it plays black, you play white). It will display Xthe board on the screen and the cursor below that. You can then type your Xmove by typing the coordinates of the start and finish squares, row first Xe.g. one possible starting move is 5140. Note that you must type the 4 digits Xwith no spaces or anything between them, exactly as shown. Also when taking Xone of the computer's pieces, the destination square is on top of the enemy Xpiece not beyond it even though your piece will actually be jumping over the Xenemy piece. Press CTRL-C to stop the program. X XExceptions to the standard rules of draughts are: X- No repeat taking in one move X- You don't have to take an enemy piece if the opportunity arises X- If one side can make no legal move, the game does not end X XThis code is in the public domain. X*/ X X#include <stdio.h> X#include <limits.h> X#include <string.h> X#include <stdlib.h> X Xtypedef struct X{ X int p[8][8]; X} board; X Xtypedef struct X{ X int i,j,dir; X} trackMove; X X#define TRUE 1 X#define FALSE 0 X Xboard startboard = X{ X 1,0,1,0,1,0,1,0, X 0,1,0,1,0,1,0,1, X 1,0,1,0,1,0,1,0, X 0,0,0,0,0,0,0,0, X 0,0,0,0,0,0,0,0, X 0,-1,0,-1,0,-1,0,-1, X -1,0,-1,0,-1,0,-1,0, X 0,-1,0,-1,0,-1,0,-1, X}; X Xint ply; X Xisvalidmove (board *move) X{ X return (move->p[0][0] != INT_MIN); X} X Xvoid inctrackmove (trackMove *trackmove) X{ X trackmove->dir = 0; X trackmove->j += 2; X if (trackmove->j >= 8) X { X if (trackmove->j == 8) X trackmove->j = 1; X else X trackmove->j = 0; X trackmove->i++; X } X} X Xsign (int x) X{ X if (x < 0) X return -1; X if (x > 0) X return 1; X return 0; X} X Xmakemove (int i,int j,int di,int dj,board *move) X{ X if (i+di < 0 || i+di > 7 || j+dj < 0 || j+dj > 7) X return TRUE; X if (sign (move->p[i][j]) == sign (move->p[i+di][j+dj])) X return TRUE; X if (move->p[i+di][j+dj] == 0) X { X if (move->p[i][j] == 1 && i+di == 7) X move->p[i][j] = 2; X if (move->p[i][j] == -1 && i+di == 0) X move->p[i][j] = -2; X move->p[i+di][j+dj] = move->p[i][j]; X move->p[i][j] = 0; X return FALSE; X } X if (i+di+di < 0 || i+di+di > 7 || j+dj+dj < 0 || j+dj+dj > 7) X return TRUE; X if (move->p[i+di+di][j+dj+dj] != 0) X return TRUE; X if (move->p[i][j] == 1 && i+di+di == 7) X move->p[i][j] = 2; X if (move->p[i][j] == -1 && i+di+di == 0) X move->p[i][j] = -2; X move->p[i+di][j+dj] = 0; X move->p[i+di+di][j+dj+dj] = move->p[i][j]; X move->p[i][j] = 0; X return FALSE; X} X Xvoid findnextmove (board *pos,board *move,trackMove *trackmove,int minimize) X{ X int i,j; X static di[] = { 1,1,-1,-1 }; X static dj[] = { -1,1,-1,1 }; X *move = *pos; XBIGLOOP: X if (trackmove->i >= 8) X { X move->p[0][0] = INT_MIN; X return; X } XLOOP: X i = trackmove->i; X j = trackmove->j; X switch (pos->p[i][j]) X { X case -2: X if (!minimize) X goto INCMOVE; X if (makemove (i,j,di[trackmove->dir],dj[trackmove->dir],move)) X goto NEXT; X goto FINISH; X case -1: X if (!minimize) X goto INCMOVE; X if (trackmove->dir < 2) X trackmove->dir = 2; X if (makemove (i,j,di[trackmove->dir],dj[trackmove->dir],move)) X goto NEXT; X goto FINISH; X case 1: X if (minimize || trackmove->dir > 1) X goto INCMOVE; X if (makemove (i,j,di[trackmove->dir],dj[trackmove->dir],move)) X goto NEXT; X goto FINISH; X case 2: X if (minimize) X goto INCMOVE; X if (makemove (i,j,di[trackmove->dir],dj[trackmove->dir],move)) X goto NEXT; X goto FINISH; X } XINCMOVE: X inctrackmove (trackmove); X goto BIGLOOP; XNEXT: X trackmove->dir++; X if (trackmove->dir > 3) X goto INCMOVE; X goto LOOP; XFINISH: X trackmove->dir++; X if (trackmove->dir > 3) X inctrackmove (trackmove); X} X Xvoid findfirstmove (board *pos,board *move,trackMove *trackmove,int minimize) X{ X trackmove->i = trackmove->j = trackmove->dir = 0; X findnextmove (pos,move,trackmove,minimize); X} X Xminimax (board *pos,int level,int alpha,int beta) X{ X board move; X trackMove trackmove; X if (level == ply) X { X int i,j; X int value = 0; X for (i=0 ; i<8 ; i++) X for (j=0 ; j<8 ; j++) X value += pos->p[i][j]; X return value; X } X findfirstmove (pos,&move,&trackmove,level & 1); X if (level & 1) /* Minimizing level */ X { X while (alpha < beta && isvalidmove (&move)) X { X int temp = minimax (&move,level+1,alpha,beta); X if (temp < beta) X beta = temp; X findnextmove (pos,&move,&trackmove,TRUE); X } X return beta; X } X else /* Maximizing level */ X { X while (alpha < beta && isvalidmove (&move)) X { X int temp = minimax (&move,level+1,alpha,beta); X if (temp > alpha) X alpha = temp; X findnextmove (pos,&move,&trackmove,FALSE); X } X return alpha; X } X} X Xvoid printboard (board *pos) X{ X int i,j; X printf ("\n 01234567\n"); X for (i=0 ; i<8 ; i++) X { X printf ("%c",i + '0'); X for (j=0 ; j<8 ; j++) X { X switch (pos->p[i][j]) X { X case -2: X printf ("W"); X break; X case -1: X printf ("w"); X break; X case 0: X if ((i + j) & 1) X printf (" "); X else X printf ("."); X break; X case 1: X printf ("b"); X break; X case 2: X printf ("B"); X break; X } X } X printf ("\n"); X } X printf ("\n"); X} X Xmain (int argc,char **argv) X{ X int i,j,newi,newj,di,dj; X static char buf[256]; X static board move; X static board bestmove; X static trackMove trackmove; X static board pos; X int alpha; X printf ("Draughts by Russell Wallace " __DATE__ "\n" X "See source code for details\n"); X if (argc != 2 || argv[1][0] == '?') X return 1; X ply = atoi (argv[1]); X for (;;) X { X pos = startboard; X for (;;) X { X alpha = INT_MIN; X newi = newj = FALSE; X for (i=0 ; i<8 ; i++) X for (j=0 ; j<8 ; j++) X { X if (pos.p[i][j] < 0) X newi = TRUE; X if (pos.p[i][j] > 0) X newj = TRUE; X } X if (!newi) X { X printf ("I win\n"); X break; X } X if (!newj) X { X printf ("You win\n"); X break; X } X bestmove = pos; X findfirstmove (&pos,&move,&trackmove,FALSE); X while (isvalidmove (&move)) X { X int newalpha = minimax (&move,1,alpha,INT_MAX); X if (newalpha > alpha) X { X alpha = newalpha; X bestmove = move; X } X findnextmove (&pos,&move,&trackmove,FALSE); X } X pos = bestmove; X printboard (&pos); XGET_MOVE: X gets (buf); X if (strlen (buf) != 4) X goto ILLEGAL_MOVE; X i = buf[0] - '0'; X j = buf[1] - '0'; X newi = buf[2] - '0'; X newj = buf[3] - '0'; X if ( i < 0 || i > 7 || newi < 0 || newi > 7 || X j < 0 || j > 7 || newj < 0 || newj > 7) X goto ILLEGAL_MOVE; X if ((i-newi != 1 && i-newi != -1) || (j-newj != 1 && j-newj != -1)) X goto ILLEGAL_MOVE; X if (pos.p[i][j] >= 0) X goto ILLEGAL_MOVE; X if (pos.p[newi][newj] < 0) X goto ILLEGAL_MOVE; X if (pos.p[newi][newj] == 0) X { X if (newi == 0) X pos.p[i][j] = -2; X pos.p[newi][newj] = pos.p[i][j]; X pos.p[i][j] = 0; X } X else X { X di = newi - i; X dj = newj - j; X if (newi+di < 0 || newi+di > 7 || newj+dj < 0 || newj+dj > 7) X goto ILLEGAL_MOVE; X if (pos.p[newi+di][newj+dj] != 0) X goto ILLEGAL_MOVE; X if (newi+di == 0) X pos.p[i][j] = -2; X pos.p[newi+di][newj+dj] = pos.p[i][j]; X pos.p[newi][newj] = 0; X pos.p[i][j] = 0; X } X } X } XILLEGAL_MOVE: X printf ("Illegal move\n"); X goto GET_MOVE; X} END_OF_FILE if test 7553 -ne `wc -c <'draughts.c'`; then echo shar: \"'draughts.c'\" unpacked with wrong size! fi # end of 'draughts.c' fi if test -f 'draughts.uu' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'draughts.uu'\" else echo shar: Extracting \"'draughts.uu'\" \(13612 characters\) sed "s/^X//" >'draughts.uu' <<'END_OF_FILE' Xbegin 644 draughts XM```#\P`````````#``````````(```7J```"C0```F\```/I```%ZDCG?OXD4 XM2"0`2?D`````+'@`!$?Y```#/'(`(#P```&@8`(FP5'(__PI3P-\*4X#=$*LT XM`WAP`"(\```P`$ZN_LY#^@&4<`!.KOW8*4`)N&8&<&1@``$F)FX!%"EK`)@#= XM<$JK`*QG``"2(`^0KP`X!H````"`*4`#0"!K`*S1R-'((F@`$-/)T\D@`G(`Q XM$ADI20.$T(%>@`)`__PI0`.,2.=`0"(\``$``4ZN_SI*@&8,(#P```/H+P!GE XM``$0($`I0`.(3-\"`B`"4X#4@1&R```@`E."4<C_]A&\`"`@`E."$;P`(B`"; XM$;$@`"`!4<K_^!"\`"(O"&!R*6L`.@-`<']2@-&L`T!!ZP!<3J[^@$'K`%Q.V XMKOZ,*4`#>"\`)$`@*@`D9Q(L;`FX($`B*```*4$#<$ZN_X(B*@`@9QHD/```` XM`^U.KO_B*4`#@&<*Y8@@0"=H``@`I"!L`W@O"$AL`SP@:``D*6@`!`.$3KH`S XML$ZZ`'QP`&`$("\`!"\`("P#:&<$($!.D$ZZ`%PL>``$(FP)N$ZN_F).N@"&O XM2JP#>&<<(BP#@&<$3J[_W"QX``1.KO]\(FP#>$ZN_H9@#B`L`XQG"")L`XA.. XMKO\N(!\N;`-\3-]_?DYU9&]S+FQI8G)A<GD```!@``\"3G$``"!O``1@``3*X XM3G$``$CG,#(L;P`H)&\`&"9O`!PD+P`@)B\`)$ZN_J1,WTP,3G4``$YU3G5(- XMYP<P+@`F2"P!(`=.NA3*)$`@"F8$</]@,`@J``,``V<.2'@``B`'<@!.N@[,5 XM6$\@*@`$(@8@2TZZ$,HJ`$JL`U1G!'#_8`(@!4S?#.!.=0```````'!A2.<#? XM$"9O`!`@2TH89OQ3B)'++`A^`!X;2H=G+%.L`69M$B!L`5Y2K`%>(`<0@'(`` XM$@!@X"`'<@`2`"`!0>P!6DZZ!KHB`&#,</]![`%:3KH&K"`&3-\(P$YU````) XM``````!P84Y5_\!(YR<P)D@D27X`?`!Z`'``&WP`(/_[<@`K0?_V=/\K0O_R- XM0>W_T!M`__$;0/_\*T'_Y"M!_^@K2/_,$!-G+'(`$@`$00`@9Q1706<444%GD XM"%5!9A9^`6`.?`%@"GH!8`8;?``!__Q2BV#0$!-R,+`!9@92BQM!__MP*K`3A XM9@P@4EB2*U#_]E*+8`P@2T/M__9.N@MVU\`0$W(NL`%F(%*+<"JP$V8,(%)8G XMDBM0__)2BV`,($M#[?_R3KH+3M?`$!-R;+`!9@H;?``!__%2BV`(<FBP`68"M XM4HL0&W(`$@`;0/_P!$$`4&<``69106<``70$00`+9P`!^E-!9R0$00`+9P`!P XM#%-!9P`!1E=!9P`!JE5!9P``WE=!9P`!2&```>A*+?_Q9P@@4EB2(!!@!B!2> XM6)(@$"M`_^QL"G(!1*W_["M!_^@@+?_H9P1R+6`*2@9G!'(K8`)R(!M!_]!R9 XM`!(&@(%R`!(%@(%G"%*M_\Q2K?_D("W_["!M_\Q.N@H(*T#_R"`M__)*@&H&2 XM<@$K0?_R("W_R"(M__*2@$CM``+_Q&\T(&W_S-'!+T@`&"!M_\PB;P`83KH,A XM-G``$"W_^R(M_\0@;?_,8`(0P%.!9/H@+?_R*T#_R-&M_^1![?_0*TC_S$H'( XM9P`!)!M\`"#_^V```1I*+?_Q9P@@4EB2(!!@!B!26)(@$"M`_^Q@`/]F2BW_= XM\6<((%)8DB`08`8@4EB2(!`K0/_L2BW__&<2(&W_S!#\`#!R`2M!_^0K2/_,S XM(&W_S$ZZ"6@K0/_(8`#_-B`M__)*@&H&<`@K0/_R&WP``?_Q2BW_\6<((%)8, XMDB`08`8@4EB2(!`K0/_L2BW__&<6(&W_S!#\`#`0_`!X<@(K0?_D*TC_S"!M? XM_\Q.N@E(*T#_R`@M``7_\&<`_MA![?_03KH('F``_LP@4EB2(E`K2?_,9@A!- XM^@#&*TC_S"!M_\Q*&&;\4XB1[?_,*TC_Y"`M__)*@&LDL<!O("M`_^1@&G`!D XM*T#_Y"!26)(@$!M`_]!"+?_18`1P`&!Z("W_Y"(M__:R@&P(=``K0O_V8`216 XMK?_V2@=G+E.M_^1M%'``(&W_S!`8*TC_S"!M``A.D&#F4ZW_]FT\<``0+?_[8 XM(&T`"$Z08.Q3K?_V;0YP`!`M__L@;0`(3I!@[%.M_^1M%'``(&W_S!`8*TC_; XMS"!M``A.D&#F(`M,WPSD3EU.=0``3E7_]$CG`3`F2"1)*VT`"/_V'AI*!V<N] XM<"6^`&8@L!)F!%**8!@O"R!*0^W_]F$`_#Y83RM`__IG!"1`8-1P`!`'3I-@3 XMS$S?#(!.74YU3E7_Z$CG(3(F2`RL````(`D:;```TA`3<B"P`6<,<@FP`6<&6 XM<@JP`68$4HM@Z!`39P``M"(L"1KE@5*L"1I![`DBT<$D2'(BL`%F<E*+($LD1 XMB"M(_^P0$W(BL`%G4'(JL`%F/E*+<``0$P1``$5G"`1```EG$&`<(&W_[!#\B XM`!<K2/_L8!@@;?_L$/P`"BM(_^Q@"B!M_^P0TRM(_^Q2BV"T(&W_[!#;*TC_" XM[&"H4HL@;?_L0A@K2/_L8`#_3B2+$!-G%G(@L`%G$'()L`%G"G(*L`%G!%*+) XM8.9*$V8"8`9"&V``_R8@+`D:9@8@;`-X8`1![`DB*4@)'DJ`9@``@$/Z`21-H XM[`C@+-DLV2S9+-D\D2)L`W@@:0`D+T@`%'`H0>P(X")O`!0B:0`$3KH&!D'L8 XM".`B""0\```#[BQL";A.KO_B*4`'I"E`!ZQR$"E!!Z@I0`>T*4$'L.6`*T#_X XM\)/)+'@`!$ZN_MH@;?_P(D`C:``(`*1^`"M`__1@*BQL";A.KO_**4`'I$ZNQ XM_\0I0`>L0?H`I"(()#P```/M3J[_XBE`![1^$"`'`$"``8&L!Z`@!P!`@`*!M XMK`>H`*P``(`#![!*K`&@9P1P`&`&(#P``(``+@!"K`%4(`<`0``!*4`!4'`!Y XM*4`!=B`'`$```BE``7)P`BE``9@@!P!``(`I0`&40?H-#BE(`VP@+`D:(&P)X XM'DZZ`#YP`$ZZ"@!,WTR$3EU.=6-O;CHQ,"\Q,"\S,C`O.#`O`"H`````````N XM``````````````````````````!.^0``!N8````````O"R9(2JL`%&<,""L`* XM`P`;9@1P`&`R("P#.$ZZ".0G0``$)T``$&8*<`PI0`FT</]@%B=L`S@`%'#SC XMP:L`&'``)T``#"=```@F7TYU````````````````3E7_[$CG+Q`N`"9(*`=P5 XM,<"K`!AG!G#_8``"1@@K``<`&E;`1`!(@$C`+`!*JP`49GH(*P`"`!MF<G``C XM)T``#'+_OH%G``(:($M.NO]<2H!G#`CK``4`&W#_8``"!`CK``$`&TH&9PX@- XM*P`4(@!$@2=!``Q@""`K`!0G0``,4ZL`#&T2(&L`!%*K``0@!Q"`<@`2`&`08 XM(`=R`!(`(`$@2V$`_UXB`"`!8``!M@@K``(`&V=0</^^@&8&<`!@``&B(`<;D XM0/__2@9G'G`*OH!F&'`"*T#_\"(K`!Q!^@&,P4%.NO?**@!@%G`!*T#_\"(K) XM`!Q![?__P4%.NO>R*@!^_V```,X(ZP`!`!M*!F=*</^^@&=$5*L`#'(*OH%FD XM'B!K``12JP`$$+P`#2(K``Q*@6L&($MA`/[*4JL`#"!K``12JP`$(`<0@"`K+ XM``Q*@&H&(`=@``$,?O\@*P`$D*L`$"M`__!G:`@K``8`&F=,2'@``B`K`!QR[ XM`$ZZ!BI83RM`_^Q*!F<T4ZW_[&TN0J<@*P`<(BW_[$ZZ!@P@*P`<<@%![?_]. XM3KH%#EA/2JP#5&8*$"W__7(:L`%GS"`K`!PB+?_P(&L`$$ZZ]N0J`&`">@!P` XM_[J`9@@(ZP`%`!M@#+JM__!G!@CK``0`&TH&9PXB*P`4)`%$@B="``Q@&`@KL XM``(`&V<(<@`G00`,8`@B*P`4)T$`#"!K`!`G2``$OH!G*%.K``QM$B!K``12T XMJP`$(`<0@'(`$@!@$"`'<@`2`"`!($MA`/V\(@!P,,"K`!AG!'#_8`QP_[B`= XM9@1P`&`"(`1,WPCT3EU.=0T*``!(YP<0)D@(*P`'`!I6P$0`2(!(P"X`<##`, XMJP`89PI"JP`(</]@``$X""L`!P`;9Q`(*P`&`!MG"'#_($M.NOU62JL`%&8R6 XM0JL`"`@K``(`&V<0<`$G0``40>L`("=(`!!@<B!+3KK\UDJ`9V@(ZP`%`!MPF XM_V```.A*!V=85*L`""`K``AN3B!K``12JP`$?``<$"`&<@V0@6<(<@V0@6<BC XM8"Q3JP`(;1`@:P`$4JL`!'``$!!@``"H($MA`/]$8```G@CK``0`&W#_8```E XMDB`&8```C`@K``$`&V9*".L````;("L`'"(K`!0@:P`03KH#6"H`2H5J!@CK3 XM``4`&TJ%9@8(ZP`$`!M*A6\:2@=G"B`%1(`G0``(8`0G10`((&L`$"=(``1PU XM,L"K`!AG%DH'9PAP_R=```A@!G``)T``"'#_8!I3JP`(;0X@:P`$4JL`!'``_ XM$!!@!B!+80#^I$S?".!.=4CG!P`N`"`L`2!3@"P`2D9K+B`&2,#G@$'L!Z`J6 XM,`@`2@5G&`@%``1F$B`&2,#G@$'L!Z`@,`@$3KH&GE-&8,X@!TZZ\_),WP#@F XM3G4```````!P82YL`WQ.N@:B<!1.N@4T``````````!P84CG(#`F2"1+$!)G8 XM)'(`$@!![`(U"#```1@`9PIR`!(`=""2@F`$<@`2`!2!4HI@V"`+3-\,!$YUT XM````````<&%.5?_X2.<#,"9()$DN`"!*2AAF_%.(D<HL""!+2AAF_%.(D<L@T XM"")+T\`K2?_XO(=C`BP'(`8@2F`"$MA3@&3Z(&W_^$(P:``@"TS?#,!.74YU) XM```O"R9(<``0$T'L`C4(,``#"`!G!%*+8.P@"R9?3G4``$Y5__0B3W(*3KH&Z XMT`9!`#`2P4J`9O`@"1#AO\EF^D(0D(].74YU``!.5?_T(D\B``)!``<&00`P% XM$L'FB&;P(`D0X;_)9OI"$)"/3EU.=0``,#$R,S0U-C<X.6%B8V1E9E%/(D\R= XM``)!``\2^Q#DZ(AF\B`)(@\0X;*)9OI"$)"!4$].=2\)(DAR`'``+P(,$``K" XM9P8,$``M9@)22!`8!```,&T2#```"6X,)`'E@=*"TH'2@&#F#!$`+68"1($D' XM'R`(4X`@7R"!D(E.=4Y5_^1(YP$R+@`K2/_D2H=N!G#_8```TG`(OH!D`BX`R XM(`=6@"X``D?__"1M_^0@+?_DT(??K`$T0>P!,"90*T#_\"M(__0@"V<``)`@` XM2R`K``31P$CM`0#_[")M__"WR6,0)(LE1P`$+&W_]"R*<`!@=K?)9AHL4R2.5 XM("L`!"(`TH<E00`$+&W_]"R*<`!@6+7(9`B?K`$T</]@3+7(9BH@$V<,L\!CK XM")^L`31P_V`XWZL`!"`39PZSP&8*("D`!-&K``0FD7``8!XK2__T*VW_[/_HM XM)E-@`/]N(&W_]""*0I(E1P`$<`!,WTR`3EU.=0```````'!A2.<',"X`)D@L( XM`2`'3KH&PB1`(`IF!'#_8!H@*@`$(@8@2TZZ`XPJ`$JL`U1G!'#_8`(@!4S?4 XM#.!.=0``+P<N`%*L":13K`%F;1(@;`%>4JP!7B`'$(!R`!(`8!(@!W(`$@`@C XM`4'L`5I.NOCB(@`N'TYU3E4``"\+)FT`"$*L":1(;0`,0?K_MB)+3KKUNG#_T XM0>P!6DZZ^+8@+`FD)FW__$Y=3G5*@&\6L\AE#-'`T\`3(%.`9OI.=1+84X!F> XM^DYU2.<`,B9L":@@"V<4)%,B2R`I``@L>``$3J[_+B9*8.B1R"E(":PI2`FHF XM3-],`$YU2.</$"X`+`$J+P`8(`=.N@70)D`@"V8$</]@'"\%("L`!"(&3KH"S XM*EA/*`!*K`-49P1P_V`"(`1,WPCP3G4``````````'!A2.<!,BX`<`S>@"`'N XM<@`L>``$3J[_.B9`(`MF!'``8#@G1P`(1>P)J"!J``0G2``$D<@FB$J29@(D: XMBR`J``1G!")`(HLE2P`$2JP!)&8$*4L!)$'K``P@"$S?3(!.=0``````````_ XM````````2.<!,"9()$M3K`%`;0YP`"!L`3P0&"E(`3Q@"$'L`3A.NOGR+@!PF XM_[Z`9Q)P"KZ`9@9"&R`*8!(@!Q;`8,JURV8$<`!@!$(;(`I,WPR`3G5(YP,P; XM+@!*AVX&<`!@``"@<`B^@&0"+@`@!U:`+@`"1__\1>P!,"92(`MG0"`K``2P' XMAVTRL(=F#"!3)(B?K`$T(`M@:B`K``20AW((L(%E%B!+T<<DB"1()),E0``$J XMGZP!-"`+8$@D2R938+P@!R(L`:30@5.`3KH">"(L`:1.N@)0+`!0AB`&5H`L. XM``)&__P@!DZZ_K`F0"`+9Q`@!B!+3KK\<B`'80#_6&`"<`!,WPS`3G4`````9 XM``!P84CG`Q`N`$?L`3@@"V<P""L``@`;9B0(*P`!`!MG'"`K``20JP`0+`!*K XMAF<.("L`'"(&(&L`$$ZZ[Q`F4V#,(`=.NOHJ3-\(P$YU``!(YS<2+@`F2"P!; XM2JP#;&<$3KH#_D*L`U0B!R0+)@8L;`FX3J[_T"H`</^Z@&8.3J[_?"E``U1PT XM!2E`";0@!4S?2.Q.=4CG/P(N`"P!*B\`($JL`VQG!$ZZ`[A"K`-4(`53@"('O XM)`8F`"QL";A.KO^^*`!P_[B`9@Y.KO]\*4`#5'`6*4`)M"`%2H!G"E.`9PI3_ XM@&<,8!@@!F`4(`30AF`.(@=T`"8"+&P)N$ZN_[Y,WT#\3G5(YS<2+@`F2"P!O XM2JP#;&<$3KH#2D*L`U0B!R0+)@8L;`FX3J[_UBH`</^Z@&8.3J[_?"E``U1P& XM!2E`";0@!4S?2.Q.=4CG`0(N`$JL`VQG!$ZZ`PHB!RQL";A.KO_<<`!,WT"`K XM3G4``$Y5_ZA(YP$20_H`B'``+'@`!$ZN_=@F0"`+9@9P%$ZZ^.1^`"!L`X0>1 XM*/__(`=#[?^P8`(2V%.`9/I"-7BP0>W_L"E(`;0O"TAX`"A(>`#Z2&P!T'``< XM+P!P`"(`D<A#[`&\3KKM5'`43KKXFDSM2(#_G$Y=3G4J*B!3=&%C:R!/=F5R= XM9FQO=R`J*@``15A)5```:6YT=6ET:6]N+FQI8G)A<GD`````````<&%(YS``< XM)``F`4A"2$/$P<;`P,'40TA"0D+0@DS?``Q.=4J`:@``'D2`2H%J```,1(%A: XM```@1(%.=6$``!A$@$2!3G5*@6H```Q$@6$```9$@$YU+P)(030!9@``(DA`@ XM2$%(0C0`9P``!H3!,`)(0#0`A,$P`DA",@(D'TYU+P-V$`Q!`(!D```&X9E1< XM0PQ!"`!D```&Z9E90PQ!(`!D```&Y9E50TI!:P``!N.94T,T`.:H2$)"0N:J[ XM2$.`P38`,`(T`TA!Q,&0@F0```A30]"!9/YR`#(#2$/GN$A`P4$F'R0?3G5.T XM5?^82.<S,GX`(&P#A!XH__]P3[Z`;P(N`"`'0^W_KV`"$MA3@&3Z0C5XKY/)M XM+'@`!$ZN_MHF0"`K`*QG2.6`)$`L*@`X2H9F!"PK`*!*AF<T(@9!^@"T)`AVT XM"RQL";A.KO_0($=2AR`(&[P`"@BO(@9![?^O)`@F!RQL";A.KO_0</]@4$/Z, XM`(YP`"QX``1.KOW8*T#_FF8$</]@.$'M_Z\I2`($+RW_FDAX`#Q(>`#Z2&P"@ XM($AL`@QP`"(`D<A#[`'X3KKK8D_O`!13@&<$</]@`G``3-],S$Y=3G4J*B!55 XM<V5R($%B;W)T(%)E<75E<W1E9"`J*@``0T].5$E.544``$%"3U)4`"HJ*B!"E XM<F5A:SH@`&EN='5I=&EO;BYL:6)R87)Y`"\'+@!P`"E``U1*AVLBOJP!(&P<( XM(`?G@$'L!Z!*L`@`9PX@!^>`0>P'H-'`(`A@"'`)*4`)M'``+A].=4CG`0)P= XM`"(\```P`"QX``1.KO[.+@`"AP``,`!*AV<<2JP#;&<6(&P#;$Z02H!F`F`*0 XM0JP#;'`43KKUUDS?0(!.=6&\3G4``$Y5__PO"R9((`MF!'``8!8@2TZZ]K0F& XM0"!+0^W__$ZZ]TP@+?_\)E].74YU```#[`````$````!```)$@````(````"L XM````%`````H````````#\@```^D```*-O^P#0&4`"@XO"R9(#).`````5L!$: XM`$B`2,`F7TYU"B`P,3(S-#4V-PH`)6,``%<`=P`@`"X`8@!"``H`1')A=6=H5 XM=',@8GD@4G5S<V5L;"!786QL86-E("!/8W0@(#@@,3DY,`I3964@<V]U<F-EN XM(&-O9&4@9F]R(&1E=&%I;',*`$D@=VEN"@``66]U('=I;@H``$EL;&5G86P@" XM;6]V90H`O^P#0&4`"6Q(YR`0)DAP`"=```A4JP`$(BL`!'0(LH)M$E&!9@ARJ XM`2=!``1@!"=```12DTS?"`1.=;_L`T!E``DR+P<N`$J':@1P_V`*2H=O!'`!: XM8`)P`"X?3G5.5?_\O^P#0&4`"0Q(YR\0+@`L`2HO`"0H+P`H)D@@!="';11R* XM!["!;@X@!M"$;0@@!-"&L(%O!G`!8``!WB`'ZX`@2]'`(`;E@-'`(!!ACB('E XMTH7K@2!+T<$B!M*$Y8'1P2]``!@@$&$`_W0B+P`8LH!F!G`!8``!HB`%T(<OG XM0``8ZX`@2]'`(`30AN6`T<!*D&8``)8@!^N`($O1P"`&Y8#1P'`!L)!F&G('9 XMLJ\`&&82)`?K@B!+T<(D!N6"T<)T`B""(@?K@2!+T<$B!N6!T<%R_[*09A@D* XM!=2'9A(D!^N"($O1PB0&Y8+1PG3^(((D!=2'ZX(@2]'")`34AN6"T<(D!^N"I XM(DO3PB0&Y8+3PB"1)`?K@B!+T<(D!N6"T<)T`"""(`)@``#R(`?0A="%;1ARE XM!["!;A(@!M"$T(1M"B`&T(30A+"!;P9P`6```,P@!]"%T(7K@"!+T<`@!M"$` XMT(3E@-'`2I!G!G`!8```K"`'ZX`@2]'`(`;E@-'`<`&PD&8<(`?0A="%7X!F! XM$B`'ZX`@2]'`(`;E@-'`<`(@@"`'ZX`@2]'`(`;E@-'`</^PD&8:(`?0A="%X XM9A(@!^N`($O1P"`&Y8#1P'#^((`@!]"%ZX`@2]'`(`;0A.6`T<!P`""`(@?2. XMA=*%ZX$@2]'!(@;2A-*$Y8'1P2('ZX$B2]/!(@;E@=/!()$B!^N!($O1P2(&T XMY8'1P2"`3-\(]$Y=3G5.5?_XO^P#0&4`!NI(YP<P)D@D22X`($LB2G`_(MA1* XMR/_\(&T`"`R0````"&T*)+R`````8``!5"!M``@L$"HH``0@!NN`($O1P"`%A XMY8#1P"`05(!G%%.`9T95@&<``(93@&<``+Y@``#J2H=G``#D(&T`""`H``CE? XM@$'L`1`O,`@`0>P!`"\P"``@!B(%($IA`/U,4$]*@&<``-I@``#`2H=G``"N+ XM(&T`"`RH`````@`(;`9P`B%```@@*``(Y8!![`$0+S`(`$'L`0`O,`@`(`8B7 XM!2!*80#]!E!/2H!G``"48'I*AV9J(&T`""`H``AR`;"!;EP@;0`(("@`".6`/ XM0>P!$"\P"`!![`$`+S`(`"`&(@4@2F$`_,903TJ`9U1@/$J'9BP@;0`(("@`4 XM".6`0>P!$"\P"`!![`$`+S`(`"`&(@4@2F$`_)903TJ`9R1@#"!M``AA`/PJ- XM8`#^QB!M``A2J``(#*@````#``AO`/[(8-X@;0`(4J@`"`RH`````P`(;P1A7 XM`/OZ3-\,X$Y=3G5.50``O^P#0&4`!5A(YP$P)D@D22X`<``@;0`((4``""%`% XM``0@@"\((`<@2R)*80#^/DSM#(#_]$Y=3G5.5?[HO^P#0&4`!1Q(YP<0)D@N[ XM`"P!*BT`"+ZL!YQF2G``*T#^\"M`_N@,K0````C^\&PN0JW^["`M_NQR"+"!G XM;!HB+?[PZX$@2]'!Y8#1P"`0T:W^Z%*M_NQ@W%*M_O!@R"`M_NA@``"D(`=R` XM`<"!2&W^]"!+0^W_`&$`_TA83P@'``!G1+R%;#Q![?\`80#Z@DJ`9S`@!U*`9 XM+P4B!D'M_P!A`/]<6$\K0/[PL(5L`BH`2&W^]'`!($M#[?\`80#]<EA/8,`@[ XM!6!"O(5L/$'M_P!A`/H^2H!G,"`'4H`O!2(&0>W_`&$`_QA83RM`_O"PAF\"8 XM+`!(;?[T<``@2T/M_P!A`/TN6$]@P"`&3-\(X$Y=3G6_[`-`90`$#$CG`Q`FB XM2$AZ^@Q.N@0*6$]^`'`(OH!L``"T(`=R,-"!+P!(>OG\3KH#]%!/?`!P"+R`O XM;```B"`'ZX`@2]'`(`;E@-'`(!!4@&UL#(`````%;&300#`[``9.^P`$``@`R XM%``@`$(`3DAZ^;Q.N@.J6$]@1$AZ^;).N@.>6$]@."`'T(8(````9PQ(>OF>A XM3KH#B%A/8")(>OF43KH#?%A/8!9(>OF*3KH#<%A/8`I(>OF`3KH#9%A/4H9@) XM`/]T2'KY<DZZ`U183U*'8`#_2$AZ^6).N@-$6$],WPC`3G5.5?_<O^P#0&4`` XM`R1(YS\P+@`F2$AZ^4!.N@,@6$]P`KZ`9@H@:P`$<#^P$&8&<`%@``+T(&L`* XM!$ZZ`OHI0`><0>P``$/L!IQP/R+84<C__"M\@````/_D<``L`"M`__0K0/_PM XM<`B\@&P^>@!P"+J`;#(@!NN`0>P&G")(T\`B!>6!T\$D$4J":@9T`2M"__31] XMP-'!(!!*@&\&<`$K0/_P4H5@R%*&8+Q*K?_T9@Q(>OCL3KH"AEA/8(9*K?_P$ XM9@Y(>OCB3KH"=%A/8`#_=$'L!IQ#[`60<#\BV%'(__Q(;`:0<`!![`:<0^P$4 XMD&$`_-Y83T'L!)!A`/@B2H!G2B\\?____W`!(BW_Y$'L!)!A`/SX6$\K0/_@Z XML*W_Y&\4*T#_Y$'L!)!#[`60<#\BV%'(__Q(;`:0<`!![`:<0^P$D&$`^OA8* XM3V"J0>P%D$/L!IQP/R+84<C__$'L!IQA`/V^0>P#D$ZZ`>!![`.0(DA*&6;\L XM4XF3R++\``1F``&<<``0+`.0+`!R,)R!<``0+`.1*@":@7``$"P#DI"!=``4U XM+`.3E(%([0`!__1([0`$__!*AFL``61R![R!;@`!7$J`:P`!5K"!;@`!4$J%4 XM:P`!2KJ!;@`!1$J":P`!/K2!;@`!."(&DH!V`;*#9P92@68``2@B!9*"LH-G" XM!E*!9@`!&B(&ZX%![`:<(DC3P28%Y8/3PR@12H1J``$`ZX`B2-/`Y8+3PB@1S XM2H1K``#N(DC3P-/"2I%F/B`M__1F"B)(T\'3PW+^(H'K@")(T\`@+?_P(@#EZ XM@=/!(@;K@21(U<$D!>6"U<(BDB)(T\'3PG(`(H%@`/W>("W_]"(`DH8D+?_PC XM)@*6A2@`V(%([0`"_^Q([0`(_^AM``""<`>X@&YZ*`+8@VUT*`+8@[B`;FP@M XM+?_T*`#8@2]$`"#KA")(T\0H`MB#Y833Q$J19DY*KP`@9A(H!NN$(DC3Q"@%4 XMY833Q'C^(H32@.N!(DC3P=:"Y8/3PR(&ZX$D2-7!)@7E@]7#(I+K@")(T\#EP XM@M/"<``B@-'!T<,@@&``_3I(>O:43KH`'%A/8`#^/$S?#/Q.74YU3OD```V8$ XM3OD``!=\3OD```)X3OD``!":3OD``!',<&$```/L````!0````````HN```*W XM'```"B@```HB```*%@````````/R```#Z@```,\````!``````````$`````- XM`````0`````````!```````````````!``````````$``````````0``````% XM```!`````0`````````!``````````$``````````0``````````````````% XM````````````````````````````````````````````````````````````` XM`````````````````/____\`````_____P````#_____`````/__________L XM`````/____\`````_____P````#_____``````````#_____`````/____\`L XM````_____P````#_____`````0````'_______________\````!_____P``K XM``$````H``````````````````````````````%:````````````````````$ XM```````````````````````!?```````````````````````````````````] XM````````````````````````````````````````````````````````@```` XM``0`__\````.``X```````````````#__P````0`!````````!2V```!J/__5 XM````!``$````````%,P`````__\````.``X````````6K@````#__P````0`( XM!``````````````!Y/__````!``$````````%LH`````__\````$``0`````5 XM```6U```````("`@("`@("`@*"@H*"@@("`@("`@("`@("`@("`@("!($!`0* XM$!`0$!`0$!`0$!`0A(2$A(2$A(2$A!`0$!`0$!"!@8&!@8$!`0$!`0$!`0$!H XM`0$!`0$!`0$!`1`0$!`0$(*"@H*"@@("`@("`@("`@("`@("`@("`@("$!`0. XM$"`@("`@("`@("`H*"@H*"`@("`@("`@("`@("`@("`@($@0$!`0$!`0$!`0` XM$!`0$!"$A(2$A(2$A(2$$!`0$!`0$(&!@8&!@0$!`0$!`0$!`0$!`0$!`0$!_ XM`0$!$!`0$!`0@H*"@H*"`@("`@("`@("`@("`@("`@("`@(0$!`0(```````W XM`@````/L````!0````````(L```"&````?````'<```!R`````0````"```"= X5"````<P```%:```!.`````````/R> X`` Xend Xsize 9696 END_OF_FILE if test 13612 -ne `wc -c <'draughts.uu'`; then echo shar: \"'draughts.uu'\" unpacked with wrong size! fi # end of 'draughts.uu' fi echo shar: End of archive 1 \(of 1\). cp /dev/null ark1isdone MISSING="" for I in 1 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have the archive. rm -f ark[1-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0 -- Mail submissions (sources or binaries) to <amiga@uunet.uu.net>. Mail comments to the moderator at <amiga-request@uunet.uu.net>. Post requests for sources, and general discussion to comp.sys.amiga.misc.