Difference between revisions of "Bien débuter avec le langage script Lua"

From MorphOS Library

(Usage)
(Debugging on MorphOS)
 
(8 intermediate revisions by the same user not shown)
Line 8: Line 8:
 
Lua peut également être utilisé comme un langage autonome qui peut exécuter des scripts avec la commande [[Shell_Commands/LuaX|LuaX]] de MorphOS.
 
Lua peut également être utilisé comme un langage autonome qui peut exécuter des scripts avec la commande [[Shell_Commands/LuaX|LuaX]] de MorphOS.
  
== MorphOS Specific Features ==
+
== Caractéristiques spécifiques MorphOS ==
 
=== Modules ===
 
=== Modules ===
Standard Lua libraries are implemented as shared modules and, unlike the standard Lua distribution, they have to be loaded separately with the '''require()''' function if needed.
+
Les librairies standard Lua sont mis en œuvre sous forme de modules partagés et, contrairement à la distribution standard de Lua, ils doivent être chargés séparément avec la fonction '''require ()''' si nécessaire.
 +
 
 
The only module available immediately is ''package''.
 
The only module available immediately is ''package''.
  
The ''MOSSYS:Libs/Lua/'' directory contains all available modules. These are included in MorphOS 3.9:
+
Le répertoire ''MOSSYS:Libs/Lua/'' contient tous les modules disponibles. Ils sont inclus dans MorphOS 3.9:
 
