#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