1

Suis-je obligé de copier dans un fichier externe un à un les élément d'une structure.
N'y a t-il pas moyen de faire une copie en une seule fois de toute la structure ?

C'est une structure qui contient un pointeur sur une autre structure.
Cette autre structure est allouée dynamiquement.
Elle contient à la fois des chaînes et des entiers.

J'ai fait une fonction qui lit le Type et copie ensuite dans le fichier.
S'il n'y a que cette façon de faire pour sauver en externe une structure c'est pas Top.

Peut-on connaître la taille d'une Structure ? j'ai cru comprendre que sizeof() ne donne pas de bon résultats.

2

memcpy. Et oui, sizeof donne la bonne taille.
En revanche, si par "chaînes", tu veux dire "pointeurs", ça ne va pas aller, tu ne peux pas mettre des pointeurs dans des fichiers, même en copiant élément par élément.
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é

3

même si le pointeur est alloué dynamiquement par la suite ?
voici ma structure et elle comporte un pointeur sur une structure EXPR qui elle même
comporte un pointeur sur chaîne.
Tous les pointeurs sont alloué dynamiquement par la suite.


//Structure de sauvegarde des entiers et chaînes
typedef struct{
short type;
long num;
char *str;
} EXPR;
//****************************************************************************
//Structure des Variables Internes
struct {
short type,dim1,dim2;
EXPR *data;//Pointeur pour l'allocation dynamique de TABLEAU des données
} VAT[NBR_MAX_STRUCT_INTERNE];


Tu veux donc dire que je ne peux pas faire un fichier Externe avec des données de taille variables en copiant tout d'un coup si j'utilise des pointeurs dans mes structures.

Quelle galère !

4

andoh_wilfried
: Tu veux donc dire que je ne peux pas faire un fichier Externe avec des données de taille variables en copiant tout d'un coup si j'utilise des pointeurs dans mes structures.

