IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Free Pascal Discussion :

Adaptation en Pascal du programme UCI Filter


Sujet :

Free Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 165
    Billets dans le blog
    9
    Par défaut Adaptation en Pascal du programme UCI Filter
    Bonjour !

    J'ai découvert un petit programme en C très intéressant, qui s'appelle UCI Filter :

    http://www.nnuss.de/Hermann/UciFilter.html

    Pour expliquer la chose en deux mots, c'est un programme qui s'interpose entre Arena (ou un autre programme du même genre) et un moteur de jeu d'échecs. Au lieu de donner à Arena le chemin du moteur, on lui donne le chemin d'UCIFILTER.EXE avec le chemin du moteur comme paramètre. UCI Filter intercepte les messages échangés dans les deux sens et les communique (en en filtrant certains). Si cette explication n'est pas assez claire et si le sujet vous intéresse, je pourrai proposer une démonstration de la façon dont le programme fonctionne.

    Je me suis lancé dans une tentative d'adaptation en Pascal. Avec le temps et avec votre aide, j'espère y arriver.

    Voici ce que j'ai fait jusqu'ici (en pièce jointe, avec le code original). Ce n'est pas grand chose mais j'aimerais déjà avoir votre avis.

    Je bute sur l'en-tête de cette procédure :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    void HandleDurchPipeErsetzen( DWORD EinOderAus, HANDLE* pMeinHandle, HANDLE* pEngineHandle, HANDLE* pOriginal )

    Quel serait l'équivalent de l'astérisque ?
    Fichiers attachés Fichiers attachés

  2. #2
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    8 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 049
    Billets dans le blog
    2
    Par défaut
    Bonjour,
    Citation Envoyé par Roland Chastain Voir le message
    Pour expliquer la chose en deux mots, c'est un programme qui s'interpose entre Arena (ou un autre programme du même genre) et un moteur de jeu d'échecs. Au lieu de donner à Arena le chemin du moteur, on lui donne le chemin d'UCIFILTER.EXE avec le chemin du moteur comme paramètre. UCI Filter intercepte les messages échangés dans les deux sens et les communique (en en filtrant certains). Si cette explication n'est pas assez claire et si le sujet vous intéresse, je pourrai proposer une démonstration de la façon dont le programme fonctionne.
    L'explication est claire mais une démo serait éminemment intéressante.

    Citation Envoyé par Roland Chastain Voir le message
    Quel serait l'équivalent de l'astérisque ?
    Il s'agit de pointeurs, donc de paramètres de type pHandle.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 165
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Alcatîz Voir le message
    L'explication est claire mais une démo serait éminemment intéressante.
    Bien. Pour cette démonstration j'utiliserai Arena, en français (le fichier langage est à télécharger séparément sur la même page).

    Je vais installer un nouveau module.

    Nom : 1.png
Affichages : 344
Taille : 218,5 Ko

    Je sélectionne "UciFilter.exe".

    Nom : 2.png
Affichages : 322
Taille : 21,7 Ko

    Arena me demande s'il doit démarrer le nouveau module module tout de suite.

    Nom : 3.png
Affichages : 329
Taille : 4,1 Ko

    Je clique sur "non". J'ouvre la fenêtre de gestion des modules, et je sélectionne UCI Filter.

    Nom : 3a.png
