reference

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
reference [2026/10/18 13:35] – rootreference [2026/10/18 14:21] (Version actuelle) – [sub] root
Ligne 50: Ligne 50:
 La syntaxe est ⇒ ''call <identifiant>(params…)'' : appel d'un autre programme W de type //bibliothèque//, présent dans le répertoire des binaires WLIB car en p-code.\\ La syntaxe est ⇒ ''call <identifiant>(params…)'' : appel d'un autre programme W de type //bibliothèque//, présent dans le répertoire des binaires WLIB car en p-code.\\
 Le passage des paramètres est facultatif et variable ; le contrôle est fait uniquement à l'exécution lors de l'utilisation des variables. Les paramètres en trop sont ignorés. Ceux manquant forceront la variable paramètre associée à l'état //non-déclarée//. 8 paramètres au maximum.\\ Le passage des paramètres est facultatif et variable ; le contrôle est fait uniquement à l'exécution lors de l'utilisation des variables. Les paramètres en trop sont ignorés. Ceux manquant forceront la variable paramètre associée à l'état //non-déclarée//. 8 paramètres au maximum.\\
-Les paramètres sont obligatoirement des variables simples ou composées, passées par //référence// (PAS d'expression). Les variables chaînées avec indirection, de type ''var.var2!var3'' etc., sont interdites et provoqueront une erreur de compilation si utilisées comme paramètre. Les variables chaînées sans indirection, de type ''var1.var2.var3'' sont autorisées s'il n'y a pas de recouvrement : ''function(var1.var2, var1)'' provoquera une erreur de compilation, ''function(var1, var1)'' également, etc. De plus, il est possible de passer les paramètres en les nommant (comme avec [[#do|do]] et [[#invoke|invoke]]).+Les paramètres sont obligatoirement des variables simples ou composées, passées par //référence// (PAS d'expression). Les variables chaînées avec indirection, de type ''var.var2!var3'' etc., sont interdites et provoqueront une erreur de compilation si utilisées comme paramètre. Les variables chaînées sans indirection, de type ''var1.var2.var3'' sont autorisées s'il n'y a pas de recouvrement : ''function(var1.var2, var1)'' provoquera une erreur de compilation, ''function(var1, var1)'' également, etc. De plus, il est possible de passer les paramètres en les nommant (comme avec [[#do|do]] et [[#invoke|invoke]]). Enfin, en l'absence de paramètres, les parenthèses ''()'' peuvent être omises.
  
 <code wlang> <code wlang>
Ligne 162: Ligne 162:
 Cette instruction permet d'appeler un sous-programme interne au source en cours. La subroutine doit être déclarée au préalable, sous peine de générer une exception.\\ Cette instruction permet d'appeler un sous-programme interne au source en cours. La subroutine doit être déclarée au préalable, sous peine de générer une exception.\\
 La syntaxe est ⇒ ''do <var>(params…)'' : appel d'un sous-programme ''sub'' déjà déclaré dans le programme en cours (ou d'une méthode de classe/objet).\\ La syntaxe est ⇒ ''do <var>(params…)'' : appel d'un sous-programme ''sub'' déjà déclaré dans le programme en cours (ou d'une méthode de classe/objet).\\
