Modules standards W
Fonctions communes
Tous les modules possèdent obligatoirement 4 fonctions :
init⇒ pour initialiser l'état interne du module (allocation mémoire si besoin, etc.). Appelé automatiquement au premier appel de fonction du moduleend⇒ pour libérer les ressources allouées dansinit. Appelé automatiquement à la terminaison du programmevers(n)⇒ renvoi la version en cours du module (variable Number ou Dynamic)error(n)⇒ renvoi la dernière erreur spécifique au module (variable Number)
Le pseudo module template permet de tester ces 4 fonctions.
conv
Module permettant de faire des conversions de texte en hexadécimal et Base64.
toHexa: convertit le texte en clair (1er paramètre) en une chaine hexadécimale (2ème paramètre)fromHexa: convertit la chaine en hexadécimal (1er paramètre) en son équivalent en texte clair (2ème paramètre)toBase64: convertit le texte en clair (1er paramètre) en une chaine codée en Base64 (2ème paramètre)fromBase64: convertit la chaine en Base64 (1er paramètre) en son équivalent en texte clair (2ème paramètre)
file
Module permettant de gérer les fichiers de l'OS de l'hôte exécutant le programme en cours.
get(path, contenu): lit le fichier, dont le chemin complet est donné danspath, et renvoi son contenu danscontenu. Renvoi vide si le fichier est inconnu.set(path, contenu): écrit la variable Dynamiccontenudans le fichier dont le chemin complet est donné danspath. Génère une exception si le chemin est inconnu, inaccessible, ou si les données ne peuvent pas être écrites (droits,…)size(path, lg): renvoi la taille, dans la variable Numberlgdu fichier dont le chemin complet est donné parpathdelete(path): supprimer le fichier dont le chemin complet est donné danspath. Génère une exception si le fichier ne peut pas être supprimé.rename(old_path, new_path): renomme/déplace le fichierold_pathennew_path. Génère une exception en cas d'erreur (droits, FS différents, chemin cible inexistant).append(path, contenu): écrit la variable Dynamiccontenuà la fin du fichier dont le chemin complet est donné danspath. S'il n'existait pas, le fichier est créé. Génère une exception en cas d'erreur.dir(data): prend en compte le chemin donné pardataet renvoi, dans la même variable, la liste des fichiers et répertoires trouvés dans le répertoire indiqué, en multi-champs. Les fichiers spéciaux ne sont pas retournés (Unix seulement), ni les pseudo fichiers.et..
hash
Module permettant de calculer différents hash de données, selon divers algorithmes.
MD2(data, hash): calcul le hash selon l'algorithme MD2 des données fournies dansdataet renvoi le résultat dans la variablehashMD4(data, hash): calcul le hash selon l'algorithme MD4 des données fournies dansdataet renvoi le résultat dans la variablehashMD5(data, hash): calcul le hash selon l'algorithme MD5 des données fournies dansdataet renvoi le résultat dans la variablehash
json
NOTA : module/doc à revoir (treefetch et print)
decode(input, output): réalise le décodage du contenu json présent dans la variable chaîne <input>, et renvoie l'ensemble des clés/valeurs décodées dans la chaîne <output>. Les informations globales liées au contenu json qui vient d'être décodé restent mémorisées dans le module.print(prettyprint, tmp1, tmp2): restitue de manière lisible le contenu json dernièrement décodé dans la variable chaîne <prettyprint>. Utilise <tmp1> et <tmp2> en variables temporaires.treeFetch(input, done): récupère une série de clés, en utilisant les informations données par la hashtable <input>. Le nombre <done> renvoie @true quand la récupération est terminée, @false sinon.
lex
Module permettant de faire des analyses syntaxiques sur des chaines, selon des règles données en paramètre.
compile: à partir des règles lex en premier paramètre, génère le format interne utilisé par le module, pour les analyses de chaines en entrée. Si le 3ème paramètre est présent, de type hashtable, elle est remplie avec les constantes correspondant aux numéros de chaque règleanalyze: à partir des règles au format interne, en premier paramètre, lit la chaine en 2ème paramètre et génère le résultat de l'analyse syntaxique dans le 3ème paramètre. Le résultat contient les tokens trouvés, selon 3 champs en multi-champs ; chaque sous-champ donne l'élément trouvé, dans l'ordre :- valeur du token en hexa (à décoder avec conv&fromHexa)
- numéro de la regle trouvée pour le token, à comparer avec les constantes créées suite à l'appel de la fonction compile
- position du token trouvé dans la chaine source (1er paramètre)
getToken: renvoie dans la hashtable en 3eme paramètre le token trouvé (.ruleNumber.ruleValue.ruleLocation), indice dans le 2ème paramètre, à partir de la liste de tous les tokens trouvés depuis le dernier analyze (résultat en 1er paramètre). Si l'indice du token demandé n'est pas présent dans le résultat,.ruleNumberest renvoyé à 0.
lzw
Module permettant de compresser et décompresser des données, algorithme LZW compatible au format lzw utilisé dans les fichiers PDF.
set(data): compresse les données contenues dans la variable Dynamicdata, et renvoi dans la même variable les données compresséesget(data): décompresse les données fournies dans la variable Dynamicdata, et renvoi dans la même variable les données en clair
NOTA : revoir la gestion des numéros des images (del_image change les numéros)
beginDoc(input): démarre un nouveau document Pdf.inputest une hashtable qui doit contenir les champs suivants, permettant d'initialiser le document :Titre: titre du document (string)Fontes: liste des fontes qui seront utilisées dans le document, chaîne contenant les numéros des fontes en multi-champs (cf. tableau)Pages: nombre total de pages du documentFormat: nombre donnant la taille de chaque page - A4P A4L A3P A3L (1 2 3 4)
endDoc(output): clôture le document Pdf en cours, et renvoie tout son contenu dans la chaineoutputaddPage(): valide l'ajout d'une page au document Pdf en cours, à appeler après avoir ajouter les éléments de la page grâce aux fonctions qui suivent. Les pages sont toutes compactées avec l'algorithme Lzw.addText(input, string): ajoute à la page courante la chaine <string> selon le formatage décrit dans la hashtable <input> qui doit contenir les champs suivants :X,Y,W,H: position x,y et dimension w,h du cadre englobant la chaîneFonte: nombre donnant la police à utiliser pour le rendu de la chaîne (cf. tableau)Taille: taille de la police pour la fonteCouleur: couleur du texte, format RGB (R * 65536 + G * 256 + B)
addGraph(input): ajoute à la page courante un élément graphique décrit dans la hashtable <input> qui doit contenir les champs suivants :X,Y,W,H: position x,y et dimension w,h du cadre englobant l'élémentCouleurTrait: couleur des lignes, si affichées, de l'élémentCouleurRemplissage: couleur de remplissage de l'élémentEpaisseurTrait: nombre donnant l'épaisseur des traits, de 0 à 9Pointille: nombre indiquant le type de ligne pointillé à utiliser, ou aucun, de 0 à 9Type: chaîne indiquant le type d'élément graphique à insérer :LligneCcadre sans remplissageRremplissage de la zone sans cadreDcadre avec remplissage
addImage(input): ajoute à la page courante une image déjà chargée au préalable, selon les informations décrites dans la hashtable <input> qui doit contenir les champs suivants :X,Y: coordonnées x,y du coin haut/gauche de l'image dans la pageImage: numéro de l'image
loadImage(image): charge dans le module, pour un usage ultérieur, l'image dont le contenu est passé dans la chaîne <image>. La première image chargée porte le numéro 1, etc.delImage(image): supprime l'image numéro <image> du module ; elle ne pourra plus être utilisée par la suite (NOTA pbm de numéro avec suppression)listing(input, content): créé un document Pdf, de type listing, avec les données textuelle de <content> et renvoie le contenu du Pdf généré dans <content>. Les éléments permettant de créer le listing sont donnés par la hashtable <input> qui doit contenir les champs suivants :Titre: titre du listing (texte)Format: nombre donnant le format de la page à utiliser : A4P A4L (1 2)
Liste des fontes ⇒
| COURIER | 1 |
| COURIER_BOLD | 2 |
| COURIER_BOLDOBLIQUE | 3 |
| COURIER_OBLIQUE | 4 |
| HELVETICA | 5 |
| HELVETICA_BOLD | 6 |
| HELVETICA_BOLDOBLIQUE | 7 |
| HELVETICA_OBLIQUE | 8 |
| TIMES_ROMAN | 9 |
| TIMES_BOLD | 10 |
| TIMES_ITALIC | 11 |
| TIMES_BOLDITALIC | 12 |
| SYMBOL | 13 |
| ZAPFDINGBATS | 14 |
random
Module permettant de générer des nombres pseudo-aléatoires, algorithme Mersenne twister.
setSeed(n): utilise le nombrendonné, pour initialiser le générateur de nombres pseudo-aléatoiresget(n): renvoi dansnle prochain nombre pseudo-aléatoire calculé par le générateur (nombre entier)
shm
NOTA : module à finir, revoir doc (newprocessshmreader/writer) Module gérant la communication inter-processus, basée sur des messages textes. Chaque processus possède une queue qui permet de recevoir les messages émis par les autres processus.
get(content): renvoi dans <content> le prochain message reçu depuis la queue interne du processus en cours. S'il n'y a pas de message à lire, renvoi vide.set(message, process): envoi le message texte <message> au processus identifié par <process>. L'identifiant d'un process est le nom donné au module principal dans l'instructionbeginoubackgrounddu programme W.
system
Module gérant les liens avec le shell et l'OS hôte.
execute(cmd, ret, [capturing]): execute la commande OScmddans un shell. Renvoi le code retour de la commande dansret. SI le 3ème paramètrecapturingest fourni, il contient en retour la sortie générée par la commande dans le terminal (sortie standard)
getEnv(var, result): renvoi dansresultle contenu de la variable d'environnement (dans la session courante) nomméevar. Génère l'exception EXMOD_SYSTEM_UNKNOWNVARENV si la variable d'environnement est inconnuecreateEnv(var, valeur): créé la variable d'environnement nomméevardans la session courante, avec la valeurvaleur. Génère l'exception EXMOD_SYSTEM_SETENV si la variable est déjà présente (utiliserupdateEnvdans ce cas)updateEnv(var, valeur): met à jour la variable d'environnementvaravec la valeurvaleur. Génère l'exception EXMOD_SYSTEM_SETENV si la variable est inconnue de la session en cours.deleteEnv(var): supprime la variable d'environnement nomméevarde la session courante. Génère l'exception EXMOD_SYSTEM_SETENV si la variable est inconnue
getOS(n): renvoi un code indiquant le type de l'OS hôte du programme en cours : Windows, Linux…getHostname(nom, ip): renvoi le nom (dansnom) et l'addresse ip (dansip) de l'hôte qui exécute le programme en cours
sendSignal(pid, number): envoi le signal numéronumberau processus identifié par son numéropid. Seuls les 3 signaux SIGTERM, SIGINT, SIGUSR1 sont pris en charge. Les autres sont ignorés. Fonction compatible Unix/Windows mais sous Windows, ce sont des évènements qui sont générés, pas des signaux ; SIGTERM et SIGINT génèrent un évènementGlobal\\wterm<pid>et SIGUSR1 génère un évènementGlobal\\wdebug<pid>
sleep(n): endort le process en cours, pour une durée densecondes
time
Module permettant de manipuler des horodates, en TU et temps local, de mesurer le temps passé (chrono) et de gérer des alarmes temporelles.
startChrono: démarre le chronomètre, pour mesurer une duréelapChrono(n): donne le temps passé en secondes depuis le dernier appel de start ou lap (variable Number)
setUTC(hash, format, date): mémorise dans la hashtablehashla date UTC passée dansdateselon le formatformat. Le résultat est stocké danshash.timestampethash.jetlagsetLocal(hash, format, date): idem setUTC ci-dessus mais sur une date fournie dans le fuseau localsetNowLocal(hash): mémorise la date locale en cours, résultat dans la hashtablehashidem ci-dessussetNowUTC(hash): idem setNowLocal ci-dessus maus sur une date fournie en UTCset(hash, format, date): mémorise dans la hashtablehashla date passée dansdateselon le formatformat, format qui indique le fuseau de la date fournie, selon la norme ISO8601getUTC(hash, format, date): renvoi dansdatela date mémorisée dans la hashtablehash, selon le format défini dansformatet en UTCgetLocal(hash, format, date): idem getUTC ci-dessus mais renvoi la date dans le fuseau localget(hash, format, date): idem ci-dessus, mais c'est le format qui indique si la date retournée est en UTC ou dans un fuseau local, format à la norme ISO8601
alarmUTCHM(hhmm, fin, delai): déclare une alarme quotidienne, à déclencher à l'heurehhmmen heure UTC. Renvoi le timestamp de fin dansinfet le delai entre chaque alarme dansdelaialarmLocalHM(hhmm, fin, delai): idem alarmUTCHM ci-dessus, mais l'heure donnée est dans le fuseau local