website logo
Auteur
avatar
zzd10h

Forum » » Création-Développement » » Problème de fenêtre en RxMui


Posté : 30-11-2013 01:52 icone du post

Pour la résolution de l'écran, la bonne combine serait de se mettre au C

Blague mise à part, j'avais envoyé ce mail à Tony il y a plus d'un an, je ne sais plus trop pourquoi, certes, pour se ballader dans les structures mémoires en REXX, mais pour quelles fonctions... Pour retrouver les coordonnées Souris ???

Je me sers assez souvent de ces parcours de "data areas" en REXX au boulot sur z/OS (IBM REXX Mainframe Power), prend ce qu'il y a à l'offset 12 et 14 de la structure Screen et cela devrait le faire...

Pour le C, songes-y...

Sinon, merci de me dire si ça t'a servi ou non !
"...
Tu l'as peut-être déjà vu mais toutes les fonctions pour se ballader dans les structures systèmes en?mémoires?(showlist, next, import, c2d, forbid/permit...) sont dans?Using AREXX on the Amiga - Abacus 1992???
?
?
call addlib("rexxsupport.library", 0, -30, 0)
?
do i=0 to 1000
call get_mouse_xy()
end
?
exit

GET_MOUSE_XY: procedure expose mousex mousey
?
/* mets dans "intui" l'addresse de base de la library?Intuition (struct IntuitionBase) */
/* par contre, je ne sais pas trop ce qu'est le "a" à la fin, peut-être pour dire que c'est une adresse (???) */
intui = showlist(l, "intuition.library",, a)??
?
/* plus de multi-tache pour éviter que la liste des screens change pendant qu'on la lit */
call forbid()???????
?
/*?screen = next(intui, 56)?*/
/*?mets dans "screen" l'addresse située?à56?octets?de déplacement(offset 56)?à partir du début d'IntuitionBase, doncActiveScreen ?*/
/* tables des offsets trouvée sur http://amigadev.elowar.com/read/ADCD_2.1/Includes_and_Autodocs_2._ guide/node0551.html? */
/*(je l'ai mise en pièce-jointe pour la conserver) */
/*IntuitionBase:
? $0050??? 80? sizeof(IntuitionBase)
? $0000???? 0? LibNode
??$0022??? 34? ViewLord
? $0034??? 52? ActiveWindow
? $0038????56? ActiveScreen???? (pointe vers une?structure?Screen, voir ci-dessous)
*/
screen = next(intui,?56)???????
?
/* mousex = c2d(import(offset(screen, 18), 2)) */?
/* mets dans mousex et mousey les coord de la souris (j'imagine que ça affichera 1001 fois les coordonnées (i=0 to 1000))*/
/* ces coordonnées sont situées à l'adresse de base de la structure screen (ActiveScreen)?+16 et +18?*/
/* définition de la struct Screen trouvée dans?Amiga C for Advanced Programmers -?ABACUS -?3.2.1.3 p 130 */
/*struct Screen
{
?OxOO 00 struct Screen *NextScreen;
?Ox04 04 struct Window *FirstWindow;
?OxOS 08 SHORT LeftEdge;
?OxOA 10 SHORT TopEdge;
?OxOC 12 SHORT Width;
?OxOE 14 SHORT Height;
?Ox10?16 SHORT MouseY;
?Ox12?18 SHORT MouseX;
?Ox14 20 USHORT Flags;
?Ox16 22 UBYTE *Title; */
?
/*? offset(screen, 18) récupére l'adresse de MouseX contenue à l'offset 18 */
/*? c2d(import(adresse_MouseX,2)) l'import lit 2 octets en mémoire (à l'addresse MouseX) et?"c2d"?transforme ce contenu en char (2 octets car MouseX est SHORT)??*/
mousex = c2d(import(offset(screen, 18), 2)) /* Screen->MouseX */
/* je ne sais pas si c'est valable aussi en REXX mais en C il est dit qu'il ne faut pas faire de print dans un forbid()/permit() */?
say mousex????
mousey = c2d(import(offset(screen, 16), 2)) /* Screen->MouseY */
say mousey
?
/* et on remet le multi-tache */
call permit();
?
return
"
Message édité par : zzd10h / 01-12-2013 11:33

Cet article provient de Le site des utilisateurs francophones actuels et futurs d'AmigaOS 4.x
https://amiga-ng.org/viewtopic.php?topic=1719&forum=14