**Le SDK pour fx-9860/Graph85** Topic officiel
Posté le 18/07/2007 15:08
Vu la multitude de topics sur le SDK de la 85, j'ai décidé d'en faire un seul et unique, où l'on posera nos problèmes et explications sur ce même topic, et non pas sur 50, par souci de clareté et de facilité.
Des nouveautés ? Des problèmes ? Des idées ?
Exposez les ici !
Voici une liste de commandes commencées par Muelsaco. N'hésitez pas à rajouter vos commandes dans le topic je les rajouterai pour en faire profiter tout le monde. Merci.
// Locate X,Y,"Texte"
:arrow: locate(x,y); Print("Texte");
// Text X,Y,"Texte"
:arrow: PrintMini(x,y,"Texte",0);
// F-Line x1,y1,x2,y2
:arrow: Bdisp_DrawLineVRAM(x1,y1,x2,y2);
// Tracer une ligne blanche
:arrow: Bdisp_ClearLineVRAM(x1,y1,x2,y2);
// PxlOn x,y & PxlOff x,y
:arrow: Bdisp_SetPoint_VRAM(x,y,<couleur>)
<couleur> : 0 pour le blanc, 1 pour le noir
// Cls
:arrow: Bdisp_AllClr_DDVRAM();
// Actualiser l'écran
:arrow: Bdisp_PutDisp_DD();
Fonction très importante. Elle permet d'afficher une image tracée virtuellement dans la VRAM. Toute image doit d'abord être dessinée dans la VRAM puis affichée à l'écran. Vous ne verrez donc pas votre image s'afficher tant que vous n'aurez pas appelé Bdisp_PutDisp_DD(). À noter que les fonctions GetKey() et Print() l'appellent automatiquement.
While <exp1>
<code>
WhileEnd
:arrow:
while(<exp1>)
{
<code>
}
// StoPict x
:arrow: SaveDisp(x);
x variant de 1 à 3 uniquement.
// RclPict x
:arrow: RestoreDisp(x);
x variant de 1 à 3 uniquement.
// Ouvrir un popup (comme les erreurs syntaxe, etc)
:arrow: PopUpWin(<taille>);
<taille> : de 1 à 8.
Rappels sur les variables globales : Source
* Les variables globales sont à utiliser avec précaution, puisqu'elles créent des liens invisibles entre les fonctions. La modularité d'un programme peut en souffrir et le programmeur risque de perdre la vue d'ensemble.
* Il faut faire attention à ne pas cacher involontairement des variables globales par des variables locales du même nom.
* Le codex de la programmation défensive nous conseille d'écrire nos programmes aussi 'localement' que possible.
L'utilisation de variables globales est jusitifiée, si
* Plusieurs fonctions qui ne s'appellent pas ont besoin des mêmes variables, ou
* Plusieurs fonctions d'un programme ont besoin du même ensemble de variables. Ce serait alors trop encombrant de passer toutes les variables comme paramètres d'une fonction à l'autre.
Citer : Posté le 03/05/2014 10:28 | #
Petit problème, j'ai fais une fonction qui est censé afficher du texte
int x, y;
div_t pos_i;
int i;
clearBox(box_pos,box_size); //fonction qui efface tous les caractères
for (i = 0; i<20*box_size && i<endD; i++)
{
pos_i=div(i,20);
x=pos_i.rem;
y=pos_i.quot+box_pos;
PrintXY(x*6+2, y*10+2, (unsigned char *)ch[startD+i] ,0);
}
ML_display_vram();
}
En me servant des breakpoints et en faisant des tests, j'ai isolé l'erreur: c'est quand j'essaye d'afficher ch[start+i] que ça plante, même si j'essaye avec ch[0] alors qui si je veux afficher la chaîne entière ou modifier une valeur ça marche parfaitement.
Des idées?
Citer : Posté le 03/05/2014 10:47 | #
est ce que Text a été alloué dans la fonction parent ou dans une autre?
Ex: allocation dans la fonction parent
void dispChar(char *ch, const int box_pos, const int box_size, const int maxChar, const int startD, const int endD);
[red]int main(){[/red] //fonction parent
char* text=NULL;
int taille;
text=calloc( taille , sizeof(char) ); //allocation
dispChar(text, box_pos, box_size, maxChar, 0, 0, endD);//on appelle la fonction
free(text);
}
ou alors allocation dans un fonction non parent
void dispChar(char *ch, const int box_pos, const int box_size, const int maxChar, const int startD, const int endD);
char* fonction_d_allocation(int taille){//fonction qui va alloué de la mémoire
char* p=NULL;
p=calloc(taille , sizeof(char) )
return p;
}
[red]int main(){[/red] //fonction parent
char* text=NULL;
int taille;
text=fonction_d_allocation(taille);//on appelle la fonction qui va allouer de la mémoire à text
dispChar(text, box_pos, box_size, maxChar, 0, 0, endD);//on appelle la fonction
free(text);
}
Citer : Posté le 03/05/2014 10:49 | #
Je ne sais pas si le (unsigned char *) (dont je ne connais pas l'utilité) est censé palier à ce problème mais la fonction PrintXY demande une chaîne de caractères, donc un tableau, donc un pointeur.
Or ch[start+1] est une simple valeur
Citer : Posté le 03/05/2014 10:49 | #
Fonction parent
J'ai besoin d'une valeur du tableau (j'ai mis le unsigned char parce que le SDK ne voulait pas de ch[startD+i] directement)
Citer : Posté le 03/05/2014 10:52 | #
ok,donc c'est pas ce a quoi je pensais mais je peut-être la soluce grâce à Positon
essaie avec ça, tu donnes pas la valeur mais plutôt l'adresse où est stocké la valeur (donc un pointeur)
Citer : Posté le 03/05/2014 10:54 | #
Non, ça m'affiche l'adresse et non le caractère.
Citer : Posté le 03/05/2014 10:54 | #
parce que avec PrintXY(x*6+2, y*10+2, (unsigned char *)ch[startD+i] ,0);
tu transformes un char en *char donc un valeur en une adresse
Ajouté le 03/05/2014 à 10:55 :
bizarre
Citer : Posté le 03/05/2014 11:00 | #
La fonction PrinXY prend un paramètre un pointeur de type cont unsigned char *. Que celui-ci ait été alloué dans une fonction ou une autre ne change rien tant que l'adresse est conservée.
ch[StartD+i] est un caractère. Si tu veux afficher à partir de StartD+i, il suffit de décaler le pointeur.
Si tu ne veux afficher qu'un caractère, tu dois quand même utiliser une chaîne, de sorte que le second caractère soit un 0.
temp[1] = 0; //constant
for(...)
{
temp[0] = unChar;
PrintXY(x,ty,(const usnigned char *)temp,0);
}
Citer : Posté le 03/05/2014 11:03 | #
Non, c'est bon, en fait ce n'était pas l'adresse que j'avais avec la méthode d'Intelligide mais ma chaîne sous forme de nombre (j'utilisais une fonction pour afficher un nombre et pas PrintXY) du coup le code correct est:
int x, y;
div_t pos_i;
int i;
clearBox(box_pos,box_size);
for (i = 0; i<20*box_size && i<endD; i++)
{
pos_i=div(i,20);
x=pos_i.rem;
y=pos_i.quot+box_pos;
PrintXY(x*6+2, y*10+2, &ch[startD+i], 0);
}
}
Citer : Posté le 03/05/2014 11:05 | #
est la même chose que
Sauf qu'au mieux, ce sera traduit en la deuxième forme, et au pire ça fera un appel de plus au processeur, selon le compilateur.
Citer : Posté le 03/05/2014 11:06 | #
Dans ce cas,
Citer : Posté le 03/05/2014 11:07 | #
je prefère toujours la première forme, c'est plus compréhensible pour des jeunes initiées, même si la deuxième est la plus facile à écrire(et la plus rapide comme un raccourci)
Citer : Posté le 03/05/2014 11:09 | #
Ça dépend, j'ai lu des cours sur les pointeurs où ta forme n'apparaissait jamais.
Et j'aurais même plutôt tendance à la trouver un peu "lourde", voire illisible (t'imagines, quand tu dois écrire des fonctions de traitement de chaînes ? ).
Citer : Posté le 03/05/2014 11:12 | #
En tout cas merci, ma fonction de saisie avance, il me reste à faire le déplacement du curseur avec les touches directionnelles, le débugage et je pense pouvoir la poster (avec peut-être une doc html je pense).
Citer : Posté le 03/05/2014 11:14 | #
Alors, bientôt un scanf() ?
Ça me rappelle que j'en ai un à faire aussi
Citer : Posté le 03/05/2014 11:29 | #
Ce n'est pas un scanf car il est plus complexe (plus de paramètres), c'est une zone de saisie de 1 à 5 lignes avec indicateur d'état (caractères alphabétiques, numériques... avec blocage) et autres fonctions dont l'équivalent de value avec les balises input en Html (ça va me servir pour mon projet en cours).
Par contre il ne gère pas pour l'instant les caractères spéciaux.
Citer : Posté le 03/05/2014 11:30 | #
Tu utilises les syscalls du curseur ?
Citer : Posté le 03/05/2014 11:34 | # | Fichier joint
Voici une image de test que j'utilise pour avoir le rendu actuel pour montrer à quoi ça ressemble
(cette image ne correspond pas exactement mais donne une impression d'ensemble)
Non, je n'utilise pas les syscall, j'avais besoin de mon propre système (notamment pour avoir les caractères minuscules)
Citer : Posté le 03/05/2014 11:35 | #
Zut, tu n'as pas vu les sycalls du curseur...
Ils permettent d'utiliser le clignotement et les curseurs comme dans les applications de Casio.
Citer : Posté le 03/05/2014 11:37 | #
J'aimerai bien voir ça, tu as un code d'exemple? Je pourrai éventuellement les utiliser
Citer : Posté le 03/05/2014 11:39 | #
Pour aller vite.
http://hpics.li/4c1b760
http://hpics.li/9e74250
Je pense que tu sauras te débrouiller avec ça, mais si tu as besoin d'un coup de main, demande-moi.