«
»
Grenier, boite 5

Grenier, boite 5

Les articles ci-dessous ont été récupérés du(des) sites de Tanguy Pruvot (tanguy.fr.to, tanguy.wdscript.fr, wdscript.sourceforge.net et tanguy.ath.cx) qui ont disparu d’internet. Merci à son auteur pour ses contributions intéressantes !

WDScript / Easy Web Server

M.Pruvot est l’auteur (principal ?) d’un projet qui permet de programmer en WinDev (oui vous avez bien lu WinDev) dans des pages PHP.  Pour cela, il est nécessaire de paramétrer un serveur Apache et passer par le CGI pour exécuter le code mis dans des balises spéciales. Pour simplifier la configuration du serveur, l’auteur a mis à disposition le EWS (Easy Web Serveur) dans lequel tout est intégré. Il s’installe facilement et a une interface utilisateur pour le paramétrer.

Ce projet est toujours disponible dans sa version 3.2.0 sur SourceForge.

WLangage avec GeSHi
GeSHi est l’acronyme de Generic Syntax Highlighter. C’est un module, disponible pour PHP (WordPress, Joomla, MediaWiki, …), qui permet la coloration syntaxique de code.  PC SOFT donne offre un exemple dans le répertoire d’installation de WinDev (Exemples\Exemples didactiques\WD Coloration Syntaxique) pour le HTML, le SQL et le XML (bizarrement pas pour le WLangage !).

M.Pruvot a donc compilé, dans les fichiers suivants, les mots clés et autres constantes du WLangage sur plusieurs versions afin que le WLangage puisse être correctement affiché sur les sites internet et dans les éditeurs de textes (NotePad++, UltraEdit et SublimeText). Ces fichiers contiennent aussi le mots clés et constantes de WDScript (voir ci-dessus)

Plugin pour SublimeText (Wx19) (à décompresser dans %APPDATA%\Sublime Text 3\Packages)

 

 

 

 

 

 

Plugin pour NotePad++ (Wx19)
Pour PHP, veuillez vous reporter à la documentation du module de votre site qui supporte GeSHi. Le fichier windev.php est à placer dans le même répertoire que les autres langages.
Plugin pour UltraEdit (Wx15)

Classe GD
Classe permettant de combler les lacunes du framework Windev concernant les images sous linux… Mais cela fonctionne aussi sous windows. GD a été choisi (voir site), car la DLL GD est toute petite (750Ko) contrairement à ImageMagick. Bien sûr WinDev gère très bien les images, mais certaines applications se basent sur ce framework (génération de graphes par exemple) et cela peut aider à les traduire en WinDev… La classe cGD est téléchargeable ici.
Exemple 1 :

oGD est un cGD
//Taille de l'image
im est entier = oGD:gdImageCreate(300,200)
//Couleurs utilisées (noir et blanc ici)
clBlack est entier = oGD:gdImageColorAllocate(im,0,0,0)
clWhite est entier = oGD:gdImageColorAllocate(im,0xFF,0xFF,0xFF)
oGD:gdImageRectangle(im,0,0,299,189,clWhite)
s est chaîne = "Test Lib GD "+cGD::GD_VERSION_STRING
//Centrage du texte
oGD:gdImageString(im, oGD:gdFontLarge(), 150 - ((Taille(s)-1)*oGD:fontLarge:w / 2), 2, s, clWhite)
//Enregistrement de l'image
f est entier = oGD:fopen("test.png","wb")
oGD:gdImagePng(im,f)
oGD:fclose(f)
oGD:gdImageDestroy(im)
//Affichage dans un champ image
Image1="test.png"

A noter que l’extension GD fournie dans PHP (voir documentation) est légèrement différente de la librairie d’origine. La future version 2.1 de LibGD est censée regrouper ces deux versions.
Quelques fonctions spéciales pour windev seront ajoutées telles que oGD:ImageEnregistre(im, sFichier) qui détermine le format de sortie en fonction de l’extension du fichier fourni… ou encore oGD:CouleurWD(im, iBlanc) pour utiliser les constantes windev…

