Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Autres questions


Index du Forum » Autres questions » **Le SDK pour fx-9860/Graph85** Topic officiel
Matronix Hors ligne Ancien administrateur Points: 6058 Défis: 82 Message

**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.


Précédente 1, 2, 3 ··· 10 ··· 20 ··· 28, 29, 30, 31, 32, 33, 34 ··· 40 ··· 46, 47, 48 Suivante
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 03/05/2014 10:28 | #


Petit problème, j'ai fais une fonction qui est censé afficher du texte
void dispChar(char *ch, const int box_pos, const int box_size, const int maxChar, const int startD,  const int endD){
    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();
}
Or l'émulateur me fait un system error (target= 0x74) quand je l'appelle dispChar(text, box_pos, box_size, maxChar, 0, 0, endD); //text a été alloué dynamiquement
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?
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

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);
}

Positon Hors ligne Rédacteur Points: 2396 Défis: 57 Message

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
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

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)
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

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

PrintXY(x*6+2, y*10+2, &ch[startD+i] ,0);

essaie avec ça, tu donnes pas la valeur mais plutôt l'adresse où est stocké la valeur (donc un pointeur)
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 03/05/2014 10:54 | #


Non, ça m'affiche l'adresse et non le caractère.
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

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
Lephenixnoir En ligne Administrateur Points: 22772 Défis: 149 Message

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.
PrintXY(x,y,(const unsigned char *)(ch+StartD+i),0);

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.
unsigned char temp[2];
temp[1] = 0; //constant

for(...)
{
  temp[0] = unChar;
  PrintXY(x,ty,(const usnigned char *)temp,0);
}
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

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:
void dispChar(char *ch, const int box_pos, const int box_size, const int maxChar, const int startD,  const int endD){
    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);
    }
}
Lephenixnoir En ligne Administrateur Points: 22772 Défis: 149 Message

Citer : Posté le 03/05/2014 11:05 | #



&ch[startD+i]

est la même chose que
ch+startD+i

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.
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 03/05/2014 11:06 | #


Dans ce cas,
PrintXY(x*6+2, y*10+2, ch+startD+i, 0);
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

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)
Lephenixnoir En ligne Administrateur Points: 22772 Défis: 149 Message

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 ? ).
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

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).
Lephenixnoir En ligne Administrateur Points: 22772 Défis: 149 Message

Citer : Posté le 03/05/2014 11:14 | #


Alors, bientôt un scanf() ?
Ça me rappelle que j'en ai un à faire aussi
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

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.
Lephenixnoir En ligne Administrateur Points: 22772 Défis: 149 Message

Citer : Posté le 03/05/2014 11:30 | #


Tu utilises les syscalls du curseur ?
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

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)
Lephenixnoir En ligne Administrateur Points: 22772 Défis: 149 Message

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.
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 03/05/2014 11:37 | #


J'aimerai bien voir ça, tu as un code d'exemple? Je pourrai éventuellement les utiliser
Lephenixnoir En ligne Administrateur Points: 22772 Défis: 149 Message

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.
Précédente 1, 2, 3 ··· 10 ··· 20 ··· 28, 29, 30, 31, 32, 33, 34 ··· 40 ··· 46, 47, 48 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2022 | Il y a 112 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd