Macro: PROPERTY$HELP

Module location: FMAC line 11130 (view source)

  #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