Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » C - convertir un int en short
Darkjura Hors ligne Membre Points: 389 Défis: 0 Message

C - convertir un int en short

Posté le 04/09/2020 16:37

Bonjour/Bonsoir !
Récemment, je me suis cassé la tête devant un problème bizarre... , et je viens de trouver le bug !
Seulement voilà, je ne connais aucune solution pour le régler... Alors j'appelle à l'aide ici :
Je voudrais récupérer la touche enfoncée par l'utilisateur (via GetKey) et la sauvegarder dans un fichier. Seulement, la variable key est un unsigned int, et le type attendu par Bfile_WriteFile est ... un short !
N'y aurait-il pas un moyen de convertir ce unsigned int en short ?
Sinon, auriez-vous une technique alternative à me proposer ?
Merci d'avance...


1, 2 Suivante
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 Message

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.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Darkjura Hors ligne Membre Points: 389 Défis: 0 Message

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 ?
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 Message

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.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Darkjura Hors ligne Membre Points: 389 Défis: 0 Message

Citer : Posté le 04/09/2020 17:08 | #


En fait, je croyais que
darkjura a écrit :
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
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 Message

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 !
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Darkjura Hors ligne Membre Points: 389 Défis: 0 Message

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 ?
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 Message

Citer : Posté le 04/09/2020 17:21 | #


Oui.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Darkjura Hors ligne Membre Points: 389 Défis: 0 Message

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

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 ?
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Darkjura Hors ligne Membre Points: 389 Défis: 0 Message

Citer : Posté le 04/09/2020 18:16 | #


Avec le SDK
Lephenixnoir a écrit :
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
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 Message

Citer : Posté le 04/09/2020 18:29 | #


Voilà un exemple tiré de ma tête.

FONTCHARACTER path[] = { '\\', '\\', 'f', 'l', 's', '0', '\\', 't', 'e', 's', 't', '.', 'b', 'i', 'n', 0x0 };
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);

Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Darkjura Hors ligne Membre Points: 389 Défis: 0 Message

Citer : Posté le 04/09/2020 19:16 | #


Ok, ok
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 Message

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.)
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Darkjura Hors ligne Membre Points: 389 Défis: 0 Message

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

Citer : Posté le 05/09/2020 09:39 | #


Vas-y, ce sera le plus simple !
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Darkjura Hors ligne Membre Points: 389 Défis: 0 Message

Citer : Posté le 05/09/2020 09:43 | # | Fichier joint


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];
    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
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 Message

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 :

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

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.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Darkjura Hors ligne Membre Points: 389 Défis: 0 Message

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 !
Darkjura Hors ligne Membre Points: 389 Défis: 0 Message

Citer : Posté le 05/09/2020 10:28 | #


C'est mieux ?
#include "fxlib.h"
#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
Kbd2 Hors ligne Membre Points: 269 Défis: 0 Message

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.
1, 2 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 v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 103 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