/*
 * $Id: objfunc.txt 6075 2003-07-13 18:08:15Z alex_degarate $
 */

/*
 * Las siguientes partes son derechos adquiridos de sus autores individuales.
 * www - http://www.harbour-project.org
 *
 * Copyright 2000 Alejandro de Grate <alex_degarate@hotmail.com>
 * Documentacin en Espaol de:
 *                 __objHasData(), __objHasMethod(), __objGetMsgList(),
 *                 __objGetMethodList(), __objGetValueList(),
 *                 __ObjSetValueList(), __objAddMethod(),
 *                 __objAddInline(), __objAddData(), __objModMethod(),
 *                 __objModInline(), __objDelMethod(), __objDelInline(),
 *                 __objDelData(), __objDerivedFrom()
 *
 * Copyright 1999-2000 Chen Kedem <niki@actcom.co.il>
 * Documentacin en Ingles de:
 *                 __objHasData(), __objHasMethod(), __objGetMsgList(),
 *                 __objGetMethodList(), __objGetValueList(),
 *                 __ObjSetValueList(), __objAddMethod(),
 *                 __objAddInline(), __objAddData(), __objModMethod(),
 *                 __objModInline(), __objDelMethod(), __objDelInline(),
 *                 __objDelData(), __objDerivedFrom()
 *
 * Vea doc/license.txt por los trminos de la licencia.
 *
 */

/*  $DOC$
 *  $FUNCNAME$
 *      __objHasData()
 *  $CATEGORY$
 *      Manejo de objetos
 *  $ONELINER$
 *      Determina cuando un smbolo existe en un objeto como DATA
 *  $SYNTAX$
 *      __objHasData( <oObjeto>, <cSimbolo> ) --> lExiste
 *  $ARGUMENTS$
 *      <oObjeto>  es el objeto a inspeccionar
 *
 *      <cSimbolo> es el nombre del smbolo a buscar
 *  $RETURNS$
 *      __objHasData() retorna .T. si el <cSimbolo> dado existe como DATA
 *      (variable de instancia) en el objeto <oObjeto), y .F. si este no
 *      existe.
 *  $DESCRIPTION$
 *      __objHasData() es una funcin de soporte de clases de bajo nivel
 *      que le permite a Ud. encontrar si un smbolo es una variable de
 *      instancia en un objeto dado.
 *  $EXAMPLES$
 *      oB := TBrowseNew( 0, 0, 24, 79 )
 *      ? __objHasData( oB, "nLeft" )      // esto deberia retornar .T.
 *      ? __objHasData( oB, "lBugFree" )   // deberia ser .F.
 *      ? __objHasData( oB, "Left" )       // .F. porque este es un METHOD
 *  </fixed>
 *  $STATUS$
 *      R
 *  $COMPLIANCE$
 *      __objHasData() es una extensin de Harbour.
 *  $FILES$
 *      La librera es rtl
 *  $SEEALSO$
 *      __ObjGetMethodList(),__objGetMsgList(),__objHasMethod()
 *  $END$
 */

/*  $DOC$
 *  $FUNCNAME$
 *      __objHasMethod()
 *  $CATEGORY$
 *      Manejo de objetos
 *  $ONELINER$
 *      Determina cuando un smbolo existe en un objeto como METHOD
 *  $SYNTAX$
 *      __objHasMethod( <oObjeto>, <cSimbolo> ) --> lExist
 *  $ARGUMENTS$
 *      <oObjeto>  es el objeto a inspeccionar
 *
 *      <cSimbolo> es el nombre del smbolo a buscar
 *  $RETURNS$
 *      __objHasMethod() retorna .T. si el <cSimbolo> dado existe como
 *      METHOD (funcin de clase) en el Objeto <oObjeto), o .F. si este
 *      no existe.
 *  $DESCRIPTION$
 *      __objHasMethod() es una funcin de soporte de clases de bajo nivel
 *      que le permite a Ud. encontrar si un smbolo es una funcin de
 *      clase en un Objeto dado.
 *  $EXAMPLES$
 *      oB := TBrowseNew( 0, 0, 24, 79 )
 *      ? __objHasMethod( oB, "nLeft" )      // .F. porque esto es DATA
 *      ? __objHasMethod( oB, "FixBugs" )    // deberia ser .F.
 *      ? __objHasMethod( oB, "Left" )       // esto deberia retornar .T.
 *  </fixed>
 *  $STATUS$
 *      R
 *  $COMPLIANCE$
 *      __objHasMethod() es una extensin de Harbour.
 *  $FILES$
 *      La librera es rtl
 *  $SEEALSO$
 *      __ObjGetMethodList(),__objGetMsgList(),__objHasData()
 *  $END$
 */

