Dans tout le code a6 pointe vers le nom du fichier de clefs a5 pointe vers la jump table a4 pointe vers le nom de la clef a3 pointe vers là où marquer l'erreur a2 pointe vers le d7 est la valeur par défaut (éventuellement un pointeur) d6 est le handle du texte erreurs = 0 pas d'erreur 1 fichier absent 2 clef absente 3 clef invalide 4 mémoire -> texte inchangé 5 mémoire -> texte non archivé 6 création du texte impossible algo add/remove key chercher le fichier verrouiller le handle d6 si clef actuelle == clef cherchée alors faire action (ajouter ou ne rien faire) sinon ajouter la clef au texte déverrouiller le handle d6 swaper les handles supprimer le handle d'origine éventuellement archiver le nouveau handle algo ajouter une clef au texte en cours faire pointer le pointeur de texte à la fin du texte 2(a0) augmenter le handle recopier dans le handle mettre à jour le pointeur de texte 2285 get_file: ;<- a6 nom du fichier à chercher ;-> a0.l SYM_ENTRY du fichier trouvé, d0.w handle du fichier texte trouvé ; = 0 sinon movem.l a1-a2/d1-d3,-(a7) move.w #($2+$4+$8),-(a7) clr.l -(a7) move.l $6C*4(a5),a0;SymFindFirst jsr (a0) addq.l #6,a7 \loop: move.l a0,d0 bne \continue \exit: bsr make_file movem.l (a7)+,a1-a2/d1-d3 rts \continue: move.l a0,a1 move.l a6,a2 moveq #7,d0 \cmp_names: cmp.b (a1)+,(a2)+ bne \skip dbra d0,\cmp_names move.w 12(a0),d0 beq \exit move.w d0,d3 move.l a0,a2 bsr deref moveq #0,d0 move.w (a0)+,d0 cmp.b #$E0,-1(a0,d0.l) bne \skip move.l a2,a0 move.w d3,d0 movem.l (a7)+,a1-a2/d1-d3 rts \skip: move.l $6D*4(a5),a0;SymFindNext jsr (a0) bra \loop make_file: ;<- a6 nom du fichier à chercher ;-> a0.l SYM_ENTRY du fichier trouvé, d0.w handle du fichier texte trouvé ; = 0 sinon (erreur) movem.l a1-a2/d1-d3,-(a7) moveq #10,d0 bsr alloc move.l d0,d3;pas assez de mémoire, mon fils :] beq \error bsr deref move.l #$00050001,(a0)+ move.l #$2000E000,(a0);et hop, un texte vide de fait =) lea \symname(pc),a2 clr.b (a2)+ move.l a6,a0 moveq #7,d0 \loop: move.b (a0)+,(a2)+ beq \skip dbra d0,\loop addq.l #1,a2 \skip: subq.l #1,a2 clr.b (a2) move.l a2,-(a7) move.l $61*4(a5),a0;SymFindMain jsr (a0);le fichier existe déjà, mais on l'avait pas trouvé -> ça doit pas être un texte :[ addq.l #4,a7 tst.w d0 bne \error move.l a2,-(a7) move.l $5D*4(a5),a0;SymAddMain jsr (a0) addq.l #4,a7 tst.l d0 beq \error move.l d0,-(a7) move.l $79*4(a5),a0 jsr (a0) addq.l #4,a7 move.w d3,12(a0) move.w d3,d0 \exit: movem.l (a7)+,a1-a2/d1-d3 rts \error: move.w d3,d0 bsr free moveq #0,d0 suba.l a0,a0 bra \exit \symname: ds.b 10