windowsのSDKの中のマクロですが構造体
のメンバへの振り分けをしてるようなのですが
なんとなくでしか理解出来ないです。
どなたか教えていただけないでしょうか

typedef struct tagPOINTS
{
SHORT x;
SHORT y;

} POINTS,

#define MAKEPOINTS(l) (*((POINTS FAR *)&(l)))

上記のMAKEPOINTS(l)というマクロでマウスの現在のx軸y軸をPOINTS構造体
に振り分けてるようなのですが、どうやって振り分けてるのかがわかりません
FAR = farポインタを使ってるので上位と下位のビットでそれぞれに振り分けてるのだろう
とおもっていますが、例えば
POINTS start
start = MAKEPOINTS(0x000f000fL) として
start.xとstart.yは共に15という数字になります。
用は(*((POINTS FAR *)&(l)))の展開のされ方がさっぱりわかりません。
マクロ関数は少しだけなら理解してるつもりですが、このような式を理解
出来るレベルじゃないので、どなたか分かられる人、ご教授願いたいです。