Exemple 2, conversion gif vers PNG

//Taille de l'image
im est entier = oGD:ImageOuvre("test.gif")
oGD:ImageEnregistre(im,"test.png")
oGD:gdImageDestroy(im)
//Affichage dans un champ image
Image1="test.png"

Classe HTTPCookie
C’est une classe de Requetage HTTP pour Windev 10 et + qui gère la sauvegarde de cookies (automatiquement). Elle permet d’émuler un navigateur web afin de visiter un site avec identification sans composant IE. Cela permet d’automatiser certains traitements, par exemple rebooter un serveur dédié par une interface web mais aussi de récupérer des informations après exécution d’un formulaire avec bouton (Méthode POST). Cette classe fonctionne en mode Socket ou grâce à la fonction HttpRequete au choix… Une limitation, le protocole Https n’est pas géré, mais cela peut être fait avec WinDdev supérieure. La classe cHTTPCookies est téléchargeable ici
Classe JSON
C’est un format de fichier texte plus compact que le XML et plus pratique à lire… Mais surtout il permet d’être transformé en objet par Javascript (votre Navigateur) en une seule ligne… eval(sData);

La fonction JSON() utilise la Serialisation Binaire (sans utilisation de XML donc, ce qui est 10 fois plus rapide) mais a l’inconvénient d’être très complexe (procédure récursive). La classe JSON est téléchargeable ici.

S est une chaine = JSON(myVar)

Note: JSON est maintenant supporté en natif dans Windev depuis la v19 (voir Sérialise/Désérialise). Néanmoins, celle ci est encore très limitée, il manque le type le plus courant (en PHP) :
Erreur 2612 (Sérialise) : La sérialisation JSON n’autorise pas les éléments de type ‘table au associatif’.

Classe LG TV
Cette classe permet d’envoyer des commandes à une ou plusieurs TV LCD possédant une interface RS232. Elle permet de remplacer la télécommande et de transformer votre télévision en réveil matin, par exemple. Ou encore simplement d’activer la Sortie RGB afin d’afficher un film sans chercher votre télécommande… Elle a été conçue pour une Télévision LG 42LE2R, et devrait être compatible avec la plupart des TV de cette marque, certaines constantes seront peut-être incorrectes sur d’autres modèles ne possédant pas les mêmes caractéristiques (nombre d’entrées etc) mais sont très simples à déterminer. Un simple câble DB9 Null Modem Femelle/Femelle à 3 fils suffit pour se connecter la TV. La classe cLGTV est téléchargeable ici.
Classe TXT
La classe cTXT est un genre de couteau suisse de traitement de données texte ou encore un substitut aux antiques zones mémoire de Windev 5. Elle permet aussi de transmettre un tableau de données à un état ou à une fenêtre… Elle utilise un tableau à deux dimensions pour stocker les données, exclusivement sous forme de chaines et ressemble aux récentes fonctions TableauXXX qui ont été introduite s avec la version 10 de WinDev. La classe cTXT est téléchargeable ici..
Exemple qui affiche la seconde colonne d’un fichier CSV :

oTxt est un cTXT
oTxt:sSeparatorX = ";"
oTxt:bCSVQuotes = Vrai
oTxt:Parse(fChargeTexte(sFichierCSV))
oTxt:Premier()
TANTQUE PAS oTxt:Endehors
   Trace(oTxt:ColOf(2))
   oTxt:Suivant()
FIN

Les interfaces suivantes sont implémentées :
Fichier Texte : Entrée et Sortie + Sortie vers Fichier délimité (:TxtVersFormatSpec)
Fichier CSV : Entrée
Fichier Excel : Sortie
Fichier INI : Entrée et Sortie
Zone mémoire : Entrée et Sortie
Registre : Entrée
Listing de Répertoire : Entrée
Table Mémoire : Entrée et Sortie
Arbre : Sortie
Autres possibilités :
Substitut de tableau associatif : SetKeyValue/GetKeyValue
Ajout/Insersion de colonnes
Recherche mono ou multicolonne
Tri (par fonction TableauTrie ou manuel, avec paramètres spéciaux)
Suppression de doublons
Gestion d’entête de colonne
Gestion de Mémos associés à une ligne ou a une cellule

