30

OK, mais tu stockes la liste de tes répertoires dans une liste de 20 emplacements. Ce qui fait que si on a plus de 20 dossiers, ça ne fonctionnera pas. Et de toute façon, 20 longword font perdre pas mal de place (80 octets) pour pas grand chose.
Le mieux en fait, c'est de mettre tout ça dans la pile au fur et à mesure. Comme ça, ta liste grandit en fonction du nombre de dossier, et aucune place n'est gaspillée. Mais l'implémentation est plus compliquée.

Sinon, tu peux mettre counter dans un registre (d5 par exemple), plutôt que d'utiliser un emplacement mémoire. Ton prog ira plus vite, et sera probablement plus petit.

31

Mais tu as raison! Juste un simle link a6,#-200, et il y un pointeur de sécurité pour gérer une liste de 50 adresses!
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

32

Voila maintenant une nouvelle routine (toujours manuelle,grace au prog de Bihi, sinon on est obligé de donner un SYMSTR) qui permet d'afficher tous les repertoires (plutot, pour l'instant, encore sous forme de prog)
 include "ams_c"
 lea foldname(pc),a2
 move.w #2,-(a7)
 pea 0
 jsr SymFIndFirst
 lea 6(a7),a7
foldsearch:
move.l a0,d0
beq nomore
move.b 11(a0),d0
btst #7,d0  ;7e bit à un ==> it's avar!
beq avar

pea (a2)
pea (a0)
jsr strcmp
lea 8(a7),a7

tst.l d0
beq foldfound

avar:
jsr SymFindNext
bra foldsearch

foldfound:
jsr SymFindNext
move.l a0,d0
beq nomore

pea $00000001
pea (a0)
pea foldname  ; Grace à la magie de la routine, sans SYMSTR
jsr DlgMessage
lea 12(a7),a7

bra foldfound

nomore:
rts
foldname: dc.b 'dbz',0
even
folder: dc.b 'repertoire',0
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

33

Voila maintenant ce que j'ai tenté de faire : utiiser ce programme, pour stocker les repertoires dans une pile locale, pointéé par a6, pour ensuite les relire. Mais ca buggue (address error) et les resultats affiches sont loin d'etre ceux attendus. J'ai l'impression qu'il va encore falloir que je fasse de nombreuses expériences

include "ams_c"
lea foldname(pc),a2
link a6,#-200

move.l #-4,d0
clearlist:
cmp.w #-204,d0
beq cleardone
move.l #0,(a6,d0.w)
subq.w #4,d0
bra clearlist
cleardone

move.w #2,-(a7)
pea 0
jsr SymFindFirst
lea 6(a7),a7

foldsearch:
move.l a0,d0
beq nomore
move.b 11(a0),d0
btst #7,d0
beq avar

pea (a2)
pea (a0)
jsr strcmp
lea 8(a7),a7

tst.l d0
beq foldfound
avar:
jsr SymFindNext
bra foldsearch
foldfound:
clr.l d5
varloop:
jsr SymFindNext
move.l a0,d0
beq nomore
move.b 11(a0),d0
bne nomore

move.l (a0),0(a6,d5.w)
subq.w #4,d5
bra foldfound
nomore:
clr.l d5
varread:
move.l 0(a6,d5.w),d0
beq fin
cmp.w #-204,d5
beq fin

pea $00000001
move.l 0(a6,d5.w),-(a7)
pea foldname
jsr DlgMessage
lea 12(a7),a7

subq.w #4,d5
bra varread
fin:
unlk a6
rts
foldname: dc.b 'main',0
even
folder: dc.b 'repertoire',0

En fait, comme j'ai pas beaucoup d'expériences, quels sont les topics que vous me recommandez de lire d'abord? (Y'en a tellement, c'est juste pour gagner un peu de tempsgrin Et vos explications, qui ne concernent que vous, ne sont pas très claires pour moi)
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

34

Si quequ'un pouvait m'aider à corriger mon programme ca m'arrangerait beaucopu, mias je crois que ca vaut peut etre le coup de prendre un grande pause et de lire les docs rassemblées apr Orion
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