/*  $DOC$
 *  $FUNCNAME$
 *      __objGetMsgList()
 *  $CATEGORY$
 *      Manejo de objetos
 *  $ONELINER$
 *      Retorna los nombres de todos los DATA o METHOD para un Objeto dado
 *  $SYNTAX$
 *      __objGetMsgList( <oObjeto>, [<lData>], [nClassType] ) --> aNombres
 *  $ARGUMENTS$
 *      <oObjeto> es un Objeto a inspeccionar
 *
 *      <lData> es un valor lgico opcional que especifica la informacin
 *      a retornar. Un valor .T. instruye a la funcin a devolver una lista
 *      todos los nombres DATA, un valor de .F. instruye a la funcin a
 *      devolver una lista de todos los nombres de METHODos.
 *      El valor por defecto es .T.
 *
 *      <nClassType> es un cdigo numrico opcional para seleccionar cual
 *      tipo de clase se va retornar.
 *      El valor por defecto es HB_MSGLISTALL, retornando la lista entera.
 *  $RETURNS$
 *      __objGetMsgList() devuelve un array de cadenas <aNombres> con los
 *      nombres de todos los DATA o todos los METHOD para un objeto dado.
 *      __objGetMsgList() podra retornar un array vacio, {} si el objeto
 *      dado no contiene la informacin solicitada.
 *  $DESCRIPTION$
 *      __objGetMsgList() es una funcin de soporte de clases de bajo nivel
 *      que le permite a Ud. encontrar todas las variables de instancia o
 *      los nombre de los metodos para un Objeto dado.
 *
 *      Si es es especificada, la siguiente tabla muestra los valores para
 *      <nClassType> que le permiten a Ud. distinguir entre DATA y
 *      CLASSDATA:
 *
 *     <table>
 *      hboo.ch           Valor    Significado
 *
 *      HB_MSGLISTALL      0       Todos los tipos
 *      HB_MSGLISTCLASS    1       CLASSDATA solamente
 *      HB_MSGLISTPURE     2       DATA solamente
 *     </table>
 *
 *      DATA son variables de instancia usables dentro de cada objeto desde
 *      una clase, donde cada Objeto tiene sus propios DATAs.
 *
 *      Las CLASSDATA son compartidas por todos los objetos desde una Clase,
 *      asi el valor cambiado dentro del Objeto1 sera reflejado cuando se
 *      acceda la CLASSDATA desde el Objeto2.
 *  $EXAMPLES$
 *      // Muestra informacin sobre la clase TBrowse
 *      oB := TBrowseNew( 0, 0, 24, 79 )
 *      aData      := __objGetMsgList( oB, .T. )
 *      aClassData := __objGetMsgList( oB, .T., HB_MSGLISTCLASS )
 *      aMethod    := __objGetMsgList( oB, .F. )
 *
 *      FOR i = 1 to len ( aData )
 *          ? "nombre de DATA:", aData[ i ]
 *      NEXT
 *
 *      FOR i = 1 to len ( aClassData )
 *          ? "nombre de CLASSDATA:", aClassData[ i ]
 *      NEXT
 *
 *      FOR i = 1 to len ( aMethod )
 *          ? "nombre de METHOD:", aMethod[ i ]
 *      NEXT
 *  </fixed>
 *  $STATUS$
 *      R
 *  $COMPLIANCE$
 *      __objGetMsgList() es una extensin de Harbour.
 *  $FILES$
 *      El archivo de cabecera es hboo.ch
 *      La librera es rtl
 *  $SEEALSO$
 *      __ObjGetMethodList(),__ObjGetValueList(),__objHasData(),__objHasMethod()
 *  $END$
 */

