30

tu peux tout à fait ne pas n'utiliser que les symfind/symadd en lisant tout simplement dans la mémoire du Handle de la variable:

La SYM_ENTRY contient un champ handle, puis du fais (en lecture)
char *ptr;
HANDLE h;
h=DerefSym(hSym/*la valeur retournée par symfind*/)->handle
HeapLock(h);
ptr=HeapDeref(h);
//tes fonctions de lecture ici
HeapUnlock(h);

en écriture, c'est plus compliqué, regarde à la fonction SymAdd de TIGCC
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

31

Dans tigcc, tu as simplement du code qui te montre comment faire, mais ce n'est pas optimal ce qui a été écrit par zejlko

32

tu peux aussi regarder la source de othello par F. Leiber [url=http://leiber.free.fr/ti/othello2/Othello II.zip][/url]
(je n'ai pas bien compris comment il fait mais bon)

33

Pour info, Link:
"
HeapLock(h);
ptr=HeapDeref(h);
"
peut être remplacé par "ptr=HLock(h);". HLock est un ROM_CALL (ROM_CALL_99).
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

34

sinon, existe t'il un moyen d'écrire direct dans la mem flash (pour modifier des fichier archivés sans modifier leur taille????? ) parce que,si ca existe ca me rendrait grandement service ;..

35

jibax-> je ne crois pas, il me semble qu'il faut toujours les passer en RAM pour les modifier.
XDanger-> Merci, je ne retrouvais plus le bon ROM_CALL...
avatar
Maintenant j'ai la flemme de garder une signature à jour sur ce site. Je n'ai même plus ma chaîne Exec sous la main.

36

Link:
void FL_write (const void *src, void *dest, unsigned long size);

FL_write writes a size bytes long block which begins at address pointed to by src into the [b]Flash ROM[/b] at the address dest.


Moi, je crois pas qu'il faille repasser en RAM ...

37

Merci, c'est cool ca

38

Attend ... pas de méprise, écrire en FLASH, c'est pas écrire en mémoire archive, t oki ?

39

beinnn heuu bon en fait non, j'avais pas compris, mais je viens d'essayer et ca me retourne une erreur comme koi, le fichier est archivé.. sad

bo je vais donc archiver puis desarchiversad ou le contraire plutot

40

Attention avec FL_write parce qu'on ne peut pas tout faire avec. Cf. http://pub26.ezboard.com/ftichessteamhqfrm5.showMessage?topicID=2201.topic, où on vient de discuter de ça.
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é

41

Merci KK, j'allais le poster en fait, j'ai vu ce topic sur votre board ...

jibax: archive/desarchive si c pour un fichier ...

42

une question : c'est normal que fgetc() ne lise pas la premiere ligne dun fichier ?

43

fgetc() lit caractère par caractère. Mais il devrait lire le fichier en entier, y compris la première ligne. Donc non, ce n'est pas normal.
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é

44

Un fseek est-il nécessaire avant de commencer à lire ? Si ça ne l'est pas, ça pourrait expliquer le problème (je n'y crois pas du tout, mais bon...).
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

45

avec ou sans fseek jai le meme probleme

46

jhesite entre les fonctions fopen() et consorts et les fonction sym_machins

47

Fonctions de stdio.h: avantage principal: facilité d'utilisation, inconvénients principaux: plus gros et plus lent. Ca permet de porter les programmes plus facilement depuis le PC.
Fonctions de vat.h: le contraire. Tu contrôles pleinement tout ce que tu veux, tu peux même faire n'importe quoi, ce qui est plus difficile avec les fonctions de stdio.h.
avatar
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
Co-admin de TI-Planet.

48

Personnelement j'utilise les sym parce que ça va plus vite.

Tu procéde comme ça:

Ton code:
SYM_ENTRY *entry;
void *ptr;
entry=DerefSym(SymFind(SYMSTR("main\myfile)));
ptr=HeapDeref (entry->handle);

Si entry est différent de NULL c'est tout bon.
Après pour lire tu fait ça:
*(BYTE*)(ptr+52); Lit l'octet numéro 52.
Encore mieux avec memcpy.
memcpy (buffer,ptr,52); Copie dans buffer les 52 premeier octet du fichier...
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

49

#47 > ok je verrais ca

typedef struct {
 int w,h;
 int spDat[3];
 int mat[w][h];
} niveauL;

ca ca marche pas mais on ne peut pas utiliser un pointeur pour fixer la taille de 'mat' ? ou alors on est obligé de fixer une valeur maximale par avance (alourdit la RAM) ?

50

Je pense mais je suis pas sur que si tu alloue ta structure en émoire et que tu définit des valeurs pour w et h ça marche.
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

51

oui tu peux faire ca:
typedef struct {
 int w,h;
 int spDat[3];
 int **mat; [i]// a la rigueur (*mat)[h][/i]
} niveauL;


et tu devras allouer matt dans ta structure et ta structure avant si tu utilise un pointeur pour la déclarer dans ton prog

52

C'est n'importe quoi. On ne peut pas mettre des pointeurs dans un fichier.

Ce qu'il faut faire est:
charge_niveau:
{
  int w,h;
  fread(&w,2,1,f); // ou l'équivalent avec vat.h
  fread(&h,2,1,f); // ou l'équivalent avec vat.h
  struct {
    int spDat[3];
    int mat[w][h];
  } donnees;
  fread(&donnees,sizeof(donnees),1,f); // ou l'équivalent avec vat.h
  // faire ce que tu veux avec ton niveau
}


Pour recharger un nouveau niveau, il faut repartir du label charge_niveau, comme ça ta structure donnees sera redéfinie avec la bonne taille.
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é

53

hum
oir faire : niveauL nvo[nb_de_niveaux];moi en fait je voulais pouv
je relirais tout ca demain (après avoir réinstallé win sur mon nouveau dd)

54

(mais je peux p-e recharger les niveaux a partir du fichier a chaque fois, si le tableau de niveaux ne marche vraiment pas)

55

Si tu utilises vat.h, "charger" le niveau à partir du fichier ne coûte rien vu qu'il suffit de calculer le bon pointeur pour pouvoir lire directement (pas besoin de recopier quoi que ce soit).
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é

56

avec les fonctions de stdio il suffit de repositionner le pointeur de lecture...

57

Mais avec les fonctions de stdio.h, tu dois tout recopier! Avec vat.h, tu peux lire directement dans le fichier à travers un simple pointeur. (Même s'il est archivé.) Cela économise de la RAM, et tu gagnes aussi du temps vu que tu ne dois rien recopier.
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é

58

Kevin Kofler :
C'est n'importe quoi. On ne peut pas mettre des pointeurs dans un fichier.


Pke il parlait de fichier ? J'ai pas vu ce mot dans le post et je pensais que ct une qn générale ...

59

la structure aurait servi pour chaque niveau. je ne connais pas a lavance la taille du niveau (du moins pas quand je crée le tableau de niveaux)

60

Tu ne peux pas définir un tableau C si la taille des éléments n'est pas la même. Un tableau est un regroupement d'éléments de même taille.
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é