Macro: SEND$HELP
#IF (!0>0)
// check that none of the params are indicators. We wrap this in an IFLOGICAL because the # test
// also fires on other symbols like EQ
#IFLOGICAL !1
#CHECK !1 _#
#ENDIF
#IFSAME !1 OF TO
#ERROR DFERR_COMP_INVALID_MESSAGE_SYNTAX INVALID POSITION FOR '!1'
#ELSE
#IFSAME !1 FIELD
#IFCLASS !2 F // test for file element
#PUSH !h
#SET H$ %!2 // get the fieldnumber of parameter
SEND$HELP |CI!h !3 !4 !5 !6 !7 !8 !9
#POP H$
#ELSE
#ERROR DFERR_COMP_UNDEFINED_SYMBOL_IN_ARGUMENT UNKNOWN FIELD: !2
#ENDIF
#ELSE
#IFSAME !1 FILE_FIELD
#IFCLASS !2 F // test for file element
#PUSH !h
#PUSH !g
#SET H$ %!2 // get the fieldnumber of parameter
#SET G$ !2 // get the filenumber of parameter
SEND$HELP |CI!g |CI!h !3 !4 !5 !6 !7 !8 !9
#POP G$
#POP H$
#ELSE
#ERROR DFERR_COMP_UNDEFINED_SYMBOL_IN_ARGUMENT UNKNOWN FILE_FIELD: !2
#ENDIF
#ELSE
// As of 10.1 we will support passing of object names as parameters.
#IFDEF !1 // if value is defined, just use it
#DPUSH !1
#ELSE
#IFCLASS !1 0123456789ABCDEF // this allows one to pass hex constants (e.g. $C003, NOENTER)
#DPUSH !1
#ELSE // not defined, see if this is an object, referecne
#IFDEF GET_!1 // if defined as a function and is an object access, use it
#IF (GET_!1>$40000000)
DPUSH$EXP (!1(current_object))
#ELSE
#DPUSH !1 // will generate a symbol not defined error
#ENDIF
#ELSE
#DPUSH !1 // will generate a symbol not defined error
#ENDIF
#ENDIF
#ENDIF
SEND$HELP !2 !3 !4 !5 !6 !7 !8 !9
#ENDIF
#ENDIF
#ENDIF
#ENDIF