1

Bonjour,


Je cherche à appeler un programme à partir d'un programme en TI Basic. Le problème est que le programme que je veux appeler demande un nombre variable d'argument, nombre que je ne peux pas connaitre à l'avance. De plus, ces arguments peuvent etre soit des chaines de caractères, soit des expressions.

Je cherche donc à savoir comment envoyer en argument à un programme une variable contenant arg1,arg2,arg3,...argN. J'ai d'abord essayer de faire monprgm(expr(arg1,arg2,arg3)), mais j'ai un Syntax Error (ce qui est logique puisque mon expression contient des virgules...). J'en déduis qu'il faut que :

1) j'analyse ma chaine de type arg1,arg2,arg3,...argN : je stocke chaque argument dans une liste et dans une deuxième liste je stocke si l'argument est une expression ou une chaine de caractère
2) je regarde dans la deuxième liste si l'argument N est une expression, si oui j'envoie expr(argN) sinon argN tout court au programme.

Pour le 1, ce n'est pas compliqué à faire. Le 2 me pose plus de problèmes, je ne vois pas du tout comment le faire ?! Je peux lire mes listes avec un for, mais alors comment établir une "liste des arguments" ? j'aurais une variable contenant quelque chose du genre expr(arg[ 1]),arg[ 2],expr(arg[ 3]) mais comment envoyer ceci à mon programme ? j'ai essayé monprgm(expr(arg[ 1]),arg[ 2],expr(arg[ 3])) ou encore monprgm( #(expr(arg[1 ]),arg[ 2],expr(arg[ 3])) mais sans succès... Personne n'aurait une idée svp ? (note : il n'y a aucun expace dans les expressions que j'ai donné, c'est juste pour rendre les expressions "clairs")



Merci d'avance.


(remarque : si il existe une fonction magique pour faire ce que je veux je suis preneur grin )

2

Au premier abord je dirais un truc du genre.
Pas besoin de la liste contenant le type je pense. "monprgm(arg[1]"->chn For c,2,N    chn&","&string(arg[c])->chn EndFor chn&")"->chn expr(chn)
avatar

3

Purée, j'avais compris que l'on pouvait faire expr(monprgm(arg1,arg2...)).... J'essayais de faire monprgm(expr(arg1,arg2,...)).



En tout cas, ça marche mieux, merci de ta réponse.


Heuh... un peu en dehors du topic d'origine mais bon : c'est normal que si j'essaye de jouer avec monprgm juste après avoir fait expr(monprgm(arg1,arg...)) rien ne se passe Le fichier monprgm semble toujours en cours d'utilisation ?

4

Une fois le programme principal (où tu appelles monprgm) arrêté ?
avatar

5

Non, justement, j'aimerais pouvoir modifier monprgm sans arreter le programme principal.

6

heu mais ... comment et pourquoi veux tu faire ça ?
(c'est quoi ton projet en gros ?)
avatar

7

Mon projet est (grosso modo) de faire un programme qui décompresse/execute/recompresse un programme (avec n'importe quel format de compression).

8

D'accord ... (je ne sais pas)
avatar

9

pourquoi ne pas tout bêtement mettre tous tes arguments dans une liste et passer la liste en paramètre au programme ? par exemple monprog({1,2,"kikoo",4,"5"})
avatar

10

C'est ce que j'ai fait aze. En fait je ne savais pas qu'on pouvait faire expr(monprgm(arg)). En sachant cela, il m'a suffit de demander avec Request les arguments puis de balancer les arguments à monprgm avec expr, sans même m'embêter avec des listes... (sinon pas d'idées pour "arrêter" monprgm aze ? smile )

11

vu qu'un seul programme s'exécute à la fois, il faudra attendre que le programme lancé s'arrête pour que le premier reprenne la main... non?

12

Mais.... Je ne comprends peut-être pas. Voila plus ou moins ce que j'ai dans mon programme;

[code]
Request "Arg",arg
decomp(monprgm)
expr(monprgm(arg))
comp(monprgm)
[/code]


monprgm se décompresse et s'execute. A la 4eme ligne, monprgm s'est arrêté (non ?) et pourtant, comp ne marche pas sur monprgm, car il semble que monprgm soit toujours en utilisation (alors qu'il s'est arrêté puique comp est lancé ?!).

13

c'est pas logique ça ...
avatar

14

Mon raisonnement ou celui de la machine ? grin

15

Il faut utiliser Return pour quitter un programme, pas Stop (qui termine entièrement l'interpréteur TI-BASIC, aussi tous les programmes appelants). Personnellement, je ne vois pas d'utilisation valable pour Stop.
avatarMes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

16

c'est clair grin sauf pour faire l'effet d'une "fatal error" (en basic grin) ?

17

Je ne comprends pas ta réponse Kevin Kofler : le fait que monprgm soit ecrit en BASIC ou en C (compilé avec TIGCC) ne change rien à l'affaire. En fait, seul le programme qui appelle monprgm est en TI BASIC. Donc, tu voudrait que j'utilse Return dans mon programme en TI BASIC qui appelle monprgm ? confus

18

oui, exactement, plutot que stop, car stop arrête TOUS les progs basic.

19

Hum. Je ne comprends pas là. On va dire que le programme a (en ti basic) lance le programme b (en C). Donc, ce que je fais dans a, c'est que je decompresse b, je demande les arguments à l'utilisateur, je lance le programme b et je stop le programme a avec return. Ma question est alors simple : comment je recompresse b puisque a s'est arrêté ?!

20

./14 > celui de la machine

./19 > c'est pas plutôt b qu'il faut arrêter avec Return confus
avatar

21

Heuh.... je veux bien mais comment ? D'après ce que j'ai cru comprendre du manuel, si je fais "Return monprgm(arg)", alors le programme qui contient l'instruction return retournera la valeur retourné par monmprgm(arg) n'est ce pas ?

22

Dans un programme, tu utilises Return sans paramètres et il quitte ton programme. Dans une fonction, tu utilises Return avec un argument, parce qu'une fonction retourne une valeur.
avatarMes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

23

oui mais là son sous-programme est en C apparemment, donc il ne peut pas utiliser Return (qui a priori est une instruction basic) dedans ; et de plus à ce qu'il dit son programme principal (en basic) reprend bel et bien la main après exécution du sous-programme.
avatar« Le bonheur, c'est une carte de bibliothèque ! » — The gostak distims the doshes.
Membrane fondatrice de la confrérie des artistes flous.
L'univers est-il un dodécaèdre de Poincaré ?
(``·\ powaaaaaaaaa ! #love#

24

Sally (./23) :
oui mais là son sous-programme est en C apparemment, donc il ne peut pas utiliser Return (qui a priori est une instruction basic) dedans ; et de plus à ce qu'il dit son programme principal (en basic) reprend bel et bien la main après exécution du sous-programme.



Voila, c'est exactement ça grin

25

c'est bien pour ça que ./13
avatar