Forum Liberty Basic France
• Index
Bonjour !
Rien ne résiste à l'analyse
Enfin presque, parce que je ne suis pas certain d'avoir trouvé la réelle cause du problème, le code malade s'étant mis à ne plus le reproduire. Mais il en fait d'autres, et c'est un problème de conception de ma part.
En tout cas, lorsque dans le tableau listant les noms de fichiers et de dossiers, je fournis un index plus grand que la somme des quantités de fichiers et dossiers, le "system primitive failed" arrive.
Voici, pour info, ce code. Il est extrait de la discussion "shoot'em up '80", plus précisément du zip generesprite001-04_1
Code VB :
Dans ce code, l'erreur est dans la composition du premier index de info$(a,b) : il vaut "compteur de boucle + 2" alors qu'il aurait dû être "nombre de fichiers + 1 + compteur de boucle". En outre, le +2 devait sûrement permettre de dépasser la capacité du tableau, et de provoquer le "system primitive failed".
Quoi qu'il en soit, j'ai rectifié et simplifié la routine en :
Code VB :
MKDIR renvoie le code 183 quand il veut créer un dossier qui existe déjà, et 0 quand tout se passe comme prévu :
Code VB :
Rien ne résiste à l'analyse

Enfin presque, parce que je ne suis pas certain d'avoir trouvé la réelle cause du problème, le code malade s'étant mis à ne plus le reproduire. Mais il en fait d'autres, et c'est un problème de conception de ma part.
En tout cas, lorsque dans le tableau listant les noms de fichiers et de dossiers, je fournis un index plus grand que la somme des quantités de fichiers et dossiers, le "system primitive failed" arrive.
Voici, pour info, ce code. Il est extrait de la discussion "shoot'em up '80", plus précisément du zip generesprite001-04_1
Code VB :
' fichiers dosspr$="sprites" 'contiendra les sprites créés dosmat$="matrices" 'et les matrices sauvegardées par l'utilisateur 'vérifier la présence des dossiers et les créer au besoin 'test de l'existence des dossiers dim info$(10, 10) files DefaultDir$, info$() 'on travaille dans le même dossier que le programme nbdossiers=val(info$(0,1)) 'nombre de dossiers trouvés 's'il n'y a pas de dossiers if nbdossiers=0 then 'on les créée numdosm=mkdir(dosmat$) numdoss=mkdir(dosspr$) 'si la création se passe mal, on prévient l'utilisateur if numdosm<>0 then notice "1. erreur ";numdosm;", le dossier ";dosmat$;" n'a pas été créé" if numdoss<>0 then notice "2. erreur ";numdoss;", le dossier ";dosspr$;" n'a pas été créé" else 'il y a des dossiers 'on en fait le tour à la recherche des dossiers attendus dosm=0:doss=0 for dossier=1 to nbdossiers fi$=info$(dossier+2, 1) 'pourquoi +2 ? if fi$=dosmat$ then dosm=dosm+1 if fi$=dosspr$ then doss=doss+1 next 's'il manque le dossier des matrices if dosm=0 then 'on le créé numdosm=mkdir(dosmat$) if numdosm<>0 then notice "3. erreur ";numdosm;", le dossier ";dosmat$;" n'a pas été créé" end if 's'il manque le dossier des sprites if doss=0 then 'eh bien on le créée aussi numdoss=mkdir(dosspr$) if numdoss<>0 then notice "4. erreur ";numdoss;", le dossier ";dosspr$;" n'a pas été créé" end if end if
Dans ce code, l'erreur est dans la composition du premier index de info$(a,b) : il vaut "compteur de boucle + 2" alors qu'il aurait dû être "nombre de fichiers + 1 + compteur de boucle". En outre, le +2 devait sûrement permettre de dépasser la capacité du tableau, et de provoquer le "system primitive failed".
Quoi qu'il en soit, j'ai rectifié et simplifié la routine en :
Code VB :
'test de l'existence des dossiers dim info$(10, 10) files DefaultDir$, info$() 'on travaille dans le même dossier que le programme nbdossiers=val(info$(0,1)) 'nombre de dossiers trouvés nbfichiers=val(info$(0,0)) 'nombre de fichiers trouvés 'on fait le tour des dossiers trouvés dosmat$="matrices" dosspr$="sprites" mat=0 '0=dossier des matrices à crééer, 1=dossier existe déjà spr=0 '0=dossier des sprites à crééer, 1=dossier existe déjà for nbd=1 to nbdossiers a$=info$(nbfichiers+nbd, 1) if a$=dosmat$ then mat=1 if a$=dosspr$ then spr=1 next 'si le dossier des matrices n'existe pas, on le créée if mat=0 then numdosm=mkdir(dosmat$) if numdosm<>0 then notice "Erreur ";numdosm;", le dossier ";dosmat$;" n'a pas été créé" end if 'si le dossier des sprites n'existe pas, on le créée if spr=0 then numdoss=mkdir(dosspr$) if numdoss<>0 then notice "Erreur ";numdoss;", le dossier ";dosspr$;" n'a pas été créé" end if
MKDIR renvoie le code 183 quand il veut créer un dossier qui existe déjà, et 0 quand tout se passe comme prévu :
Code VB :
'créer un dossier ch$=DefaultDir$;"\le dossier" d=mkdir(ch$):print d d=mkdir(ch$):print d
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Citation:
Bah alors c'est normal.
Citation:
Qu'importe le code d'erreur puisque elle est sans effet.
Il n'en va pas de même à la destruction.
index plus grand que la somme des quantités de fichiers et dossiers, le "system primitive failed"
arrive.
arrive.
Bah alors c'est normal.
Citation:
MKDIR renvoie le code 183 quand il veut créer un dossier qui existe déjà
Qu'importe le code d'erreur puisque elle est sans effet.
Il n'en va pas de même à la destruction.
____________________
Roro
Roro
Bah oui c'était normal, encore fallait-il trouver ce qui coinçait... Le code d'erreur 183 est mentionné pour info : si à l'avenir dans nos projets on le rencontre a nouveau, on saura qu'il y a déjà un dossier du même nom que celui qu'on veut créer.
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Citation:
De toutes façons, Windows refuse de créer un dossier au nom d'un existant.
Il faudrait voir si la recréation écrase ou est ignorée.
on saura qu'il y a déjà un dossier du même nom que celui qu'on veut créer.
De toutes façons, Windows refuse de créer un dossier au nom d'un existant.
Il faudrait voir si la recréation écrase ou est ignorée.
____________________
Roro
Roro
• Index
1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie