Fermer2
FarewellLe 22/09/2009 à 10:19
Ya un truc que je comprends pas avec ce ROM_CALL :
SymDel
;short SymDel (SYM_STR SymName);
SymDel:
	clr.w	-(a7)
	move.l	4+2(a7),-(a7)		; Push SYM_STR
	jsr	SymFindPtr		; Find SYM_ENTRY to delete
	addq.l	#6,a7

;short SymDel_SymEntry(SYM_ENTRY *name);
SymDel_SymEntry_reg:
	move.l	a0,d0
	beq.s	\End
		move.w	SYM_ENTRY.flags(a0),d0
		andi.w	#SF_FOLDER|SF_LOCKED|SF_HIDDEN|SF_INVIEW|SF_ARCHIVED,d0
		bne.s	\End2
			move.w	SYM_ENTRY.hVal(a0),-(a7)	; Push Handle to delete
			jsr	DeleteItem			; Delete SYM_ENTRY
			tst.w	(a7)				; Delete Handle ?
			beq.s	\NoFree
				jsr	HeapFree		; Free Handle
\NoFree			addq.l	#2,a7				
			moveq	#1,d0				; TRUE
\End:	rts
\End2	moveq	#0,d0
	rts

Pourquoi le flag SF_LOCKED est vérifié, alors que la doc dit :
Note that this routine will delete symbols even if they are locked or in use!

Et la doc ne précise pas que le handle associé doit être détruit. C'est comme ça que fait AMS ? Pour moi, c'est une surprise, et à priori EExec est bogué à ce niveau...



Et est-ce que techniquement, ça serait possible d'effacer un fichier archivé ? ie sans avoir à le rebalancer en RAM, ce qui est quand même vachement contraignant, et parfois impossible => on se retrouve avec la situation super intelligente où l'on ne peut pas effacaer un fichier en flash car la RAM est pleine. tritop