1

Supprimer pour accélérer le téléchargement de la page
Plis fòs ba pengwen là !

mon site: http://www.slubman.info/
partie GP32: http://www.slubman.info/gp32
partie TI: http://www.slubman.info/ti

2

Moi, il marche sans prob sur ma TI-89 2.05 HW2. Mais recompilé avec TI-GCC 0.94 b18

Au fait, pour mémoriser le nom des répertoires, pas besoin de le faire en 2 fois.
Tu peux le faire en une fois (en utilisant realloc), pareil pour les fichiers

3

Peut-être qu'il n'y a pas assez de RAM sur ta vraie TI-89. Nulle part dans ton programmes ne testes-tu si ton calloc a échoué!
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

4

jackiechan91 a écrit :
Moi, il marche sans prob sur ma TI-89 2.05 HW2. Mais recompilé avec TI-GCC 0.94 b18

Au fait, pour mémoriser le nom des répertoires, pas besoin de le faire en 2 fois. Tu peux le faire en une fois (en utilisant realloc), pareil pour les fichiers


Je suis passé à TIGCC 0.94b18 hier soir, j'ai recompilé le prog et il marcvhe toujours pasconfus
Quand j'utilise realloc, TIGCC me renvoi une erreur comme quoi la variable n'est pas une matriceconfus
Kevin Kofler a écrit :
Peut-être qu'il n'y a pas assez de RAM sur ta vraie TI-89. Nulle part dans ton programmes ne testes-tu si ton calloc a échoué!


Sur ma 89 j'ai 110Ko de ram libre
Plis fòs ba pengwen là !

mon site: http://www.slubman.info/
partie GP32: http://www.slubman.info/gp32
partie TI: http://www.slubman.info/ti

5

Bon autre problème avec TIGCC 0.94 b18

Avant je déclarais mes BITMAP globaux ainsi:
// Image lors de l'établissement d'un nouveau record
BITMAP *record1 = &(BITMAP){ 58, 58, {
63,255...
}};

Mais maintenant TIGCC me renvoie une erreurconfus est-ce normal

Donc maintenant j'utilise:
// Image lors de l'établissement d'un nouveau record
BITMAP record1 = {58, 58, {
63,...
}};

et dans les appels je dois passer "&record1" au lieu de "record1"sad
Plis fòs ba pengwen là !

mon site: http://www.slubman.info/
partie GP32: http://www.slubman.info/gp32
partie TI: http://www.slubman.info/ti

6

slubman a écrit :
Bon autre problème avec TIGCC 0.94 b18

Avant je déclarais mes BITMAP globaux ainsi:
// Image lors de l'établissement d'un nouveau record
BITMAP *record1 = &(BITMAP){ 58, 58, {
63,255...
}};

Mais maintenant TIGCC me renvoie une erreurconfus est-ce normal


Il me semble que oui. Tu ne peux pas initialiser un pointeur global avec autre chose qu'une adresse constante, ou une adresse d'une variable globale (ce qui donnera un relogement). Si tu insistes vraiment, il doit être possible de patcher GCC 3.1 pour qu'il le permette (à condition que ce que tu mets dans ton &(BITMAP)... est constant), mais je ne sais pas si c'est une bonne idée, et il faudra que tu attendes un peu, parce que là, je suis occupé par porter mes TSRs vers la V200.

Sinon, à priori:
BITMAP *record1=&record1_data;
BITMAP record_data={...};

devrait passer.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

7

Mais non là je chipotait, je vais conserver l'ajout de "&" lors de l'utilisationgrin

Pour mon prog au début, maintenant avec realloc ça marche impec et je n'ai aucun pb à l'execution sur 92+ (passe toujours pas sur ma 89)

Bon encore une question:
Pourquoi:
CALCULATOR ? "pour 92+etV200" : "pour la 89", ne marche pas (la V200est reconnu comme une 89 dans ce cas) alors que CALUCLATOR==1 || CALCULATOR==3 ? "pour 92+ et V200" : "pour 89" marche???
Plis fòs ba pengwen là !

mon site: http://www.slubman.info/
partie GP32: http://www.slubman.info/gp32
partie TI: http://www.slubman.info/ti

8

Peut-être un problème avec nos macros.
Essaye de mettre CALCULATOR entre parenthèses.

Mais je ne vois rien dans nos macros qui pourrait être le problème.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

