Macro: PROPERTY$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 FIELD
#IFCLASS !2 F // test for file element
#PUSH !h
#SET H$ %!2 // get the fieldnumber of parameter
PROPERTY$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
PROPERTY$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
#IFSAME !1 OF // "of" should have already been processed. This is an error
#ERROR DFERR_COMP_INVALID_MESSAGE_SYNTAX INVALID USE OF 'OF'
#SET ZH$ 4 // 4 means error occurred
#ELSE
// Check that TO is used properly.
#IFSAME !1 TO
#IF (!Zl & 1)
#ELSE
#IF (!Zh=3) // TO already encountered. TOO many Tos
#ERROR DFERR_COMP_INVALID_MESSAGE_SYNTAX TOO MANY 'TO'
#SET ZH$ 4 // 4 means error occurred
#ELSE
#IF (!0=1) // missing param after to
#ERROR DFERR_COMP_INVALID_MESSAGE_SYNTAX NO VALUE FOLLOWING 'TO'
#SET ZH$ 4 // 4 means error occurred
#ELSE
#SET ZH$ 3 // Mark as found a to. May get changed if an error
#IF (!Zh=1) // A GET or ITEM SET without a TO yet
#IF (!0>2) // too many params after the to
#IFSAME !1 FIELD // if FIELD we expect another param
#ELSE
#IFSAME !1 FILE_FIELD // if FILE_FIELD we expect another param
#ELSE
#ERROR DFERR_COMP_INVALID_MESSAGE_SYNTAX TOO MANY PARAMS AFTER 'TO'
#SET ZH$ 4 // 4 means error occurred
#ENDIF
#ENDIF
#ENDIF
#ENDIF
#ENDIF
#ENDIF
#ENDIF
#ELSE
#IFSAME !1 ITEM
#ELSE
#SET ZG$ !ZG
#IFDEF !1
#DPUSH !1
#ELSE
#IFCLASS !1 0123456789ABCDEF
#DPUSH !1
#ELSE
//#IFDEF MSG_!1
// #DPUSH MSG_!1
//#ELSE
// #DPUSH |CI0
// #FREF MSG_!1 !a,!Zg
//#ENDIF
#IFDEF GET_!1 // if defined as a function
// This would support passing of object names as parameters. Not supported
// for now.
#IF (GET_!1>$40000000) // and an object access method..we will help out
// replace simple name with expression syntax
DPUSH$EXP (!1(current_object))
#ELSE // if defined as a function but not an access method. This is an error
#DPUSH !1 // will generate an Error
#ENDIF
#ELSE // If undefined
// this could be msg_!1 but we will call than an error
//#DPUSH !1 // will generate an Error
#IFDEF MSG_!1
#DPUSH MSG_!1
#ELSE
#DPUSH |CI0
#FREF MSG_!1 !a,!Zg
#ENDIF
#ENDIF
#ENDIF
#ENDIF
#ENDIF
#ENDIF
#ENDIF
#IF (!Zh<4) // 4 indicates an error occurred
PROPERTY$HELP !2 !3 !4 !5 !6 !7 !8 !9 // as long as there is still no error
#ENDIF
#ENDIF
#ENDIF
#ELSE
#IF (!Zh<3) // If 1 or 2, TO was never found
#ERROR DFERR_COMP_INVALID_MESSAGE_SYNTAX MISSING 'TO' KEYWORD
#ENDIF
#ENDIF