Hébergé par Ti-Gen      
GFA-Basic On-Calc GFA Basic On-Calc!     
Bienvenue sur le site de GFA-Basic, un langage interprété on-calc pour les TI89/89T/92+ & V200.
Ce site a pour objectif de regrouper un ensemble d'outils et de documentations pour vous permettre de mieux exploiter ce langage sur votre calculatrice.

 
Menu général
News
Le manuel
FAQ (Foire Aux Questions)
Téléchargements
GFA-Basic Editor
Forum
Historique
A Propos...
Contacts

Administration

Partenaires




Compteur live
Compteur de visites Compteur pages rank




    
Historique du scanner, parser... (GFA-Basic)
Tokeniseurs-Détokeniseur et Gestionnaire d'exécution des Tokens ancienne version.



10/08/2004:
- Préparation de l'en-tête pour le fichier tokenisé.
- Préparation du buffer de tokenisation.
- Réécriture complète du scanner, recherche de TAGS.
- Création des tables des tokens.


11/08/2004:
- Gestion approfondie des TAGS.
- Gestion des chaînes de caractères.
- Gestion des tokens REM et ' en début de ligne.
- Recherche de variables type tableaux ou simples variables.
- Identification de = comme affectation ou comparaison suivant le premier token de la ligne.
- Vérification syntaxe de base.


12/08/2004:
- Codage presque complet du tokeniseur.
- Début de codage de détokeniseur.


13/08/2004:
- Détection des parenthèses manquantes.
- Gestion &X ou &O ou &H pour le détokenisateur.
- Correction de bugs d'alignements tokeniseur.
- Pointage de l'erreur sur la bonne ligne.
- Meilleur gestion de la syntaxe.
- Gestion des constantes comme PI, signe pi, TRUE et FALSE.
- Gestion de la structure GOTO avec recherche de labels.


14/08/2004:
- Gestion complète de la structure GOTO.
- Détection des déclarations de labels.
- Début de codage de la phase de lecture du fichier tokenisé pour être executé.
- Reconstitution presque complète de la pile de TAGS.


15/08/2004:
- Algorithme de l'aiguillage évolué implanté.
- Correction de bugs surtout avec les chaînes de caractère et commentaires.
- Programmation du buffer d'execution.
- Création des tables des fonctions.


16/08/2004:
- Allocation des variables.
- Gestion des priorités de calculs.
- Implantation de toute la gestion de base de la pile ExcStack.
- Implantation de la fonction Print, Dim et Dim?.
- Gestion de Print At avec point virgule et apostrophe.
- Possibilité d'avoir une fonction qui se termine avec un point d'interrogation.


17/08/2004:
- Implantation de plus de 50 fonctions de bases avec correction de bugs.
- Amélioration de Upper$, Str$, String$.
- Optimisation sur l'affectation.
- Correction d'un bug des fonctions sans parenthèses dans ExprMake_MoveTags.
- Gestion de goto avec adressage optmisé.
- Gestion de IF, THEN, ELSE, ENDIF.
- Amélioration et correction de l'opérateur NOT.


18/08/2004:
- Correction de bugs avec l'opérateur NOT.
- Indentation automatique dans le détokeniseur pour If, Else, Endif.
- Conversion en majuscules des constantes.


23/08/2004:
- Ajout de ElseIf et gestion de Else If.
- Ajout des fonctions MKI$, MKL$, MKF$, Cvi, CVL, CVF.
- Ajout de Lower$, Setfont et Getfont.
- Gestion de Print At comme output en TI-Basic.
- Début de codage de Inkey$.
- Correction de bugs.


24/08/2004:
- Programmation de la fonction _kb_getkey. TI89/TI92+/V200.
- Ajout des combinaisons avec SHIFT.


25/08/2004:
- Correction d'un bug avec Mid$(.
- Accès d'un tableau à partir de l'index 1 à x au lieu de 0 à x-1.
- Le curseur de print n'est pas remis à son ancienne position après un print at.
- Programme d'exemple 'Inversion'.
- La fonction Int devient Fix (trunc).
- Ajout de la fonction Round qui prend le contenu de l'ancien algorithme de Int.
- Affichage du numéro de la ligne où s'est produit l'erreur.
- Ecriture de la chaîne de caractère dans le fichier de tokens d'executions au lieu de son adresse.


26/08/2004:
- Ajout de la structure Do ... Loop.
- Ajout de Exit If et Exit.
- Correction d'un bug de gestion hiérarchique avec Exit [If].
- Ajout de la structure Repeat ... Until Condition.
- Debut de programmation de la structure While condition...Wend. (Gros bug avec cette structure).