9

Bon le prog ne passe toujours pas sur 89, j'ai ajouté un test pour les alloctions de mémoire

Le bogue:
Le programme trouve bien tout les dossiers, mais au moment d'afficher le contenu du dossier "main" j'obtient juste:
Dossier: main
Liste obtenu
puis une barre noire avec adresse errorconfus

PS voici encore une modification de la source: // C Source File // Created 22/06/02; 18:30:30 #define USE_TI89              // Produce .89z File #define USE_TI92PLUS          // Produce .9xz File #define OPTIMIZE_ROM_CALLS    // Use ROM Call Optimization #define SAVE_SCREEN           // Save/Restore LCD Contents #include <tigcclib.h>         // Include All Header Files // Vérification de la compatibilité primaire d'un fichier (extension=F1) char ismy(FILE *fichier) {      // Vérification de la compatibilité primaire d'un fichier      short type;      // On regarde le type dans la VAT est bien OTHER      fseek(fichier, -1, SEEK_END);      type=fgetc(fichier);            // On regarde si le type personnalisé est bien MY      fseek(fichier, -4, SEEK_END);      if ((fgetc(fichier)=='M') && (fgetc(fichier)=='Y') && (type==0xF8)) return 1;      else return 0; } // Main Function void _main(void) {      char (*nom_dossiers)[9]=NULL;      char (*nom_fichiers)[9]=NULL;      char buff[10];      char buff2[20];      FILE *fichier=NULL;      short j=1, k=0, l=0, error=0;      SYM_ENTRY *dossiers=NULL;      SYM_ENTRY *fichiers=NULL;      clrscr();      FontSetSys(1);      nom_dossiers=malloc(9);      nom_fichiers=malloc(9);      if (!nom_dossiers || !nom_fichiers) {error=1; goto c_end;} /* On recherche la liste de touts les dossiers présent sur la TI */      /* On parcourt une première fois pour savoir le nombre de répertoires présent */           k=0;           dossiers=SymFindFirst(NULL, 4);           printf("Liste obtenuen");           while (dossiers)           {                if (!(nom_dossiers=realloc(nom_dossiers, 9*(k+1)))) {error=1; break;}                if (!strcmp(dossiers->name, "main")) j=k;                strcpy(nom_dossiers[k], dossiers->name);                printf("%d. %sn", k, nom_dossiers[k]);                k++;                dossiers=SymFindNext();           }           if (error) goto c_end;           // Appui sur une touche           ngetchx(); /* On recherche la liste de toutes les variables présente dans le dossier sélectionner */           clrscr();      /* On parcourt une première fois pour savoir le nombre de fichiers présent */           l=0;           buff[0]=0;           printf("Dossier:%sn", nom_dossiers[j]);           printf("Liste obtenuen");           fichiers=SymFindFirst(strcpy (buff + 1, nom_dossiers[j])+strlen (nom_dossiers[j]), 1);           while (fichiers)           {                sprintf(buff2, "%s%s", nom_dossiers[j], fichiers->name);                if ((fichier=fopen(buff2, "rb")))                {                     if (ismy(fichier))                     {                          if (!(nom_fichiers=realloc(nom_fichiers, 9*(l+1)))) {error=1; break;}                          strcpy(nom_fichiers[l], fichiers->name);                          printf("%d.%sn", l, nom_fichiers[l]);                          l++;                     }                     fclose(fichier);                }                fichiers=SymFindNext();           }           if (error) goto c_end;           // Appui sur une touche           ngetchx(); c_end:      if (nom_dossiers) free(nom_dossiers);      if (nom_fichiers) free(nom_fichiers);      if (error)      {           clrscr(),           printf("Pas assez de mémoiren");           ngetchx();      } }
Plis fòs ba pengwen là !

mon site: http://www.slubman.info/
partie GP32: http://www.slubman.info/gp32
partie TI: http://www.slubman.info/ti

10

Tu ne peux pas faire un realloc sans rien allouer avant. Et un realloc ne teste rien du tout.

Ce qu'il te faut, c'est:
nom_dossiers=calloc(k+1, sizeof(*nom_dossiers));
if (!nom_dossiers) {ST_helpMsg("Not enough memory")return;}
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

11

C changé mais ça plante toujoursmad

