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
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é!
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 erreurest-ce normal
// 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();
}
}
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(); }
[b]if (nom_dossiers)[/b] free(nom_dossiers); [b]if (nom_fichiers)[/b] free(nom_fichiers);
#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);
// 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;
}
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; }