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 ··· 26, 27, 28, 29, 30, 31, 32 ··· 40 ··· 46, 47, 48 Suivante
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 26/04/2014 21:50 | #


Ok, merci
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 27/04/2014 10:46 | #


on peut passer le pointeur en argument:
int main(){
   int a;
   test(&a);
   free(a);
}
void test(int* a){
   a=malloc(sizeof(int));
}

Lephenixnoir Hors ligne Administrateur Points: 22763 Défis: 149 Message

Citer : Posté le 27/04/2014 11:41 | #


Ben oui, mais là non. Parce que quand tu déclares une variable de type int, la calculatrice réserve un espcace mémoire pour, donc là tu n'as pas besoin d'allouer dyamiquement.
Tu risques de générer une System Error. Au mieux, la mémoire allouée pour a ne sera pas libérée puisque l'adresse aura changée, et comme tu as déclaré un int, la calculatrice va essyaer de libére cette mémoire, que tu aura déjà libéré avec ton free(), donc un arrêt de l'émulateur. Voilà ce qui est correct.

#include <stdlib.h>
void f(int *);

int main()
{
  int *a;
  f(a);
  free(a);
}

void f(int *ptr)
{
  ptr = malloc(10*sizeof(int));
}
Gollum Hors ligne Membre Points: 1262 Défis: 2 Message

Citer : Posté le 27/04/2014 12:01 | # | Fichier joint


je ne comprends pas pourquoi le sdk me cherche un ssp.h ?

https://telegram.me/BrokenClock
Je suis de l'autre coté de la manche maintenant. Yay.
Lephenixnoir Hors ligne Administrateur Points: 22763 Défis: 149 Message

Citer : Posté le 27/04/2014 12:16 | #


C'est un header inclus dans stdio.h qui manque.
Mais printf ? scanf ?
On est dans le SDK pour la calculatrice, plus dans Code::Blocks. Ces fonctions n'existent pas.
Gollum Hors ligne Membre Points: 1262 Défis: 2 Message

Citer : Posté le 27/04/2014 12:28 | #


mais si je rajoute les headers, je devrais récupérer les fonctions non ?
https://telegram.me/BrokenClock
Je suis de l'autre coté de la manche maintenant. Yay.
Lephenixnoir Hors ligne Administrateur Points: 22763 Défis: 149 Message

Citer : Posté le 27/04/2014 12:30 | #


Ces fonctions n'existent pas.
Va voir du côté de libg85, je crois que Muelsaco nous avait fagoté un scanf.

À l'occasion, j'en ferai un aussi, complet et aussi puissant que le "?".
Gollum Hors ligne Membre Points: 1262 Défis: 2 Message

Citer : Posté le 27/04/2014 12:31 | #


oki

https://telegram.me/BrokenClock
Je suis de l'autre coté de la manche maintenant. Yay.
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 28/04/2014 14:37 | #


encore un problème, quand j'alloue un tableau avec ça,
Lephenixnoir a écrit :
int main()
{
int *a;
a[3]=1;
afficher(a[3]);

free(a);
}

void f(int *ptr)
{
ptr = malloc(10*sizeof(int));
}[/code]


et que je me sers du tableau (ligne en rouge) dans la fonction parent et principal, la calto me met une belle erreur système :huh:
Lephenixnoir Hors ligne Administrateur Points: 22763 Défis: 149 Message

Citer : Posté le 28/04/2014 14:42 | #


Forcément, tu n'as pas alloué de mémoire pour a !
a = malloc(4*sizeof(int));
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 28/04/2014 14:44 | #


a, je l'alloue grâce à la deuxième fonction
Lephenixnoir Hors ligne Administrateur Points: 22763 Défis: 149 Message

Citer : Posté le 28/04/2014 14:45 | #


Et tu l'appelles où, cette superbe fonction ?
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 28/04/2014 14:47 | #


:aie2: :aie2: :boulet:

j'ai fait un erreur