Classe UPNP
C’est une classe assez basique qui permet d’effectuer une requête uPNP sur un routeur, via des requêtes qui utilisent le standard SOAP. Obligé d’utiliser la fonction HttpRequete() au lieu des fonctions SOAP de WinDev qui ne sont pas assez souples. Je l’ai testée sur un routeur DLink DI 624+, cette classe a été faite pour faire fonctionner la TV Freebox a travers ce routeur. Attention : Les ports de requêtage uPNP ne sont pas forcement les même en fonction des routeurs. Fonctions : IP Externe, Ouverture et Fermeture de Port, Liste des Ports NAT. Note : Ferme le dernier port ouvert automatiquement à la destruction ou lors de l’ouverture d’un nouveau port. La classe UPNP est téléchargeable ici.

oUPNP est un cUPNP("192.168.0.1",5678)
oUPNP:OuvrePort("192.168.0.3",1234,"TCP")

Classe LibUSB
La classe cLibUSB pour Windev 12 permet d’interfacer des périphériques de tout type via le protocole USB. libusb est compatible windows (32 et 64 bits) et provient du monde linux, c’est une librairie qui permet d’accéder aux périphériques sans son driver d’origine; ce que l’on nomme sous linux l’user-space. La classe cLibUSB est téléchargeable ici.
Classe VLC
Cette classe implémente les API de contrôle de VideoLAN Player. Il suffit d’installer VLC sur votre poste, la classe trouve le chemin de VLC automatiquement grâce à la base des registres. Un projet exemple WinDev 10 et l’exécutable est fourni dans l’archive. Le projet InstantFreeboxTV permet d’afficher les chaines TV depuis une freebox… La classe v1.2 est conçue pour les versions de VLC < 0.9.0, l’API VLC a complètement changé de fonctionnement ensuite. La classe a été complétée par Jurassic Pork ensuite et est disponible ici. Une autre version pour VLC 2.x est disponible ici.
HFConvert
HFConvert est un utilitaire utilisant une architecture de classes qui permet de convertir une base de données Hyperfile vers d’autres formats de base de données. Dans les sources disponibles ci-dessous, seule la classe HF Vers SQLServer est implémentée. Mais il est prévu pour être étendu à de nouvelles bases de données. Contrairement à SQLManagerX DataCenter, les sources sont disponibles, ce qui vous permettra de gérer les cas particuliers. HFConvert est téléchargeable ici.
WDExt
WDHex est un éditeur Hexadécimal créé en Windev 8 (date de 2003) qui permet d’ouvrir un gros fichier binaire bloc par bloc (pas besoin de charger le fichier complet). Il permet aussi de charger le contenu complet du presse papier (binaire et autre). En extra, dans le projet wd10, il y a une nouvelle classe, cWDExport qui permet de copier/coller des procédures windev vers un fichier texte, en conservant les auteurs et dates/heures de modification de chaque ligne de code. Je tiens à indiquer que l’exécutable créé en Windev 8 fonctionne toujours parfaitement sous Windows 7, ainsi que le projet en Windev 10. Le but de ce projet était d’exporter du code source Windev au format texte, afin de comparer les versions à l’aide d’outils externes. A noter qu e le format du code copié par Windev 16 dans le presse papier semble toujours identique. (copier/coller d’une ou plusieurs procédures).
WDHex est téléchargeable ici. La classe cExportWD est téléchargeable ici.
WDReader
Ce programme permet de lire le contenu des fichiers .fic créés par Windev 5.5 et cela sans analyse. Il permet aussi : La conversion vers fichier texte, l’exploration des sources des fichiers WDW Windev 5, l’extraction/patch des fichiers WDL/EXE Windev 5 et de récupérer des informations sur le format des champs des analyses. Note : Les sources de ce projet (en delphi) ne sont pas disponibles. WDReader est téléchargeable ici.
WLScript
WLScript est un petit programme pour Linux qui permet de charger une WDL contenant classes ou fonctions afin d’exécuter du code WinDev en ligne de commande. Via une classe et une librairie linux, ce projet complète les fonctions manquantes du framework Windev. Il permet aussi de tester la compilation dynamique, qui ne fonctionne pas encore complètement sous Linux. Voici les différents modes de fonctionnement :