/*  $DOC$
 *  $FUNCNAME$
 *      __objGetMethodList()
 *  $CATEGORY$
 *      Manejo de objetos
 *  $ONELINER$
 *      Retorna un array con los nombres de todos los METHOD de un Objeto
 *  $SYNTAX$
 *      __objGetMethodList( <oObjeto> ) --> aNombreMetodos
 *  $ARGUMENTS$
 *      <oObjeto> es el objeto a inspeccionar
 *  $RETURNS$
 *      __objGetMethodList() devuelve un array de cadenas <aNombreMetodos>
 *       con los nombres de todos los METHOD para un objeto dado.
 *      __objGetMethodList() podria retornar un array vacio, {} si el
 *      objeto dado no contiene ningun metodo.
 *  $DESCRIPTION$
 *      __objGetMethodList() es una funcin de soporte de clases de bajo
 *      nivel que le permite a Ud. encontrar todos los nombres de las
 *      funciones de clase para un Objeto dado.
 *      Es el equivalente a __objGetMsgList( oObjeto, .F. ).
 *  $EXAMPLES$
 *      // Muestra informacin sobre la clase TBrowse
 *      oB := TBrowseNew( 0, 0, 24, 79 )
 *      aMethod := __objGetMethodList( oB )
 *
 *      FOR i = 1 to len ( aMethod )
 *          ? "METHOD name:", aMethod[ i ]
 *      NEXT
 *  </fixed>
 *  $STATUS$
 *      R
 *  $COMPLIANCE$
 *      __objGetMethodList() es una extensin de Harbour.
 *  $FILES$
 *      La librera es rtl
 *  $SEEALSO$
 *      __objGetMsgList(),__ObjGetValueList(),__objHasData(),__objHasMethod()
 *  $END$
 */

/*  $DOC$
 *  $FUNCNAME$
 *      __objGetValueList()
 *  $CATEGORY$
 *      Manejo de objetos
 *  $ONELINER$
 *      Retorna un array con los nombres de DATA y valores de un Objeto
 *  $SYNTAX$
 *      __objGetValueList( <oObjeto>, [<aExcept>] ) --> aData
 *  $ARGUMENTS$
 *      <oObjeto> es el objeto a inspeccionar
 *
 *      <aExcept> es un array opcional con los nombres de los DATA que Ud.
 *                desea excluir de la inspeccion.
 *  $RETURNS$
 *      __objGetValueList() retorna un array bidimensional que contiene
 *      pares de nombre del smbolo DATA y el valor de DATA.
 *      __objGetValueList() podria retornar un array vacio, {} si el
 *      objeto dado no contiene la informacin solicitada.
 *  $DESCRIPTION$
 *      __objGetValueList() es una funcin de soporte de clases de bajo
 *      nivel que retorna un array con los nombres de DATA y valores.
 *      Cada elemento del array es un par de:
 *             aData[ i, HB_OO_DATA_SYMBOL ] contiene nombre del smbolo
 *             aData[ i, HB_OO_DATA_VALUE  ] contiene el valor de DATA
 *  $EXAMPLES$
 *      // Muestra informacin sobre la clase TBrowse
 *      oB := TBrowseNew( 0, 0, 24, 79 )
 *      aData := __objGetValueList( oB )
 *
 *      FOR i = 1 to len ( aData )
 *          ? "Nombre de DATA:", aData[ i, HB_OO_DATA_SYMBOL ], ;
 *            "        valor =", aData[ i, HB_OO_DATA_VALUE  ]
 *      NEXT
 *  </fixed>
 *  $STATUS$
 *      R
 *  $COMPLIANCE$
 *      __objGetValueList() es una extensin de Harbour.
 *  $FILES$
 *      El archivo de cabecera es hboo.ch
 *      La librera es rtl
 *  $SEEALSO$
 *      __objGetMethodList(),__objGetMsgList(),__objHasData(),__objHasMethod(),__ObjSetValueList()
 *  $END$
 */