voici la bonne fonction
int main()
{
int *a;
f(a);
[red]a[3]=1;
afficher(a[3]);[/red]
free(a);
}

void f(int *ptr)
{
ptr = malloc(10*sizeof(int));
Lephenixnoir Hors ligne Administrateur Points: 22763 Défis: 149 Message

Citer : Posté le 28/04/2014 14:49 | #


Pour améliorer cette fonction, tu peux justement prendre un pointeur en void * et utiliser calloc() à partir d'un deuxième argument obtenu avec sizeof(), pour pouvoir allouer pour n'importe quel type.
Nemhardy Hors ligne Grand maître des Traits d'Esprit Points: 1241 Défis: 54 Message

Citer : Posté le 28/04/2014 14:54 | #


Ne faudrait t-il pas passer un pointeur sur ton pointeur à ta fonction qui alloue la mémoire ?
Lephenixnoir Hors ligne Administrateur Points: 22763 Défis: 149 Message

Citer : Posté le 28/04/2014 14:57 | #


Non.
Un pointeur est une adresse, on s'en fout qu'il copie l'adresse. Le tout c'est qu'elle arrive indentique à la fonction, et même si on copie le pointeur, la copie, qui contient la même adresse, pointe toujours sur la même zone mémoire.
Nemhardy Hors ligne Grand maître des Traits d'Esprit Points: 1241 Défis: 54 Message

Citer : Posté le 28/04/2014 15:03 | #


Oui, mais la valeur de a et donc la zone vers laquelle il pointe n'est pas modifiée étant donné que c'est une copie de a qui va changer de valeur pour prendre celle d'une adresse vers la zone allouée... Autant avec un free ça irait, mais là il me semble que il manque quelque chose...

Enfin je me trompe peut être, tu as peut être raison aussi ;).
Lephenixnoir Hors ligne Administrateur Points: 22763 Défis: 149 Message

Citer : Posté le 28/04/2014 15:10 | #


Oui, bien sûr !
Je me suis complètement trompé, je n'ai pas remarqué que la fonction ne renvoyait pas le pointeur alloué, ce qu'elle devrait faire. En fait, ceci est correct.
int *f()
{
  return malloc(10*sizeof(int));
}

void g(int **p)
{
  *p = malloc(10*sizeof(int));
}

int main()
{
  int *a;
  a = f();
  free(a);
  g(&a);
  free(a);
}


Merci de l'avoir signalé. ^^'


aliegeois Invité

Citer : Posté le 28/04/2014 19:17 | #


Bonjour,
Je débute avec le SDK et j'aurai une question : est-ce qu'il existe une fonction qui permet de quitter l'add-in, du genre quit(), ou est-ce qu'il faut juste retourner au menu principl et si oui, comment ?
Merci de vos réponses
Calculatrice : CASIO GRAPH 95
Regardez mon lecteur de vidéo !
Lephenixnoir Hors ligne Administrateur Points: 22763 Défis: 149 Message

Citer : Posté le 28/04/2014 19:21 | #


Après vérification, la fonction exit() de stdlib n'existe pas sur la calculatrice.
Néanmoins, la plupart des add-ins, tels les applications par défaut, ne se terminent jamais, du moins pas tant que l'utilisateur ne revient au menu pour lancer autre chose.

Sinon, tu est obligé de remonter ta pile de fonctions et de faire un return dans le AddIn_Main.


aliegeois Invité

Citer : Posté le 28/04/2014 19:26 | #


D'accord, est-ce que c'est possible de faire un menu avec comme options : "Jouer, Options, Quitter" et lorsque l'on sélectionne quitter l'application retourne au menu ? Et qu'appelles-tu faire un return dans le main ? juste écrire "return 0;" ?
Calculatrice : CASIO GRAPH 95
Regardez mon lecteur de vidéo !
Précédente 1, 2, 3 ··· 10 ··· 20 ··· 26, 27, 28, 29, 30, 31, 32 ··· 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 43 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