( {c} Copyright PPC-Paris et l'Auteur 1987) ( CTABLE {x y---} "x y CTABLE nom" : crÅe un ) ( tableau "nom" de dimension x*y bits ) ( nom : {x y --- d adr} l'exÅcution de "nom" ) ( fournie l'adresse et le numÅro b du bit de ) ( l'octet correspondant de la case xy ) : CTABLE CREATE 2DUP C, C, * 8 / 1+ ALLOT DOES> ROT OVER C@ * ROT + 4 /MOD ROT + 2+ 2+ ; ( B@ : {b adr---n} retourne l'Åtat n du bit b ) ( de l'octet adr ) : B@ C@ 2* SWAP 1+ 0 DO 2/ LOOP 1 AND ; ( B! : {n b adr---} place le bit b de l'octet ) ( adr È l'Åtat n ) : B! 1 ROT 1+ 0 DO 2* LOOP 2/ 2DUP NOT SWAP C@ AND ROT 2SWAP * ROT OR SWAP C! ; ( dimensions du tableau utilisÅ par le programme) DECIMAL 18 CONSTANT x 8 CONSTANT y HEX x y CTABLE TABLE x y CTABLE TABLE2 ( PLP: {n x y---} place la case xy de TABLE2 ) ( È l'Åtat n ) : PLP TABLE2 B! ; ( RGP: {x y---n} retourne l'Åtat n de la case ) ( xy de TABLE ) : RGP TABLE B@ ; ( ?PION: {n---b} dit si la case È n voisine ) ( sera occupÅe ou non ) : ?PION CASE 3 OF 1 ENDOF 4 OF 1 ENDOF 0 SWAP ENDCASE ; : CMTP 2OVER ROT + >R + R> RGP >R ROT R> + ROT ROT ; ( TABLE2TO1: {---} copie la table 2 ) : TABLE2TO1 0 0 TABLE2 0 0 TABLE DUP 2- DUP 2- C@ SWAP C@ * 8 / 1 + ROT DROP CMOVE DROP ; ( T+1: {---} calcule la gÅnÅration suivante de ) ( TABLE ) : T+1 x 1- 1 DO y 1- 1 DO 0 J I -1 -1 CMTP 0 -1 CMTP 1 -1 CMTP -1 0 CMTP 1 0 CMTP -1 1 CMTP 0 1 CMTP 1 1 CMTP ROT ?PION ROT ROT PLP LOOP LOOP TABLE2TO1 ; ( NEANT: {---} vide les tables ) : NEANT x 0 DO y 0 DO 0 J I PLP LOOP LOOP TABLE2TO1 ; ( VIEW: {---} visualise TABLE È condition ) ( qu'elle ait la dimension "standard" ) : VIEW 0 0 TABLE 2E328 12 CMOVE DROP ; ( ?FIN: {---b} si TABLE È la dimension ) ( "standard", dit s'il y a expansion ) : ?FIN 1 1 TABLE C@ 0= 0= 10 1 TABLE C@ 0= 0= ROT 2SWAP 2DROP OR x 1- 1 DO I 1 RGP OR I 6 RGP OR LOOP ;