( Programme de veille polygones. Version 1.00 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 ) HERE 18 10 100 * + 2/ ALLOT CONSTANT ZONE_POLYGONES 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 ) : CERCLE ( xc,yc,angle,rayon,segments,couleur --> xc,yc,angle,rayon,segments ) 4 PICK SIN 4 PICK 32768 */ 5 PICK COS 5 PICK 32768 */ 4 PICK 1+ 1 DO 6 PICK I 65536 7 PICK */ + DUP >R SIN 6 PICK 32768 */ R> COS 7 PICK 32768 */ INDX_VEILLE 4+ 2@ 6 PICK 12 PICK 7 PICK + 12 PICK 7 PICK + 14 PICK 7 PICK + 14 PICK 7 PICK + TRACE_LIGNE DROP >R >R DROP DROP R> R> LOOP DROP DROP DROP ; : PRGM_VEILLE ( - --> - ) ( dx,dy,xc,yc,teta,r,nbseg,n,pnt, xc1,yc1,teta1,r1,nbseg1,...,xc100,yc100,teta100,r100,nbseg100 ) ZONE_POLYGONES DUP >R @ R@ 2+ @ R@ 4+ @ R@ 6+ @ R@ 8+ @ 65535 AND R@ 10+ @ R@ 12+ @ R@ 14+ @ R@ 16+ @ OVER 0= IF DROP DROP DROP DROP DROP DROP DROP DROP DROP INDX_VEILLE 4+ 2@ >R NPA ABS R@ 4+ @ 1+ R@ @ - -6 LSH /MOD R@ 6+ @ 1+ R@ 2+ @ - -6 LSH MOD >R 1+ R> 1+ NPA ABS R@ 4+ @ 1+ R@ @ - /MOD R@ 6+ @ 1+ R@ 2+ @ - MOD SWAP R@ @ + SWAP R> 2+ @ + 0 0 6 1 0 THEN ( dx,dy,xc,yc,teta,r,nbseg,n,pnt ) 4 ROLL DROP DUP 65536 NOMBRE @ */ SIN 32768+ INDX_VEILLE 4+ 2@ DUP >R 6+ @ 1+ R> 2+ @ - 4/ 65536 */ 20+ 4 ROLL 4 ROLL 4 ROLL OVER NOMBRE @ = IF DUP 1+ NOMBRE @ MOD 10 * R@ 18+ + DUP >R @ R@ 2+ @ R@ 4+ @ 65535 AND R@ 6+ @ R> 8+ @ 0 CERCLE DROP DROP DROP DROP DROP ELSE >R 1+ R> THEN >R >R NPA ABS MASQUE_TEINTE @ DUP 0< IF DROP 255 AND ELSE >R 12 MOD 4+ DUP 12 AND 4* DUP 4* + + R> AND THEN CERCLE R> R> DUP 10 * R@ 18+ + >R 1+ NOMBRE @ MOD 7 PICK R@ ! 6 PICK R@ 2+ ! 5 PICK R@ 4+ ! 4 PICK R@ 6+ ! 3 PICK R> 8+ ! >R >R >R >R >R >R 3 PICK + DUP INDX_VEILLE 4+ 2@ @ < IF >R >R DROP NPA ABS INDX_VEILLE 4+ 2@ DUP >R 4+ @ 1+ R> @ - -6 LSH MOD 1+ R> R> ELSE DUP INDX_VEILLE 4+ 2@ 4+ @ > IF >R >R DROP NPA ABS INDX_VEILLE 4+ 2@ DUP >R 4+ @ 1+ R> @ - -6 LSH MOD 1+ NEGATE R> R> THEN THEN R> 3 PICK + DUP INDX_VEILLE 4+ 2@ 2+ @ < IF >R >R DROP NPA ABS INDX_VEILLE 4+ 2@ DUP >R 6+ @ 1+ R> 2+ @ - -6 LSH MOD 1+ R> R> ELSE DUP INDX_VEILLE 4+ 2@ 6+ @ > IF >R >R DROP NPA ABS INDX_VEILLE 4+ 2@ DUP >R 6+ @ 1+ R> 2+ @ - -6 LSH MOD 1+ NEGATE R> R> THEN THEN R> 1001+ 65535 AND R> R> R> R> DUP NOMBRE @ 3 4 */ = IF >R >R DUP 1 AND IF 2+ DUP 10 > IF -2 AND THEN ELSE 2- DUP 4 < IF 1+ THEN THEN R> R> THEN 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/polygones.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_POLYGONES [ 18 10 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 POLYGONES" POLYGONS PARAMETERS:" FEN_STRING" S_PARAMETRE_VEILLE NOMBRE COULEUR" NUMBER COLOR" FEN_STRING" S_NOMBRE_VEILLE Nombre de polygones (2 a 100):" Polygons 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 0000385192 )