Kévin: une question, quand tu fais (calloc(k+1, sizeof(*nom_dossiers)))
la premiere fois on alloue 9 bits, la deuxieme 18 bits, mais la troisième 3*18=54 bits là ou en a besoin de 27what
Plis fòs ba pengwen là !

mon site: http://www.slubman.info/
partie GP32: http://www.slubman.info/gp32
partie TI: http://www.slubman.info/ti

12

Je n'ai copié que ce que tu as mis. Donc si c'est faux, c'est que tu t'es trompé, toi.

Je pense que je vois le problème.
Essaye ça:
          if (!(nom_dossiers=malloc(0))) {error=1;goto c_end;} // pour avoir un bloc à réallouer
          while (dossiers)
          {
               if (!(nom_dossiers=realloc(nom_dossiers, 9*(k+1)))) {error=1; break;}
               if (!strcmp(dossiers->name, "main")) j=k;
               strcpy(nom_dossiers[k], dossiers->name);
               printf("%d. %sn", k, nom_dossiers[k]);
               k++;
               dossiers=SymFindNext();
          }
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

13

Et mets des conditions à tes free! free(0) fait tout planter!!!
     [b]if (nom_dossiers)[/b] free(nom_dossiers);
     [b]if (nom_fichiers)[/b] free(nom_fichiers);
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

14

Réponse: marche toujours pas sur 89;

Je pense pas que le pb viens des dossiers la preuve j'obtient le deuxiéme écran et je cherche dans "main" je le sait à cause de l'affichage "dossier: mainnListe obtenue" provoqué par la ligne:
printf("Dossier:%sn", nom_dossiers[j]);
printf("Liste obtenuen")

J'ai même le primeier nom de la variable dans main que j'ai crée et qui à l'extension "MY"
Plis fòs ba pengwen là !

mon site: http://www.slubman.info/
partie GP32: http://www.slubman.info/gp32
partie TI: http://www.slubman.info/ti

15

Tu dois évidemment faire les mêmes changements dans la 2ème boucle!
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

16

Ca aussi c'est modifié
Plis fòs ba pengwen là !

mon site: http://www.slubman.info/
partie GP32: http://www.slubman.info/gp32
partie TI: http://www.slubman.info/ti

17

Maintenant je test aussi que le fichier a bien été ouvert, mais ça plante toujours sur ma 89rage

Voici les deux fichier qui sont censé aparaitre dans main: my.89g

Normalement quand on les palce sur sa TI (dans MAIN) le prog est censé après avoir affiché touts les répertoires présents sur la TI affiché le nom de ces 2 fichiers

Un exemple sur ma 92+:
my.gif
Plis fòs ba pengwen là !

mon site: http://www.slubman.info/
partie GP32: http://www.slubman.info/gp32
partie TI: http://www.slubman.info/ti

18

Personne n'a une idée d'ou le bogue peut venirwhat
Plis fòs ba pengwen là !

mon site: http://www.slubman.info/
partie GP32: http://www.slubman.info/gp32
partie TI: http://www.slubman.info/ti

19

Bon ci dessous vous trouvez un code que j'utilise dans un projet plus gros, j'ai renommé la fonction _main, mais son nom dans le projet est charger_images.
Le but de cette fonction est de charger les images necessaires au programme qui sont stockée dans un fichier externe n'importe où sur la TItop
Ca marche sur 92+ et pas sur 89sad

Ajoter ceci au début:
// Pour faciliter l'écriture du programme
#include <tigcclib.h>