27/08/2004:
- Correction d'un bug avec les sauts.
- Programmation complète de la structure While condition ... Wend.
- Possibilité de quitter directement l'interpréteur.
- Gain en mémoire, projet à 58 Ko.
- Ajout de l'exposant E dans la fonction FloatToStr (...);
- Ajout des fonctions: Timer, System, Crslin, Crscol, Random, (Type), Val?, Varptr. Arrptr
- Correction d'un bug avec l'affichage d'une erreur lors de l'execution du code.
- Correction d'un bug donnant le mauvais numéro de ligne pour une erreur lors de l'execution du code.


28/08/2004:
- Correction du bug commentaire après Then Else...
- Finalisation du détokeniseur, plus d'erreurs d'espaces.
- Etallonage de l'auto int n°1 ainsi que des fonctions Timer et Pause.
- Auto int n°2 désactivée.
- Coordonnées de départ à 1,1 pour Print.
- Correction du bug de transtypage.
- Une division sous la forme X%/Y% provoque toujours un résultat du type Float.
- Ajout de la division entière avec Div ou \. Capable de faire X%\Y% et Trunc(X/Y).
- La fonction Dim commence à l'index 0 sur Atari ST soit Dim A(5) contient 6 éléments accessible de 0 à 5.
- Les tableaux commencent à l'index 0 et se terminent à l'index n, soit Dim A(5) contient 6 éléments.
- Ajout des fonctions Dfree, Poke, DPoke, LPoke, Peek, DPeek, LPeek.


31/08/2004:
- Optimisation de la pile NumStack, gain en vitesse important mais pas suffisant.
- Correction d'un bug avec le détokeniseur, Print(Timer-T)/200 devient Print (Timer-T)/200.
- Ajout de la fonction Box.


01/09/2004:
- Ajout de la fonction Input. (A améliorer niveau graphique).
- Programmation de la fonction _kb_flush et StrToFloat.


02/09/2004:
- Correction d'un bug avec le détokeniseur, ajout d'un espace après un token type COMMAND en fin de ligne.


03/09/2004:
- Amélioration de InpuStr.
- Correction d'un bug dans la fonction Input, = dans une condition au lieu de ==.


05/09/2004:
- Exportation des tables des tokens en fichier externe. Gain de 4 Ko.
- Correction d'un bug du détokeniseur avec un espace manquant entre une fonction et un opérateur logique comme Else If Not.


08/09/2004:
- Correction du bug avec une fonction en début de ligne soit Print "Text",(x+2)/500 par exemple.
- Correction du bug 'Memory' à l'ouverture d'un fichier texte avec l'éditeur de Texas. (Oublie de Unlocker l'handle du fichier ouvert).
- Correction d'un bug avec l'ajout de parenthèses pour la première fonction en début de ligne.


09/09/2004:
- Correction bug avec le layout du clavier TI92+/V200 (flèches directionnelles).


11/09/2004:
- Codage de l'optimisateur de calculs.
- Correction de la table des tokens au niveau des signes.
- Correction d'un bug avec l'opérateur NOT et les parenthèses dans MoveTags.


15/09/2004:
- Ajout de la fonction TEXT avec gestion du paramètre 'l' comme sur Atari ST. (Sous demande de Onur alias Nounours %))


01/10/2004:
- Ajout de la fonction Plot.


02/10/2004:
- Gestion front montant avec Ngetchx (ajout de _kb_flush).
- Ajout des signes de comparaisons de la TI soit <=, >= et <> (différent de).
- Ajout du point après un flottant entier dans le détokeniseur.
- Transtypage correct pour les comparaisons, comparaisons possibles entre entiers et flottants.
- Bug avec Plot corrigé.



Réécriture complète du Gestionnaire d'Exécution des Tokens.



31/10/2004:
- Correction bug du scanner avec 'If -1 Then'.


05/11/2004:
- Ajout amélioration de syntaxe (exposant+signe négatif) soit par exemple -5.2e-32.


07/11/2004:
- Le token affec annonce ensuite une fin de ligne!. Gain de 10% en vitesse d'exécution!


11/11/2004:
- Les sauts se trouvent maintenant à une adresse quelconque et non à une adresse paire.
- Correction d'un bug. écriture des adresses par macro.


12/11/2004:
- Modification des sauts. Les tokens EOFLINE et CLEAR ne servent plus à rien. Economie sur la taille du fichier final d'exécution!


