( Programme de veille etoiles. Version 1.00 du 27 Juin 2010. Ecrit par jpb.forth . ) DECIMAL ( Zone obligatoire d'echange: 0 --> adresse du programme de veille sur 4 octets 4 --> adresse des limites de la zone affichable sur 4 octets mise a jour par le systeme 8 --> adresse du programme de configuration des parametres sur 4 octets a 0 si pas de parametres 12 --> adresse du programme d'initialisation sur 4 octets a 0 si pas d'initialisation ) HERE 8 ALLOT CONSTANT INDX_VEILLE ( Zone facultative des parametres: definie selon les necessites du programme de veille ) HERE 2 256 4* + 2/ ALLOT CONSTANT ZONE_ETOILE 32 VARIABLE NOMBRE BIN HERE 0000000000000000 , ( 0 ) 0000000000000000 , 0000000000000000 , 0000000000000000 , 0000000000000000 , 0000000000000000 , 0000000000000000 , 0000000010000000 , 0000000111000000 , 0000000010000000 , 0000000000000000 , 0000000000000000 , 0000000000000000 , 0000000000000000 , 0000000000000000 , 0000000000000000 , CONSTANT SYMBOLE_ETOILE DECIMAL ( Zone du programme de veille: l'adresse du debut du programme principal doit etre mise dans les 4 premiers octets de INDX_VEILLE ce programme est appele toutes les 25 ms en mode veille il ne doit avoir aucun parametre d'entree et de sortie ) : PRGM_VEILLE ( - --> - ) ZONE_ETOILE DUP >R @ DUP 3 AND 3 = IF INDX_VEILLE 4+ 2@ 16 DUP R@ 2+ DUP NOMBRE @ 4* + SWAP DO 0 I @ I 2+ @ SYMBOLE_ETOILE TRACE_MOTIF >R 8+ INDX_VEILLE 4+ 2@ DUP >R 4+ @ 1+ R> @ DUP >R - 2/ R> + DUP >R - DUP 10 / DUP 0= 1 AND + + R> + R> 8+ INDX_VEILLE 4+ 2@ DUP >R 6+ @ 1+ R> 2+ @ DUP >R - 2/ R> + DUP >R - DUP 10 / DUP 0= 1 AND + + R> + OVER INDX_VEILLE 4+ 2@ DUP >R @ < 3 PICK R@ 4+ @ > OR OVER R@ 2+ @ < 3 PICK R> 6+ @ > OR OR IF DROP DROP INDX_VEILLE 4+ 2@ >R NPA ABS R@ 4+ @ 1+ R@ @ - /MOD R@ 6+ @ 1+ R@ 2+ @ - MOD SWAP R@ @ + SWAP R> 2+ @ + THEN >R >R DROP 255 R> 8- R> 8- OVER I ! DUP I 2+ ! SYMBOLE_ETOILE TRACE_MOTIF DROP DROP DROP 4 +LOOP DROP DROP DROP DROP 4 ELSE 1+ THEN R> ! ; FIND PRGM_VEILLE INDX_VEILLE 2! ( Zone facultative du programme d'initialisation: l'adresse du debut du programme principal doit etre mise dans les octets 12 a 15 de INDX_VEILLE ce programme est appele juste au debut d'entree en veille il ne doit avoir aucun parametre d'entree et de sortie ) " ./BINAIRES/etoiles.prm" STRING S_FICHIER : INIT_VEILLE ( - --> - ) S_FICHIER COUNT CHEMIN_CONCATENE ?DUP IF DUP >R -1 FOPEN R> MEMOIRE_LIBERE DROP 0> IF NOMBRE 2 3 PICK FREAD DROP THEN FCLOSE DROP THEN INDX_VEILLE 4+ 2@ 0 OVER DUP >R @ R@ 2+ @ R@ 4+ @ R> 6+ @ TRACE_REC DROP ZONE_ETOILE DUP >R 2+ DUP 1024+ SWAP DO INDX_VEILLE 4+ 2@ >R NPA ABS R@ 4+ @ 1+ R@ @ - /MOD R@ 6+ @ 1+ R@ 2+ @ - MOD SWAP R@ @ + 8- SWAP R> 2+ @ + 8- I 2+ ! I ! 4 +LOOP 4 R> ! ; FIND INIT_VEILLE INDX_VEILLE 12+ 2! ( Zone facultative du programme de configuration des parametres: l'adresse du debut du programme principal doit etre mise dans les octets 8 a 11 de INDX_VEILLE ce programme est appele en cas de demande de modification de parametres il ne doit avoir aucun parametre d'entree et de sortie ) FEN_STRING" S_PARAMETRE_VEILLE Nombre d'etoiles (2 a 256):" Stars number (2 to 256):" FEN: PRGM_CONFIG ( fen --> - ) NOMBRE DUP @ BEGIN DUP 10 S_PARAMETRE_VEILLE 6 PICK FEN_DIALOGUE_NOMBRE DUP 2 < OVER 256 > OR IF DROP 0 ELSE SWAP THEN UNTIL SWAP ! S_FICHIER COUNT CHEMIN_CONCATENE ?DUP IF DUP >R 0 FOPEN R> MEMOIRE_LIBERE DROP 0< NOT IF NOMBRE 2 3 PICK FWRITE DROP THEN FCLOSE DROP THEN DROP ; PRGM_CONFIG INDX_VEILLE 8+ 2! ( FIN ) ( Zone accueillant la somme du fichier pour validation. ) ( SOM_VEILLE 0000256020 )