1

Présentation:
-------------

C'est une nouvelle librairie basic. Du moins, une adaptation de mon interpreteur
MyLiB ( en stand by pour longtemps je pense).
Cette librairie est basé sur 'TiBasExt', un soft de Kevin Kofler.
Ce soft permet d'utiliser un programme C pour lancer des programmes Ti-Basic .
Jusque là, rien de nouveau me direz-vous. Mais si je vous dis que le programme
basic peut appeler certaines fonctions du programme C qui la lancé. Alors là ça change tout.

Ce que j'apporte avec ExtLiB, c'est :
- De nouvelles fontions au Ti-Basic
- une meilleur gestion des arguments par un moteur puissant au coeur du software
- une utilisation en Mode Librairie de toutes les fonctions par la fonction 'Command('

La gestion des arguments d'ExtLiB est très proche de celui de la librairie Vertel.
Il faut toutefois noter les différences dans la gestion des Tag_spéciaux et des MATRIX.

La librairie supporte tous les types d'arguments Ti-Basic suivant : NUM,STR,LIST,MATRIX.
Les fonctions font exactement tout ce dont on peut attendre d'elles; rare sont les restrictions.

Pour télécharger : ExtLiB Disponible uniquement sur Ti-Gen ou Ti-Fr

17 Decembre 2005 à 19:05 GMT ;

il n'y pas de risque de récursion, j'ai tester on obtient l'erreur 'Variable in Use' .

Pour lancer un programme Ti-Basic utilisant les Extensions ajoutées, vous avez le choix de la syntaxe :

- main\extlib( "nom_prog_basic" )
- main\extlib( "nom_prog_basic1", "nom_prog_basic2", "nom_prog_basic3" )
- main\extlib( { "nom_prog_basic1", "nom_prog_basic2", "nom_prog_basic3" } )
- main\extlib( { "nom_prog_basic1", "nom_prog_basic2", "nom_prog_basic3" } )


tout ça pour dire que les accolades de listes sont ignorées, et que tous les programmes seront lancés succesivement


En clair, vous pouvez directement écrire en Ti-Basic ceci :

:make("a",50)
:write("a",{0,0,45},{2,48,49})
:memset("a",ord("m"),2, 45 )

ce code créer la variable a, la définit au format string, et la remplit du caractère 'm'

On peut arriver au même résultat en faisant aussi ceci:

:command("make","a",50,%,"write","a",{0,0,45},{2,48,49},%,"memset","a",2,ord("m"),2,45)

NB: '%' remplace le symbole infini sur TI

Ce mode permet d'appeler plusieurs fonctions sans passer par le basic.
De plus si plusieurs fonctions ont des arguments en communs, vous pouvez regrouper les dans une liste, histoire qu'elles utilisent les même arguments.

Plus tard, lorsque j'aurai énormément de temps pour coder la tokénéisation; on pourra faire ceci :

:command("tokenfile")

où "tokenfile" est le nom d'un fichier perso contenant les token des fonctions.

2

a ma connaissance , y'a pas besoin d'un loader spécial pour appeler des fonctions ASM dans un prog TI basic, par exemple foldinfo() qui renvoie la liste des fichiers/répertoires (chéplus où ça traine sur ticalc)

ou alors c'est spécial?

3

l n'y pas de risque de récursion, j'ai tester on obtient un 'Variable in Use' .

4

sauf que là tu as un seul programme pour toutes les fonctionsn smile
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

5

mmmh c'est si grave que ça la récursion ?
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

6

j'ai pas essayé, mais 39 Ko en récursion dans le TiOS; ça ne pose aucun problème !!!!

je dit ça comme ça, je dois me tromper, j'ai cru que le TiOS faisait une copie du Programme récursif dans chaque répertoire temporaire. A mon avis je me trompe. ça doit être uniquement pour un programme déclaré locale non ?

7

pour avoir une idée du fonctionnement des variables temporaires, le mieux est de faire un test "à la main"
tu crées un programmes qui s'appelle 3-4 fois en créant à chaque étape et qui à la dernière étape lance un shell smile
de mémoire, seules les variables locales sont dupliquées
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