Exactement. (Sauf si tu leakes de la mémoire en laissant traîner des handles alloués en dehors de ton fichier, ce qui n'est vraiment pas conseillé.)
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é

5

6

Mais du coup, les pointeurs ne sont plus valides!
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

8

tu peux très bien laisser traîner des handles en kernel
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

9

10

kernel::HdKeep (PreOs 0.52 minimum)
Mais je ne vois pas en quoi "ça t'obligerait à programmer en nostub" serait un problème. smile
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

12

sauf que "faire hurler" Kevin n'est pas le but ici ; en tout cas, pas sur le forum TI.
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

13

Quelle affreuse nouvelle d'apprendre que je ne pourrai pas sauvegarder Les structures de ma LIB basic en fichier externe.
En fait je voulais convertir en structure C mes Listes et Matrix du Basic, histoire de voir si je gagnait significativement en rapidité plutôt que de lire tout le temps ces données dans la pile.

Faudra que je laisse tomber , quelle dommage!

14

15

Ce probleme n'est pas specifique aux TI. On ne peut pas sauver de pointeur dans un fichier.

16

Martial Demolins -> C'est déjà prévue et déjà fait.

J'ai penser qu'il serait intéressant lorsqu'on a des variables Globales dans un Jeu ou Prog, de les garder tout le temps au format des Structures internes de la LIB, plutot que de les charger du Format Basic au Format C à chaque lancement du prog.

J'avais espéré gagner le temps de conversion des types de Variable.

Si les entiers et chaînes des languages Basic et C ont des structures similaires, là je me fatigue pour pas grand chose.

Dans ce cas je laisse tomber.


-------------------------------------------------------------------------------------------------------------
A tout hasard vue que l'allocation dynamique reserve de la mémoire dans la VAT sans lui affecter une Entrée dans la VAT, qu'arriverait-il si une fois ma structure crée, j'affectait son handle à une nouvelle entrée dans la VAT.

-> K.K. : c'est bien cela que tu expliquais par 'leakes' ?

ça donnerait quoi comme affichage dans le VAR-LINK ? (Bug)
Parceque Si y a pas de bug alors ça peut s'archiver non !
------------------------------------------------------------------------------------------------------------

17

si tu affectes l'entrée dans la VAT, il faut que tu lui donnes un type et une taille comme toute variable, sinon ça peut faire des bugs
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

18

-peut +va

19

Vu comme c'est parti, je vais laisser tomber l'externalisation de mes structures internes.


Au fait existe-t-il un convertisseur de PIC en SPRITE. j'en ai pas trouvé sur ticalc.org.
Disons que j'ai envie d'accélérer un peu l'affichage des image basic.
Alors le but c'est de Convertir une Matrix de PIC formant un MAP en SPRITE utilisable en C .
Je converti le tout en Sprite dans un fichier externe.

Je donnerai accès au fonction d'affichage de sprite dans la LIB.

20

Bon tout compte fait le seul choix que j'ai dans ce genre de cas c'est de copier un par un chaque élément de ma structure dans un fichier externe.

_______________________________________________________________________________________________________________________

J'ai une question toute bête à propos de 'memcpy' :

void *memcpy (void *dest, const void *src, unsigned long len);

Dans la DOC, c'est pas explique la façon dont procède cette fonction.

Je veux copier directement des données de l'estack pour créer des Variable du TioS.
Comme dans EStACK on pointe sur la fin du fichier et que le compteur se décrémente ,
J'ai besion d'avoir plus de précision sur 'memcpy'.

Cette fonction procède surement en incrémentant les pointeur *dest et *src.

Dans ce cas il faut que Je pointe dans l'estack au début du fichier.

21

andoh_wilfried
: Cette fonction procède surement en incrémentant les pointeur *dest et *src.

Ben évidemment.
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é

22

ça n'a rien avoir mais comment on fait un MASK , avec TIGCC uniquement ?

23

andoh_wilfried
: ça n'a rien avoir mais comment on fait un MASK , avec TIGCC uniquement ?

AND avec le masque, puis OR du sprite.
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é

24

Merci

25

andoh_wilfried :
Vu comme c'est parti, je vais laisser tomber l'externalisation de mes structures internes.


Au fait existe-t-il un convertisseur de PIC en SPRITE. j'en ai pas trouvé sur ticalc.org.
Disons que j'ai envie d'accélérer un peu l'affichage des image basic.
Alors le but c'est de Convertir une Matrix de PIC formant un MAP en SPRITE utilisable en C .
Je converti le tout en Sprite dans un fichier externe.

Je donnerai accès au fonction d'affichage de sprite dans la LIB.


Pour faire déraper la conversation un peu ...

Je vous conseille d'utiliser le Java (en fait, mon convertisseur Moka) pour ce que vous voulez faire ... Il y a des objets – ça peut remplacer une structure - sérialisables qui s'écrivent et se lisent dans des fichiers comme tout autre type de données... Évidemment, bonjour l'overhead et on ne peut pas encore sérialiser de structure de données récursives (i.e. où le parent pointe vers l'enfant en même temps que l'inverse), mais c'est vraiment convivial...

Pour tes PIC, l'API de Moka offre des méthodes pour les afficher directement, ex :
Graph.picVarPut("mypic", 10, 10, Graph.A_NORMAL) ;

Je m'attend à ce que les puristes vous déconseillent de l'utiliser, mais tant qu'à laisser tomber votre projet ...

26

andoh_wilfried :
même si le pointeur est alloué dynamiquement par la suite ?
voici ma structure et elle comporte un pointeur sur une structure EXPR qui elle même comporte un pointeur sur chaîne.

Tous les pointeurs sont alloué dynamiquement par la suite.

//Structure de sauvegarde des entiers et chaînes
typedef struct{
short type;
long num;
char *str;
} EXPR;
//****************************************************************************
//Structure des Variables Internes
struct {
short type,dim1,dim2;
EXPR *data;//Pointeur pour l'allocation dynamique de TABLEAU des données
} VAT[NBR_MAX_STRUCT_INTERNE];


Tu veux donc dire que je ne peux pas faire un fichier Externe avec des données de taille variables en copiant tout d'un coup si j'utilise des pointeurs dans mes structures.

Quelle galère !



si j'affecte le Handle de ma structure EXPR *data qui est allouée dynamique à une variable TioS PERSO je doit donc faire sizeof(data) pour obtenir sa taille.



Comment fait sizeof : il parcours les élément de les données dans la structure pour calculer la taille de chaque élément y compris des pointeurs interne à la structure eux même alloué dynamiquement ???????????

( je suis un peu stressé pour la Taille qouique Kevin a dit que ça marche)


j'ajoute ensuite ce qu'il faut pour l'extension et je crée un Fichier Perso.

Mais là ou j'ai peur c'est lorsque je vais loader ma structure prochainement :
mes pointeurs seront-ils toujours valides ???

C'est vilais et sale ce Hack, va falloir que j'arrête ça black

27

andoh_wilfried :
si j'affecte le Handle de ma structure EXPR *data qui est allouée dynamique à une variable TioS PERSO je doit donc faire sizeof(data) pour obtenir sa taille.

En fait sizeof(data) == sizeof(EXPR *), donc 4 octets ... Je ne pense pas que c'est ce que vous cherchez ...
La taille de la structure EXPR est donnée par sizeof(EXPR).
andoh_wilfried :
Comment fait sizeof : il parcours les élément de les données dans la structure pour calculer la taille de chaque élément y compris des pointeurs interne à la structure eux même alloué dynamiquement ???????????

( je suis un peu stressé pour la Taille qouique Kevin a dit que ça marche)

Si je ne me trompe pas, la 'fonction' sizeof s'exécute à la compilation non pas à l'exécution. Le compilateur n'a aucun moyen de savoir la taille de ce qui est pointé par data à ce moment ...

Pour :

typedef struct{
short type;
long num;
char *str;
} EXPR;

sizeof(EXPR) == sizeof(short) + sizeof(long) + sizeof(char *)

Si str pointe vers une chaîne, la longueur de cette dernière ne sera pas ajouté à la somme. Encore une fois, sizeof(char *) retourne la taille d'un pointeur (4 octets).

Lorsqu'il y a une structure d'imbriquée (une structure je dis, non pas un pointeur vers une structure), elle est évidemment considérée comme n'importe quel autre type et sa taille est ajoutée à la somme.
andoh_wilfried :
Mais là ou j'ai peur c'est lorsque je vais loader ma structure prochainement :
mes pointeurs seront-ils toujours valides ???

En théorie, non. Vous devez charger à partir du fichier les structures une par une et, ensuite, assigner les pointeurs.

28

Merci Quesoft

Tu sais tu peux arrêter de vouvoyer tout le monde ici.
C'est un grande famille la communauté TI, on est tous un peu des intimes par le biais de nos TI.
Alors ça fait de nous plus que des inconnus qui partage la même folie des Calc.

29

andoh_wilfried :
Merci Quesoft

Tu sais tu peux arrêter de vouvoyer tout le monde ici.
C'est un grande famille la communauté TI, on est tous un peu des intimes par le biais de nos TI.
Alors ça fait de nous plus que des inconnus qui partage la même folie des Calc.

C'est noté... Bonne chance pour ton projet...

30

C'est noté ... Il me reste la Gestion des Sprites à faire et c'est là Beta.

Disons 2 semaines à tout casser.