( Jeux de CARTES pour coeur FORTH. Version 1.50 du 20 Decembre 2009. Ecrit par jpb.forth . ) DECIMAL START 2@ CONSTANT DEBUT_CARTES FEN_STRING" S_DESCRIPTIF JEUX de CARTES FORTH Version 1.50 du 20/12/2009 http://jpb.forth.free.fr/ jpb_forth@yahoogroups.com Que le FORTH soit avec TOI! " FORTH CARDS GAMES Version 1.50 in 12/20/2009 http://jpb.forth.free.fr/ jpb_forth@yahoogroups.com May the FORTH be with you! " FEN_STRING" S_SOLITAIRE SOLITAIRE" SOLITARIUS" FEN_STRING" S_MENU1 NOUVEAU JEU..ESC G TALON 1 PAR 1 FERMER.......ESC F MENU.........ESC N" NEW GAME..ESC G BOTTOM 1 BY 1 CLOSE.....ESC F MENU......ESC N" FEN_STRING" S_MENU3 NOUVEAU JEU..ESC G TALON 3 PAR 3 FERMER.......ESC F MENU.........ESC N" NEW GAME..ESC G BOTTOM 3 BY 3 CLOSE.....ESC F MENU......ESC N" FEN_STRING" S_REUSSITE REUSSITE" SUCCESS" FEN_STRING" S_MENU2 NOUVEAU JEU..ESC G MEME COULEUR FERMER.......ESC F MENU.........ESC N" NEW GAME..ESC G SAME COLOR CLOSE.....ESC F MENU......ESC N" FEN_STRING" S_MENU4 NOUVEAU JEU..ESC G COULEUR DIFFERENTE FERMER.......ESC F MENU.........ESC N" NEW GAME..ESC G DIFFERENT COLOR CLOSE.....ESC F MENU......ESC N" 0 VARIABLE ETAT_SOL 0 VARIABLE PRECED_SOL 0 VARIABLE MSQ_SOL 0 VARIABLE F_SOL 0 VARIABLE MSQ_MEM_SOL 0 VARIABLE DX_SOL 0 VARIABLE DY_SOL 0 VARIABLE CNT_SOL -1 VARIABLE NB_TALON 0 VARIABLE ETAT_REU 0 VARIABLE PRECED_REU 0 VARIABLE MSQ_REU 0 VARIABLE F_REU 0 VARIABLE MSQ_MEM_REU 0 VARIABLE DX_REU 0 VARIABLE DY_REU 0 VARIABLE CNT_REU -1 VARIABLE MM_COULEUR ( Localisation permet de decrire la ou les carte(s) en mouvement: 0 --> no de l'origine 1 a 2 pour talon, 3 a 6 pour tri et 7 a 15 pour tas 2 --> x abcisse de la souris 4 --> y ordonnee de la souris 6 --> xo abcisse a droite de la premiere carte 8 --> y0 ordonnee en haut de la premiere carte 10 --> x0+55 12 --> y0+88+(nb_c*16) 14 --> nombre de cartes nb_c (1 a 13) 15 --> code de la premiere carte ... 27 --> code de la derniere carte 28 --> index de restauration ) HERE 30 2/ ALLOT CONSTANT MOV_SOL HERE 30 2/ ALLOT CONSTANT MOV_REU HERE 8 2/ ALLOT CONSTANT LIM_MOV_SOL HERE 8 2/ ALLOT CONSTANT LIM_MOV_REU HERE 8 2 2 */ ALLOT CONSTANT LIM_SOL HERE 8 2 2 */ ALLOT CONSTANT LIM_REU HERE 8 8 56 104+ * + 2/ ALLOT CONSTANT DOS_CARTE 0 0 0 0 0 255 0 128 255 0 0 255 255 255 255 5 56 104 -1 DEGRADE_\ DUP DOS_CARTE 8 8 56 104+ * + CMOVE MEMOIRE_LIBERE DROP HERE 8 , 8 , 032 C, 032 C, 032 C, 032 C, 032 C, 032 C, 032 C, 048 C, 034 C, 032 C, 032 C, 032 C, 032 C, 032 C, 048 C, 048 C, 034 C, 034 C, 032 C, 032 C, 032 C, 048 C, 048 C, 048 C, 034 C, 034 C, 034 C, 032 C, 048 C, 048 C, 048 C, 048 C, 034 C, 034 C, 034 C, 034 C, 050 C, 048 C, 048 C, 048 C, 034 C, 034 C, 034 C, 050 C, 050 C, 050 C, 048 C, 048 C, 034 C, 034 C, 050 C, 050 C, 050 C, 050 C, 050 C, 048 C, 034 C, 050 C, 050 C, 050 C, 050 C, 050 C, 050 C, 050 C, CONSTANT FOND_TAPIS HERE 8 , 8 , 035 C, 033 C, 033 C, 033 C, 019 C, 019 C, 019 C, 019 C, 035 C, 035 C, 033 C, 033 C, 019 C, 019 C, 019 C, 035 C, 035 C, 035 C, 035 C, 033 C, 019 C, 019 C, 035 C, 035 C, 035 C, 035 C, 035 C, 035 C, 019 C, 035 C, 035 C, 035 C, 017 C, 017 C, 017 C, 033 C, 017 C, 017 C, 017 C, 017 C, 017 C, 017 C, 033 C, 033 C, 019 C, 017 C, 017 C, 017 C, 017 C, 033 C, 033 C, 033 C, 019 C, 019 C, 017 C, 017 C, 033 C, 033 C, 033 C, 033 C, 019 C, 019 C, 019 C, 017 C, CONSTANT FOND_TAPIS_CARTE BIN HERE 0001000000000000 , 0011100000000000 , 0111110000000000 , 1111111000000000 , 0111110000000000 , 0011100000000000 , 0001000000000000 , 0000000000000000 , 0110110000000000 , 1111111000000000 , 1111111000000000 , 0111110000000000 , 0011100000000000 , 0001000000000000 , 0001000000000000 , 0000000000000000 , 0001000000000000 , 0011100000000000 , 0111110000000000 , 1111111000000000 , 1111111000000000 , 1101011000000000 , 0011100000000000 , 0000000000000000 , 0011100000000000 , 0011100000000000 , 1101011000000000 , 1111111000000000 , 1101011000000000 , 0001000000000000 , 0011100000000000 , 0000000000000000 , 0000000000000000 , 0001000000000000 , 0011000000000000 , 0001000000000000 , 0001000000000000 , 0001000000000000 , 0011100000000000 , 0000000000000000 , 0000000000000000 , 0011100000000000 , 0100010000000000 , 0000100000000000 , 0001000000000000 , 0010000000000000 , 0111110000000000 , 0000000000000000 , 0000000000000000 , 0111110000000000 , 0000100000000000 , 0001100000000000 , 0000010000000000 , 0100010000000000 , 0011100000000000 , 0000000000000000 , 0000000000000000 , 0000100000000000 , 0001100000000000 , 0010100000000000 , 0100100000000000 , 0111110000000000 , 0000100000000000 , 0000000000000000 , 0000000000000000 , 0111110000000000 , 0100000000000000 , 0111100000000000 , 0000010000000000 , 0100010000000000 , 0011100000000000 , 0000000000000000 , 0000000000000000 , 0011100000000000 , 0100000000000000 , 0111100000000000 , 0100010000000000 , 0100010000000000 , 0011100000000000 , 0000000000000000 , 0000000000000000 , 0111110000000000 , 0100010000000000 , 0000100000000000 , 0000100000000000 , 0001000000000000 , 0001000000000000 , 0000000000000000 , 0000000000000000 , 0011100000000000 , 0100010000000000 , 0011100000000000 , 0100010000000000 , 0100010000000000 , 0011100000000000 , 0000000000000000 , 0000000000000000 , 0011100000000000 , 0100010000000000 , 0100010000000000 , 0011110000000000 , 0000010000000000 , 0011100000000000 , 0000000000000000 , 0000000000000000 , 0100110000000000 , 1101001000000000 , 0101001000000000 , 0101001000000000 , 0101001000000000 , 1110110000000000 , 0000000000000000 , 0000000000000000 , 0110110000000000 , 0100010000000000 , 0010100000000000 , 0010100000000000 , 0001000000000000 , 0001000000000000 , 0000000000000000 , 0000000000000000 , 0111000000000000 , 0010100000000000 , 0010010000000000 , 0010010000000000 , 0010010000000000 , 0111100000000000 , 0000000000000000 , 0000000000000000 , 0111100000000000 , 0010010000000000 , 0010010000000000 , 0011100000000000 , 0010010000000000 , 0110010000000000 , 0000000000000000 , DECIMAL 8 17 * ALLOT BIN ( Reserve pour symetrie ) CONSTANT SYMBOLES_7x7 HERE 0000000100000000 , ( 0 ) 0000001110000000 , 0000011111000000 , 0000111111100000 , 0001111111110000 , 0011111111111000 , 0111111111111100 , 1111111111111110 , 0111111111111100 , 0011111111111000 , 0001111111110000 , 0000111111100000 , 0000011111000000 , 0000001110000000 , 0000000100000000 , 0000000000000000 , 0011100000111000 , ( 1 ) 0111110001111100 , 1111111011111110 , 1111111011111110 , 1111111111111110 , 1111111111111110 , 0111111111111100 , 0011111111111000 , 0001111111110000 , 0000111111100000 , 0000011111000000 , 0000001110000000 , 0000001110000000 , 0000000100000000 , 0000000100000000 , 0000000000000000 , 0000000100000000 , ( 2 ) 0000000100000000 , 0000001110000000 , 0000011111000000 , 0000111111100000 , 0011111111111000 , 0111111111111100 , 1111111111111110 , 1111111111111110 , 1111111111111110 , 0111110101111100 , 0011100100111000 , 0000001110000000 , 0000011111000000 , 0000110001100000 , 0000000000000000 , 0000001110000000 , ( 3 ) 0000011111000000 , 0000111111100000 , 0000111111100000 , 0000011111000000 , 0011001110011000 , 0111100100111100 , 1111110101111110 , 1111111111111110 , 1111110101111110 , 0111100100111100 , 0011000100011000 , 0000001110000000 , 0000011111000000 , 0000110001100000 , 0000000000000000 , DECIMAL 2 4* 4* 4* 2/ ALLOT BIN ( Reserve pour symetrie ) 0001000000000000 , ( 256 ) 0011100000000000 , 0111110000000000 , 1111110000000000 , 0111100000000000 , 0011000000000000 , 0000000110110000 , 0000001111111000 , 0000001111111000 , 0000000111100000 , 0000000011100000 , 0000000000000000 , 0000000000000000 , 0000000000000000 , 0000000000000000 , 0000000000000000 , 0000000000000000 , 0000000000000000 , 0000000000000000 , 0000001000000000 , 0000011100000000 , 0000111110000000 , 0001111001000000 , 0001110000000000 , 0001100000000000 , 0000011000011100 , 0000000000011100 , 0000000001101011 , 0000000001111111 , 0000000001101011 , 0000000000001000 , 0000000000011100 , 0000000000000000 , ( 320 ) 0000100000000000 , 0001110000000000 , 0011111000000000 , 0111111100000000 , 0011111000000000 , 0001110000000000 , 0000100000000000 , 0000000001101100 , 0000000011111110 , 0000000011111110 , 0000000001111100 , 0000000000111000 , 0000000000010000 , 0000000000010000 , 0000000000000000 , 0000000000000000 , 0000000000010000 , 0000000000111000 , 0000000001111100 , 0000000011111110 , 0000000011111110 , 0000000011010110 , 0000000000111000 , 0001110000000000 , 0001110000000000 , 0110101100000000 , 0111111100000000 , 0110101100000000 , 0000100000000000 , 0001110000000000 , 0000000000000000 , CONSTANT SYMBOLES_16x16 HERE 00000000110000000000001111000000 2, 00000011001111000011110000111000 2, 00001100000000111100001000000100 2, 00110000100100000001010001001000 2, 00100100100101001001010010010000 2, 00010010010101010010010010100000 2, 00001011111111111111111111000000 2, 00000111110101000000000000000000 2, 00000100100101000000111000100000 2, 00001010101000100001000101000000 2, 00001001001000100000010000100000 2, 00000101001000100000010010100000 2, 00000101000101000000000001000000 2, 00000101010101000000000000100000 2, 00001010010100100000000000010000 2, 00001010010100100000000100010000 2, 00001010100101000000000011100000 2, 00000100101001000000000000100000 2, 00000100101001000000000000100000 2, 00001010101010110000011111000000 2, 00001001010100101000000001000000 2, 00001001010100100110000010100000 2, 00010101001001010000011101100000 2, 00010100101001010000000101010000 2, 00010101001001010000000101010000 2, 00011100101010001000000011110000 2, 11111111101010101100011111111111 2, 00111111111111111111111111111100 2, 00001111111111111111111111110000 2, 00000000111111111111111111000000 2, 00000000000011111111111100000000 2, 00000000000000000111100000000000 2, 00000011100011000011000111000000 2, 00000010010100100100101001000000 2, 00000001001000011000010010000000 2, 00000000101101100110110100000000 2, 00000000101000100100010100000000 2, 00000000111111111111111100000000 2, 00000000100001010101010100000000 2, 00000000011000100101010100000000 2, 00000000100100100101010100000000 2, 00000000010000100100101010000000 2, 00000001010000010100101010000000 2, 00000001000000010010001010000000 2, 00000010000000101010010100000000 2, 00000100000000101010100100000000 2, 00000011000000101010100100000000 2, 00000000100000010010101010000000 2, 00000000111000010100101010000000 2, 00000000100000010100100010000000 2, 00000000100001100101001001000000 2, 00000000100110100101001001000000 2, 00000000011010100101000101000000 2, 00000000000010101001010100100000 2, 00000000000011001001010010100000 2, 00000000000011001010010010100000 2, 00000000000011001010010000010000 2, 00000000000010010010010011111000 2, 00000000000110010010111111111100 2, 00000000001100010111111111111110 2, 00000000111111111111111111111000 2, 00000001111111111111111111100000 2, 00000111111111111111111100000000 2, 00011111111111111111100000000000 2, 00000010001001000100100100100000 2, 00000011011110101111011111100000 2, 00000010111100011110001110100000 2, 00000001011000001100000101000000 2, 00000001000000000000000001000000 2, 00000001000000000000000001000000 2, 00000001111111111111111111000000 2, 00000001010101000000000000000000 2, 00000001010101000110000110000000 2, 00000001010101001001001001000000 2, 00000010101001000010010010000000 2, 00000010101010000010010010000000 2, 00000010101010000000001001000000 2, 00000101010110000000001001000000 2, 00000101010101000000000101000000 2, 00000101010010100001000100100000 2, 00001010101010010110111010100000 2, 00001010101000101010101001000000 2, 00001010101010101001111101000000 2, 00001010101010100100000010100000 2, 00010101010101010101010010100000 2, 00010101010101001001010101010000 2, 00011111010101001001010101101000 2, 00111111110101001010101001011000 2, 11111111111110100010101010111110 2, 01111111111111101010101010111111 2, 00111111111111111001010111111110 2, 00001111111111111010010101111100 2, 00000011111111111111110111111000 2, 00000000011111111111111111100000 2, 00000000000001111111111100000000 2, 00000000000000000111100000000000 2, DECIMAL 2 32 * 3 * ALLOT ( Reserve pour symetrie ) CONSTANT SYMBOLES_32x32 : MIROIR_7x8 17 0 DO SYMBOLES_7x7 I 4* 4* + 8 0 DO DUP I 2* + C@ 255 AND 2/ 0 8 0 DO 2* OVER 1 AND + >R 2/ R> LOOP 3 PICK [ 2 8 * 18 * LITERAL ] I 1+ 2* - + C! DROP LOOP DROP LOOP ; : SYMETRIE_16x16 4 0 DO SYMBOLES_16x16 I 32 * + 16 0 DO DUP I 2* + @ 65535 AND 0 17 0 DO 2* OVER 1 AND + >R 2/ R> LOOP 3 PICK [ 2 4* 4* 5 * LITERAL ] I 1+ 2* - + ! DROP LOOP DROP LOOP ; HERE 32 ALLOT CONSTANT SYMBOLES_TMP : PREPARE_32x32 3 0 DO SYMBOLES_32x32 I 128 * + 32 0 DO DUP I 4* + 2@ 0 32 0 DO 2* OVER 1 AND + >R 2/ R> LOOP 3 PICK [ 4 32 * 4* LITERAL ] I 1+ 4* - + 2! DROP LOOP DROP LOOP SYMBOLES_TMP 6 0 DO SYMBOLES_32x32 I 128 * + 32 0 DO DUP I 4* + 2+ @ 3 PICK I 2* + ! LOOP 32 1 DO DUP I 4* + @ OVER I 2* + ! LOOP >R DUP R> 64+ 64 CMOVE LOOP DROP ; MIROIR_7x8 SYMETRIE_16x16 PREPARE_32x32 FORGET MIRROIR_7x8 HERE 52 2/ ALLOT CONSTANT TALON_SOL HERE 4 2/ ALLOT CONSTANT TRI_SOL HERE 13 7+ 2/ 7 * ALLOT CONSTANT TAS_SOL : INIT_SOL ( Initialisation des tris, tas et talon ) -1 TRI_SOL 2! TAS_SOL [ 13 7+ 7 * LITERAL ] 255 FILL TALON_SOL 64 0 DO 13 0 DO I J + 64+ OVER C! 1+ LOOP 16 +LOOP ( Melange du talon ) 52- 39 0 DO DUP NPA 32767 AND 52 MOD + OVER NPA 32767 AND 52 MOD + OVER C@ OVER C@ >R SWAP C! R> SWAP C! NPA DROP LOOP ( Distribution du talon dans les tas ) 52+ 8 1 DO TAS_SOL I 1- [ 13 7+ LITERAL ] * + I 0 DO >R 1- R> OVER C@ J 1- I = 64 AND COM AND OVER I + C! LOOP DROP LOOP TALON_SOL 52+ OVER - 255 FILL LIM_SOL DUP 8+ 8 CMOVE 1 ETAT_SOL ! -1 MSQ_MEM_SOL ! 0 MOV_SOL 28+ ! ; HERE 52 2/ ALLOT CONSTANT TALON_REU HERE 4 2/ ALLOT CONSTANT TRI_REU HERE 13 9+ 2/ 9 * ALLOT CONSTANT TAS_REU : INIT_REU ( Initialisation des tris, tas et talon ) -1 TRI_REU 2! TAS_REU [ 13 9+ 9 * LITERAL ] 255 FILL TALON_REU 64 0 DO 13 0 DO I J + 64+ OVER C! 1+ LOOP 16 +LOOP ( Melange du talon ) 52- 39 0 DO DUP NPA 32767 AND 52 MOD + OVER NPA 32767 AND 52 MOD + OVER C@ OVER C@ >R SWAP C! R> SWAP C! NPA DROP LOOP ( Distribution du talon dans les tas ) 52+ 10 1 DO TAS_REU I 1- [ 13 9+ LITERAL ] * + I 0 DO >R 1- R> OVER C@ 64 COM AND OVER I + C! LOOP DROP LOOP TALON_REU 52+ OVER - 255 FILL LIM_REU DUP 8+ 8 CMOVE 1 ETAT_REU ! -1 MSQ_MEM_REU ! 0 MOV_REU 28+ ! ; : TRACE_CONTOUR_CARTE ( limites,teinte,x0,y0 --> limites ) 4 PICK 4 ROLL DUP >R 4 PICK 1+ 4 PICK 1- OVER [ 7 8 * 3- LITERAL ] + OVER TRACE_REC R@ 4 PICK 1- 4 PICK 1+ OVER OVER [ 13 8 * 3- LITERAL ] + TRACE_REC R@ 4 PICK [ 7 8 * LITERAL ] + 4 PICK 1+ OVER OVER [ 13 8 * 3- LITERAL ] + TRACE_REC R> 4 PICK 1+ 4 PICK [ 13 8 * LITERAL ] + OVER [ 7 8 * 3- LITERAL ] + OVER TRACE_REC DROP DROP DROP ; : TRACE_CARTE ( limites,code,x0,y0 --> limites ) 4 PICK 4 PICK DUP 128 AND IF 2 AND SWAP 3 PICK DUP >R [ 13 8 * LITERAL ] + R> DO 4 PICK DUP >R [ 7 8 * LITERAL ] + R> DO FOND_TAPIS_CARTE I J ECRIT_REC 8 +LOOP 8 +LOOP SWAP DROP ELSE 64 AND IF DOS_CARTE 4 PICK 4 PICK ECRIT_REC 5 ELSE 255 4 PICK 4 PICK OVER [ 7 8 * 1- LITERAL ] + OVER [ 13 8 * 1- LITERAL ] + TRACE_REC 8 DUP 6 PICK DUP >R 32 AND 0= 195 AND R@ 48 AND SYMBOLES_7x7 + >R 6 PICK 1+ 6 PICK 8+ R@ TRACE_MOTIF >R 47+ R> R@ TRACE_MOTIF 80+ R@ 272+ TRACE_MOTIF >R 47- R> R> 272+ TRACE_MOTIF 88- R> 15 AND 4+ 4* 4* SYMBOLES_7x7 + DUP >R TRACE_MOTIF >R 47+ R> R@ TRACE_MOTIF 96+ R@ 272+ TRACE_MOTIF >R 47- R> R> 272+ TRACE_MOTIF DROP DROP DROP DROP DROP 4 PICK 15 AND 9 > IF 16 DUP 2* 145 6 PICK 4+ 6 PICK 20+ 9 PICK 15 AND 10- 128 * SYMBOLES_32x32 + DUP >R TRACE_MOTIF >R 16+ R> R@ 64+ TRACE_MOTIF 32+ R@ 384+ TRACE_MOTIF >R 16+ R> R> 448+ TRACE_MOTIF DROP DROP DROP DROP DROP 16 DUP 6 PICK DUP >R 32 AND 0= 195 AND R> 48 AND 2* SYMBOLES_16x16 + >R 6 PICK 32+ 6 PICK 8+ R@ TRACE_MOTIF >R 23- R> 72+ R@ 128+ TRACE_MOTIF ELSE 16 DUP 6 PICK DUP >R 32 AND 0= 195 AND R> 48 AND 2* SYMBOLES_16x16 + >R 6 PICK 6 PICK 9 PICK 15 AND DUP >R 0= R@ 2 = OR R@ 4 = OR R> 8 = OR IF >R 21+ R> 44+ R@ TRACE_MOTIF >R 21- R> 44- THEN 9 PICK 15 AND DUP >R 1 = R> 2 = OR IF >R 21+ R> 16+ R@ TRACE_MOTIF >R 1- R> 56+ R@ 128+ TRACE_MOTIF >R 20- R> 72- THEN 9 PICK 15 AND DUP >R 3 = R> 4 = OR IF >R 9+ R> 16+ R@ TRACE_MOTIF >R 23+ R> R@ TRACE_MOTIF 56+ R@ 128+ TRACE_MOTIF >R 23- R> R@ 128+ TRACE_MOTIF >R 9- R> 72- THEN 9 PICK 15 AND DUP >R 4 > R> 10 < AND IF >R 9+ R> 8+ R@ TRACE_MOTIF >R 23+ R> R@ TRACE_MOTIF 72+ R@ 128+ TRACE_MOTIF >R 23- R> R@ 128+ TRACE_MOTIF >R 9- R> 80- THEN 9 PICK 15 AND DUP >R 4 > R> 8 < AND IF >R 9+ R> 44+ R@ TRACE_MOTIF >R 23+ R> R@ 128+ TRACE_MOTIF >R 32- R> 44- THEN 9 PICK 15 AND DUP >R 6 = R> 7 = OR IF >R 21+ R> 26+ R@ TRACE_MOTIF >R 21- R> 26- THEN 9 PICK 15 AND 7 = IF >R 20+ R> 62+ R@ 128+ TRACE_MOTIF >R 20- R> 62- THEN 9 PICK 15 AND DUP >R 8 = R> 9 = OR IF >R 9+ R> 32+ R@ TRACE_MOTIF >R 23+ R> R@ TRACE_MOTIF 24+ R@ 128+ TRACE_MOTIF >R 23- R> R@ 128+ TRACE_MOTIF >R 9- R> 56- THEN 9 PICK 15 AND 9 = IF >R 21+ R> 20+ R@ TRACE_MOTIF >R 1- R> 48+ R@ 128+ TRACE_MOTIF >R 20- R> 68- THEN THEN R> DROP DROP DROP DROP DROP DROP 170 THEN DUP >R 4 PICK 4 PICK OVER OVER TRACE_REC R@ 4 PICK [ 7 8 * 1- LITERAL ] + 4 PICK OVER OVER TRACE_REC R@ 4 PICK 4 PICK [ 13 8 * 1- LITERAL ] + OVER OVER TRACE_REC R@ 4 PICK [ 7 8 * 1- LITERAL ] + 4 PICK [ 13 8 * 1- LITERAL ] + OVER OVER TRACE_REC R> 4 PICK 4 PICK TRACE_CONTOUR_CARTE THEN DROP DROP DROP DROP ; ( Instruction reservee a la mise au point des dessins des cartes : TEST_CARTES PRIORITE DUP >R @ 32768 R@ ! LIMITES 5 0 DO 13 0 DO J 4* 4* DUP 63 > IF I 1 AND 128 * + THEN I + I 64 * 4+ J 112 * 4+ TRACE_CARTE LOOP LOOP DROP R> ! ; ) : AF_TALON_G ( limites,x0,y0,adr_talon --> limites ) 0 BEGIN OVER OVER + C@ DUP 0< NOT IF 64 AND IF 1+ DUP 3 > IF >R 1+ R> 1- THEN 0 ELSE -1 THEN THEN UNTIL ( limites,x0,y0,adr_talon,nb_cartes ) 5 PICK 5 PICK DUP >R 96+ R> DO FOND_TAPIS I 6 PICK ECRIT_REC FOND_TAPIS I 6 PICK 104+ ECRIT_REC 8 +LOOP 4 PICK 8+ DUP >R 96+ R> DO 5 PICK DUP >R 8+ 3 4 PICK - 0 MAX 2 MIN 4* 4* + R> DO FOND_TAPIS I J ECRIT_REC 8 +LOOP FOND_TAPIS 6 PICK 88+ I ECRIT_REC 8 +LOOP BEGIN OVER 0= 64 OR 6 PICK 4+ 3 5 PICK - 2 MIN 4* 4* + 6 PICK 4+ TRACE_CARTE OVER 1 > WHILE >R 1- R> REPEAT DROP DROP DROP DROP DROP ; : AF_TALON_D ( limites,x0,y0,adr_talon --> limites ) 0 BEGIN OVER OVER + C@ DUP 0< NOT IF 64 AND IF >R 1+ R> 0 ELSE 1+ DUP 2 > THEN THEN UNTIL ( limites,x0,y0,adr_talon,nb_cartes ) 5 PICK 5 PICK DUP >R 96+ R> DO FOND_TAPIS I 6 PICK ECRIT_REC FOND_TAPIS I 6 PICK 104+ ECRIT_REC 8 +LOOP 4 PICK 8+ DUP >R 96+ R> DO FOND_TAPIS 6 PICK I ECRIT_REC 5 PICK 96+ DUP 8- 3 5 PICK - 0 MAX 2 MIN 4* 4* - DO FOND_TAPIS I J ECRIT_REC 8 +LOOP 8 +LOOP BEGIN 3 PICK 3 PICK 1- 0 MAX DUP >R + C@ 6 PICK 4+ R> 4* 4* + 6 PICK 4+ TRACE_CARTE OVER 1 > WHILE >R 1- R> REPEAT DROP DROP DROP DROP DROP ; : AF_TRI ( limites,x0,y0,adr_tri --> limites ) 4 PICK 4 PICK DUP >R 64+ R> DO FOND_TAPIS I 5 PICK ECRIT_REC FOND_TAPIS I 5 PICK 104+ ECRIT_REC 8 +LOOP 3 PICK 8+ DUP >R 96+ R> DO FOND_TAPIS 5 PICK I ECRIT_REC FOND_TAPIS 5 PICK 56+ I ECRIT_REC 8 +LOOP DROP C@ ROT 4+ ROT 4+ TRACE_CARTE ; : AF_TAS ( limites,x0,y0,adr_tas,dy --> limites ) 0 BEGIN 3 PICK OVER + C@ DUP 0< NOT IF DROP 1+ 0 THEN UNTIL ( limites,x0,y0,adr_tri,dy,nb_cartes ) 6 PICK 6 PICK DUP >R 64+ R> DO FOND_TAPIS I 7 PICK ECRIT_REC 8 +LOOP 5 PICK DUP >R 4 PICK + R> 8+ DO FOND_TAPIS 7 PICK I ECRIT_REC FOND_TAPIS 7 PICK 56+ I ECRIT_REC 8 +LOOP 5 PICK DUP >R 4 PICK + R> 88+ 4 PICK 1 MAX 4* 4* + OVER OVER > IF DO 6 PICK DUP >R 56+ R> 8+ DO FOND_TAPIS I J ECRIT_REC 8 +LOOP 8 +LOOP ELSE DROP DROP THEN BEGIN 4 PICK C@ 7 PICK 4+ 7 PICK 4+ TRACE_CARTE OVER 1 > WHILE >R >R >R >R 16+ R> 1+ R> R> 1- R> REPEAT DROP DROP DROP DROP DROP DROP ; FEN: A_PROPOS_SOLREU >R S_DESCRIPTIF R> FEN_DIALOGUE_MESSAGE ; FEN: ICONE_SOL DUP FEN_TAILLE_? >R 24- 2/ R> 24- 2/ 24 0 DO 24 0 DO FOND_TAPIS 3 PICK I + 3 PICK J + 6 PICK FEN_ECRIT_REC 8 +LOOP 8 +LOOP >R >R 16 DUP 195 R> 4+ R> 4+ [ 2 4* 4* 8 * LITERAL ] SYMBOLES_16x16 + 7 PICK FEN_TRACE_MOTIF >R >R DUP XOR R> R> [ 2 4* 4* 9 * LITERAL ] SYMBOLES_16x16 + 7 PICK FEN_TRACE_MOTIF DROP DROP DROP DROP DROP DROP ; FEN: ICONE_REU DUP FEN_TAILLE_? >R 24- 2/ R> 24- 2/ 24 0 DO 24 0 DO FOND_TAPIS 3 PICK I + 3 PICK J + 6 PICK FEN_ECRIT_REC 8 +LOOP 8 +LOOP >R >R 16 DUP 195 R> 4+ R> 4+ [ 2 4* 4* 10 * LITERAL ] SYMBOLES_16x16 + 7 PICK FEN_TRACE_MOTIF >R >R DUP XOR R> R> [ 2 4* 4* 11 * LITERAL ] SYMBOLES_16x16 + 7 PICK FEN_TRACE_MOTIF DROP DROP DROP DROP DROP DROP ; FEN: FERME_SOL >R ICONE_SOL R> FEN_ICONE ; FEN: FERME_REU >R ICONE_REU R> FEN_ICONE ; FEN: SP_AFFICHE_SOL FEN_POSITION_? MSQ_SOL @ DUP 1 AND IF LIM_SOL 8+ 4 PICK 4 PICK TALON_SOL AF_TALON_G DROP THEN DUP 2 AND IF LIM_SOL 8+ 4 PICK 96+ 4 PICK TALON_SOL AF_TALON_D DROP THEN 4 4 0 DO OVER OVER AND IF LIM_SOL 8+ 5 PICK 192+ I 6 LSH + 5 PICK TRI_SOL I + AF_TRI DROP THEN 2* LOOP 7 0 DO OVER OVER AND IF LIM_SOL 8+ 5 PICK I 6 LSH + 5 PICK 112+ TAS_SOL [ 13 7+ LITERAL ] I * + [ 64 7 * 112- LITERAL ] AF_TAS DROP THEN 2* LOOP DROP DROP DROP DROP MOV_SOL LIM_SOL OVER 28+ @ CASE 2 OF ( Affichage des cartes deplaces ) OVER 14+ C@ 0 DO OVER DUP 15+ I + C@ SWAP DUP >R 6+ @ R> 8+ @ I 4* 4* + TRACE_CARTE LOOP ENDOF -2 OF ( Fin de restauration en haut des cartes deplaces ) OVER >R 170 R@ 6+ @ 1+ R@ 8+ @ 1- R@ 10+ @ 1- OVER TRACE_REC DROP R> ENDOF -3 OF ( Fin de restauration a gauche des cartes deplaces ) OVER >R 170 R@ 6+ @ 1- R@ 8+ @ 1+ OVER R@ 12+ @ 1- TRACE_REC DROP R> ENDOF -4 OF ( Fin de restauration en bas des cartes deplaces ) OVER >R 170 R@ 6+ @ 1+ R@ 12+ @ 1+ R@ 10+ @ 1- OVER TRACE_REC DROP R> ENDOF -5 OF ( Fin de restauration a droite des cartes deplaces ) OVER >R 170 R@ 10+ @ 1+ R@ 8+ @ 1+ OVER R@ 12+ @ 1- TRACE_REC DROP R> ENDOF ENDCASE DROP DROP ; : AF_32x112 ( limites,x0,y0 --> limites ) >R SWAP R@ 112+ R> DO OVER DUP >R 32+ R> DO FOND_TAPIS I J ECRIT_REC 8 +LOOP 8 +LOOP SWAP DROP ; FEN: SP_AFFICHE_REU FEN_POSITION_? MSQ_REU @ DUP 1 AND IF LIM_REU 8+ 4 PICK 4 PICK AF_32x112 4 PICK 32+ 4 PICK TALON_REU AF_TALON_G DROP THEN DUP 2 AND IF LIM_REU 8+ 4 PICK 128+ 4 PICK TALON_REU AF_TALON_D 4 PICK 224+ 4 PICK AF_32x112 DROP THEN 4 4 0 DO OVER OVER AND IF LIM_REU 8+ OVER 4 = IF 5 PICK 256+ 5 PICK AF_32x112 THEN 5 PICK 288+ I 6 LSH + 5 PICK TRI_REU I + AF_TRI OVER 32 = IF 5 PICK 544+ 5 PICK AF_32x112 THEN DROP THEN 2* LOOP 9 0 DO OVER OVER AND IF LIM_REU 8+ 5 PICK I 6 LSH + 5 PICK 112+ TAS_REU [ 13 9+ LITERAL ] I * + [ 64 7 * 112- LITERAL ] AF_TAS DROP THEN 2* LOOP DROP DROP DROP DROP MOV_REU LIM_REU OVER 28+ @ CASE 2 OF ( Affichage des cartes deplaces ) OVER 14+ C@ 0 DO OVER DUP 15+ I + C@ SWAP DUP >R 6+ @ R> 8+ @ I 4* 4* + TRACE_CARTE LOOP ENDOF -2 OF ( Fin de restauration en haut des cartes deplaces ) OVER >R 170 R@ 6+ @ 1+ R@ 8+ @ 1- R@ 10+ @ 1- OVER TRACE_REC DROP R> ENDOF -3 OF ( Fin de restauration a gauche des cartes deplaces ) OVER >R 170 R@ 6+ @ 1- R@ 8+ @ 1+ OVER R@ 12+ @ 1- TRACE_REC DROP R> ENDOF -4 OF ( Fin de restauration en bas des cartes deplaces ) OVER >R 170 R@ 6+ @ 1+ R@ 12+ @ 1+ R@ 10+ @ 1- OVER TRACE_REC DROP R> ENDOF -5 OF ( Fin de restauration a droite des cartes deplaces ) OVER >R 170 R@ 10+ @ 1+ R@ 8+ @ 1+ OVER R@ 12+ @ 1- TRACE_REC DROP R> ENDOF ENDCASE DROP DROP ; FEN: CHRONO_SOL >R MOV_SOL 28+ @ 0> IF 1 MOV_SOL 6+ LIM_MOV_SOL OVER 22+ @ DUP 2 = IF ( Restauration en haut des cartes deplaces ) DROP OVER 2+ @ OVER 2+ @ > IF DUP @ 1- LIM_SOL 8+ DUP >R ! DUP 2+ @ 1- R@ 2+ ! DUP 4+ @ 1+ R@ 4+ ! OVER 2+ @ 1- R> 6+ ! -2 ELSE 3 THEN THEN DUP 3 = IF ( Restauration a gauche des cartes deplaces ) DROP OVER @ OVER @ > IF DUP @ 1- LIM_SOL 8+ DUP >R ! DUP 2+ @ 1- R@ 2+ ! OVER @ 1- R@ 4+ ! DUP 6+ @ 1+ R> 6+ ! -3 ELSE 4 THEN THEN DUP 4 = IF ( Restauration en bas des cartes deplaces ) DROP OVER 6+ @ OVER 6+ @ < IF DUP @ 1- LIM_SOL 8+ DUP >R ! OVER 6+ @ 1+ R@ 2+ ! DUP 4+ @ 1+ R@ 4+ ! DUP 6+ @ 1+ R> 6+ ! -4 ELSE 5 THEN THEN DUP 5 = IF ( Restauration a droite des cartes deplaces ) DROP >R >R ETAT_SOL @ 4 = 8 AND + R> R> OVER 4+ @ OVER 4+ @ < IF OVER 4+ @ 1+ LIM_SOL 8+ DUP >R ! DUP 2+ @ 1- R@ 2+ ! DUP 4+ @ 1+ R@ 4+ ! DUP 6+ @ 1+ R> 6+ ! -5 ELSE 0 THEN THEN DUP 6 = IF ( Restauration de tout ) DROP DUP @ 1- LIM_SOL 8+ DUP >R ! DUP 2+ @ 1- R@ 2+ ! DUP 4+ @ 1+ R@ 4+ ! DUP 6+ @ 1+ R> 6+ ! -6 THEN ( Affichage des cartes deplaces ) DUP 1 = - DUP 0< MSQ_MEM_SOL ! ROT 22+ ! DROP ELSE MSQ_MEM_SOL @ ?DUP IF 8191 AND 1 13 0 DO OVER OVER AND IF LEAVE ELSE 2* THEN LOOP DUP MSQ_SOL ! XOR MSQ_MEM_SOL ! 1 ELSE 0 MSQ_SOL ! MOV_SOL 28+ @ ?DUP IF NEGATE DUP 1+ DUP 6 < AND MOV_SOL DUP >R 28+ ! R> 6+ SWAP 2- ?DUP IF 1- ?DUP IF 1- ?DUP IF 1- IF ( Fin de la restauration de tout ) ELSE ( Fin de restauration a droite des cartes deplaces ) DUP 4+ @ LIM_MOV_SOL 4+ ! THEN ELSE ( Fin de restauration en bas des cartes deplaces ) DUP 6+ @ LIM_MOV_SOL 6+ ! THEN ELSE ( Fin de restauration a gauche des cartes deplaces ) DUP @ LIM_MOV_SOL ! THEN ELSE ( Fin de restauration en haut des cartes deplaces ) DUP 2+ @ LIM_MOV_SOL 2+ ! THEN DROP 1 ELSE ETAT_SOL @ CASE ( animation si detection de fin de jeu ) 1 OF TALON_SOL C@ -1 = MOV_SOL @ 0= AND TAS_SOL DUP >R [ 13 7+ 7 * LITERAL ] + R> DO I C@ DUP >R -1 = R> 64 AND 0= OR AND [ 13 7+ LITERAL ] +LOOP IF 2 ETAT_SOL ! 1 ELSE 99 THEN ENDOF 2 OF TALON_SOL C@ DUP 0> IF 0 4 0 DO OVER 15 AND IF OVER TRI_SOL I + C@ 1+ = IF 1 TRI_SOL I + +C! 4 I LSH + LEAVE THEN ELSE TRI_SOL I + C@ 0< IF OVER TRI_SOL I + C! 4 I LSH + LEAVE THEN THEN LOOP >R DROP R> DUP IF 2+ -1 TALON_SOL C! THEN ELSE DUP XOR THEN DUP 0= IF 7 0 DO TAS_SOL [ 13 7+ LITERAL ] I * + [ 13 7+ LITERAL ] 0 DO DUP I + C@ 0< IF I 0= IF LEAVE ELSE DUP I + 1- C@ 0 4 0 DO OVER 15 AND IF OVER TRI_SOL I + C@ 1+ = IF 1 TRI_SOL I + +C! 4 I LSH + LEAVE THEN ELSE TRI_SOL I + C@ 0< IF OVER TRI_SOL I + C! 4 I LSH + LEAVE THEN THEN LOOP >R DROP R> ?DUP IF ROT DROP SWAP -1 OVER I + 1- C! LEAVE THEN THEN THEN LOOP DROP DUP IF 64 I LSH + LEAVE THEN LOOP THEN ?DUP IF MSQ_MEM_SOL ! LIM_SOL DUP 8+ 8 CMOVE 99 ELSE 3 ETAT_SOL ! 1 THEN ENDOF 3 OF TRI_SOL DUP 2@ 1+ IF DUP 2+ C@ 1+ 15 AND OVER 3+ C@ 1+ 15 AND < IF 3 ELSE DUP 1+ C@ 1+ 15 AND OVER 2+ C@ 1+ 15 AND < IF 2 ELSE DUP C@ 1+ 15 AND OVER 1+ C@ 1+ 15 AND < IF 1 ELSE 0 THEN THEN THEN DUP 3+ MOV_SOL DUP >R ! DUP TRI_SOL + C@ 256+ R@ 14+ ! LIM_SOL @ OVER 3+ 64 * + 4+ DUP R@ 2+ ! DUP R@ 6+ ! 55+ R@ 10+ ! LIM_SOL 2+ @ 4+ DUP R@ 4+ ! DUP R@ 8+ ! 103+ R@ 12+ ! 0 R@ 28+ ! R> 6+ LIM_MOV_SOL 8 CMOVE + NPA 16 MOD 1+ DUP 0= + DX_SOL ! LIM_SOL DUP >R 6+ @ 1+ R> 2+ @ - 108- DY_SOL ! 0 CNT_SOL ! DUP >R C@ 1- DUP 15 AND 15 = OR R> C! 4 ETAT_SOL ! ELSE DROP INIT_SOL THEN 1 ENDOF 4 OF DX_SOL @ DUP MOV_SOL DUP >R 2+ +! DUP R@ 6+ +! R@ 10+ +! CNT_SOL DUP >R @ 1+ 31 AND DUP R> ! DY_SOL @ OVER 16 = IF 2 3 */ DUP DY_SOL ! THEN >R 10 ASH COS ABS R> -32768 */ LIM_SOL 6+ @ + 104- DUP R@ 4+ ! DUP R@ 8+ ! 103+ R@ 12+ ! LIM_MOV_SOL DUP @ R@ 6+ @ MIN OVER ! DUP 2+ @ R@ 8+ @ MIN OVER 2+ ! DUP 4+ @ R@ 10+ @ MAX OVER 4+ ! DUP 6+ @ R@ 12+ @ MAX SWAP 6+ ! 1 R@ 28+ ! R@ 6+ @ LIM_SOL 4+ @ > R> 10+ @ LIM_SOL @ < OR IF 3 ETAT_SOL ! THEN 1 ENDOF 99 ENDCASE THEN THEN THEN SP_AFFICHE_SOL CHRONO_SOL R> FEN_CHRONO ; FEN: CHRONO_REU >R MOV_REU 28+ @ 0> IF 1 MOV_REU 6+ LIM_MOV_REU OVER 22+ @ DUP 2 = IF ( Restauration en haut des cartes deplaces ) DROP OVER 2+ @ OVER 2+ @ > IF DUP @ 1- LIM_REU 8+ DUP >R ! DUP 2+ @ 1- R@ 2+ ! DUP 4+ @ 1+ R@ 4+ ! OVER 2+ @ 1- R> 6+ ! -2 ELSE 3 THEN THEN DUP 3 = IF ( Restauration a gauche des cartes deplaces ) DROP OVER @ OVER @ > IF DUP @ 1- LIM_REU 8+ DUP >R ! DUP 2+ @ 1- R@ 2+ ! OVER @ 1- R@ 4+ ! DUP 6+ @ 1+ R> 6+ ! -3 ELSE 4 THEN THEN DUP 4 = IF ( Restauration en bas des cartes deplaces ) DROP OVER 6+ @ OVER 6+ @ < IF DUP @ 1- LIM_REU 8+ DUP >R ! OVER 6+ @ 1+ R@ 2+ ! DUP 4+ @ 1+ R@ 4+ ! DUP 6+ @ 1+ R> 6+ ! -4 ELSE 5 THEN THEN DUP 5 = IF ( Restauration a droite des cartes deplaces ) DROP >R >R ETAT_REU @ 4 = 8 AND + R> R> OVER 4+ @ OVER 4+ @ < IF OVER 4+ @ 1+ LIM_REU 8+ DUP >R ! DUP 2+ @ 1- R@ 2+ ! DUP 4+ @ 1+ R@ 4+ ! DUP 6+ @ 1+ R> 6+ ! -5 ELSE 0 THEN THEN DUP 6 = IF ( Restauration de tout ) DROP DUP @ 1- LIM_REU 8+ DUP >R ! DUP 2+ @ 1- R@ 2+ ! DUP 4+ @ 1+ R@ 4+ ! DUP 6+ @ 1+ R> 6+ ! -6 THEN ( Affichage des cartes deplaces ) DUP 1 = - DUP 0< MSQ_MEM_REU ! ROT 22+ ! DROP ELSE MSQ_MEM_REU @ ?DUP IF 32767 AND 1 15 0 DO OVER OVER AND IF LEAVE ELSE 2* THEN LOOP DUP MSQ_REU ! XOR MSQ_MEM_REU ! 1 ELSE 0 MSQ_REU ! MOV_REU 28+ @ ?DUP IF NEGATE DUP 1+ DUP 6 < AND MOV_REU DUP >R 28+ ! R> 6+ SWAP 2- ?DUP IF 1- ?DUP IF 1- ?DUP IF 1- IF ( Fin de la restauration de tout ) ELSE ( Fin de restauration a droite des cartes deplaces ) DUP 4+ @ LIM_MOV_REU 4+ ! THEN ELSE ( Fin de restauration en bas des cartes deplaces ) DUP 6+ @ LIM_MOV_REU 6+ ! THEN ELSE ( Fin de restauration a gauche des cartes deplaces ) DUP @ LIM_MOV_REU ! THEN ELSE ( Fin de restauration en haut des cartes deplaces ) DUP 2+ @ LIM_MOV_REU 2+ ! THEN DROP 1 ELSE ETAT_REU @ CASE ( animation si detection de fin de jeu ) 1 OF TALON_REU C@ -1 = MOV_REU @ 0= AND TAS_REU DUP >R [ 13 9+ 9 * LITERAL ] + R> DO I C@ DUP 0< IF DROP ELSE 15 AND 16 OR I [ 13 9+ LITERAL ] + I 1+ DO I C@ DUP 0< IF DROP LEAVE ELSE >R 1- R> 15 AND 16 OR OVER = NOT IF DUP XOR LEAVE THEN THEN LOOP DUP 0= NOT OR AND DUP 0= IF LEAVE THEN THEN [ 13 9+ LITERAL ] +LOOP IF 2 ETAT_REU ! 1 ELSE 99 THEN ENDOF 2 OF TALON_REU C@ DUP 0> IF 0 4 0 DO OVER 15 AND IF OVER TRI_REU I + C@ 1+ = IF 1 TRI_REU I + +C! 4 I LSH + LEAVE THEN ELSE TRI_REU I + C@ 0< IF OVER TRI_REU I + C! 4 I LSH + LEAVE THEN THEN LOOP >R DROP R> DUP IF 2+ -1 TALON_REU C! THEN ELSE DUP XOR THEN DUP 0= IF 9 0 DO TAS_REU [ 13 9+ LITERAL ] I * + [ 13 9+ LITERAL ] 0 DO DUP I + C@ 0< IF I 0= IF LEAVE ELSE DUP I + 1- C@ 0 4 0 DO OVER 15 AND IF OVER TRI_REU I + C@ 1+ = IF 1 TRI_REU I + +C! 4 I LSH + LEAVE THEN ELSE TRI_REU I + C@ 0< IF OVER TRI_REU I + C! 4 I LSH + LEAVE THEN THEN LOOP >R DROP R> ?DUP IF ROT DROP SWAP -1 OVER I + 1- C! LEAVE THEN THEN THEN LOOP DROP DUP IF 64 I LSH + LEAVE THEN LOOP THEN ?DUP IF MSQ_MEM_REU ! LIM_REU DUP 8+ 8 CMOVE 99 ELSE 3 ETAT_REU ! 1 THEN ENDOF 3 OF TRI_REU DUP 2@ 1+ IF DUP 2+ C@ 1+ 15 AND OVER 3+ C@ 1+ 15 AND < IF 3 ELSE DUP 1+ C@ 1+ 15 AND OVER 2+ C@ 1+ 15 AND < IF 2 ELSE DUP C@ 1+ 15 AND OVER 1+ C@ 1+ 15 AND < IF 1 ELSE 0 THEN THEN THEN DUP 3+ MOV_REU DUP >R ! DUP TRI_REU + C@ 256+ R@ 14+ ! LIM_REU @ OVER 4+ 64 * + 36+ DUP R@ 2+ ! DUP R@ 6+ ! 55+ R@ 10+ ! LIM_REU 2+ @ 4+ DUP R@ 4+ ! DUP R@ 8+ ! 103+ R@ 12+ ! 0 R@ 28+ ! R> 6+ LIM_MOV_REU 8 CMOVE + NPA 16 MOD 1+ DUP 0= + DX_REU ! LIM_REU DUP >R 6+ @ 1+ R> 2+ @ - 108- DY_REU ! 0 CNT_REU ! DUP >R C@ 1- DUP 15 AND 15 = OR R> C! 4 ETAT_REU ! ELSE DROP INIT_REU THEN 1 ENDOF 4 OF DX_REU @ DUP MOV_REU DUP >R 2+ +! DUP R@ 6+ +! R@ 10+ +! CNT_REU DUP >R @ 1+ 31 AND DUP R> ! DY_REU @ OVER 16 = IF 2 3 */ DUP DY_REU ! THEN >R 10 ASH COS ABS R> -32768 */ LIM_REU 6+ @ + 104- DUP R@ 4+ ! DUP R@ 8+ ! 103+ R@ 12+ ! LIM_MOV_REU DUP @ R@ 6+ @ MIN OVER ! DUP 2+ @ R@ 8+ @ MIN OVER 2+ ! DUP 4+ @ R@ 10+ @ MAX OVER 4+ ! DUP 6+ @ R@ 12+ @ MAX SWAP 6+ ! 1 R@ 28+ ! R@ 6+ @ LIM_REU 4+ @ > R> 10+ @ LIM_REU @ < OR IF 3 ETAT_REU ! THEN 1 ENDOF 99 ENDCASE THEN THEN THEN SP_AFFICHE_REU CHRONO_REU R> FEN_CHRONO ; FEN: AFFICHE_SOL DUP >R FEN_POSITION_? R> FEN_TAILLE_? 4 PICK 16 LSH 4 PICK 65535 AND + LIM_SOL DUP >R 2! >R >R SWAP R> + 1- 16 LSH SWAP R> + 1- 65535 AND + R@ 4+ 2! R> LIM_SOL 8+ 8 CMOVE -1 MSQ_MEM_SOL ! 0 MOV_SOL 28+ ! ; FEN: AFFICHE_REU DUP >R FEN_POSITION_? R> FEN_TAILLE_? 4 PICK 16 LSH 4 PICK 65535 AND + LIM_REU DUP >R 2! >R >R SWAP R> + 1- 16 LSH SWAP R> + 1- 65535 AND + R@ 4+ 2! R> LIM_REU 8+ 8 CMOVE -1 MSQ_MEM_REU ! 0 MOV_REU 28+ ! ; : RESTITUE_SOL MOV_SOL DUP >R @ NEGATE DUP 1 > OVER 14 < AND IF DUP 2 > IF DUP 6 > IF DUP 7- [ 13 7+ LITERAL ] * TAS_SOL + 0 [ 13 7+ LITERAL ] 0 DO OVER OVER + C@ 0< IF LEAVE ELSE 1+ THEN LOOP R@ 15+ 3 PICK 3 PICK + R@ 14+ C@ CMOVE R@ 14+ C@ + + >R -1 R> C! ELSE R@ 15+ C@ OVER 3- TRI_SOL + C! THEN ELSE TALON_SOL 52 0 DO DUP C@ 192 AND 64 = IF 1+ ELSE LEAVE THEN LOOP R@ 15+ C@ 52 0 DO OVER C@ >R OVER C! 1+ R> DUP 0< IF LEAVE THEN LOOP SWAP C! THEN 1 OVER 1- LSH MSQ_SOL ! LIM_SOL DUP 8+ 8 CMOVE F_SOL @ SP_AFFICHE_SOL EXECUTE BELL THEN DROP R> DROP ; : RESTITUE_REU MOV_REU DUP >R @ NEGATE DUP 1 > OVER 16 < AND IF DUP 2 > IF DUP 6 > IF DUP 7- [ 13 9+ LITERAL ] * TAS_REU + 0 [ 13 9+ LITERAL ] 0 DO OVER OVER + C@ 0< IF LEAVE ELSE 1+ THEN LOOP R@ 15+ 3 PICK 3 PICK + R@ 14+ C@ CMOVE R@ 14+ C@ + + >R -1 R> C! ELSE R@ 15+ C@ OVER 3- TRI_REU + C! THEN ELSE TALON_REU 52 0 DO DUP C@ 192 AND 64 = IF 1+ ELSE LEAVE THEN LOOP R@ 15+ C@ 52 0 DO OVER C@ >R OVER C! 1+ R> DUP 0< IF LEAVE THEN LOOP SWAP C! THEN 1 OVER 1- LSH MSQ_REU ! LIM_REU DUP 8+ 8 CMOVE F_REU @ SP_AFFICHE_REU EXECUTE BELL THEN DROP R> DROP ; FEN: SOURIS_SOL ETAT_SOL @ 1 = IF >R OVER OVER OR IF MOV_SOL @ ?DUP IF DUP 1000 U< IF MOV_SOL >R DUP 1 = IF TALON_SOL BEGIN DUP C@ 192 AND 64 = IF 1+ 0 ELSE -1 THEN UNTIL DUP 3- NB_TALON @ 2 AND + TALON_SOL MAX OVER OVER > IF DO I C@ 63 AND I C! LOOP ELSE DROP DROP TALON_SOL BEGIN DUP C@ DUP 0< IF DROP -1 ELSE 64 OR OVER C! 1+ 0 THEN UNTIL DROP THEN 999+ 3 MSQ_SOL ! LIM_SOL DUP 8+ 8 CMOVE F_SOL @ SP_AFFICHE_SOL EXECUTE ELSE DUP 2 = IF TALON_SOL BEGIN DUP C@ 192 AND 64 = IF 1+ 0 ELSE -1 THEN UNTIL BEGIN DUP >R 1+ DUP C@ DUP R> C! 0< UNTIL DROP NEGATE 2 MSQ_SOL ! LIM_SOL DUP 8+ DUP >R 8 CMOVE 157 R> +! F_SOL @ SP_AFFICHE_SOL EXECUTE ELSE DUP 7 < IF TRI_SOL OVER 3- + DUP >R C@ 1- DUP 15 AND 15 = OR R> C! NEGATE ELSE TAS_SOL OVER 7- [ 13 7+ LITERAL ] * + R@ 15+ C@ BEGIN OVER C@ OVER - IF >R 1+ R> 0 ELSE -1 THEN UNTIL DROP R@ 14+ C@ -1 FILL NEGATE THEN THEN THEN R@ ! 4 PICK R@ 2+ ! 3 PICK R@ 4+ ! 0 R@ 28+ ! R> 6+ LIM_MOV_SOL 8 CMOVE [ GRAPHIQUES_16 704+ LITERAL ] R@ FEN_MOTIF_SOURIS ELSE 0< IF 4 PICK MOV_SOL DUP >R 2+ @ - 4 PICK R@ 4+ @ - OR IF 4 PICK DUP R@ 2+ ! F_SOL @ FEN_POSITION_? >R + R> 5 PICK DUP R@ 4+ ! + 44- DUP R@ 8+ ! 87+ R@ 14+ C@ 4* 4* + R@ 12+ ! 28- DUP R@ 6+ ! 55+ R@ 10+ ! R> 6+ DUP @ LIM_MOV_SOL DUP >R @ MIN R@ ! DUP 2+ @ R@ 2+ @ MIN R@ 2+ ! DUP 4+ @ R@ 4+ @ MAX R@ 4+ ! DUP 6+ @ R@ 6+ @ MAX R> 6+ ! 1 OVER 22+ ! ELSE R> THEN DROP THEN THEN ELSE BELL THEN ELSE MOV_SOL 28+ @ 0> NOT IF MOV_SOL @ 1000 U< NOT IF MOV_SOL 6+ DUP @ LIM_MOV_SOL DUP >R @ MIN R@ ! DUP 2+ @ R@ 2+ @ MIN R@ 2+ ! DUP 4+ @ R@ 4+ @ MAX R@ 4+ ! DUP 6+ @ R@ 6+ @ MAX R> 6+ ! -1 MSQ_MEM_SOL ! 6 SWAP 22+ ! THEN 3 PICK 4- DUP 0< IF RESTITUE_SOL DUP XOR ELSE 104- DUP 0< IF DROP 4 MOV_SOL 8+ ! 4 PICK 36- DUP 0< IF RESTITUE_SOL DUP XOR ELSE 56- DUP 0< IF RESTITUE_SOL 0 3 0 DO TALON_SOL I + C@ 0< IF LEAVE ELSE 1+ THEN LOOP ?DUP IF DUP TALON_SOL + C@ 255 AND 256+ MOV_SOL 14+ ! 36 MOV_SOL 6+ ! 3- 4* 4* + 0< 1 AND ELSE DUP XOR THEN ELSE 8- DUP 0< IF RESTITUE_SOL DUP XOR ELSE 56- DUP 0< IF RESTITUE_SOL TALON_SOL BEGIN DUP C@ DUP 0< NOT IF 64 AND IF 1+ 0 ELSE -1 THEN THEN UNTIL DUP C@ 256+ MOV_SOL 14+ ! >R 0 R@ 3+ R> DO I C@ 0< IF LEAVE ELSE 1+ THEN LOOP ?DUP IF 100 MOV_SOL 6+ ! 3- 4* 4* + 0< 2 AND ELSE DUP XOR THEN ELSE 40- DUP 0< IF RESTITUE_SOL DUP XOR ELSE 64 /MOD SWAP 56 < OVER 4 < AND IF MOV_SOL DUP >R @ NEGATE DUP >R 1 > R> 14 < AND R@ 14+ C@ 1 = AND IF R@ 15+ C@ OVER TRI_SOL + C@ OVER 15 AND 0= OVER 0< AND >R 1+ OVER = R> OR IF OVER TRI_SOL + C! 4 OVER LSH MSQ_SOL ! LIM_SOL DUP 8+ 8 CMOVE F_SOL @ SP_AFFICHE_SOL EXECUTE ELSE DROP RESTITUE_SOL THEN ELSE RESTITUE_SOL THEN DUP TRI_SOL + C@ DUP 256+ R@ 14+ ! 0< IF R> DROP DUP XOR ELSE 196 OVER 64 * + R> 6+ ! 3+ THEN ELSE RESTITUE_SOL DUP XOR THEN THEN THEN THEN THEN THEN ELSE 8- DUP 0< IF RESTITUE_SOL DUP XOR ELSE 5 PICK 4- DUP 0< IF RESTITUE_SOL DROP DUP XOR ELSE 64 /MOD SWAP 56 < OVER 7 < AND IF MOV_SOL DUP >R @ NEGATE DUP >R 1 > R> 14 < AND IF DUP [ 13 7+ LITERAL ] * TAS_SOL + 0 [ 13 7+ LITERAL ] 0 DO OVER OVER + C@ 0< IF LEAVE ELSE 1+ THEN LOOP OVER C@ 0< OVER 0= AND R@ 15+ C@ 15 AND 12 = AND IF R@ 15+ 3 PICK 3 PICK + R@ 14+ C@ CMOVE R@ 14+ C@ + + >R -1 R> C! -1 ELSE DUP IF OVER OVER 1- + C@ 1- 32 XOR -17 AND R@ 15+ C@ -17 AND - IF DROP DUP XOR ELSE R@ 15+ 3 PICK 3 PICK + R@ 14+ C@ CMOVE R@ 14+ C@ + + >R -1 R> C! -1 THEN ELSE DROP DUP XOR THEN THEN IF 64 OVER LSH MSQ_SOL ! LIM_SOL DUP 8+ 8 CMOVE F_SOL @ SP_AFFICHE_SOL EXECUTE ELSE RESTITUE_SOL THEN ELSE RESTITUE_SOL THEN DUP [ 13 7+ LITERAL ] * TAS_SOL + 0 BEGIN OVER OVER + C@ DUP 0< NOT IF 64 AND IF 1+ 0 ELSE -1 THEN THEN UNTIL ( y,no_tas,adr_tas,no_carte_1 ) 116 OVER 4* 4* + R@ 8+ ! DUP >R + ROT R> 4* 4* - DUP 0< IF DROP DROP DUP XOR ELSE ( no_tas,adr_tas+no_carte_1,y' ) BEGIN OVER C@ 0< OVER 16 < OR IF -1 ELSE OVER 1+ C@ 0< IF -1 ELSE >R 1+ R> 16 DUP R@ 8+ +! - 0 THEN THEN UNTIL SWAP 0 BEGIN OVER OVER + C@ DUP 0< NOT IF >R 1+ R> OVER R@ 14+ + C! 0 THEN UNTIL >R DROP R> ?DUP IF OVER OVER 4* 4* 88+ - 0< IF DUP R@ 14+ C! 1- SWAP 4/ 4/ MIN 4* 4* R@ 8+ +! 4 OVER 64 * + R@ 6+ ! 7+ ELSE DROP DROP DUP XOR THEN ELSE DROP DUP XOR THEN THEN R> DROP ELSE RESTITUE_SOL DROP DUP XOR THEN THEN THEN THEN THEN MOV_SOL @ ?DUP IF NEGATE 7- DUP 0< NOT IF 1 OVER 6+ LSH MSQ_SOL ! [ 13 7 + LITERAL ] DUP >R * TAS_SOL + R> 0 DO DUP I + C@ 0< IF I 0> IF DUP I + 1- DUP >R C@ 63 AND R> C! THEN LEAVE THEN LOOP LIM_SOL DUP 8+ 8 CMOVE F_SOL @ SP_AFFICHE_SOL EXECUTE THEN DROP THEN DUP MOV_SOL ! IF R@ FEN_POSITION_? MOV_SOL DUP >R 8+ DUP >R @ + DUP R> ! R@ 14+ C@ 4* 4* 87+ + R@ 12+ ! R@ 6+ DUP >R @ + DUP R> ! 55+ R> 10+ ! [ GRAPHIQUES_16 640+ LITERAL ] ELSE [ SYMBOLES_16x16 256+ LITERAL ] THEN R@ FEN_MOTIF_SOURIS THEN THEN R> THEN DROP DROP DROP DROP DROP ; FEN: SOURIS_REU ETAT_REU @ 1 = IF >R OVER OVER OR IF MOV_REU @ ?DUP IF DUP 1000 U< IF MOV_REU >R DUP 1 = IF TALON_REU BEGIN DUP C@ 192 AND 64 = IF 1+ 0 ELSE -1 THEN UNTIL DUP 1- TALON_REU MAX OVER OVER > IF DO I C@ 63 AND I C! LOOP ELSE DROP DROP TALON_REU BEGIN DUP C@ DUP 0< IF DROP -1 ELSE 64 OR OVER C! 1+ 0 THEN UNTIL DROP THEN 999+ 3 MSQ_REU ! LIM_REU DUP 8+ 8 CMOVE F_REU @ SP_AFFICHE_REU EXECUTE ELSE DUP 2 = IF TALON_REU BEGIN DUP C@ 192 AND 64 = IF 1+ 0 ELSE -1 THEN UNTIL BEGIN DUP >R 1+ DUP C@ DUP R> C! 0< UNTIL DROP NEGATE 2 MSQ_REU ! LIM_REU DUP 8+ DUP >R 8 CMOVE 189 R> +! F_REU @ SP_AFFICHE_REU EXECUTE ELSE DUP 7 < IF TRI_REU OVER 3- + DUP >R C@ 1- DUP 15 AND 15 = OR R> C! NEGATE ELSE TAS_REU OVER 7- [ 13 9+ LITERAL ] * + R@ 15+ C@ BEGIN OVER C@ OVER - IF >R 1+ R> 0 ELSE -1 THEN UNTIL DROP R@ 14+ C@ -1 FILL NEGATE THEN THEN THEN R@ ! 4 PICK R@ 2+ ! 3 PICK R@ 4+ ! 0 R@ 28+ ! R> 6+ LIM_MOV_REU 8 CMOVE [ GRAPHIQUES_16 704+ LITERAL ] R@ FEN_MOTIF_SOURIS ELSE 0< IF 4 PICK MOV_REU DUP >R 2+ @ - 4 PICK R@ 4+ @ - OR IF 4 PICK DUP R@ 2+ @ - DUP R@ 6+ +! R@ 10+ +! R@ 2+ ! 3 PICK DUP R@ 4+ @ - DUP R@ 8+ +! R@ 12+ +! R@ 4+ ! 4 PICK DUP R@ 2+ ! F_REU @ FEN_POSITION_? >R + R> 5 PICK DUP R@ 4+ ! + 44- DUP R@ 8+ ! 103+ R@ 12+ ! 28- DUP R@ 6+ ! 55+ R@ 10+ ! R> 6+ DUP @ LIM_MOV_REU DUP >R @ MIN R@ ! DUP 2+ @ R@ 2+ @ MIN R@ 2+ ! DUP 4+ @ R@ 4+ @ MAX R@ 4+ ! DUP 6+ @ R@ 6+ @ MAX R> 6+ ! 1 OVER 22+ ! ELSE R> THEN DROP THEN THEN ELSE BELL THEN ELSE MOV_REU 28+ @ 0> NOT IF MOV_REU @ 1000 U< NOT IF MOV_REU 6+ DUP @ LIM_MOV_REU DUP >R @ MIN R@ ! DUP 2+ @ R@ 2+ @ MIN R@ 2+ ! DUP 4+ @ R@ 4+ @ MAX R@ 4+ ! DUP 6+ @ R@ 6+ @ MAX R> 6+ ! -1 MSQ_MEM_REU ! 6 SWAP 22+ ! THEN 3 PICK 4- DUP 0< IF RESTITUE_REU DUP XOR ELSE 104- DUP 0< IF DROP 4 MOV_REU 8+ ! 4 PICK 68- DUP 0< IF RESTITUE_REU DUP XOR ELSE 56- DUP 0< IF RESTITUE_REU 0 3 0 DO TALON_REU I + C@ 0< IF LEAVE ELSE 1+ THEN LOOP ?DUP IF DUP TALON_REU + C@ 255 AND 256+ MOV_REU 14+ ! 68 MOV_REU 6+ ! 3- 4* 4* + 0< 1 AND ELSE DUP XOR THEN ELSE 8- DUP 0< IF RESTITUE_REU DUP XOR ELSE 56- DUP 0< IF RESTITUE_REU TALON_REU BEGIN DUP C@ DUP 0< NOT IF 64 AND IF 1+ 0 ELSE -1 THEN THEN UNTIL DUP C@ 256+ MOV_REU 14+ ! >R 0 R@ 3+ R> DO I C@ 0< IF LEAVE ELSE 1+ THEN LOOP ?DUP IF 132 MOV_REU 6+ ! 3- 4* 4* + 0< 2 AND ELSE DUP XOR THEN ELSE 94- DUP 0< IF RESTITUE_REU DUP XOR ELSE 64 /MOD SWAP 56 < OVER 4 < AND IF MOV_REU DUP >R @ NEGATE DUP >R 1 > R> 16 < AND R@ 14+ C@ 1 = AND IF R@ 15+ C@ OVER TRI_REU + C@ OVER 15 AND 0= OVER 0< AND >R 1+ OVER = R> OR IF OVER TRI_REU + C! 4 OVER LSH MSQ_REU ! LIM_REU DUP 8+ 8 CMOVE F_REU @ SP_AFFICHE_REU EXECUTE ELSE DROP RESTITUE_REU THEN ELSE RESTITUE_REU THEN DUP TRI_REU + C@ DUP 256+ R@ 14+ ! 0< IF R> DROP DUP XOR ELSE 292 OVER 64 * + R> 6+ ! 3+ THEN ELSE RESTITUE_REU DUP XOR THEN THEN THEN THEN THEN THEN ELSE 8- DUP 0< IF RESTITUE_REU DUP XOR ELSE 5 PICK 4- DUP 0< IF RESTITUE_REU DROP DUP XOR ELSE 64 /MOD SWAP 56 < OVER 9 < AND IF MOV_REU DUP >R @ NEGATE DUP >R 1 > R> 16 < AND IF DUP [ 13 9+ LITERAL ] * TAS_REU + 0 [ 13 9+ LITERAL ] 0 DO OVER OVER + C@ 0< IF LEAVE ELSE 1+ THEN LOOP OVER C@ 0< OVER 0= AND IF R@ 15+ 3 PICK 3 PICK + R@ 14+ C@ CMOVE R@ 14+ C@ + + >R -1 R> C! -1 ELSE DUP IF OVER OVER 1- + C@ 1- MM_COULEUR @ IF 15 AND R@ 15+ C@ 15 ELSE 32 XOR -17 AND R@ 15+ C@ -17 THEN AND - IF DROP DUP XOR ELSE R@ 15+ 3 PICK 3 PICK + R@ 14+ C@ CMOVE R@ 14+ C@ + + >R -1 R> C! -1 THEN ELSE DROP DUP XOR THEN THEN IF 64 OVER LSH MSQ_REU ! LIM_REU DUP 8+ 8 CMOVE F_REU @ SP_AFFICHE_REU EXECUTE ELSE RESTITUE_REU THEN ELSE RESTITUE_REU THEN DUP [ 13 9+ LITERAL ] * TAS_REU + 0 BEGIN OVER OVER + C@ DUP 0< NOT IF 256+ R@ 14+ ! 1+ 0 THEN UNTIL >R DROP R> ?DUP IF ( y,no_tas,no_der_carte ) 116 OVER 1- 4* 4* + R@ 8+ ! >R SWAP R> 1- 4* 4* - DUP 0< IF DROP DUP XOR ELSE 104- 0< IF 4 OVER 64 * + R@ 6+ ! 7+ ELSE DUP XOR THEN THEN ELSE DROP DUP XOR THEN R> DROP ELSE RESTITUE_REU DROP DUP XOR THEN THEN THEN THEN THEN DUP MOV_REU ! IF R@ FEN_POSITION_? MOV_REU DUP >R 8+ DUP >R @ + DUP R> ! 103+ R@ 12+ ! R@ 6+ DUP >R @ + DUP R> ! 55+ R> 10+ ! [ GRAPHIQUES_16 640+ LITERAL ] ELSE [ SYMBOLES_16x16 320+ LITERAL ] THEN R@ FEN_MOTIF_SOURIS THEN THEN R> THEN DROP DROP DROP DROP DROP ; FEN: MENU_SOL BEGIN 5 NB_TALON @ IF S_MENU3 ELSE S_MENU1 THEN 0 4 PICK FEN_DIALOGUE_CHOIX CASE 1 OF INIT_SOL -1 ENDOF 2 OF NB_TALON DUP >R @ COM R> ! -1 ENDOF 3 OF DUP FERME_SOL EXECUTE -1 ENDOF 4 OF 0 ENDOF -1 ENDCASE UNTIL DROP ; FEN: MENU_REU BEGIN 5 MM_COULEUR @ IF S_MENU4 ELSE S_MENU2 THEN 0 4 PICK FEN_DIALOGUE_CHOIX CASE 1 OF INIT_REU -1 ENDOF 2 OF MM_COULEUR DUP >R @ COM R> ! -1 ENDOF 3 OF DUP FERME_REU EXECUTE -1 ENDOF 4 OF 0 ENDOF -1 ENDCASE UNTIL DROP ; FEN: CLV_SOL SWAP PRECED_SOL DUP >R @ 27 = IF 31 AND 0 ELSE DUP 27 = IF 0 SWAP ELSE 0 THEN THEN R> ! DUP 6 = ( fermeture ) IF DROP DUP FERME_SOL EXECUTE 0 THEN DUP 7 = ( nouvelle donne ) IF DROP INIT_SOL 0 THEN DUP 14 = ( menu ) IF DROP DUP MENU_SOL EXECUTE 0 THEN DUP 20 = ( test de la fin du jeu ) IF DROP -1 TALON_SOL C! -1 TRI_SOL 2! [ 13 7+ LITERAL ] 0 DO 12 I - DUP 0< NOT IF I 5 LSH + THEN 7 0 DO DUP 0< IF DUP ELSE I CASE 0 OF DUP 63 AND ENDOF 1 OF -1 ENDOF 2 OF DUP 32+ 63 AND ENDOF 3 OF -1 ENDOF 4 OF DUP 16+ 63 AND ENDOF 5 OF -1 ENDOF DUP 48+ 63 AND ENDCASE THEN TAS_SOL J + [ 13 7+ LITERAL ] I * + C! LOOP DROP LOOP DUP AFFICHE_SOL EXECUTE 0 THEN IF BELL THEN DROP ; FEN: CLV_REU SWAP PRECED_REU DUP >R @ 27 = IF 31 AND 0 ELSE DUP 27 = IF 0 SWAP ELSE 0 THEN THEN R> ! DUP 6 = ( fermeture ) IF DROP DUP FERME_REU EXECUTE 0 THEN DUP 7 = ( nouvelle donne ) IF DROP INIT_REU 0 THEN DUP 14 = ( menu ) IF DROP DUP MENU_REU EXECUTE 0 THEN DUP 20 = ( test de la fin du jeu ) IF DROP -1 TALON_REU C! -1 TRI_REU 2! [ 13 9+ LITERAL ] 0 DO 12 I - DUP 0< NOT IF I 5 LSH + THEN 9 0 DO DUP 0< IF DUP ELSE I CASE 0 OF -1 ENDOF 1 OF DUP 63 AND ENDOF 2 OF -1 ENDOF 3 OF DUP 32+ 63 AND ENDOF 4 OF -1 ENDOF 5 OF DUP 16+ 63 AND ENDOF 6 OF -1 ENDOF 7 OF DUP 48+ 63 AND ENDOF -1 ENDCASE THEN TAS_REU J + [ 13 9+ LITERAL ] I * + C! LOOP DROP LOOP DUP AFFICHE_REU EXECUTE 0 THEN IF BELL THEN DROP ; : SOLITAIRE F_SOL @ ?DUP IF FEN_SELECTIONNE ELSE FEN_CREE ?DUP IF DUP >R F_SOL ! INIT_SOL ECRAN 4+ @ [ 64 7 * LITERAL ] - 2/ ECRAN 6+ @ [ 64 6 * LITERAL ] - 2/ R@ FEN_POSITION [ 64 7 * LITERAL ] [ 64 7 * LITERAL ] R@ FEN_TAILLE S_SOLITAIRE R@ FEN_NOM FERME_SOL R@ FEN_FERME MENU_SOL R@ FEN_MENU A_PROPOS_SOLREU R@ FEN_A_PROPOS AFFICHE_SOL R@ FEN_AFFICHE CLV_SOL R@ FEN_CLAVIER SOURIS_SOL R@ FEN_SOURIS R@ FERME_SOL EXECUTE 1 SP_AFFICHE_SOL CHRONO_SOL R@ FEN_CHRONO R> FEN_ACTIVE ELSE ." IMPOSSIBLE de creer l'application SOLITAIRE FORTH!" ABORT THEN THEN ; : REUSSITE F_REU @ ?DUP IF FEN_SELECTIONNE ELSE FEN_CREE ?DUP IF DUP >R F_REU ! INIT_REU ECRAN 4+ @ [ 64 9 * LITERAL ] - 2/ ECRAN 6+ @ [ 64 7 * LITERAL ] - 2/ R@ FEN_POSITION [ 64 9 * LITERAL ] [ 64 7 * LITERAL ] R@ FEN_TAILLE S_REUSSITE R@ FEN_NOM FERME_REU R@ FEN_FERME MENU_REU R@ FEN_MENU A_PROPOS_SOLREU R@ FEN_A_PROPOS AFFICHE_REU R@ FEN_AFFICHE CLV_REU R@ FEN_CLAVIER SOURIS_REU R@ FEN_SOURIS R@ FERME_REU EXECUTE 1 SP_AFFICHE_REU CHRONO_REU R@ FEN_CHRONO R> FEN_ACTIVE ELSE ." IMPOSSIBLE de creer l'application REUSSITE FORTH!" ABORT THEN THEN ; ' SOLITAIRE 4- DUP DEBUT_CARTES 4- - SWAP 2! DICO_INIT SOLITAIRE REUSSITE ( FIN )