8

ok, donc y pas de risque en récursion.

9

et pour la gestion des variables, c'est assez simple : à ma connaissance, le TIOS cherche la variable d'abord dans les répertoires temporaires dans l'ordre inverse de leur création puis dans le répertoire courant
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

10

c'est bon j'ai testé, y a pas de risque de récursion.
un appel récursif provoque l'erreur 'Var in use'
selon K. K.
le bit in-use est mis.


Vue que j'ai Preos On-Calc et Tex comme Shell ; pour voir ce que fait le TIOS , j' appelle à 'Text' du Ti-Basic et je lance le shell par le racourci installé par Preos

11

ça peut être dommage, non ? tu peux pas gérer toi-même la récursion ?
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

12

Je pense que je n'ai pas été suffiamement présenté le soft de Kevin.
En fait tout progrmme C/ASM utilisant le soft de K.K. crée une sorte d'application flash, qui ajoute des nouvelles Extensions( fonctions) au Ti-Basic. Ces Extensions sont visibles par tous les programmes et sous programmes tant que le programme C/ASM est chargé en RAM.
Du coup il n'y a besoin d'apeller ExtLiB qu'une seul fois pour lancer un programme.
Si ce programme en appelle d'autres, ils veront tous les Extensions ajoutées par ExtLiB.

La récursion n'est donc plus un soucis, car il n'en a pas besoin.

13

j'avais bien compris qu'il marchait comme ça triroll
je voulais juste dire que c'était dommage que ça fasse une erreur, il faudrait mieux que ton programme quitte silencieusement
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

14

Que veux tu que je fasse :

1- désactiver le bit-in-use de ExtLib par ExtLiB lui même

Un programme C peut-il se modifier lui-même sans risquer de planter le TiOS ?
Si cela est possible; autant autorisé les appels récursifs puisque ça ne duplique pas
le code de ExtLiB.

2- créer une variable BOOLEAN globale qui me servira pour controler la récursion comme ceci

// Déclaration variable globale
bool =0;
[PRE]
bool = 1-bool;
if( !bool ) {
return;
}

[/PRE]

15

je pensais à la 2ème solution
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

16

mmmh après réflexion ça peut être gênant ^^
imagine qu'un pervers archive ton programme en cours d'utilisation triso
ce qui tu peux faire, c'est chercher si le bit in-use est armé et si oui, quitter sans faire d'erreurs
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

17

pardon ce ne sont pas 2 solutions mais 2 étapes.
C'est le TiOS qui Bloque la récursion en marquant le bit-in-use ; à moins que ce ne soit K.K. qui l'ai activé. Mais je ne pense pas que ce soit K.K.

Si on ne peut pas désactiver le bit-in-use; on ne peut pas faire d'appel récursif.

18

t'as raison faut toujours penser au pervers. ça craind si quelqu'un s'amuse à modifier la ExtLiB ou tout autre programme en cours d'exécution.
Fauut que je trouve le moyen d'empêcher ça.

vais voir comment gerer avant de Locker le Heap. ça va vraiement pas être évident.
car il va y avoir une fonction pour (dé)locker le Heap.
Faut que je je me rabatte sur le bit hidden peut-être.

19

qn pourrait m'expliquer? je pige pas du tout le pb des ajouts de fcts en basic.

Il suffit d'ajouter un prog asm avec le bon nom, de jouer avec les ESI et ça passe en basic non?

20

cette lib n'est pas vraiment une lib. c'est basé sur TiBasExt de K.K qui sert a creer une APPS FLAH temporaire.
c'est un truc qui ajoute plusieurs fonctions contenus à l'intérieur d'un seul programme C, et les rend directement accessible depuis le Ti-Basic comme un sous-programme/fonctions.

Ce qui permet si on fait de la gymnastique en C et dans l'Estack :
1- d'avoir un seul moteur pour gérer les arguments passés aux fonctions du prog C
2- de ne pas reécrire plusieur fois un même code utilisé dans plusieurs fonctions.

