30

andoh_wilfried
: 190 -> Vertel + For du Basic

C'est archi-lent ça, faut tester avec des listes sinon le bench ne signifie pas grand chose neutral


tout est fait avec des Indirections Internes . Que ce soit dans MyLib ou Vertel.

C'est un MAP 5*5 de Picture 16*16

j'affiche le MAP avec le code suivant :

"pict", "#piclist" , "#Listx","->","#Listy"

Listy ne change pas.
Mais pour déplacer le MAP horizontalement, faut :
Pour Vertel
recalculer Listx.
j'utilise "sequ" de Vertel car les Test avec 'seq(' et 'mid(' du basic sont plus lent.

Pour MyLib

Il y a juste à faire
"addi",1,16,%,"ofst",OffSetX="#" ,OffSetY=0
pour décaler les coordonnées des fonctions Graphiques de 16 pour les X à chaque boucle et 0 pour les Y

________________________________________________________________________

Je viens j'ajouter la table des fonctions et des erreurs //Functions Table char *tbl_func[]={  (char *)"seti", // OK     VarNum, NUM, PUSH                         Définit la valeur du compteur  (char *)"movi", // OK     VarNum, VarNum, PUSH               Copie la valeur du compteur  (char *)"addi", // OK     VarNum, NUM, PUSH                         Ajoute NUM au Compteur  (char *)"mult", // OK     VarNum, NUM, PUSH                           (char *)"divd", // OK     VarNum, NUM, PUSH  (char *)"modo", // OK     VarNum, NUM, PUSH  (char *)"rand", // OK     VarNum, NUM, PUSH  (char *)"valu", // OK     VarNum                                                  Retourne la valeur du copmteur  (char *)"into", // OK     VarNum, MIN, MAX, MODE{0,1}  (char *)"fonc", // OK     VarNum, VarNum, VarNum  (char *)"test", // OK     EXPR1, EXPR2,{0 ==, 1 != , 2 < , 3 >},{0 And , 1 Or , 2 Index}  (char *)"etyp", // OK     EXPR                                                       Retourne le Type {0 NUM, 1 STR, 2 LIST, 3 MAT}  (char *)"diml", // OK     EXPR                                                       Retourne la dimension d'une LISTE/MATRIX  (char *)"subl", // OK     EXPR, First, Len                         Retourne l'élément d'une LISTE/MATRIX  (char *)"augl", // OK     EXPR, EXPR                                        Retourne l'élément d'une LISTE/MATRIX  (char *)"jump", // OK     BOOLEAN, OffSet                              Saute OffSet instructions (offset peut être négatif)  (char *)"when", // OK     BOOLEAN, EXPR1, EXPR2               Si BOOLEAN==0 retourne EXPR2, sinon EXPR1  (char *)"dupn", // OK     EXPR, Count                                        Duplique n fois EXPR dans la pile interne  (char *)"labl", // OK     NUM{0 à NBR_GOTO}                         Définit un Label  (char *)"goto", // OK     NUM{0 à NBR_GOTO}                         Provoque un Branchement au Label équivalent  (char *)"prog", // OK     NUM{0 à NBR_PROG}                         Définit le début d'un Prog  (char *)"endp", // OK     NUM{0 à NBR_PROG}                         Définit la fin d'un prog  (char *)"runp", // OK     NUM{0 à NBR_PROG}                         Execute le Prog  (char *)"exit", // OK     NUM{0 à NBR_PROG}                         Quitte le prog  (char *)"name", // OK     Pas d'arguments :                     Basucle entre les Mode chaine/numéro pour appeler les fonctions  (char *)"ikey", // OK     NUM{0 à 395} default=336     Règle la vitesse du PAD  (char *)"rkey", // OK     NUM{0 à 395} default=48          Règle la vitesse du PAD  (char *)"gray", // OK     NUM{0 OFF,1 LIGHT,2 DARK}     Active les niveau de gris  (char *)"stri", // OK     NUM_POS                                                  converti un entier en chaîne  (char *)"apdt", // OK     NUM_POS                                                  Règle le temps de mis sous tension de la TI  (char *)"wait", // OK     NUM_POS                                                  Attend une durée de temps sans rien faire  (char *)"dbug", // OK     NUM_POS                                                  Mode déboguage dans la ligne d'Etat  (char *)"time", // OK     NUM_POS                                                  Règle le compteur pour le Chronomètre  (char *)"srce", // OK     VarName                                                  Indique le Début d'une source Externe de Code qui sera sauver dans une Liste   (char *)"ends", // OK     Pas d'arguments !                         Marque la Fin d'une source de Code Externe  (char *)"answ", // OK     Pas d'arguments !                     (dés)active la suppression des arguments utilisé par les fonctions  (char *)"brek", // OK     Pas d'arguments !                     C'est pour sortir de la Lib en Cas de BUG  (char *)"offp", // OK     Pas d'arguments !                     Etteind la TI  (char *)"quit", // OK     Pas d'arguments !                     Quit la Lib   (char *)"virt", // OK     Pas d'arguments !                     (dés)active l'écran virtuelle  (char *)"clrv", // OK     Pas d'arguments !                     libère la mémoire de l'écran virtuelle à chaque appel  (char *)"clrs", // OK     Pas d'arguments !                     Efface l'écran  (char *)"list", // OK     Pas d'arguments !                     (dés)active la récupération des réponses dans une Liste  (char *)"wkey", // OK     {0,1}                                                       Attends l'appui d'une touche  (char *)"gkey", // OK     Pas d'arguments !                     Comme Getkey du Basic  (char *)"tkey", // OK     NUMrow,NUMcol                         Lecture de touches multiples  (char *)"wrcl", // OK     VarStruct{0 à 9}                         Rappel la Structure dans la Pile  (char *)"wdel", // OK     VarStruct{0 à 9}                         Libère la mémoire oqp par la structure  (char *)"wsav", // OK     VarStruct{0 à 9}, EXPR          Sauve EXPR dans la Structure  (char *)"stop", // OK     VarNme, x0, y0, x1, y1          Sauve un image dans la VAT  (char *)"stor", // OK     Varname, EXPR                                   Sauve une EXPR dans la VAT  (char *)"make", // OK     Varname, Size                                   Crée une Entrée dans la VAT  (char *)"writ", // OK     ListScre, Dest, Start, Len          Copy Len Bytes de  Scre dans  Dest à partir de Start  (char *)"read", // OK     ListDest, Srce, Start, Len          Lit Len Bytes de  Scre à partir de Start dans  Dest  (char *)"kill", // OK     Varname                                                  Supprime la variable  (char *)"size", // OK     Varname                                                  Taille de la variable  (char *)"type", // OK     Varname                                                  Type de la variable  (char *)"help", // OK     STR                                                            Affiche un msg dans le Status Line  (char *)"info", // OK     Title, STR, BT_1, BT_2          Affiche un msg dans une Boite de Dialogue  (char *)"text", // OK     STR, X, Y, Font, Mode{0 à 4}  (char *)"pict", // OK     PictName, X, Y, Mode{0 à 6}  (char *)"wdth", // OK     STR, Font{0,1,2}                         Calcule La longueur de la Chaine  (char *)"clip", // OK     X0, Y0, X1, Y1                              Définit la zone d'affichage graphique  (char *)"line", // OK     X0, Y0, X1, Y1, Mode{0 à 7}  (char *)"crcl", // OK     X0, Y0, R1, R2, Mode{},Type{0=vide, 1=Plein}  (char *)"rect", // OK     X0, Y0, X1, X2, Mode{},Type{0=vide, 1=Plein}  (char *)"ofst", // OK     OffsetX, OffsetY  (char *)"sequ", // OK     Init, Step, Count                         Génère un liste  (char *)"dpix", // OK     X0, Y0, Mode{0,1,2}                    Dessine un pixel  (char *)"gpix", // OK     X0, Y0                                                  Retourne l'état d'un pixel  (char *)"2lst", // OK  MUTLI_EXPR                                        Créer une liste à partir de la pile interne  (char *)"2arg", // OK  MUTLI_EXPR                                        Supprime les accolages de liste  (char *)"push", // OK  MUTLI_EXPR                                        Ajoute des EXPR dans la pile interne  (char *)"purg"};// OK     Pas d'Arguments                          Vide la pile interne //Error Message char *tbl_err[]={  (char *)":Bad Function Name or Index !",  (char *)":Bad Argument Type !",  (char *)":Not Enough Memory !",  (char *)":Nothing on ESTACK !",  (char *)":Too Many Arguments !",  (char *)":Invalid PIC Name!",  (char *)":Separator in LIST or MAT !",  (char *)":Undefined Structure !",  (char *)":Unable to Free Timer !",  (char *)":Index Out of Range !",  (char *)":Missing Start or End of Block !",  (char *)":Imbricated Prog Block !",  (char *)":Too Much String !",  (char *)":Too Much Integer !",  (char *)":Too Much Prog Called at Once ",  (char *)":Break !",  (char *)":Quit  !",  (char *)":Invalid TiOS VarName !",  (char *)":Can't Delete Var !"};
___________________________________________________________________________

31

Ouf ! J'enfin fini la tokénéisation des fonctions. (flemme de faire la détokéneisation).
Ce n'est valable que lorsqu'on utilise la syntaxe suivante :

MyLib(

"Srce", "NomSource" , % ,

tout_le_Code_Ici , % ,

"EndS"

)

Cet apel crée un fichier perso du nom de 'NomSource.MyLB' contenant le nouveau code avec les fonctions tokénéisées.

32

Quelle Galère cette Lib. Je me demande si quelqu'un aura envie de l'utiliser au vu de sa taille (19,5 Ko) .

J'ai réorganiser la Lib en projet.

J'explique tout ça en haut.

Je crois que je vais faire une Beta maintenant ; c'est à dire avant d'inclure La gestion des Sprites.

Je sais c'est peut-être un peu tôt , mais histoire de ne plus faire attendre ce qui veulent essayer.

Qu'en dites -vous ?


33

bah... c surtout la doc qui fairat défaut, je crois grin

(demande à Vertyos, il a pas mal d'xp dans la rédaction des docsgni)
avatar
Membre fondateur de la Ligue Anti-MacIntoc
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Un expert est quelqu'un qui en sait de plus en plus sur de moins en moins
de choses, jusqu'à ce qu'il connaisse absolument tout à propos de rien.

34

La Betâ c'est en fait pour savoir ce qui manque comme fonctions à la MyLiB.
_____________________________________________________________________________

Cool , j'ai quasiment eu aucun Bug lors de la réorganisation de la MyLiB en projet.
Tous les Fichier externes *.MyLB sont complètements indépendants. Il me reste juste à leur attribuer des Répertoires Temporaires.
Pour le moment ç'est affreux quand j'appelle un projet dans un autre. Il machouille les variables de l'autre.
_______________________________________________________________________________


J'en suis à me demander si j'ai fait cette LIB pour avoir des Sprites ou Les Niveaux de Gris. Surement les 2.
L'utilisation des Niveaux de Gris ralenti l'affichage. Cela devrait s'arranger si je gére ça directement plutôt que de laisser TIGCC s'en OQP.



_____________________________________________________________________________

35

J'ai commencé quelques programmes histoire de voir ce qu'on peut tirer de 'MyLiB'

- Un Editeur de Sprite (Niveaux De Gris)


je veux bien essayer de gerer les MAP; mais vu que j'en ai Jamais fait ; je vais improvisé.

Si je me trompes, vous pouvez rectifier le tir :

- un Sprite à afficher sur le plan GRIS_CLAIR
- un Sprite à afficher sur le plan GRIS_FONCE
- le pixels affichés à la fois sur les 2 plans seront en NOIR

Il me faut Donc 2 Sprites pour simuler les 3 NVG


_______________________________________________________________
Pour le MAP j'magine qu'il s'agit d'une MATRIX indiquant les Sprites à afficher.

Cette MATRIX doit contenir les Noms des Sprites qui forment le MAP.
Je suppose que c'est la même technique pour afficher un Map en Basic avec des Pictures.

- Un Snake
- Un Shell


36

ça y est ! c'est demain la 1ère Betâ de 'MyLiB'.

Elle sera disponible demain à cause d'une erreur dans le fonction 'when'.
Y a pas de notice mais un brêve description des arguments des fonctions (comme dans la table des fonctions).
^
'MyLiB' fait 21 Ko.
Si je fait cette Betâ c'est essentiellement pour savoir les fonctions qui manquent à 'MyLib' pour être complètement Autonome du Ti-Basic.

Comme Vous Le savez tous , Un programme Ti-Basic archivé se recopie dans la RAM avant exécution. Il en est de même pour un programme MyLiB dont le Code est dans un programme Ti-Basic.

Mais Lorsque vous générez un Plug-In 'MyLiB' :
-il s'exécute directement dans l'archive.
-Seul les 21 Ko de MyLiB sont dans La RAM.
-Un Seul Appel à MyLiB pour exécuter un Programme.





[4] ATENTION[4]
MyLiB ne Supporte pas les Variables Locales




MyLib fonctionne en 2 modes :
- UntoKen

le Code de MyLiB est appelé à partir d'un programme Basic Comme vous le feriez avec la Librairie Vertel.
Les fonction sont des noms de chaînes et seront recherchées dans la Table des Fonctions.
C'est le Mode le plus simple.
Il vous permet d'utiliser les Variables définies dans le programme Basic

- ToKen

Plus complexe , ce mode permet de créer des Plug-In '*.MyLB' .
Toutes les fonctions sont remplacées par des Tokens.
Il n' y a plus de recherche dans la Tables des Fonctions(90 à 100 fonctions).

D'où un gain considérable pour le Plug-In en :
- Taille : la taille est quasiment divisée par 2 aprés tokénéisation des fonctions
- Vitesse : plus le code est long plus la vitesse augmente comparativement au Mode UNTOKEN

Contrairement au mode UntoKen Ce mode nécessite que les définitions de toutes les Variables soient inclu dans l'appel 'MyLiB'. Un peu comme l'on définirait des Variables Statiques sous TIGCC.

Disons que c'est en quelque sorte de la Compilation de Code Source


MyLib et les programme proprétaires

C'est comme un sous programme défini en local dans un autre programme Ti-Basic.
Il n'est pas visible de l'extérieur, mais seulement à l'intérieur du Code qui l'a crée.


_____________________________________________________________________________________________________________

J'ai refais le petit Test comparatif d'affichage d'image Basic avec Vertel :



[cite]andoh_wilfried :

tout est fait avec des Indirections Internes . Que ce soit dans MyLib ou Vertel.

C'est un MAP 5*5 de Picture 16*16 pixels

j'affiche le MAP avec le code suivant :

"pict", "#piclist" , "#Listx","->","#Listy"

Listy ne change pas.
Mais pour déplacer le MAP horizontalement, faut :
Pour Vertel
recalculer Listx.
j'utilise "sequ" de Vertel car les Test avec 'seq(' et 'mid(' du basic sont plus lent.

Pour MyLib

Il y a juste à faire
"addi",1,16,%,"ofst",OffSetX="#" ,OffSetY=0
pour décaler les coordonnées des fonctions Graphiques de 16 pour les X à chaque boucle et 0 pour les Y
___________________________________________________________________________


Voici les Temps du Bench fait avec VERTEL :

- 182 pour VERTEL+ For Ti-Basic (je n'ai pas Sauvé/Restauré l'écran car ça ferait plusieurs appels à Vertel)
- 143 pour MyLiB en mode UNTOKEN
- 122 pour MyLiB en mode TOKEN


37

MyLiB affiche les Sprites. Mais il se trouve que cette fonction n'est pas clippée(précision de K.K).
Donc il ne faut pas afficher des Sprites hors de l'écran , sinon c'est le Bug.

le Bench de Test ci-dessus avec la fonction 'Sprt' donne :

- 122 pour MyLiB en mode UNTOKEN
- 98 pour MyLiB en mode TOKEN


_____________________________________________________________________


Voilà c'est la Fin du Projet je crois.

MyLIB passera dans quelques Jours soit dans La Section Software , soit dans la Section Ti-Basic .

En effet 'MyLiB' se veut être un Soft indépendant du TI Basic , tout en utilisant des Types de données similaires (NUM , STR LIST , MATRIX , PIC).



_________________________________________________________________________________________________________________________


J'ai la Bètâ Sous la main , mais vu que y a pas encore de Notice , ce serait déplacé de proposer un lien pour le téléchargement.