6Fermer8
Lionel DebrouxLe 23/06/2008 à 15:20
Dans ce cas-ci, est-ce qu'exécuter un programme depuis un autre est le plus malin ?

J'ai retrouvé la méthode:
extern HANDLE getHSLH(void);
asm("
.text
.globl getHSLH
getHSLH:
move.l 0xC8.w,%a1
move.l 1080(%a1),%a0 | HomeExecute
move.l 708(%a1),%d0 | TE_select
SearchLoop:
addq.l #2,%a0
cmp.l (%a0),%d0
bne.s SearchLoop
move.w -4(%a0),%a0 | pointer to the home text edit structure
move.w 34(%a0),%d0 | have the handle
rts
");

Il reste juste à regarder ce que ça donne sur AMS 2.08+, des fois que TI ait mis la structure qui nous intéresse au-delà de 0x8000...
[EDIT: sur AMS 2.07 et 3.10, je trouve que la structure est à 0x6nnn, donc je suppose que c'est bon.
EDIT2: pas bien, quand on désinline une routine, d'oublier "rts" à la fin de la routine grin]


Cette méthode renvoie un HANDLE. Il suffit d'utiliser HeapDeref dessus, et tu peux écrire une chaîne de caractères à cet endroit.
Naturellement, il ne faut pas écrire une chaîne plus grande que la taille de ce handle. La longueur d'une chaîne s'obtient avec strlen, la taille d'un handle avec HeapSize.