wlscript 1.3.x86 VM11.00Qd
Usage:
Fonction globale : wlscript -f   [  ...]
Classe : wlscript -c    [  ...]
Fichier source : wlscript -s 
Code direct : wlscript -d <code>
</code>

Attention :
En mode Sou rce : la fonction Compile ne fonctionne pas bien pour le moment sous Linux
En mode direct : Les caractères ( ) et  » doivent etre précédés par un antislash \ sinon ils sont interprétés par le bash
Classe exemple :

root@ubuntu:/usr/share/wlscript# ./wlscript -c wltest11.wdl cTest Execute test
Parametre fourni :test
Répertoire en cours :/usr/share/wlscript
Variable d'environnement PATH :/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
root@ubuntu:/usr/share/wlscript#

Vous pouvez dans votre code utiliser la fonction globale ENV(param) pour obtenir une variable d’environnement linux.
Vous pouvez aussi utiliser les fonctions stdout(sTexte) stderr(sTexte) et sMaVariable=scanf()
Code source de la méthode :

PROCEDURE Execute(sParametre est une chaîne="")
sRes est chaîne
:sRepEnCours=fRepEnCours()
sRes+="Parametre fourni :"+sParametre+RC
sRes+="Répertoire en cours :"+:sRepEnCours+RC
sRes+="Variable d'environnement PATH :"+ENV("PATH")+RC
sRes+="Commande executée :"+ENV("_")+RC+RC
//pour debugger:
//stdout("blablabla")
RENVOYER sRes

Installation :
Copiez les fichiers (ainsi que les DLL du framework linux) dans un nouveau répertoire /usr/share/wlscript

cd /usr/share/wlscript
chmod +x wlscript

Test :

cd /usr/share/wlscript
./wlscript -s test.wl

Note :
N’oublie z pas les DLL du framework Linux nécessaires (au minimum VM CPL HF et STD)
Il faut aussi vérifier que vous avez installé la version de stdlibc nécessaire a tous les produits PCSoft.
Sur Debian/Ubuntu :

apt-get install libstdc++2.10-glibc2.2

(ou pour obtenir le nom du package : apt-file search libstdc++-libc6.2-2.so.3 puis apt-get install nom du package)
Sur Fedora Core :
pour obtenir le nom du package : yum search compat-libstd puis yum install nom du package
La classe et le projet exemple sont téléchargeables ici.

WDGUI2CON
Depuis la sortie de Windev 15, le mode console des exécutables Windows générés avec Windev n’est plus possible. Cela peut être nécessaire à wdscript (voir plus haut) pour générer des fichiers en ligne de commande, et éventuellement de concevoir des scripts batch avec WinDev. Ce mode console permet aussi de rendre bloquant un processus exécuté, mais surtout de renvoyer un résultat.
Ce petit utilitaire permet simplement de réactiver la console des exécutables de WinDev 15+ (et les exécutable .NET). Il se nomme WDGUI2CON, nécessite les librairies WD150VM.DLL et WD150OBJ.DLL, et s’utilise lui aussi en ligne de commande :

Usage: wdgui2con 
reset: wdgui2con  /reset

Une fois patché, il est à nouveau possible d’écrire sur la console (cmd.exe), de cette façon :

SI LigneCommande(1) ~= "/version" ALORS
   dbgSortieStandard(ExeInfo(exeDescription))
FIN

résultat (exemple)

C:\Mes Projets\WDSCRIPT15\Exe&gt;wdscript /version
WDSCRIPT 2.5.9 15 - Moteur Windev 01A15061n x86
C:\Mes Projets\WDSCRIPT15\Exe&gt;

Cet outil est téléchargeable ici.