/*  $DOC$
 *  $FUNCNAME$
 *      __ObjSetValueList()
 *  $CATEGORY$
 *      Manejo de objetos
 *  $ONELINER$
 *      Establece un Objeto con un array de nombres de DATA y valores
 *  $SYNTAX$
 *      __ObjSetValueList( <oObjeto>, <aData> ) --> oObjeto
 *  $ARGUMENTS$
 *      <oObjeto> es el objeto a establecer
 *
 *      <aData>   es un array bidimensional con un par de variables de
 *                instancia y valores para asignar a aquellas variables.
 *  $RETURNS$
 *      __ObjSetValueList() retorna una referencia a <oObjeto>.
 *  $DESCRIPTION$
 *      __ObjSetValueList() es una funcin de soporte de clases de bajo
 *      nivel que le permite a Ud. establecer un grupo de variables de
 *      instancia con valores.
 *      Cada elemento del array en <aData> es un par de:
 *       aData[ i, HB_OO_DATA_SYMBOL ] contiene nombre de variable a setear
 *       aData[ i, HB_OO_DATA_VALUE  ] contiene el nuevo valor de variable
 *  $EXAMPLES$
 *      // set some TBrowse instance variable
 *      oB := TBrowse():New()
 *      aData := array( 4, 2 )
 *      aData[ 1, HB_OO_DATA_SYMBOL ] = "nTop"
 *      aData[ 1, HB_OO_DATA_VALUE  ] = 1
 *      aData[ 2, HB_OO_DATA_SYMBOL ] = "nLeft"
 *      aData[ 2, HB_OO_DATA_VALUE  ] = 10
 *      aData[ 3, HB_OO_DATA_SYMBOL ] = "nBottom"
 *      aData[ 3, HB_OO_DATA_VALUE  ] = 20
 *      aData[ 4, HB_OO_DATA_SYMBOL ] = "nRight"
 *      aData[ 4, HB_OO_DATA_VALUE  ] = 70
 *      __ObjSetValueList( oB, aData )
 *      ? oB:nTop      // 1
 *      ? oB:nLeft     // 10
 *      ? oB:nBottom   // 20
 *      ? oB:nRight    // 70
 *  </fixed>
 *  $STATUS$
 *      R
 *  $COMPLIANCE$
 *      __ObjSetValueList() es una extensin de Harbour.
 *  $FILES$
 *      El archivo de cabecera es hboo.ch
 *      La librera es rtl
 *  $SEEALSO$
 *      __ObjGetValueList()
 *  $END$
 */

/*  $DOC$
 *  $FUNCNAME$
 *      __objAddMethod()
 *  $CATEGORY$
 *      Manejo de objetos
 *  $ONELINER$
 *      Agrega un METHOD a una clase ya existente
 *  $SYNTAX$
 *      __objAddMethod( <oObjeto>, <cMethodName>, <nFuncPtr> ) --> oObjeto
 *  $ARGUMENTS$
 *      <oObjeto>     es el objeto con el cual se va a trabajar
 *
 *      <cMethodName> es el nombre del smbolo del nuevo METHOD a agregar
 *
 *      <nFuncPtr>    es un puntero a la funcin a asociar con el mtodo
 *  $RETURNS$
 *      __objAddMethod() retorna una referencia a <oObjeto>.
 *  $DESCRIPTION$
 *      __objAddMethod() es una funcin de soporte de clases de bajo
 *      nivel que agrega un nuevo METHOD a un Objeto.
 *
 *      El <oObjeto> permanece sin cambios si el smbolo con el nombre
 *      <cMethodName> ya existe en <oObjeto>.
 *
 *      Note que <nFuncPtr> es un especial puntero a una funcin que fue
 *      creado usando el operador @ , vea un ejemplo a continuacion.
 *  $EXAMPLES$
 *      // crea un nueva clase THappy y le agrega un mtodo Smile
 *      oHappy := HBClass():New( "THappy" )
 *      __objAddMethod( oHappy, "Smile", @MySmile() )
 *      ? oHappy:Smile( 1 )       // :)
 *      ? oHappy:Smile( 2 )       // ;)
 *      ? oHappy:Smile( 3 )       // *SMILE*
 *
 *      STATIC FUNCTION MySmile( nType )
 *      LOCAL cSmile
 *      DO CASE
 *         CASE nType == 1
 *              cSmile := ":)"
 *         CASE nType == 2
 *              cSmile := ";)"
 *         CASE nType == 3
 *              cSmile := "*SMILE*"
 *      ENDCASE
 *      RETURN cSmile
 *  </fixed>
 *  $STATUS$
 *      R
 *  $COMPLIANCE$
 *      __objAddMethod() es una extensin de Harbour.
 *  $FILES$
 *      La librera es rtl
 *  $SEEALSO$
 *      __objAddInline(),__objAddData(),__objDelMethod(),__ObjGetMethodList(),__objGetMsgList(),__objHasMethod(),__objModMethod()
 *  $END$
 */

