diff --git a/ConfigGenerale.cfg b/ConfigGenerale.cfg index acafabb..37fd7ff 100644 --- a/ConfigGenerale.cfg +++ b/ConfigGenerale.cfg @@ -1,108 +1,27 @@ -/****************************************** -/ fichier de configuration -/ gily - f1iwq - 2018 -/****************************************** -/ ce programme permet de commander les signaux complexes avec ou sans -/ CDM rail. Il a trois modes de fonctionnement: -/ -/ Mode 1 = sans CDM rail. Le programme ne gère que la centrale LENZ ou compatible. -/ Il faut connecter le PC en USB ou par éthernet à la centrale (nécessite l'interface LI100 ETH) -/ -/ Mode 2 = Avec CDM rail, ce programme doit être connecté au réseau par l'interface -/ ethernet ; CDM est connecté par USB, et dans ce cas, -/ mettre 0 dans le numéro de port COM (inutilisé) ainsi que la variable avec ou sans initialisation -/ des aiguillages à 0. -/ -/ Mode 3 = Avec CDM Rail, ce programme connecté au réseau par l'interface Ethernet et CDM -/ Rail est connecté au réseau par l'USB. -/ -/ -/ Taille de la fonte de la fenêtre -Fonte=10 -/ -/ Adresse IP V4 du PC sur lequel s'execute CDM : port +/ Fichier de configuration de signaux_complexes_GL +Fonte=12 IpV4_PC=127.0.0.1:9999 -/ -/ ========================================================================== -/ D é f i n i t i o n de l'interface XpressNet pour utilisation en mode autonome -/ Adresse IP V4 de l'interface LI-USB Ethernet : port -/ par défaut le port est 5550 -/ ne pas connecter le port ou mettre 0 si on travaille avec l'interface USB IPV4_INTERFACE=192.168.1.23:5550 -/ -/ port COM de l'adresse USB de l'interface LU-USB - LI100 - LI100F - LI101F - GENLI -/ attention de COM1 à 9 - Si le port de l'interface USB >9, il faut le changer -/ manuellement dans le gestionnaire des périphériques -/ mettre 0 si inutilisée -/ Le programme ne tentera pas de se connecter à la centrale si CDM rail est détecté -/ Com:vitesse,parité,nombre de bits,bits de stop,protocole: 0=aucun 1=Xon-Xoff 2=RTS-CTS 3=RTS-Xon-Xoff 4=CTS -/ voir notice page 29 -/ PROTOCOLE_SERIE=COM9:57600,N,8,1,2 -/COM8:9600,N,8,1,0 -/ -/ Temporisation en ms d'envoi entre deux octets de la trame INTER_CAR=50 -/ -/ Temporisation maximale de contrôle après non réponse de l'interface, en tranches de 100ms -/ à adapter en fonction de l'interface. Ex 7=700ms d'attente maxi Tempo_maxi=7 -/ -/ Entete: préfixe ajouté aux trames : -/ Entete=0 - n'ajoute rien aux trames - pour une interface RS232 ou GENLI -/ Entete=1 - Ajoute FF FE au début de chaque trame envoyée à l'interface : pour une interface USB, entete=1 -/ Entete=2 - Ajoute E4 au début de chaque trame et 0D 0D 0A en fin de chaque trame : pour compatibilité arduino Entete=1 -/ =============================================================================== -/ -/ Avec (1) ou sans (0) initialisation des aiguillages au démarrage selon le tableau ci après Init_Aig=1 -/Temporisation entre aiguillages en ms à l'initialisation en mode autonome Tempo_Aig=100 -/ -/ Temporisation entre deux commandes aux décodeurs de feux en ms Fenetre=0 -/ -/ Fenêtre d'exécution en plein écran (1) ou réduite (0) nb_det_dist=3 -/ -/ Nombre de détecteurs considérés comme trop distants dans la recherche d'un détecteur "suivant" verif_version=0 -/ -/ Vérification des versions au démarrage NOTIF_VERSION=0 -/ Notification de nouvelle version -TCO=1 -/ Avec TCO +TCO=0 +MasqueBandeauTCO=0 CDM=0 -/ Lancement de CDM Rail au démarrage Lay=RESEAU_GILY_SIGNAL_AJOUTE.LAY -/ Nom du fichier LAY à ouvrir depuis CDM sans caractères spéciaux ( : / ) -/reseau_gily_signal_ajoute.lay Serveur_interface=1 -/ -/ Démarrage du serveur d'interface automatique -/ 0=ne pas démarrer automatiquement le serveur d'interfaces -/ 1=XpressNet (lenz.roco) -/ 2=P50X intellibox -/ 3=Sprog -/ 4=HSI88/HSI88-USB -/ 5=ECOS ESU -/ 6=FIS88 FeedBack (S88/S88N) -/ 7=RS2PC (Rs FeedBack interface) -/ 8=DCC++ retro=1 -/ -/ Interface de rétrosignalisation pour LENZ/DCC++ -/ 1=auto -/ 2=LI-USB -/ 3=LI-101F -/ 4=LI-100F -/ 5=LI-100 -/ 6=GENLI RazSignaux=0 Tempo_Feu=100 Alg_Unisemaf=1 +/------------ [section_aig] 1,P518,D523,S3P,V30,I0,INIT(9,5) 2,P12S,D519,S5S,V0,I0,INIT(9,5) @@ -129,10 +48,12 @@ Alg_Unisemaf=1 27,P25S,D530,S537,V0,I0,INIT(9,5) 28TJD,D(21D,26D),S(21S,26S),V0,I0,INIT(9,5),E4 29,P10D,D513,S30S,V60,I0,INIT(9,5) -30,P524,D11D,S29D,V0,I0,INIT(9,5) -31,P534,D0,S25P,V0,I0,INIT(9,5) -32,P22S,D0,S24D,V0,I0,INIT(9,5) +30,P524,D11D,S29S,V0,I0,INIT(9,5) +31,P534,D33D,S25P,V0,I0,INIT(9,5) +32,P22S,D33S,S24D,V0,I0,INIT(9,5) +33,P0,D31D,S32D,V0,I0,INIT(9,5) 0 +/------------ [section_branches] A2,A12,517,A18,A11,A30,524,521,A8,527,A7,519,A2 A7,520,A20,A12 @@ -146,8 +67,9 @@ A26,529,A25 A22,537,A27 A22,A32,A24 A6,516,0 -A31,0 +A31,A33,0 0 +/------------ [section_sig] 176,7,0,1,(520,A20),1 190,7,0,1,(523,526),0 @@ -165,6 +87,7 @@ A31,0 372,D3,1,(A10D)(A19S)(A19D,A22D)(A19D,A22S) 382,D3,1,(A29S,A10S)(A19S)(A19D,A22D)(A19D,A22S) 392,3,0,1,(535,533),1 +406,9,0,1,(534,A23),1 420,7,0,1,(529,A25,530,A27,537,A27),1 448,7,0,1,(533,A24),1 462,9,0,1,(513,A29),1 @@ -174,11 +97,13 @@ A31,0 1000,9,0,0,(530,A26),1 1001,9,0,0,(529,A26),1,(A21S,A6D) 0 +/------------ [section_act] 815,1,CC,F2,0,TGV Mem[527,520],1,X,"KLAXON_2.WAV" 830,1,ZZ406526,"C:\PROGRAM FILES (X86)\BORLAND\DELPHI7\PROJECTS\SIGNAUX_COMPLEXES_GL\TRN.WAV" 815,1,TGV,F10,0,TGV +/------------ (817,830),(820,840),PN(121+,121-) (850,851),PN(12+,12-) 0 diff --git a/Notice d'utilisation des signaux_complexes_GL_V3.85.pdf b/Notice d'utilisation des signaux_complexes_GL_V4.0.pdf similarity index 72% rename from Notice d'utilisation des signaux_complexes_GL_V3.85.pdf rename to Notice d'utilisation des signaux_complexes_GL_V4.0.pdf index 78137e5..c99ad58 100644 Binary files a/Notice d'utilisation des signaux_complexes_GL_V3.85.pdf and b/Notice d'utilisation des signaux_complexes_GL_V4.0.pdf differ diff --git a/UnitConfig.dcu b/UnitConfig.dcu index 1b27183..9268985 100644 Binary files a/UnitConfig.dcu and b/UnitConfig.dcu differ diff --git a/UnitConfig.dfm b/UnitConfig.dfm index 2834e53..a1cb43c 100644 --- a/UnitConfig.dfm +++ b/UnitConfig.dfm @@ -1578,7 +1578,7 @@ object FormConfig: TFormConfig Top = 8 Width = 633 Height = 497 - ActivePage = TabSheetCDM + ActivePage = TabSheetSig Font.Charset = DEFAULT_CHARSET Font.Color = clBlack Font.Height = -11 @@ -2621,6 +2621,7 @@ object FormConfig: TFormConfig Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] + HideSelection = False ParentFont = False ReadOnly = True ScrollBars = ssBoth @@ -3089,6 +3090,7 @@ object FormConfig: TFormConfig Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] + HideSelection = False Lines.Strings = ( 'RichSig') ParentFont = False diff --git a/UnitConfig.pas b/UnitConfig.pas index b4e7b43..c22e777 100644 --- a/UnitConfig.pas +++ b/UnitConfig.pas @@ -398,7 +398,7 @@ var portCDM,TempoOctet,TimoutMaxInterface,Valeur_entete,Port,protocole,NumPort, LigneCliqueePN,AncLigneCliqueePN,clicMemo, ligneclicAig,AncLigneClicAig,ligneClicSig,AncligneClicSig, - ligneClicBr,AncligneClicBr,ligneClicAct,AncLigneClicAct,indexfeuclic,NumTrameCDM : integer; + ligneClicBr,AncligneClicBr,ligneClicAct,AncLigneClicAct,Adressefeuclic,NumTrameCDM : integer; ack_cdm,clicliste,entreeTCO,affevt,config_modifie,clicproprietes : boolean; fichier : text; @@ -1115,142 +1115,110 @@ var s: string; fichierN : text; i : integer; continue : boolean; - - // lit une ligne du fichier source "fichier", si c'est une ligne de commentaire, copie jusqu'à ne plus rencontrer - // de ligne commentaire, et retourne la ligne en sortie - function copie_commentaire : string ; - var c : char; - begin - repeat - readln(fichier,s); - //Affiche(s,clWhite); - if length(s)>0 then c:=s[1]; - if c='/' then writeln(fichierN,s); // copie le commentaire - until ((c<>'/') and (s<>'')) or eof(fichier) ; - copie_commentaire:=s; - end; - + begin - assign(fichierN,'ConfigGenerale.tmp'); + assign(fichierN,'ConfigGenerale.cfg'); rewrite(fichierN); // entête - copie_commentaire; + // copie_commentaire; + writeln(fichierN,'/ Fichier de configuration de signaux_complexes_GL'); // taille de la fonte writeln(fichierN,Fonte_ch+'=',TailleFonte); - FormPrinc.FenRich.Font.Size:=TailleFonte; - copie_commentaire; + FormPrinc.FenRich.Font.Size:=TailleFonte; // adresse ip et port de CDM writeln(fichierN,IpV4_PC_ch+'=',adresseIPCDM+':'+intToSTR(portCDM)); - copie_commentaire; // adresse ip interface XpressNet writeln(fichierN,IPV4_Interface_ch+'=',adresseIP+':'+intToSTR(port)); - copie_commentaire; // port com writeln(fichierN,Protocole_serie_ch+'=',portcom); - copie_commentaire; // temporisation caractère TempoOctet writeln(fichierN,Inter_Car_ch+'=',IntToSTR(TempoOctet)); - copie_commentaire; // temporisation attente maximale interface writeln(fichierN,Tempo_maxi_ch+'=',IntToSTR(TimoutMaxInterface)); - copie_commentaire; // entete Valeur_entete writeln(fichierN,Entete_ch+'=',intToSTR(Valeur_entete)); - copie_commentaire; // avec ou sans initialisation des aiguillages if AvecInitAiguillages then s:='1' else s:='0'; writeln(fichierN,Init_Aig_ch+'='+s); - copie_commentaire; // temporisation initialisation des aiguillages writeln(fichierN,Tempo_aig_ch+'=',IntToSTR(Tempo_aig)); - copie_commentaire; // plein écran writeln(fichierN,Fenetre_ch+'=',fenetre); - copie_commentaire; // Nombre maxi de détecteurs considérés distants writeln(fichierN,nb_det_dist_ch+'=',Nb_Det_Dist); - copie_commentaire; // Vérification des versions au démarrage if verifVersion then s:='1' else s:='0'; writeln(fichierN,verif_version_ch+'=',s); - copie_commentaire; // Notification de nouvelle version if notificationVersion then s:='1' else s:='0'; writeln(fichierN,notif_version_ch+'=',s); - copie_commentaire; // Avec TCO if AvecTCO then s:='1' else s:='0'; writeln(fichierN,TCO_ch+'=',s); - copie_commentaire; if MasqueBandeauTCO then s:='1' else s:='0'; writeln(fichierN,MasqueBandeauTCO_ch+'=',s); - copie_commentaire; // lancement de CDM if LanceCDM then s:='1' else s:='0'; writeln(fichierN,CDM_ch+'=',s); - copie_commentaire; // Nom du LAY writeln(fichierN,lay_ch+'=',Lay); - copie_commentaire; // Serveur d'interface de CDM writeln(fichierN,Serveur_interface_ch+'=',intToSTR(ServeurInterfaceCDM)); - copie_commentaire; // Serveur de rétrosignalisation Lenz de CDM writeln(fichierN,retro_ch+'=',intToSTR(ServeurRetroCDM)); // entête - copie_commentaire; // Raz Signaux if Raz_Acc_signaux then s:='1' else s:='0'; writeln(fichierN,'RazSignaux='+s); - //copie_commentaire; // temporisation entre 2 commandes décodeurs feu writeln(fichierN,Tempo_feu_ch+'=',IntToSTR(Tempo_feu)); - copie_commentaire; // algorithme Unisemaf writeln(fichierN,Algo_unisemaf_ch+'=',IntToSTR(algo_Unisemaf)); - copie_commentaire; // aiguillages + writeln(fichierN,'/------------'); writeln(fichierN,section_aig_ch); for i:=1 to MaxAiguillage do begin - s:=encode_aig(i); - aiguillage[i].modifie:=false; // sauvegarde en cours, on démarque + s:=encode_aig(i); + aiguillage[i].modifie:=false; // sauvegarde en cours, on démarque writeln(fichierN,s); end; writeln(fichierN,'0'); + writeln(fichierN,'/------------'); writeln(fichierN,section_Branches_ch); // branches for i:=1 to NbreBranches do begin s:=Branche[i]; writeln(fichierN,s); - end; + end; writeln(fichierN,'0'); - + + writeln(fichierN,'/------------'); writeln(fichierN,section_sig_ch); // feux for i:=1 to NbreFeux do @@ -1259,33 +1227,32 @@ begin // transformer le tableau feux en ligne //Affiche(s,clLime); if s='' then Affiche('Erreur 700 - Encodage du feu index='+IntToSTR(i),clRed); - feux[i].modifie:=false; // sauvegarde en cours, on démarque + feux[i].modifie:=false; // sauvegarde en cours, on démarque writeln(fichierN,s); end; writeln(fichierN,'0'); - // Fonctions Fx + // Fonctions Fx // actionneurs Train ou accessoire + writeln(fichierN,'/------------'); writeln(fichierN,section_act_ch); for i:=1 to maxTablo_act do begin s:=encode_act_loc_son(i); if s<>'' then writeln(fichierN,s); - end; - + end; + + writeln(fichierN,'/------------'); // actionneurs PN for i:=1 to NbrePN do begin s:=encode_act_pn(i); if s<>'' then if s<>'' then writeln(fichierN,s); - end; + end; writeln(fichierN,'0'); - closefile(fichier); closefile(fichierN); - deletefile(NomConfig); - renameFile('ConfigGenerale.tmp',NomConfig); end; procedure lit_config; @@ -1600,7 +1567,6 @@ begin Affiche('Définition des aiguillages',clyellow); maxaiguillage:=0; Nligne:=1; - repeat s:=lit_ligne; inc(Nligne); @@ -1668,7 +1634,7 @@ begin if (length(enregistrement)<>0) then if (enregistrement[1]='P') then begin - if tjdC then begin affiche('Erreur P interdit dans une TJD : '+sOrigine,clred);closefile(fichier);exit; end; + if tjdC then begin affiche('Erreur P interdit dans une TJD : '+sOrigine,clred);exit; end; if debugconfig then Affiche('Section P - enregistrement='+enregistrement,clYellow); ComptEl:=ComptEl+1; decodeAig(enregistrement,detect,c); @@ -1695,7 +1661,7 @@ begin decodeAig(Enregistrement,detect,c); aiguillage[maxaiguillage].DDroit:=detect; aiguillage[maxaiguillage].DdroitB:=c; - i:=pos(')',enregistrement);if i=0 then begin Affiche('Erreur de syntaxe ligne '+SOrigine,clred);closefile(fichier);exit;end; + i:=pos(')',enregistrement);if i=0 then begin Affiche('Erreur de syntaxe ligne '+SOrigine,clred);exit;end; Delete(enregistrement,1,i+1); //Affiche(enregistrement,clBlue); @@ -1728,7 +1694,7 @@ begin decodeAig(enregistrement,detect,c); aiguillage[maxaiguillage].DDevie:=detect; aiguillage[maxaiguillage].DDevieB:=c; - i:=pos(')',enregistrement);if i=0 then begin Affiche('Erreur de syntaxe ligne '+SOrigine,clred);closefile(fichier);exit;end; + i:=pos(')',enregistrement);if i=0 then begin Affiche('Erreur de syntaxe ligne '+SOrigine,clred);exit;end; Delete(enregistrement,1,i+1); //Affiche(enregistrement,clBlue); @@ -1794,7 +1760,7 @@ begin if (length(enregistrement)<>0) then if enregistrement[1]='L' then begin - if not(tjsC) then begin Affiche('Erreur paramètre L ligne: '+sOrigine,clred);closefile(fichier);exit;end; + if not(tjsC) then begin Affiche('Erreur paramètre L ligne: '+sOrigine,clred);exit;end; inc(num_champ); delete(enregistrement,1,1); Val(enregistrement,adr,erreur); @@ -1841,7 +1807,7 @@ begin inc(itl); until (enregistrement='') or (itl>3); - if itl>4 then begin Affiche('Erreur 400 ligne '+sOrigine,clred);closefile(fichier);exit;end; + if itl>4 then begin Affiche('Erreur 400 ligne '+sOrigine,clred);exit;end; end; until (sOrigine='0'); end; @@ -1866,7 +1832,7 @@ begin delete(s,i,length(sa)); val(s,TailleFonte,erreur); if (TailleFonte<8) or (tailleFonte>25) then taillefonte:=10; - FormPrinc.FenRich.Font.Size:=TailleFonte; + FormPrinc.FenRich.Font.Size:=TailleFonte; end; // adresse ip et port de CDM @@ -2003,7 +1969,7 @@ begin val(s,Tempo_Feu,erreur); if tempo_Feu=0 then Tempo_feu:=100; end; - + // algo unisemaf sa:=uppercase(Algo_unisemaf_ch)+'='; i:=pos(sa,s); @@ -2015,7 +1981,7 @@ begin val(s,algo_Unisemaf,erreur); if (algo_Unisemaf<0) or (algo_Unisemaf>2) then algo_Unisemaf:=1; end; - + sa:=uppercase(verif_version_ch)+'='; i:=pos(sa,s); if i=1 then @@ -2050,7 +2016,7 @@ begin trouve_TCO:=true; val(s,i,erreur); AvecTCO:=i=1; - end; + end; sa:=uppercase(MasqueBandeauTCO_ch)+'='; i:=pos(sa,s); @@ -2061,8 +2027,8 @@ begin trouve_MasqueTCO:=true; val(s,i,erreur); MasqueBandeauTCO:=i=1; - end; - + end; + sa:=uppercase(CDM_ch)+'='; i:=pos(sa,s); if i=1 then @@ -2070,7 +2036,6 @@ begin inc(nv); trouve_CDM:=true; delete(s,i,length(sa)); - // vérification de la version au démarrage val(s,i,erreur); LanceCDM:=i=1; end; @@ -2212,78 +2177,31 @@ begin Ancien_detecteur[i]:=false; end; - { - // vérifier si le fichier ConfigGenerale.cfg existe - fichier_trouve:=true; - {$I+} - - {try - assign(fichier,NomConfig); - reset(fichier); - except - fichier_trouve:=false; - end; - {$I-} - { - if fichier_trouve then - begin - close(fichier); - end; - - // si pas trouvé le fichier, lire les 2 anciens fichiers et les fusionner - if not(fichier_trouve) then - begin - {$I+} - { - try - assign(fichier,'client-GL.cfg'); - reset(fichier); - except - Affiche('Fichier client-GL.cfg non trouvé',clred); - exit; - end; - {$I-} - {Affiche('Lecture de l''ancien fichier de configuration client-GL.cfg',clyellow); - - lit_flux; - closeFile(fichier); - - Affiche('Lecture de l''ancien fichier de configuration config.cfg',clyellow); - {$I+} - {try - assign(fichier,'config.cfg'); - reset(fichier); - except - Affiche('Fichier config.cfg non trouvé',clred); - exit; - end; - Affiche('***Traitement de fusion des deux fichiers de config***',clAqua); - - {$I-} - {lit_flux; - closeFile(fichier); - // regénérer la config dans le fichier configgenerale.cfg - assign(fichier,'client-gl.cfg'); - reset(fichier); // pour les commentaires - genere_config; - - s:='------------------------------------------------------------------------------------------------------'; - Affiche(s,clAqua); - Affiche('AVERTISSEMENT: les fichiers de configurations ont été fusionnés dans ConfigGenerale.cfg',clAqua); - Affiche('les deux anciens fichiers de configuration ne sont plus utilisés',clAqua); - Affiche(s,clAqua); - end - - else - begin} Affiche('Lecture du fichier de configuration '+NomConfig,clyellow); {$I+} try assign(fichier,NomConfig); reset(fichier); except - Affiche('Fichier '+NomConfig+' non trouvé',clred); - exit; + Affiche('Fichier '+NomConfig+' non trouvé : création d''un fichier vide par défaut',clred); + portcom:='COM3:57600,N,8,1,2'; + adresseIPCDM:='127.0.0.1';portCDM:=9999; + adresseIP:='192.168.1.23';port:=5550; + verifVersion:=true; + Valeur_entete:=1; + TempoOctet:=50; + TimoutMaxInterface:=7; + AvecInitAiguillages:=true; + Tempo_Aig:=100; + Tempo_feu:=100; + ServeurInterfaceCDM:=1; + ServeurRetroCDM:=1; + algo_Unisemaf:=1; + TailleFonte:=12; + Nb_Det_Dist:=3; + genere_config; + assign(fichier,NomConfig); + reset(fichier); end; {$I-} lit_flux; @@ -2336,12 +2254,14 @@ begin with FormConfig do begin s:=EditAdrIPCDM.text; + if s='' then s:='127.0.0.1'; if not(IpOk(s)) then begin labelInfo.Caption:='Adresse IP CDM rail incorrecte';sauve_config:=false;exit;end; ChangeCDM:=s<>AdresseIPCDM; adresseIPCDM:=s; // contrôle port CDM val(EditPortCDM.Text,i,erreur); + if i=0 then i:=9999; if i>65535 then begin labelInfo.Caption:='Port CDM rail incorrect';sauve_config:=false;exit;end; changeCDM:=(portCDM<>i) or ChangeCDM; portCDM:=i; @@ -2353,12 +2273,14 @@ begin // contrôle adresse IP interface s:=EditIPLenz.text; + if s='' then s:='0'; if not(IpOk(s)) and (s<>'0') then begin labelInfo.Caption:='Adresse IP interface Xpressnet incorrecte';sauve_config:=false;exit;end; changeInterface:=s<>AdresseIP; AdresseIP:=s; // contrôle port interface val(EditPortLenz.Text,i,erreur); + if i=0 then i:=5550; if i>65535 then begin labelInfo.Caption:='Port Interface incorrect';sauve_config:=false;exit;end; changeInterface:=changeInterface or (i<>port); port:=i; @@ -2369,6 +2291,7 @@ begin // contrôle protocole interface COM3:57600,N,8,1,2 s:=EditComUSB.Text; + if s='' then s:='COM3:57600,N,8,1,2'; if not(config_com(s)) then begin labelInfo.Caption:='Protocole série USB Interface incorrect';sauve_config:=false;exit;end; changeUSB:=portcom<>s; portcom:=s; @@ -2459,16 +2382,6 @@ begin if change_srv then services_CDM; // générer le fichier de config - // ouvrir l'ancien fichier pour copier les commentaires - {$I+} - try - assign(fichier,NomConfig); - reset(fichier); - except - Affiche('Fichier '+NomConfig+' non trouvé',clOrange); - end; - {$I-} - genere_config; Affiche('Configuration sauvegardée dans le fichier',clLime); config_modifie:=false; @@ -2488,11 +2401,13 @@ begin end; end; +// LC=Adresse du feu procedure clicListeFeu(lc : integer); -var AncAdresse,adresse,erreur : integer; +var AncAdresse,index,adresse,erreur : integer; s : string; begin - s:=Uppercase(FormConfig.RichSig.Lines[lc]); // ligne cliquée + index:=index_feu(lc)-1; + s:=Uppercase(FormConfig.RichSig.Lines[index]); // ligne cliquée if s='' then begin RE_ColorLine(Formconfig.RichSig,ligneclicSig,ClAqua); @@ -2500,10 +2415,10 @@ begin exit; end; - Feu_Sauve:=feux[lc+1]; // sauvegarde + Feu_Sauve:=feux[index+1]; // sauvegarde AncLigneClicSig:=ligneclicSig; - ligneClicSig:=lc; + ligneClicSig:=index; // Mettre en rouge le signal modifié quand on clique sur un autre signal if AncligneclicSig<>-1 then @@ -2519,7 +2434,7 @@ begin FormConfig.EditAdrSig.Color:=clWindow; RE_ColorLine(Formconfig.RichSig,ligneClicSig,Clyellow); - aff_champs_sig_feux(lc+1); // affiche les champs du feu + aff_champs_sig_feux(index+1); // affiche les champs du feu clicliste:=false; end; @@ -2639,12 +2554,13 @@ begin RE_ColorLine(RichAig,RichAig.lines.count-1,ClAqua); Aiguillage[i].modifie:=false; end; + // pour positionner sur la 1ere ligne With RichAig do begin SelStart:=0; Perform(EM_SCROLLCARET,0,0); end; - + // branches clicListe:=true; RichBranche.clear; @@ -2719,7 +2635,7 @@ begin Perform(EM_SCROLLCARET,0,0); end; - if clicproprietes then clicListeFeu(indexfeuclic); + if clicproprietes then clicListeFeu(Adressefeuclic); clicproprietes:=false; //l'onglet affiché est sélectionné à l'appel de la fiche dans l'unité UnitPrinc @@ -3988,9 +3904,9 @@ begin begin lc:=Perform(EM_LINEFROMCHAR,-1,0); // numéro de la lignée cliquée //Affiche('numéro de la ligne cliquée '+intToStr(lc),clyellow); - clicListeFeu(lc); + clicListeFeu(feux[lc+1].adresse); end; - + end; procedure Det1; @@ -4641,9 +4557,9 @@ begin feux[ligneClicSig+1].adresse:=i; s:=encode_sig_feux(ligneClicSig+1); RichSig.Lines[ligneClicSig]:=s; - Feux[ligneClicSig+1].Lbl.caption:='@'+IntToSTR(i); + Maj_Hint_feu(ligneClicSig+1); end; -end; +end; procedure TFormConfig.EditAdrAigChange(Sender: TObject); @@ -5328,13 +5244,20 @@ begin end; procedure TFormConfig.ButtonNouvFeuClick(Sender: TObject); -var i : integer; +var i,index,AdrMax : integer; s : string; begin clicliste:=true; inc(NbreFeux); + + AdrMax:=0; + for i:=1 to NbreFeux do + begin + if AdrMax=fin) and (ligneFin=0) and (ligneDeb<>0) then ligneFin:=i+1; + //if (ltot=fin) and (ligneFin=0) then ligneFin:=i; + inc(i); + until (i>=NbreFeux) or (ligneFin>0); + if lignefin=0 then if fin>ltot then ligneFin:=NbreFeux; + //Affiche(inttostr(ligneDeb)+' '+inttostr(LigneFin),clyellow); + + i:=ligneClicSig; + if (i<0) then exit; + index:=i+1; // passe en index tableau + + if ligneDeb=LigneFin then s:='Voulez-vous supprimer le signal '+IntToSTR(feux[index].adresse)+'?' + else s:='Voulez-vous supprimer les signaux de '+ + IntToSTR(feux[ligneDeb].adresse)+' à '+IntToSTR(feux[ligneFin].adresse)+' ?'; + + if Application.MessageBox(pchar(s),pchar('confirm'), MB_YESNO or MB_DEFBUTTON2 or MB_ICONQUESTION)=idNo then exit; + + ButtonInsFeu.Caption:='Ajouter le feu '+intToSTR(feux[index].adresse)+' supprimé'; + clicliste:=true; + Feu_supprime:=feux[index]; // sauvegarde le supprimé + feu_sauve.adresse:=0; // dévalider sa définition + + index:=ligneDeb; + + if ligneDeb=LigneFin then s:='Suppression du signal '+IntToSTR(feux[index].adresse) + else s:='Suppression des signaux de '+ + IntToSTR(feux[ligneDeb].adresse)+' à '+IntToSTR(feux[ligneFin].adresse); + Affiche(s,clOrange); + + //Affiche('Boucle de '+intToSTR(ligneDeb)+' N='+intToSTR(NbreFeux-ligneFin),clyellow); + + // d'abord supprimer les images des feux + for i:=LigneDeb to LigneFin do + begin + feux[i].Img.free; // supprime l'image, ce qui efface le feu du tableau graphique + Feux[i].Lbl.free; // supprime le label, ... + if Feux[i].check<>nil then begin Feux[i].check.Free;Feux[i].Check:=nil;end; // supprime le check du feu blanc s'il existait + end; + + for i:=1 to NbreFeux-ligneFin do + begin + index:=i+lignefin; //index ddu feu de remplacement + indexFeu:=lignedeb+i-1; + //Affiche('Suppresion feu '+intToSTR(feux[i+lignedeb].Adresse),clorange); + //Affiche('remplacement par index '+intToSTR(index),clorange); + + feux[indexFeu]:=feux[index]; + adresse:=feux[indexFeu].adresse; + + with feux[IndexFeu].Img do + begin + Parent:=Formprinc.ScrollBox1; // dire que l'image est dans la scrollBox1 + Top:=(HtImg+espY+20)*((IndexFeu-1) div NbreImagePLigne); // détermine les points d'origine + Left:=10+ (LargImg+5)*((IndexFeu-1) mod (NbreImagePLigne)); + Name:='ImageFeu'+IntToSTR(adresse); + s:='Index='+IntToSTR(IndexFeu)+' @='+inttostr(feux[IndexFeu].Adresse)+' Décodeur='+intToSTR(feux[IndexFeu].Decodeur)+ + ' Adresse détecteur associé='+intToSTR(feux[IndexFeu].Adr_det1)+ + ' Adresse élement suivant='+intToSTR(feux[IndexFeu].Adr_el_suiv1); + if feux[IndexFeu].Btype_suiv1=aig then s:=s+' (aig)'; + Hint:=s; + end; + with feux[IndexFeu].Lbl do + begin + Top:=HtImg+((HtImg+EspY+20)*((IndexFeu-1) div NbreImagePLigne)); + Left:=10+ (LargImg+5)*((IndexFeu-1) mod (NbreImagePLigne)); + caption:='@'+IntToSTR(Feux[IndexFeu].adresse); + end; + if Feux[IndexFeu].check<>nil then + with Feux[IndexFeu].Check do + begin + Hint:=intToSTR(IndexFeu); + Top:=HtImg+15+((HtImg+EspY+20)*((IndexFeu-1) div NbreImagePLigne)); + Left:=10+ (LargImg+5)*((IndexFeu-1) mod (NbreImagePLigne)); + end; + //Affiche('décale feu '+IntToSTR(i)+'<'+intToSTR(i+1),clorange); + + feux[index].Adresse:=0; + feux[index].modifie:=false; + end; + Nbrefeux:=NbreFeux-(ligneFin-LigneDeb)-1; + + config_modifie:=true; + RichSig.Clear; + + // réafficher le richsig + for i:=1 to NbreFeux do + begin + s:=encode_Sig_Feux(i); + if s<>'' then + begin + RichSig.Lines.Add(s); + RE_ColorLine(RichSig,RichSig.lines.count-1,ClAqua); + end; + end; + ligneClicSig:=-1; + AncligneClicSig:=-1; + raz_champs_sig; + clicliste:=false; + + { i:=ligneClicSig; if (i<0) then exit; index:=i+1; // passe en index tableau @@ -5443,6 +5477,7 @@ begin AncligneClicSig:=-1; raz_champs_sig; clicliste:=false; + } end; // Ajouter le feu supprimé @@ -5511,7 +5546,7 @@ begin end; function verif_coherence : boolean; -var AncAdr,i,j,k,l,Indexaig,adr,adr2,detect,condcarre,nc,index2,SuivAdr : integer; +var AncAdr,i,j,k,l,Indexaig,adr,adr2,extr,detect,condcarre,nc,index2,SuivAdr : integer; modAig,AncModel,model,km,SuivModel: TEquipement; c : char; ok,trouveSuiv,TrouvePrec : boolean; @@ -5842,6 +5877,7 @@ begin // cohérence 7 // parcoure les aiguillages pour voir si les aiguillages déclarés aux extrémités sont existants for Indexaig:=1 to maxaiguillage do + //indexaig:=29; begin adr:=aiguillage[indexaig].Adresse; if adr>NbMemZone then @@ -5849,6 +5885,7 @@ begin Affiche('Erreur 9.11: adresse aiguillage trop grand: '+intToSTR(adr),clred); ok:=false; end; + adr2:=aiguillage[indexaig].ADroit; c:=aiguillage[indexaig].AdroitB; if (c='D') or (c='S') or (c='P') then @@ -5858,10 +5895,28 @@ begin begin ok:=false; Affiche('Erreur 10.1: aiguillage '+intToSTR(adr)+': déclaration d''un aiguillage '+IntToSTR(adr2)+' inexistant',clred); + end + else + begin + if c='D' then + begin + extr:=aiguillage[index2].ADroit; + if adr<>extr then Affiche('Erreur 10.2: Discordance de déclaration aiguillages '+intToSTR(adr)+'D: '+intToSTR(adr2)+'D',clred); + end; + if c='S' then + begin + extr:=aiguillage[index2].ADevie; + if adr<>extr then Affiche('Erreur 10.2: Discordance de déclaration aiguillages '+intToSTR(adr)+'D: '+intToSTR(adr2)+'S',clred); + end; + if c='P' then + begin + extr:=aiguillage[index2].APointe; + if adr<>extr then Affiche('Erreur 10.2: Discordance de déclaration aiguillages '+intToSTR(adr)+'D: '+intToSTR(adr2)+'P',clred); + end; end; end; - adr2:=aiguillage[indexaig].ADevie; + adr2:=aiguillage[indexaig].Adevie; c:=aiguillage[indexaig].AdevieB; if (c='D') or (c='S') or (c='P') then begin @@ -5869,11 +5924,29 @@ begin if index2=0 then begin ok:=false; - Affiche('Erreur 10.2: aiguillage '+intToSTR(adr)+': déclaration d''un aiguillage '+IntToSTR(adr2)+' inexistant',clred); + Affiche('Erreur 10.1: aiguillage '+intToSTR(adr)+': déclaration d''un aiguillage '+IntToSTR(adr2)+' inexistant',clred); + end + else + begin + if c='D' then + begin + extr:=aiguillage[index2].ADroit; + if adr<>extr then Affiche('Erreur 10.3: Discordance de déclaration aiguillages '+intToSTR(adr)+'S: '+intToSTR(adr2)+'D',clred); + end; + if c='S' then + begin + extr:=aiguillage[index2].ADevie; + if adr<>extr then Affiche('Erreur 10.3: Discordance de déclaration aiguillages '+intToSTR(adr)+'S: '+intToSTR(adr2)+'S',clred); + end; + if c='P' then + begin + extr:=aiguillage[index2].APointe; + if adr<>extr then Affiche('Erreur 10.3: Discordance de déclaration aiguillages '+intToSTR(adr)+'S: '+intToSTR(adr2)+'P',clred); + end; end; end; - adr2:=aiguillage[indexaig].Apointe; + adr2:=aiguillage[indexaig].APointe; c:=aiguillage[indexaig].ApointeB; if (c='D') or (c='S') or (c='P') then begin @@ -5881,9 +5954,28 @@ begin if index2=0 then begin ok:=false; - Affiche('Erreur 10.3: aiguillage '+intToSTR(adr)+': déclaration d''un aiguillage '+IntToSTR(adr2)+' inexistant',clred); + Affiche('Erreur 10.1: aiguillage '+intToSTR(adr)+': déclaration d''un aiguillage '+IntToSTR(adr2)+' inexistant',clred); + end + else + begin + if c='D' then + begin + extr:=aiguillage[index2].ADroit; + if adr<>extr then Affiche('Erreur 10.4: Discordance de déclaration aiguillages '+intToSTR(adr)+'P: '+intToSTR(adr2)+'D',clred); + end; + if c='S' then + begin + extr:=aiguillage[index2].ADevie; + if adr<>extr then Affiche('Erreur 10.4: Discordance de déclaration aiguillages '+intToSTR(adr)+'P: '+intToSTR(adr2)+'S',clred); + end; + if c='P' then + begin + extr:=aiguillage[index2].APointe; + if adr<>extr then Affiche('Erreur 10.4: Discordance de déclaration aiguillages '+intToSTR(adr)+'P: '+intToSTR(adr2)+'P',clred); + end; end; end; + end; // cohérence 8 @@ -6030,42 +6122,74 @@ begin end; procedure TFormConfig.BoutSupAigClick(Sender: TObject); -var i,index,index2 : integer; +var ligneDeb,LigneFin,i,index,index2,debut,longueur,fin,l,ltot : integer; s : string; begin + //trouver ligne de début et de fin sélectionner. + debut:=RichAig.SelStart; + longueur:=RichAig.SelLength; + fin:=debut+longueur; + //Affiche(inttostr(debut)+' '+inttostr(longueur),clyellow); + // trouver les lignes sélectionnées + i:=0;ltot:=0;ligneDeb:=0;LigneFin:=0; + repeat + l:=length(RichAig.lines[i])+2; //+2 car CR LF + ltot:=ltot+l; + if (debut=fin) and (ligneFin=0) and (ligneDeb<>0) then ligneFin:=i+1; + //if (ltot=fin) and (ligneFin=0) then ligneFin:=i; + inc(i); + until (i>=MaxAiguillage) or (ligneFin>0); + if lignefin=0 then if fin>ltot then ligneFin:=MaxAiguillage; + //Affiche(inttostr(Ltot)+' '+inttostr(Fin),clyellow); + + i:=ligneClicAig; if (i<0) then exit; index:=i+1; // passe en index tableau - s:='Voulez-vous supprimer l''aiguillage '+IntToSTR(aiguillage[index].adresse)+'?'; + if ligneDeb=LigneFin then s:='Voulez-vous supprimer l''aiguillage '+IntToSTR(aiguillage[index].adresse)+'?' + else s:='Voulez-vous supprimer les aiguillages de '+ + IntToSTR(aiguillage[ligneDeb].adresse)+' à '+IntToSTR(aiguillage[ligneFin].adresse)+' ?'; + if Application.MessageBox(pchar(s),pchar('confirm'), MB_YESNO or MB_DEFBUTTON2 or MB_ICONQUESTION)=idNo then exit; - Affiche('Suppression de l''aiguillage='+IntToSTR(aiguillage[index].adresse),clOrange); + ButtonAjSup.Caption:='Ajouter l''aig '+intToSTR(aiguillage[index].adresse)+' supprimé'; clicliste:=true; raz_champs_aig; Aig_supprime:=aiguillage[index]; // sauvegarde le supprimé Aig_sauve.adresse:=0; // dévalider sa définition - // efface les attributs de l'aiguillage supprimé - aiguillage[index].Adresse:=0; - aiguillage[index].Modele:=rien; - aiguillage[index].Adroit:=0; - aiguillage[index].Adevie:=0; - aiguillage[index].Ddroit:=0; - aiguillage[index].Ddevie:=0; - aiguillage[index].APointe:=0; - aiguillage[index].modifie:=false; + index:=ligneDeb; - // supprime l'aiguillage du tableau - dec(MaxAiguillage); - for i:=index to MaxAiguillage do + if ligneDeb=LigneFin then s:='Suppression de l''aiguillage '+IntToSTR(aiguillage[index].adresse) + else s:='Suppression des aiguillages de '+ + IntToSTR(aiguillage[ligneDeb].adresse)+' à '+IntToSTR(aiguillage[ligneFin].adresse); + Affiche(s,clOrange); + + //Affiche('Boucle de '+intToSTR(ligneDeb)+' N='+intToSTR(MaxAiguillage-ligneFin),clyellow); + + for i:=1 to MaxAiguillage-ligneFin do begin - Aiguillage[i]:=Aiguillage[i+1]; - end; + index:=i+lignefin; //index de l'aiguillage de remplacement + //Affiche('Suppresion aiguillage '+intToSTR(aiguillage[i+lignedeb].Adresse),clorange); + //Affiche('remplacement par index '+intToSTR(index),clorange); + Aiguillage[lignedeb+i-1]:=Aiguillage[index]; + aiguillage[index].Adresse:=0; + aiguillage[index].Modele:=rien; + aiguillage[index].Adroit:=0; + aiguillage[index].Adevie:=0; + aiguillage[index].Ddroit:=0; + aiguillage[index].Ddevie:=0; + aiguillage[index].APointe:=0; + aiguillage[index].modifie:=false; + end; + MaxAiguillage:=maxAiguillage-(ligneFin-LigneDeb)-1; + config_modifie:=true; RichAig.Clear; - + // réafficher le richsig for i:=1 to MaxAiguillage do begin @@ -6076,6 +6200,11 @@ begin RE_ColorLine(RichAig,RichAig.lines.count-1,ClAqua); end; end; + With RichAig do + begin + SelStart:=0; + Perform(EM_SCROLLCARET,0,0); + end; ligneClicAig:=-1; AncligneClicAig:=-1; clicliste:=false; @@ -6522,7 +6651,11 @@ begin RE_ColorLine(RichBranche,Ligne-1,ClRed); end; - if ok then labelResult.Caption:='Syntaxe correcte' + if ok then + begin + labelResult.Caption:='Syntaxe correcte'; + config_modifie:=true; + end else labelResult.Caption:='Erreur de syntaxe'; end; diff --git a/UnitConfigTCO.dcu b/UnitConfigTCO.dcu index 2111c55..32fc3d2 100644 Binary files a/UnitConfigTCO.dcu and b/UnitConfigTCO.dcu differ diff --git a/UnitConfigTCO.dfm b/UnitConfigTCO.dfm index b7cdb01..563716a 100644 --- a/UnitConfigTCO.dfm +++ b/UnitConfigTCO.dfm @@ -15,30 +15,16 @@ object FormConfigTCO: TFormConfigTCO OnActivate = FormActivate PixelsPerInch = 96 TextHeight = 13 - object Label1: TLabel - Left = 8 - Top = 8 - Width = 83 - Height = 13 - Caption = 'Taille des cellules' - end - object Label2: TLabel - Left = 120 - Top = 8 - Width = 13 - Height = 13 - Caption = 'x' - end object Label3: TLabel Left = 16 - Top = 60 + Top = 44 Width = 156 Height = 13 Caption = 'Nombre de cellules en horizontal:' end object Label4: TLabel Left = 16 - Top = 84 + Top = 68 Width = 145 Height = 13 Caption = 'Nombre de cellules en vertical:' @@ -51,49 +37,35 @@ object FormConfigTCO: TFormConfigTCO end object LabelMaxX: TLabel Left = 235 - Top = 60 + Top = 44 Width = 53 Height = 13 Caption = 'LabelMaxX' end object LabelMaxY: TLabel Left = 235 - Top = 84 + Top = 68 Width = 53 Height = 13 Caption = 'LabelMaxY' end - object LabelTailleX: TLabel - Left = 96 - Top = 8 - Width = 17 - Height = 13 - Caption = 'LabelTailleX' - end - object LabelTailleY: TLabel - Left = 136 - Top = 8 - Width = 25 - Height = 13 - Caption = 'LabelTailleY' - end object Ratio: TLabel - Left = 8 - Top = 32 + Left = 16 + Top = 16 Width = 25 Height = 13 Caption = 'Ratio' end object Label14: TLabel - Left = 72 - Top = 32 + Left = 80 + Top = 16 Width = 17 Height = 13 Caption = '/10' end object ButtonOK: TButton Left = 216 - Top = 248 + Top = 240 Width = 75 Height = 25 Caption = 'OK' @@ -102,7 +74,7 @@ object FormConfigTCO: TFormConfigTCO end object ButtonDessine: TButton Left = 16 - Top = 248 + Top = 240 Width = 75 Height = 25 Caption = 'Redessine' @@ -111,7 +83,7 @@ object FormConfigTCO: TFormConfigTCO end object CheckDessineGrille: TCheckBox Left = 16 - Top = 104 + Top = 88 Width = 105 Height = 17 Caption = 'dessine grille' @@ -119,7 +91,7 @@ object FormConfigTCO: TFormConfigTCO end object EditNbCellX: TEdit Left = 184 - Top = 56 + Top = 40 Width = 49 Height = 21 TabOrder = 3 @@ -127,7 +99,7 @@ object FormConfigTCO: TFormConfigTCO end object EditNbCellY: TEdit Left = 184 - Top = 80 + Top = 64 Width = 49 Height = 21 TabOrder = 4 @@ -263,7 +235,7 @@ object FormConfigTCO: TFormConfigTCO end object Memo1: TMemo Left = 16 - Top = 144 + Top = 136 Width = 273 Height = 81 BevelInner = bvLowered @@ -279,8 +251,8 @@ object FormConfigTCO: TFormConfigTCO TabOrder = 6 end object EditRatio: TEdit - Left = 40 - Top = 29 + Left = 48 + Top = 13 Width = 25 Height = 21 Hint = 'Rapport X/Y d'#39'affichage des cellules' @@ -291,7 +263,7 @@ object FormConfigTCO: TFormConfigTCO end object ColorDialog1: TColorDialog OnShow = ColorDialog1Show - Left = 216 - Top = 8 + Left = 248 + Top = 88 end end diff --git a/UnitConfigTCO.pas b/UnitConfigTCO.pas index 7270714..6f6ae59 100644 --- a/UnitConfigTCO.pas +++ b/UnitConfigTCO.pas @@ -9,8 +9,6 @@ uses type TFormConfigTCO = class(TForm) ButtonOK: TButton; - Label1: TLabel; - Label2: TLabel; Label3: TLabel; Label4: TLabel; ButtonDessine: TButton; @@ -39,8 +37,6 @@ type LabelMaxY: TLabel; ImageQuai: TImage; Label13: TLabel; - LabelTailleX: TLabel; - LabelTailleY: TLabel; EditRatio: TEdit; Ratio: TLabel; Label14: TLabel; @@ -264,8 +260,6 @@ end; procedure TFormConfigTCO.FormActivate(Sender: TObject); begin - LabelTailleX.caption:=IntToSTR(LargeurCell); - LabelTailleY.caption:=IntToSTR(HauteurCell); EditNbCellX.Text:=IntToSTR(NbreCellX); EditNbCellY.Text:=IntToSTR(NbreCellY); EditRatio.text:=IntToSTR(RatioC); diff --git a/UnitDebug.dcu b/UnitDebug.dcu index d8851b9..6b596a0 100644 Binary files a/UnitDebug.dcu and b/UnitDebug.dcu differ diff --git a/UnitDebug.dfm b/UnitDebug.dfm index ca05fd4..0d92c45 100644 --- a/UnitDebug.dfm +++ b/UnitDebug.dfm @@ -1,9 +1,8 @@ object FormDebug: TFormDebug - Left = 219 - Top = 67 + Left = 200 + Top = 155 Width = 842 Height = 784 - VertScrollBar.Position = 39 Caption = 'Fen'#234'tre de d'#233'bug' Color = clWindow TransparentColorValue = clTeal @@ -22,7 +21,7 @@ object FormDebug: TFormDebug TextHeight = 13 object Label1: TLabel Left = 642 - Top = -35 + Top = 4 Width = 108 Height = 13 Anchors = [akTop, akRight] @@ -38,7 +37,7 @@ object FormDebug: TFormDebug end object Label2: TLabel Left = 474 - Top = -37 + Top = 2 Width = 131 Height = 18 Anchors = [akTop, akRight] @@ -52,7 +51,7 @@ object FormDebug: TFormDebug end object EditNivDebug: TEdit Left = 754 - Top = -37 + Top = 2 Width = 49 Height = 21 Anchors = [akTop, akRight] @@ -68,7 +67,7 @@ object FormDebug: TFormDebug end object MemoEvtDet: TMemo Left = 570 - Top = 297 + Top = 336 Width = 239 Height = 201 Anchors = [akTop, akRight] @@ -89,7 +88,7 @@ object FormDebug: TFormDebug end object ButtonEcrLog: TButton Left = 466 - Top = 289 + Top = 328 Width = 97 Height = 29 Anchors = [akTop, akRight] @@ -99,7 +98,7 @@ object FormDebug: TFormDebug end object ButtonRazTampon: TButton Left = 466 - Top = 321 + Top = 360 Width = 97 Height = 33 Anchors = [akTop, akRight] @@ -110,7 +109,7 @@ object FormDebug: TFormDebug end object ButtonCherche: TButton Left = 466 - Top = 257 + Top = 296 Width = 97 Height = 25 Anchors = [akTop, akRight] @@ -120,7 +119,7 @@ object FormDebug: TFormDebug end object ButtonAffEvtChrono: TButton Left = 466 - Top = 217 + Top = 256 Width = 97 Height = 33 Anchors = [akTop, akRight] @@ -131,7 +130,7 @@ object FormDebug: TFormDebug end object ButtonCop: TButton Left = 466 - Top = 169 + Top = 208 Width = 97 Height = 41 Anchors = [akTop, akRight] @@ -148,7 +147,7 @@ object FormDebug: TFormDebug end object RichEdit: TRichEdit Left = 570 - Top = 137 + Top = 176 Width = 239 Height = 153 Anchors = [akTop, akRight] @@ -167,7 +166,7 @@ object FormDebug: TFormDebug end object ButtonRazLog: TButton Left = 466 - Top = 361 + Top = 400 Width = 97 Height = 33 Anchors = [akTop, akRight] @@ -178,7 +177,7 @@ object FormDebug: TFormDebug end object GroupBox1: TGroupBox Left = 464 - Top = 569 + Top = 608 Width = 345 Height = 177 Anchors = [akTop, akRight] @@ -326,7 +325,7 @@ object FormDebug: TFormDebug end object GroupBox2: TGroupBox Left = 464 - Top = -19 + Top = 20 Width = 345 Height = 149 Anchors = [akTop, akRight] @@ -480,27 +479,27 @@ object FormDebug: TFormDebug TabOrder = 8 OnClick = CheckBoxTiersClick end - object CheckDebugTrames: TCheckBox - Left = 208 - Top = 128 - Width = 129 + object CheckBox1: TCheckBox + Left = 160 + Top = 48 + Width = 177 Height = 17 - Caption = 'Debug trames CDM' + Caption = 'Duplication Fen'#234'tre evts vers log' Font.Charset = DEFAULT_CHARSET - Font.Color = clBlack + Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] ParentFont = False TabOrder = 9 - OnClick = CheckDebugTramesClick + OnClick = CheckBox1Click end end object RichDebug: TRichEdit - Left = 8 - Top = -31 + Left = 0 + Top = 0 Width = 457 - Height = 743 + Height = 737 Anchors = [akLeft, akTop, akRight, akBottom] Lines.Strings = ( 'RichDebug') @@ -512,7 +511,7 @@ object FormDebug: TFormDebug end object GroupBox5: TGroupBox Left = 464 - Top = 505 + Top = 544 Width = 345 Height = 57 Anchors = [akTop, akRight] @@ -579,7 +578,7 @@ object FormDebug: TFormDebug end object ButtonRazTout: TButton Left = 467 - Top = 137 + Top = 176 Width = 97 Height = 25 Anchors = [akTop, akRight] diff --git a/UnitDebug.pas b/UnitDebug.pas index 4739c63..758de8e 100644 --- a/UnitDebug.pas +++ b/UnitDebug.pas @@ -54,8 +54,8 @@ type CheckBoxTiers: TCheckBox; ButtonSimuAct0: TButton; ButtonSimuAct1: TButton; - CheckDebugTrames: TCheckBox; ButtonElSuiv: TButton; + CheckBox1: TCheckBox; procedure FormCreate(Sender: TObject); procedure ButtonEcrLogClick(Sender: TObject); procedure EditNivDebugKeyPress(Sender: TObject; var Key: Char); @@ -88,8 +88,8 @@ type procedure CheckBoxTiersClick(Sender: TObject); procedure ButtonSimuAct1Click(Sender: TObject); procedure ButtonSimuAct0Click(Sender: TObject); - procedure CheckDebugTramesClick(Sender: TObject); procedure ButtonElSuivClick(Sender: TObject); + procedure CheckBox1Click(Sender: TObject); private { Déclarations privées } public @@ -490,11 +490,6 @@ begin end; -procedure TFormDebug.CheckDebugTramesClick(Sender: TObject); -begin - debugtrames:=checkDebugTrames.checked; -end; - procedure TFormDebug.ButtonElSuivClick(Sender: TObject); var Adr,Prec,Actuel,erreur,ancdebug : integer ; type1,type2 : tequipement; @@ -528,4 +523,9 @@ begin end; +procedure TFormDebug.CheckBox1Click(Sender: TObject); +begin + dupliqueEvt:=CheckBox1.checked; +end; + end. diff --git a/UnitPilote.dfm b/UnitPilote.dfm index 0815222..7ec2ee9 100644 --- a/UnitPilote.dfm +++ b/UnitPilote.dfm @@ -15,6 +15,9 @@ object FormPilote: TFormPilote OnActivate = FormActivate OnClose = FormClose OnCreate = FormCreate + DesignSize = ( + 331 + 350) PixelsPerInch = 96 TextHeight = 13 object LabelTitrePilote: TLabel @@ -31,10 +34,11 @@ object FormPilote: TFormPilote ParentFont = False end object ImagePilote: TImage - Left = 208 - Top = 48 - Width = 113 - Height = 129 + Left = 224 + Top = 56 + Width = 81 + Height = 105 + Anchors = [] end object LabelNbFeux: TLabel Left = 208 @@ -57,7 +61,7 @@ object FormPilote: TFormPilote ParentFont = False end object Label1: TLabel - Left = 232 + Left = 240 Top = 192 Width = 50 Height = 13 @@ -65,7 +69,7 @@ object FormPilote: TFormPilote end object GroupBox1: TGroupBox Left = 8 - Top = 40 + Top = 48 Width = 193 Height = 185 Caption = 'Signalisation de base' @@ -163,7 +167,7 @@ object FormPilote: TFormPilote end object GroupBox2: TGroupBox Left = 8 - Top = 232 + Top = 240 Width = 193 Height = 89 Caption = 'Signalisation combin'#233'e' @@ -207,7 +211,7 @@ object FormPilote: TFormPilote end object ButtonPilote: TButton Left = 208 - Top = 288 + Top = 296 Width = 113 Height = 33 Caption = 'Envoyer la commande' diff --git a/UnitPrinc.dcu b/UnitPrinc.dcu index a592fc7..cb4fc29 100644 Binary files a/UnitPrinc.dcu and b/UnitPrinc.dcu differ diff --git a/UnitPrinc.pas b/UnitPrinc.pas index dbb9b77..28b0538 100644 --- a/UnitPrinc.pas +++ b/UnitPrinc.pas @@ -3,7 +3,7 @@ Unit UnitPrinc; programme signaux complexes Graphique Lenz delphi 7 + activeX Tmscomm + clientSocket ******************************************** - 24/4/2022 12h + 02/5/2022 23h note sur le pilotage des accessoires: raquette octet sortie + 2 = aiguillage droit = sortie 2 de l'adresse d'accessoire @@ -324,7 +324,7 @@ var CDMhd : THandle; FormPrinc: TFormPrinc; - ack,portCommOuvert,traceTrames,AffMem,AfficheDet,CDM_connecte, + ack,portCommOuvert,traceTrames,AffMem,AfficheDet,CDM_connecte,dupliqueEvt, Raz_Acc_signaux,AvecInit,AvecTCO,terminal,Srvc_Aig,Srvc_Det,Srvc_Act,MasqueBandeauTCO, Srvc_PosTrain,Srvc_Sig,debugtrames : boolean; tablo : array of byte; // tableau rx usb @@ -394,6 +394,7 @@ var event_det : array[1..Max_event_det] of integer; event_det_train : array[1..Max_Trains] of record NbEl : integer; + prev : integer; Det : array[1..3] of integer; // tableau des evts détecteurs par train end; Feu_supprime,Feu_sauve : Tfeu; @@ -425,15 +426,15 @@ procedure envoi_signal(Adr : integer); procedure pilote_direction(Adr,nbre : integer); procedure connecte_USB; procedure deconnecte_usb; -function IsWow64Process: Boolean; +function IsWow64Process: Boolean; procedure Dessine_feu_mx(CanvasDest : Tcanvas;x,y : integer;FrX,frY : real;adresse : integer;orientation : integer); procedure Pilote_acc0_X(adresse : integer;octet : byte); procedure pilote_acc(adresse : integer;octet : byte;Acc : TAccessoire); -function etat_signal_suivant(Adresse,rang : integer) : integer; +function etat_signal_suivant(Adresse,rang : integer) : integer; function suivant_alg3(prec : integer;typeELprec : TEquipement;var actuel : integer;typeElActuel : TEquipement;alg : integer) : integer; function detecteur_suivant_El(el1: integer;TypeDet1 : TEquipement;el2 : integer;TypeDet2 : TEquipement;alg : integer) : integer ; function test_memoire_zones(adresse : integer) : boolean; -function PresTrainPrec(Adresse : integer) : boolean; +function PresTrainPrec(Adresse : integer) : boolean; function cond_carre(adresse : integer) : boolean; function carre_signal(adresse : integer) : boolean; procedure Event_Detecteur(Adresse : integer;etat : boolean;train : string); @@ -1238,7 +1239,7 @@ function Index_feu(adresse : integer) : integer; var i : integer; trouve : boolean; begin - i:=1; + i:=1; repeat trouve:=feux[i].adresse=adresse; if not(trouve) then inc(i); @@ -1299,13 +1300,13 @@ begin val(s,AdrPilote,erreur); if adrPilote=0 then exit; i:=Index_feu(AdrPilote); - + if i=0 then exit; + with Formpilote do begin TFormPilote.Create(Self); show; - ImagePilote.top:=40;ImagePilote.left:=220; ImagePilote.Parent:=FormPilote; ImagePilote.Picture.Bitmap.TransparentMode:=tmAuto; ImagePilote.Picture.Bitmap.TransparentColor:=clblue; @@ -1364,7 +1365,7 @@ begin with Feux[rang].Img do begin Parent:=Formprinc.ScrollBox1; // dire que l'image est dans la scrollBox1 - Name:='ImageFeu'+IntToSTR(rang); // nom de l'image - sert à identifier le composant si on fait clic droit. + Name:='ImageFeu'+IntToSTR(adresse); // nom de l'image - sert à identifier le composant si on fait clic droit. Top:=(HtImg+espY+20)*((rang-1) div NbreImagePLigne); // détermine les points d'origine Left:=10+ (LargImg+5)*((rang-1) mod (NbreImagePLigne)); s:='Index='+IntToSTR(rang)+' @='+inttostr(Adresse)+' Décodeur='+intToSTR(feux[rang].Decodeur)+ @@ -1690,14 +1691,13 @@ begin end; end; - + // loco=adresse de la loco fonction de 0 à 20 état 0/1 procedure Fonction_Loco_Operation(loco,fonction,etat : integer); var s : string ; ah,al : integer; b : byte ; begin - if (fonction<0) or (fonction>28) or (loco<0) or (loco>9999) then exit; if portCommOuvert or parSocketLenz then begin @@ -1720,7 +1720,7 @@ begin if etat<>0 then begin case fonction of - 0 : b:=fa or setbit(0,4); + 0 : b:=fa or setbit(0,4); 1,2,3,4 : b:=fa or setbit(0,fonction-1); // fa est aligné avec l'octet de demande 5,6,7,8 : b:=fb or setbit(0,fonction-5); // fa est aligné avec l'octet de demande 9,10,11,12 : b:=(fb shr 4) or setbit(0,fonction-9); // fa est décalé à gauche de 4 avec l'octet de demande @@ -1738,7 +1738,7 @@ begin end; if (fonction>=13) and (fonction<=20) then b:=(fb shr 8) or razbit(255,fonction-13); // non doc if (fonction>=21) and (fonction<=28) then b:=(fb shr 8) or razbit(255,fonction-21); // non doc - + end; s:=s+char(b); s:=checksum(s); @@ -1772,8 +1772,8 @@ begin 0 : b:=setbit(0,4); 1,2,3,4 : b:=setbit(0,fonction-1); 5,6,7,8 : b:=setbit(0,fonction-5); - 9,10,11,12 : b:=setbit(0,fonction-9); - 13,14,15,16 : b:=setbit(0,fonction-13); // non doc + 9,10,11,12 : b:=setbit(0,fonction-9); + 13,14,15,16 : b:=setbit(0,fonction-13); // non doc end; s:=s+char(b); s:=checksum(s); @@ -1872,7 +1872,6 @@ begin feux[i].EtatSignal:=SetBit(feux[i].EtatSignal,aspect); // allume le numéro du bit de la fonction du signal end; end; - end; @@ -1972,6 +1971,7 @@ end; procedure Envoi_DirectionLEB(Adr : integer;code : integer); var i : integer; begin + i:=index_feu(i); if feux[i].EtatSignal<>code then begin @@ -2047,7 +2047,7 @@ begin repeat inc(i); until (feux[index].SR[i].sortie1=etat) or (feux[index].SR[i].sortie0=etat) or (i=8); - + if (feux[index].SR[i].sortie1=etat) then begin //affiche('trouvé en sortie1 index '+IntToSTR(i),clyellow); @@ -3264,6 +3264,14 @@ begin if (Bt=aig) or (Bt=buttoir) then // aiguillage ou buttoir begin index:=index_aig(adr); + if index=0 then + begin + s:='Erreur 420 : aiguillage '+intToSTR(adr)+' inconnu'; + Affiche(s,clred); + AfficheDebug(s,clred); + suivant_alg3:=9999; + exit; + end; if (aiguillage[index].modele=aig) and (Bt=aig) then // aiguillage normal begin // aiguillage pris en pointe @@ -3363,15 +3371,15 @@ begin suivant_alg3:=adr; exit; end; - if NivDebug=3 then + if (NivDebug>1) or traceListe then begin s:='138 - Aiguillage '+IntToSTR(adr)+' non résolu'; if aiguillage[index].position=const_inconnu then s:=s+' car position inconnue'; AfficheDebug(s,clOrange); Affiche(s,clOrange); end; - - suivant_alg3:=9999;exit; + suivant_alg3:=9996; // position inconnue + exit; end; if (aiguillage[index].modele=tjd) or (aiguillage[index].modele=tjs) then // TJD ou TJS @@ -3436,7 +3444,7 @@ begin end else begin - if nivdebug=3 then + if (nivdebug>1) or traceliste then begin s:='Erreur 120 : TJD 2 états '+intToSTR(Adr)+' non résolue'; AfficheDebug(s,clred); @@ -3478,14 +3486,15 @@ begin ( ((aiguillage[index].DdroitB='D') and (aiguillage[index_aig(prec)].position=const_droit)) or ((aiguillage[index].DdroitB='S') and (aiguillage[index_aig(prec)].position=const_devie)) - ) then + ) + then begin Adr:=aiguillage[index].Adevie; A:=aiguillage[index].AdevieB; end else begin - if nivdebug=3 then + if (nivdebug>1) or traceliste then begin s:='Erreur 121 : TJD 2 états '+intToSTR(Adr)+' non résolue'; AfficheDebug(s,clred); @@ -3537,7 +3546,7 @@ begin begin if NivDebug=3 then AfficheDebug('TJD '+intToSTR(adr)+' bien positionnée cas 1.1',clyellow);end else begin - if NivDebug=3 then AfficheDebug('135.5- TJD '+intToSTR(adr)+' mal positionnée cas 1.1',clyellow); + if (nivdebug>1) or traceliste then AfficheDebug('135.5- TJD '+intToSTR(adr)+' mal positionnée cas 1.1',clyellow); if alg=2 then begin suivant_alg3:=9998;exit; @@ -3552,7 +3561,7 @@ begin if NivDebug=3 then AfficheDebug('TJD '+intToSTR(adr)+' bien positionnée cas 1.2',clyellow);end else begin - if NivDebug=3 then AfficheDebug('135.6- TJD '+intToSTR(adr)+' mal positionnée cas 1.2',clyellow); + if (nivdebug>1) or traceliste then AfficheDebug('135.6- TJD '+intToSTR(adr)+' mal positionnée cas 1.2',clyellow); if alg=2 then begin suivant_alg3:=9998;exit; @@ -3599,7 +3608,7 @@ begin end else begin - if NivDebug=3 then AfficheDebug('135.7- TJD '+intToSTR(adr)+' mal positionnée - cas 2.1',clyellow); + if (nivdebug>1) or traceliste then AfficheDebug('135.7- TJD '+intToSTR(adr)+' mal positionnée - cas 2.1',clyellow); if alg=2 then begin suivant_alg3:=9998;exit; @@ -3621,7 +3630,7 @@ begin end else begin - if NivDebug=3 then AfficheDebug('135.18- TJD '+intToSTR(adr)+' mal positionnée cas 2.2',clyellow); + if (nivdebug>1) or traceliste then AfficheDebug('135.18- TJD '+intToSTR(adr)+' mal positionnée cas 2.2',clyellow); if alg=2 then begin suivant_alg3:=9998;exit; @@ -3666,7 +3675,7 @@ begin end else begin - if NivDebug=3 then AfficheDebug('135.7- TJD '+intToSTR(adr)+' mal positionnée cas 3.1',clyellow); + if (nivdebug>1) or traceliste then AfficheDebug('135.7- TJD '+intToSTR(adr)+' mal positionnée cas 3.1',clyellow); if alg=2 then begin suivant_alg3:=9998;exit; @@ -3685,10 +3694,10 @@ begin AdrDevie:=Adr; suivant_alg3:=9997;exit; end; - end + end else begin - if NivDebug=3 then AfficheDebug('135.8- TJD '+intToSTR(adr)+' mal positionnée cas 3.2',clyellow); + if (nivdebug>1) or traceliste then AfficheDebug('135.8- TJD '+intToSTR(adr)+' mal positionnée cas 3.2',clyellow); if alg=2 then begin suivant_alg3:=9998;exit; @@ -3696,7 +3705,7 @@ begin end; end; - if aiguillage[index].position=const_devie then + if aiguillage[index].position=const_devie then begin Adr:=aiguillage[index2].Adevie; A:=aiguillage[index2].AdevieB; @@ -3727,13 +3736,13 @@ begin begin if NivDebug=3 then AfficheDebug('TJD '+intToSTR(adr)+' bien positionnée cas 4.1',clyellow);end else begin - if NivDebug=3 then AfficheDebug('135.7- TJD '+intToSTR(adr)+' mal positionnée cas 4.1',clyellow); + if (nivdebug>1) or traceliste then AfficheDebug('135.7- TJD '+intToSTR(adr)+' mal positionnée cas 4.1',clyellow); if alg=2 then begin suivant_alg3:=9998;exit; end; end; - end; + end; if BtypePrec=det then begin @@ -3742,7 +3751,7 @@ begin if NivDebug=3 then AfficheDebug('TJD '+intToSTR(adr)+' bien positionnée cas 4.2',clyellow);end else begin - if NivDebug=3 then AfficheDebug('135.8- TJD '+intToSTR(adr)+' mal positionnée cas 4.2',clyellow); + if (nivdebug>1) or traceliste then AfficheDebug('135.8- TJD '+intToSTR(adr)+' mal positionnée cas 4.2',clyellow); if alg=2 then begin suivant_alg3:=9998;exit; @@ -3846,7 +3855,7 @@ begin AfficheDebug(s,clYellow); Affiche(s,clRed); suivant_alg3:=9999; - exit; + exit; end; end else @@ -3858,7 +3867,7 @@ begin begin if prec<>aiguillage[index].Adroit then begin - if NivDebug=3 then AfficheDebug('135.3 - Aiguillage '+intToSTR(adr)+'triple mal positionné',clyellow); + if (nivdebug>1) or traceliste then AfficheDebug('135.3 - Aiguillage '+intToSTR(adr)+'triple mal positionné',clyellow); suivant_alg3:=9998;exit; end else @@ -3870,7 +3879,7 @@ begin begin if prec<>aiguillage[index].Adevie then begin - if NivDebug=3 then AfficheDebug('135.3 - Aiguillage '+intToSTR(adr)+'triple mal positionné',clyellow); + if (nivdebug>1) or traceliste then AfficheDebug('135.3 - Aiguillage '+intToSTR(adr)+'triple mal positionné',clyellow); suivant_alg3:=9998;exit; end else @@ -3882,7 +3891,7 @@ begin begin if prec<>aiguillage[index].Adevie2 then begin - if NivDebug=3 then AfficheDebug('135.3 - Aiguillage '+intToSTR(adr)+'triple mal positionné',clyellow); + if (nivdebug>1) or traceliste then AfficheDebug('135.3 - Aiguillage '+intToSTR(adr)+'triple mal positionné',clyellow); suivant_alg3:=9998;exit; end else @@ -3893,7 +3902,7 @@ begin end; A:=aiguillage[index].ApointeB; Adr:=aiguillage[index].Apointe; - if A='Z' then TypeEl:=det else TypeEL:=aig; //TypeEL=(1=détécteur 2=aig + if A='Z' then TypeEl:=det else TypeEL:=aig; //TypeEL=(1=détécteur 2=aig trouve_element(Adr,TypeEl,1); // branche_trouve IndexBranche_trouve typeGen:=BrancheN[branche_trouve,IndexBranche_trouve].BType; suivant_alg3:=Adr;exit; @@ -3906,7 +3915,7 @@ end; // trouve l'index du feu associé au détecteur adr // renvoie dans voie le numéro de la voie (1 à 4) du signal sur lequel le détecteur se trouve // attention , il peut y avoir plus d'un feu sur un detecteur (suivant le sens)! -// si 2eme feu, son indes est dans index2 +// si 2eme feu, son index est dans index2 function index_feu_det(adr : integer;var voie,index2 : integer) : integer ; var trouve,i,index1 : integer; trouve1,trouve2,trouve3,trouve4 : boolean; @@ -3941,14 +3950,16 @@ begin Index_feu_det:=index1; end; + // renvoie l'adresse du détecteur suivant des deux éléments contigus // TypeElprec/actuel: 1= détecteur 2= aiguillage 4=Buttoir -// algo= type d'algorythme pour suivant_alg3 +// algo= type d'algorithme pour suivant_alg3 +// function detecteur_suivant(prec : integer;TypeElPrec : TEquipement;actuel : integer;TypeElActuel : TEquipement;algo : integer) : integer ; var actuelCalc,PrecCalc,j,AdrSuiv ,indexCalc : integer; TypeprecCalc,TypeActuelCalc : TEquipement; begin - if NivDebug>=2 then + if NivDebug>=2 then AfficheDebug('Proc Detecteur_suivant '+IntToSTR(prec)+','+IntToSTR(BTypeToNum(typeElPrec))+'/'+intToSTR(actuel)+','+ intToSTR(BTypeToNum(TypeElActuel))+ ' Alg='+IntToSTR(algo),clyellow); @@ -3961,7 +3972,7 @@ begin // étape 1 trouver le sens repeat inc(j); - AdrSuiv:=suivant_alg3(precCalc,TypeprecCalc,actuelCalc,TypeActuelCalc,algo); + AdrSuiv:=suivant_alg3(precCalc,TypeprecCalc,actuelCalc,TypeActuelCalc,algo); indexCalc:=index_aig(actuelCalc); if (typeGen=tjd) and false then // si le précédent est une TJD/S et le suivant aussi begin @@ -3989,6 +4000,352 @@ begin detecteur_suivant:=AdrSuiv; end; + +//renvoie l'élément connecté de l'aiguillage ou de la tjd tjs "adr" sur le point D,S ou P passé par connect +procedure aig_ext(adr : integer ; connect : char;var suiv : integer;var typ_suiv: char); +var i : integer; + typ : TEquipement; +begin + i:=index_aig(adr); + typ:=aiguillage[i].modele; + + if (typ=aig) or (typ=triple) then + begin + if connect='P' then + begin + suiv:=aiguillage[i].APointe;typ_suiv:=aiguillage[i].ApointeB; + end; + + if connect='S' then + begin + suiv:=aiguillage[i].ADevie;typ_suiv:=aiguillage[i].ADevieB; + end; + + if connect='D' then + begin + suiv:=aiguillage[i].ADroit;typ_suiv:=aiguillage[i].ADroitB; + end; + + // aiguillage triple + if connect='2' then + begin + suiv:=aiguillage[i].ADevie2;typ_suiv:=aiguillage[i].ADevie2B; + end; + end; + + if (typ=tjd) or (typ=tjs) then + begin + //Affiche('TJD',clYellow); + if connect='S' then + begin + suiv:=aiguillage[i].ADevie;typ_suiv:=aiguillage[i].ADevieB; + end; + if connect='D' then + begin + suiv:=aiguillage[i].ADroit;typ_suiv:=aiguillage[i].ADroitB; + end; + end; + + if typ_suiv=#0 then typ_suiv:='Z'; +end; + + +// renvoie l'élément avant det2 si det1 et det2 sont contigus ou séparés que par des aiguillages +// si det1 et det2 sont contigus sans aiguillages entre eux, çà renvoie det1 +// det_contigu(527,520: renvoie 7 dans suivant +// det_contigu(514,522: renvoie 514 dans suivant +// procédure récursive +procedure det_contigu(det1,det2 : integer;var suivant : integer;var ElSuiv : TEquipement); +var suiv1,indexBranche_det1,indexBranche_det2,branche_det2,branche_det1, + suiv_2,detC,indexBranche_det,suiv_pointe,dernier,it : integer; + type1,type_dernier : Tequipement; + type_tmp : char; + trouve,afdeb : boolean; + + // donne le suivant au point de connection de l'aiguillage + // prec=det ou aig ; suiv=aig + procedure aig_suiv(prec,suiv : integer) ; + var adr2,index : integer; + typ : Tequipement; + begin + inc(it); + if it>50 then + begin + Affiche('Erreur 680 : limite de récursivité',clred); + exit; + end; + + index:=index_aig(suiv); + typ:=aiguillage[index].modele; + + // aiguillage en pointe? + + if afdeb then afficheDebug('Aig_suiv('+intToSTR(prec)+','+intToSTR(suiv)+')',clOrange); + + aig_ext(suiv,'P',suiv_pointe,type_tmp); + if (suiv_pointe=prec) and ((typ=aig) or (typ=triple)) then + begin + // faire le droit + if afdeb then afficheDebug('Aig '+intToSTR(suiv)+' pris en pointe droit',clyellow); + type_Dernier:=aig; + aig_ext(suiv,'D',suiv_2,type_tmp); + if type_tmp<>'Z' then aig_suiv(suiv,suiv_2) else + begin + trouve:=(suiv_2=det2); + if trouve then + begin + dernier:=suiv; + if afdeb then afficheDebug('trouvé ',clLime); + exit; + end; + if afdeb then afficheDebug('trouvé '+intToSTR(suiv_2)+' mais pas attendu',clyellow); + end; + + // faire le dévié + if afdeb then afficheDebug('Aig '+intToSTR(suiv)+' pris en pointe dévié',clyellow); + type_Dernier:=aig; + aig_ext(suiv,'S',suiv_2,type_tmp); + if type_tmp<>'Z' then aig_suiv(suiv,suiv_2) else + begin + trouve:=(suiv_2=det2); + if trouve then + begin + dernier:=suiv; + if afdeb then afficheDebug('trouvé ',clLime); + exit; + end; + if afdeb then afficheDebug('trouvé '+intToSTR(suiv_2)+' mais pas attendu',clyellow) + end; + + // si triple faire S2 + if typ=triple then + begin + if afdeb then afficheDebug('Aig triple'+intToSTR(suiv)+' pris en pointe dévié2',clyellow); + type_Dernier:=aig; + aig_ext(suiv,'2',suiv_2,type_tmp); + if type_tmp<>'Z' then aig_suiv(suiv,suiv_2) else + begin + trouve:=(suiv_2=det2); + if trouve then + begin + dernier:=suiv; + if afdeb then afficheDebug('trouvé ',clLime); + exit; + end; + if afdeb then afficheDebug('trouvé '+intToSTR(suiv_2)+' mais pas attendu',clyellow) + end; + end; + end + + else + begin + // aiguillage en talon ou tjd + + type_Dernier:=aig; + if (typ=aig) or (typ=triple) then + begin + if afdeb then afficheDebug('Aig '+intToSTR(suiv)+' pris en talon',clyellow); + aig_ext(suiv,'P',suiv_2,type_tmp); + + if type_tmp<>'Z' then aig_suiv(suiv,suiv_2) else + begin + trouve:=(suiv_2=det2); + if trouve then + begin + dernier:=suiv; + if afdeb then afficheDebug('trouvé ',clLime); + exit; + end; + if afdeb then afficheDebug('trouvé '+intToSTR(suiv_2)+' mais pas attendu',clyellow) + end; + end; + + if typ=tjd then + begin + if afdeb then afficheDebug('Tjd '+intToSTR(suiv),clyellow); + Adr2:=aiguillage[index].DDevie; // 2eme adresse de la tjd + //index2:=index_aig(adr2); + suiv:=Adr2; + + aig_ext(suiv,'D',suiv_2,type_tmp); + if type_tmp<>'Z' then aig_suiv(suiv,suiv_2) else + begin + trouve:=(suiv_2=det2); + if trouve then + begin + dernier:=suiv; + if afdeb then afficheDebug('trouvé sur D',clLime); + exit; + end; + if afdeb then afficheDebug('trouvé '+intToSTR(suiv_2)+' mais pas attendu',clyellow) + end; + + aig_ext(suiv,'S',suiv_2,type_tmp); + if type_tmp<>'Z' then aig_suiv(suiv,suiv_2) else + begin + trouve:=(suiv_2=det2); + if trouve then + begin + dernier:=suiv; + if afdeb then afficheDebug('trouvé sur S',clLime); + exit; + end; + if afdeb then afficheDebug('trouvé '+intToSTR(suiv_2)+' mais pas attendu',clyellow) + end; + end; + + if typ=tjs then + begin + if afdeb then afficheDebug('Tjs '+intToSTR(suiv),clyellow); + Adr2:=aiguillage[index].DDevie; // 2eme adresse de la tjd + //index2:=index_aig(adr2); + suiv:=Adr2; + + aig_ext(suiv,'D',suiv_2,type_tmp); + if type_tmp<>'Z' then aig_suiv(suiv,suiv_2) else + begin + trouve:=(suiv_2=det2); + if trouve then + begin + dernier:=suiv; + if afdeb then afficheDebug('trouvé sur D',clLime); + exit; + end; + if afdeb then afficheDebug('trouvé '+intToSTR(suiv_2)+' mais pas attendu',clyellow) + end; + + aig_ext(suiv,'S',suiv_2,type_tmp); + if type_tmp<>'Z' then aig_suiv(suiv,suiv_2) else + begin + trouve:=(suiv_2=det2); + if trouve then + begin + dernier:=suiv; + if afdeb then afficheDebug('trouvé sur S',clLime); + exit; + end; + if afdeb then afficheDebug('trouvé '+intToSTR(suiv_2)+' mais pas attendu',clyellow) + end; + end; + end; + end; + + +begin + // trouver les éléments du précédent + afdeb:=TraceListe ; + it:=0; + if afdeb then afficheDebug('Det_contigu '+intToSTR(det1)+' '+intToSTr(det2),clyellow); + trouve_element(det1,det,1); // branche_trouve IndexBranche_trouve + if IndexBranche_trouve=0 then + begin + if NivDebug=3 then AfficheDebug('Element '+intToSTR(det1)+' non trouvé',clred); + exit; + end; + indexBranche_det1:=IndexBranche_trouve; + branche_det1:=branche_trouve; + + trouve_element(det2,det,1); // branche_trouve IndexBranche_trouve + if IndexBranche_trouve=0 then + begin + if NivDebug=3 then AfficheDebug('Element '+intToSTR(actuel)+' non trouvé',clred); + exit; + end; + + trouve:=false; + indexBranche_det2:=IndexBranche_trouve; + branche_det2:=branche_trouve; + detC:=det1; + indexBranche_det:=indexBranche_det1; + Branche_Det:=Branche_det1; + dernier:=0; + + // faire en incrément + if afdeb then afficheDebug('incrément',cyan); + suiv1:=BrancheN[Branche_Det,indexBranche_det+1].adresse; + type1:=BrancheN[Branche_Det,indexBranche_det+1].Btype; // det aig buttoir + + // type aig, aig triple, tjd, tjs + if type1=aig then + begin + aig_suiv(detC,suiv1); + if trouve then + begin + type_dernier:=aig; + if afdeb then afficheDebug('ok1',cllime); + end; + end; + + if (type1=det) and not(trouve) then + begin + trouve:=suiv1=det2; + if trouve then + begin + dernier:=det1; + type_Dernier:=det; + if afdeb then afficheDebug('ok2',ClLime); + end; + end; + + // faire en décrément + if afdeb then afficheDebug('décrément',cyan); + if not(trouve) then + begin + suiv1:=BrancheN[Branche_Det,indexBranche_det-1].adresse; + type1:=BrancheN[Branche_Det,indexBranche_det-1].Btype; + if type1=aig then + begin + aig_suiv(detC,suiv1); + if trouve then + begin + type_Dernier:=aig; + if afdeb then afficheDebug('ok3',cllime); + end; + end; + + if (type1=det) and not(trouve) then + begin + trouve:=suiv1=det2; + if trouve then + begin + dernier:=det1; + type_dernier:=det; + if afdeb then afficheDebug('ok4',ClLime); + end; + end; + + end; + + //Affiche(intToSTR(dernier),clOrange); + if afdeb then + begin + if (dernier=0) then afficheDebug('----Pas trouvé',ClLime) + else afficheDebug('----Trouvé dernier='+intToSTR(dernier),clLime); + end; + + suivant:=dernier;ElSuiv:=type_dernier; + +end; + + +// renvoie le détecteur suivant aux détecteurs 1 et 2 +// les aiguillages n'ont pas besoin d'être ouverts entre 1 et 2. +// par contre pour le suivant au det2, les aiguillages doivent être ouverts +// si on ne trouve pas le suivant, renvoie 9999 +function det_suiv_cont(det1,det2 : integer) : integer; +var dernier: integer; + derniertyp : Tequipement; +begin + det_contigu(det1,det2,dernier,dernierTyp); + if dernier<>0 then + begin + det_suiv_cont:=detecteur_suivant(dernier,dernierTyp,det2,det,1); + //Affiche(intToSTR(suivant),clorange); + end + else det_suiv_cont:=9999; +end; + + // renvoie les adresses des détecteurs adjacents au détecteur "adresse" (avant, après) // résultat dans adj1 et adj2 en variable globale procedure Det_Adj(adresse : integer); @@ -4038,7 +4395,9 @@ begin if TraceListe then AfficheDebug('Fin Det_Adj ',clyellow); end; + // renvoie l'adresse du détecteur suivant des deux éléments +// les aiguillages doivent être ouverts entre El1 et el2 // El1 et El2 peuvent être séparés par des aiguillages, mais de pas plus de 3 détecteurs // en sortie : 9999= det1 ou det2 non trouvé // 9996 : non trouvé @@ -4057,6 +4416,7 @@ begin begin if NivDebug=3 then AfficheDebug('paramètres incorrects >9000',clred); detecteur_suivant_El:=9999; + exit; end; // trouver détecteur 1 @@ -4068,7 +4428,8 @@ begin s:='611. '+IntToSTR(el1)+' non trouvé'; AfficheDebug(s,clOrange); end; - detecteur_suivant_El:=9999;exit; + detecteur_suivant_El:=9999; + exit; end; IndexBranche_det1:=IndexBranche_trouve; branche_trouve_det1:=branche_trouve; @@ -4274,14 +4635,16 @@ begin actuel:=feux[i].Adr_el_suiv1; if feux[i].Btype_suiv1=det then TypeElActuel:=det; // le type du feu 1=détécteur 2=aig 5=bis if feux[i].Btype_suiv1=aig then TypeElActuel:=aig; + multi:=feux[i].Adr_det2<>0; - // trouver si une des voies présente un train + // trouver si une des voies présente un train if (multi) then begin - carre_signal:=FALSE; // pour l'instant verrouillé + carre_signal:=FALSE; // pour l'instant verrouillé en mode pas de carré exit; end; - + + //Affiche(IntToSTR(actuel),clyellow); repeat inc(j); @@ -4535,6 +4898,7 @@ begin if i=0 then begin Affiche('Erreur 168: signal '+intToSTR(adresse)+' non trouvé',clred); + Aiguille_deviee:=0; exit; end; prec:=feux[i].Adr_det1; @@ -4640,7 +5004,7 @@ end; // adresse=adresse du signal function test_memoire_zones(adresse : integer) : boolean; var - AdrSuiv,prec,ife,actuel,i,j, + AdrSuiv,prec,ife,actuel,i,j,it, dernierdet,AdrFeu,Nfeux,NFeuxMax,voie,index2 : integer; TypePrec,TypeActuel : TEquipement; Pres_train : boolean; @@ -4698,6 +5062,7 @@ begin dernierdet:=prec; // purge les aiguillages après le feu + it:=0; if TypeActuel=aig then repeat AdrSuiv:=suivant_alg3(prec,TypePrec,actuel,TypeActuel,1); @@ -4708,7 +5073,15 @@ begin end; prec:=actuel;TypePrec:=TypeActuel; actuel:=AdrSuiv;TypeActuel:=typeGen; - until typeactuel=det; + inc(it); + until (typeactuel=det) or (it>100); + + if it>100 then + begin + Affiche('Erreur 750 : trop d''itérations',clred); + AfficheDebug('Erreur 750 : trop d''itérations',clred); + test_memoire_zones:=false; + end; repeat inc(j); @@ -4732,8 +5105,8 @@ begin begin test_memoire_zones:=Pres_train; exit; - end; - + end; + dernierdet:=actuel; i:=index_feu_det(Actuel,voie,index2); // renvoie l'index du signal se trouvant au détecteur "AdrSuiv": il peut y avoir 4 détecteurs par signal @@ -4837,6 +5210,7 @@ begin trouve_index_det_chrono:=0; end; + // teste si la route est valide de det1, det2 à det3 // les détecteurs doivent être consécutifs // trouve le détecteur suivant de det1 à det2 si la route est correcte. (détecteurs en entrée obligatoires) @@ -4844,24 +5218,26 @@ end; // Résultat: // si 9999 : pas de route // si 10 : ok route trouvée -function test_route_valide(det1,det2,det3 : integer) : integer; +function test_route_valide(det1,det2,det3 : integer; var previsionnel : integer) : integer; var det_suiv : integer; begin if TraceListe then AfficheDebug('test route valide '+IntToSTR(det1)+' '+IntToSTR(det2)+' vers '+IntToSTR(det3)+' ',clyellow); det_suiv:=detecteur_suivant_el(det1,det,det2,det,1); + previsionnel:=detecteur_suivant_el(det2,det,det_suiv,det,1); if det_suiv=det3 then begin test_route_valide:=10;exit;end; test_route_valide:=9999; exit; end; + // présence train précédent les 3 cantons du signal (soit 4 feux avant) function PresTrainPrec(Adresse : integer) : boolean; var - AdrSuiv,prec,ife,actuel,i,j, + AdrSuiv,prec,ife,actuel,i,j,ifd, dernierdet,AdrFeu,Nfeux,NFeuxMax,voie,index2 : integer; TypePrec,TypeActuel : TEquipement; - Pres_train : boolean; + Pres_train,malpositionne : boolean; s : string; begin if NivDebug>=1 then AfficheDebug('Proc testTrainPrec('+intToSTR(adresse)+')',clyellow); @@ -4910,6 +5286,7 @@ begin begin // sortie si aucun détecteur déclaré sur le feu PresTrainPrec:=Pres_train; + if nivDebug=3 then AfficheDebug('Pas de voie '+intToSTR(ife),clyellow); exit; end; @@ -4919,165 +5296,74 @@ begin inc(j); AdrSuiv:=suivant_alg3(prec,TypePrec,actuel,TypeActuel,2); // 2 car arrêt sur aiguille en talon mal positionnée - if (AdrSuiv=0) or (AdrSuiv>9990) then + malpositionne:=(AdrSuiv=0) or (AdrSuiv>9990); + if malpositionne then begin + if (nivDebug=3) then AfficheDebug('Aiguille en talon mal positionné',clYellow); PresTrainPrec:=Pres_train; - exit; end; - prec:=actuel;TypePrec:=TypeActuel; - actuel:=AdrSuiv;TypeActuel:=typeGen; - - if typeactuel=det then + if not(malpositionne) then begin - Pres_train:=MemZone[actuel,dernierdet] or Pres_Train; - if (nivDebug=3) then + prec:=actuel;TypePrec:=TypeActuel; + actuel:=AdrSuiv;TypeActuel:=typeGen; + + if typeactuel=det then begin + Pres_train:=MemZone[actuel,dernierdet] or Pres_Train; + PresTrainPrec:=Pres_train; if Pres_Train then begin - AfficheDebug('Présence train de '+intToSTR(actuel)+' à '+intToSTR(dernierdet),clyellow); - PresTrainPrec:=Pres_train; + if (nivDebug=3) then AfficheDebug('Présence train de '+intToSTR(actuel)+' à '+intToSTR(dernierdet),clyellow); exit; end - else AfficheDebug('Absence train de '+intToSTR(actuel)+' à '+intToSTR(dernierdet),clyellow) - end; - dernierdet:=actuel; + else begin if nivDebug=3 then AfficheDebug('Absence train de '+intToSTR(actuel)+' à '+intToSTR(dernierdet),clyellow);end; - i:=index_feu_det(Actuel,voie,index2); // renvoie l'index du signal se trouvant au détecteur "AdrSuiv": il peut y avoir 4 détecteurs par signal - if i<>0 then - begin - AdrFeu:=feux[i].adresse; // adresse du feu - if (AdrFeu=adresse) then // si on ne reboucle sur le même signal dont on cherche le suivant + dernierdet:=actuel; + + ifd:=index_feu_det(Actuel,voie,index2); // renvoie l'index du signal se trouvant au détecteur "AdrSuiv": il peut y avoir 4 détecteurs par signal + if ifd<>0 then begin - AdrFeu:=0;j:=10; // on ne trouve pas de suivant - PresTrainPrec:=false; - exit; - end; - if (AdrFeu<>0) then // si l'adresse est <>0 - begin - if (feux[i].Adr_el_suiv1=prec) then // le feu est-il dans le bon sens de progression? + AdrFeu:=feux[ifd].adresse; // adresse du feu + if (AdrFeu=adresse) then // si on ne reboucle sur le même signal dont on cherche le suivant begin - inc(Nfeux); - j:=0; - s:='Trouvé feu ('+IntToSTR(nfeux)+'/'+intToSTR(NFeuxMax)+') '+IntToSTR(AdrFeu); - if (NivDebug>0) And Pres_Train then AfficheDebug(s+' et mémoire de zone à 1',clyellow); - if (NivDebug>0) And (not(Pres_Train)) then AfficheDebug(s+' et mémoire de zone à 0',clOrange); - if nFeux=NFeuxMax then + AdrFeu:=0;j:=10; // on ne trouve pas de suivant + PresTrainPrec:=false; + exit; + end; + if (AdrFeu<>0) then // si l'adresse est <>0 + begin + if (feux[ifd].Adr_el_suiv1=prec) then // le feu est-il dans le bon sens de progression? begin - PresTrainPrec:=Pres_train; - exit; + inc(Nfeux); + j:=0; + s:='Trouvé feu ('+IntToSTR(nfeux)+'/'+intToSTR(NFeuxMax)+') '+IntToSTR(AdrFeu); + if (NivDebug>0) And Pres_Train then AfficheDebug(s+' et mémoire de zone à 1',clyellow); + if (NivDebug>0) And (not(Pres_Train)) then AfficheDebug(s+' et mémoire de zone à 0',clOrange); + { if nFeux=NFeuxMax then + begin + PresTrainPrec:=Pres_train; + exit; + end; } + end + else + begin + if NivDebug=3 then AfficheDebug('Trouvé feu '+intToSTR(AdrFeu)+' mais dans le mauvais sens',clYellow); + AdrFeu:=0; end; - end - else - begin - if NivDebug=3 then AfficheDebug('Trouvé feu '+intToSTR(AdrFeu)+' mais dans le mauvais sens',clYellow); - AdrFeu:=0; end; end; end; - end; - until (j=10); // on arrete jusqu'à trouver un signal ou si on va trop loin (10 itérations) - inc(ife); - until ife>=5; + end; + until (j=10) or malpositionne; // on arrete jusqu'à trouver un signal ou si on va trop loin (10 itérations) + inc(ife); + until ife>=5; if (NivDebug>0) then AfficheDebug('Pas trouvé de signal suivant au '+intToSTR(adresse),clyellow); PresTrainPrec:=Pres_train; end; -// présence train 3 détecteurs avant le feu -function PresTrainPrecVieux(AdrFeu : integer) : boolean; -var PresTrain : boolean; - j,i,Det_initial,Adr_El_Suiv,DetPrec1,DetPrec2,DetPrec3,DetPrec4 : integer; - Btype_el_suivant : TEquipement; -begin - If NivDebug=3 then AfficheDebug('Proc PresTrainPrec('+intToSTR(AdrFeu)+') ---------------',clOrange); - i:=index_feu(Adrfeu); - if i=0 then - begin - Affiche('Erreur 604 - feu '+IntToSTR(adrFeu)+' non trouvé',clred); - if NivDebug=3 then AfficheDebug('Erreur 604 - feu '+IntToSTR(adrFeu)+' non trouvé',clred); - PresTrainPrecVieux:=false; - exit; - end; - - // **** un feu peut être associé à 4 détecteurs (pour 4 voies convergentes) ***** - // il faut donc explorer les 4 détecteurs probables - PresTrain:=FALSE; - j:=1; - - repeat - if NivDebug=3 then afficheDebug('Séquence '+IntToSTR(j)+' de recherche des 4 détecteurs précédents-----',clYellow); - if (j=1) then - begin - det_initial:=feux[i].Adr_det1; - Adr_El_Suiv:=feux[i].Adr_el_suiv1; - Btype_el_suivant:=feux[i].Btype_suiv1; - end; - if (j=2) then - begin - det_initial:=feux[i].Adr_det2; - Adr_El_Suiv:=feux[i].Adr_el_suiv2; - Btype_el_suivant:=feux[i].Btype_suiv2; - end; - if (j=3) then - begin - det_initial:=feux[i].Adr_det3; - Adr_El_Suiv:=feux[i].Adr_el_suiv3; - Btype_el_suivant:=feux[i].Btype_suiv3; - end; - if (j=4) then - begin - det_initial:=feux[i].Adr_det4; - Adr_El_Suiv:=feux[i].Adr_el_suiv4; - Btype_el_suivant:=feux[i].Btype_suiv4; - end; - if (det_initial<>0) then - begin - DetPrec1:=detecteur_suivant(Adr_El_Suiv,Btype_el_suivant,det_initial,det,2); // 2= algo2 = arret sur aiguillage en talon mal positionné - if nivdebug=3 then afficheDebug('detPrec1='+intToSTR(DetPrec1),clYellow); - if DetPrec1<1024 then // route bloquée par aiguillage mal positionné - begin - if detPrec1<>0 then DetPrec2:=detecteur_suivant_El(det_initial,det,DetPrec1,det,2) else DetPrec2:=0; - if nivdebug=3 then afficheDebug('detPrec2='+intToSTR(DetPrec2),clYellow); - if DetPrec2<1024 then - begin - if detPrec2<>0 then DetPrec3:=detecteur_suivant_El(DetPrec1,det,DetPrec2,det,2) else DetPrec3:=0; - if nivdebug=3 then afficheDebug('detPrec3='+intToSTR(DetPrec3),clYellow); - if DetPrec3<1024 then - begin - if detPrec3<>0 then DetPrec4:=detecteur_suivant_El(DetPrec2,det,DetPrec3,det,2) else DetPrec4:=0; - if nivdebug=3 then afficheDebug('detPrec4='+intToSTR(DetPrec4),clYellow); - if DetPrec4<1024 then - begin - if AffSignal or (NivDebug>=2) then AfficheDebug('Les détecteurs précédents au feu '+IntToSTR(Adrfeu)+' sont:'+intToSTR(Det_initial)+' '+intToSTR(DetPrec1)+' '+intToSTR(DetPrec2)+' '+intToSTR(DetPrec3)+' '+intToSTR(DetPrec4),clyellow); - PresTrain:=MemZone[DetPrec4,detPrec3] or - MemZone[DetPrec3,detPrec2] or MemZone[DetPrec2,detPrec1] or MemZone[DetPrec1,Det_initial] or presTrain ; - if AffSignal or (NivDebug=3) then - begin - if MemZone[DetPrec4,detPrec3] then AfficheDebug('0.présence train '+IntToSTR(DetPrec4)+' '+IntToSTR(detPrec3),clyellow); - if MemZone[DetPrec3,detPrec2] then AfficheDebug('1.présence train '+IntToSTR(DetPrec3)+' '+IntToSTR(detPrec2),clyellow); - if MemZone[DetPrec2,detPrec1] then AfficheDebug('2.présence train '+IntToSTR(DetPrec2)+' '+IntToSTR(detPrec1),clyellow); - if MemZone[DetPrec1,det_initial] then AfficheDebug('3.présence train '+IntToSTR(DetPrec1)+' '+IntToSTR(det_Initial),clyellow); - if PresTrain then AfficheDebug('présence train',clyellow) else afficheDebug('abscence train',clyellow); - end; - end; - //if AffSignal then AfficheDebug('MemZone'+intToSTR(DetPrec3)+' '+IntToSTR(detPrec2) = '+MemZone[DetPrec3,detPrec2] - end; - end; - end; - end; - inc(j); - until (j>=5); - if AffSignal or (NivDebug=3) then - begin - if presTrain Then afficheDebug('présence train feu '+intToSTR(AdrFeu),clorange) - else AfficheDebug('Absence train feu '+intToSTR(AdrFeu),clorange); - end; - PresTrainPrecVieux:=presTrain; -end; - - -// mise à jour de l'état d'un feu en fontion de son environnement et affiche le feu +// mise à jour de l'état d'un feu en fonction de son environnement et affiche le feu procedure Maj_Feu(Adrfeu : integer); var Adr_det,etat,Aig,Adr_El_Suiv,modele,index,IndexAig : integer ; PresTrain,Aff_semaphore,car : boolean; @@ -5086,11 +5372,13 @@ var Adr_det,etat,Aig,Adr_El_Suiv,modele,index,IndexAig : integer ; s : string; begin if signalDebug=AdrFeu then AffSignal:=true; - if AffSignal then + if AffSignal then begin s:='Traitement du feu '+intToSTR(Adrfeu)+'------------------------------------'; AfficheDebug(s,clOrange); - end; + nivDebug:=3; + end; + index:=index_feu(Adrfeu); if AdrFeu<>0 then begin @@ -5118,27 +5406,9 @@ begin if Combine<>0 then s:=s+' + '+etatSign[combine]; AfficheDebug(s,clyellow); end; - // signaux traités spécifiquement - { - if (AdrFeu=201) then - begin - if ((aiguillage[index_aig(28].position<>const_droit) and (aiguillage[index_aig(29].position<>const_droit) and - (aiguillage[index_aig(31].position=2)) then // attention spécial - Maj_Etat_Signal(AdrFeu,blanc) else Maj_Etat_Signal(AdrFeu,violet); - envoi_LEB(AdrFeu); - exit; - end; - if (AdrFeu=217) then - begin - if ((aiguillage[index_aig(24].position<>const_droit) and (aiguillage[index_aig(26].position<>const_droit)) then - Maj_Etat_Signal(AdrFeu,blanc) else Maj_Etat_Signal(AdrFeu,violet); - envoi_LEB(AdrFeu); - exit; - end; - } - + // signal à 2 feux = carré violet+blanc - if (Feux[index].aspect=2) then //or (feux[i].check<>nil) then // si carré violet + if (modele=2) then //or (feux[i].check<>nil) then // si carré violet begin //AfficheDebug('Feux à 2 feux',CLOrange); // si aiguillage après signal mal positionnées @@ -5160,11 +5430,12 @@ begin //if AffSignal then AfficheDebug('Debut du traitement général',clYellow); // traitement des feux >3 feux différents de violet (cas général) - if (Feux[index].aspect>=3) and (feux[index].EtatSignal<>violet_F) then + if (modele>=3) and (feux[index].EtatSignal<>violet_F) then begin PresTrain:=false; // détecteurs précédent le feu , pour déterminer si leurs mémoires de zones sont à 1 pour libérer le carré - if (Feux[index].VerrouCarre) and (Feux[index].aspect>=4) then presTrain:=PresTrainPrec(AdrFeu); + if (Feux[index].VerrouCarre) and (modele>=4) then + presTrain:=PresTrainPrec(AdrFeu); if AffSignal then afficheDebug('Fin de la recherche des 4 détecteurs précédents-----',clOrange); // si le signal peut afficher un carré et les aiguillages après le signal sont mal positionnées ou que pas présence train avant signal et signal @@ -5174,7 +5445,7 @@ begin car:=cond_carre(AdrFeu) or car; if AffSignal and car then AfficheDebug('le signal a des aiguilles en talon aval mal positionnées',clYellow); if (NivDebug>=1) and car then AfficheDebug('le signal a des aiguilles en talon aval mal positionnées',clYellow); - if (Feux[index].aspect>=4) and ( (not(PresTrain) and Feux[index].VerrouCarre) or car) then Maj_Etat_Signal(AdrFeu,carre) + if (modele>=4) and ( (not(PresTrain) and Feux[index].VerrouCarre) or car) then Maj_Etat_Signal(AdrFeu,carre) else begin // si on quitte le détecteur on affiche un sémaphore : attention tester le sens de circulation @@ -5209,7 +5480,7 @@ begin if (TestBit(etat,jaune)) then begin Maj_Etat_Signal(AdrFeu,jaune_cli); - if AffSignal then AfficheDebug('400.Mise du feu au jaune cli',clyellow); + //if AffSignal then AfficheDebug('400.Mise du feu au jaune cli',clyellow); end; end; end @@ -5223,7 +5494,7 @@ begin if TestBit(etat,carre) or testBit(etat,semaphore) or testBit(etat,semaphore_cli )then begin Maj_Etat_Signal(AdrFeu,jaune); - if AffSignal then AfficheDebug('Mise du Feu à l''avertissement',clyellow); + //if AffSignal then AfficheDebug('Mise du Feu à l''avertissement',clyellow); end else begin @@ -5235,11 +5506,11 @@ begin if TestBit(etat,rappel_30) then begin Maj_Etat_Signal(AdrFeu,ral_30); - if affsignal then AfficheDebug('Mise du feu au ralen 30',clyellow); + //if affsignal then AfficheDebug('Mise du feu au ralen 30',clyellow); end; if TestBit(etat,rappel_60) then begin - if AffSignal then AfficheDebug('Mise du Feu au ralen 60',clyellow); + //if AffSignal then AfficheDebug('Mise du Feu au ralen 60',clyellow); Maj_Etat_Signal(AdrFeu,ral_60); // si signal suivant est au rappel60, il faut tester s'il est à l'avertissement aussi if TestBit(etat,jaune) then Maj_Etat_Signal(AdrFeu,jaune_cli); end; @@ -5247,29 +5518,29 @@ begin else begin // si le signal suivant est jaune - if affsignal then AfficheDebug('test 404',clyellow); + //if affsignal then AfficheDebug('test 404',clyellow); if TestBit(etat,jaune) then begin Maj_Etat_Signal(AdrFeu,jaune_cli); - if affsignal then AfficheDebug('401.Mise du feu au jaune cli',clyellow); + //if affsignal then AfficheDebug('401.Mise du feu au jaune cli',clyellow); end else begin - if affsignal then AfficheDebug('test 405',clyellow); + //if affsignal then AfficheDebug('test 405',clyellow); if feux[index].check<>nil then begin - if affsignal then AfficheDebug('test 406',clyellow); + //if affsignal then AfficheDebug('test 406',clyellow); if feux[index].check.Checked then begin Maj_Etat_Signal(AdrFeu,blanc); - if affsignal then AfficheDebug('Mise du feu au blanc',clyellow); + //if affsignal then AfficheDebug('Mise du feu au blanc',clyellow); end else Maj_Etat_Signal(AdrFeu,vert); end else begin Maj_Etat_Signal(AdrFeu,vert); - if affsignal then AfficheDebug('Mise du feu au vert',clyellow); + //if affsignal then AfficheDebug('Mise du feu au vert',clyellow); end; end; end; @@ -5280,7 +5551,7 @@ begin end; end; envoi_signauxCplx; - if signalDebug=AdrFeu then AffSignal:=false; + if signalDebug=AdrFeu then begin AffSignal:=false;nivDebug:=0;end; end; Procedure Maj_feux; @@ -5298,15 +5569,6 @@ begin end; end; - -procedure rafraichit; -begin - //Affiche('Procédure rafraichit',cyan); - begin - Maj_feux; - end -end; - // trouve l'index d'un détecteur dans une branche depuis la fin de la branche // si pas trouvé, renvoie 0 function index_detecteur_fin(detecteur,Num_branche : integer) : integer; @@ -5356,17 +5618,14 @@ end; // calcul des zones depuis le tableau des fronts descendants des évènements détecteurs // transmis dans le tableau Event_det procedure calcul_zones; -var AdrFeu,AdrDetFeu,Nbre,i,resultat,det1,det2,det3,AdrSuiv,AdrPrec : integer ; - - creer_tableau : boolean; +var AdrFeu,AdrDetFeu,Nbre,i,det1,det2,det3,AdrSuiv,AdrPrec,Prev,det_suiv : integer ; TypeSuiv : tEquipement; s : string; begin - creer_tableau:=false; det3:=event_det[N_event_det]; // c'est le nouveau détecteur if det3=0 then exit; // pas de nouveau détecteur FormDebug.MemoEvtDet.lines.add('Le nouveau détecteur est '+IntToSTR(det3)) ; - if TraceListe then AfficheDebug('Le nouveau détecteur est '+IntToSTR(det3),clyellow) ; + if TraceListe or dupliqueEvt then AfficheDebug('Le nouveau détecteur est '+IntToSTR(det3),clyellow) ; // évaluer d'abord la route du nouveau détecteur sur tous les tableau déja rempli de 2 éléments for i:=1 to N_trains do @@ -5377,9 +5636,23 @@ begin if TraceListe or (NivDebug=3) then AfficheDebug('traitement Train n°'+intToSTR(i)+' 2 détecteurs',clyellow); det1:=event_det_train[i].det[1]; det2:=event_det_train[i].det[2]; - resultat:=test_route_valide(det1,det2,det3); - if resultat=10 then + + //det_suiv:=detecteur_suivant_el(det1,det,det2,det,1); + det_suiv:=det_suiv_cont(det1,det2); + + {s:=intToSTr(det_suiv)+'=Det_suiv_cont('+intToSTR(det1)+','+intToSTR(det2)+')'; + FormDebug.MemoEvtDet.lines.add(s); + if TraceListe or (NivDebug=3) then afficheDebug(s,clyellow);} + + //Det_Adj(det2); // renvoie les adresses des détecteurs adjacents au détecteur "det1" résultat dans adj1 et adj2 + //s:='adjacents='+intToSTR(adj1)+' '+intToSTR(adj2); + //s:='Suivant='+intToSTR(det_suiv); + //FormDebug.MemoEvtDet.lines.add(s); + //if TraceListe or (NivDebug=3) then afficheDebug(s,clyellow); + + if det_suiv=det3 then begin + if TraceListe then AfficheDebug(' la route est valide',clyellow); AdrSuiv:=detecteur_suivant_el(det2,det,det3,det,1); // ici on cherche le suivant à det2 det3, algo=1 if (Adrsuiv>=9996) then begin @@ -5394,7 +5667,7 @@ begin With FormDebug.RichEdit do begin s:='train '+IntToSTR(i)+' '+intToStr(det2)+' à '+intToStr(det3)+' => Mem '+IntToSTR(det3)+' à '+IntTOStr(AdrSuiv); - Lines.Add(s); + Lines.Add(s); index_couleur:=((i - 1) mod NbCouleurTrain) +1; RE_ColorLine(FormDebug.RichEdit,lines.count-1,CouleurTrain[index_couleur]); end; @@ -5409,21 +5682,30 @@ begin event_act(det2,det3,0,''); // désactivation zone event_act(det3,AdrSuiv,1,''); // activation zone end - else Affiche('Erreur 740 : Adresse détecteur trop élevé',clred); + else + begin + s:='Erreur 740 : Adresse détecteur trop élevé '; + if det2>NbMemZone then s:=s+inttostr(det2)+' '; + if det3>NbMemZone then s:=s+inttostr(det2)+' '; + if AdrSuiv>NbMemZone then s:=s+inttostr(det2); + Affiche(s,clred); + end; // supprimer le 1er et décaler event_det_train[i].det[1]:=event_det_train[i].det[2]; event_det_train[i].det[2]:=det3; event_det_train[i].NbEl:=2; + with FormDebug.MemoEvtDet do begin - lines.add('Nouveau Tampon train '+intToStr(i)+'--------'); + lines.add('1.Nouveau Tampon train '+intToStr(i)+'--------'); lines.add(intToSTR(event_det_train[i].det[1])); lines.add(intToSTR(event_det_train[i].det[2])); + end; - if TraceListe then + if TraceListe or dupliqueEvt then begin - AfficheDebug('Nouveau Tampon train '+intToStr(i)+'--------',clyellow); + AfficheDebug('1.Nouveau Tampon train '+intToStr(i)+'--------',clyellow); AfficheDebug(intToSTR(event_det_train[i].det[1]),clyellow); AfficheDebug(intToSTR(event_det_train[i].det[2]),clyellow); end; @@ -5434,12 +5716,16 @@ begin if ModeCouleurCanton=0 then zone_TCO(det3,AdrSuiv,1) else zone_TCO(det3,AdrSuiv,2); // affichage avec la couleur de index_couleur du train end; - rafraichit; - rafraichit; - rafraichit; + event_det_train[i].prev:=prev; // prévisionnel + Maj_feux; + Maj_feux; + Maj_feux; exit; // sortir absolument end; - end; + end + else if TraceLIste then AfficheDebug(' la route est invalide',clyellow); + event_det_train[i].prev:=prev; // prévisionnel + end; end; @@ -5457,15 +5743,22 @@ begin begin event_det_train[i].det[2]:=det3; event_det_train[i].NbEl:=2; + with FormDebug.MemoEvtDet do begin - lines.add('Nouveau Tampon train '+intToStr(i)+'--------'); + lines.add('2. Nouveau Tampon train '+intToStr(i)+'--------'); lines.add(intToSTR(event_det_train[i].det[1])); lines.add(intToSTR(event_det_train[i].det[2])); end; + if dupliqueEvt then + begin + AfficheDebug('2. Nouveau Tampon train '+intToStr(i)+'--------',clYellow); + AfficheDebug(intToSTR(event_det_train[i].det[1]),clyellow); + AfficheDebug(intToSTR(event_det_train[i].det[2]),clyellow); + end; if TraceListe then begin - AfficheDebug('Nouveau Tampon train '+intToStr(i)+'--------',clyellow); + AfficheDebug('2. Nouveau Tampon train '+intToStr(i)+'--------',clyellow); AfficheDebug(intToSTR(event_det_train[i].det[1]),clyellow ); AfficheDebug(intToSTR(event_det_train[i].det[2]),clyellow ); end; @@ -5516,12 +5809,21 @@ begin event_det_train[N_trains].det[1]:=0; event_det_train[N_trains].det[2]:=det3; event_det_train[N_trains].NbEl:=2; + with FormDebug.MemoEvtDet do begin - lines.add('Nouveau Tampon train '+intToStr(N_Trains)+'--------'); + lines.add('3. Nouveau Tampon train '+intToStr(N_Trains)+'--------'); lines.add(intToSTR(event_det_train[N_Trains].det[1])); lines.add(intToSTR(event_det_train[N_Trains].det[2])); end; + if dupliqueEvt then + begin + AfficheDebug('3. Nouveau Tampon train '+intToStr(N_Trains)+'--------',clyellow); + AfficheDebug(intToSTR(event_det_train[N_Trains].det[1]),clyellow); + AfficheDebug(intToSTR(event_det_train[N_Trains].det[2]),clyellow); + end; + + end else begin @@ -5529,12 +5831,17 @@ begin event_det_train[N_trains].NbEl:=1; with FormDebug.MemoEvtDet do begin - lines.add('Nouveau Tampon train '+intToStr(N_trains)+'--------'); + lines.add('4. Nouveau Tampon train '+intToStr(N_trains)+'--------'); lines.add(intToSTR(event_det_train[N_trains].det[1])); end; + if dupliqueEvt then + begin + AfficheDebug('4. Nouveau Tampon train '+intToStr(N_trains)+'--------',clyellow); + AfficheDebug(intToSTR(event_det_train[N_trains].det[1]),clyellow); + end; if TraceListe then begin - AfficheDebug('Nouveau Tampon train '+intToStr(N_trains)+'--------',clyellow); + AfficheDebug('4. Nouveau Tampon train '+intToStr(N_trains)+'--------',clyellow); AfficheDebug(intToSTR(event_det_train[N_trains].det[1]),clyellow ); end; end; @@ -5697,7 +6004,7 @@ begin end; end; -// traitement sur les évènements détecteurs +// traitement des évènements détecteurs procedure Event_Detecteur(Adresse : integer;etat : boolean;train : string); var i,AdrSuiv,AdrFeu,AdrDetfeu,index,Etat01,AdrPrec : integer; typeSuiv : tequipement; @@ -6661,7 +6968,7 @@ end; // démarrage principal du programpe signaux_complexes procedure TFormPrinc.FormCreate(Sender: TObject); -var i,voie : integer; +var i : integer; s : string; begin TraceSign:=True; @@ -6692,7 +6999,7 @@ begin FormDebug.Caption:=AF+' debug'; N_Trains:=0; NivDebug:=0; - debugtrames:=false; + debugtrames:=true; algo_Unisemaf:=1; AvecInit:=true; //&&&& avec initialisation des aiguillages ou pas @@ -6799,21 +7106,24 @@ begin // TCO if avectco then begin - //créée la fenêtre TCO non modale - FormTCO:=TformTCO.Create(nil); - FormTCO.show; - end; + //créée la fenêtre TCO non modale + FormTCO:=TformTCO.Create(nil); + FormTCO.show; + end; Affiche('Fin des initialisations',clyellow); LabelEtat.Caption:=' '; Affiche_memoire; + { aiguillage[index_aig(1)].position:=const_devie; aiguillage[index_aig(3)].position:=const_devie; aiguillage[index_aig(5)].position:=const_droit; - aiguillage[index_aig(7)].position:=const_droit; + aiguillage[index_aig(7)].position:=const_devie; + aiguillage[index_aig(8)].position:=const_devie; + aiguillage[index_aig(12)].position:=const_droit; aiguillage[index_aig(19)].position:=const_devie; - aiguillage[index_aig(20)].position:=const_droit; + aiguillage[index_aig(20)].position:=const_devie; aiguillage[index_aig(21)].position:=const_droit; aiguillage[index_aig(26)].position:=const_droit; aiguillage[index_aig(27)].position:=const_droit; @@ -6822,12 +7132,9 @@ begin aiguillage[index_aig(25)].position:=const_droit; aiguillage[index_aig(9)].position:=const_droit; - // index_feu_det(530,voie,i); - // Affiche(intToSTR(voie)+intToSTr(i),clred); - //Affiche(IntToSTR(aiguille_deviee(1001)),clyellow); - - //cursor:=crHandPoint; - } + Affiche(intToSTR(det_suiv_cont(527,520)),clLime); +} + //det_suiv_cont(525,528) ; end; @@ -7125,7 +7432,7 @@ end; procedure TFormPrinc.BoutonRafClick(Sender: TObject); begin - rafraichit; + Maj_feux; end; // erreur sur socket Lenz (interface XpressNet) @@ -7145,8 +7452,11 @@ begin 10061 : s:=s+': Connexion refusée'; 10065 : s:=s+': Port non connecté'; end; - if errorcode<>10061 then affiche(s,clOrange); - if nivDebug=3 then afficheDebug(s,clOrange); + if nivDebug=3 then + begin + afficheDebug(s,clOrange); + affiche(s,clOrange); + end; parSocketLenz:=false; ErrorCode:=0; end; @@ -7163,8 +7473,12 @@ begin 10061 : s:=s+': Connexion refusée'; 10065 : s:=s+': Port non connecté'; end; - if errorcode<>10061 then affiche(s,ClOrange); - afficheDebug(s,ClOrange); + + if nivdebug=3 then + begin + afficheDebug(s,ClOrange); + affiche(s,clOrange); + end; deconnecte_cdm; if (portCommOuvert=false) and (parSocketLenz=false) then LabelTitre.caption:=titre; caption:=AF; @@ -7211,7 +7525,7 @@ begin Envoi_signauxCplx; end; // si pas coché, on revient en normal - if not(coche) then rafraichit; + if not(coche) then Maj_feux; end; end; @@ -7458,7 +7772,11 @@ begin i:=pos('|',trame_CDM); if i=0 then begin - if debugTrames then AfficheDebug('tronqué1 : '+trame_CDM,clyellow); + if debugTrames then + begin + Affiche('tronqué1 : '+trame_CDM,clred); + AfficheDebug('tronqué1 : '+trame_CDM,clyellow); + end; residuCDM:=trame_CDM; Nbre_recu_cdm:=0; exit; @@ -7466,7 +7784,11 @@ begin j:=posEx('|',trame_CDM,i+1); if j=0 then begin - if debugTrames then AfficheDebug('tronqué2 : '+trame_CDM,clyellow); + if debugTrames then + begin + Affiche('tronqué2 : '+trame_CDM,clRed); + AfficheDebug('tronqué2 : '+trame_CDM,clyellow); + end; residuCDM:=trame_CDM; Nbre_recu_cdm:=0; exit; @@ -7487,7 +7809,11 @@ begin if long>l then begin - if debugTrames then AfficheDebug('tronqué3 : '+trame_CDM,clyellow); + if debugTrames then + begin + Affiche('tronqué3 : '+trame_CDM,clRed); + AfficheDebug('tronqué3 : '+trame_CDM,clyellow); + end; residuCDM:=trame_CDM; Nbre_recu_cdm:=0; exit; @@ -7507,7 +7833,11 @@ begin until (i=0) or (NbreVir=nbre); if (i=0) then begin - if debugTrames then AfficheDebug('tronqué4 : '+trame_CDM,clyellow); + if debugTrames then + begin + Affiche('tronqué4 : '+trame_CDM,clRed); + AfficheDebug('tronqué4 : '+trame_CDM,clyellow); + end; residuCDM:=trame_CDM; Nbre_recu_cdm:=0; exit; @@ -7589,6 +7919,7 @@ begin index:=index_aig(adr); if index<>0 then begin + // conversion des états CDM en état Xpressnet standardisés // aiguillage normal if aiguillage[index].modele=aig then begin @@ -7666,7 +7997,9 @@ begin end else begin - AfficheDebug('Recu evt aig de CDM pour un aiguillage '+intToSTR(Adr)+' non déclaré',clOrange); + s:='Recu evt aig de CDM pour un aiguillage '+intToSTR(Adr)+' non déclaré'; + Affiche(s,clorange); + AfficheDebug(s,clOrange); end; end; @@ -7837,7 +8170,7 @@ procedure TFormPrinc.Codificationdesfeux1Click(Sender: TObject); var i,j,k,l,NfeuxDir,nc : integer; s,s2 : string; begin - Affiche('Codification interne des feux',Cyan); + Affiche('Codification interne des feux:',ClYellow); for i:=1 to NbreFeux do begin @@ -7851,9 +8184,9 @@ begin s:=s+' Det='+IntToSTR(feux[i].Adr_det1); s:=s+' El_Suiv1='+IntToSTR(feux[i].Adr_el_suiv1)+' Type suiv1='+intToSTR(BTypeToNum(feux[i].Btype_suiv1)); case feux[i].Btype_suiv1 of - det : s:=s+' (détecteur) '; - aig,tjs,tjd : s:=s+' (aiguillage ou TJD-S) '; - triple : s:=s+' (aiguillage triple) '; + det : s:=s+' (det) '; + aig,tjs,tjd : s:=s+' (aig ou TJD-S) '; + triple : s:=s+' (aig triple) '; end; if feux[i].decodeur=6 then s:=s+'Cible unisemaf='+intToSTR(feux[i].Unisemaf); @@ -8195,7 +8528,7 @@ begin s:=editAdrTrain.Text; val(s,adr,erreur); if (erreur<>0) or (adr<0) then exit; - if not(portCommOuvert) and not(parSocketLenz) then exit; + if not(portCommOuvert) and not(parSocketLenz) and not(CDM_Connecte) then exit; s:=editVitesse.Text; val(s,vit,erreur); if (erreur<>0) or (vit<0) then exit; @@ -8209,7 +8542,7 @@ end; // pour déplacer l'ascenseur de l'affichage automatiquement en bas procedure TFormPrinc.FenRichChange(Sender: TObject); begin - SendMessage(FenRich.handle,WM_VSCROLL,SB_BOTTOM, 0); + SendMessage(FenRich.handle,WM_VSCROLL,SB_BOTTOM,0); end; procedure TFormPrinc.Copier1Click(Sender: TObject); @@ -8255,15 +8588,14 @@ end; // cliqué droit sur un feu puis sur le menu propriétés procedure TFormPrinc.Proprits1Click(Sender: TObject); var s: string; - index : integer; + adresse : integer; begin clicliste:=false; - s:=((Tpopupmenu(Tmenuitem(sender).GetParentMenu).PopupComponent) as TImage).name; // nom du composant, pout récupérer l'index (ex: ImageFeu6) - //Affiche(s,clOrange); // nom de l'image du signal (ex: ImageFeu6) - index:=extract_int(s); // extraire l'index (ex 6) + s:=((Tpopupmenu(Tmenuitem(sender).GetParentMenu).PopupComponent) as TImage).name; // nom du composant, pout récupérer l'adresse du feu (ex: ImageFeu260) + //Affiche(s,clOrange); // nom de l'image du signal (ex: ImageFeu260) + adresseFeuClic:=extract_int(s); // extraire l'adresse (ex 260) Tformconfig.create(nil); formconfig.PageControl.ActivePage:=formconfig.TabSheetSig; - indexfeuclic:=index-1; clicproprietes:=true; formconfig.showmodal; formconfig.close; @@ -8326,7 +8658,7 @@ begin if erreur<>0 then exit; val(editFonc01.Text,etat,erreur); if erreur<>0 then exit; - if not(portCommOuvert) and not(parSocketLenz) then exit; + if not(portCommOuvert) and not(parSocketLenz) and not(CDM_connecte) then exit; val(editAdrTrain.Text,loco,erreur); s:=trains[combotrains.itemindex+1].nom_train; if CDM_connecte then diff --git a/UnitTCO.dcu b/UnitTCO.dcu index e9865d4..6ae5171 100644 Binary files a/UnitTCO.dcu and b/UnitTCO.dcu differ diff --git a/UnitTCO.pas b/UnitTCO.pas index f83c79c..9d2a0dd 100644 --- a/UnitTCO.pas +++ b/UnitTCO.pas @@ -385,7 +385,7 @@ begin reset(fichier); except Affiche('Nouveau tco',clyellow); - NbreCellX:=35;NbreCellY:=20;LargeurCell:=30;HauteurCell:=30; + NbreCellX:=35;NbreCellY:=20;LargeurCell:=35;HauteurCell:=35; RatioC:=10; exit; end; @@ -542,8 +542,9 @@ begin Val(s,NbreCellY,erreur) end; - // largeur et hauteur des cellules + // Ancien largeur et hauteur des cellules if ancienformatTCO then begin s:=lit_ligne;val(s,LargeurCell,erreur);i:=pos(',',s);delete(s,1,i);Val(s,HauteurCell,erreur);end; + { sa:=uppercase(Cellule_ch)+'='; i:=pos(sa,s); if i<>0 then @@ -552,11 +553,12 @@ begin trouve_cellule:=true; delete(s,i,length(sa)); val(s,i,erreur); - NbreCellX:=i; + LargeurCell:=i; i:=pos(',',s);delete(s,1,i); Val(s,HauteurCell,erreur) end; - + } + // ratio sa:=uppercase(Ratio_ch)+'='; i:=pos(sa,s); @@ -746,8 +748,6 @@ begin writeln(fichier,'/ Taille de la matrice x,y'); writeln(fichier,matrice_ch+'='+IntToSTR(NbreCellX)+','+intToSTR(NbreCellY)); - writeln(fichier,'/ Largeur et hauteur des cellules en pixels'); - writeln(fichier,cellule_ch+'='+IntToSTR(LargeurCell)+','+intToSTR(HauteurCell)); writeln(fichier,'/ Ratio d''affichage celluleX/CelluleY'); writeln(fichier,Ratio_ch+'='+intToSTR(ratioC)); writeln(fichier,'/Matrice TCO'); @@ -3233,9 +3233,9 @@ end; // =2 : couleur de l'index train procedure zone_TCO(det1,det2,mode: integer); -var i,j,x,y,ancienY,ancien2Y,ancienX,ancien2X,Xdet1,Ydet1,Xdet2,Ydet2,Bimage,adresse, +var i,j,x,y,xn,yn,ancienY,ancienX,Xdet1,Ydet1,Xdet2,Ydet2,Bimage,adresse, pos,pos2 : integer; - memtrouve,debugTCO : boolean; + memtrouve,debugTCO,increment : boolean; mdl : Tequipement; s : string; begin @@ -3248,34 +3248,32 @@ begin trouve_det(det2,Xdet2,Ydet2); if (Xdet2=0) or (Ydet2=0) then exit; + increment:=true; // inverser coordonnées des détecteurs si à l'envers en X if xDet2x) and (ancienY=Y) then begin xn:=x-1;if pos=const_devie then yn:=y+1;end; + if (ancienXy) then xn:=x-1; if (pos=const_inconnu) then Erreur_TCO(x,y); end; - // tourner à droite - 6 : if ancien2Xx) and (ancienY=Y) then xn:=x-1; + if (ancienX>x) and (ancienYx) and (ancienY=Y) then xn:=x-1; + if (ancienX>x) and (ancienY>y) then xn:=x-1; + if (pos=const_inconnu) then Erreur_TCO(x,y); + end; + 5 : begin + if debugTCO then Affiche('El 5',clyellow); + pos:=positionTCO(x,y); + if (ancienXx) and (ancienY=Y) then begin xn:=x-1;if pos=const_devie then yn:=y-1;end; + if (ancienXx) and (ancienY=Y) then begin xn:=x-1;yn:=y-1;end; + if (ancienX>x) and (ancienY>y) then begin xn:=x-1;yn:=y-1;end; if (pos=const_inconnu) then Erreur_TCO(x,y); end; - // aiguillage en pointe - 15 : if ancien2Xx) and (ancienYy) then begin xn:=x+1;yn:=y-1;end; if (pos=const_inconnu) then Erreur_TCO(x,y); - end - else begin dec(x);inc(y);end; - 16 : if ancien2Xx) and (ancienY>y) then begin xn:=x-1;if pos=const_droit then yn:=y-1;end; + if (pos=const_inconnu) then Erreur_TCO(x,y); + end; + 15 : begin + if debugTCO then Affiche('El 15',clyellow); + pos:=positionTCO(x,y); + if (ancienXY) then begin xn:=x+1;if pos=const_droit then yn:=y-1;end; + if (ancienX>x) and (ancienYx) and (ancienY=y) then begin xn:=x-1;yn:=y+1;end; + if (pos=const_inconnu) then Erreur_TCO(x,y); + end; + 16 : if ancienX0 then begin @@ -3397,37 +3392,50 @@ begin if (pos2=const_inconnu) then Erreur_TCO(x,y); if (pos=const_droit) and (pos2=const_droit) then begin - inc(x); + if ancienXx) and (ancienY=Y) then xn:=x-1; + if (ancienXY) then begin xn:=x+1;yn:=y-1;end; + if (ancienX>x) and (ancienY0 then + if debugTCO then Affiche('El 22',clyellow); + if adresse<>0 then begin j:=Index_Aig(adresse); pos:=aiguillage[j].position; @@ -3440,45 +3448,62 @@ begin if (pos2=const_inconnu) then Erreur_TCO(x,y); if (pos=const_droit) and (pos2=const_droit) then begin - inc(x);inc(y); + if ancienXx) and (ancienY=Y) then xn:=x-1; + if (ancienX>x) and (ancienY>Y) then begin xn:=x-1;yn:=y-1;end; + if (ancienXdet2) and memTrouve) or (i>NbCellulesTCO); //Affiche(intToSTR(x),clLime); if i>NbCellulesTCO then begin - s:='Erreur 1000 : dépassement d''itérations TCO: '+IntToSTR(det1)+' - '+IntToSTR(det2); + s:='Erreur 1000 TCO : dépassement d''itérations '+IntToSTR(det1)+' - '+IntToSTR(det2); Affiche(s,clred); AfficheDebug(s,clred); end; end; @@ -4833,20 +4858,19 @@ end; procedure TFormTCO.ButtonSimuClick(Sender: TObject); begin - aiguillage[Index_Aig(1)].position:=const_devie; + aiguillage[Index_Aig(1)].position:=const_devie; aiguillage[Index_Aig(2)].position:=const_droit; - aiguillage[Index_Aig(3)].position:=const_devie; - aiguillage[Index_Aig(5)].position:=const_devie; - aiguillage[Index_Aig(7)].position:=const_droit; - aiguillage[Index_Aig(12)].position:=const_devie; - aiguillage[Index_Aig(20)].position:=const_devie; + aiguillage[Index_Aig(3)].position:=const_droit; + aiguillage[Index_Aig(4)].position:=const_devie; + aiguillage[Index_Aig(5)].position:=const_droit; + aiguillage[Index_Aig(7)].position:=const_devie; + aiguillage[Index_Aig(12)].position:=const_droit; + aiguillage[Index_Aig(20)].position:=const_droit; + aiguillage[Index_Aig(21)].position:=const_droit; + aiguillage[Index_Aig(26)].position:=const_droit; + aiguillage[Index_Aig(28)].position:=const_devie; index_couleur:=1; - //zone_TCO(527,519,0); - zone_TCO(519,517,2); - - - //zone_TCO(547,560,1); - //zone_TCO(530,520,1); + zone_TCO(520,529,1); end; procedure TFormTCO.CheckPinvClick(Sender: TObject); diff --git a/tco.cfg b/tco.cfg index 5424f6c..17bdf77 100644 --- a/tco.cfg +++ b/tco.cfg @@ -1,27 +1,30 @@ -/ Couleurs : fond, voies, détecteur_activé, grille, textes, quai +/ Définitions CoulFond=202050 CoulVoies=0077FF CoulAllume=00FFFF CoulGrille=4A4A4A CoulTexte=00FF00 CoulQuai=808080 +CoulCanton=00FFFF +ModeCouleurCanton=1 +AvecGrille=1 / Taille de la matrice x,y -Matrice=53,13 -/ Largeur et hauteur des cellules en pixels -Cellule=42,42 +Matrice=35,13 +/ Ratio d'affichage celluleX/CelluleY +Ratio=10 /Matrice TCO [Matrice] / inutilisé,adresse,image,inversion aiguillage,Orientation du feu, pied du feu , [texte], representation, fonte, taille fonte, couleur fonte, style -(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,TCO GARE PRINCIPALE,1,ARIAL,20,00FFFF,GI)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,288,30,0,2,0,,2,,0,00FF00,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,) -(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,8,00FF00,)(0,0,0,0,0,0,,2,,8,00FF00,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,9,0,0,0,,2,,0,000000,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,) -(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,6,2,0,0,0,,2,,0,00FF00,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,10,0,0,0,,2,,0,000000,)(0,0,9,0,0,0,,2,,0,000000,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,) -(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,10,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,232,30,0,3,0,,2,,0,00FF00,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,COOPER BLACK,10,00FF00,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,10,0,0,0,,2,,0,000000,)(0,0,10,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,) -(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,4,15,0,0,0,,2,MS SANS SERIF,10,00FF00,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,7,0,0,0,,2,,0,000000,)(0,0,10,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,) -(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,3,15,0,0,0,,2,,0,00FF00,)(0,5,2,0,0,0,,2,,0,00FF00,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,515,1,0,0,0,,2,MS SANS SERIF,10,00FFFF,)(0,515,1,0,0,0,,0,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,7,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,) -(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,260,30,0,2,0,,2,MS SANS SERIF,10,00FF00,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,10,0,0,0,,2,,0,000000,)(0,0,10,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,316,30,0,3,0,,2,COOPER BLACK,10,00FF00,)(0,0,0,0,0,0,,2,COOPER BLACK,10,0000FF,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,23,0,0,0,,2,,0,000000,)(0,0,23,0,0,0,,2,,0,000000,)(0,0,23,0,0,0,QUAI 1,1,ARIAL,12,FFFFFF,G)(0,0,23,0,0,0,,2,,0,000000,)(0,0,23,0,0,0,,2,,0,000000,)(0,0,23,0,0,0,,2,,0,000000,)(0,0,23,0,0,0,,2,,0,000000,)(0,0,23,0,0,0,,2,,0,000000,)(0,0,23,0,0,0,,2,,0,000000,)(0,0,23,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,190,30,0,2,0,,2,COOPER BLACK,10,00FF00,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,) -(0,0,0,0,0,0,,2,,0,000000,)(0,0,6,0,0,0,,2,,0,000000,)(0,518,1,0,0,0,,0,,0,00FFFF,)(0,518,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,1,3,0,0,0,,2,,0,00FF00,)(0,0,21,0,0,0,,2,,0,00FF00,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,VOIE 2,2,ARIAL,10,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,523,1,0,0,0,,0,,0,00FFFF,)(0,523,1,0,0,0,,0,,0,00FFFF,)(0,523,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,) -(0,0,0,0,0,0,,2,,0,000000,)(0,0,6,0,0,0,,2,,0,000000,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,12,4,0,0,0,,2,MS SANS SERIF,10,00FF00,)(0,2,3,0,0,0,,2,MS SANS SERIF,10,00FF00,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,519,1,0,0,0,,2,,0,00FFFF,)(0,519,1,0,0,0,,0,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,VOIE 1,2,ARIAL,10,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,8,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,7,2,0,0,0,,2,,0,00FF00,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,527,1,0,0,0,,2,,8,00FFFF,)(0,0,1,0,0,0,,3,,8,00FFFF,)(0,0,1,0,0,0,,0,,0,00FFFF,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,) -(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,1,0,0,0,,0,,0,00FFFF,)(0,0,8,0,0,0,,0,,0,000000,)(0,0,11,0,0,0,,0,,0,000000,)(0,330,30,0,3,0,,0,,0,00FF00,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,23,0,0,0,,0,,0,000000,)(0,0,23,0,0,0,,0,,0,000000,)(0,0,23,0,0,0,QUAI 2,0,ARIAL,12,FFFFFF,G)(0,0,23,0,0,0,,0,,0,000000,)(0,0,23,0,0,0,,0,,0,000000,)(0,0,23,0,0,0,,0,,0,000000,)(0,0,23,0,0,0,,0,,0,000000,)(0,0,23,0,0,0,,0,,0,000000,)(0,0,23,0,0,0,,0,,0,000000,)(0,0,23,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,10,0,0,0,,0,,0,000000,)(0,204,30,0,3,0,,0,COOPER BLACK,10,00FF00,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,8,00FF00,)(0,0,0,0,0,0,,0,,8,00FF00,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,) -(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,1,0,0,0,,0,,0,00FFFF,)(0,0,1,0,0,0,,0,,0,00FFFF,)(0,21,5,0,0,0,,0,,0,00FF00,)(0,20,5,0,0,0,,0,,0,00FF00,)(0,520,1,0,0,0,,2,,8,00FFFF,)(0,520,1,0,0,0,,0,,0,00FFFF,)(0,520,1,0,0,0,,0,,0,00FFFF,)(0,0,1,0,0,0,,0,,8,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,0,,0,00FFFF,)(0,0,1,0,0,0,,0,,8,00FFFF,)(0,0,1,0,0,0,,0,,0,00FFFF,)(0,0,1,0,0,0,,0,,0,00FFFF,)(0,0,1,0,0,0,,0,,8,00FFFF,)(0,0,1,0,0,0,,0,,0,00FFFF,)(0,0,1,0,0,0,,0,,0,00FFFF,)(0,0,1,0,0,0,,0,,8,00FFFF,)(0,0,1,0,0,0,,0,,0,00FFFF,)(0,0,1,0,0,0,,0,,8,00FFFF,)(0,0,1,0,0,0,,0,,0,00FFFF,)(0,0,1,0,0,0,,0,,0,00FFFF,)(0,0,7,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,8,00FF00,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,) -(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,176,30,0,3,0,,0,MS SANS SERIF,10,00FF00,)(0,0,0,0,0,0,,2,COOPER BLACK,10,00FF00,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,3,,8,00FF00,)(0,0,0,0,0,0,,0,,8,00FF00,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,8,00FF00,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,8,00FF00,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,8,00FF00,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,) -(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,) +(0,358,30,0,1,1,,2,,0,FFFFFF,)(0,0,20,0,0,0,,2,,0,00FFFF,)(0,0,20,0,0,0,,2,,0,00FFFF,)(0,497,30,0,1,2,,2,,0,FFFFFF,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,00FFFF,)(0,0,0,0,0,0,,2,,0,00FFFF,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,TCO GARE PRINCIPALE,1,ARIAL,20,00FFFF,GI)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,FFFFFF,)(0,0,0,0,0,0,,0,,0,000000,) +(0,0,0,0,0,0,,2,,0,000000,)(0,0,20,0,0,0,,2,,0,00FFFF,)(0,0,20,0,0,0,,2,,0,00FFFF,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,00FFFF,)(0,0,0,0,0,0,,2,,0,00FFFF,)(0,0,0,0,0,0,,2,,0,00FFFF,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,8,00FF00,)(0,0,0,0,0,0,,2,,8,00FF00,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,00FFFF,)(0,0,0,0,0,0,,2,,0,00FFFF,)(0,0,0,0,0,0,,2,,0,00FFFF,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,9,0,0,0,,2,,0,000000,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,0,,0,00FFFF,)(0,0,0,0,0,0,,0,,0,000000,) +(0,0,0,0,0,0,,2,,0,000000,)(0,517,20,0,0,0,,2,,0,00FFFF,)(0,531,20,0,0,0,,2,,0,00FFFF,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,00FFFF,)(0,0,0,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,6,2,0,0,0,,2,,0,00FF00,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,0,0,0,0,,2,,0,00FFFF,)(0,0,0,0,0,0,,2,,0,00FFFF,)(0,0,0,0,0,0,,2,,0,00FFFF,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,00FFFF,)(0,0,0,0,0,0,,2,,0,00FFFF,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,10,0,0,0,,2,,0,000000,)(0,0,9,0,0,0,,2,,0,000000,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,0,,0,00FFFF,)(0,0,0,0,0,0,,0,,0,000000,) +(0,0,0,0,0,0,,2,,0,000000,)(0,0,20,0,0,0,,2,,0,00FFFF,)(0,0,20,0,0,0,,2,,0,00FFFF,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,10,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,232,30,0,3,1,,2,,0,00FF00,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,00FFFF,)(0,0,0,0,0,0,,2,,0,00FFFF,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,00FFFF,)(0,0,0,0,0,0,,2,,0,00FFFF,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,FFFFFF,)(0,288,30,0,2,1,,2,,0,FFFFFF,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,10,0,0,0,,2,MS SANS SERIF,10,00FFFF,)(0,0,10,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,) +(0,0,0,0,0,0,,2,,0,000000,)(0,0,20,0,0,0,,2,,0,00FFFF,)(0,0,20,0,0,0,,2,,0,00FFFF,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,4,15,0,0,0,,2,,0,00FF00,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,514,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,522,1,0,0,0,,2,,0,00FFFF,)(0,0,7,0,0,0,,2,,0,000000,)(0,0,10,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,) +(0,0,0,0,0,0,,2,,0,000000,)(0,0,20,0,0,0,,2,,0,00FFFF,)(0,0,20,0,0,0,,2,,0,00FFFF,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,3,15,0,0,0,,2,,0,00FF00,)(0,5,2,0,0,0,,2,,0,00FF00,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,515,1,0,0,0,,2,,0,00FFFF,)(0,515,1,0,0,0,,0,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,7,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,) +(0,0,0,0,0,0,,2,,0,000000,)(0,0,19,0,0,0,,2,,0,00FFFF,)(0,0,19,0,0,0,,2,,0,00FFFF,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,260,30,0,2,1,,2,,0,00FF00,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,10,0,0,0,,2,,0,000000,)(0,0,10,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,316,30,0,3,1,,2,,0,00FF00,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,23,0,0,0,,2,,0,000000,)(0,0,23,0,0,0,,2,,0,000000,)(0,0,23,0,0,0,QUAI 1,1,ARIAL,12,FFFFFF,G)(0,0,23,0,0,0,,2,,0,000000,)(0,0,23,0,0,0,,2,,0,000000,)(0,0,23,0,0,0,,2,,0,000000,)(0,0,23,0,0,0,,2,,0,000000,)(0,0,23,0,0,0,,2,,0,000000,)(0,0,23,0,0,0,,2,,0,000000,)(0,0,23,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,190,30,0,2,1,,2,,0,00FF00,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,) +(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,11,0,0,0,,2,,0,00FFFF,)(0,0,6,0,0,0,,2,,0,000000,)(0,518,1,0,0,0,,0,,0,00FFFF,)(0,518,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,1,3,0,0,0,,2,,0,00FF00,)(0,0,21,0,0,0,,2,,0,00FF00,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,VOIE 2,2,ARIAL,10,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,523,1,0,0,0,,0,,0,00FFFF,)(0,523,1,0,0,0,,0,,0,00FFFF,)(0,523,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,) +(0,530,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,8,0,0,0,,2,,0,00FFFF,)(0,0,6,0,0,0,,2,,0,000000,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,12,4,1,0,0,,2,,0,00FF00,)(0,2,3,0,0,0,,2,,0,00FF00,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,519,1,0,0,0,,2,,0,00FFFF,)(0,519,1,0,0,0,,0,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,VOIE 1,2,ARIAL,10,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,8,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,7,2,0,0,0,,2,,0,00FF00,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,527,1,0,0,0,,2,,8,00FFFF,)(0,0,1,0,0,0,,3,,8,00FFFF,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,) +(0,529,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,0,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,26,22,0,0,0,,0,,0,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,0,,0,00FFFF,)(0,0,1,0,0,0,,0,,0,00FFFF,)(0,0,8,0,0,0,,0,,0,000000,)(0,0,11,0,0,0,,0,,0,000000,)(0,330,30,0,3,1,,0,,0,00FF00,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,23,0,0,0,,0,,0,000000,)(0,0,23,0,0,0,,0,,0,000000,)(0,0,23,0,0,0,QUAI 2,0,ARIAL,12,FFFFFF,G)(0,0,23,0,0,0,,0,,0,000000,)(0,0,23,0,0,0,,0,,0,000000,)(0,0,23,0,0,0,,0,,0,000000,)(0,0,23,0,0,0,,0,,0,000000,)(0,0,23,0,0,0,,0,,0,000000,)(0,0,23,0,0,0,,0,,0,000000,)(0,0,23,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,10,0,0,0,,0,,0,000000,)(0,204,30,0,3,1,,0,,0,00FF00,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,8,00FF00,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,) +(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,6,0,0,0,,0,,0,00FFFF,)(0,0,1,0,0,0,,0,,0,00FFFF,)(0,0,1,0,0,0,,0,,0,00FFFF,)(0,0,1,0,0,0,,0,,0,00FFFF,)(0,21,5,0,0,0,,0,,0,00FF00,)(0,20,5,0,0,0,,0,,0,00FF00,)(0,520,1,0,0,0,,2,,8,00FFFF,)(0,520,1,0,0,0,,0,,0,00FFFF,)(0,520,1,0,0,0,,0,,0,00FFFF,)(0,0,1,0,0,0,,0,,8,00FFFF,)(0,0,1,0,0,0,,0,,0,00FFFF,)(0,0,1,0,0,0,,0,,0,00FFFF,)(0,0,1,0,0,0,,0,,8,00FFFF,)(0,0,1,0,0,0,,0,,0,00FFFF,)(0,0,1,0,0,0,,0,,0,00FFFF,)(0,0,1,0,0,0,,0,,8,00FFFF,)(0,0,1,0,0,0,,2,,0,00FFFF,)(0,0,1,0,0,0,,0,,0,00FFFF,)(0,0,1,0,0,0,,0,,8,00FFFF,)(0,0,1,0,0,0,,0,,0,00FFFF,)(0,0,1,0,0,0,,0,,8,00FFFF,)(0,0,1,0,0,0,,0,,0,00FFFF,)(0,0,1,0,0,0,,0,,0,00FFFF,)(0,0,7,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,8,00FF00,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,) +(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,176,30,0,3,1,,0,,0,00FF00,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,3,,8,00FF00,)(0,0,0,0,0,0,,0,,8,00FF00,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,8,00FF00,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,8,00FF00,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,8,00FF00,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,) +(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,2,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,)(0,0,0,0,0,0,,0,,0,000000,) diff --git a/verif_version.dcu b/verif_version.dcu index 231fed3..153a287 100644 Binary files a/verif_version.dcu and b/verif_version.dcu differ diff --git a/verif_version.pas b/verif_version.pas index 7bb4a0d..4be9f61 100644 --- a/verif_version.pas +++ b/verif_version.pas @@ -23,7 +23,7 @@ var Lance_verif : integer; verifVersion,notificationVersion : boolean; -Const Version='3.85'; // sert à la comparaison de la version publiée +Const Version='4.0'; // sert à la comparaison de la version publiée SousVersion=' '; // en cas d'absence de sous version mettre un espace implementation diff --git a/versions.txt b/versions.txt index 381e54c..053af24 100644 --- a/versions.txt +++ b/versions.txt @@ -98,6 +98,13 @@ version 3.84 : Possibilit version 3.85 : Affichage des cantons occupés avec des couleurs différentes par train ou non dans le TCO. Grille optionnelle sauvegardée dans la configuration du TCO. Possibilité de déclarer des signaux implantés à droite ou à gauche des voies dans le TCO. +version 4.0 Changement de l'algorithme d'affichage du TCO. + Calcul de la route correcte d'un train si changement de la position de + l'aiguillage derrière le train. + Renforcement de la vérification de la configuration. + Possibilité de multisélectionner les feux ou les aiguillages pour leur suppression dans + le panneau de configuration. +