Mots-clé : pascal

Delphi Embarcadero et RxLib : comment installer les composants

Il risque de vous afficher un problème de SizeOf :
Il vous faut juste préciser que c’est le SizeOf de l’unité Systems, donc :

System.SizeOf()

Puis ouvrez le fichier RxConst.pas :

Il manque simplement le define 220 : ajoutez après tous les define jusqu’au 210 :

{$IFDEF VER220}
const
SDelphiKey = 'Software\Embarcadero\BDS\8.0';
{$ENDIF}

Et vous pourrez compiler puis installer les composants.
Ce sont deux petites astuces simples, mais si je les avais eues, j’aurais gagné… deux heures 😉

vim : exemple concret de conversion de fichier C en fichier Pascal

Voici un aperçu des petites choses possibles avec les macros vim.
J’avais un énorme fichier include (fichier fmod.h) à convertir en Pascal, afin de pouvoir accéder à l’extraordinaire librairie de fmod. Pour information, cette librairie est gratuite et redistribuable en tant que telle si votre produit est gratuit et ne vous rapporte rien. Donc profitez en c’est une librairie aussi simple d’utilisation que puissante et stable.

Je vous explique juste le principe de base, avec un exemple concret, et vous verrez qu’il vous suffit de faire pareil pour les quelques autres conversions, et vous gagnerez quelques minutes, voire comme dans mon cas, quelques heures de travail (que vous auriez inévitablement perdues avec un autre éditeur) :

Voici un exemple de déclaration C :

typedef FMOD_RESULT
  (F_CALLBACK *FMOD_FILE_OPENCALLBACK)
    (const char *name, int unicode,
      unsigned int *filesize, void **handle, void **userdata);

La fonction finale déclarée en Pascal doit être ainsi :

FMOD_FILE_OPENCALLBACK =
  function (
    const name:Pchar; unicode:Integer;
    var filesize: Cardinal; handle:Pointer;
    userdata:Pointer):FMOD_RESULT;

Je vais vous expliquer les premiers pas : il faut convertir ces paramètres :
void **handle, void **userdata)
en :
handle:Pointer; userdata:Pointer)

Le principe des macros avec les expressions régulières est très simple, je vais la construire pas à pas :

– Va chercher la première chaine qui est void ** :
void \*\*\
Notez bien que comme les étoiles * sont des caractères d’expression régulière, il faut mettre un antislash \ pour qu’elles ne soient pas interprétées.

– Va chercher la première chaine qui est void ** et qui est suivie d’une chaine composée de au moins un caractère minuscule comprise entre a et z :
void \*\*\([a-z]\+\)
Au même titre que les étoiles *, et les antislashes \, les parenthèses () sont des caractères d’expression régulière, il faut mettre un antislash \ pour qu’elles ne soient pas interprétées.
Oui je le concède ça rend la lecture un peu difficile. Mais le temps gagné en vaut la chandelle croyez moi.
– Va chercher la première chaine qui est void ** et qui est suivie d’une chaine composée de au moins un caractère minuscule comprise entre a et z, et qui se termine par une virgule :
void \*\*\([a-z]\+\)\(,\{1\}\)
Ici aussi notez le \{1\} : ici, les crochets \{\} sont des caractères d’expression régulière donc il ne faudrait pas mettre d’antislash, mais comme il sont dans une expression qu’on recherche, il les faut. Bref, essayez une fois avec, une fois sans, et l’un des deux fonctionnera !

Expression finale :

Remplace toutes les chaines de type void **[caractères de a à z], par [caractères de a à z]: Pointer;  :
:%s/void \*\*\([a-z]\+\)\(,\{1\}\)/\1: Pointer;/g

Ainsi :
void **handle,
donnera :
handle: Pointer;.

Mais (et c’est là où c’est génial) :
void **autrenomdevariable,
donnera :
autrenomdevariable: Pointer;.

Et cela s’appliquera sur tout le fichier, quel que soit le nom de la variable.

Ensuite, il vous suffit de vous concocter toute votre séance de petites macros, et de les mettre dans un fichier.
Puis vous appelez :

vim -s macro_vim.cmd [nom du fichier]

et vim jouera la macro dessus.

Firelight / fmod en Pascal : comment faire et accord de la société

Lorsque la société Firelight a sorti leur outil pour jouer de la musique, je n’y croyais pas tellement il était puissant. Maintenant preuve est faite : plusieurs millions de développeurs s’en servent à travers le monde (et ça n’est pas exagéré), et plusieurs dizaines de millions de joueurs, et des milliers de professionnels, utilisent fmod sans le savoir.

A l’époque, il y avait les entêtes (headers) destinés au C, mais aussi les entêtes (headers) destinés à Delphi. Ensuite, ils se sont aperçu que seul le C était vraiment rentable, voire certains outils, même si ça me fait mal de le dire, de Microsoft. Donc ils ont arrêté le suivi des entêtes (headers) en Pascal Objet, destinés à Delphi.

J’ai donc pris mon courage à deux mains, et vim, et j’ai converti, via quelques bonnes macros, tous les entêtes en C du tout dernier fmod en date, la librairie.
Pour les quelques appels de fonction que j’ai fait, ça fonctionne parfaitement.
Bien sûr, sur plusieurs milliers de lignes, il y a peut être des erreurs de conversion, donc si vous voulez appeler des fonctions et que ça ne réussit pas, faites comme moi : lisez attentivement la documentation, puis regardez les anciens entêtes (headers) destinés à Delphi, et comparez avec ma traduction : peut-être y a-t-il une correction, ou une évolution du code à faire. Si c’est le cas, ce serait très gentil de m’écrire et/ou de laisser un message ici décrivant la modification à apporter.
Si vous êtes intéréssé pour télécharger :

  • un programme d’exemple qui lit un mp3
  • les nouveaux en-têtes en Pascal
  • avec les anciens en-têtes (au cas ou les nouveaux ne fonctionneraient pas)

Alors cliquez ici.
NB : L’exécutable ne fonctionnera pas parce que le nom du fichier MP3, et de la librairie, sont codés en dur. Il vous suffit juste de changer ça pour voir que ça fonctionne.
Bien évidemment c’est sous licence LGPL.

Pour preuve, ci-suit la réponse de la société.

2011/5/17 Firelight Technologies Support
Hi Olivier,
We would be ok if you hosted them on your site – we probably wouldnt put it on ours any more because of the small interest of pascal these days.

Brett Paterson | CEO
FMOD by Firelight Technologies Pty Ltd
Interactive Audio Middleware | www.fmod.org
PH: +61 —— Fax: +61 3 ——

————— Original Message —————
From: Olivier Pons
Sent: 17/05/2011 5:15 AM
To: support@fmod.org
Subject: About Pascal headers.

Hi,

It seems you’ve stopped to write Pascal headers.
I’ve translated all your header files into Pascal object and it works pretty
well.
I’ve followed your whole design :
– fmod.pas
– fmod_codec.inc.pas
– fmod_dsp.inc.pas
– fmod_memoryinfo.inc.pas

May I ask you two possibilities :
– either you release them as « no guarantee behind » (sorry for my English,
but I’m pretty sure you understand the kind of license I’m talking about)
– or I release them as freeware on my website (type « olivier pons » i’m #2
after the facebook) http://olivierpons.fr/

Thank you again, the quality of your job is simply amazing.


Kind regards,
Olivier Pons

ref:00D9sZM.5009252Eg:ref