\n"; function insert_history($filename){ $content = file_get_contents($filename); $content = preg_replace('/^[^\s\d].*/m', '', $content); echo htmlentities(preg_replace('/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/', "\n", $content)); } ?>
Voici quelques trucs et codes pour PowerBuilder.
Toute remarque, suggestion, question bienvenue. N'hésitez pas à me laisser un mail.
Vous pouvez consulter la liste de mes liens PB (sur Del.icio.us)
PBNI = PowerBuilder Native Interface, c'est un SDK fourni par Sybase qui permet d'écrire des extensions pour PB en C++ (avec Microsoft Visual Studio)
Pour tenter de pallier aux problèmes de performances de unvo_regexp j'ai fait une extension pbni pouvant utiliser des expressions régulières compatibles perl (réutilise le moteur PCRE). Cette extension ajoute aussi une fonction globale de replaceall.
Cette extention est faite à partir du SDK fourni avec PB et des exemples que j'ai pu trouver sur Codexchange.
Fonctionnalités principales de l'objet uo_regex :
\1 \2 \n)FastReplaceAll() utilisable sans devoir instancier uo_regex; même si cette fonction est implémentée en C++, elle est beaucoup plus rapide qu'un équivalent en pbscript
Pour tester cette extension j'ai aussi créé PbRegexCoach (inspiré de The Regex Coach) :

Cette application réutilise aussi plusieurs composants de Nicolas Georges : redimensionneur automatique, splitters horizontal et vertical dérivés de ceux de Roland Smith. Nicolas a aussi publié un exemple d'utilisation de pbniregex.
Extension pbniregex.zip (sources incluses) + PbRegexCoach - Dernière mise à jour : .
La table de hachage (ou hashtable, dictionnaire, tableau associatif) est une structure de données très utile mais malheureusement absente de Powerbuilder.
La lib opensource libhashish implémente plusieurs algorithmes de hachage sous GNU/Linux. J'ai porté cette lib sous Windows grâce à MinGW (Nicolas Georges a ensuite désactivé la fonction de tri en arbre pour pouvoir réutiliser libhashish sous licence BSD) et j'ai écrit une extension pbni permettant d'utiliser des hashtables directement en Powerscript.
La libhashish a plein de possibilités mais le wrapper pbni est limité à l'essentiel :
Extension pbnihash.zip (sources incluses) + sample PB de test - Dernière mise à jour : .
La liste chaînée est une autre structure absente de Powerbuilder. Je me suis appuyé sur les STL pour implémenter un objet de liste (uo_list) et un vecteur (uo_vector).
Mes listes et vecteurs ont quelques caractéristiques intéressantes :
sort() un objet implémentant une fonction int list_compare(any, any) permettant de comparer 2 éléments de la liste ou du vecteurExtension pbnilist.zip (sources incluses) + sample PB de test - Dernière mise à jour : .
Voici plusieurs wrappers qui ne pouvaient pas être intégrés aux extensions précédentes.
Liste des fonctionnalités :
GetVersionInfoString(), GetVersionInfoFullString(), GetVersionInfoFixed() CWGetField() / CWSetField() pour accéder à n'importe quelle propriété d'un objet ou contrôle graphiqueRetrieveVarArgs() permet de faire un retrieve sur une Datawindow ou Datastore en passant les arguments dans un tableau de any (pratique pour écrire du code dynamique avec une DW dont on change le dataobject)BitwiseOr(), BitwiseXor(), BitwiseAnd(), BitwiseNot(), BitwiseLeftShift(), BitwiseRightShift()ToHexString() et ToOctalString()uo_transaction permettant de recevoir des notifications de la base, par exemple pendant l'ecécution d'une procédure stockée. Si vous voulez recompiler cette extension vous devez être en possession du SDK ASA.Bugs connus
CWGetField() sur une propriété qui n'existe pas fait planter PBGetVersionInfoxxx() sur l'application depuis elle-même fait planter PBExtension pbnicw.zip (sources incluses) + sample PB de test - Dernière mise à jour : .
unvo_regexp est un userobject natif qui remappe l'objet OLE vbscript.regex (auteur : Nicolas Georges). La syntaxe acceptée par l'objet est rappelée dans la liste des variables d'instance (c'est la syntaxe de l'objet vbscript.regex).
Si vous utilisez cet objet ponctuellement, c'est très pratique. Toutefois les performances ne sont pas fantastiques dès que vous instanciez l'objet dans des boucles du fait de la connexion à l'objet OLE dans le constructeur.
libexport est un petit outil que j'ai écrit pour tester l'export d'objets d'une pbl en PBScript.
On peut exporter la totalité des objets ou seulement une sélection. Les objets sont exportés au format UTF-16le avec leurs commentaires.
libexport.zip - Dernière mise à jour :
pbdumper est un outil expérimental permettant d'enregistrer la totalité du contenu d'une bibliothèque PB (pbl / pbd) ou d'un exe ou dll compilés par PB. Cet outil a été utilisé avec succès sur des fichiers produits par PB 5 à 11.5 et devrait fonctionner également avec PB12 si le format des pbl n'a pas changé. Je me suis servi de cet outil pour récupérer des ressources dans des applications écrites à mon travail et dont nous avions perdu les sources.
Il est programmé en C99 et compilé avec MinGW. Cet outil n'aurait pas pu exister sans les précieuses informations contenues dans le format de fichier PBL publié par Arnd Schmidt. Il a aussi fait quelques outils pour étudier les libs PB.
Todo :
pbdumper.zip - Dernière mise à jour :