/*  $DOC$
 *  $FUNCNAME$
 *      __objAddInline()
 *  $CATEGORY$
 *      Manejo de objetos
 *  $ONELINER$
 *      Agrega un INLINE a una clase ya existente
 *  $SYNTAX$
 *      __objAddInline( <oObjeto>, <cInlineName>, <bInline> ) --> oObjeto
 *  $ARGUMENTS$
 *      <oObjeto>     es el objeto con el cual se va a trabajar
 *
 *      <cInlineName> es el nombre del smbolo del nuevo INLINE a agregar
 *
 *      <bInline>     es un codeblock a asociar con el mtodo INLINE
 *  $RETURNS$
 *      __objAddInline() retorna una referencia a <oObjeto>.
 *  $DESCRIPTION$
 *      __objAddInline() es una funcin de soporte de clases de bajo
 *      nivel que agrega un nuevo mtodo INLINE a un Objeto.
 *
 *      El <oObjeto> permanece sin cambios si el smbolo con el nombre
 *      <cInlineName> ya existe en <oObjeto>.
 *  $EXAMPLES$
 *      // crea un nueva clase THappy y le agrega un mtodo INLINE Smile
 *      oHappy  := HBClass():New( "THappy" )
 *      bInline := { | nType | { ":)", ";)", "*SMILE*" }[ nType ] }
 *
 *      __objAddInline( oHappy, "Smile", bInline )
 *
 *      ? oHappy:Smile( 1 )       // :)
 *      ? oHappy:Smile( 2 )       // ;)
 *      ? oHappy:Smile( 3 )       // *SMILE*
 *  </fixed>
 *  $STATUS$
 *      R
 *  $COMPLIANCE$
 *      __objAddInline() es una extensin de Harbour.
 *  $FILES$
 *      La librera es rtl
 *  $SEEALSO$
 *      __objAddData(),__objAddMethod(),__objDelInline(),__ObjGetMethodList(),__objGetMsgList(),__objHasMethod() ,__objModInline()
 *  $END$
 */

/*  $DOC$
 *  $FUNCNAME$
 *      __objAddData()
 *  $CATEGORY$
 *      Manejo de objetos
 *  $ONELINER$
 *      Agrega un DATA a una clase ya existente
 *  $SYNTAX$
 *      __objAddData( <oObjeto>, <cDataName> ) --> oObjeto
 *  $ARGUMENTS$
 *      <oObjeto>   es el objeto con el cual se va a trabajar
 *
 *      <cDataName> es el nombre del smbolo del nuevo DATA a agregar
 *  $RETURNS$
 *      __objAddData() retorna una referencia a <oObjeto>.
 *  $DESCRIPTION$
 *      __objAddData() es una funcin de soporte de clases de bajo
 *      nivel que agrega un nuevo DATA a un Objeto.
 *
 *      El <oObjeto> permanece sin cambios si el smbolo con el nombre
 *      <cDataName> ya existe en <oObjeto>.
 *  $EXAMPLES$
 *      // crea un nueva clase THappy y le agrega un DATA lHappy
 *      oHappy  := HBClass():New( "THappy" )
 *
 *      __objAddData( oHappy, "lHappy" )
 *      oHappy:lHappy := .T.
 *
 *      IF oHappy:lHappy
 *         ? "Happy, Happy, Joy, Joy !!!"
 *      ELSE
 *         ? ":(..."
 *      ENDIF
 *  </fixed>
 *  $STATUS$
 *      R
 *  $COMPLIANCE$
 *      __objAddData() es una extensin de Harbour.
 *  $FILES$
 *      La librera es rtl
 *  $SEEALSO$
 *      __objAddInline(),__objAddMethod(),__objDelData(),__objGetMsgList(),__ObjGetValueList(),__objHasData(),__ObjSetValueList()
 *  $END$
 */

