Page 1 of 9

module lua natif giac

Unread postPosted: 11 Jun 2014, 12:59
by parisse
Je viens de creer un module lua natif pour giac, avec une fonction luagiac:caseval qui prend en argument une chaine et renvoie une chaine, mais je rencontre quelques problemes.
Le lien:
http://www-fourier.ujf-grenoble.fr/~parisse/calc/luagiac.zip
(pour le source http://www-fourier.ujf-grenoble.fr/~parisse/calc/giac.tgz).
Ce qui marche:
1/ luagiac.luax.tns et luachkgiac.tns dans l'emulateur avec OS 3.1, on obtient bien la factorisation de x^4-1.
Ce qui ne marche pas:
1/ la meme chose dans l'emulateur avec OS 3.6.
2/ rungiacdemo.lua/tns, inspire des tutoriels nspire lua, ne marche pas dans l'OS 3.1 (probablement normal, le lua de l'OS n'a pas les fonctionnalites requires), ni dans l'OS 3.6 (pour les memes raisons probables que luachkgiac.tns). C'est dommage parce que ca m'aurait fourni une interface plus sympa que la console sans me fatiguer cote lua.
Quelqu'un aurait-il une idee pourquoi 1/ marche avec OS 3.1 et pas avec OS 3.6?

Re: module lua natif giac

Unread postPosted: 11 Jun 2014, 14:38
by Adriweb
parisse wrote:Je viens de creer un module lua natif pour giac, avec une fonction luagiac:caseval qui prend en argument une chaine et renvoie une chaine

Ah ben, bien joué, je n'avais pas encore eu assez de temps pour regarder ça moi-même comme je l'avais dit :P

parisse wrote:1/ luagiac.luax.tns et luachkgiac.tns dans l'emulateur avec OS 3.1, on obtient bien la factorisation de x^4-1.

Effectivement :) (j'ai juste changé le drawString, histoire de bien voir le texte : gc:drawString("factor(x^4-1) = " .. luagiac.caseval("factor(x^4-1)"), 5, 5, "top")) :
Image

Cependant, la calculatrice reboote quand je veux fermer le document, je ne sais plus si c'est un problème connu ou non... bref, à creuser. (même sur le .tns de demo des luaext)

parisse wrote:Ce qui ne marche pas:
1/ la meme chose dans l'emulateur avec OS 3.6.

Oui, module non trouvé, apparemment...
Je ne sais pas si quelqu'un a déjà tenté des luaext avec ndless 3.6 :P
Si c'est un problème au niveau de ndless, je suppose qu'avertir Extended devrait aider à localiser et résoudre le problème rapidement (je viens de lui envoyer un mail).
Ca "répond" peut-être en même temps à ton "Quelqu'un aurait-il une idee pourquoi 1/ marche avec OS 3.1 et pas avec OS 3.6?".
Attendons son avis, qu'il postera sans doute ici.

parisse wrote:2/ rungiacdemo.lua/tns, inspire des tutoriels nspire lua, ne marche pas dans l'OS 3.1 (probablement normal, le lua de l'OS n'a pas les fonctionnalites requires)

Effectivement, les D2Editor étaient vraiment nuls en Lua 3.1 (apilevel '1.0' maximum... le '2.0' est venu avec l'OS 3.2, qui a bien amélioré les D2Editor par exemple)

parisse wrote:ni dans l'OS 3.6 (pour les memes raisons probables que luachkgiac.tns).

Oui voila, en Lua 3.6, le reste du code fonctionne, sinon (du moins, visuellement, ca à l'air de marcher).

parisse wrote:C'est dommage parce que ca m'aurait fourni une interface plus sympa que la console sans me fatiguer cote lua.

Je suis en train de regarder comment on peut avoir une interface simple de test avec le Lua 3.1, déja.
Ensuite, en 3.6, il sera possible de reprendre une interface tout faite, du genre SuperSpire, si critor est OK :P

Re: module lua natif giac

Unread postPosted: 11 Jun 2014, 17:13
by Excale
Adriweb wrote:Cependant, la calculatrice reboote quand je veux fermer le document, je ne sais plus si c'est un problème connu ou non... bref, à creuser. (même sur le .tns de demo des luaext)


Bug connu depuis un unsigned long time. (et en plus c'est aléatoire)

Re: module lua natif giac

Unread postPosted: 11 Jun 2014, 17:46
by Adriweb
Dommage que personne n'ait résolu ceci, alors ^^
(Va bien falloir, là)

Bon sinon, j'ai fait un petit truc rapide qui permet de tester...
Le problème c'est que l'API du D2Editor est tellement immonde en 3.1 que c'est pas pratique, au final :P

En gros, (cf .tns attaché), j'ai split la page en 2 pour pouvoir mettre tranquillement (en haut) son input dans une variable Basic, et le Lua (en bas) détecte le changement de cette variable et envoit à giac le string. Le résultat récupéré est alors affiché.

Bien sûr, dès que l'extension Lua marchera en 3.6, plus besoin de passer par ces artifices foireux, l'API du D2Editor étant correcte :)

Le code Lua pour les curieux :
Show/Hide spoilerAfficher/Masquer le spoiler
Code: Select all
platform.apilevel = "1.0" -- to test stuff with the crappy 3.1 2DEditor API
W,H = 318, 212 -- will be overwritten

hasGiac = pcall(require, "luagiac")
if not hasGiac then luagiac = {caseval = function() return "Giac module not loaded" end } end

function on.create()
    TextBox = D2Editor.newRichText()
    TextBox:move(4, 4)
    TextBox:resize(W-4, H-4)
    TextBox:setText("Store the expression you want to calculate in 'a'")
    var.monitor("a")
end

function on.resize()
    W, H = platform.window:width(), platform.window:height()
    if TextBox then TextBox:resize(W-4,H-4) end
end

function on.varChange()
    local input = var.recall("a")
    local output = luagiac.caseval(input)
    TextBox:setText("\\0el {" .. output .. "}")
    return 0 -- success
end

on.enterKey = on.varChange -- forced, just in case

Re: module lua natif giac

Unread postPosted: 12 Jun 2014, 10:19
by parisse
Je n'ai pas compris comment l'utiliser, il faut dire que je suis essentiellement debutant dans la manipulation de la nspire. Quand je lance test_lua il m'ouvre juste un onglet 1.1 avec affiche Store the expression you want to calculate in 'a', il n'y a pas d'autre onglet (ctrl-fleche ne fait rien) et si j'essaie de stocker quelque chose dans a depuis Calculate ca ne fait rien non plus.

Re: module lua natif giac

Unread postPosted: 12 Jun 2014, 11:42
by Adriweb
Pas de problème -
Le script Lua "surveille" la variable basic 'a', qui sert comme input pour giac (pas besoin de créer un d2editor d'input, du coup, qui nous aurait bien embêté en 3.1).
Dès que sa valeur change, ca appelle luagiac.caseval etc.
Au passage : il faut que a contienne un string.

Voici un petit gif d'un exemple d'utilisation :
Image
(la, c'est "truqué", j'ai fait l'enregistrement sur le logiciel Nspire - mais sur nspire_emu, c'est exactement pareil)

N'oublions pas toutefois que ceci reste du bidouillage comparé à ce qu'il sera fait pour la version Lua 3.6 :)

(Pour info, il aurait été possible de faire ceci avec deux 2DEditor, mais ca n'aurait pas marché ni sur l'émulateur (pas de touchpad émulé) ni sur les Nspire sans touchpad (les clickpad, B&W), car pour leur donner le focus, il faut la souris...)
Bien sûr, on aurait pu tout gérer à la main pour l'input (avec on.charIn, comme ici), mais vu que c'est une situation temporaire, je ne sais pas si on en a vraiment besoin ? En tout cas, ce n'est pas très compliqué à mettre en place, si on veut.

Re: module lua natif giac

Unread postPosted: 12 Jun 2014, 12:38
by parisse
Merci! Desole mais j'ai encore une question de novice, comment on coupe l'ecran en 2 pour faire apparaitre l'historique de calcul avec les a:="..."?

Re: module lua natif giac

Unread postPosted: 12 Jun 2014, 12:45
by Adriweb
Sur ce .tns, il est déjà coupé donc ya plus besoin, mais en général :

Sur CX : bouton [DOC] -> Format de page -> la, yaura pas mal de choix :)
Sur ClickPad : CTRL-Home -> Format de page

Le split en 2 applis n'est pas forcément rare, mais il existe aussi le split en 3 et en 4 (déja plus contraignant sur calculatrice, mais parfois bien pratique sur le logiciel ordinateur).

Un autre moyen de partager (ou séparer, à l'inverse), est de remonter dans les apercus des pages (Ctrl-flèche_haut) et de faire Clic droit (ctrl-menu) -> (dé)Grouper sur la page d'avant.

Re: module lua natif giac

Unread postPosted: 12 Jun 2014, 12:52
by parisse
Ah je vois, c'est parce que j'avais recompile avec luna a partir du code source...

Re: module lua natif giac

Unread postPosted: 12 Jun 2014, 13:06
by Adriweb
Ah, oui, du coup, il faut effectivement re-splitter pour pouvoir voir les 2 en même temps...

Au passage, j'ai ajouté la ligne W,H = 318, 212 -- will be overwritten en haut du script (étrange que ça ne râlait pas (sauf si on.resize est appelé avant on.create, mais j'en doute...), bref, pas grave ^^)