Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!wuarchive!zaphod.mps.ohio-state.edu!uakari.primate.wisc.edu!news.larc.nasa.gov!amiga-request From: amiga-request@ab20.larc.nasa.gov (Amiga Sources/Binaries Moderator) Newsgroups: comp.sources.amiga Subject: v91i115: Draughts - Draughts game, Part01/01 Message-ID: Date: 18 May 91 02:12:29 GMT Reply-To: RWALLACE%vax1.tcd.ie@CUNYVM.CUNY.EDU Lines: 650 Approved: tadguy@uunet.UU.NET (Tad Guy) X-Mail-Submissions-To: amiga@uunet.uu.net X-Post-Discussions-To: comp.sys.amiga.misc 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 " where 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 '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 " Xwhere 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 X#include X#include X#include 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"\`)$`@*@`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(`<0@'(`` XM$@!@X"`'<@`2`"`!0>P!6DZZ!KHB`&#,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`(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__)*@&LDLP(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`FTR*@!^_V```,X(ZP`!`!M*!F=*@!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`(L`("=(`!!@P!,"90*T#_\"M(__0@"V<``)`@` XM2R`K``31P$CM`0#_[")M__"WR6,0)(LE1P`$+&W_]"R*<`!@=K?)9AHL4R2.5 XM("L`!"(`TH4JP!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.@"`'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.P!,"92(`MG0"`K``2P' XMAVTRL(=F#"!3)(B?K`$T(`M@:B`K``20AW((L(%E%B!+T<"(L`:1.N@)0+`!0AB`&5H`L. XM``)&__P@!DZZ_K`F0"`+9Q`@!B!+3KK\1 XM*/__(`=#[?^P8`(2V%.`9/I"-7BP0>W_L"E(`;0O"TAX`"A(>`#Z2&P!T'``< XM+P!P`"(`D`#Z2&P"@ XM($AL`@QP`"(`D`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@4G5SP!`"\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#]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<0>P``$/L!IQP/R+84@!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+84P#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"```` 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 . Mail comments to the moderator at . Post requests for sources, and general discussion to comp.sys.amiga.misc.