/*  $DOC$
 *  $FUNCNAME$
 *      __objModMethod()
 *  $CATEGORY$
 *      Manejo de objetos
 *  $ONELINER$
 *      Modifica (reemplaza) un METHOD en una clase ya existente
 *  $SYNTAX$
 *      __objModMethod( <oObjeto>, <cMethodName>, <nFuncPtr> ) --> oObjeto
 *  $ARGUMENTS$
 *      <oObjeto>     es el objeto con el cual se va a trabajar
 *
 *      <cMethodName> es el nombre del smbolo del METHOD a modificar
 *
 *      <nFuncPtr>    es un puntero a una nueva funcin a asociar con
 *                    el metodo.
 *  $RETURNS$
 *      __objModMethod() retorna una referencia a <oObjeto>.
 *  $DESCRIPTION$
 *      __objModMethod() es una funcin de soporte de clases de bajo
 *      nivel que modifica un METHOD en un Objeto y lo reemplaza con
 *      una nueva funcin.
 *       El <oObjeto> permanece sin cambios si el smbolo con el nombre
 *      <cMethodName> ya existe en <oObjeto>.
 *      __objModMethod() es usado en el mecanismo de herencia.
 *
 *      Note que <nFuncPtr> es un especial puntero a una funcin que fue
 *      creado usando el operador @ , vea un ejemplo a continuacion.
 *
 *  $EXAMPLES$
 *      // crea un nueva clase THappy y le agrega un mtodo Smile
 *      oHappy := HBClass():New( "THappy" )
 *      __objAddMethod( oHappy, "Smile", @MySmile() )
 *      ? oHappy:Smile( 1 )       // :)
 *      ? oHappy:Smile( 2 )       // ;)
 *
 *      // reemplaza el mtodo Smile con una nueva funcin
 *      __objAddMethod( oHappy, "Smile", @YourSmile() )
 *      ? oHappy:Smile( 1 )       // *SMILE*
 *      ? oHappy:Smile( 2 )       // *WINK*
 *
 *      STATIC FUNCTION MySmile( nType )
 *      LOCAL cSmile
 *      DO CASE
 *         CASE nType == 1
 *              cSmile := ":)"
 *         CASE nType == 2
 *              cSmile := ";)"
 *      ENDCASE
 *      RETURN cSmile
 *
 *      STATIC FUNCTION YourSmile( nType )
 *      LOCAL cSmile
 *      DO CASE
 *         CASE nType == 1
 *              cSmile := "*SMILE*"
 *         CASE nType == 2
 *              cSmile := "*WINK*"
 *      ENDCASE
 *      RETURN cSmile
 *  </fixed>
 *  $STATUS$
 *      R
 *  $COMPLIANCE$
 *      __objModMethod() es una extensin de Harbour.
 *  $FILES$
 *      La librera es rtl
 *  $SEEALSO$
 *      __objAddMethod(),__objDelMethod(),__ObjGetMethodList(),__objGetMsgList(),__objHasMethod()
 *  $END$
 */

/*  $DOC$
 *  $FUNCNAME$
 *      __objModInline()
 *  $CATEGORY$
 *      Manejo de objetos
 *  $ONELINER$
 *      Modifica (reemplaza) un mtodo INLINE en una clase ya existente
 *  $SYNTAX$
 *      __objModInline( <oObjeto>, <cInlineName>, <bInline> ) --> oObjeto
 *  $ARGUMENTS$
 *      <oObjeto>     es el objeto con el cual se va a trabajar
 *
 *      <cInlineName> es el nombre del smbolo del mtodo INLINE a
 *                    modificar.
 *
 *      <bInline>     es un nuevo codeblock a asociar con el mtodo INLINE
 *  $RETURNS$
 *      __objModInline() retorna una referencia a <oObjeto>.
 *  $DESCRIPTION$
 *      __objModInline() es una funcin de soporte de clases de bajo
 *      nivel que modifica un mtodo INLINE en un Objeto y lo reemplaza con
 *      una nuevo bloque de codigo.
 *
 *       El <oObjeto> permanece sin cambios si el smbolo con el nombre
 *      <cInlineName> no existe en <oObjeto>.
 *
 *      __objModInline() es usado en el mecanismo de herencia.
 *  $EXAMPLES$
 *      // crea un nueva clase THappy y le agrega un mtodo INLINE Smile
 *      oHappy  := HBClass():New( "THappy" )
 *      bMyInline   := { | nType | { ":)", ";)" }[ nType ] }
 *      bYourInline := { | nType | { "*SMILE*", "*WINK*" }[ nType ] }
 *
 *      __objAddInline( oHappy, "Smile", bMyInline )
 *      ? oHappy:Smile( 1 )       // :)
 *      ? oHappy:Smile( 2 )       // ;)
 *
 *      // reemplaza el mtodo INLINE Smile con un nuevo codeblock
 *      __objModInline( oHappy, "Smile", bYourInline )
 *      ? oHappy:Smile( 1 )       // *SMILE*
 *      ? oHappy:Smile( 2 )       // *WINK*
 *  </fixed>
 *  $STATUS$
 *      R
 *  $COMPLIANCE$
 *      __objModInline() es una extensin de Harbour.
 *  $FILES$
 *      La librera es rtl
 *  $SEEALSO$
 *      __objAddInline(),__objDelInline(),__ObjGetMethodList(),__objGetMsgList(),__objHasMethod()
 *  $END$
 */

