bon, quelques détails en plus
il y aura un handle central (dont le numéro est pour l'instant stocké à $58) qui est juste une liste de tous les tsr installés :
les éléments de cette liste sont des structures
struct UTSR {
char Size;
char Type;
union {
void* Adress;
struct {
void* Adress;
void* Vector;
void* OldVector;
}
}
}
un 0.w marque la fin de la liste. Le type impose la taille, donc on peut comparer les couples (Size,Type) entre eux.
pour les TSR qui interceptent une interruption (trap ou autoint) et les EV_Hook, un tsr superviseur est installé par la lib, et il va parcourir la liste ci-dessus en appellant tous les TSR utilisateurs correspondant à sa propre interruption, comme si elles étaient des simples fonctions C
void user_tsr(void) (ou
void user_tsr(EVENT *event)). Les tsr utilisateurs et les tsr superviseurs seront dans la liste.
Les adresses ne correspondent pas au début des handles des TSR utilisateurs, et un même handle peut contenir intercepter plusieurs interruptions/EV_hook. L'exportation/importation de fonctions entre TSR sera normalement possible
Il y a même un type "tsr_vide" qui permet qu'un tsr n'interceptent aucune interruption, pour servir uniquement de lib, par exemple.
Naturellement, les TSR superviseurs ne sont installés que s'il y en a besoin