Macro: ON_ITEM
#IF (!0<2)
#IF (!0<1)
ON_ITEM '' SEND MSG_NONE
#ELSE
ON_ITEM !1 SEND MSG_NONE
#ENDIF
#ELSE
#IFSAME !1 SEND
ON_ITEM '' !1 !2 !3 !4 !5 !6 !7 !8 !9
#ELSE
#IFSAME !2 SEND
#SET ZG$ !ZG // Increment the item counter
#IFSAME !4 TO OF
#CHECK !6 .
#DATA
#IFDEF !3
#DPUSH !3 // Push the (variable) message
#ELSE
#IFDEF MSG_!3
#DPUSH MSG_!3 // Push the constant message
#ELSE
#DPUSH |CI0
#FREF MSG_!3 !a,0 // Forward fef the message
#ENDIF
#ENDIF
#IFDEF !5
#DPUSH !5 // Push the (expression, var) dest object
#ELSE
//#IFDEF !5.OBJ
// #DPUSH !5.OBJ // Push the global object
//#ELSE
// #DPUSH |CI0
// #FREF !5.OBJ !a,1 // Forward ref the object
//#ENDIF
#IFDEF GET_!5 // if defined as a function
#IF (GET_!5>$40000000) // and an object access method..we will help out
// this is where we can get tricky and use access methods
DPUSH$EXP (!5(current_object))
#ELSE // if defined as a function but not an access method. This is an error
#DPUSH !5 // will generate an Error
#ENDIF
#ELSE // If object name not defined (this is a new block for 12.0)
// 12.0 change. If not defined, this will get pushed as an object expression
// allowing one to not have to use register_object if the object is defined later
// in the file.
DPUSH$EXP (!5(current_object))
#ENDIF
#ENDIF
!A [] OBJ$ITEM_EXEC !1 |VL
#ELSE
#IF (!0 > 3)
#CHECK !4 "TO"
#ENDIF
#IFDEF MSG_!3
!A [] OBJ$ITEM MSG_!3 !1 // Create the item passing name and value.
#ELSE
#IFDEF !3
!A [] OBJ$ITEM !3 !1 // Create the item passing name and value.
#ELSE
!A [] OBJ$ITEM |CI0 !1 // Create the item passing name and value.
#FREF MSG_!3 !a // fix value later with procedure address
#ENDIF
#ENDIF
#ENDIF
#ELSE
#IFSAME !2 BEGIN_PULL_DOWN
#CHECK !3 _R
REGISTER_OBJECT !3
ON_ITEM !1 SEND ACTIVATE_PULL_DOWN TO (!3(CURRENT_OBJECT))
#IFSUB 'END_MENU'
CREATE_MENU !3 SUB_LOCATION !4 !5 !6 !7 !8 !9
#ELSE
#ERROR DFERR_COMP_INVALID_ARGUMENT "BEGIN_PULL_DOWN" REQUIRES MENU_SYSTEM PACKAGE
#ENDIF
#ENDIF
#ENDIF
#ENDIF
#ENDIF