/*  $DOC$
 *  $FUNCNAME$
 *      __objDelMethod()
 *  $CATEGORY$
 *      Manejo de objetos
 *  $ONELINER$
 *      Borra un METHOD de una clase
 *  $SYNTAX$
 *      __objDelMethod( <oObjeto>, <cSimbolo> ) --> oObjeto
 *  $ARGUMENTS$
 *      <oObjeto>  es el objeto con el cual se va a trabajar
 *
 *      <cSimbolo> es el nombre del smbolo del METHOD o del mtodo
 *                 INLINE a ser borrado (removido) del Objeto.
 *  $RETURNS$
 *      __objDelMethod() retorna una referencia a <oObjeto>.
 *  $DESCRIPTION$
 *      __objDelMethod() es una funcin de soporte de clases de bajo nivel
 *      que borra (remueve) un METHOD o un mtodo INLINE de un Objeto.
 *
 *       El <oObjeto> permanece sin cambios si el smbolo con el nombre
 *      <cSimbolo> no existe en <oObjeto>.
 *
 *      __objDelInline() es exactamente la misma que __objDelMethod().
 *  $EXAMPLES$
 *      // crea un nueva clase THappy y le agrega un mtodo Smile
 *      oHappy := HBClass():New( "THappy" )
 *
 *      __objAddMethod( oHappy, "Smile", @MySmile() )
 *      ? __objHasMethod( oHappy, "Smile" )    // .T.
 *
 *      // borra el mtodo Smile
 *      __objDelMethod( oHappy, "Smile" )
 *      ? __objHasMethod( oHappy, "Smile" )    // .F.
 *
 *      STATIC FUNCTION MySmile( nType )
 *      LOCAL cSmile
 *      DO CASE
 *         CASE nType == 1
 *              cSmile := ":)"
 *         CASE nType == 2
 *              cSmile := ";)"
 *      ENDCASE
 *      RETURN cSmile
 *  </fixed>
 *  $STATUS$
 *      R
 *  $COMPLIANCE$
 *      __objDelMethod() es una extensin de Harbour.
 *  $FILES$
 *      La librera es rtl
 *  $SEEALSO$
 *      __objAddInline(),__objAddMethod(),__ObjGetMethodList(),__objGetMsgList(),__objHasMethod(),__objModInline(),__objModMethod()
 *  $END$
 */

/*  $DOC$
 *  $FUNCNAME$
 *      __objDelInline()
 *  $CATEGORY$
 *      Manejo de objetos
 *  $ONELINER$
 *      Borra un METHOD INLINE de una clase
 *  $SYNTAX$
 *      __objDelInline( <oObjeto>, <cSimbolo> ) --> oObjeto
 *  $ARGUMENTS$
 *      <oObjeto>  es el objeto con el cual se va a trabajar
 *
 *      <cSimbolo> es el nombre del smbolo del METHOD o del mtodo
 *                 INLINE a ser borrado (removido) del Objeto.
 *  $RETURNS$
 *      __objDelInMethod() retorna una referencia a <oObjeto>.
 *  $DESCRIPTION$
 *      __objDelInMethod() es una funcin de soporte de clases de bajo nivel
 *      que borra (remueve) un METHOD o un mtodo INLINE de un Objeto.
 *
 *       El <oObjeto> permanece sin cambios si el smbolo con el nombre
 *      <cSimbolo> no existe en <oObjeto>.
 *  $EXAMPLES$
 *      // crea un nueva clase THappy y le agrega un mtodo Smile
 *      oHappy := HBClass():New( "THappy" )
 *      __objAddMethod( oHappy, "Smile", @MySmile() )
 *      ? __objHasMethod( oHappy, "Smile" )    // .T.
 *
 *      // borra el mtodo Smile
 *      __objDelInMethod( oHappy, "Smile" )
 *      ? __objHasMethod( oHappy, "Smile" )    // .F.
 *
 *      STATIC FUNCTION MySmile( nType )
 *      LOCAL cSmile
 *      DO CASE
 *         CASE nType == 1
 *              cSmile := ":)"
 *         CASE nType == 2
 *              cSmile := ";)"
 *      ENDCASE
 *      RETURN cSmile
 *  </fixed>
 *  $STATUS$
 *      R
 *  $COMPLIANCE$
 *      __objDelMethod() es una extensin de Harbour.
 *  $FILES$
 *      La librera es rtl
 *  $SEEALSO$
 *      __objAddInline(),__objAddMethod(),__ObjGetMethodList(),__objGetMsgList(),__objHasMethod(),__objModInline(),__objModMethod()
 *  $END$
 */

