Evolution du projet. Et TODO:
-----------------------------


I- Descriptif rapide des fonctionnalites de GFA-Basic.
-------------------------------------------------------

12/12/04:
*********

- Gestion des nombres (flottants, entiers).
- Gestion des variables numriques (flottants, entiers, boolens).
- Gestion du transtypage dynamique.
- Gestion de l'affectation.
- Gestion des oprateurs mthmatiques:
  Additon = +
  Soustraction = -
  Multiplication = *
  Division = /
  Division entire = \ ou Div
  Puissance = ^
  Modulo = Mod
- Gestion des oprateurs de comparaisons:
  Egal = =
  Suprieur = >
  Infrieur = <
  Suprieur ou gal = >= ou signe TI
  Infrieur ou gal = <= ou signe TI
  Diffrent = <> ou signe TI
- Gestion des oprateurs logiques:
  NON logique = Not
  ET logique = And
  OU Inclusif = Or
  OU Exclusif = Xor
  Implication = Imp
  Equivalence = Eqv
- Gestion de la ngation numrique 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 prcdente sauf structure If et Goto Label.
- Gestion des oprateurs arithmtiques optimiss:
  Add, Sub, Mul, Div, Inc et Dec.
- Gestion des constantes:
  TRUE
  FALSE
  PI
- Gestion du signe puissance de dix et Pi de la TI.
- Gestion des commentaires en dbut de ligne avec ' et en milieu de ligne avec !
- Gestion des nombres en binaire, hexadcimal ou en octal avec &X, &H et &O rciproquement.
- Possibilit de forcer un entier  tre un flottant en ajoutant un point  la fin de ce nombre
  comme par exemple 52. ou 52.0
- Gestion complte de Print et Print At avec la possibilit d'utiliser , ou ; ou ' pour sparer
  des donnes. (les chanes de caractres ne sont pas gres).
- Autoindentation pour le dtokeniseur.
- Possibilit d'utiliser - comme ngation (-) ainsi A=A*-3 est possible!
- Possibilit de taper Else If  la place de Elseif.
- Apostrophes cte  cte autorises Genre Print 25''52.
- Supporte les tableaux de flottants, d'entiers et de booleans.
- Lecture d'une chane de caractres et affichage avec Print.
- Gestion des variables de type chanes de caractres.
- Gestion des tableaux de chanes de caractres.
- Concantation de chanes de caractres. Oprateur +, fonctionne avec les variables et les 
  tableaux.
- Oprateurs de comparaisons avec les chanes de caractres. (<, >, <=, >=, <>, =).
- Supporte les signes mathmatiques de la TI soit PI, exponentielle de 1 (e), fonction 
  exponentielle 'e^(' et la racine carre.
- Supporte les constantes du type (CALCULATOR, HW_VERSION, LCD_xxx, AMSx_xx, RR_xxx, 
  KEY_xxx...). 


24/02/04:
*********

- Supporte la lecture et le stockage de donnes stockes avec la commande DATA.
- Optimisation de l'espace mmoire de stockage DATA (32 Bits ou 16 Bits 
  suivant l'entier).
- Var aprs Next est facultatif ainsi une boucle For peut tout simplement se terminer 
  par Next.
