IMPLEMENTATION MODULE Intuition ;

FROM SYSTEM IMPORT ADR, ADDRESS ;
IMPORT M2Lib ;

CONST
  SHIFT5  = 32 ;
  SHIFT11 = 2048 ;

PROCEDURE CUSTOM_HOOK( gadget : GadgetPtr ) : ADDRESS ;
BEGIN RETURN ADDRESS( gadget^.MutualExclude )
END CUSTOM_HOOK ;

PROCEDURE GADGET_BOX( g : GadgetPtr ) : IBoxPtr ;
BEGIN RETURN ADR( g^.LeftEdge )
END GADGET_BOX ;

PROCEDURE IM_BOX( im : ImagePtr ) : IBoxPtr ;
BEGIN RETURN ADR( im^.LeftEdge )
END IM_BOX ;

PROCEDURE IM_FGPEN( im : ImagePtr ) : SHORTCARD ;
BEGIN RETURN im^.PlanePick
END IM_FGPEN ;

PROCEDURE IM_BGPEN( im : ImagePtr ) : SHORTCARD ;
BEGIN RETURN im^.PlaneOnOff
END IM_BGPEN ;

PROCEDURE MENUNUM( n : CARDINAL ) : CARDINAL ;
BEGIN RETURN CARDINAL( BITSET( n ) * BITSET( 01FH ) )
END MENUNUM ;

PROCEDURE ITEMNUM( n : CARDINAL ) : CARDINAL ;
BEGIN RETURN CARDINAL( BITSET( n / SHIFT5 ) * BITSET( 0003FH ) )
END ITEMNUM ;

PROCEDURE SUBNUM( n : CARDINAL ) : CARDINAL ;
BEGIN RETURN CARDINAL( BITSET( n / SHIFT11 ) * BITSET( 0001FH ) )
END SUBNUM ;

PROCEDURE SHIFTMENU( n : CARDINAL ) : CARDINAL ;
BEGIN RETURN CARDINAL( BITSET( n ) * BITSET( 01FH ) )
END SHIFTMENU ;

PROCEDURE SHIFTITEM( n : CARDINAL ) : CARDINAL ;
BEGIN RETURN CARDINAL( BITSET( n ) * BITSET( 03FH ) ) * SHIFT5
END SHIFTITEM ;

PROCEDURE SHIFTSUB( n : CARDINAL ) : CARDINAL ;
BEGIN RETURN CARDINAL( BITSET( n ) * BITSET( 01FH ) ) * SHIFT11
END SHIFTSUB ;

PROCEDURE FULLMENUNUM( menu, item, sub : CARDINAL ) : CARDINAL ;
BEGIN RETURN SHIFTMENU( menu ) + SHIFTITEM( item ) + SHIFTSUB( sub )
END FULLMENUNUM ;

BEGIN IntuitionBase := M2Lib.OpenLib( "intuition.library", VERSION )
END Intuition.
