( Programme de veille lignes. 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 20 8 100 * + 2/ ALLOT CONSTANT ZONE_LIGNES 25 VARIABLE NOMBRE -1 VARIABLE MASQUE_TEINTE ( 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 ( - --> - ) ( x0,y0,dx0,dy0,x1,y1,dx1,dy1,n,pnt, xa1,ya1,xb1,yb1...,xa50,ya50,xb50,yb50 ) ZONE_LIGNES DUP >R @ R@ 2+ @ R@ 4+ @ R@ 6+ @ R@ 8+ @ R@ 10+ @ R@ 12+ @ R@ 14+ @ R@ 16+ @ R@ 18+ @ OVER 0= IF DROP DROP DROP DROP DROP DROP DROP DROP 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+ @ + NPA ABS R@ 4+ @ 1+ R@ @ - -5 LSH /MOD R@ 6+ @ 1+ R@ 2+ @ - -5 LSH MOD >R 2+ R> 2+ NPA ABS R@ 4+ @ 1+ R@ @ - /MOD R@ 6+ @ 1+ R@ 2+ @ - MOD SWAP R@ @ + SWAP R@ 2+ @ + NPA ABS R@ 4+ @ 1+ R@ @ - -5 LSH /MOD R@ 6+ @ 1+ R> 2+ @ - -5 LSH MOD >R 2+ R> 2+ 1 0 THEN ( x0,y0,dx0,dy0,x1,y1,dx1,dy1,n,pnt ) OVER NOMBRE @ = IF INDX_VEILLE 4+ 2@ 0 3 PICK 1+ NOMBRE @ MOD 4* 2* R@ 20+ + DUP >R @ R@ 2+ @ R@ 4+ @ R> 6+ @ TRACE_LIGNE DROP ELSE >R 1+ R> THEN INDX_VEILLE 4+ 2@ NPA ABS MASQUE_TEINTE @ DUP 0< IF DROP 255 AND ELSE >R 12 MOD 4+ DUP 12 AND 4* DUP 4* + + R> AND THEN 12 PICK 12 PICK 10 PICK 10 PICK TRACE_LIGNE DROP DUP 4* 2* R@ 20+ + >R 10 PICK R@ ! 9 PICK R@ 2+ ! 6 PICK R@ 4+ ! 5 PICK R> 6+ ! 1+ NOMBRE @ MOD >R >R >R >R >R >R >R 3 PICK OVER + DUP INDX_VEILLE 4+ 2@ @ 64- < IF DROP DROP NPA ABS INDX_VEILLE 4+ 2@ DUP >R 4+ @ 1+ R> @ - -5 LSH MOD 2+ 3 PICK OVER + ELSE DUP INDX_VEILLE 4+ 2@ 4+ @ 64+ > IF DROP DROP NPA ABS INDX_VEILLE 4+ 2@ DUP >R 4+ @ 1+ R> @ - -5 LSH MOD 2+ NEGATE 3 PICK OVER + THEN THEN 4 ROLL DROP ROT ROT R> 3 PICK OVER + DUP INDX_VEILLE 4+ 2@ 2+ @ 64- < IF DROP DROP NPA ABS INDX_VEILLE 4+ 2@ DUP >R 6+ @ 1+ R> 2+ @ - -5 LSH MOD 2+ 3 PICK OVER + ELSE DUP INDX_VEILLE 4+ 2@ 6+ @ 64+ > IF DROP DROP NPA ABS INDX_VEILLE 4+ 2@ DUP >R 6+ @ 1+ R> 2+ @ - -5 LSH MOD 2+ NEGATE 3 PICK OVER + THEN THEN 4 ROLL DROP ROT ROT R> R> R> 3 PICK OVER + DUP INDX_VEILLE 4+ 2@ @ 64- < IF DROP DROP NPA ABS INDX_VEILLE 4+ 2@ DUP >R 4+ @ 1+ R> @ - -5 LSH MOD 2+ 3 PICK OVER + ELSE DUP INDX_VEILLE 4+ 2@ 4+ @ 64+ > IF DROP DROP NPA ABS INDX_VEILLE 4+ 2@ DUP >R 4+ @ 1+ R> @ - -5 LSH MOD 2+ NEGATE 3 PICK OVER + THEN THEN 4 ROLL DROP ROT ROT R> 3 PICK OVER + DUP INDX_VEILLE 4+ 2@ 2+ @ 64- < IF DROP DROP NPA ABS INDX_VEILLE 4+ 2@ DUP >R 6+ @ 1+ R> 2+ @ - -5 LSH MOD 2+ 3 PICK OVER + ELSE DUP INDX_VEILLE 4+ 2@ 6+ @ 64+ > IF DROP DROP NPA ABS INDX_VEILLE 4+ 2@ DUP >R 6+ @ 1+ R> 2+ @ - -5 LSH MOD 2+ NEGATE 3 PICK OVER + THEN THEN 4 ROLL DROP ROT ROT R> R> R@ 18+ ! R@ 16+ ! R@ 14+ ! R@ 12+ ! R@ 10+ ! R@ 8+ ! R@ 6+ ! R@ 4+ ! R@ 2+ ! 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/lignes.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 MASQUE_TEINTE 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_LIGNES [ 20 8 100 * + LITERAL ] 0 FILL ; 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 PARAMETRES des LIGNES" LINES PARAMETERS:" FEN_STRING" S_PARAMETRE_VEILLE NOMBRE COULEUR" NUMBER COLOR" FEN_STRING" S_NOMBRE_VEILLE Nombre de lignes (2 a 100):" Lines number (2 to 100):" FEN_STRING" S_COULEUR_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 --> - ) 3 S_PARAMETRE_VEILLE S_TITRE_MENU_VEILLE 4 PICK FEN_DIALOGUE_CHOIX CASE 1 OF NOMBRE DUP @ BEGIN DUP 10 S_NOMBRE_VEILLE 5 PICK FEN_DIALOGUE_NOMBRE DUP 2 < OVER 100 > OR IF DROP 0 ELSE SWAP THEN UNTIL SWAP ! ENDOF 2 OF 5 S_MENU_VEILLE S_COULEUR_VEILLE 4 PICK FEN_DIALOGUE_CHOIX CASE 1 OF [ 8 4+ 3+ LITERAL ] ENDOF 2 OF [ 128 64+ 3+ LITERAL ] ( DROP ) 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 ] ( DROP ) ENDOF 6 OF [ 128 64+ 32+ 16+ 3+ LITERAL ] ENDOF 7 OF 255 ENDOF 8 OF -1 ENDOF 0 ENDCASE ?DUP IF MASQUE_TEINTE ! THEN ENDOF ENDCASE S_FICHIER COUNT CHEMIN_CONCATENE ?DUP IF DUP >R 0 FOPEN R> MEMOIRE_LIBERE DROP 0< NOT IF NOMBRE 2 3 PICK FWRITE DROP MASQUE_TEINTE 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 0000394012 )