-Le passage des paramètres est facultatif et variable ; le contrôle est fait uniquement à l'exécution lors de l'utilisation des variables. Les paramètres en trop sont ignorés. Ceux manquant forceront la variable paramètre associée à l'état //non-déclarée//. 8 paramètres au maximum.\\+Le passage des paramètres est facultatif et variable ; le contrôle est fait uniquement à l'exécution lors de l'utilisation des variables. Les paramètres en trop sont ignorés. Ceux manquant forceront la variable paramètre associée à l'état //non-déclarée//. 8 paramètres au maximum. Enfin, en l'absence de paramètres, les parenthèses ''()'' peuvent être omises.\\
 Les paramètres sont obligatoirement des variables simples ou composées, passées par //référence// (PAS d'expression). Les variables chaînées avec indirection, de type ''var.var2!var3'' etc., sont interdites et provoqueront une erreur de compilation si utilisées comme paramètre. Les variables chaînées sans indirection, de type ''var1.var2.var3'' sont autorisées s'il n'y a pas de recouvrement : ''function(var1.var2, var1)'' provoquera une erreur de compilation, ''function(var1, var1)'' également, etc.\\ Les paramètres sont obligatoirement des variables simples ou composées, passées par //référence// (PAS d'expression). Les variables chaînées avec indirection, de type ''var.var2!var3'' etc., sont interdites et provoqueront une erreur de compilation si utilisées comme paramètre. Les variables chaînées sans indirection, de type ''var1.var2.var3'' sont autorisées s'il n'y a pas de recouvrement : ''function(var1.var2, var1)'' provoquera une erreur de compilation, ''function(var1, var1)'' également, etc.\\
 Il est possible de nommer les paramètres utilisés (comme dans [[#invoke|invoke]] et [[#call|call]]), ce qui permet de les passer dans n'importe quel ordre. Mais dans ce cas, tous les paramètres doivent être passés nommés (soit tous soit aucun et dans ce cas c'est l'ordre de la définition de la //sub// qui est pris en compte). La syntaxe est ''parametrenomme = p'', ''p'' étant la variable passée et ''parametrenomme'' son nom dans la définition. Il est possible de nommer les paramètres utilisés (comme dans [[#invoke|invoke]] et [[#call|call]]), ce qui permet de les passer dans n'importe quel ordre. Mais dans ce cas, tous les paramètres doivent être passés nommés (soit tous soit aucun et dans ce cas c'est l'ordre de la définition de la //sub// qui est pris en compte). La syntaxe est ''parametrenomme = p'', ''p'' étant la variable passée et ''parametrenomme'' son nom dans la définition.
Ligne 195: Ligne 195:
 <code wlang> <code wlang>
 if dividende = 0 then if dividende = 0 then
-   echonl "Division impossible"          ; affichage si la variable "dividende" vaut 0 puis saute à "endif"+   echonl "Division impossible"          ; affichage si la variable "dividende" vaut 0, puis saute à "endif"
 elseif dividende = 1 then elseif dividende = 1 then
-   echonl "Pas de calcul nécessaire"     ; affichage si la variable "dividende" ne vaut pas 0, mais s'il est égale à 1 puis saute à "endif"+   echonl "Pas de calcul nécessaire"     ; affichage si la variable "dividende" ne vaut pas 0, et si elle est égale à 1, puis saute à "endif"
 else else
    echonl "Il faut faire un calcul pour trouver le résultat"    ; affichage si la variable "dividende" ne vaut ni 0 ni 1    echonl "Il faut faire un calcul pour trouver le résultat"    ; affichage si la variable "dividende" ne vaut ni 0 ni 1
Ligne 257: Ligne 257:
 Si l'exécuteur de traitement arrive à l'instruction //except// sans exception, le programme //saute// à l'instruction [[#endsub|endsub]] ou [[#end|end]], retourne à l'appelant, et se termine dans le cas du programme principal.\\ Si l'exécuteur de traitement arrive à l'instruction //except// sans exception, le programme //saute// à l'instruction [[#endsub|endsub]] ou [[#end|end]], retourne à l'appelant, et se termine dans le cas du programme principal.\\
 Si une exception survient dans le bloc de traitement, due à une autre instruction ou [[#throw|throw]], le programme saute automatiquement à la première ligne qui suit //except//. Une exception qui survient dans le bloc exception fait réagir le programme de la même manière que l'instruction [[#throw|throw]] : le code de la nouvelle exception est pris en compte et le programme saute à l'instruction [[#endsub|endsub]] ou [[:w:instr:end|]]. L'exception //remonte// dans le programme appelant et le fait arriver dans son bloc exception, etc. Enfin, uniquement dans le bloc exception, l'instruction [[#catch|catch]] permet d'annuler l'exception, et de revenir à l'appelant sans erreur.\\ Si une exception survient dans le bloc de traitement, due à une autre instruction ou [[#throw|throw]], le programme saute automatiquement à la première ligne qui suit //except//. Une exception qui survient dans le bloc exception fait réagir le programme de la même manière que l'instruction [[#throw|throw]] : le code de la nouvelle exception est pris en compte et le programme saute à l'instruction [[#endsub|endsub]] ou [[:w:instr:end|]]. L'exception //remonte// dans le programme appelant et le fait arriver dans son bloc exception, etc. Enfin, uniquement dans le bloc exception, l'instruction [[#catch|catch]] permet d'annuler l'exception, et de revenir à l'appelant sans erreur.\\
-Dans les bloc exceptions, la variable système [[#varsys|@except]] donne le numéro de l'exception en cours (de 1 à 16 777 215). Mais attention, lors du retour au shell appelant, le code attendu par le shell est sur 8 bits : le code retour envoyé risque ne pas être celui voulu.+Dans les blocs exceptions, la variable système [[#varsys|@except]] donne le numéro de l'exception en cours (de 1 à 16 777 215). Mais attention, lors du retour au shell appelant, le code attendu par le shell est sur 8 bits : le code retour envoyé risque ne pas être celui voulu.
  
 <code wlang> <code wlang>
Ligne 300: Ligne 300:
    echonl fruit          ; affiche les fruits commençant par "po" : pomme et poire (2 affichages)    echonl fruit          ; affiche les fruits commençant par "po" : pomme et poire (2 affichages)
 endfor endfor
-; avec une variable "Hashtable"", la boucle se fait sur les clés de la table+; avec une variable "Hashtable", la boucle se fait sur les clés de la table
 declare legume, panier, initiale declare legume, panier, initiale
 let panier = {} let panier = {}
Ligne 340: Ligne 340:
  
 ==== input ==== ==== input ====
-Cette instruction permet de faire une saisie utilisateur au clavier, en lisant l'entrée standard. Elle est suivi d'une variable, qui sera mise au type Dynamic et contiendra les caractères saisis, hors retour-chariot final, validant la saisie.\\+Cette instruction permet de faire une saisie utilisateur au clavier, en lisant l'entrée standard. Elle est suivie d'une variable, qui sera mise au type Dynamic et contiendra les caractères saisis, hors retour-chariot final, validant la saisie.\\
 Dans les programmes de type [[#background|background]], l'instruction n'a aucune action (la saisie n'est pas faite) et ne provoque pas d'exception ; équivalent dans ce cas à [[#nop|nop]]. Dans les programmes de type [[#background|background]], l'instruction n'a aucune action (la saisie n'est pas faite) et ne provoque pas d'exception ; équivalent dans ce cas à [[#nop|nop]].
 <code wlang> <code wlang>
Ligne 350: Ligne 350:
 Cette instruction permet d'appeler un sous-programme de type //module//. Ce sont des sous-programmes écrits en C, compilé et appelés ici sous forme de binaire de l'OS (.o sous Linux, .dll sous Windows).\\ Cette instruction permet d'appeler un sous-programme de type //module//. Ce sont des sous-programmes écrits en C, compilé et appelés ici sous forme de binaire de l'OS (.o sous Linux, .dll sous Windows).\\
 La syntaxe est ⇒ ''invoke <module>&<fonction>(param1, ..., param8)'' : appel d'un module, plugins du langage, écrit en C. Le fichier <module>.o (ou <module>.dll) doit se trouver dans le répertoire des exécutables WBIN. Le passage des paramètres est facultatif et variable, avec un maximum de 8 paramètres ; le contrôle est fait uniquement à l'exécution lors de l'utilisation des variables. Les paramètres en trop sont ignorés. Ceux manquant forceront la variable paramètre associée à l'état //non-déclarée// sauf s'ils sont obligatoires dans le module.\\ La syntaxe est ⇒ ''invoke <module>&<fonction>(param1, ..., param8)'' : appel d'un module, plugins du langage, écrit en C. Le fichier <module>.o (ou <module>.dll) doit se trouver dans le répertoire des exécutables WBIN. Le passage des paramètres est facultatif et variable, avec un maximum de 8 paramètres ; le contrôle est fait uniquement à l'exécution lors de l'utilisation des variables. Les paramètres en trop sont ignorés. Ceux manquant forceront la variable paramètre associée à l'état //non-déclarée// sauf s'ils sont obligatoires dans le module.\\
-Comme avec [[#do|do]] et [[#call|call]], Les paramètres sont obligatoirement des variables simples ou composées, passées par //référence// (PAS d'expression). Les variables chaînées avec indirection, de type ''var.var2!var3'' etc., sont interdites et provoqueront une erreur de compilation si utilisées comme paramètre. Les variables chaînées sans indirection, de type ''var1.var2.var3'' sont autorisées s'il n'y a pas de recouvrement : ''function(var1.var2, var1)'' provoquera une erreur de compilation, ''function(var1, var1)'' également, etc. De plus, il est possible de passer les paramètres en les nommant (comme avec [[#do|do]] et [[#call|call]]).+Comme avec [[#do|do]] et [[#call|call]], Les paramètres sont obligatoirement des variables simples ou composées, passées par //référence// (PAS d'expression). Les variables chaînées avec indirection, de type ''var.var2!var3'' etc., sont interdites et provoqueront une erreur de compilation si utilisées comme paramètre. Les variables chaînées sans indirection, de type ''var1.var2.var3'' sont autorisées s'il n'y a pas de recouvrement : ''function(var1.var2, var1)'' provoquera une erreur de compilation, ''function(var1, var1)'' également, etc. De plus, il est possible de passer les paramètres en les nommant (comme avec [[#do|do]] et [[#call|call]]). Enfin, en l'absence de paramètres, les parenthèses ''()'' peuvent être omises.
 <code wlang> <code wlang>
 invoke math&racinecarre(nombre, resultat) invoke math&racinecarre(nombre, resultat)
Ligne 480: Ligne 480:
 ==== precision ==== ==== precision ====
 Cette instruction définit le nombre de décimales pour [[#variables_nombres_et_chainessyntaxe|l'arrondi]] en fin d'expression, lors de l'affectation.\\ Cette instruction définit le nombre de décimales pour [[#variables_nombres_et_chainessyntaxe|l'arrondi]] en fin d'expression, lors de l'affectation.\\
-Les valeurs possible sont 0 1 2 3 4 5, 5 étant la valeur par défaut. Toute autre valeur provoquera une exception.+Les valeurs possibles sont 0 1 2 3 4 5, 5 étant la valeur par défaut. Toute autre valeur provoquera une exception.
 <code wlang> <code wlang>
 precision <nombre>   ; nombre de 0 à 5 precision <nombre>   ; nombre de 0 à 5
Ligne 534: Ligne 534:
 sub math.carre(x, ret) sub math.carre(x, ret)
    let ret = x * x    let ret = x * x
 +except
 +endsub
 +;
 +sub trace                        ; si pas de parametre, () peuvent être omis
 +   echonl 'Trace de debug'
 except except
 endsub endsub
Ligne 577: Ligne 582:
   * dans le bloc de traitement, un saut direct au début du bloc exception du programme/sous-programme   * dans le bloc de traitement, un saut direct au début du bloc exception du programme/sous-programme
   * dans le bloc exception, le remplacement de l'exception originelle par celle indiquée à la suite, et le saut à la fin du programme/sous-programme pour un retour à l'appelant   * dans le bloc exception, le remplacement de l'exception originelle par celle indiquée à la suite, et le saut à la fin du programme/sous-programme pour un retour à l'appelant
-Dans les bloc exception, la variable système [[#varsys|@except]] donne le numéro de l'exception en cours, modifié par l'instruction //throw//.+Dans les blocs exception, la variable système [[#varsys|@except]] donne le numéro de l'exception en cours, modifié par l'instruction //throw//.
 <code wlang> <code wlang>
 throw 1000 throw 1000
Ligne 597: Ligne 602:
 | @part| Valeur du tag de portion de code source en cours, 0 par défaut | 21 | | @part| Valeur du tag de portion de code source en cours, 0 par défaut | 21 |
 | @except| Code exception en cours, 0 = pas d'exception | 20 | | @except| Code exception en cours, 0 = pas d'exception | 20 |
-| @exceptline | N° de la ligne du source W où a eu lieue la dernière exception | 19 |+| @exceptline | N° de la ligne du source W où a eu lieu la dernière exception | 19 |
 | @pi | Nombre Pi => 3.14159| 30 | | @pi | Nombre Pi => 3.14159| 30 |
 | @true | 1 (tout nombre différent de 0 sera évalué à @true) | 11 | | @true | 1 (tout nombre différent de 0 sera évalué à @true) | 11 |
  • reference.1792330520.txt.gz
  • Dernière modification : 2026/10/18 13:35
  • de root