Posté le 04/09/2020 16:37
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 47 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
Citer : Posté le 04/09/2020 16:40 | #
Plusieurs choses. D'abord les types entiers sont convertis automatiquement lors d'un appel de fonction. Si tu mets un int et que la fonction demande un short, la valeur est tronquée automatiquement.
Ensuite, et c'est le plus important, tu as mal compris le prototype de BFile_WriteFile. Je ne sais pas trop ce que imagines mais cette fonction ne prend qu'un pointeur vers un buffer quelconque. Le short, s'il est noté, est juste là pour te rappeler que tu dois absolument écrire une taille paire et si possible 2-aligned le buffer.
Citer : Posté le 04/09/2020 16:44 | #
Et du coup, en créant un tableau de unsigned int qu'on enverrait à la fonction, elle l'écrirait normalement dans le fichier ? Sans tronquer aucune valeur ?
Citer : Posté le 04/09/2020 17:02 | #
Déjà je ne vois pas où tu as tiré ton short, j'ai vérifié le PDF du SDK, la doc de SimLo et celle de gint, personne ne parle de short.
Donc tu envoies à BFile_WriteFile() un pointeur (si possible 2-aligné) et une taille multiple de 2 et ça sauvegarde dans le fichier les données pointées. Si tu lui donnes un tableau de 4 int avec 4*4 comme taille ça sauvegarde le tableau oui. BFile_WriteFile() n'interprète pas ce que tu lui donnes, il ignore complètement son type et ne tente en aucun cas de modifier. Ça copie juste de la mémoire vers un fichier.
Citer : Posté le 04/09/2020 17:08 | #
En fait, je croyais que
le type attendu par Bfile_WriteFile est ... un short !
Mais, en fait, ça peu être un pointeur sur un tableau de n'importe quel type...
j'essaye quelques modifs
Citer : Posté le 04/09/2020 17:13 | #
Ça n'a même pas besoin d'être un tableau, ça peut être un pointeur vers n'importe quoi. Mais assure-toi que la taille est paire !
Citer : Posté le 04/09/2020 17:18 | #
Ok !
La taille d'un int, c'est 4 octets sur la calto, non ? C'est donc pair ?
Citer : Posté le 04/09/2020 17:21 | #
Oui.
Citer : Posté le 04/09/2020 18:09 | #
J'y arrive pas du tout...
N'y a-t-il vraiment aucun moyen de convertir un int en short sans le tronquer ?
Ça serait beaucoup plus facile parce que là, ça continue à buguer...
Citer : Posté le 04/09/2020 18:12 | #
Quitte à me répéter, aucun short n'est impliqué dans BFile_WriteFile(). Avant que je te donne un code d'exemple, tu codes avec le SDK ou avec gint ?
Citer : Posté le 04/09/2020 18:16 | #
Avec le SDK
Aucun short n'est impliqué dans BFile_WriteFile().
J'ai bien compris ça, mais ça me ferait la tonne de trucs à modifier dans mon code.
Ajouté le 04/09/2020 à 18:16 :
Je vais réessayer
Citer : Posté le 04/09/2020 18:29 | #
Voilà un exemple tiré de ma tête.
Bfile_DeleteFile(path);
Bfile_CreateFile(path, 16);
int fd = Bfile_OpenFile(path, _OPENMODE_WRITE);
int values[4] = { 0xdeadbeef, 31415926, 42, 0x8001007c };
Bfile_WriteFile(fd, values, 16);
Bfile_CloseFile(fd);
Citer : Posté le 04/09/2020 19:16 | #
Ok, ok
Citer : Posté le 04/09/2020 20:09 | #
Précision : tu es obligé de supprimer et recréer le fichier à chaque fois. C'est parce qu'un fichier, lorsqu'il est créé, ne contient que des 1, et BFile_WriteFile() ne peut transformer que les 1 en 0, pas l'inverse. (C'est une propriété de la ROM, qui n'est pas prévue pour faire un système de fichiers, et c'est très spécifique aux Casio.)
Citer : Posté le 05/09/2020 09:05 | #
Ah!
Super!
C'est peut-être pour ça...
J'essaye
Ajouté le 05/09/2020 à 09:33 :
Ben non...
Rien à faire...
Si je te donne mon code, est-ce que tu pourrais me situer les erreurs ?
Il est pas très long, mais là je bloque vraiment
Citer : Posté le 05/09/2020 09:39 | #
Vas-y, ce sera le plus simple !
Citer : Posté le 05/09/2020 09:43 | # | Fichier joint
{
int i, j, sign;
char c;
if ((sign = n) < 0)
n = -n;
i = 0;
do {
s[i++] = n % 10 + '0';
} while ((n /= 10) > 0);
if (sign < 0)
s[i++] = '-';
s[i] = '\0';
for (i = 0, j = strlen(s)-1; i<j; i++, j--) {
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
void affiche(const int x,const int y,const unsigned char*str)
{
locate(x,y);
Print((unsigned char*)str);
}
void lock(void)
{
const unsigned char Cadenas[]={0x0, 0x0, 0x7f, 0x80, 0x0, 0x3f, 0x0, 0x3, 0xff, 0xf0, 0x0, 0x3f, 0x0, 0xf, 0xff, 0xfc, 0x0, 0x3f, 0x0, 0x3f, 0xff, 0xff, 0x0, 0x3f, 0x0, 0x7f, 0x0, 0x3f, 0x80, 0x3f, 0x0, 0xfc, 0x0, 0xf, 0xc0, 0x3f, 0x1, 0xf0, 0x0, 0x3, 0xe0, 0x3f, 0x1, 0xe0, 0x0, 0x1, 0xe0, 0x3f, 0x3, 0xc0, 0x0, 0x0, 0xf0, 0x3f, 0x3, 0xc0, 0x0, 0x0, 0xf0, 0x3f, 0x7, 0x80, 0x0, 0x0, 0x78, 0x3f, 0x7, 0x80, 0x0, 0x0, 0x78, 0x3f, 0x7, 0x0, 0x0, 0x0, 0x38, 0x3f, 0xf, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0xf, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0xf, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0xf, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0xf, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0xf, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0xf, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0xf, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0xf, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0xf, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0xf, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0xf, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0xf, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0x1f, 0xff, 0xff, 0xff, 0xfe, 0x3f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x1f, 0xff, 0xff, 0xff, 0xfe, 0x3f, };
ML_bmp_or(Cadenas,42,2,42,60);
ML_display_vram();
}
void code()
{
int key;
char i,j,tailleMDP=0;
int handle;
int buffer[5];
short filename[] = {'\\', '\\', 'f', 'l', 's', '0', '\\','m','d','p','.','s','a','v',0};
handle = Bfile_OpenFile(filename,_OPENMODE_READWRITE);
Bfile_ReadFile(handle,&buffer,20,0);
KillTimer(1);
PopUpWin(2);
affiche(3,3,"Cette calculette");
affiche(6,4,"est prot\xE6\x0A""g\xE6\x0A""e");
for(i=0;i<5;i++)
{
if(buffer[i]) tailleMDP++;
}
i=0;
do
{
GetKey(&key);
for(j=0;j<5;j++)
{
if((buffer[j]) && (key==buffer[j]) && (i==j)) i++;
}
}while(i<tailleMDP);
}
int AddIn_main(int isAppli, unsigned short OptionNum)
{
int key;
const unsigned char principal[]={0xe7, 0xfd, 0x67, 0x3f, 0xff, 0xcf, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xdb, 0x9c, 0x6, 0xdc, 0xed, 0xcf, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xdb, 0x6f, 0xe6, 0xdb, 0x6d, 0xcc, 0xff, 0xae, 0x67, 0xdf, 0xff, 0x81, 0x6e, 0x64, 0xb, 0x73, 0xcb, 0xb9, 0xde, 0x6f, 0xf7, 0xff, 0x81, 0x5d, 0xa4, 0xa, 0xf3, 0xcb, 0xb6, 0xae, 0x65, 0x53, 0xff, 0x81, 0x95, 0xa4, 0xc, 0xad, 0x8b, 0x88, 0xfc, 0x6e, 0xd7, 0xdf, 0x81, 0x6e, 0x44, 0xb, 0x6d, 0xc, 0xae, 0xf8, 0x65, 0x57, 0x9f, 0xc3, 0x97, 0x86, 0x1c, 0xbe, 0xf, 0xf9, 0xf0, 0x7f, 0xff, 0x1f, };
const unsigned char CadenasPetit[]={0x33, 0x4b, 0x4b, 0xff, 0xff, 0xff, 0xff, 0x7b, };
short filename[] = {'\\', '\\', 'f', 'l', 's', '0', '\\','m','d','p','.','s','a','v',0};
int mdp[] = {149,30013,44,0,0};
int handle;
int buffer[5];
char str[9];
char i,j,tailleMDP;
Sleep(400);
if(IsKeyDown(KEY_CHAR_PLUS))
{
handle = Bfile_OpenFile(filename, _OPENMODE_READWRITE);
if (handle<0)
{
Bfile_CreateFile(filename,20);
handle = Bfile_OpenFile(filename, _OPENMODE_READWRITE);
Bfile_SeekFile(handle,0);
Bfile_WriteFile(handle,&mdp,20);
}
affiche(1,1,"Verouillage G75");
affiche(1,3,"F1: et \xE6\x0A""teindre");
affiche(1,4,"F2: et quitter");
affiche(1,6,"F3: Changer code");
affiche(1,7,"F4: Quitter");
ML_bmp_or(principal,0,56,83,8);
ML_bmp_or(CadenasPetit,24,13,6,8);
ML_bmp_or(CadenasPetit,24,23,6,8);
do
{
GetKey(&key);
}while((key!=KEY_CTRL_F1) && (key!=KEY_CTRL_F2) && (key!=KEY_CTRL_F3) && (key!=KEY_CTRL_F4));
if((key==KEY_CTRL_F1) || (key==KEY_CTRL_F2))
{
SetQuitHandler(code);
SetTimer(1,1,lock);
}
if(key==KEY_CTRL_F1) PowerOff(1);
if(key==KEY_CTRL_F3)
{
Bfile_ReadFile(handle,&buffer,20,0);
ML_clear_vram();
affiche(1,1,"Saisissez ancien code");
for(i=0;i<5;i++)
{
itoa(buffer[i],str);
affiche(1,i+2,str);
GetKey(&key);
}
tailleMDP=0;
for(i=0;i<5;i++)
{
if(buffer[i]) tailleMDP++;
}
i=0;
do
{
GetKey(&key);
for(j=0;j<5;j++)
{
if((buffer[j]) && (key==buffer[j]) && (i==j)) i++;
}
}while(i<tailleMDP);
for(i=0;i<5;i++)
{
mdp[i]=0;
}
affiche(1,1,"Entrez nouveau code ");
Bfile_DeleteFile(filename);
Bfile_CreateFile(filename,20);
handle = Bfile_OpenFile(filename, _OPENMODE_READWRITE);
Bfile_SeekFile(handle,0);
for(i=0;i<5;i++)
{
Sleep(500);
GetKey(&key);
if(key==KEY_CTRL_EXE) break;
affiche(i+1,2,"a");
ML_display_vram();
Bfile_WriteFile(handle,&key,4);
}
affiche(1,3,"Changement effectu\xE6\x0A"" !");
GetKey(&key);
}
Bfile_CloseFile(handle);
}
return 1;
}
Le problème devrait se situer dans la boucle if(key==KEY_CTRL_F3), vers la fin.
Franchement, bonne chance! Et merci!
itoa est une fonction préécrite, aucune erreur à craindre de ce côté-là...
Ajouté le 05/09/2020 à 09:45 :
Ca ne réécrit pas les valeurs de key dans mdp.sav
Citer : Posté le 05/09/2020 09:59 | #
Tu as oublié de fermer le fichier dans code(), ce qui est source de nombreux problèmes cryptiques au bout d'un certain temps.
Dans Addin_main(), tu ne devrais pas ouvrir le fichier directement, comme je l'ai dit tu ne peux pas écrire dans un fichier qui n'est pas tout neuf donc ça ne sert à rien.
Si un erreur se produit, tu le crées, mais ça ne gère que le cas où l'erreur c'est qu'il n'existe pas. Si une autre erreur se produit la création va aussi échouer car le fichier existe déjà.
Tu dois supprimer et recréer le fichier à tous les coups quand tu écris, comme dans mon exemple il y a quelques messages.
Le Bfile_SeekFile() est inutile, tu commences toujours à l'offset 0 quand tu ouvres un fichier.
De plus, tu oublies encore une fois de fermer le fichier après avoir écrit dedans.
Tu combines une ouverture/écriture au début du main(), une lecture conditionnelle, et ensuite une autre écriture plus bas tout en ne fermant le fichier qu'à la toute fin. Ce n'est pas du tout dans l'ordre, si tu appuies sur F3 tu tentes de supprimer un fichier qui est encore ouvert.
Enfin, mais ça c'est un peu à part, tu ne devrais vraiment pas contrôler ta boucle principale avec IsKeyDown().
Ton code fais trop de choses en même temps. Simplifie-toi la vie avec des fonctions au rôle bien déterminé qui préservent les bons invariants :
/* Returns amount of bytes read or negative number on error */
int read_code(int *code, int size)
{
int fd = Bfile_OpenFile(filename, _OPENMODE_READ);
if(fd < 0) return fd;
size = Bfile_ReadFile(fd, code, size, -1);
Bfile_CloseFile(fd);
return size;
}
/* Returns amount of bytes written or negative number on error */
int write_code(const int *code, int size)
{
Bfile_DeleteFile(filename);
int rc = Bfile_CreateFile(filename);
if(rc < 0) return rc;
int fd = Bfile_OpenFile(filename, _OPENMODE_WRITE);
if(fd < 0) return fd;
size = Bfile_WriteFile(fd, code, size);
Bfile_CloseFile(fd);
return size;
}
Et ensuite tu te contentes d'appeler ces deux fonctions quand tu veux lire et écrire le mot de passe (et tu lis entièrement le mot de passe dans un tableau avant de chercher à l'écrire dans le fichier), et tu auras bien moins de questions à te poser.
Citer : Posté le 05/09/2020 10:12 | #
Oula ! ça m'a encore plus embrouillé !
Bon, j'essaye d'inclure tes fonctions et de les utiliser.
Je procède aussi aux améliorations suggérées.
À dans un quart d'heure !
Citer : Posté le 05/09/2020 10:28 | #
C'est mieux ?
#include "MonochromeLib.h"
static const short filename[] = {'\\', '\\', 'f', 'l', 's', '0', '\\','m','d','p','.','s','a','v',0};
/* Returns amount of bytes read or negative number on error */
int read_code(int *code, int size)
{
int fd = Bfile_OpenFile(filename, _OPENMODE_READ);
if(fd < 0) return fd;
size = Bfile_ReadFile(fd, code, size, -1);
Bfile_CloseFile(fd);
return size;
}
/* Returns amount of bytes written or negative number on error */
int write_code(const int *code, int size)
{
Bfile_DeleteFile(filename);
int rc = Bfile_CreateFile(filename);
if(rc < 0) return rc;
int fd = Bfile_OpenFile(filename, _OPENMODE_WRITE);
if(fd < 0) return fd;
size = Bfile_WriteFile(fd, code, size);
Bfile_CloseFile(fd);
return size;
}
void itoa(int n, char s[])
{
int i, j, sign;
char c;
if ((sign = n) < 0)
n = -n;
i = 0;
do {
s[i++] = n % 10 + '0';
} while ((n /= 10) > 0);
if (sign < 0)
s[i++] = '-';
s[i] = '\0';
for (i = 0, j = strlen(s)-1; i<j; i++, j--) {
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
void affiche(const int x,const int y,const unsigned char*str)
{
locate(x,y);
Print((unsigned char*)str);
}
void lock(void)
{
const unsigned char Cadenas[]={0x0, 0x0, 0x7f, 0x80, 0x0, 0x3f, 0x0, 0x3, 0xff, 0xf0, 0x0, 0x3f, 0x0, 0xf, 0xff, 0xfc, 0x0, 0x3f, 0x0, 0x3f, 0xff, 0xff, 0x0, 0x3f, 0x0, 0x7f, 0x0, 0x3f, 0x80, 0x3f, 0x0, 0xfc, 0x0, 0xf, 0xc0, 0x3f, 0x1, 0xf0, 0x0, 0x3, 0xe0, 0x3f, 0x1, 0xe0, 0x0, 0x1, 0xe0, 0x3f, 0x3, 0xc0, 0x0, 0x0, 0xf0, 0x3f, 0x3, 0xc0, 0x0, 0x0, 0xf0, 0x3f, 0x7, 0x80, 0x0, 0x0, 0x78, 0x3f, 0x7, 0x80, 0x0, 0x0, 0x78, 0x3f, 0x7, 0x0, 0x0, 0x0, 0x38, 0x3f, 0xf, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0xf, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0xf, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0xf, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0xf, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0xf, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0xf, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0xf, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0xf, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0xf, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0xf, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0xf, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0xf, 0x0, 0x0, 0x0, 0x3c, 0x3f, 0x1f, 0xff, 0xff, 0xff, 0xfe, 0x3f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x1f, 0xff, 0xff, 0xff, 0xfe, 0x3f, };
ML_bmp_or(Cadenas,42,2,42,60);
ML_display_vram();
}
void code()
{
int key;
char i,j,tailleMDP=0;
int handle;
int buffer[5];
read_code(buffer,20);
KillTimer(1);
PopUpWin(2);
affiche(3,3,"Cette calculette");
affiche(6,4,"est prot\xE6\x0A""g\xE6\x0A""e");
for(i=0;i<5;i++)
{
if(buffer[i]) tailleMDP++;
}
i=0;
do
{
GetKey(&key);
for(j=0;j<5;j++)
{
if((buffer[j]) && (key==buffer[j]) && (i==j)) i++;
}
}while(i<tailleMDP);
}
int AddIn_main(int isAppli, unsigned short OptionNum)
{
int key;
const unsigned char principal[]={0xe7, 0xfd, 0x67, 0x3f, 0xff, 0xcf, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xdb, 0x9c, 0x6, 0xdc, 0xed, 0xcf, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xdb, 0x6f, 0xe6, 0xdb, 0x6d, 0xcc, 0xff, 0xae, 0x67, 0xdf, 0xff, 0x81, 0x6e, 0x64, 0xb, 0x73, 0xcb, 0xb9, 0xde, 0x6f, 0xf7, 0xff, 0x81, 0x5d, 0xa4, 0xa, 0xf3, 0xcb, 0xb6, 0xae, 0x65, 0x53, 0xff, 0x81, 0x95, 0xa4, 0xc, 0xad, 0x8b, 0x88, 0xfc, 0x6e, 0xd7, 0xdf, 0x81, 0x6e, 0x44, 0xb, 0x6d, 0xc, 0xae, 0xf8, 0x65, 0x57, 0x9f, 0xc3, 0x97, 0x86, 0x1c, 0xbe, 0xf, 0xf9, 0xf0, 0x7f, 0xff, 0x1f, };
const unsigned char CadenasPetit[]={0x33, 0x4b, 0x4b, 0xff, 0xff, 0xff, 0xff, 0x7b, };
int mdp[] = {KEY_CHAR_LOG,KEY_CTRL_F5,KEY_CHAR_COMMA,0,0};
int handle;
int buffer[5];
char str[9];
char i,j,tailleMDP;
Sleep(400);
if(IsKeyDown(KEY_CHAR_PLUS))
{
if (handle<0) write_code(mdp,20);
affiche(1,1,"Verouillage G75");
affiche(1,3,"F1: et \xE6\x0A""teindre");
affiche(1,4,"F2: et quitter");
affiche(1,6,"F3: Changer code");
affiche(1,7,"F4: Quitter");
ML_bmp_or(principal,0,56,83,8);
ML_bmp_or(CadenasPetit,24,13,6,8);
ML_bmp_or(CadenasPetit,24,23,6,8);
do
{
GetKey(&key);
}while((key!=KEY_CTRL_F1) && (key!=KEY_CTRL_F2) && (key!=KEY_CTRL_F3) && (key!=KEY_CTRL_F4));
if((key==KEY_CTRL_F1) || (key==KEY_CTRL_F2))
{
SetQuitHandler(code);
SetTimer(1,1,lock);
}
if(key==KEY_CTRL_F1) PowerOff(1);
if(key==KEY_CTRL_F3)
{
read_code(buffer,20);
ML_clear_vram();
affiche(1,1,"Saisissez ancien code");
for(i=0;i<5;i++)
{
itoa(buffer[i],str);
affiche(1,i+2,str);
GetKey(&key);
}
tailleMDP=0;
for(i=0;i<5;i++)
{
if(buffer[i]) tailleMDP++;
}
i=0;
do
{
GetKey(&key);
for(j=0;j<5;j++)
{
if((buffer[j]) && (key==buffer[j]) && (i==j)) i++;
}
}while(i<tailleMDP);
for(i=0;i<5;i++)
{
mdp[i]=0;
}
affiche(1,1,"Entrez nouveau code ");
for(i=0;i<5;i++)
{
Sleep(500);
GetKey(&key);
if(key==KEY_CTRL_EXE) break;
affiche(i+1,2,"a");
ML_display_vram();
mdp[i]=key;
}
read_code(mdp,20);
affiche(1,3,"Changement effectu\xE6\x0A"" !");
GetKey(&key);
}
}
return 1;
}
#pragma section _BR_Size
unsigned long BR_Size;
#pragma section
#pragma section _TOP
int InitializeSystem(int isAppli, unsigned short OptionNum)
{
return INIT_ADDIN_APPLICATION(isAppli, OptionNum);
}
#pragma section
Par contre, le Sdk rencontre 3 erreurs par ligne quand tu déclares fd et rc dans write_code...
C:\Users\acjur\OneDrive\Documents\CASIO\fx-9860G SDK\LOCK\LOCK.c(23) : C2500 (E) Illegal token "int"
C:\Users\acjur\OneDrive\Documents\CASIO\fx-9860G SDK\LOCK\LOCK.c(23) : C2225 (E) Undeclared name "rc"
C:\Users\acjur\OneDrive\Documents\CASIO\fx-9860G SDK\LOCK\LOCK.c(23) : C2220 (E) Modifiable lvalue required for "="
C:\Users\acjur\OneDrive\Documents\CASIO\fx-9860G SDK\LOCK\LOCK.c(26) : C2500 (E) Illegal token "int"
C:\Users\acjur\OneDrive\Documents\CASIO\fx-9860G SDK\LOCK\LOCK.c(26) : C2225 (E) Undeclared name "fd"
C:\Users\acjur\OneDrive\Documents\CASIO\fx-9860G SDK\LOCK\LOCK.c(26) : C2220 (E) Modifiable lvalue required for "="
Ajouté le 05/09/2020 à 11:08 :
J'ai essayer de recompiler, toujours les mêmes erreurs
Citer : Posté le 05/09/2020 11:22 | #
The Casio SDK's C89 standard requires that all variables are declared at the beginning of the function.
You need to declare rc before the call to BFile_DeleteFile.