/*  $DOC$
 *  $FUNCNAME$
 *      __objDelData()
 *  $CATEGORY$
 *      Manejo de objetos
 *  $ONELINER$
 *      Borra un DATA (variable de instancia) de una clase
 *  $SYNTAX$
 *      __objDelMethod( <oObjeto>, <cDataName> ) --> oObjeto
 *  $ARGUMENTS$
 *      <oObjeto>     es el objeto con el cual se va a trabajar
 *
 *      <cDataName>   es el nombre del smbolo DATA a ser borrado
 *                    (removido) del Objeto.
 *  $RETURNS$
 *      __objDelData() retorna una referencia a <oObjeto>.
 *  $DESCRIPTION$
 *      __objDelData() es una funcin de soporte de clases de bajo nivel
 *      que borra (remueve) un DATA de un Objeto.
 *
 *       El <oObjeto> permanece sin cambios si el smbolo con el nombre
 *      <cDataName> no existe en <oObjeto>.
 *  $EXAMPLES$
 *      // crea un nueva clase THappy y le agrega un DATA lHappy
 *      oHappy  := HBClass():New( "THappy" )
 *
 *      __objAddData( oHappy, "lHappy" )
 *      ? __objHasData( oHappy, "lHappy" )    // .T.
 *
 *      // borra el DATA, lHappy
 *      __objDelData( oHappy, "lHappy" )
 *      ? __objHasData( oHappy, "lHappy" )    // .F.
 *  </fixed>
 *  $STATUS$
 *      R
 *  $COMPLIANCE$
 *      __objDelData() es una extensin de Harbour.
 *  $FILES$
 *      La librera es rtl
 *  $SEEALSO$
 *      __objAddData(),__objGetMsgList(),__ObjGetValueList(),__objHasData(),__ObjSetValueList()
 *  $END$
 */

/*  $DOC$
 *  $FUNCNAME$
 *      __objDerivedFrom()
 *  $CATEGORY$
 *      Manejo de objetos
 *  $ONELINER$
 *      Determina cuando una clase es derivada de otra clase
 *  $SYNTAX$
 *      __objDerivedFrom( <oObjeto>, <xSuper> ) --> lIsParent
 *  $ARGUMENTS$
 *      <oObjeto> es el objeto a inspeccionar
 *
 *      <xSuper>  es el objeto que puede ser un padre. <xSuper> puede
 *                ser o bien un Objeto o una cadena de caracteres con el
 *                nombre de la clase.
 *  $RETURNS$
 *      __objDerivedFrom() retorna un valor logico TRUE (.T.) si el
 *      <oObjeto> es derivado de <xSuper>.
 *  $DESCRIPTION$
 *      __objDerivedFrom() es una funcin de soporte de clases de bajo
 *      nivel que chequea si una clase es una Superclase de la otra, o en
 *      otras palabras si la clase <oObjeto> es una clase hija o
 *      descendiente de <xSuper>.
 *  $EXAMPLES$
 *      // Crea tres clases y chequea sus relaciones
 *
 *      #include "hbclass.ch"
 *      FUNCTION main()
 *         LOCAL oSuper, oObjeto, oDress
 *         oSuper  := TMood():New()
 *         oObjeto := THappy():New()
 *         oDress  := TShirt():New()
 *         ? __objDerivedFrom( oObjeto, oSuper )    // .T.
 *         ? __objDerivedFrom( oSuper, oObjeto )    // .F.
 *         ? __objDerivedFrom( oObjeto, oDress )    // .F.
 *      RETURN NIL
 *
 *      CLASS TMood
 *         METHOD New() INLINE Self
 *      ENDCLASS
 *
 *      CLASS THappy FROM TMood
 *         METHOD Smile() INLINE qout( "*smile*" )
 *      ENDCLASS
 *
 *      CLASS TShirt
 *         DATA Color
 *         DATA Size
 *         METHOD New() INLINE Self
 *      ENDCLASS
 *  </fixed>
 *  $STATUS$
 *      R
 *  $COMPLIANCE$
 *      __objDerivedFrom() es una extensin de Harbour.
 *  $FILES$
 *      La librera es rtl
 *  $SEEALSO$
 *      __objHasData(),__ObjHasMethod()
 *  $END$
 */ 