13/11/2004:
- Correction d'un bug avec la création des tokens. Parenthèse ajoutée entre Else ( If par exemple!
- Correction d'un bug de gestionde syntaxe avec le scanner. If >=10000 n'est plus autorisé.
- Correction d'un bug d'indentation automatique avec le détokeniseur. (Provoquait l'erreur 'Mémoire insuffisante').
- Correction bug du scanner. Affectation impossible après Print par exemple. l'affectation devient possible seulement pour une ligne commençant par une variable ou un tableau.
- Programmation de la boucle For...Next.


14/11/2004:
- Programmation de DownTo et Step pour la boucle For.
- Restructuration de la boucle For.


17/11/2004:
- Correction bug du scanner avec ,-.
- Correction bug du scanner avec var(-).
- Correction bug du Parser avec If pour Exit If et Else If.
- Signe - peut être utilisé comme négation (-) ainsi A=A*-3 est possible maintenant!


23/11/2004:
- Correction d'un bug de syntaxe avec double apostrophes soit par exemple Print 25''52.


26/11/2004:
- Correction d'un bug avec la négation pour les entiers dans la fonction d'optimisation des calculs.


04/12/2004:
- Supporte les signes mathématiques de la TI soit racine carrée, exponentielle de 1 et fonction exponentielle 'e^('.
- Création de la table des constantes. (RR_xxx par exemple, CALCULATOR...).
- Supporte les variables avec des tirets.
- Force le détokeniseur à mettre la première lettre après un tiret en majuscule.
- Correction bug de conversion string en flottant ou en entier.
- Extension signe négatif en - pour l'exposant soit 3.5e-5 autorisée.
- Codage des constantes terminée!


23/01/2005:
- Début de codage de la fonction DATA.


05/02/2005:
- Fin de programmation de la fonction DATA et programmation de la fonction ExprTokens_MakeFile (création d'un fichier GTK).


06/02/2005:
- Lecture correcte des paramètres de la fonction Read (variables et tableaux).
- Programmation de la gestion de la fonction Restore.


07/02/2005:
- Programmation de l'instruction Continue (Reboucle structure).
- Paramètre var facultatif après Next.
- Ajout du support de données sur 16 Bits. (DATA).


09/02/2005:
- Correction d'un bug avec les constantes dans le scanner .


11/02/2005:
- Correction d'un bug dans le scanner avec le signe négatif, (,-) autorisé maintenant.


18/02/2005:
- Correction d'un bug avec le signe de commentaire !.
- Amélioration du commentaire !, possibilité de rajouter des espaces avant.


20/02/2005:
- Possibilité d'utiliser directement une apostrophe (') devant Print.


03/03/2005:
- Gestion des Sauts (Goto) incorrectes. (Label ou Goto dans boucle For).


05/03/2005:
- Correction d'un bug de syntaxe avec "".


13/03/2005:
- Intégration de la gestion des procedures.


21/03/2005:
- Détermination des variables locales dans la dernière phase de tokenisation (pour GFA-TEM).


22/03/2005:
- Correction d'un bug avec la gestion des variables locales.
- Changement ordre des types de variables (Float, Integer, Bool, String).
- Codage de la phase de tokenisation GTK des variables locales.
  • 4 Bits = Type de la variable (Flottant, Entier, Booléen, Chaîne de caractères).
  • 12 Bits = Offset dans la pile de variables locales.


    23/03/2005:
    - Tokenisation correcte de l'instruction Local.


    27/03/2005:
    - Gestion complète des variables locales, Procédures et de Gosub.


    29/03/2005:
    - Correction d'un bug avec la gestion des - comme négation (-).


    29/04/2005:
    - Ajout d'un token effacant un item de la pile de boucles For.


    01/05/2005:
    - Instruction Run non suivie du numéro de ligne.


    05/05/2005:
    - Correction bug avec variables locales.
    - Interdiction d'utiliser un Goto ou un Label hors d'une procédure.


    07/05/2005:
    - Ajout de l'abbréviation @ remplaçant Gosub.
    - Possibilité d'écrire une variable, un label ou une procédure contenant des poins genre:
        Procedure Graphic.Show(...) ou encore Game_IA.Show_Monster.


    Bugs connus:
  • Transtypage incorrect sous la forme 52+63.2 Erreur de calcul. (Corrigé)
  • Mémoire insuffisante avec le code: (Corrigé)
    Cls
    Until TRUE
    A=A+1

  • Commentaire sur un token ne demandant aucun argument: (Corrigé)
    Else !Commentaire

  • Tri incorrect de la pile d'expression dans ExprMake.c (Corrigé)
    Print "Temps d'execution"'(Timer-T)/200

    La division n'est pas effectuée, l'interpréteur croit que la dernière parenthèse fermée concerne la fonction Print se qui est totalement faux.
  • Numéro de ligne incorrect dans la phase d'éxecution. (Corrigé)
  • Aucun affichage avec: (Corrigé)
    Plot x*239,(1-y)*127.

    Erreur de la pile d'expressions?
  • Bug affectation après Print par exemple, à transformer en conditon! (Corrigé)
  • Bug avec les signes de comparaison de la TI, soit par exemple (Corrigé)
    Until I>=10000

  • Bug avec le signe de commentaire !. (Corrigé)
  • Bug avec Print (Timer-T%), le calcul n'est pas effectué! (Corrigé)
  • Bug avec Print Fre'I%, I% n'est pas affiché!

    Historique de l'interpréteur (GFA-TEM)
    GFA-TEM (Tokens Execution Manager).


    Data de création: 23/10/04


    xx/xx/2004:
    - Lecture du fichier a exécuter.
    - Intialisation des variables et des zones mémoires.
    - Initialisation des interruptions.
    - Gestion des nombres (flottants, entiers).
    - Gestion des variables numériques (flottants, entiers, booléens).
    - Gestion du transtypage dynamique.
    - Gestion de l'affectation.
    - Gestion des opérateurs méthématiques:
      Addition = +
      Soustraction = -
      Multiplication = *
      Division = /
      Division entière = ou Div
      Puissance = ^
      Modulo = Mod
    - Gestion des opérateurs de comparaisons:
      Egal = =
      Supérieur = >
      Inférieur = <
      Supérieur ou égal = >= ou signe TI
      Inférieur ou égal = <= ou signe TI
      Différent = <> ou signe TI
    - Gestion des opérateurs logiques:
      NON logique = Not
      ET logique = And
      OU Inclusif = Or
      OU Exclusif = Xor
      Implication = Imp
      Equivalence = Eqv
    - Gestion de la négation numérique soit (-).
    - Gestion des structures:
      Goto Label
      Do ... Loop
      While ... Wend
      Repeat ... Until
      If ... [Then] ... ElseIf ... [Then] ... Else ... Endif
      For ... [To][DownTo] ... Next
      For ... To ... Step ... Next
    - Gestion de Exit [If] pour quitter une structure précédente sauf structure If et Goto Label.
    - Gestion des opérateurs arithmétiques optimisés:
      Add, Sub, Mul, Div, Inc et Dec.
    - Gestion complète de Print et Print At avec la possibilité d'utiliser , ou ; ou ' pour séparer des données. (les chaînes de caractères ne sont pas gérées).
    - Supporte les tableaux de flottants, d'entiers et de booléeans.


    22/11/2004:
    - Amélioration du code des fonctions Dim et TokensExec_AddVarTable.
    - Correction d'un bug avec la fonction TokensExec_AddVarTable recherche de pointeur.


    23/11/2004:
    - Ajout de la fonction _kb_getkey pour gérer les touches du clavier avec combinaisons.
    - Ajout de la fonction Getkey.


    24/11/2004:
    - Supporte la lecture du token String.
    - Affichage d'une chaîne de caractères pour Print.


    25/11/2004:
    - Programmation de la fonction Atn.


    26/11/2004:
    - Correction d'un bug avec SCR_RECT.
    - Fonction Line clippée.
    - Programmation des fonctions Box, Even, Odd, Sgn, Tan, Log, Log10, Sqr, Exp


    01/12/2004:
    - Gestion des variables de type chaînes de caractères. (Affectation directe à optimiser!!!)


    02/12/2004:
    - Optimisation de l'affectation. Evite de changer la taille d'une chaîne lorsque celle-ci a une taille suffisante pour accueillir la nouvelle chaîne de caractères. 7x plus rapide qu'auparavant!
    - Gestion des tableaux de chaînes de caractères.
    - Routine d'effacement allocations de chaînes de caractères et de tableaux de chaînes de caractères.
    - Correction d'un bug avec TokensExec_ConvertType. Mauvaise comparaison de typage avec par exemple: A$=52.3.


    03/12/2004:
    - Concanétation de chaînes de caractères. Opérateur +.
    - Optimisation de certaines instructions du programme.
    - Opérateurs de comparaisons avec les chaînes de caractères.


    04/12/2004:
    - Correction d'un bug avec TokensExec_CopyString.


    05/12/2004:
    - Supporte les constantes du type (CALCULATOR, HW_VERSION, LCD_xxx, AMSx_xx, RR_xxx, KEY_xxx...).
    - Optimisation du code gain de 256 octets!


    06/12/2004:
    - Optimisation du code gain de 100 octets!


    08/12/2004:
    - Optimisation du code gain de 112 octets!


    11/12/2004:
    - Programmation des fonctions Fix et Frac.


    12/12/2004:
    - Amélioration de la fonction Frac. (Gestion avec seulement des flottants).
    - Programmation des fonctions Round, Asc, Bin$, Hex$, Oct$, Chr$, Len.


    18/01/2005:
    - Correction d'un bug avec memcmp dans la fonction openFile. GFA-TEM peut être executé sur Pedrom!


    20/01/2005:
    - Initilialisation de l'attribut graphique soit SetCurAttr pour Plot (DrawClipPix).


    05/02/2005:
    - Rehiérarchisation d'un fichier GTK, modification de la fonction TEM_GetArg_OpenFile.


    06/02/2005:
    - Programmation de la fonction Read, Restore.


    07/02/2005:
    - Supporte des données sur 16 Bits.
    - Programmation des fonctions Mki$, Mkl$, Mkf$, Cvi, Cvl, Cvf, Ngetchx, Pause.
    - Début de programmation de la fonction Sprite.


    09/02/2005:
    - Programmation complète de la fonction Sprite supportant les sprites masqués.
    - Début de programmation de la partie non masquée de la fonction Sprite.


    10/02/2005:
    - Programmation totale de la fonction Sprite supportant aussi les sprites non masqué.
    - Programmaition complète de la fonction Get.
    - Meilleur gestion des chaînes de caractères avec la fonction TokensExec_NewString.
    - Début de codage de la fonction Put.


    11/02/2005:
    - Bloqué sur la fonction Put.
    - Programmation des fonctions, Poke, Dpoke, Lpoke, Peek, Dpeek, Lpeek.


    14/02/2005:
    - Programmation des fonctions Left$ et Right$.
    - Recodage de la fonction TokensExec_CopyString.


    15/02/2005:
    - Programmation de la fonction Mid$.
    - Amélioration de la routine TokensExec_CopyString.
    - Correction d'un bug avec %a4 perdu.
    - Optimisation de certaines routines.
    - Programmation de la fonction Fre.


    16/02/2005:
    - Correction d'un bug lors de l'effacement des tableaux de chaînes de caractères.
    - Correction d'un bug avec la fonction Sprite (hauteur=0 et inversement des modes masqués!).


    17/02/2005:
    - Programmation de la fonction Put clippée en mode OR! (A finir).
    - Fonction TokensExec_DeleteSimpleString, efface une chaîne de caractère.
    - Programmation de la fonction Clr/Erase.


    18/02/2005:
    - Début de programmation de la fonction Input.
    - Programmation de la fonction Func_InputStr.
    - Sauvegarde des registres avec la fonction _kb_getkey.


    19/02/2005:
    - Amélioration de la fonction Func_Getkey.
    - Programmation de la fonction Dim? (Ldim), Setfont et Getfont.
    - 3 nouvelles constantes: F_4X6, F_6X8, F_8X10.


    20/02/2005:
    - Correction de bugs avec la fonction Input et la fonction Func_InputStr.
    - Programmation des fonctions Func_memcpy, Func_memcpy_slow, Func_StrToBas, Func_StrToFloat.
    - Fin de programmation de la fonction Input.
    - Programmation de la fonction Fix/Int/Trunc.


    21/02/2005:
    - Correction d'un bug avec espace mémoire pour les booléans.
    - Programmation de la fonction Point.
    - Test avec un jeu de slalom.


    03/03/2005:
    - Possibilité de quitter un programme avec la touche [ON].
    - Piles et sauvegarde de l'écran dans la pile.
    - Optimisation de routines. (Merci à Nyall :)).


    05/03/2005:
    - KeyFlush après Input.


    23/03/2005:
    - Post affectation de EMPTY STRING, adresse par défaut NULL pour les chaînes de caractères.


    25/03/2005:
    - Programmation des variables locales soit ExecToken_InitLocalVar et ExecToken_LocalVar.


    27/03/2005:
    - Réorganisation de la table des fonctions.
    - Correction d'un bug avec les chaînes de caractères.
    - Correction d'un bug avec Data.


    28/03/2005:
    - Programmation complète des procédures avec variables locales.


    09/04/2005:
    - Interception des exceptions.


    10/04/2005 au 19/04/2005:
    - Optimisations en vitesse et en taille du code. Gain d'environ 2.5 Ko et de 3 ms sur chaque instruction en moyenne.


    29/04/2005:
    - Correction d'un bug avec Exit [If] et les boucles For. Ajout du token ExecToken_For_clear.


    30/04/2005:
    - Meilleur gestion de la structure Procedure, Gosub, Return.
    - Bug de passage de paramètres et de variables locales corrigé.
    - Optimisation du code en taille et en vitesse avec l'instruction adda.w.


    01/05/2005:
    - Réécriture complète de la fonction Get, supporte un bytewidth=1 et sauvegarde une zone précise en fonction de la largeur et non du bytewidth.
    - Réécriture de la fonction Point optimisée en vitesse.
    - Réécriture de la fonction Plot optimisée en vitesse.
    - Développement des fonctions Run, Upper$, Lower$, Space$.


    04/05/2005:
    - Etalonnage des fréquences du clavier, REPEAT_KEYDELAY et BETWEEN_KEYDELAY.
    - Correction d'un bug dans la fonction Cos. Mauvaise restauration de SP.


    05/05/2005:
    - Optimisation en vitesse de 0.02 seconde sur toutes les instructions. (Instruction End ajoutée en fin de programme, évite test de débordement du fichier de tokens d'exécution).
    - Ajout de la fonction Str$.


    07/05/2005:
    - Programmation des fonctions String$, Val, Arrayfill.


    21/06/2005:
    - Programmation des fonctions Swap, Varptr, Arrptr, Dfree.


    22/06/2005:
    - Programmation de la fonction Text.


    24/06/2005:
    - Passage de la table des erreurs d'adresses en offsets, gain de 412 octets.
    - Ajout de la librairie GFA-Basic FontLib au projet.
    - Correction d'un bug dans GFA-Basic FontLib avec FONT_OpenFile.
    - Effacement de File.asm du projet, inutile la gestion est effectuée par la librairie GFA-Basic FontLib.


    26/06/2005:
    - La fonction Sprite supporte le mode AND.


    24/07/2005:
    - Correction d'un bug de masque avec la fonction Sprite.


    05/08/2005:
    - Correction d'un bug avec la fonction Return.


    12/08/2005:
    - Correction d'un bug avec la fonction 'TEM_Unallocate_Local_Vars'.


    20/08/2005:
    - Optimisations des tables, gain de 1396 octets.


    20/11/2005:
    - Correction d'un bug provoquant un No Enougth Memory avec les chaînes de caractères.


    Bugs connus:
  • Ligne de ce type %mode sans affectation ni token de commande.
  • Vérifier pile For après passage à un Goto!

  • Plantage lors d'une erreur dans Gosub!

  • Problème variables locales. (Voir exemple cursor avec Local Key!)


    Historique des instructions/fonctions développées.
    Historique des instructions de commandes et de fonctions programmées.


    Une instruction de commandes est la première instruction d'une ligne.
    Une instruction de fonctions est une instruction qui se trouve n'importe où sur une ligne et qui retourne une valeur.

    Syntaxe:
    [] = Syntaxe faculltative.
    ... = Possibilité de répéter autant de fois que l'on veut la syntaxe précédente.
    | = Détermine entre crochets les syntaxes que l'on peut utiliser mais que l'on ne peut pas combiner. Sauf exception avec l'apostrophe soit par exemple Print 25''52.

    Instructions de commandes:

    Print [At(x,y)][,|;|'][x] = Affichage d'une donnée.
    Cls = Efface l'écran et positionne à 0,0 le curseur de texte pour Print.
    Add var,x = Ajoute x à var soit var=var+x.
    Sub var,x = Soustrait x à var soit var=var-x.
    Mul var,x = Multiplie x à var soit var=var*x
    Div var,x = Divise var par x soit var=var/x.
    Inc x = Incrémente x de 1 soit x=x+1.
    Dec x = Décremente x de 1 soit x=x-1.
    Plot x,y = Affiche un point clippé aux coordonnées x et y.
    Line x0,y0,x1,y1 = Dessine une ligne clippée de coordonnées x0,y0 et x1,y1.
    Dim tab(x[,x...])[,tab(x[,x...])...] = Dimensionne et déclare un tableau.
    Box x0,y0,x1,y1 = Dessine un rectangle vide clippé de coordonnées x0,y0 à x1,y1.
    Data [string],[flottant],[entier] = Stocke constantes dans le programme.
    Read var[,var...] = Stocke constante(s) créée(s) avec Data dans var(s).
    Restore [label] = Change le pointeur de données (DATA) utilisé par Read.
    Pause x = Interrompt l'execution du programme pendant un certain temps. (x/50 secondes).
    Sprite data$,x,y[,mode][,mem] = Affiche un sprite clippé défini dans data$ à la position (x,y).
    Get x0,y0,x1,y1,data$[,mem] = Affecte une zone rectangulaire de mem (mémoire vidéo) transformée en une suite de bits à la chaîne de caractères data$.
    Clr/Erase var[,tab(x)][,tab()] = Efface la donnée d'une variable ou d'un index d'un tableau ou efface complétement un tableau (Utile pour libérer de la mémoire).
    Setfont x = Selectionne la fonte x du TIOS.
    Input [At(x,y))[,|;|'][data] = Demande de donnée(s).
    Run = Lance l'exécution du programme. (Effectue un saut tout au début du programme).
    Arrayfill tab(),n = Remplie un tableau avec la valeur n.
    Poke(adr,x) = Ecrit x sur un octet à l'adresse adr.
    Dpoke(adr,x) = Ecrit x sur deux octets à l'adresse adr. (Adresse impaire autorisée).
    Lpoke(adr,x) = Ecrit x sur quatres octets à l'adresse adr. (Adresse impaire autorisée).
    Swap var1[()],var2[()] = Echange les contenus de 'var1' et de 'var2'.
    Text x,y,[l,]string = Affiche un texte, en mode graphique, à la position (x,y) de l'écran.



    Instructions de fonctions:

    Abs(x) = Valeur absolue de x.
    Cos(x) = Cosinus de x.
    Sin(x) = Sinus de x.
    Rnd[()] = Retourne un nombre aléatoire compris entre 0 et 1.
    Random(x) = Retourne un nombre aléatoire compris entre 0 et x-1.
    Timer[()] = Retourne le temps écoulé depuis l'exécution du programme. Ce temps est donné en 1/200 de secondes.
    Getkey[()] = Retourne la combinaison de touche pressées.
    Atn(x) = Retourne l'arctangente de x.
    Even(x) = Détermine la parité de x (paire).
    Odd(x) = Détermine la parité de x (impaire).
    Sgn(x) = Détermine le signe de x (0, si x=0; +1, si x>0; -1, si x<0).
    Tan(x) = Calcule la tangente de x.
    Log(x) = Calcule le logarithme népérien de x.
    Log10(x) = Calcule le logarithme décimal (base 10) de x. Log10(x)=Log(x)/Log(10).
    Sqr(x) = Calcule la racine carrée de x. Sqr(x)=x^(1/2).
    Exp(x) = Calcule l'exponentielle de x (e^x e=2.7182818285).
    Fix/Int/Trunc(x) = Récupère la partie entière de x.
    Frac(x) = Récupère la partie décimale de x. Frac(52.36)=0.36.
    Round(x) = Arrondie le nombre x. (Risque d'erreur avec des nombres supérieurs à 2 milliars en valeur absolue).
    Asc(x$) = Retourne le code ASCII du premier caractère de la chaîne x$.
    Bin$(x) = Convertit la valeur x en une chaîne de caractères représentant l'écriture binaire de x.
    Hex$(x) = Convertit la valeur x en une chaîne de caractères représentant l'écriture hexadécimal de x.
    Oct$(x) = Convertit la valeur x en une chaîne de caractères représentant l'écriture octale de x.
    Chr$(x) = Retourne le caractère dont le code ASCII est x.
    Len(x$) = Calcule la longueur de la chaîne de caractères x$.
    Mki$(x) = Convertit une valeur numérique (entier sur 16 Bits) en une chaîne de caractères.
    Mkl$(x) = Convertit une valeur numérique (entier sur 32 Bits) en une chaîne de caractères.
    Mkf$(x) = Convertit une valeur numérique (flottant) en une chaîne de caractères.
    Cvi(x$) = Convertit une chaîne de caractères en une valeur numérique (entier 16 Bits).
    Cvl(x$) = Convertit une chaîne de caractères en une valeur numérique (entier 32 Bits).
    Cvf(x$) = Convertit une chaîne de caractères en une valeur numérique (flottant).
    Ngetchx[()] = Attend l'appuie d'une touche en renvoie sa valeur.
    Peek(adr) = Lit un octet à l'adresse adr.
    Dpeek(adr) = Lit deux octets à l'adresse adr. (Adresse impaire autorisée).
    Lpeek(adr) = Lit quatres octets à l'adresse adr. (Adresse impaire autorisée).
    Left$(x$[,n]) = Récupère n caractères de x$ en partant de la gauche.
    Right$(x$[,n]) = Récupère n caractères de x$ en partant de la droite.
    Mid$(x$,pos[,size]) = Extrait size caractères de x$ à partir de pos.
    Fre[()] = Force un Garbage Collect de la mémoire et retourne le nombre d'octets libre en RAM.
    Dim?(tab()) = Retourne le nombre d'éléments d'un tableau.
    Getfont[()] = Renvoie la fonte courante.
    Point(x,y) = Retourne l'état du pixel se trouvant aux coordonnées x,y.
    Upper$(x$) = Retourne la chaîne de caractères x$ en majuscules.
    Lower$(x$) = Retourne la chaîne de caractères x$ en minuscules.
    Space$(x) = Retourne une chaîne de caractères avec x caractères blancs (caractère espace (32)).
    Str$(x) = Convertie la valeur numérique x en une chaîne de caractères.
    String$(n,x|x$) = Retourne une chaîne de caractères constituée de n fois le caractère x ou n fois la chaîne de caractères x$.
    Val(x$) = Convertie une chaîne de caractères en une valeur numérique.
    Varptr(var) = Détermine l'adresse (de début) d'une variable.
    Arrptr(var[()]) = Détermine l'adresse du descripteur d'une chaîne de caractères ou d'un tableau.
    Dfree(n) = Indique la place mémoire disponible sur une unitée (0 = RAM, 1 = ROM).


    Historique de GFA-Basic Editor

    13/07/05
    Le nouveau moteur d'édition est presque achevé, il reste un bug à coriger dans le scroll horizontal (léger bug graphique déjà localisé) et un dans le scroll vertical (pas encore recherché).


    10/07/05
    -Refonte d'une bonne partie de la saisie de texte, gestion beaucoup plus structurée et surtout plus rapide.


    08/07/05
    -Création de l'interruption pour le curseur clignotant dans l'éditeur (Init_Int_5, Enable_Cursor, Dummy_Handler, Cursor_Interrupt, Disable_Cursor, Restore_Int_5).
    Jusqu'à maintenant, il était totalement géré en mémoire sans être affiché.


    07/07/05
    -Gain de plus de 400 octets grâce à l'emploi d'une section BSS pour les buffers fixes/temporaires des niveaux de gris!!
    Merci Kevin pour ta hotline sur irc. =)


    06/07/05
    -Correction d'un bug dans Move_Cursor_Right.


    05/07/05
    -Correction d'un bug dans Init_Text_Vars (d0 au lieu de d1).
    -Correction d'une corruption de la mémoire (crash bug).
    -Pas mal de corrections de bug en ce moment (corrections mineures, souvent des bugs graphiques plus qu'autre chose). Ceci est souvent dû à une mauvaise organisation du code à certains endroits, donc j'en profite pour clarifier un grand coup ces parties là.


    27/06/05
    Pas beaucoup de code d'écrit ce soir, mais débogage intense avec TiEmu + Insight (merci mille fois Kevin et Romain), pour vérifier l'initialisation et le calcul correct de plus de vingt variables nécessaires pour le partage d'écran.


    26/06/05
    -Fin du calcul automatique de toutes les variables concernant les textes (travail plus ardu qu'il n'y parait, car le moteur d'édition et d'affichage doit être capable de gérer un texte où qu'il soit à l'écran, donc uniquement en fonction de variables précalculées).


    24/06/05
    -Réécriture de la partie graphique du déplacement du séparateur, gain de 200 octets. Pour info, ce séparateur peut-être ou horizontal ou vertical, et de n'importe quelle largeur/hauteur.
    -Ajout d'une feature assez intéressante, pour une poignée d'octets vu que la structure de données est en place: on pourra passer d'un texte plein écran à un autre texte plein écran avec un simle raccourci clavier, sans être obligé de fermer l'un des deux.
    -Possibilité (qui coule de source avec tout le reste) d'échanger de place les deux textes.
    -Correction d'un bug en cas d'échec d'allocation du premier texte (pas de crash, mais handle non désalloué).


    23/06/05
    -Débogage du changement de texte courant
    -Correction du problème avec ExtGraph, il s'agissait d'une mauvaise interprétation d'un nom de fonction.
    -Fin de la programmation du partage d'écran, maintenant ça marche au poil


    22/06/05
    -Programmation du réglage de partage horizontal et vertical de l'écran (en attente d'une explication de Lionel Debroux pour un problème avec une fonction d'ExtGraph causant un léger bug graphique).
    -Correction d'un petit bug graphique dans l'affichage des menus.


    20/06/05
    Un bon moment que je n'ai pas mis cette rubrique à jour, le développement a été fortement ralenti à cause d'une migration vers Linux d'une part, puis à cause de préoccupations familliales d'autres part.

    Les avancements sont les suivants:
    -Utilisation de grib (merci à Sasume) pour les niveaux de gris, ce qui facilite la gestion de l'affichage, et fait gagner du coup 800 octets au programe.
    -On peut désormais taper du texte, comme dans tout bon éditeur qui se respecte.
    -Réécriture d'une partie du code pour avoir la possibilité d'un double affichage à l'écran. J'avais oublié que j'avais planifié ça dans les features, donc c'est un peu la galère à rattraper, mais ça ira.


    01/04/05
    -Les menus sont terminés, renvoient ce qu'il faut où il faut en mémoire, j'attaque la saisie de texte demain. On va encore attendre un peu pour les screens :D


    30/04/05
    -Les menus ont été refaits, plus de données sont précalculées au démarrage et au changement de fonte, donc c'est plus rapide à afficher et à gérer. En plus, ça fait gagner de la place.


    26/04/05
    -Fin des menus, ça marche au poil en étant compatible 89/92+/v200
    Les menus sont conçus de manière à permettre de rajouter, moifier ou supprimer des entrées, ou encore modifier la fonte sans qu'il y ait à retoucher la moindre ligne de code.
    -Création du texte principal, avec toutes les variables et autres qui vont bien.


    16/04/05
    Déut de l'histoire, geogeo accepte ma proposition d'écrire un éditeur pour GFA-Basic en assembleur nostub.

        
    Rubriques
    Parser, scanner...
    Interpréteur (GFA-TEM)
    Fonctions/instructions
    GFA-Basic Editor

     


    Copyright © 2004-2005 for Ti-Gen - Geoffrey Anneheim - Tous droits réservés.[Design by : Speedy-Diz]