35

Oh,je crois qu'on se complique un peu trop la tête. L'idée de départ, c'était de pouvoir lancer des routines comme celles de la VAT.h, tout en passant de simples chaines C ANSI. J'ai une idée que je n'ai pas encorre testée

Si le repertoire est défini comme:
rep: dc.b 0,'main',0

alors le pseudo-code:
rep->a0
permet de renvoyer la chaine C avec 1(a0)<(manipulation de) .b>

et un équivalent de SYMSTR
rep->a0
1->d0
while (a0,d0.w)
d0+1->d0

et alors (a0,d0.w) sera l'adresse du SYMSTR!
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

36

En fait, je trouve que faire un link #-200,a6 est plutôt sale.
Je pensais à allouer au fur et à mesure ton espace sur la pile...
Parce que là tu perde bcp de place si l'utilisateur a peu de fichier et ce n'est pas un code très sûr parce que si un user a plus de 50 dossiers ça risque d'amener des problèmes.

37

Oui mais c'est plus dur à gérer. Je n'ai jamais essayer de coder des fonctions utiliser la pile, j'ai pas compris grand chose de ce que expliquait ZGuide et je ne veux pas prendre de tels risques
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

38

Ben il suffit juste d'empiler tes adresses au fur et à mesure que tu parcoures la vat. Et à la fin, il faut bien tout restaurer, donc pendant que tu parcoures la VAT, tu prends un registre qui enregistre le nombre de données empilées pour savoir quelle taille tu auras à libérer.

39

C'est pas ce que je voulais dire: si tu fais link a6,#-200 Tu n'as qu'a empiler comme tu le dis sur la pile, tout en gardant un pointeur sur ton debut de tableau, et en plus pour restaurer, si tu garde a6 lorsque tu fais unlk a6, c'est TOTAL SECURITE ET TOTAL BONHEUR POUR TOI!grin
(En plus, comme Bihi l'a fait dans la routine de ce topic, tu n'aura pas à restaurer a7, mais juste ton a6 que normallement tu n'auras pas déplacé)

De plus 200 << 16000 <16*1024

topics/955-save-et-restore-du-lcd-dans-un-nostub (post #14)
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

40

Merci de m'avoir mis sur la piste.
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

41

Au fait, autant faire un link #0,a6. Ça revient au même...

42

Non pas 0, justement, c'est fais expres. Si tu fais link a6,#0 (toi tu t'es gouré d'ordre), tu ne fais que la vérouiller, au départ a6 et a7 pointent le meme bloc. Mais si tu fais comme moi, le pointeur de pile n'est plus a7 qui est alors sans importance, mais a6. Simplement a7 est décalé de ta mémoire à allouer.

Comme ca, je continue de déplacer a7 comme avant, et a6 reste mon pointeur tableau durant toute ma manipulation vant le unlk a6
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser

43

Un programme de vérouillage de pile (c'est Bihi qui me l'a appris avec sa routine). Tu pourras remarquer que je ne me suis pas cassé la tete pour les chaines (c'est tout moi ca grin ) ==> 0error,0 warning ... 0 bug!

include "ams_c"
link a6,#0 ; je verouille
pea $00000001
pea msg
pea titre
jsr DlgMessage
; normallemeent il vaudrait mieux mettre lea 12(a7),a7
pea $00000001
pea msg
pea titre
jsr DlgMessage
; normallemeent il vaudrait mieux mettre lea 12(a7),a7
pea $00000001
pea msg
pea titre
jsr DlgMessage
; normallemeent il vaudrait mieux mettre lea 12(a7),a7
unlk a6 ;a6 revenu (ici,n'a pas bougé)? ==>je dévérouille
;(pour ouvrir une porte,la clé doit être dans la serrure, sinon, on peut abimer la porte)
; (et pour terminer le programme, il faut etre rentre chez soi)
rts

msg: dc.b 'un message',0
even
titre: dc.b 'le titre',0
AS: donnons nous les moyens de programmer plus facilement

La solitude, c'est l'occasion de se poser beaucoup de questions que l'on a pas
souvent l'occasion de se poser