- Meilleure gestion des commentaires ! en milieu de lignes (autorisation d'espaces).
- Autorisation d'utiliser l'apostrophe ' tout au dbut de la commande Print, par exemple 
  Print ''' est valide.
- Implantation de fonctions graphique (Sprite, Get, Put, Point...).
- Possibilit d'effacer des variables et des tableaux avec Clr/Erase.
- Meilleur gestion des chanes de caractres.
- Implantation de l'instruction Input avec conversion automatique de base. Si vous tapez 
  &H52F par exemple, la conversion sera faite automatiquement.
- Possibilit de changer la fonte et de la renvoyer avec Setfont et Getfont.
- Ajout des constantes F_4X6, F_6X8, F_8X10.


27/07/05:
*********

- Gestion des Gotos incorrectes.
- Correction d'ung bug de syntaxe avec "".
- Intgration de la gestion des procdures.
- Gestion des variables locales.
- Correction d'un bug avec la ngation -.
- L'abbrviation @ peu tre utilise  la place de Gosub.
- Possibilit d'crire une variable, un label ou une procdure contenant des poins genre:
  Procedure Graphic.Show(...) ou encore Game_IA.Show_Monster.
- Implantation des fonctions (Point, Run, Upper$, Lower$, Space$, Str$, String$, Val, Arrayfill
  Swap, Varptr, Arrptr, Dfree, Text).
- Possibilit de quitter un programme avec la touche [ON].
- Meilleur gestion des chanes de caractres.
- Corrections de bugs divers.
- Dveloppement d'un programme d'interception des erreurs.
- Etalonnage des frquences du clavier, REPEAT_KEYDELAY et BETWEEN_KEYDELAY.
- Correction d'un bug dans la fonction Cos. Mauvaise restauration de SP.
- Ajout de la librairie GFA_Font.
- La fonction Sprite supporte le mode AND.
- Correction d'un bug de masque avec la fonction Sprite.
- Optimisation du code en taille et en vitesse d'excution.
- Possibilit de faire de l'itration avec des sous-programmes.




II- Liste des structures supportes.
------------------------------------

Label:                                    = Dfinition d'une tiquette (Valable pour Goto 
                                            et Restore).
Goto Label                                = Saute  la position de Label.

Restore Label                             = Change le pointeur de donnes DATA pour READ.

If [(]condition[)] [Then]
Elseif ou Else If [(]condition[)] [Then]  = Branchements conditions.
Else
Endif

While [(]condition[)]                     = Boucle 'Faire tant que condition valide'.
Wend
	
Repeat                                    = Boucle 'Faire jusqu' que condition valide'.
Until [(]condition[)]

Do                                        = Boucle infinie.
Loop

For Var=Initialisation [TO][DowntO] [(]condition[)] [step pas]  = Boucle For
Next [var]

Exit [If[(]condition[)]]                 = Quitte une structure Do...Loop ou  While...Wend 
                                           ou Repeat...Until ou For...To...Next avec une 
                                           condition faculative.

Continue                                 = Reboucle au dbut d'une structure Do...Loop 
                                           ou While...Wend 
ou Repeat...Until ou For...To..Next.

Data donne...                           = Stocke une constante.
Read var...                              = Lit une donnes stocke avec DATA.
Restore [Label]                          = Change le pointeur de donnes DATA.

Procedure name[(param1,param2[param3...])] = Procdure ou sous-programme.
Return                                   = Fin d'une procdure.

Gosub name ou @name                      = Appelle la procdure 'name'.

Local var1,var2,[var3...]                = Crer des variables locales.

Run                                      = relance l'excution du programme  partir de son dbut.
End/Stop/Edit/System                     = Met fin  l'execution du programme.

Rem ou '                                 = Commentaire de dbut de ligne.
!                                        = Commentaire en milieu de ligne.




III- Liste des instructions.
----------------------------

Stockage d'un sprite ou d'une image.

Un sprite ne peut tre affich qu'avec l'instruction de commande Sprite. Un sprite est de 
la forme 16xY.

Mki$ = Coordonnes origine X. (Fonction pour API curseur, non utilise).
Mki$ = Coordonnes origine Y. (Fonction pour API curseur, non utilise).
Mki$(&Hxxyy) = 
       xx = Masque, 0=non masqu, 1=masqu non entrelac, 2=masqu entrelac.
       yy = Taille du sprite en hauteur, gnralement 16 soit &H10.
Mki$... = Donnes du sprite.

Exemple, pour afficher un sprite non masqu de taille 16x16.

Sprite$=Mki$(0)+Mki$(0)+Mki$(&H0010)
For I%=1 To 16
  Read Sprite_Data%
  Sprite$=Sprite$+Mki$(Sprite_Data%)
Next I%
Data 65535,65535,65535,65535
Data 65535,65535,65535,65535
Data 65535,65535,65535,65535
Data 65535,65535,65535,65535



Il est possible d'utiliser des images, pour cela on peut enregistrer une zone de l'cran 
avec la fonction Get et l'afficher avec Put.

Organisation des donnes avec Put.
Mki$ = Taille en largeur de l'image en pixels.
Mki$ = Taille en hauteur de l'image en pixels.
Mki$... = Donnes de l'image.

Exemple pour une image de 50x25 pixels.
Picture$=Mki$(50)+Mki$(25)
...



IV- Liste des instructions.
---------------------------

Une instruction de commandes est la premire 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 rpter autant de fois que l'on veut la syntaxe prcdente.
| = Dtermine 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.



Liste des instructions de commandes:
====================================

Print [At(x,y)][,|;|'][x] = Affichage d'une donne.
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 = Incrmente x de 1 soit x=x+1.
Dec x = Dcremente x de 1 soit x=x-1.
Plot x,y = Affiche un point clipp aux coordonnes x et y.
Line x0,y0,x1,y1 = Dessine une ligne clippe de coordonnes x0,y0 et x1,y1.
Dim tab(x[,x...])[,tab(x[,x...])...] = Dimensionne et dclare un tableau.
Box x0,y0,x1,y1 = Dessine un rectangle vide clipp de coordonnes x0,y0  x1,y1.
Data [string],[flottant],[entier] = Stocke constantes dans le programme.
Read var[,var...] = Stocke constante(s) cre(s) avec Data dans var(s).
Restore [label] = Change le pointeur de donnes (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 dfini dans data$  la position (x,y).
Get x0,y0,x1,y1,data$[,mem] = Affecte une zone rectangulaire de mem (mmoire vido) transforme en une suite de bits  la chane de caractres data$.
Clr/Erase var[,tab(x)][,tab()] = Efface la donne d'une variable ou d'un index d'un tableau ou efface compltement un tableau (Utile pour librer de la mmoire).
Setfont x = Selectionne la fonte x du TIOS.
Input [At(x,y))[,|;|'][data] = Demande de donne(s).
Run = Lance l'excution du programme. (Effectue un saut tout au dbut 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 autorise).
Lpoke(adr,x) = Ecrit x sur quatres octets  l'adresse adr. (Adresse impaire autorise).
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.



Liste des instructions de fonctions:
====================================

Abs(x) = Valeur absolue de x.
Cos(x) = Cosinus de x.
Sin(x) = Sinus de x.
Rnd[()] = Retourne un nombre alatoire compris entre 0 et 1.
Random(x) = Retourne un nombre alatoire compris entre 0 et x-1.
Timer[()] = Retourne le temps coul depuis l'excution du programme. Ce temps est donn en 1/200 de secondes.
Getkey[()] = Retourne la combinaison de touche presses.
Atn(x) = Retourne l'arctangente de x.
Even(x) = Dtermine la parit de x (paire).
Odd(x) = Dtermine la parit de x (impaire).
Sgn(x) = Dtermine 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 nprien de x.
Log10(x) = Calcule le logarithme dcimal (base 10) de x. Log10(x)=Log(x)/Log(10).
Sqr(x) = Calcule la racine carre de x. Sqr(x)=x^(1/2).
Exp(x) = Calcule l'exponentielle de x (e^x e=2.7182818285).
Fix/Int/Trunc(x) = Rcupre la partie entire de x.
Frac(x) = Rcupre la partie dcimale de x. Frac(52.36)=0.36.
Round(x) = Arrondie le nombre x. (Risque d'erreur avec des nombres suprieurs  2 milliars en valeur absolue).
Asc(x$) = Retourne le code ASCII du premier caractre de la chane x$.
Bin$(x) = Convertit la valeur x en une chane de caractres reprsentant l'criture binaire de x.
Hex$(x) = Convertit la valeur x en une chane de caractres reprsentant l'criture hexadcimal de x.
Oct$(x) = Convertit la valeur x en une chane de caractres reprsentant l'criture octale de x.
Chr$(x) = Retourne le caractre dont le code ASCII est x.
Len(x$) = Calcule la longueur de la chane de caractres x$. 
Mki$(x) = Convertit une valeur numrique (entier sur 16 Bits) en une chane de caractres.
Mkl$(x) = Convertit une valeur numrique (entier sur 32 Bits) en une chane de caractres.
Mkf$(x) = Convertit une valeur numrique (flottant) en une chane de caractres.
Cvi(x$) = Convertit une chane de caractres en une valeur numrique (entier 16 Bits).
Cvl(x$) = Convertit une chane de caractres en une valeur numrique (entier 32 Bits).
Cvf(x$) = Convertit une chane de caractres en une valeur numrique (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 autorise).
Lpeek(adr) = Lit quatres octets  l'adresse adr. (Adresse impaire autorise).
Left$(x$[,n]) = Rcupre n caractres de x$ en partant de la gauche.
Right$(x$[,n]) = Rcupre n caractres de x$ en partant de la droite.
Mid$(x$,pos[,size]) = Extrait size caractres de x$  partir de pos.
Fre[()] = Force un Garbage Collect de la mmoire et retourne le nombre d'octets libre en RAM.
Dim?(tab()) = Retourne le nombre d'lments d'un tableau.
Getfont[()] = Renvoie la fonte courante.
Point(x,y) = Retourne l'tat du pixel se trouvant aux coordonnes x,y.
Upper$(x$) = Retourne la chane de caractres x$ en majuscules.
Lower$(x$) = Retourne la chane de caractres x$ en minuscules.
Space$(x) = Retourne une chane de caractres avec x caractres blancs (caractre espace (32)).
Str$(x) = Convertie la valeur numrique x en une chane de caractres.
String$(n,x|x$) = Retourne une chane de caractres constitue de n fois le caractre x ou n fois la chane de caractres x$.
Val(x$) = Convertie une chane de caractres en une valeur numrique.
Varptr(var) = Dtermine l'adresse (de dbut) d'une variable.
Arrptr(var[()]) = Dtermine l'adresse du descripteur d'une chane de caractres ou d'un tableau.
Dfree(n) = Indique la place mmoire disponible sur une unite (0 = RAM, 1 = ROM).



V- liste des constantes:
------------------------

===================
Constantes systme.
===================

TRUE = -1.
FALSE = 0.
PI = Valeur de PI.
e = Exponentielle de 1.


====================
Constantes statiques
====================

Constantes graphiques
*********************
LCD_MEM = &H4C00.
LCD_SIZE =3840.


Constantes exploitables avec l'instruction Ngetchx ou la fonction Getkey.
*************************************************************************
KEY_DOWN = 344.
KEY_UP = 338.
KEY_LEFT = 337.
KEY_RIGHT = 340.
KEY_F1 = 268.
KEY_F2 = 269.
KEY_F3 = 270.
KEY_F4 = 271.
KEY_F5 = 272.
KEY_F6 = 273.
KEY_F7 = 274.
KEY_F8 = 275.
KEY_ESC = 264.
KEY_APPS = 265.
KEY_ENTER = 13.


Constantes de fontes.
*********************

F_4X6 = 0.
F_6X8 = 1.
F_8X10 = 2.


==============================================================
Constantes dynamiques (Dpendent du modle de calculatrice...)
==============================================================
CALCULATOR = 0 = TI89/TI89T, 1 = TI92+, 2 = V200.
HW_VERSION = Version Hardware.
LCD_HEIGHT = Coordonnes maximale en hauteur de l'cran. TI89/TI89T = 99, TI92+/V200 = 127.
LCD_WIDTH = Coordonnes maximale en largeur de l'cran. TI89/TI89T = 159, TI92+/V200 = 239.
LCD_LINE_BYTES = Nombre d'octets visibles sur une ligne de l'cran.
ROM_BASE = Adresse de base de la ROM.
TI89 = Retourne TRUE ou FALSE si la TI89 est dtecte.
TI89_CLASSIC = Retourne TRUE ou FALSE si la TI89 Classique est dtecte.
TI89_TITANIUM Retourne TRUE ou FALSE si la TI89 Titanium est dtecte.
TI92PLUS = Retourne TRUE ou FALSE si la TI92+ est dtecte.
V200 = Retourne TRUE ou FALSE si la Voyage 200 est dtecte.
TIOS_ENTRIES = Nombre d'entres dans la table de sauts du TIOS, Utilis pour dtermine la 
version de l'AMS.
  0x2AC = AMS 1.00 (TI-92 Plus only) 
  0x3CC = AMS 1.01 (or 1.00 for TI-89), AMS 1.05 
  0x508 = AMS 2.01 
  0x5B7 = AMS 2.02, AMS 2.03 
  0x5E2 = AMS 2.04 
  0x5EF = AMS 2.05 
  0x607 = AMS 2.06 (internal beta), 2.07, 2.08, 2.09 
  0x608 = AMS 3.00 


Constantes renvoyant l'tat d'une touche (FALSE = Non presse et TRUE = presse).
*********************************************************************************
RR_0
RR_1
RR_2
RR_3
RR_4
RR_5
RR_6
RR_7
RR_8	
RR_9
RR_2ND
RR_A
RR_ALPHA
RR_APPS
RR_B
RR_BACKSPACE
RR_C
RR_CATALOG
RR_CLEAR
RR_COMMA
RR_COS
RR_D
RR_DIAMOND
RR_DIVIDE
RR_DOT
RR_DOWN
RR_E
RR_EE
RR_ENTER1
RR_ENTER2
RR_ENTER
RR_EQUALS
RR_ESC
RR_F1
RR_F2
RR_F3
RR_F4
RR_F5
RR_F6
RR_F7
RR_F8
RR_F
RR_G
R_H
RR_HAND
RR_HOME
RR_I
RR_J
RR_K
RR_L
RR_LEFT
RR_LN
RR_M
RR_MINUS
RR_MODE
RR_MULTIPLY
RR_N
RR_NEGATE
RR_O
RR_P
RR_PAREN_CLOSE
RR_PAREN_OPEN
RR_PLUS
RR_POWER
RR_Q
RR_R
RR_RIGHT
RR_S
RR_SHIFT
RR_SIN
RR_SPACE
RR_STORE
RR_T
RR_TAN
RR_THETA
RR_U
RR_UP
RR_V
RR_W
RR_WITH
RR_X
RR_Y
RR_Z


Constantes version AMS.
***********************
AMS_1XX = Retourne TRUE ou FALSE si AMS 1.xx est dtecte.
AMS_2XX = Retourne TRUE ou FALSE si AMS 2.xx est dtecte.
AMS_3XX = Retourne TRUE ou FALSE si AMS 3.xx est dtecte.


VI- Sites WEB:
--------------

Site du projet: http:/www.tigen.org/gfabasic
n'hsitez pas  visiter la partir 'Programmation GFA-Basic' sur le forum de Ti-Gen:
 
Ti-Gen: http://www.tigen.org
Email:  gfabasic@tigen.org
	geoffrey.anneheim@free.fr

Copyright 2004-2005 by Geoffrey ANNEHEIM.