#define _c (sizeof(char))
#define _s (sizeof(short))
#define _l (sizeof(long))
#define _b _c
#define entete "imagesmy" #define version_images 1 #define sous_version_images 0 #define revision_images 0 void _main(void) {      char error=0, buff[18]="", entete[9]="";      FILE *fichier;      SYM_ENTRY *dossiers=NULL;      dossiers=SymFindFirst(NULL, 4);      do      {           buff[0]=0;           FolderCur(strcpy (buff + 1, dossiers->name)+strlen (dossiers->name), FALSE);           // Vérification de la non existence du fichier           if (!(fichier=fopen("imagesmy","rb"))) error=2;           else           {                // Le fichier trouvé est bien de type MY                if ((ismy(fichier)!=1))                {                     error=2;                     fclose(fichier);                }                else                {                     // Lecture du début du fichier contenant les images                     // On se place au début du fichier                     fseek(fichier, 0, SEEK_SET);                     /*                     Les éléments permettant d'identifier avec précision le programme                     et qui empeche de charger des données provenant d'une autre "version" du programme                     */                     fgets(entete, 9*_c, fichier);                     /*                     Les données ne sont chargée que ci le fichier de                     sauvegarde correspond à la version du programmes.                     */                     if ((fgetc(fichier)==version_images) && (fgetc(fichier)==sous_version_images) && (fgetc(fichier)==revision_images) && (!strcmp(images, entete)))                     {                          ST_helpMsg("Chargement images...");                          // Lecture des images                          fread(intro0, 3046*_b, 1, fichier);      // Image d'intro LIGHT_PLANE                          fread(intro1, 3046*_b, 1, fichier);      // Image d'intro DARK_PLANE                          fread(pointeg, _l, 32, fichier);                          fread(ipointeg, _l, 32, fichier);                          fread(pointed, _l, 32, fichier);                          fread(ipointed, _l, 32, fichier);                          fread(opointeg, _s, 16, fichier);                          fread(iopointeg, _s, 16, fichier);                          fread(opointed, _s, 16, fichier);                          fread(iopointed, _s, 16, fichier);                          fread(car, _l, 32, fichier);                          fread(icar, _l, 32, fichier);                          fread(card, _l, 32, fichier);                          fread(icard, _l, 32, fichier);                          fread(carg, _l, 32, fichier);                          fread(icarg, _l, 32, fichier);                          error=0;                     }                     else error=2;                     fclose(fichier);                }                // Fin de Le fichier trouvé est bien de type MY           }           dossiers=SymFindNext();      }      while (dossiers && error);      if (error) return;      // Archivage de la variable de stockage des images      EM_moveSymToExtMem($(imagesmy), HS_NULL);

C'est comme l'autre source que j'ai rendu indépendant pour mon test, masi qui fait parytie de ce projet
Plis fòs ba pengwen là !

mon site: http://www.slubman.info/
partie GP32: http://www.slubman.info/gp32
partie TI: http://www.slubman.info/ti

20

Déjà, c'est du stdio.h ça, pas du vat.h comme tu me disais par mini-message.

Ensuite: je vais voir ce qui ne marche pas au débogueur de VTI.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

21

Pour ceux qui ce le demanderait voici ismy:
// Vérification de la compatibilité primaire d'un fichier (extension=MY) char ismy(FILE *fichier) {      // Vérification de la compatibilité primaire d'un fichier      short type;      // On regarde le type dans la VAT est bien OTHER      fseek(fichier, -1, SEEK_END);      type=fgetc(fichier);            // On regarde si le type personnalisé est bien MY      fseek(fichier, -4, SEEK_END);      if ((fgetc(fichier)=='M') && (fgetc(fichier)=='Y') && (type==0xF8)) return 1;      else return 0; }
Plis fòs ba pengwen là !

mon site: http://www.slubman.info/
partie GP32: http://www.slubman.info/gp32
partie TI: http://www.slubman.info/ti

22

Refais cette fonction avec les fonctions de vat.h, elle prendra beaucoup moins de place :
BOOL ismy(FILE *fichier) {
  HANDLE handle = fichier->handle;
  unsigned char *pFichier;
  pFichier = HToESI(handle); // On se place sur le tag de fin de fichier.

  if((*pFichier--) == OTH_TAG) {
     if((*pFichier-- == 0) &&
        (*pFichier-- == 'Y') &&
        (*pFichier-- == 'M') &&
        (*pFichier == 0))
     return TRUE;
  }
  else return FALSE;
}


Je n'ai pas testé, ça devrait marcher wink

23

Les prog pesent légerement moins mais ça ne marche toujours passad
Plis fòs ba pengwen là !

mon site: http://www.slubman.info/
partie GP32: http://www.slubman.info/gp32
partie TI: http://www.slubman.info/ti

24

Ca marche maintenant



Le problème venat surement de ma ROM qui devais être corrompu, j'ai reflashé ma 89 et j'ai beau faire des manip stupide l'algo marche à tout les coups ou renvoie une erreru en bonne et du forme sans se plantertoptoptop

Merci janjan2 pour m'avoir conseiller de reflasher ma 89
Plis fòs ba pengwen là !

mon site: http://www.slubman.info/
partie GP32: http://www.slubman.info/gp32
partie TI: http://www.slubman.info/ti