Affichages : 335
Taille : 33,9 Ko

    Je remplace le nom du moteur (ainsi que le nom de l'auteur et le pays) par le nom du moteur que j'ai décidé d'utiliser, à savoir Pharaon de Frank Zibi. J'ajoute le chemin de "pharaon.exe" dans le champ "paramètres ligne de commande".

    Nom : 4.png
Affichages : 320
Taille : 33,8 Ko

    Il ne me reste qu'à charger ce nouveau module et à commencer une partie. Ça fonctionne ! Je peux ensuite ouvrir la fenêtre journal (dans le menu "modules") pour regarder de plus près ce qui se passe. Ah oui, je constate que certaines lignes ont été ajoutées par UCI Filter :

    2016-02-14 06:33:32,985<--1:option name TimeCurrmove@UciFilter type spin default 1500 min 0 max 5000
    2016-02-14 06:33:32,985<--1:option name TimeInfo@UciFilter type spin default 300 min 0 max 5000
    2016-02-14 06:33:32,985<--1:option name TimeQuit@UciFilter type spin default 1000 min 200 max 1800
    2016-02-14 06:33:32,986<--1:option name RemoveNonUci@UciFilter type check default true
    2016-02-14 06:33:32,986<--1:option name RemoveStop@UciFilter type check default true
    Vous me demanderez peut-être à quoi sert ce programme. Si j'ai bien compris les explications que donne l'auteur sur son site, il s'agissait au départ d'améliorer le fonctionnement d'Arena et de résoudre je ne sais trop quel problème. Mais peu importe : ce qui est intéressant, c'est la technique employée. Et cette technique pourrait être utilisée pour espionner le fonctionnement de logiciels du même genre qu'Arena mais qui n'ont pas de fenêtre journal.

    Citation Envoyé par Alcatîz Voir le message
    Il s'agit de pointeurs, donc de paramètres de type pHandle.
    Merci.

  4. #4
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    8 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 049
    Billets dans le blog
    2
    Par défaut
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 165
    Billets dans le blog
    9
    Par défaut
    J'ai fini ma "traduction". Elle se compile mais le programme ne fonctionne pas. Le contraire m'aurait étonné.

    J'ai réuni dans une archive tous les fichiers nécessaires pour tester le programme, au cas où vous voudriez y jeter un œil. Au lieu d'Arena, j'ai utilisé Cute Chess, qui est une application console qui fait s'affronter automatiquement deux moteurs. Cute Chess est lancé par le fichier de commande test.cmd. Au bout de quelques dizaines de secondes (le temps est variable parce que les moteurs ne jouent pas toujours les mêmes coups), la sortie de Cute Chess est enregistrée dans un fichier test.log.

    Le fichier ucifilter.exe inclus dans l'archive a été compilé à partir du C (avec MinGW-GCC). Si je le remplace par l'exécutable compilé à partir du Pascal, ça ne fonctionne pas : j'ai une fenêtre noire qui reste ouverte indéfiniment et pour finir je dois arrêter manuellement tous les processus. On peut voir dans le gestionnaire des tâches que les deux moteurs ont démarré mais apparemment l'un des deux (Pharaon, celui qui est lancé par UCI Filter) ne répond pas.

    Je ne sais pas trop comment chercher l'erreur. Je pense essayer d'ajouter dans mon code des fonctions pour produire un journal. Si vous avez le temps de regarder le fichier source ucifilter.pas, peut-être verrez-vous l'erreur que j'ai faite. J'ai bien quelques idées mais il serait fastidieux de les exposer.

    Il y a un endroit dans le code original qui me paraît bizarre. Je l'ai transcrit tel quel mais il ne me paraît pas logique. C'est dans la fonction EngineNachGui() :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    else if (
    pFilter->bFilterNonUci
    && strcmp(Kommando, "id") == 0
    && strcmp(Kommando, "readyok") == 0
    && strcmp(Kommando, "copyprotection") == 0
    && strcmp(Kommando, "option") == 0
    )

    Ce que je comprends ainsi : si la valeur de Kommando est égale à "id" et égale à "readyok" et égale etc. Ce qui évidemment ne peut pas arriver. Ou alors est-ce que c'est moi qui comprends mal ?

  6. #6
    Membre éclairé
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2014
    Messages : 43
    Par défaut
    Bonjour,
    Citation Envoyé par Roland Chastain Voir le message
    Ce que je comprends ainsi : si la valeur de Kommando est égale à "id" et égale à "readyok" et égale etc. Ce qui évidemment ne peut pas arriver. Ou alors est-ce que c'est moi qui comprends mal ?
    Je comprends la même chose.
    Peut-être que l'auteur de ce programme s'est tout simplement trompé en confondant par étourderie AND et OR (en c : OR = ||) ?

Discussions similaires

  1. [Python 2.X] Adapter ma GUI à mon programme
    Par Phoke dans le forum Tkinter
    Réponses: 4
    Dernier message: 24/07/2014, 12h44
  2. Créer de programme pour WIndows avec Turbo Pascal
    Par kaygee dans le forum Turbo Pascal
    Réponses: 16
    Dernier message: 20/08/2003, 23h22
  3. [LG]Programme Bataille Navale en Pascal
    Par RaFaL dans le forum Langage
    Réponses: 21
    Dernier message: 10/06/2003, 21h22
  4. [LG]imprimante programme pascal
    Par jsaipas dans le forum Langage
    Réponses: 9
    Dernier message: 24/04/2003, 21h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo