1

2

y a deux façons d'utiliser les libs à la volée
soit tu la charges, tu exécutes 3-4 fonctions puis tu la décharges (libbegin, libcall and libend)
soit tu utilises libexec qui charge, exécute la fonction demandée et qui décharge la lib

1ère méthode > pas besoin de recharger la lib à chaque appel donc plus rapide si tu as beaucoup d'appels
2ème méthode > plus courte quand il n'y a qu'un seul appel

pour globals, je crois que c'est parce que les données sont à une adresse toujours près de l'écran
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

3

tu peux regarder mon shell microshl, il utilise ces fonctions 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

4

5

et comment il fait pour deviner à la volée ? le kernel s'occupe de reloger avant l'exécution de ton programme, après il ne fait plus rien, donc il faut bien lui dire d'une façon ou d'une autre (tout en étant compatible avec l'API déjà existante) qu'il faut charger une lib
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

7

oué, mais là genlib est chargée au lancement de ton programme et sera déchargée à la fin
donc pendant toute l'exécution de ton programme, la ram consommée sera taille(programme)+taille(genlib)
là, ça permet réduire à taille(programme) quand on n'a pas besoin des libs
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

exemple, un shell qui s'apprête à lancer un programme
doors, qui est vieux, occupe en permanence taille(doors)+taille(ziplib)+taille(filelib)+taille(graphlib) même quand il lance un programme
s'il utilisait ces fonctions, il pourrait décharger ziplib, filelib et graphlib et n'utiliser que taille(doors) quand il lance un prog
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

9

10

Merci bien de ta patience happy
> de rien, tjs content d'aider ^^

oué, exactement
mais c'est clair que ça sera plus lent et ça prendra plus de place ^^
pour charger des niveaux ça peut-être pas mal (genre le code de décompression est dans une lib, ou qqc du même style)
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

11

Martial Demolins :
Donc c'est très utile pour un shell ou autre launcher de programme, maintenant ça doit être à peu près inutile (et lourd pour le kernel) de faire ça avec genlib dans un jeu ou on fait un appel tous les 3 lignes (si j'ai bien tout compris hein ^^)


En effet pour un jeu qui utilise genlib c'est pas la meilleure méthode : perte de place et de vitesse.

Par contre ca peut avoir pas mal d'interêt autre que réduire la place au chargement:
- Implémenter facilement un système de plugins
- Permette a un appli d'utiliser une lib optionelle (comme ziplib pour un shell) seulement si elle est présente sur la calc
- Permettre de charger facilement des donnée externe(même si ca doit pas être la methode la plus optimisé en place)
- Charger seulement le code utile a un moment donné. Ca pourrait être utile pour un programme ultra gourmant en taille de code ( je crois que c'est le cas de Chrono Fantasy)
avatar

12

pencil
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

13

14

En général, sous unix, 0 signifie que tout c'est bien passé, un autre nombre sert a donner le numéro d'erreur.
Sur TI je ne sais pas trop s'il peut être récupéré (sous PedroM peut-être)
avatar

15

C'est comme sur Unix. 0 ok, sinon c'est une erreur (avec le code d'erreur).
Surtout sous pedroM

16

17

Si ca marche comme sous unix on peut récupérer la valeur de retour du dernier programme par la variable d'environement $?
Maintenant je ne sais pas si ca marche comme ca sous Pedrom, ni s'il y a un autre moyen de le récupérer sous AMS et PedroM
avatar

18

%1: tios::globals est une antiquite a ne pas utiliser.

%10: "Permettre de charger facilement des donnée externe(même si ca doit pas être la methode la plus optimisé en place) "
Sauf que ca gere la decompression a la volee wink

%15: C'est le code de retour de kernel::exec. (Ok c'est mal foutu).

%16: Ca ne marche pas. Mais bon si c'est necessaire, dites-le.

19

20

>Que renvoie LibsBegin quand la lib n'est pas trouvée sur la calc? Le descripteur est nul? C'est pas garanti par la doc. sad
Oui

>Que se passe-t-il si on charge une lib déjà chargée?
Rien de mal. Ca marche bien smile

21

22

Hum... En fait, c'est le "Run-time dynamic linking", la même fonction que LoadLibrary()...

Une précision sur la dernière question: Si on charge une lib N fois, combien de fois faut-il la libérer ? une ou N fois? (chez MS, c'est N)
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

23

24

Il l'est. tongue N fois en theorie.
En pratique, le syteme anti-oublie de liberation de librarie de PreOS lui fait liberer les librairies chargees par un programme a sa terminaison.
Encore mieux que parfait wink

Sinon tu parles d'un BSS unique a chaque instance de la librarie ?

25

Je pense, oui.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

26

27

Je pensais le faire, mais j'ai abandonne devant la complexite de la chose (surtout que c'est pas si facile a faire).
Mais si tu me trouves une implantation rapide et efficace, je prends.

28

29

Juste pour rire,tu fais quoi dans le cas ou un programme utilisant une libraire A qui utilise une librarie C, et une librairie B qui utilise aussi la librarie C.
Et si la librarie C a des BSS uniques a chaque instance, tu l'as dans le cul, non ?

30

ce que tu peux faire, c'est peut-être faire cela selon un paramètre de la fonction de chargement...
et/ou interroger la librairie elle-même...
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.