Conclusion : ça ajoute plein de fonctions au Ti-Basic avec un seul programme C.

La mise-à-jour de la DOC est très explicite

21

squalyl^2 :
qn pourrait m'expliquer? je pige pas du tout le pb des ajouts de fcts en basic.

Il suffit d'ajouter un prog asm avec le bon nom, de jouer avec les ESI et ça passe en basic non?

sauf que là il te faut un programme asm par fonction exportée, et que tu saches où il se trouve
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

22

andoh_wilfried :
pardon ce ne sont pas 2 solutions mais 2 étapes.
C'est le TiOS qui Bloque la récursion en marquant le bit-in-use ; à moins que ce ne soit K.K. qui l'ai activé. Mais je ne pense pas que ce soit K.K.

Si on ne peut pas désactiver le bit-in-use; on ne peut pas faire d'appel récursif.

ah oui c'est vrai, je m'en souvenais plus picol
y a toujours des possibilités de faire des trucs crades, genre ne pas armer le bit in-use mais un autre qui ne sert à rien ^^
la variable dans ton programme c'est un peu risqué je pense (genre un crash récupéré, ton programme reste marqué comme étant utilisé
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

23

En clair ça crée une APPS FLASH temporaire.
et ça te donne accès aux fonctions de l'APPS flash qui sert de lanceur pour tes programmes basic

24

Flanker
:
squalyl^2 :
qn pourrait m'expliquer? je pige pas du tout le pb des ajouts de fcts en basic.

Il suffit d'ajouter un prog asm avec le bon nom, de jouer avec les ESI et ça passe en basic non?

sauf que là il te faut un programme asm par fonction exportée, et que tu saches où il se trouve

ui d'accord je vois. c'est une lib basic en fait. ca m'aurait plu quand je développais encore smile

25

laisse toi tenté à l'essayer juste un peux et tu verras; ça peut vite devenir sympa !
t'as vu la liste des fonctions.

Surtout que je vais essayer d'ajouter une couche de :
- Label Goto
- For Next

je teste si c'est plus rapide que ceux du TiOS; dans MyLiB c'étais le cas ( si je me souviens bien c'étais 10 fois plus rapide )

26

ben oui les routines de tios savent évaluer des expressions a ce niveau, si tu zappes ça , ca deviendra méga rapide smile

27

28

d'un coté c'est dangereux de manipuler une variable en cours d'utilisation.
que pense tu qu'on puisse en faire de bien ?

29

30

Fonctions en cours d'implémentation:
------------------------------------

J'ai commencé à implémenter des fonctions qui permettent de déplacer un pointeur à
l'intérieur d'une variable. En l'occurence il s'agit des varibles de type LISTE/MATRIX.
Ces fonctions servent à créer une variable virtuelle par restriction d'une variable réelle.
En clair ça va éviter de faire des 'left','right','midl','sublist', 'submat' sur les types
LISTE/MATRIX, lorsqu'on ne veut utiliser qu'un sous ensemble les valeurs définies dans ces
variables.

voici les fonctions que je suis en train d'implémenter :

[PRE]

- Déclaration de la table des Pointeurs sur une variable:
DefPtr( "Varname", Count )
SetPtr( "*NamePtr1", SkipArg )
SetPtr( "*NamePtr2", SkipArg )
.
.
.
EndPtr()

- Modification de Pointeurs:
MovePtr( "*NamePtr", SkipArg )
CopyPtr( "*NamePtr1", "*NamePtr2")

- Suppression de la table de Pointeurs d'une variable:
DelPtr( "Varname")
[/PRE]

Les nouvelles variables sont utilisables au même titre que les variables de la VAT.
J'espère que vous avez remarqué qu'elles commencent toutes par '*'.
Bien sur, on pourra utiliser 'CopyPtr(' et 'MovePtr(' en plus de 'SetPtr(' dans le
Bloc de la déclaration du pointeur. D'ailleurs, ce sont les seules fonctions autorisées
par la ExtLiB dans le Bloc. Par contre les instructions Ti-Basic y sont autorisées.