**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 26/04/2014 13:21 | #
Un unsigned long long ? Ce ne serait pas un peu comme déclaration ?
Puisque le long est déjà long ?
Ou alors tu te débrouilles avec des pointeurs, ou tu est foutu si tu veux utiliser des opérations arithmétiques, puisque la taille des registres du SH4 est de 32 bits. Inutile donc d'aller voir celle du SH3.
Citer : Posté le 26/04/2014 13:35 | #
Si je me souviens bien, le long long est forcément de 64 bits, alors que le long est au minimum de 32 bits (cela dépend des compilo)
Bon de toute façon c'est pas grave, au pire il y aura un peu moins de précision
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2
merci a tout le monde pour son soutien
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm
(dont je connais le nom, mais pas vous )Arcuz !Citer : Posté le 26/04/2014 13:45 | #
Seulement le type long n'est qu'un unsigned int.
Pour autant que je sache, long est un nom de type et non pas un "statut" comme unsigned, const, register ou static.
Citer : Posté le 26/04/2014 14:37 | #
Non, sur le SDK casio le long = int (et pas unsigned), mais sur d'autre il y a une différence, l'int est plus petit alors que le long reste de 32 bits. par contre, le long long est bel et bien de 64 bits. (faut bien se dire que normalement on devrait écrire long int et pas long, mais que le compilo accepte quand même)
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2
merci a tout le monde pour son soutien
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm
(dont je connais le nom, mais pas vous )Arcuz !Citer : Posté le 26/04/2014 14:52 | #
Ce que je ne comprends pas, c'est qu'une déclaration de variables se fait avec deux types d'identifieurs, un ou plusieurs "statuts" et un type de données.
Si tu déclares un long long, soit il y a deux types, ce qui est interdit (c'est comme si je te mettais int int), soit aucun. Alors long est-il un type ou un statut ?
Citer : Posté le 26/04/2014 15:57 | #
@lephénixnoir ça aurait pas un rapport avec ça ?
Coïncidence ? Je ne pense pas.
Citer : Posté le 26/04/2014 16:11 | #
Si, merci. Mais pour s'en servir il suffit d'écrire
Je ne vois pas pourquoi vous voulez y mettre deux long, alors que seul le type est nécessaire.
Citer : Posté le 26/04/2014 16:40 | #
C'est sûrement une convention.
Coïncidence ? Je ne pense pas.
Citer : Posté le 26/04/2014 17:50 | #
Petit problème, j'ai créé une fonction qui prend en argument un char contenant le nom d'un fichier, ensuite j'aimerai mettre ce nom à la fin d'un autre chaîne pour créer le fichier mais ça ne marche pas:
int create=-1,i;
int handle;
int size=15+strlen(name);
char adresse[size]="\\\\fls0\\COF\\";
for (i = 0; i < strlen(name); ++i)
{
adresse[i+15]=name[i];
}
create=memory_createfile(name,4);
}
Illegal array size
Too many initializers
Citer : Posté le 26/04/2014 17:56 | #
#include <string.h>
void createFile(char *name)
{
char adresse[strlen(name)+15];
sprintf(adr,"\\\\fls0\\%s",name);
memory_createfile(adresse,4);
}
Bien plus simple.
Pourquoi est-ce que personne ne connaît les fonctions de formatage de la bibliothèque standard ?
Je pense que ton erreur venait du fait que tu aies oublié l'inclusion du header string.h ?
Citer : Posté le 26/04/2014 18:02 | #
Par contre char adresse[strlen(name)+15]; ne passe pas: "Illegal array size" mais sinon ça a l'air de marcher
Ajouté le 26/04/2014 à 18:06 :
Du coup j'ai mis char adresse[27];
Citer : Posté le 26/04/2014 18:15 | #
Ah oui, c'est parce qu'il veut absolument des constantes. Peut-être qu'il les remplace à la compilation ?
Citer : Posté le 26/04/2014 18:19 | #
J'ai essayé de caster en const: char adresse[(const int)strlen(name)+15]; mais il n'est veut pas
Citer : Posté le 26/04/2014 18:22 | #
D'abord il faudrait mettre des vraies parenthèses.
Parce que là il n'y a que le strlen(name) qui est casté en constant.
Mais de toute manière, je ne pense pas que ça fonctionne, le compilateur est très tatillon sur les constantes.
Citer : Posté le 26/04/2014 18:32 | #
Effectivement ça ne marche pas, enfin bon, avec char adresse[27]; ça marche donc je n'y touche pas.
Ajouté le 26/04/2014 à 19:41 :
Je viens de me rendre compte que je pouvais faire char *adresse=malloc(sizeof(char)*(strlen(name)+15)) en tout cas ici ça ne m'intéresse pas mais ça va me servir pour autre chose, pour avoir une chaîne de caractères de la taille voulue, j'ai fais char *chaine=malloc(max*sizeof(char)); et ça a l'air de passer (dites moi si je fais une erreur)
Citer : Posté le 26/04/2014 20:13 | #
Non, pas d'erreur.
En revanche, n'oublie pas le free à la fin de la fonction (je le fais souvent):
{
char *adresse = malloc(strlen(name)+15);
...
free(adresse);
}
Au fait, sizeof(char)=1 tout le temps, tu ne peux pas te tromper, et ça t'évite des appels à call et ret inutiles.
Citer : Posté le 26/04/2014 20:19 | #
Ok, merci. Par contre si je fais un return d'une variable que j'ai alloué dynamiquement, je fais comment pour le free?
Citer : Posté le 26/04/2014 20:23 | #
Tu le free dans la fonction parent.
Citer : Posté le 26/04/2014 20:43 | #
Ah ok, c'est à dire:
int a;
a=test();
free(a);
}
int test(){
int b=malloc(sizeof(int));
return b;
}
Citer : Posté le 26/04/2014 21:50 | #
Oui, c'est ça.
Un pointeur alloué dynamiquement "traîne" son allocation jusqu'à ce qu'il soit libéré.
Citer : Posté le 26/04/2014 21:50 | #
Ok, merci