/* $DOC$
   $TEMPLATE$
      Document
   $NAME$
      Macro compiler
   $CATEGORY$
      Document
   $SUBCATEGORY$
      Compiler
   $DESCRIPTION$
      <b>Invoking the macro compiler:</b>
      ```
      &variable
      ```
      or
      ```
      &( expression )
      ```
      or
      ```
      &variable.text
      ```
   $END$
 */

/* $DOC$
   $TEMPLATE$
      Function
   $NAME$
      hb_SetMacro()
   $CATEGORY$
      API
   $SUBCATEGORY$
      Macro
   $ONELINER$
      Enable/disable the macro compiler runtime features.
   $SYNTAX$
      hb_SetMacro( <nOption>, [<lOnOff>] ) --> lOldSetting
   $ARGUMENTS$
      <nOption> One of the `HB_SM_*` constants defined in set.ch.

      <lOnOff> .T. to enable or .F. to disable a feature
   $RETURNS$
      hb_SetMacro() return the old state of requested feature.
   $DESCRIPTION$
      This function enables or disables some features of the macro
      compiler. The Harbour is extending the macro features compared
      to an original set available in CA-Cl*pper. Enabling/disabling
      some of them allows to keep strict CA-Cl*pper compatibility.

      Available features are:

      `HB_SM_HARBOUR` - enables Harbour extensions:
            operators: `++`, `--`, `+=`, `-=`, `*=`, `/=`, `^=`
            objects: assignments to an instance variable

      `HB_SM_XBASE` - enables other Xbase++ dialects extensions:
            expanding of expressions lists

      `HB_SM_SHORTCUTS` - enables optimized evaluation of
            logical operators (`.AND.`, `.OR.`)

      `HB_SM_PREPROC` - enables preprocessing of commands
            This is meaningful if Harbour is compiled with
            HB_MACRO_STATEMENTS flag

   $EXAMPLES$
      #include "hbmacro.ch"
      INIT PROCEDURE IWANTCLIPPER()
         ? hb_SetMacro( HB_SM_HARBOUR, .F. )
         ? hb_SetMacro( HB_SM_XBASE, .F. )
         RETURN
   $STATUS$
      R
   $COMPLIANCE$
      H
   $PLATFORMS$
      All
   $FILES$
      Header file is set.ch
      Library is core
   $SEEALSO$
      Macro compiler
   $END$
 */