* [http://www.lua.org/manual/5.1/manual.html#5.1 base]
 
* [http://www.lua.org/manual/5.1/manual.html#5.1 base]
 
* [http://www.lua.org/manual/5.1/manual.html#5.2 coroutine]
 
* [http://www.lua.org/manual/5.1/manual.html#5.2 coroutine]
Line 26: Line 27:
 
* [http://www.lua.org/manual/5.1/manual.html#5.5 table]
 
* [http://www.lua.org/manual/5.1/manual.html#5.5 table]
  
For example, a '''require("io")''' line is needed before you can use the ''io.write()'' fuction.
+
Par exemple, une ligne '''require("io")''' est nécessaire avant d'utiliser la fonction ''io.write()''.
  
 +
=== Communication ARexx ===
 +
Le module ''ipc'' contient les fonctions suivantes pour communiquer avec des programmes via leurs ports ARexx :
  
=== ARexx Communication ===
+
* ipc.'''address(port)''' - Définit le port Arexx par défaut pour transmettre des commandes. ''address("COMMAND")'' exécute des commandes comme des commandes DOS (bien que la commande Lua ''os.execute()'' fasse la même chose).
The ''ipc'' module contains the following functions to communicate with programs via their ARexx ports:
+
* '''ipc.checkport(port)''' - Teste si un port ARexx est disponible.
 +
* ipc.'''rx(command)''' - Envoi une commande ARexx vers un port définit avec ipc.address. La commande ARexx RESULT retourne le résultat de la fonction. La variable Lua ''rc'' est également définit comme le résultat de rc d'Arexx.
 +
* '''ipc.waitforport(name[, interval])''' - Attend l'ouverture d'un port publique. Le script est arrêté si le port n'est pas trouvé après l’intervalle de temps spécifiée (l'interval de temps par défaut est de 5 secondes).
  
* ipc.'''address(port)''' - Sets the default ARexx port name for sending commands. ''address("COMMAND")'' executes commands as DOS shell commands (although Lua's ''os.execute()'' does the same).
+
Note: les fonctions address() et rx() sont enregistrées dans l'espace global Lua et devrait être appelé sans le préfixe ''ipc.''.
* '''ipc.checkport(port)''' - Checks if an ARexx port is available.
 
* ipc.'''rx(command)''' - Sends an ARexx command to a port set with ipc.address. ARexx's RESULT is returned as the result of the function. Lua variable ''rc'' is also set to the ARexx's RC result.
 
* '''ipc.waitforport(name[, interval])''' - Waits for a public port to appear. The script is aborted if the port isn't found after the specified interval of time (the default interval is 5 seconds).
 
  
Note: address() and rx() functions are registered in the global Lua namespace and should be called without the ''ipc.'' prefix.
+
Exemple:
 
 
Example:
 
 
  <nowiki>
 
  <nowiki>
-- Let's load the module we need:
+
-- Charge le module dont nous avons besoin :
 
require("ipc")
 
require("ipc")
  
-- If OWB's port is found, let's open the official MorphOS page and cycle the fullscreen mode:
+
-- Si l'un de port est trouvé, nous allons ouvrir la page officielle de MorphOS et passé en mode plein écran :
 
if ipc.checkport("OWB.1") then
 
if ipc.checkport("OWB.1") then
 
   address("OWB.1")
 
   address("OWB.1")
Line 51: Line 51:
 
end</nowiki>
 
end</nowiki>
  
If the previous example is saved to a file called ''test.lua'', it can be executed from the shell with the ''LuaX test.lua'' command.
+
Si l'exemple précédent est sauvegardé dans un fichier appelé ''test.lua'', il peut être exécuté à partir du shell avec la ligne de commande ''LuaX test.lua''.
 
 
  
 
== Documentation ==
 
== Documentation ==
It's easy to find all kinds of documentation and solutions for your problems for Lua from the Internet, but here are some recommendations.
+
Il est facile de trouver toutes sortes de documents et de solutions pour à vos problèmes Lua sur Internet, mais voici quelques recommandations.
  
Official documentation:
+
Documentation officielle :
 
* [http://www.lua.org/pil/contents.html Programming in Lua]
 
* [http://www.lua.org/pil/contents.html Programming in Lua]
 
* [http://www.lua.org/manual/5.1/ Lua 5.1 Reference Manual]
 
* [http://www.lua.org/manual/5.1/ Lua 5.1 Reference Manual]
  
Tutorials by Lua users:
+
Tutoriels réalisés par des utilisateurs de Lua :
 
* [http://lua-users.org/wiki/TutorialDirectory Tutorial Directory]
 
* [http://lua-users.org/wiki/TutorialDirectory Tutorial Directory]
  
MorphOS autodocs and examples:
+
Autodocs et exemples MorphOS :
* The '''outdated''' [http://morphos-files.net/download/Lua Lua archive] contains some MorphOS specific documentation, but '''DO NOT INSTALL''' any binaries from it!
+
* L'[http://morphos-files.net/download/Lua Lua archive] '''obsolète''' contient de la documentation spécifique MorphOS, mais surtout '''NE PAS INSTALLER''' de binaires à partir de cette archive !
 
 
 
 
== Debugging on MorphOS ==
 
* [http://krashan.ppa.pl/articles/luaexplorador/ Lua Explorador] is a MUI based source level debugger for Lua programs.
 
  
 +
== Débogage sur MorphOS ==
 +
* [http://krashan.ppa.pl/articles/luaexplorador/ Lua Explorador] est un débogueur de sources basé sur MUI pour des programmes Lua.
  
== Simple Example ==
+
== Exemple simple ==
A simple example with strings:
+
Un exemple simple avec des mots :
 
  <nowiki>
 
  <nowiki>
 
require("io")
 
require("io")
Line 84: Line 81:
 
io.write(" "..string.upper(secondvar).."!\n")
 
io.write(" "..string.upper(secondvar).."!\n")
 
</nowiki>
 
</nowiki>
When ran from the shell:
+
Puis lancez à partir du shell :
 
  <nowiki>
 
  <nowiki>
 
Ram Disk:> luax example.lua
 
Ram Disk:> luax example.lua
Line 91: Line 88:
 
</nowiki>
 
</nowiki>
  
== Source Code Examples ==
+
== Exemples de code source ==
* Few MorphOS specific scripts can be found [http://jpv.wmhost.com/morphos/ here].
+
* Quelques scripts spécifiques MorphOS peuvent être trouvé [http://jpv.wmhost.com/morphos/ ICI].
* The [http://lua-users.org/wiki/SampleCode SampleCode] page at [http://lua-users.org lua-users.org].
+
* La page [http://lua-users.org/wiki/SampleCode SampleCode] sur [http://lua-users.org lua-users.org].

Latest revision as of 23:16, 14 February 2016

A propos de Lua

Lua est un langage script puissant, rapide et léger intégré dans MorphOS. Il supporte également les ports de communication ARexx sur MorphOS.

Usage

L'interpréteur Lua est implémenté comme une library partagée (lua.library), qui peut être utilisée en interne avec l'C API de Lua.

Lua peut également être utilisé comme un langage autonome qui peut exécuter des scripts avec la commande LuaX de MorphOS.

Caractéristiques spécifiques MorphOS

Modules

Les librairies standard Lua sont mis en œuvre sous forme de modules partagés et, contrairement à la distribution standard de Lua, ils doivent être chargés séparément avec la fonction require () si nécessaire.

The only module available immediately is package.

Le répertoire MOSSYS:Libs/Lua/ contient tous les modules disponibles. Ils sont inclus dans MorphOS 3.9:

Par exemple, une ligne require("io") est nécessaire avant d'utiliser la fonction io.write().

Communication ARexx

Le module ipc contient les fonctions suivantes pour communiquer avec des programmes via leurs ports ARexx :

  • ipc.address(port) - Définit le port Arexx par défaut pour transmettre des commandes. address("COMMAND") exécute des commandes comme des commandes DOS (bien que la commande Lua os.execute() fasse la même chose).
  • ipc.checkport(port) - Teste si un port ARexx est disponible.
  • ipc.rx(command) - Envoi une commande ARexx vers un port définit avec ipc.address. La commande ARexx RESULT retourne le résultat de la fonction. La variable Lua rc est également définit comme le résultat de rc d'Arexx.
  • ipc.waitforport(name[, interval]) - Attend l'ouverture d'un port publique. Le script est arrêté si le port n'est pas trouvé après l’intervalle de temps spécifiée (l'interval de temps par défaut est de 5 secondes).

Note: les fonctions address() et rx() sont enregistrées dans l'espace global Lua et devrait être appelé sans le préfixe ipc..

Exemple:

-- Charge le module dont nous avons besoin :
require("ipc")

-- Si l'un de port est trouvé, nous allons ouvrir la page officielle de MorphOS et passé en mode plein écran :
if ipc.checkport("OWB.1") then
   address("OWB.1")
   rx("OPEN NAME http://www.morphos-team.net/")
   rx("FULLSCREEN")
end

Si l'exemple précédent est sauvegardé dans un fichier appelé test.lua, il peut être exécuté à partir du shell avec la ligne de commande LuaX test.lua.

Documentation

Il est facile de trouver toutes sortes de documents et de solutions pour à vos problèmes Lua sur Internet, mais voici quelques recommandations.

Documentation officielle :

Tutoriels réalisés par des utilisateurs de Lua :

Autodocs et exemples MorphOS :

  • L'Lua archive obsolète contient de la documentation spécifique MorphOS, mais surtout NE PAS INSTALLER de binaires à partir de cette archive !

Débogage sur MorphOS

  • Lua Explorador est un débogueur de sources basé sur MUI pour des programmes Lua.

Exemple simple

Un exemple simple avec des mots :

require("io")
require("string")

local firstvar="MorphOS"
local secondvar="Rulez"

io.write(firstvar)
io.write(" "..string.upper(secondvar).."!\n")

Puis lancez à partir du shell :

Ram Disk:> luax example.lua
MorphOS RULEZ!
Ram Disk:>

Exemples de code source