( Programme de veille veille. Version 0.50 du 18 Juillet 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 ) -1 VARIABLE MASQUE_TEINTE 0 VARIABLE COMPTEUR ( 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 ( - --> - ) COMPTEUR DUP >R @ DUP 1+ R> ! 7 AND 0= IF INDX_VEILLE 4+ 2@ DUP >R NPA ABS MASQUE_TEINTE @ DUP 0< IF DROP 255 AND ELSE >R 13 MOD DUP 0> 3 AND + DUP 12 AND 4* DUP 4* + + R> AND THEN NPA ABS R@ 4+ @ 1+ R@ @ - MOD R@ @ + NPA ABS R@ 6+ @ 1+ R@ 2+ @ - MOD R@ 2+ @ + NPA ABS R@ 4+ @ 1+ R@ @ - MOD NPA ABS R@ 6+ @ 1+ R> 2+ @ - MOD >R ROT OVER 2/ - SWAP OVER + >R SWAP R> R> ROT OVER 2/ - SWAP OVER + >R SWAP R> TRACE_REC DROP THEN ( COMPTEUR @ 256 = IF DUP THEN ( Probleme boucle ) ; 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/veille.prm" STRING S_FICHIER : INIT_VEILLE ( - --> - ) S_FICHIER COUNT CHEMIN_CONCATENE ?DUP IF DUP >R -1 FOPEN R> MEMOIRE_LIBERE DROP 0> IF MASQUE_TEINTE 2 3 PICK FREAD DROP THEN FCLOSE DROP THEN ( DROP ( Probleme initialisation ) ; 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_TITRE_MENU_VEILLE MASQUE DES COULEURS:" COLORS MASK:" FEN_STRING" S_MENU_VEILLE BLEU ROUGE MAGENTA VERT CYAN JAUNE BLANC TOUT" BLUE RED MAGENTA GREEN CYAN YELLOW WHITE ALL" FEN: PRGM_CONFIG ( fen --> - ) 5 S_MENU_VEILLE S_TITRE_MENU_VEILLE 4 PICK FEN_DIALOGUE_CHOIX CASE 1 OF [ 8 4+ 3+ LITERAL ] ENDOF 2 OF [ 128 64+ 3+ LITERAL ] ENDOF 3 OF [ 128 64+ 8+ 4+ 3+ LITERAL ] ENDOF 4 OF [ 32 16+ 3+ LITERAL ] ENDOF 5 OF [ 32 16+ 8+ 4+ 3+ LITERAL ] ENDOF 6 OF [ 128 64+ 32+ 16+ 3+ LITERAL ] ENDOF 7 OF 255 ( DUP ( Probleme menu ) ENDOF 8 OF -1 ENDOF 0 ENDCASE ?DUP IF MASQUE_TEINTE ! S_FICHIER COUNT CHEMIN_CONCATENE ?DUP IF DUP >R 0 FOPEN R> MEMOIRE_LIBERE DROP 0< NOT IF MASQUE_TEINTE 2 3 PICK FWRITE DROP THEN FCLOSE DROP THEN THEN DROP ; PRGM_CONFIG INDX_VEILLE 8+ 2! ( FIN ) ( Zone accueillant la somme du fichier pour validation. ) ( SOM_VEILLE 0000237810 )