( Outil bus CAN. Version 0.10 du 18 Novembre 2012. Ecrit par jpb.forth . ) ( ***************************************************************************** Simulation et affichage des messages CAN ***************************************************************************** EMISSION DONNEE PERIODE 0x1FFFFFFF 0x11 22 33 44 55 66 77 88 abcdefgh 5000 ms RECEPTION DONNEE PERIODE 0x1FFFFFFF 0x11 22 33 44 55 66 77 88 abcdefgh 5000 ms Format des listes de message: NBMES (2 octets) contient le nombre de messages PERIODE (2 octets) HEURE (4 octets) ID (4 octets) DLC (2 octets) DONNEES (8 octets) ) FEN_STRING" S_FEN_A OUTIL BUS CAN A" CAN BUS A TOOL" FEN_STRING" S_FEN_B OUTIL BUS CAN B" CAN BUS B TOOL" FEN_STRING" S_A_PROPOS OUTIL BUS CAN FORTH Version 0.10 du 18/11/2012 http://jpb.forth.free.fr/ jpb_forth@yahoogroups.com Que le FORTH soit avec TOI! " FORTH CAN BUS TOOL Version 0.10 in 11/18/2012 http://jpb.forth.free.fr/ jpb_forth@yahoogroups.com May the FORTH be with you! " FEN_STRING" S_EMISSION EMISSION DONNEE PERIODE" TRANSMISSION DATA PERIODE" FEN_STRING" S_RECEPTION RECEPTION DONNEE PERIODE" RECEPTION DATA PERIODE" " 0x 0x ms" STRING S_VIDE FEN_STRING" S_CARTE_A Numero carte: 0 Trame(s) TX: 0 Trame(s) RX: 0 " Board numero: 0 TX frame(s): 0 RX frame(s): 0 " FEN_STRING" S_CARTE_B Numero carte: 0 Trame(s) TX: 0 Trame(s) RX: 0 " Board numero: 0 TX frame(s): 0 RX frame(s): 0 " FEN_STRING" S_MENU NOUVELLE TRAME TRAMES DE TEST FICHIER FERMER...ESC F MENU.....ESC N" NEW FRAME TEST FRAMES FILE CLOSE...ESC F MENU....ESC N" FEN_STRING" S_MENU_FIC SAUVEFARDE...ESC W CHARGEMENT...ESC V" SAVE...ESC W LOAD...ESC V" FEN_STRING" S_MENU_ID NOUVELLE TRAME SUPPRIMER TRAME" NEW FRAME DELETE FRAME" FEN_STRING" S_IDENTIFICATEUR Identificateur 0x(0-1FFFFFFF):" Identifier 0x(0-1FFFFFFF):" FEN_STRING" S_MENU_DONNEE MODIFIER INSERER SUPPRIMER" MODIFY INSERT DELETE" FEN_STRING" S_MENU_DONNEE_1 MODIFIER INSERER" MODIFY INSERT" FEN_STRING" S_MENU_DONNEE_8 MODIFIER SUPPRIMER" MODIFY DELETE" FEN_STRING" S_DONNEE_HEXA Octet 0x(00-FF):" Byte 0x(00-FF):" FEN_STRING" S_DONNEE_ASCII Texte (1-8 caracteres):" Text (1-8 characters):" " 1 2 3 4 5 6 7 8" STRING S_NB_OCTET FEN_STRING" S_PERIODE Periode (10-5000ms):" Period (10-5000ms):" FEN_STRING" S_ID_EXISTANT Identificateur EXISTANT! " EXISTING identifier! " FEN_STRING" S_PB_MEMOIRE Memoire INSUFFISANTE! " NOT ENOUGH memory! " FEN_STRING" S_PB_FIC PROBLEME d'ACCES au systeme de fichier! " File system ACCESS PROBLEM! " FEN_STRING" S_MENU_SAUVE Mise a jour du fichier Sauvegarde sous un autre nom" File update Save with another name" FEN_STRING" S_SAUVE? La liste des trames a emettre a ete modifiee, voulez-vous la sauvegarder?" The list of the frames to transmit has been modified, do you want to save it?" FEN_STRING" S_CHARGEMENT Chargement du fichier..." File loading..." FEN_STRING" S_SAUVEGARDE Sauvegarde du fichier..." File saving..." FEN_STRING" S_DEBUT_FIC ( Liste de message(s) CAN ======================= Chaque message est decrit dans une ligne avec le format suivant: Entete Identifiant Periode(ms) Donnee(1 a 8), chaque valeur codee en decimal " ( CAN message(s) list =================== Each message is described in a row with the following format: Header Identifier Period(ms) Data(1 to 8), each value codded in decimal " FEN_STRING" S_FIN_FIC Fin de la liste. ) " List end. ) " " CANMES" STRING S_CANMES FEN_STRING" S_QUESTION_SAUVEGARDE Voulez-vous sauvegarder les trames?" Do you want to save the frames?" FEN_STRING" S_MENU_LIT_FIC Remplacer les trames Ajouter les trames" Replace the frames Add the frames" HERE BIN 0011101111011100 , ( 0 ) 0101011001100110 , 1010110000110011 , 1100111111110101 , 1010110000110011 , 1100110100110101 , 0110000010000010 , 0011111111111100 , 0000010000100000 , 0000010000100000 , 0000111000100000 , 1111101111111111 , 0000111000100000 , 0000000001110000 , 1111111111011111 , 0000000001110000 , 0010111111101100 , ( 1 ) 0100110000110110 , 1010111111101011 , 1100110000110101 , 1010110000110011 , 1100111111100101 , 0110000000001010 , 0011111111111100 , 0000010000100000 , 0000010000100000 , 0000111000100000 , 1111101111111111 , 0000111000100000 , 0000000001110000 , 1111111111011111 , 0000000001110000 , 0011110000000000 , ( 2 --> point de modification ) 0111101000000000 , 1011001100000000 , 1101011100000000 , 1110101100000000 , 1100110100000000 , 0101111000000000 , 0011110000000000 , CONSTANT SYMBOLE_FEN DECIMAL 0 VARIABLE FEN_A 0 VARIABLE FEN_B 0 VARIABLE AFF_EMI_A 0 VARIABLE AFF_EMI_B 0 VARIABLE IND_EMI_A 0 VARIABLE IND_EMI_B 0 VARIABLE CHG_EMI_A 0 VARIABLE FIC_EMI_A 0 FIC_EMI_A 2! 0 VARIABLE IND_MRQ_EMI_B 0 VARIABLE IND_MRQ_EMI_A 0 VARIABLE CHG_EMI_B 0 VARIABLE FIC_EMI_B 0 FIC_EMI_B 2! 0 VARIABLE AFF_REC_A 0 VARIABLE AFF_REC_B 0 VARIABLE AFF_REC_M_A 0 VARIABLE AFF_REC_M_B 0 VARIABLE CNT_REC_A 0 VARIABLE CNT_REC_B 0 VARIABLE AFF_SOR_A 0 VARIABLE AFF_SOR_B 0 VARIABLE ADR_EMI_A 0 ADR_EMI_A 2! 0 VARIABLE ADR_EMI_B 0 ADR_EMI_B 2! 0 VARIABLE ADR_REC_A 0 ADR_REC_A 2! 0 VARIABLE ADR_REC_B 0 ADR_REC_B 2! 0 VARIABLE ADR_REC_N_A 0 ADR_REC_N_A 2! 0 VARIABLE ADR_REC_N_B 0 ADR_REC_N_B 2! 0 VARIABLE IND_REC_A 0 VARIABLE IND_REC_B 0 VARIABLE RAF_REC_A 0 VARIABLE RAF_REC_B 0 VARIABLE ACTION_SOURIS_A 0 VARIABLE ACTION_SOURIS_B 0 VARIABLE ESC_A 0 VARIABLE ESC_B 0 VARIABLE ETAT_A 0 VARIABLE ETAT_B HERE 22 2/ ALLOT CONSTANT TMP_MESSAGE_A HERE 22 2/ ALLOT CONSTANT TMP_MESSAGE_B HERE 256 2/ ALLOT CONSTANT SAUVE_S_FORMAT FEN: ICONE_FEN >R 16 DUP FEN_TEINTES_? DROP >R DROP DROP DROP DROP R> R@ FEN_TAILLE_? >R 16- 2/ R> 16- 2/ SYMBOLE_FEN R@ FEN_B @ = 32 AND + R> FEN_TRACE_MOTIF_RELIEF DROP DROP DROP DROP DROP ; FEN: FERME_FEN >R ICONE_FEN R> FEN_ICONE ; FEN: A_PROPOS_FEN >R S_A_PROPOS R> FEN_DIALOGUE_MESSAGE ; : SP_TEINTE_RVB ( c --> r,v,b ) DUP 3 AND >R DUP -4 LSH 12 AND R@ + DUP 4 LSH + SWAP DUP 4/ 12 AND R> + DUP 4 LSH + SWAP 15 AND DUP 4 LSH + ; : SP_AF_LIGNE_CAN ( c_car,c_fond,y0,adr_mes,fen --> - ) >R DUP @ 65535 AND 4+ 4/ 2/ S_VIDE 51+ DUP 5- 5 32 FILL BEGIN >R 10 /MOD SWAP 48+ R@ C! R> 1- OVER 0= UNTIL DROP DROP 6+ DUP 2@ S_VIDE 10+ OVER 2048 < IF 4- DUP 5 32 FILL 1- 3 ELSE 8 THEN 0 DO >R DUP 15 AND 48+ DUP 57 > 7 AND + R@ C! 4/ 4/ R> 1- LOOP DROP DROP S_VIDE 14+ 32 DUP FILL 4+ DUP @ ?DUP IF >R 2+ R> 0 DO DUP C@ DUP DUP 32 < OVER 127 > OR IF DROP 46 THEN S_VIDE 38+ I + C! DUP 15 AND 48+ DUP 57 > 7 AND + S_VIDE 15+ I 2* + I + C! 4/ 4/ 15 AND 48+ DUP 57 > 7 AND + S_VIDE 14+ I 2* + I + C! 1+ LOOP THEN DROP OVER 2 XOR 2 3 PICK OVER 13+ OVER 11+ R@ FEN_TRACE_REC OVER 16 3 PICK OVER 55+ OVER 11+ R@ FEN_TRACE_REC OVER 2 XOR 72 3 PICK OVER 20+ OVER 11+ R@ FEN_TRACE_REC OVER 93 3 PICK OVER 13+ OVER 11+ R@ FEN_TRACE_REC OVER 2 XOR 107 3 PICK OVER 6+ OVER 11+ R@ FEN_TRACE_REC OVER 114 3 PICK OVER 13+ OVER 11+ R@ FEN_TRACE_REC OVER 2 XOR 128 3 PICK OVER 6+ OVER 11+ R@ FEN_TRACE_REC OVER 135 3 PICK OVER 13+ OVER 11+ R@ FEN_TRACE_REC OVER 2 XOR 149 3 PICK OVER 6+ OVER 11+ R@ FEN_TRACE_REC OVER 156 3 PICK OVER 13+ OVER 11+ R@ FEN_TRACE_REC OVER 2 XOR 170 3 PICK OVER 6+ OVER 11+ R@ FEN_TRACE_REC OVER 177 3 PICK OVER 13+ OVER 11+ R@ FEN_TRACE_REC OVER 2 XOR 191 3 PICK OVER 6+ OVER 11+ R@ FEN_TRACE_REC OVER 198 3 PICK OVER 13+ OVER 11+ R@ FEN_TRACE_REC OVER 2 XOR 212 3 PICK OVER 6+ OVER 11+ R@ FEN_TRACE_REC OVER 219 3 PICK OVER 13+ OVER 11+ R@ FEN_TRACE_REC OVER 2 XOR 233 3 PICK OVER 6+ OVER 11+ R@ FEN_TRACE_REC OVER 240 3 PICK OVER 13+ OVER 11+ R@ FEN_TRACE_REC OVER 2 XOR 254 3 PICK OVER 6+ OVER 11+ R@ FEN_TRACE_REC OVER 261 3 PICK OVER 55+ OVER 11+ R@ FEN_TRACE_REC OVER 2 XOR 317 3 PICK OVER 6+ OVER 11+ R@ FEN_TRACE_REC OVER 324 3 PICK OVER 34+ OVER 11+ R@ FEN_TRACE_REC SWAP 2 XOR 359 3 PICK OVER 20+ OVER 11+ R@ FEN_TRACE_REC >R CARACTERES_GRAPHIQUES 2 R> 1+ S_VIDE COUNT R> FEN_TRACE_CHAINE DROP DROP DROP DROP DROP ; FEN: SP_AF_CAN_A DUP >R FEN_TAILLE_? DROP 64 > IF FEN_TEINTES_? AFF_EMI_A @ DUP 8 = IF ADR_EMI_A 2@ DUP IF @ THEN DUP 65535 AND 10 /MOD SWAP 48+ S_CARTE_A 35+ DUP >R C! ?DUP IF 10 /MOD SWAP 48+ R> 1- DUP >R C! ?DUP IF 10 /MOD SWAP 48+ R> 1- DUP >R C! ?DUP IF 10 /MOD SWAP 48+ R> 1- DUP >R C! ?DUP IF 48+ ELSE 32 THEN R> 1- C! ELSE R> 2- 2 32 FILL THEN ELSE R> 3- 3 32 FILL THEN ELSE R> 4- 4 32 FILL THEN 7 PICK [ 2 30 7 * + LITERAL 8 26 12 * + LITERAL ] OVER 34+ OVER 11+ R@ FEN_TRACE_REC 4 PICK CARACTERES_GRAPHIQUES [ 2 30 7 * + LITERAL 9 26 12 * + LITERAL ] S_CARTE_A 31+ 5 R@ FEN_TRACE_CHAINE DROP DROP DROP DROP DROP 8- 0 MAX IND_EMI_A DUP >R @ MIN R> ! 8 DUP CHG_EMI_A @ IF 5 PICK ELSE 8 PICK 2 XOR THEN [ 2 54 7 * + 2+ LITERAL ] 4 [ SYMBOLE_FEN 64+ LITERAL ] R@ FEN_TRACE_MOTIF DROP DROP DROP DROP DROP 6 PICK R@ FEN_DEVANT_? AFF_SOR_A @ AND [ 2 54 7 * + 2+ LITERAL ] 14 8 [ 8 12 * LITERAL ] IND_EMI_A @ 4+ 8 DUP ADR_EMI_A 2@ DUP IF @ THEN MAX R@ FEN_TRACE_POTAR THEN >R 8 R> - DUP 8 U< IF ADR_EMI_A 2@ ?DUP IF >R DUP IND_EMI_A @ + R> @ < NOT ELSE -1 THEN >R DUP 12 * [ 2 12+ LITERAL ] + R> IF >R DROP R> 6 PICK 2 3 PICK OVER [ 54 7 * 1- LITERAL ] + OVER 11+ R@ FEN_TRACE_REC ELSE SWAP IND_EMI_A @ + 20 * 2+ ADR_EMI_A 2@ + >R 3 PICK 7 PICK 9 AFF_EMI_A @ - ACTION_SOURIS_A @ = IF 2 XOR THEN 3 PICK R> R@ SP_AF_LIGNE_CAN THEN THEN DROP AFF_REC_A @ DUP 16 = IF ADR_REC_A 2@ DUP IF @ THEN DUP 65535 AND 10 /MOD SWAP 48+ S_CARTE_A 54+ DUP >R C! ?DUP IF 10 /MOD SWAP 48+ R> 1- DUP >R C! ?DUP IF 10 /MOD SWAP 48+ R> 1- DUP >R C! ?DUP IF 10 /MOD SWAP 48+ R> 1- DUP >R C! ?DUP IF 48+ ELSE 32 THEN R> 1- C! ELSE R> 2- 2 32 FILL THEN ELSE R> 3- 3 32 FILL THEN ELSE R> 4- 4 32 FILL THEN 7 PICK [ 2 49 7 * + LITERAL 8 26 12 * + LITERAL ] OVER 34+ OVER 11+ R@ FEN_TRACE_REC 4 PICK CARACTERES_GRAPHIQUES [ 2 49 7 * + LITERAL 9 26 12 * + LITERAL ] S_CARTE_A 50+ 5 R@ FEN_TRACE_CHAINE DROP DROP DROP DROP DROP 16- 0 MAX IND_REC_A DUP >R @ MIN R> ! 6 PICK R@ FEN_DEVANT_? AFF_SOR_A @ AND [ 2 54 7 * + 2+ LITERAL 6 10 12 * + LITERAL ] 8 [ 16 12 * LITERAL ] IND_REC_A @ 8+ 16 DUP ADR_REC_A 2@ DUP IF @ THEN MAX R@ FEN_TRACE_POTAR THEN >R 16 R> - DUP 16 U< IF ADR_REC_A 2@ ?DUP IF >R DUP IND_REC_A @ + R> @ < NOT ELSE -1 THEN >R DUP 12 * [ 6 10 12 * + LITERAL ] + R> IF >R DROP R> 6 PICK 2 3 PICK OVER [ 54 7 * 1- LITERAL ] + OVER 11+ R@ FEN_TRACE_REC ELSE SWAP IND_REC_A @ + 20 * 2+ ADR_REC_A 2@ + >R 3 PICK 7 PICK 3 PICK R> R@ SP_AF_LIGNE_CAN THEN THEN DROP DROP DROP DROP DROP DROP DROP THEN R> DROP ; FEN: SP_AF_CAN_B DUP >R FEN_TAILLE_? DROP 64 > IF FEN_TEINTES_? AFF_EMI_B @ DUP 8 = IF ADR_EMI_B 2@ DUP IF @ THEN DUP 65535 AND 10 /MOD SWAP 48+ S_CARTE_B 35+ DUP >R C! ?DUP IF 10 /MOD SWAP 48+ R> 1- DUP >R C! ?DUP IF 10 /MOD SWAP 48+ R> 1- DUP >R C! ?DUP IF 10 /MOD SWAP 48+ R> 1- DUP >R C! ?DUP IF 48+ ELSE 32 THEN R> 1- C! ELSE R> 2- 2 32 FILL THEN ELSE R> 3- 3 32 FILL THEN ELSE R> 4- 4 32 FILL THEN 7 PICK [ 2 30 7 * + LITERAL 8 26 12 * + LITERAL ] OVER 34+ OVER 11+ R@ FEN_TRACE_REC 4 PICK CARACTERES_GRAPHIQUES [ 2 30 7 * + LITERAL 9 26 12 * + LITERAL ] S_CARTE_B 31+ 5 R@ FEN_TRACE_CHAINE DROP DROP DROP DROP DROP 8- 0 MAX IND_EMI_B DUP >R @ MIN R> ! 8 DUP CHG_EMI_B @ IF 5 PICK ELSE 8 PICK 2 XOR THEN [ 2 54 7 * + 2+ LITERAL ] 4 [ SYMBOLE_FEN 64+ LITERAL ] R@ FEN_TRACE_MOTIF DROP DROP DROP DROP DROP 6 PICK R@ FEN_DEVANT_? AFF_SOR_B @ AND [ 2 54 7 * + 2+ LITERAL ] 14 8 [ 8 12 * LITERAL ] IND_EMI_B @ 4+ 8 DUP ADR_EMI_B 2@ DUP IF @ THEN MAX R@ FEN_TRACE_POTAR THEN >R 8 R> - DUP 8 U< IF ADR_EMI_B 2@ ?DUP IF >R DUP IND_EMI_B @ + R> @ < NOT ELSE -1 THEN >R DUP 12 * [ 2 12+ LITERAL ] + R> IF >R DROP R> 6 PICK 2 3 PICK OVER [ 54 7 * 1- LITERAL ] + OVER 11+ R@ FEN_TRACE_REC ELSE SWAP IND_EMI_B @ + 20 * 2+ ADR_EMI_B 2@ + >R 3 PICK 7 PICK 9 AFF_EMI_B @ - ACTION_SOURIS_B @ = IF 2 XOR THEN 3 PICK R> R@ SP_AF_LIGNE_CAN THEN THEN DROP AFF_REC_B @ DUP 16 = IF ADR_REC_B 2@ DUP IF @ THEN DUP 65535 AND 10 /MOD SWAP 48+ S_CARTE_B 54+ DUP >R C! ?DUP IF 10 /MOD SWAP 48+ R> 1- DUP >R C! ?DUP IF 10 /MOD SWAP 48+ R> 1- DUP >R C! ?DUP IF 10 /MOD SWAP 48+ R> 1- DUP >R C! ?DUP IF 48+ ELSE 32 THEN R> 1- C! ELSE R> 2- 2 32 FILL THEN ELSE R> 3- 3 32 FILL THEN ELSE R> 4- 4 32 FILL THEN 7 PICK [ 2 49 7 * + LITERAL 8 26 12 * + LITERAL ] OVER 34+ OVER 11+ R@ FEN_TRACE_REC 4 PICK CARACTERES_GRAPHIQUES [ 2 49 7 * + LITERAL 9 26 12 * + LITERAL ] S_CARTE_B 50+ 5 R@ FEN_TRACE_CHAINE DROP DROP DROP DROP DROP 16- 0 MAX IND_REC_B DUP >R @ MIN R> ! 6 PICK R@ FEN_DEVANT_? AFF_SOR_B @ AND [ 2 54 7 * + 2+ LITERAL 6 10 12 * + LITERAL ] 8 [ 16 12 * LITERAL ] IND_REC_B @ 8+ 16 DUP ADR_REC_B 2@ DUP IF @ THEN MAX R@ FEN_TRACE_POTAR THEN >R 16 R> - DUP 16 U< IF ADR_REC_B 2@ ?DUP IF >R DUP IND_REC_B @ + R> @ < NOT ELSE -1 THEN >R DUP 12 * [ 6 10 12 * + LITERAL ] + R> IF >R DROP R> 6 PICK 2 3 PICK OVER [ 54 7 * 1- LITERAL ] + OVER 11+ R@ FEN_TRACE_REC ELSE SWAP IND_REC_B @ + 20 * 2+ ADR_REC_B 2@ + >R 3 PICK 7 PICK 3 PICK R> R@ SP_AF_LIGNE_CAN THEN THEN DROP DROP DROP DROP DROP DROP DROP THEN R> DROP ; FEN: CHRONO_FEN_A DUP >R FEN_TAILLE_? >R 64 > R> 64 > AND IF FEN_B @ DUP FEN_TAILLE_? >R 64 > R> 64 > AND ETAT_B @ AND OVER FEN_DEVANT_? AND ETAT_A @ 0= OR IF DUP FEN_POSITION_? R@ FEN_POSITION_? ROT - >R [ 2 54 7 * + 2+ 8+ 2+ LITERAL ] + - R> OR IF DUP FEN_POSITION_? >R [ 2 54 7 * + 2+ 8+ 2+ LITERAL ] - R> R@ FEN_POSITION THEN THEN DROP -1 ELSE 0 THEN ETAT_A ! AFF_EMI_A @ ?DUP IF 1- AFF_EMI_A ! 1 ELSE 100 THEN AFF_REC_A @ ?DUP IF 1- AFF_REC_A ! DROP 1 ELSE RAF_REC_A DUP >R @ 1- DUP 0> IF R> ! ELSE DROP 17 AFF_REC_A ! 10 R> ! THEN THEN DUP 100 = IF -1 AFF_SOR_A ! THEN SP_AF_CAN_A CHRONO_FEN_A R> FEN_CHRONO ; FEN: CHRONO_FEN_B DUP >R FEN_TAILLE_? >R 64 > R> 64 > AND IF FEN_A @ DUP FEN_TAILLE_? >R 64 > R> 64 > AND ETAT_A @ AND OVER FEN_DEVANT_? AND ETAT_B @ 0= OR IF DUP FEN_POSITION_? R@ FEN_POSITION_? ROT - >R [ 2 54 7 * + 2+ 8+ 2+ LITERAL ] - - R> OR IF DUP FEN_POSITION_? >R [ 2 54 7 * + 2+ 8+ 2+ LITERAL ] + R> R@ FEN_POSITION THEN THEN DROP -1 ELSE 0 THEN ETAT_B ! AFF_EMI_B @ ?DUP IF 1- AFF_EMI_B ! 1 ELSE 100 THEN AFF_REC_B @ ?DUP IF 1- AFF_REC_B ! DROP 1 ELSE RAF_REC_B DUP >R @ 1- DUP 0> IF R> ! ELSE DROP 17 AFF_REC_B ! 10 R> ! THEN THEN DUP 100 = IF -1 AFF_SOR_B ! THEN SP_AF_CAN_B CHRONO_FEN_B R> FEN_CHRONO ; FEN: AFFICHE_FEN_A >R FEN_TEINTES_? R@ FEN_TAILLE_? 7 PICK 0 DUP 5 PICK 1- 1 R@ FEN_TRACE_REC 7 PICK 0 2 1 5 PICK 1- R@ FEN_TRACE_REC 8 PICK 2 DUP OVER [ 54 7 * 1- LITERAL ] + OVER 11+ R@ FEN_TRACE_REC 4 PICK CARACTERES_GRAPHIQUES 2 3 S_EMISSION COUNT R@ FEN_TRACE_CHAINE_RELIEF DROP DROP DROP DROP DROP 7 PICK 3 PICK 12- 2 OVER 11+ OVER 11+ R@ FEN_TRACE_REC 7 PICK 3 PICK 12- 14 OVER 1+ OVER [ 8 12 * 1- LITERAL ] + R@ FEN_TRACE_REC 7 PICK 3 PICK 2- 14 OVER 1+ OVER [ 8 12 * 1- LITERAL ] + R@ FEN_TRACE_REC 7 PICK 2 [ 2 9 12 * + LITERAL ] 5 PICK 1- OVER 3+ R@ FEN_TRACE_REC 8 PICK 2 [ 6 9 12 * + LITERAL ] OVER [ 54 7 * 1- LITERAL ] + OVER 11+ R@ FEN_TRACE_REC 4 PICK CARACTERES_GRAPHIQUES 2 [ 7 9 12 * + LITERAL ] S_RECEPTION COUNT R@ FEN_TRACE_CHAINE_RELIEF DROP DROP DROP DROP DROP 7 PICK 3 PICK 12- [ 6 9 12 * + LITERAL ] OVER 11+ OVER 11+ R@ FEN_TRACE_REC 7 PICK 3 PICK 12- [ 6 10 12 * + LITERAL ] OVER 1+ OVER [ 16 12 * 1- LITERAL ] + R@ FEN_TRACE_REC 7 PICK 3 PICK 2- [ 6 10 12 * + LITERAL ] OVER 1+ OVER [ 16 12 * 1- LITERAL ] + R@ FEN_TRACE_REC 7 PICK 2 3 PICK 16- 5 PICK 1- OVER 15+ R@ FEN_TRACE_REC CW_NUMERO CW@ 48+ S_CARTE_A 16+ C! 4 PICK CARACTERES_GRAPHIQUES 2 [ 9 26 12 * + LITERAL ] S_CARTE_A COUNT R> FEN_TRACE_CHAINE DROP DROP DROP DROP DROP -1 AFF_SOR_A ! 9 AFF_EMI_A ! 17 AFF_REC_A ! 10 RAF_REC_A ! DROP DROP DROP DROP DROP DROP DROP DROP ; FEN: AFFICHE_FEN_B >R FEN_TEINTES_? R@ FEN_TAILLE_? 7 PICK 0 DUP 5 PICK 1- 1 R@ FEN_TRACE_REC 7 PICK 0 2 1 5 PICK 1- R@ FEN_TRACE_REC 8 PICK 2 DUP OVER [ 54 7 * 1- LITERAL ] + OVER 11+ R@ FEN_TRACE_REC 4 PICK CARACTERES_GRAPHIQUES 2 3 S_EMISSION COUNT R@ FEN_TRACE_CHAINE_RELIEF DROP DROP DROP DROP DROP 7 PICK 3 PICK 12- 2 OVER 11+ OVER 11+ R@ FEN_TRACE_REC 7 PICK 3 PICK 12- 14 OVER 1+ OVER [ 8 12 * 1- LITERAL ] + R@ FEN_TRACE_REC 7 PICK 3 PICK 2- 14 OVER 1+ OVER [ 8 12 * 1- LITERAL ] + R@ FEN_TRACE_REC 7 PICK 2 [ 2 9 12 * + LITERAL ] 5 PICK 1- OVER 3+ R@ FEN_TRACE_REC 8 PICK 2 [ 6 9 12 * + LITERAL ] OVER [ 54 7 * 1- LITERAL ] + OVER 11+ R@ FEN_TRACE_REC 4 PICK CARACTERES_GRAPHIQUES 2 [ 7 9 12 * + LITERAL ] S_RECEPTION COUNT R@ FEN_TRACE_CHAINE_RELIEF DROP DROP DROP DROP DROP 7 PICK 3 PICK 12- [ 6 9 12 * + LITERAL ] OVER 11+ OVER 11+ R@ FEN_TRACE_REC 7 PICK 3 PICK 12- [ 6 10 12 * + LITERAL ] OVER 1+ OVER [ 16 12 * 1- LITERAL ] + R@ FEN_TRACE_REC 7 PICK 3 PICK 2- [ 6 10 12 * + LITERAL ] OVER 1+ OVER [ 16 12 * 1- LITERAL ] + R@ FEN_TRACE_REC 7 PICK 2 3 PICK 16- 5 PICK 1- OVER 15+ R@ FEN_TRACE_REC CW_NUMERO CW@ 48+ S_CARTE_B 16+ C! 4 PICK CARACTERES_GRAPHIQUES 2 [ 9 26 12 * + LITERAL ] S_CARTE_B COUNT R> FEN_TRACE_CHAINE DROP DROP DROP DROP DROP -1 AFF_SOR_B ! 9 AFF_EMI_B ! 17 AFF_REC_B ! 10 RAF_REC_B ! DROP DROP DROP DROP DROP DROP DROP DROP ; : INDEX_ID_? ( id,adr_pnt_liste --> id,adr_pnt_liste,index,<=> ) DUP 2@ ?DUP IF 0 OVER @ DUP 2/ ( id,adr_pnt_liste,adr_liste,ind_min,ind_max,ind ) BEGIN 6 PICK 5 PICK 8+ 3 PICK 20 * + 2@ - ?DUP IF 0< IF >R DROP R> OVER OVER < IF OVER >R DUP R@ - 2/ R> + 0 ELSE DROP -1 DUP THEN ELSE >R >R DROP R> R> 1+ SWAP OVER OVER < IF OVER >R DUP R@ - 2/ R> + 0 ELSE DROP 1- 1 -1 THEN THEN ELSE >R DROP DROP R> 0 -1 THEN UNTIL >R >R DROP R> R> ELSE 0 -1 THEN ; : INSERE_TRAME ( fen,tmp_mes --> fen,tmp_mes,erreur ) DUP 6+ 2@ 3 PICK FEN_A @ - IF ADR_EMI_B ELSE ADR_EMI_A THEN INDEX_ID_? ( fen,tmp_mes,id,adr_pnt_liste,ind,<=> ) ?DUP IF 0> - OVER 2@ ?DUP IF @ 1+ ELSE 1 THEN 20 * 2+ MEMOIRE_ALLOUE ?DUP IF ( fen,tmp_mes,id,adr_pnt_liste,ind',nouvelle_adresse_liste ) 3 PICK 2@ ?DUP IF @ 1+ OVER ! OVER IF 3 PICK 2@ 2+ OVER 2+ 4 PICK 20 * CMOVE THEN ELSE 1 OVER ! THEN 5 ROLL OVER 2+ 4 PICK 20 * + 20 CMOVE OVER 1+ OVER @ < IF 3 PICK 2@ 2+ 3 PICK 20 * + OVER DUP @ >R 2+ 4 PICK 1+ 20 * + R> 5 PICK - 1- 20 * CMOVE THEN 3 PICK 2@ ?DUP IF MEMOIRE_LIBERE DROP THEN ROT 2! 8- 0 MAX 3 PICK FEN_A @ - IF IND_EMI_B ! -1 CHG_EMI_B ! 9 AFF_EMI_B ! ELSE IND_EMI_A ! -1 CHG_EMI_A ! 9 AFF_EMI_A ! THEN 0 ( Insertion correctement effectuee ) ELSE DROP DROP DROP 2 ( Memoire insuffisante ) THEN ELSE DROP DROP DROP 1 ( Identificateur deja existant ) THEN ; : SP_SAUVEGARDE ( fen --> - ) DUP >R FEN_A @ - IF FIC_EMI_B ELSE FIC_EMI_A THEN 2@ DUP 0 DUP R@ FEN_DIALOGUE_FICHIER ?DUP IF DUP 1+ IF SWAP ?DUP IF MEMOIRE_LIBERE DROP THEN DUP R@ FEN_A @ - IF FIC_EMI_B ELSE FIC_EMI_A THEN 2! 0 FOPEN DROP S_DEBUT_FIC COUNT 3 PICK FWRITE 0> IF R@ FEN_A @ - IF ADR_EMI_B ELSE ADR_EMI_A THEN 2@ ?DUP IF BASE @ >R DECIMAL S_FORMAT SAUVE_S_FORMAT 256 CMOVE DUP 2+ SWAP @ 0 DO 0 <# 10 HOLD 13 HOLD DROP OVER 10+ DUP @ DUP >R + 2+ R> 0 DO 1- DUP >R C@ 255 AND #S DROP R> 32 HOLD LOOP DROP OVER @ 65535 AND 4/ 2/ #S 32 HOLD DROP OVER 6+ 2@ #S 32 HOLD 83 HOLD 69 HOLD 77 HOLD 78 HOLD 65 HOLD 67 HOLD #> 4 PICK FWRITE DROP 20+ LOOP R> BASE ! SAUVE_S_FORMAT S_FORMAT 256 CMOVE DROP THEN S_FIN_FIC COUNT 3 PICK FWRITE DROP THEN FCLOSE IF BELL S_PB_FIC R@ FEN_DIALOGUE_MESSAGE ELSE 0 R@ FEN_A @ - IF 9 AFF_EMI_B ! CHG_EMI_B ELSE 9 AFF_EMI_A ! CHG_EMI_A THEN ! THEN ELSE DROP DROP THEN ELSE DROP BELL S_PB_FIC R@ FEN_DIALOGUE_MESSAGE THEN R> DROP ; : SP_CONVERSION ( adr1 --> adr2,n ) 0 BEGIN OVER C@ 48- DUP 10 U< IF >R >R 1+ R> 10 * R> + 0 ELSE DROP -1 THEN UNTIL ; : SP_CHARGEMENT ( fen --> - ) DUP >R FEN_A @ - IF CHG_EMI_B ELSE CHG_EMI_A THEN DUP @ IF -1 S_QUESTION_SAUVEGARDE R@ FEN_DIALOGUE_OUI/NON IF R@ SP_SAUVEGARDE ELSE 0 OVER ! THEN THEN DROP R@ FEN_A @ - IF ADR_EMI_B ELSE ADR_EMI_A THEN DUP 2@ IF 3 S_MENU_LIT_FIC 0 R@ FEN_DIALOGUE_CHOIX 1 = IF DUP 2@ MEMOIRE_LIBERE DROP 0 OVER 2! THEN ELSE -1 R@ FEN_A @ - IF CHG_EMI_B ELSE CHG_EMI_A THEN ! THEN R@ FEN_A @ - IF FIC_EMI_B ELSE FIC_EMI_A THEN DUP 2@ -1 0 R@ FEN_DIALOGUE_FICHIER ?DUP IF DUP 1+ IF OVER 2@ ?DUP IF MEMOIRE_LIBERE DROP THEN DUP ROT 2! -1 FOPEN DUP 0> IF DUP MEMOIRE_ALLOUE ?DUP IF DUP DUP 4 ROLL 5 PICK FREAD DUP 0> IF R@ FEN_A @ - IF TMP_MESSAGE_B ELSE TMP_MESSAGE_A THEN 0 OVER 2+ 2! SWAP ( adr_pnt_liste,pnt_desc_fic,adr_fic,adr_fic,tmp_mes,lng_fic ) BEGIN 0 3 PICK 10+ ! 3 PICK 6 S_CANMES COUNT STRCMP 0= IF >R >R 6+ R> R> 6- DUP 0> IF 3 PICK C@ 32 = IF >R >R 1+ R> R> 1- DUP 0> IF ( Identifiant ) 3 PICK SP_CONVERSION 4 PICK 6+ 2! >R ROT + R@ ROT ROT R> - DUP 0> IF 3 PICK C@ 32 = IF >R >R 1+ R> R> 1- DUP 0> IF ( Periode ) 3 PICK SP_CONVERSION 4* 2* 4 PICK ! >R ROT + R@ ROT ROT R> - OVER 12+ DUP 8+ SWAP DO ( Donnee(s) ) DUP 0> IF 3 PICK C@ 32 = IF >R >R 1+ R> R> 1- DUP 0> IF 1 3 PICK 10+ +! 3 PICK SP_CONVERSION I C! >R ROT + R@ ROT ROT R> - THEN ELSE LEAVE THEN ELSE LEAVE THEN LOOP OVER 10+ @ IF R@ 3 PICK INSERE_TRAME >R DROP DROP R> ?DUP IF 1- IF BELL S_PB_MEMOIRE R@ FEN_DIALOGUE_MESSAGE DUP XOR ELSE ( Remplacement d'une trame existante ) OVER 6+ 2@ 7 PICK INDEX_ID_? IF DROP DROP DROP ( Eventualite normalement impossible ) ELSE >R >R DROP OVER R> 2@ 2+ R> 20 * + 20 CMOVE THEN THEN THEN -1 R@ FEN_A @ - IF CHG_EMI_B ELSE CHG_EMI_A THEN ! THEN THEN THEN THEN THEN THEN THEN THEN DUP IF BEGIN 3 PICK C@ 32 < IF -1 ELSE >R >R 1+ R> R> 1- DUP 0> NOT THEN UNTIL DUP IF BEGIN 3 PICK C@ 32 < IF >R >R 1+ R> R> 1- DUP 0> NOT ELSE -1 THEN UNTIL THEN THEN DUP 0> NOT UNTIL DROP DROP ELSE DROP THEN DROP MEMOIRE_LIBERE DROP ELSE DROP BELL S_PB_MEMOIRE R@ FEN_DIALOGUE_MESSAGE THEN ELSE DROP THEN FCLOSE IF BELL S_PB_FIC R@ FEN_DIALOGUE_MESSAGE THEN ELSE DROP DROP THEN ELSE DROP BELL S_PB_FIC R@ FEN_DIALOGUE_MESSAGE THEN DROP 9 R> FEN_A @ - IF AFF_EMI_B ELSE AFF_EMI_A THEN ! ; FEN: SOURIS_FEN_A >R OVER OVER OR IF ACTION_SOURIS_A @ ?DUP IF DUP 0< IF 1+ ?DUP IF 1+ IF 3 PICK [ 14 12 8 * + 14+ LITERAL ] - 0 MAX [ 12 16 * LITERAL ] MIN ADR_REC_A 2@ @ DUP >R [ 12 16 * LITERAL ] */ 8- 0 MAX R> 16- 0 MAX MIN IND_REC_A DUP >R @ OVER - IF 17 AFF_REC_A ! THEN R> ! ELSE 3 PICK 14- 0 MAX [ 12 8 * LITERAL ] MIN ADR_EMI_A 2@ @ DUP >R [ 12 8 * LITERAL ] */ 4- 0 MAX R> 8- 0 MAX MIN IND_EMI_A DUP >R @ OVER - IF 9 AFF_EMI_A ! THEN R> ! THEN ELSE R@ SP_SAUVEGARDE THEN ELSE 1- IND_EMI_A @ + 20 * 2+ ADR_EMI_A 2@ + DUP TMP_MESSAGE_A 20 CMOVE 5 PICK [ 7 10 * 5+ LITERAL ] - DUP 0> IF [ 7 26 * LITERAL ] - DUP 0> IF [ 7 9 * LITERAL ] - 0> IF ( edition de la periode ) TMP_MESSAGE_A BEGIN DUP @ 65535 AND 4/ 2/ 10 S_PERIODE R@ FEN_DIALOGUE_NOMBRE 4* 2* OVER @ 65535 AND OVER - IF DUP [ 9 4* 2* LITERAL ] > OVER [ 5001 4* 2* LITERAL ] < AND IF 3 PICK ! -1 DUP CHG_EMI_A ! ELSE BELL DROP 0 THEN ELSE DROP -1 THEN UNTIL DROP ELSE ( edition des donnees en ASCII ) TMP_MESSAGE_A DUP 12+ DUP >R 8+ R> DO I C@ 32 U< IF 46 I C! THEN LOOP DUP 12+ DUP 1- C@ DUP >R + 9 R> - 32 FILL OVER 12+ BEGIN OVER 12+ 8 S_DONNEE_ASCII R@ FEN_DIALOGUE_TEXTE DUP 0< IF DROP -1 ELSE DUP 0> OVER 9 < AND IF OVER 1- C! OVER 12+ DUP >R 8+ R> DO I C@ 46- IF I C@ OVER C! THEN 1+ LOOP -1 DUP CHG_EMI_A ! ELSE DROP BELL 0 THEN THEN UNTIL DROP DROP THEN ELSE ( edition des donnees en HEXA ) 21 /MOD SWAP DROP -7 MAX 8+ TMP_MESSAGE_A 11+ C@ DUP 8 < IF 1 > IF 4 S_MENU_DONNEE 0 R@ FEN_DIALOGUE_CHOIX ELSE 3 S_MENU_DONNEE_1 0 R@ FEN_DIALOGUE_CHOIX THEN ELSE DROP 3 S_MENU_DONNEE_8 0 R@ FEN_DIALOGUE_CHOIX DUP 2 = - THEN ?DUP IF DUP 3 = IF ( supprimer ) DROP TMP_MESSAGE_A 11+ DUP >R OVER + 1+ DUP 1- 8 4 PICK - CMOVE 1 R> -! -1 CHG_EMI_A ! ELSE 1 > IF ( inserer ) TMP_MESSAGE_A 11+ DUP >R OVER + DUP 1+ 7 4 PICK - CMOVE R@ C@ 1+ 8 MIN R> C! -1 CHG_EMI_A ! THEN ( modifier ) TMP_MESSAGE_A 11+ OVER + BEGIN DUP C@ 255 AND 16 S_DONNEE_HEXA R@ FEN_DIALOGUE_NOMBRE OVER C@ 255 AND OVER - IF DUP 256 U< IF OVER C! -1 DUP CHG_EMI_A ! ELSE BELL DROP 0 THEN ELSE DROP -1 THEN UNTIL DROP THEN THEN DROP TMP_MESSAGE_A 11+ OVER 11+ 9 CMOVE THEN ELSE DROP 3 S_MENU_ID 0 R@ FEN_DIALOGUE_CHOIX ?DUP IF 1- IF ( suppression trame ) ADR_EMI_A DUP 2@ DUP @ 1- ?DUP IF DUP 20 * 2+ MEMOIRE_ALLOUE ?DUP IF OVER OVER ! IND_EMI_A @ ACTION_SOURIS_A @ + DUP IF >R 3 PICK 2+ OVER 2+ R@ 20 * CMOVE R> THEN OVER @ OVER - ?DUP IF >R >R 3 PICK 2+ R@ 1+ 20 * + OVER 2+ R> 20 * + R@ 20 * CMOVE R> THEN DROP >R DROP R> ROT 2! MEMOIRE_LIBERE DROP -1 CHG_EMI_A ! ELSE DROP DROP DROP S_PB_MEMOIRE R@ FEN_DIALOGUE_MESSAGE THEN ELSE >R >R 0 R> 2! R> MEMOIRE_LIBERE DROP THEN ELSE ( addition trame ) R@ TMP_MESSAGE_A BEGIN DUP 6+ 2@ 16 S_IDENTIFICATEUR R@ FEN_DIALOGUE_NOMBRE DUP 536870912 U< IF OVER 6+ 2! INSERE_TRAME ?DUP IF 1- IF S_PB_MEMOIRE ELSE S_ID_EXISTANT THEN BELL OVER FEN_DIALOGUE_MESSAGE THEN -1 ELSE BELL DUP XOR THEN UNTIL DROP DROP THEN THEN THEN DROP 9 AFF_EMI_A ! THEN THEN ELSE R@ FEN_TAILLE_? 6 PICK 3 PICK 12- < IF 6 PICK 2 < 6 PICK 14 < OR IF 0 DUP ELSE 5 PICK 14- 12 /MOD SWAP DROP DUP IND_EMI_A @ + ADR_EMI_A 2@ ?DUP IF @ ?DUP IF < OVER 8 < AND ELSE DUP XOR THEN ELSE DUP XOR THEN IF 1+ 576 ELSE DUP XOR DUP THEN THEN ELSE 6 PICK 3 PICK 10- < 7 PICK 4 PICK 3- > OR 6 PICK 4 < OR IF 0 DUP ELSE 5 PICK 12 < CHG_EMI_A @ AND IF -1 576 ELSE 5 PICK 14 < IF 0 DUP ELSE 5 PICK [ 14 12 8 * + LITERAL ] < IF -2 640 ELSE 5 PICK [ 14 12 8 * + 14+ LITERAL ] < IF 0 DUP ELSE 5 PICK [ 14 12 8 * + 14+ 12 16 * + LITERAL ] < IF -3 640 ELSE 0 DUP THEN THEN THEN THEN THEN THEN THEN GRAPHIQUES_16 + R@ FEN_MOTIF_SOURIS DUP ACTION_SOURIS_A @ - IF FEN_TEINTES_? ACTION_SOURIS_A @ DUP 0> IF 3 PICK 7 PICK 3 PICK 12 * 2+ 4 PICK 1- IND_EMI_A @ + 20 * 2+ ADR_EMI_A 2@ + R@ SP_AF_LIGNE_CAN THEN DROP 7 PICK DUP 0> IF 3 PICK 7 PICK 2 XOR 3 PICK 12 * 2+ 4 PICK 1- IND_EMI_A @ + 20 * 2+ ADR_EMI_A 2@ + R@ SP_AF_LIGNE_CAN THEN DROP DROP DROP DROP DROP DROP DROP THEN ACTION_SOURIS_A ! DROP DROP THEN DROP DROP DROP DROP R> DROP ; FEN: SOURIS_FEN_B >R OVER OVER OR IF ACTION_SOURIS_B @ ?DUP IF DUP 0< IF 1+ ?DUP IF 1+ IF 3 PICK [ 14 12 8 * + 14+ LITERAL ] - 0 MAX [ 12 16 * LITERAL ] MIN ADR_REC_B 2@ @ DUP >R [ 12 16 * LITERAL ] */ 8- 0 MAX R> 16- 0 MAX MIN IND_REC_B DUP >R @ OVER - IF 17 AFF_REC_B ! THEN R> ! ELSE 3 PICK 14- 0 MAX [ 12 8 * LITERAL ] MIN ADR_EMI_B 2@ @ DUP >R [ 12 8 * LITERAL ] */ 4- 0 MAX R> 8- 0 MAX MIN IND_EMI_B DUP >R @ OVER - IF 9 AFF_EMI_B ! THEN R> ! THEN ELSE R@ SP_SAUVEGARDE THEN ELSE 1- IND_EMI_B @ + 20 * 2+ ADR_EMI_B 2@ + DUP TMP_MESSAGE_B 20 CMOVE 5 PICK [ 7 10 * 5+ LITERAL ] - DUP 0> IF [ 7 26 * LITERAL ] - DUP 0> IF [ 7 9 * LITERAL ] - 0> IF ( edition de la periode ) TMP_MESSAGE_B BEGIN DUP @ 65535 AND 4/ 2/ 10 S_PERIODE R@ FEN_DIALOGUE_NOMBRE 4* 2* OVER @ 65535 AND OVER - IF DUP [ 9 4* 2* LITERAL ] > OVER [ 5001 4* 2* LITERAL ] < AND IF 3 PICK ! -1 DUP CHG_EMI_B ! ELSE BELL DROP 0 THEN ELSE DROP -1 THEN UNTIL DROP ELSE ( edition des donnees en ASCII ) TMP_MESSAGE_B DUP 12+ DUP >R 8+ R> DO I C@ 32 U< IF 46 I C! THEN LOOP DUP 12+ DUP 1- C@ DUP >R + 9 R> - 32 FILL OVER 12+ BEGIN OVER 12+ 8 S_DONNEE_ASCII R@ FEN_DIALOGUE_TEXTE DUP 0< IF DROP -1 ELSE DUP 0> OVER 9 < AND IF OVER 1- C! OVER 12+ DUP >R 8+ R> DO I C@ 46- IF I C@ OVER C! THEN 1+ LOOP -1 DUP CHG_EMI_B ! ELSE DROP BELL 0 THEN THEN UNTIL DROP DROP THEN ELSE ( edition des donnees en HEXA ) 21 /MOD SWAP DROP -7 MAX 8+ TMP_MESSAGE_B 11+ C@ DUP 8 < IF 1 > IF 4 S_MENU_DONNEE 0 R@ FEN_DIALOGUE_CHOIX ELSE 3 S_MENU_DONNEE_1 0 R@ FEN_DIALOGUE_CHOIX THEN ELSE DROP 3 S_MENU_DONNEE_8 0 R@ FEN_DIALOGUE_CHOIX DUP 2 = - THEN ?DUP IF DUP 3 = IF ( supprimer ) DROP TMP_MESSAGE_B 11+ DUP >R OVER + 1+ DUP 1- 8 4 PICK - CMOVE 1 R> -! -1 CHG_EMI_B ! ELSE 1 > IF ( inserer ) TMP_MESSAGE_B 11+ DUP >R OVER + DUP 1+ 7 4 PICK - CMOVE R@ C@ 1+ 8 MIN R> C! -1 CHG_EMI_B ! THEN ( modifier ) TMP_MESSAGE_B 11+ OVER + BEGIN DUP C@ 255 AND 16 S_DONNEE_HEXA R@ FEN_DIALOGUE_NOMBRE OVER C@ 255 AND OVER - IF DUP 256 U< IF OVER C! -1 DUP CHG_EMI_B ! ELSE BELL DROP 0 THEN ELSE DROP -1 THEN UNTIL DROP THEN THEN DROP TMP_MESSAGE_B 11+ OVER 11+ 9 CMOVE THEN ELSE DROP 3 S_MENU_ID 0 R@ FEN_DIALOGUE_CHOIX ?DUP IF 1- IF ( suppression trame ) ADR_EMI_B DUP 2@ DUP @ 1- ?DUP IF DUP 20 * 2+ MEMOIRE_ALLOUE ?DUP IF OVER OVER ! IND_EMI_B @ ACTION_SOURIS_B @ + DUP IF >R 3 PICK 2+ OVER 2+ R@ 20 * CMOVE R> THEN OVER @ OVER - ?DUP IF >R >R 3 PICK 2+ R@ 1+ 20 * + OVER 2+ R> 20 * + R@ 20 * CMOVE R> THEN DROP >R DROP R> ROT 2! MEMOIRE_LIBERE DROP -1 CHG_EMI_B ! ELSE DROP DROP DROP S_PB_MEMOIRE R@ FEN_DIALOGUE_MESSAGE THEN ELSE >R >R 0 R> 2! R> MEMOIRE_LIBERE DROP THEN ELSE ( addition trame ) R@ TMP_MESSAGE_B BEGIN DUP 6+ 2@ 16 S_IDENTIFICATEUR R@ FEN_DIALOGUE_NOMBRE DUP 536870912 U< IF OVER 6+ 2! INSERE_TRAME ?DUP IF 1- IF S_PB_MEMOIRE ELSE S_ID_EXISTANT THEN BELL OVER FEN_DIALOGUE_MESSAGE THEN -1 ELSE BELL DUP XOR THEN UNTIL DROP DROP THEN THEN THEN DROP 9 AFF_EMI_B ! THEN THEN ELSE R@ FEN_TAILLE_? 6 PICK 3 PICK 12- < IF 6 PICK 2 < 6 PICK 14 < OR IF 0 DUP ELSE 5 PICK 14- 12 /MOD SWAP DROP DUP IND_EMI_B @ + ADR_EMI_B 2@ ?DUP IF @ ?DUP IF < OVER 8 < AND ELSE DUP XOR THEN ELSE DUP XOR THEN IF 1+ 576 ELSE DUP XOR DUP THEN THEN ELSE 6 PICK 3 PICK 10- < 7 PICK 4 PICK 3- > OR 6 PICK 4 < OR IF 0 DUP ELSE 5 PICK 12 < CHG_EMI_B @ AND IF -1 576 ELSE 5 PICK 14 < IF 0 DUP ELSE 5 PICK [ 14 12 8 * + LITERAL ] < IF -2 640 ELSE 5 PICK [ 14 12 8 * + 14+ LITERAL ] < IF 0 DUP ELSE 5 PICK [ 14 12 8 * + 14+ 12 16 * + LITERAL ] < IF -3 640 ELSE 0 DUP THEN THEN THEN THEN THEN THEN THEN GRAPHIQUES_16 + R@ FEN_MOTIF_SOURIS DUP ACTION_SOURIS_B @ - IF FEN_TEINTES_? ACTION_SOURIS_B @ DUP 0> IF 3 PICK 7 PICK 3 PICK 12 * 2+ 4 PICK 1- IND_EMI_B @ + 20 * 2+ ADR_EMI_B 2@ + R@ SP_AF_LIGNE_CAN THEN DROP 7 PICK DUP 0> IF 3 PICK 7 PICK 2 XOR 3 PICK 12 * 2+ 4 PICK 1- IND_EMI_B @ + 20 * 2+ ADR_EMI_B 2@ + R@ SP_AF_LIGNE_CAN THEN DROP DROP DROP DROP DROP DROP DROP THEN ACTION_SOURIS_B ! DROP DROP THEN DROP DROP DROP DROP R> DROP ; FEN: SORT_FEN_A DUP XOR AFF_SOR_A ! 9 DUP AFF_EMI_A ! AFF_REC_A ! 10 RAF_REC_A ! ; FEN: SORT_FEN_B DUP XOR AFF_SOR_B ! 9 DUP AFF_EMI_B ! AFF_REC_B ! 10 RAF_REC_B ! ; 0 VARIABLE ADR_MENU_FEN FEN: CLAVIER_FEN_A >R DUP 27 = IF DUP XOR ESC_A @ 31 XOR ELSE ESC_A @ DUP IF AND 0 THEN THEN ESC_A ! DUP 6 = IF R@ FERME_FEN EXECUTE DUP XOR THEN DUP 14 = IF R@ ADR_MENU_FEN 2@ EXECUTE DUP XOR THEN DUP 22 = ( Lecture fichier ) IF R@ SP_CHARGEMENT DUP XOR THEN DUP 23 = ( Ecriture fichier ) IF R@ SP_SAUVEGARDE DUP XOR THEN IF BELL THEN R> DROP ; FEN: CLAVIER_FEN_B >R DUP 27 = IF DUP XOR ESC_B @ 31 XOR ELSE ESC_B @ DUP IF AND 0 THEN THEN ESC_B ! DUP 6 = IF R@ FERME_FEN EXECUTE DUP XOR THEN DUP 14 = IF R@ ADR_MENU_FEN 2@ EXECUTE DUP XOR THEN DUP 22 = ( Lecture fichier ) IF R@ SP_CHARGEMENT DUP XOR THEN DUP 23 = ( Ecriture fichier ) IF R@ SP_SAUVEGARDE DUP XOR THEN IF BELL THEN R> DROP ; FEN: MENU_FEN BEGIN 6 S_MENU 0 4 PICK FEN_DIALOGUE_CHOIX CASE 1 OF DUP FEN_A @ - IF TMP_MESSAGE_B ELSE TMP_MESSAGE_A THEN DUP 6+ 2@ BEGIN 16 S_IDENTIFICATEUR 5 PICK FEN_DIALOGUE_NOMBRE DUP 536870912 U< IF -1 ELSE BELL 0 THEN UNTIL OVER 6+ 2! 9 S_NB_OCTET 0 6 PICK FEN_DIALOGUE_CHOIX DUP 0> OVER 9 < AND IF OVER 10+ ! OVER @ 65535 AND BEGIN 4/ 2/ 10 S_PERIODE 5 PICK FEN_DIALOGUE_NOMBRE 4* 2* DUP [ 9 4* 2* LITERAL ] > OVER [ 5001 4* 2* LITERAL ] < AND IF OVER ! INSERE_TRAME ?DUP IF 1- IF S_PB_MEMOIRE ELSE S_ID_EXISTANT THEN BELL R@ FEN_DIALOGUE_MESSAGE THEN DROP -1 ELSE BELL 0 THEN UNTIL -1 ELSE DROP DROP 0 THEN ENDOF 2 OF [ 21 20 * 2+ LITERAL ] MEMOIRE_ALLOUE ?DUP IF 21 OVER ! DUP 2+ 3 PICK FEN_A @ - IF 11 ELSE 10 THEN 21 0 DO I 1+ 80 * 3 PICK ! 0 3 PICK 2+ 2! 1 I 4+ LSH OVER + 4 LSH CW_NUMERO CW@ + 3 PICK 6+ 2! 8 3 PICK 10+ ! 77 8 LSH I 1+ 10 /MOD 48 + SWAP >R + 8 LSH R> 48+ + 8 LSH 67 + 3 PICK 12+ 2! 65 8 LSH 78+ 8 LSH OVER 55+ + 8 LSH CW_NUMERO CW@ 48+ + 3 PICK 16+ 2! >R 20+ R> LOOP >R DROP R> 10- IF ADR_EMI_B 9 AFF_EMI_B ! ELSE ADR_EMI_A 9 AFF_EMI_A ! THEN DUP 2@ >R 2! R> ?DUP IF MEMOIRE_LIBERE DROP THEN ELSE S_PB_MEMOIRE OVER FEN_DIALOGUE_MESSAGE THEN -1 ENDOF 3 OF 3 S_MENU_FIC 0 4 PICK FEN_DIALOGUE_CHOIX 1- ?DUP IF 1- IF 0 ELSE 22 THEN ELSE 23 THEN DUP IF OVER DUP FEN_A @ - IF CLAVIER_FEN_B ELSE CLAVIER_FEN_A THEN EXECUTE -1 THEN ENDOF 4 OF 6 OVER DUP FEN_A @ - IF CLAVIER_FEN_B ELSE CLAVIER_FEN_A THEN EXECUTE -1 ENDOF 5 OF 0 ENDOF -1 ENDCASE UNTIL DROP ; MENU_FEN ADR_MENU_FEN 2! FIND CW_CAN_A_CTRL CONSTANT CAN_A_EXISTE FIND CW_CAN_B_CTRL CONSTANT CAN_B_EXISTE HERE 8 2/ ALLOT CONSTANT DATA_A_RX TACHE: T_CAN_A_RX AFF_REC_A @ 0= NOT AFF_REC_M_A @ OVER XOR IF DUP AFF_REC_M_A ! IF ADR_REC_N_A DUP >R ADR_REC_A 2@ DUP IF DUP @ 20 * 2+ DUP MEMOIRE_ALLOUE ?DUP IF DUP >R SWAP CMOVE R> ELSE DROP DUP XOR THEN THEN ELSE ADR_REC_A DUP >R ADR_REC_N_A 2@ OVER 2@ ?DUP IF OVER OVER - IF MEMOIRE_LIBERE THEN DROP THEN THEN R> 2! ELSE IF ADR_REC_N_A ELSE ADR_REC_A THEN THEN ( adr_pnt_liste ) BEGIN DATA_A_RX CAN_A_RX IF ( adr_pnt_liste,dlc,id ) 3 PICK 2@ 0= IF 22 MEMOIRE_ALLOUE ?DUP IF DUP >R 4 PICK 2! 1 R@ ! 0 R@ 2+ ! TEMPS 2@ R@ 4+ 2! R> 2+ ELSE DUP XOR THEN ELSE 3 PICK INDEX_ID_? >R >R 2@ R> R> ?DUP ( adr_pnt_liste,dlc,id,pnt_liste,ind,<=> ) IF 0> - OVER @ 1+ 20 * 2+ MEMOIRE_ALLOUE ?DUP IF SWAP 20 * >R OVER @ 1+ OVER ! OVER 2+ OVER 2+ R@ CMOVE 0 OVER 2+ R@ + ! TEMPS 2@ OVER 4+ R@ + 2! OVER 2+ R@ + OVER 22+ R@ + 4 PICK @ 20 * R@ - CMOVE DUP 6 PICK 2! 2+ R> + SWAP MEMOIRE_LIBERE DROP ELSE DROP DUP XOR THEN ELSE 20 * + 2+ >R TEMPS 2@ DUP R@ 2+ 2@ - R@ @ DUP 4/ 2/ - + R@ ! R@ 2+ 2! R> THEN THEN ( adr_pnt_liste,dlc,id,adr_mes ) ?DUP IF DUP >R 6+ 2! 0 MAX 8 MIN DUP R@ 10+ ! >R DATA_A_RX R> R> 12+ SWAP CMOVE ELSE DROP DROP THEN 0 ELSE DROP DROP -1 THEN UNTIL ( adr_pnt_liste ) CNT_REC_A DUP >R @ ?DUP IF 1- R> ! DROP 4 ELSE DUP 2@ ?DUP IF >R TEMPS 2@ R> DUP @ DUP 20 * 0 DO ( adr_pnt_liste,temps,pnt_liste,nb_mes ) 3 PICK 3 PICK 4+ I + 2@ - 10000 U< NOT IF 1- -1 3 PICK 2+ I + ! THEN 20 +LOOP OVER @ OVER - IF ( adr_pnt_liste,temps,pnt_liste,nb_mes ) ?DUP IF 20 * 2+ MEMOIRE_ALLOUE ?DUP IF 0 OVER ! OVER 2+ OVER 2+ 4 PICK @ 0 DO OVER @ 1+ IF OVER OVER 20 CMOVE 1 4 PICK +! 20+ THEN >R 20+ R> LOOP DROP DROP >R MEMOIRE_LIBERE DROP DROP R> OVER 2! ELSE DROP DROP THEN ELSE MEMOIRE_LIBERE DROP DROP 0 OVER 2! THEN ELSE DROP DROP DROP THEN THEN DROP 99 R> ! 1 THEN T_CAN_A_RX T_ACTIVE ; HERE 8 2/ ALLOT CONSTANT DATA_B_RX TACHE: T_CAN_B_RX AFF_REC_B @ 0= NOT AFF_REC_M_B @ OVER XOR IF DUP AFF_REC_M_B ! IF ADR_REC_N_B DUP >R ADR_REC_B 2@ DUP IF DUP @ 20 * 2+ DUP MEMOIRE_ALLOUE ?DUP IF DUP >R SWAP CMOVE R> ELSE DROP DUP XOR THEN THEN ELSE ADR_REC_B DUP >R ADR_REC_N_B 2@ OVER 2@ ?DUP IF OVER OVER - IF MEMOIRE_LIBERE THEN DROP THEN THEN R> 2! ELSE IF ADR_REC_N_B ELSE ADR_REC_B THEN THEN ( adr_pnt_liste ) BEGIN DATA_B_RX CAN_B_RX IF ( adr_pnt_liste,dlc,id ) 3 PICK 2@ 0= IF 22 MEMOIRE_ALLOUE ?DUP IF DUP >R 4 PICK 2! 1 R@ ! 0 R@ 2+ ! TEMPS 2@ R@ 4+ 2! R> 2+ ELSE DUP XOR THEN ELSE 3 PICK INDEX_ID_? >R >R 2@ R> R> ?DUP ( adr_pnt_liste,dlc,id,pnt_liste,ind,<=> ) IF 0> - OVER @ 1+ 20 * 2+ MEMOIRE_ALLOUE ?DUP IF SWAP 20 * >R OVER @ 1+ OVER ! OVER 2+ OVER 2+ R@ CMOVE 0 OVER 2+ R@ + ! TEMPS 2@ OVER 4+ R@ + 2! OVER 2+ R@ + OVER 22+ R@ + 4 PICK @ 20 * R@ - CMOVE DUP 6 PICK 2! 2+ R> + SWAP MEMOIRE_LIBERE DROP ELSE DROP DUP XOR THEN ELSE 20 * + 2+ >R TEMPS 2@ DUP R@ 2+ 2@ - R@ @ DUP 4/ 2/ - + R@ ! R@ 2+ 2! R> THEN THEN ( adr_pnt_liste,dlc,id,adr_mes ) ?DUP IF DUP >R 6+ 2! 0 MAX 8 MIN DUP R@ 10+ ! >R DATA_B_RX R> R> 12+ SWAP CMOVE ELSE DROP DROP THEN 0 ELSE DROP DROP -1 THEN UNTIL ( adr_pnt_liste ) CNT_REC_B DUP >R @ ?DUP IF 1- R> ! DROP 4 ELSE DUP 2@ ?DUP IF >R TEMPS 2@ R> DUP @ DUP 20 * 0 DO ( adr_pnt_liste,temps,pnt_liste,nb_mes ) 3 PICK 3 PICK 4+ I + 2@ - 10000 U< NOT IF 1- -1 3 PICK 2+ I + ! THEN 20 +LOOP OVER @ OVER - IF ( adr_pnt_liste,temps,pnt_liste,nb_mes ) ?DUP IF 20 * 2+ MEMOIRE_ALLOUE ?DUP IF 0 OVER ! OVER 2+ OVER 2+ 4 PICK @ 0 DO OVER @ 1+ IF OVER OVER 20 CMOVE 1 4 PICK +! 20+ THEN >R 20+ R> LOOP DROP DROP >R MEMOIRE_LIBERE DROP DROP R> OVER 2! ELSE DROP DROP THEN ELSE MEMOIRE_LIBERE DROP DROP 0 OVER 2! THEN ELSE DROP DROP DROP THEN THEN DROP 99 R> ! 1 THEN T_CAN_B_RX T_ACTIVE ; TACHE: T_CAN_A_TX ADR_EMI_A 2@ ?DUP IF DUP >R 2+ R> @ ?DUP IF 0 DO DUP DUP >R 2+ @ 10- DUP 0< IF R@ @ 4/ 2/ + R@ 12+ R@ 10+ @ R@ 6+ 2@ 3 OVER 2048 U< 2* + CAN_A_TX DROP THEN R> 2+ ! 20+ LOOP THEN DROP THEN ; TACHE: T_CAN_B_TX ADR_EMI_B 2@ ?DUP IF DUP >R 2+ R> @ ?DUP IF 0 DO DUP DUP >R 2+ @ 10- DUP 0< IF R@ @ 4/ 2/ + R@ 12+ R@ 10+ @ R@ 6+ 2@ 3 OVER 2048 U< 2* + CAN_B_TX DROP THEN R> 2+ ! 20+ LOOP THEN DROP THEN ; : OUTIL_CAN FEN_A @ ?DUP IF FEN_SELECTIONNE ELSE CAN_A_EXISTE IF FEN_CREE ?DUP IF DUP >R FEN_A ! S_FEN_A R@ FEN_NOM ECRAN 4+ @ 1+ 2/ [ 2 54 7 * + 2+ 8+ 2+ LITERAL ] - ECRAN 6+ @ 1+ [ 2 9 12 * + 4+ 17 12 * + 2+ 12+ 2+ LITERAL ] - 2/ R@ FEN_POSITION [ 2 54 7 * + 2+ 8+ 2+ LITERAL 2 9 12 * + 4+ 17 12 * + 2+ 12+ 2+ LITERAL ] R@ FEN_TAILLE FERME_FEN R@ FEN_FERME A_PROPOS_FEN R@ FEN_A_PROPOS AFFICHE_FEN_A R@ FEN_AFFICHE SORT_FEN_A R@ FEN_SORT MENU_FEN R@ FEN_MENU CLAVIER_FEN_A R@ FEN_CLAVIER SOURIS_FEN_A R@ FEN_SOURIS R@ FEN_ACTIVE 1 SP_AF_CAN_A CHRONO_FEN_A R@ FEN_CHRONO R> FEN_SELECTIONNE 3 2 2 1 8000000 CAN_A_INIT 1 T_CAN_A_RX 49151 OVER T_AJOUTE T_ACTIVE 10 T_CAN_A_TX 49152 OVER T_AJOUTE T_PERIODE ELSE ." IMPOSSIBLE de creer l'application OUTIL BUS CAN A!" ABORT THEN THEN THEN FEN_B @ ?DUP IF FEN_SELECTIONNE ELSE CAN_B_EXISTE IF FEN_CREE ?DUP IF DUP >R FEN_B ! S_FEN_B R@ FEN_NOM ECRAN 4+ @ 1+ 2/ ECRAN 6+ @ 1+ [ 2 9 12 * + 4+ 17 12 * + 2+ 12+ 2+ LITERAL ] - 2/ R@ FEN_POSITION [ 2 54 7 * + 2+ 8+ 2+ LITERAL 2 9 12 * + 4+ 17 12 * + 2+ 12+ 2+ LITERAL ] R@ FEN_TAILLE FERME_FEN R@ FEN_FERME A_PROPOS_FEN R@ FEN_A_PROPOS AFFICHE_FEN_B R@ FEN_AFFICHE SORT_FEN_B R@ FEN_SORT MENU_FEN R@ FEN_MENU CLAVIER_FEN_B R@ FEN_CLAVIER SOURIS_FEN_B R@ FEN_SOURIS R@ FEN_ACTIVE 1 SP_AF_CAN_B CHRONO_FEN_B R@ FEN_CHRONO R> FEN_SELECTIONNE 3 2 2 1 8000000 CAN_B_INIT 1 T_CAN_B_RX 49151 OVER T_AJOUTE T_ACTIVE 10 T_CAN_B_TX 49152 OVER T_AJOUTE T_PERIODE ELSE ." IMPOSSIBLE de creer l'application OUTIL BUS CAN A!" ABORT THEN THEN THEN ; OUTIL_CAN ( FIN )